diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..8997d43 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,14 @@ +.git +*.md +node_modules/ +npm-debug.log +.npmrc +tests/ +Dockerfile* +.dockerignore +.gitignore +LICENSE +.vscode +vendor/ +public/build/ +auth.json diff --git a/.env.example b/.env.example index 45ddda4..61908c1 100644 --- a/.env.example +++ b/.env.example @@ -25,5 +25,11 @@ MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS= +MAIL_FROM_NAME= +# CRM CRM_ENDPOINT= + +# Sentry +SENTRY_LARAVEL_DSN= diff --git a/.gitignore b/.gitignore index 484420b..179bfe8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,24 +1,29 @@ +.env +.env.backup +.env.testing +.env.production +.phpunit.result.cache +.stylelintcache +/.fleet +/.idea +/.phpunit.cache +/.vscode /node_modules +/bootstrap +/public/build +/public/cache /public/hot +/public/sitemap.xml /public/storage -/public/landings/* -!/public/landings/.gitkeep -/public/generation/* -!/public/generation/.gitkeep /public/export/* !/public/export/.gitkeep -/public/coupons/* -!/public/coupons/.gitkeep -/public/images/logos/* -!/public/images/logos/.gitkeep /storage/*.key /vendor -/.idea -/.vscode -/.vagrant +auth.json +docker-compose.override.yml Homestead.json Homestead.yaml npm-debug.log yarn-error.log -.env -.phpunit.result.cache +.npmrc +/tests/coverage diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..88d18e1 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,23 @@ +include: + - project: "ldc-web/shared-ci" + ref: "main" + file: "lint/lint7.3.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "security/security7.3.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "build/build7.3.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "test/test.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "deploy/deploy.yml" + +stages: + - lint + - security + - build + - test + - deploy diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..520028d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,5 @@ +FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/ldcweb-production-7.3:latest +COPY --chown=www-data:www-data . /app/srcs +USER root +RUN chmod -R 755 /app/srcs/storage +USER www-data diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index f0cbcd3..51b5945 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -3,45 +3,49 @@ namespace App\Exceptions; use App\Http\Resources\StatusResource; -use Exception; use Illuminate\Database\Eloquent\ModelNotFoundException; -use Kwaadpepper\ExceptionHandler\Exceptions\ExceptionHandler; -use Illuminate\Http\JsonResponse; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Exception\ResourceNotFoundException; +use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Throwable; class Handler extends ExceptionHandler { + /** + * A list of exception types with their corresponding custom log levels. + * + * @var array, \Psr\Log\LogLevel::*> + */ + protected $levels = []; /** * A list of the exception types that are not reported. * - * @var array + * @var array> */ - protected $dontReport = [ - // - ]; + protected $dontReport = []; /** - * A list of the inputs that are never flashed for validation exceptions. + * A list of the inputs that are never flashed to the session on validation exceptions. * - * @var array + * @var array */ protected $dontFlash = [ + 'current_password', 'password', 'password_confirmation', ]; /** - * Report or log an exception. + * Register the exception handling callbacks for the application. * - * @param \Throwable $exception * @return void */ - public function report(Throwable $exception) + public function register() { - parent::report($exception); + $this->reportable(function (Throwable $e) { + if (app()->bound('sentry')) { + app('sentry')->captureException($e); + } + }); } /** @@ -56,12 +60,7 @@ class Handler extends ExceptionHandler if ($request->wantsJson() && $exception instanceof ModelNotFoundException) { return response()->json(new StatusResource(['status' => 'KO', 'code' => 404, 'message' => 'Resource not found.']), 404); } - - // if ($exception instanceof \ErrorException) { - // $response = response()->view('errors.500', [], 500); - // return $this->toIlluminateResponse($response,$exception); - // } - return parent::render($request, $exception); } + } diff --git a/app/Http/Controllers/CouponController.php b/app/Http/Controllers/CouponController.php index 757acc0..28017e1 100644 --- a/app/Http/Controllers/CouponController.php +++ b/app/Http/Controllers/CouponController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Collection; +use Illuminate\Support\Str; use App\Coupon; use App\Site; use App\Campagne; @@ -54,7 +55,7 @@ class CouponController extends Controller public function create() { $campagnes = Campagne::where('camp_siteId', session()->get('site')->site_id)->get() - ->pluck('camp_name', 'camp_id'); + ->pluck('camp_name', 'camp_id'); $site = Site::where(['id' => session()->get('site')->id])->first(); return view('coupon.create')->with('campagnes', $campagnes)->with('site', $site); @@ -85,8 +86,8 @@ class CouponController extends Controller if ($v->fails()) { return redirect('bo/coupon/' . $coupon->coupon_id . '/edit') - ->withErrors($v) - ->withInput(); + ->withErrors($v) + ->withInput(); } @@ -235,8 +236,8 @@ class CouponController extends Controller if ($v->fails()) { return redirect('bo/coupon/' . $coupon->coupon_id . '/edit') - ->withErrors($v) - ->withInput(); + ->withErrors($v) + ->withInput(); } if (!isset($request->coupon_enablelimitquantity)) { @@ -318,8 +319,9 @@ class CouponController extends Controller foreach ($datas as $key => $item) { if ($key == 'coupon_image' || $key == 'coupon_gs1code' || $key == 'coupon_decoration_image' || $key == 'coupon_logo_image' || (substr($key, 7, 9) == 'thumbnail' && strlen($key) < 18)) { if (isset($item)) { - $path = $item->store('coupons'); - $path = str_replace('public/', '', $path); + /** @var \Illuminate\Http\UploadedFile $item */ + $path = $item->store('modelfiles/coupons', 'public'); + $path = Str::start($path, 'storage/'); $datas->put($key, $path); } else { $datas->put($key, $request->input($key . '_hidden')); diff --git a/app/Lib/Helpers/ExceptionsHelper.php b/app/Lib/Helpers/ExceptionsHelper.php new file mode 100644 index 0000000..30deb54 --- /dev/null +++ b/app/Lib/Helpers/ExceptionsHelper.php @@ -0,0 +1,190 @@ +setModules([]); + $event->setOsContext(null); + + /** @var \Sentry\ExceptionDataBag[] */ + $exceptionBag = []; + foreach ($event->getExceptions() as $exceptionDataBag) { + $exceptionBag[] = self::getAnonymizedSentryException($exceptionDataBag); + } + $event->setExceptions($exceptionBag); + return $event; + } + + /** + * Anonimize Sentry Exception bag + * + * @param \Sentry\ExceptionDataBag $exceptionDataBag + * @return \Sentry\ExceptionDataBag + */ + private static function getAnonymizedSentryException( + \Sentry\ExceptionDataBag $exceptionDataBag + ): \Sentry\ExceptionDataBag { + $exceptionDataBag->setValue(self::getAnonymizedMessage($exceptionDataBag->getValue())); + if ($stackTrace = $exceptionDataBag->getStacktrace()) { + $exceptionDataBag->setStacktrace(self::getAnonymizedSentryStackTrace($stackTrace)); + } + return $exceptionDataBag; + } + + /** + * Anonymise sentry stacktrace + * + * @param \Sentry\Stacktrace $stackTrace + * @return \Sentry\Stacktrace + */ + private static function getAnonymizedSentryStackTrace(\Sentry\Stacktrace $stackTrace): \Sentry\Stacktrace + { + /** @var \Sentry\Frame[] */ + $frames = \array_reverse($stackTrace->getFrames(), true); + $i = \count($frames) - 1; + // * Remove all but keep first (index.php). + while ($i-- > 0) { + $stackTrace->removeFrame(count($stackTrace->getFrames()) - 1); + } + foreach ($frames as $index => $frame) { + $frame->setPostContext([]); + $frame->setPreContext([]); + $frame->setContextLine(''); + $frame->setVars(self::getAnonymizedSentryParams($frame->getVars())); + $stackTrace->addFrame($frame); + if ($index === 0) { + $stackTrace->removeFrame(count($stackTrace->getFrames()) - 1); + } + } + return $stackTrace; + } + + /** + * Get anonymized sentry params + * + * @param mixed[] $params + * @return string[] + */ + private static function getAnonymizedSentryParams(array $params): array + { + foreach ($params as &$param) { + $type = \strtolower(\gettype($param)); + if (\is_string($param)) { + $type = \explode(' ', \trim(strtolower($param)))[0] ?? null; + } + switch (true) { + case $type === 'lambda': + case $type === 'object': + continue 2; + case $type === 'array' and \is_array($param): + $param = sprintf('Array(%d)', \count($param)); + continue 2; + default: + if (\is_numeric($param)) { + $param = \ucfirst($type); + continue 2; + } + if (\is_string($param)) { + $param = sprintf('String(%d)', \strlen($param)); + continue 2; + } + } //end switch + } //end foreach + return $params; + } + + + /** + * Anonymize at least Sql queries + * + * @param string $message + * @return string + */ + public static function getAnonymizedMessage(string $message): string + { + $message = \preg_replace('/^(.*)( \(SQL:.*\))$/', '$1', $message) ?? $message; + if ($sqlPos = \strpos($message, 'to use near')) { + $message = \mb_strcut($message, 0, $sqlPos); + } + return $message; + } + + /** + * Anonymize stack trace + * + * @param \Throwable $e + * @return string + */ + public static function getAnonymizedStackTrace(\Throwable $e): string + { + $projectPath = \realpath(\sprintf('%s/../', \app_path())); + $traceStack = $e->getTrace(); + $traceStr = ''; + $maxStackStage = 0; + foreach ($traceStack as $stackStage => $stack) { + $maxStackStage = $stackStage; + $traceStr .= \sprintf( + '#%s %s(%d): ', + $stackStage, + str_replace($projectPath, '', $stack['file'] ?? ''), + $stack['line'] ?? '' + ); + if (isset($stack['class'])) { + $traceStr .= "{$stack['class']}->{$stack['function']}("; + if (isset($stack['args'])) { + $traceStr .= self::handleArgs($stack); + } + $traceStr .= ")\n"; + } else { + $traceStr .= "{$stack['function']}("; + if (isset($stack['args'])) { + $traceStr .= self::handleArgs($stack); + } + $traceStr .= ")\n"; + } + } //end foreach + $maxStackStage++; + $traceStr .= "#$maxStackStage {main}"; + return $traceStr; + } + + /** + * Handle Args + * + * @param array $stack + * @return string + */ + public static function handleArgs(array $stack): string + { + $traceArgs = ''; + $argsCount = count($stack['args']); + for ($i = 0; $i < $argsCount; $i++) { + $type = \gettype($stack['args'][$i]); + switch ($type) { + case 'object': + $traceArgs .= sprintf('Object(%s)', \get_class($stack['args'][$i])); + break; + case 'array': + $traceArgs .= sprintf('Array(%d)', \count($stack['args'][$i])); + break; + case 'string': + $traceArgs .= sprintf('String(%d)', \strlen($stack['args'][$i])); + break; + default: + $traceArgs .= \gettype($stack['args'][$i]); + } + $traceArgs .= ($i !== ($argsCount - 1) ? ',' : ''); + } + return $traceArgs; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 3b40730..bacdbb5 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -15,10 +15,8 @@ class AppServiceProvider extends ServiceProvider */ public function boot() { - if (config('app.env') !== 'local') { - URL::forceScheme('https'); - } - $this->loadViewsFrom(public_path('/landings'), 'landings'); + URL::forceScheme('https'); + $this->loadViewsFrom(storage_path('app/public/landings'), 'landings'); JsonResource::withoutWrapping(); } diff --git a/app/Traits/GenerateBR.php b/app/Traits/GenerateBR.php index f234ac9..42c55e5 100644 --- a/app/Traits/GenerateBR.php +++ b/app/Traits/GenerateBR.php @@ -15,11 +15,11 @@ trait GenerateBR public function generateBase(Request $request, Coupon $coupon) { putenv('GDFONTPATH=' . public_path() . '/generation/src/'); - $arial = public_path() . '/generation/src/arial.ttf'; - $arialbd = public_path() . '/generation/src/arialbd.ttf'; - $impact = public_path() . '/generation/src/impact.ttf'; - $hand_picture = 'generation/src/hand.png'; - $mask_img = 'generation/src/mask.png'; + $arial = public_path() . '/build/assets/fonts/coupons/arial.ttf'; + $arialbd = public_path() . '/build/assets/fonts/coupons/arialbd.ttf'; + $impact = public_path() . '/build/assets/fonts/coupons/impact.ttf'; + $hand_picture = 'build/assets/images/coupons/hand.png'; + $mask_img = 'build/assets/images/coupons/mask.png'; if (null !== $request->input('site_id')) { $site = Site::where(['id' => $request->input('site_id')])->first(); @@ -197,14 +197,14 @@ trait GenerateBR // ---- Créer le fichier final - imagepng($mask, public_path('generation') . "/" . $coupon->coupon_code . ".png", 9); + imagepng($mask, storage_path('app/public/modelfiles/coupons') . "/" . $coupon->coupon_code . ".png", 9); // ---- Libère la mémoire associée aux images manipulées imagedestroy($logo); imagedestroy($pdt); imagedestroy($mask); - return "generation/" . $coupon->coupon_code . ".png"; + return "storage/modelfiles/coupons/" . $coupon->coupon_code . ".png"; } function imagettftextSp($image, $size, $angle, $x, $y, $color, $font, $text, $spacing = 0) @@ -229,30 +229,29 @@ trait GenerateBR function imagettftext_contour($image, $fontsize, $angle, $x, $y, $color, $font, $text, $color_contour, $contour_haut = 1, $contour_bas = 1, $contour_gauche = 1, $contour_droite = 1) { - $coords_x = array(); + $coords_x = array(); $coords_y = array(); for ($i_y = -$contour_haut; $i_y <= $contour_bas; $i_y++) { - $y_temp = @array_fill(0, $contour_gauche + $contour_droite + 1, $i_y); - $x_temp = array(); + $y_temp = @array_fill(0, $contour_gauche + $contour_droite + 1, $i_y); + $x_temp = array(); for ($i_x = -$contour_gauche; $i_x <= $contour_droite; $i_x++) { - $x_temp[] = $i_x; + $x_temp[] = $i_x; } - $coords_x = array_merge($coords_x, $x_temp); - $coords_y = array_merge($coords_y, $y_temp); + $coords_x = array_merge($coords_x, $x_temp); + $coords_y = array_merge($coords_y, $y_temp); } - $c = count($coords_x); + $c = count($coords_x); for ($i = 0; $i < $c; $i++) { - imagettftext($image, $fontsize, $angle, $x + $coords_x[$i], $y + $coords_y[$i], $color_contour, $font, $text); + imagettftext($image, $fontsize, $angle, $x + $coords_x[$i], $y + $coords_y[$i], $color_contour, $font, $text); } - imagettftext($image, $fontsize, $angle, $x, $y, $color, $font, $text); + imagettftext($image, $fontsize, $angle, $x, $y, $color, $font, $text); } public function printCp($coupon, $contact) { - $arial = public_path() . '/generation/src/arial.ttf'; - $arialbd = public_path() . '/generation/src/arialbd.ttf'; - $impact = public_path() . '/generation/src/impact.ttf'; + $arial = public_path() . '/build/assets/fonts/coupons/arial.ttf'; + $arialbd = public_path() . '/build/assets/fonts/coupons/arialbd.ttf'; // ---- Masque dans lequel l'image finale sera placée $mask = imagecreatefrompng($coupon->coupon_image); @@ -399,9 +398,8 @@ trait GenerateBR // VB 22/04/2021 public function printCoupon(Coupon $coupon, Customers $customer, $crmInfos) { - $arial = public_path() . '/generation/src/arial.ttf'; - $arialbd = public_path() . '/generation/src/arialbd.ttf'; - $impact = public_path() . '/generation/src/impact.ttf'; + $arial = public_path() . '/build/assets/fonts/coupons/arial.ttf'; + $arialbd = public_path() . '/build/assets/fonts/coupons/arialbd.ttf'; // ---- Masque dans lequel l'image finale sera placée $mask = imagecreatefrompng($coupon->coupon_image); diff --git a/composer.json b/composer.json index a7f61b4..c7d1d01 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,10 @@ { "name": "laravel/laravel", "description": "The Laravel Framework.", - "keywords": ["framework", "laravel"], + "keywords": [ + "framework", + "laravel" + ], "license": "MIT", "type": "project", "require": { @@ -11,13 +14,13 @@ "barryvdh/laravel-dompdf": "^0.9.0", "doctrine/dbal": "^2.8", "fideloper/proxy": "^4.0", - "kwaadpepper/exception-handler": "^0.0.8", "laravel/framework": "^8.0", "laravel/tinker": "^2.0", "laravel/ui": "^3.0", "laravelcollective/html": "6.*", "ldc/ldccrmv2client": "^3.0", "picqer/php-barcode-generator": "^0.3.0", + "sentry/sentry-laravel": "^4.13", "szymach/c-pchart": "^3.0", "uxweb/sweet-alert": "^2.0" }, @@ -35,9 +38,8 @@ }, "repositories": [ { - "name": "ldc/ldccrmv2client", - "type": "vcs", - "url": "https://voight001.lesidc.com/crm-client" + "type": "composer", + "url": "https://lab.s-web.fr/api/v4/group/23/-/packages/composer/packages.json" } ], "autoload": { @@ -56,8 +58,7 @@ }, "extra": { "laravel": { - "dont-discover": [ - ] + "dont-discover": [] } }, "scripts": { @@ -75,7 +76,13 @@ "config": { "preferred-install": "dist", "sort-packages": true, - "optimize-autoloader": true + "optimize-autoloader": true, + "gitlab-domains": [ + "lab.s-web.fr" + ], + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + } }, "minimum-stability": "dev", "prefer-stable": true diff --git a/composer.lock b/composer.lock index 2fc49d4..8551bf9 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "363c936cfd0600d398b8d96695423024", + "content-hash": "63e774177dded4012c3cb2d86894b906", "packages": [ { "name": "barryvdh/laravel-dompdf", @@ -27,16 +27,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "0.9-dev" - }, "laravel": { - "providers": [ - "Barryvdh\\DomPDF\\ServiceProvider" - ], "aliases": { "PDF": "Barryvdh\\DomPDF\\Facade" - } + }, + "providers": [ + "Barryvdh\\DomPDF\\ServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "0.9-dev" } }, "autoload": { @@ -133,17 +133,86 @@ "time": "2021-08-15T20:50:18+00:00" }, { - "name": "doctrine/cache", - "version": "2.1.1", + "name": "carbonphp/carbon-doctrine-types", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "3c430083d0b41ceed84ecccf9dac613241d7305d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/3c430083d0b41ceed84ecccf9dac613241d7305d", + "reference": "3c430083d0b41ceed84ecccf9dac613241d7305d", + "shasum": "" + }, + "require": { + "php": "^7.1.8 || ^8.0" + }, + "conflict": { + "doctrine/dbal": ">=3.7.0" + }, + "require-dev": { + "doctrine/dbal": ">=2.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/1.0.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2023-10-01T12:35:29+00:00" + }, + { + "name": "doctrine/cache", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", "shasum": "" }, "require": { @@ -153,18 +222,12 @@ "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^8.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "predis/predis": "~1.0", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", - "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" }, "type": "library", "autoload": { @@ -213,7 +276,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.1.1" + "source": "https://github.com/doctrine/cache/tree/2.2.0" }, "funding": [ { @@ -229,25 +292,25 @@ "type": "tidelift" } ], - "time": "2021-07-17T14:49:29+00:00" + "time": "2022-05-20T20:07:39+00:00" }, { "name": "doctrine/dbal", - "version": "2.13.7", + "version": "2.13.9", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3" + "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/6e22f6012b42d7932674857989fcf184e9e9b1c3", - "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/c480849ca3ad6706a39c970cdfe6888fa8a058b8", + "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8", "shasum": "" }, "require": { "doctrine/cache": "^1.0|^2.0", - "doctrine/deprecations": "^0.5.3", + "doctrine/deprecations": "^0.5.3|^1", "doctrine/event-manager": "^1.0", "ext-pdo": "*", "php": "^7.1 || ^8" @@ -255,13 +318,13 @@ "require-dev": { "doctrine/coding-standard": "9.0.0", "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.3.0", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.11", + "phpstan/phpstan": "1.4.6", + "phpunit/phpunit": "^7.5.20|^8.5|9.5.16", "psalm/plugin-phpunit": "0.16.1", "squizlabs/php_codesniffer": "3.6.2", "symfony/cache": "^4.4", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "4.16.1" + "vimeo/psalm": "4.22.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -322,7 +385,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.13.7" + "source": "https://github.com/doctrine/dbal/tree/2.13.9" }, "funding": [ { @@ -338,29 +401,31 @@ "type": "tidelift" } ], - "time": "2022-01-06T09:08:04+00:00" + "time": "2022-05-02T20:28:55+00:00" }, { "name": "doctrine/deprecations", - "version": "v0.5.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0|^7.0|^8.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "psr/log": "^1.0" + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "1.4.10 || 2.0.3", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -368,7 +433,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -379,43 +444,41 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.4" }, - "time": "2021-03-21T12:59:47+00:00" + "time": "2024-12-07T21:18:45+00:00" }, { "name": "doctrine/event-manager", - "version": "1.1.1", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", "shasum": "" }, "require": { + "doctrine/deprecations": "^0.5.3 || ^1", "php": "^7.1 || ^8.0" }, "conflict": { - "doctrine/common": "<2.9@dev" + "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.8", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.24" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -459,7 +522,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + "source": "https://github.com/doctrine/event-manager/tree/1.2.0" }, "funding": [ { @@ -475,32 +538,32 @@ "type": "tidelift" } ], - "time": "2020-05-29T18:28:51+00:00" + "time": "2022-10-12T20:51:15+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.4", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^4.10" + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" }, "type": "library", "autoload": { @@ -550,7 +613,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.4" + "source": "https://github.com/doctrine/inflector/tree/2.0.10" }, "funding": [ { @@ -566,20 +629,20 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:16:43+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.2", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c" + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", - "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", "shasum": "" }, "require": { @@ -587,7 +650,7 @@ }, "require-dev": { "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "1.3", + "phpstan/phpstan": "^1.3", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "vimeo/psalm": "^4.11" }, @@ -626,7 +689,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.2" + "source": "https://github.com/doctrine/lexer/tree/1.2.3" }, "funding": [ { @@ -642,20 +705,20 @@ "type": "tidelift" } ], - "time": "2022-01-12T08:27:12+00:00" + "time": "2022-02-28T11:07:21+00:00" }, { "name": "dompdf/dompdf", - "version": "v1.2.0", + "version": "v1.2.2", "source": { "type": "git", "url": "https://github.com/dompdf/dompdf.git", - "reference": "60b704331479a69e9bcdb3496da2315b5c4f94fd" + "reference": "5031045d9640b38cfc14aac9667470df09c9e090" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/60b704331479a69e9bcdb3496da2315b5c4f94fd", - "reference": "60b704331479a69e9bcdb3496da2315b5c4f94fd", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/5031045d9640b38cfc14aac9667470df09c9e090", + "reference": "5031045d9640b38cfc14aac9667470df09c9e090", "shasum": "" }, "require": { @@ -666,6 +729,8 @@ "php": "^7.1 || ^8.0" }, "require-dev": { + "ext-json": "*", + "ext-zip": "*", "mockery/mockery": "^1.3", "phpunit/phpunit": "^7.5 || ^8 || ^9", "squizlabs/php_codesniffer": "^3.5" @@ -707,22 +772,22 @@ "homepage": "https://github.com/dompdf/dompdf", "support": { "issues": "https://github.com/dompdf/dompdf/issues", - "source": "https://github.com/dompdf/dompdf/tree/v1.2.0" + "source": "https://github.com/dompdf/dompdf/tree/v1.2.2" }, - "time": "2022-02-07T13:02:10+00:00" + "time": "2022-04-27T13:50:54+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.3.1", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa" + "reference": "8c784d071debd117328803d86b2097615b457500" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa", - "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", "shasum": "" }, "require": { @@ -735,10 +800,14 @@ "require-dev": { "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.0", - "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, "autoload": { "psr-4": { "Cron\\": "src/Cron/" @@ -762,7 +831,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" }, "funding": [ { @@ -770,7 +839,7 @@ "type": "github" } ], - "time": "2022-01-18T15:43:28+00:00" + "time": "2024-10-09T13:47:03+00:00" }, { "name": "egulias/email-validator", @@ -842,16 +911,16 @@ }, { "name": "fideloper/proxy", - "version": "4.4.1", + "version": "4.4.2", "source": { "type": "git", "url": "https://github.com/fideloper/TrustedProxy.git", - "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0" + "reference": "a751f2bc86dd8e6cfef12dc0cbdada82f5a18750" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0", - "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0", + "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/a751f2bc86dd8e6cfef12dc0cbdada82f5a18750", + "reference": "a751f2bc86dd8e6cfef12dc0cbdada82f5a18750", "shasum": "" }, "require": { @@ -861,7 +930,7 @@ "require-dev": { "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0", "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^8.5.8|^9.3.3" }, "type": "library", "extra": { @@ -894,30 +963,30 @@ ], "support": { "issues": "https://github.com/fideloper/TrustedProxy/issues", - "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.1" + "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.2" }, - "time": "2020-10-22T13:48:01+00:00" + "time": "2022-02-09T13:33:34+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.0.4", + "version": "v1.1.3", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "0690bde05318336c7221785f2a932467f98b64ca" + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca", - "reference": "0690bde05318336c7221785f2a932467f98b64ca", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0", - "phpoption/phpoption": "^1.8" + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3" }, "require-dev": { - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "autoload": { @@ -946,7 +1015,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" }, "funding": [ { @@ -958,26 +1027,26 @@ "type": "tidelift" } ], - "time": "2021-11-21T21:41:47+00:00" + "time": "2024-07-20T21:45:45+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.4.1", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -986,10 +1055,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -999,17 +1069,18 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "7.4-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1066,7 +1137,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.1" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -1082,41 +1153,40 @@ "type": "tidelift" } ], - "time": "2021-12-06T18:43:05+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.5-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { "psr-4": { "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1150,7 +1220,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "source": "https://github.com/guzzle/promises/tree/2.0.4" }, "funding": [ { @@ -1166,26 +1236,26 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2024-10-17T10:06:22+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.1.0", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", + "psr/http-message": "^1.1 || ^2.0", "ralouphie/getallheaders": "^3.0" }, "provide": { @@ -1193,17 +1263,18 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.1-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { @@ -1265,7 +1336,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.1.0" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -1281,31 +1352,90 @@ "type": "tidelift" } ], - "time": "2021-10-06T17:43:30+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { - "name": "kwaadpepper/enum", - "version": "2.1.2", + "name": "jean85/pretty-package-versions", + "version": "2.0.6", "source": { "type": "git", - "url": "https://github.com/Kwaadpepper/enum.git", - "reference": "bbd08723895cad5a41bc0d57e565fe64fa13ca41" + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Kwaadpepper/enum/zipball/bbd08723895cad5a41bc0d57e565fe64fa13ca41", - "reference": "bbd08723895cad5a41bc0d57e565fe64fa13ca41", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4", "shasum": "" }, "require": { - "php": "^7.3" + "composer-runtime-api": "^2.0.0", + "php": "^7.1|^8.0" }, "require-dev": { - "orchestra/testbench": "^5", - "phpunit/php-code-coverage": "^9.2", - "phpunit/phpunit": "~9.0", - "slevomat/coding-standard": "^7.0", - "squizlabs/php_codesniffer": "^3.5" + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.5|^8.5|^9.4", + "vimeo/psalm": "^4.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" + }, + "time": "2024-03-08T09:58:59+00:00" + }, + { + "name": "kwaadpepper/enum", + "version": "2.1.3", + "source": { + "type": "git", + "url": "https://github.com/Kwaadpepper/enum.git", + "reference": "cc695e6a07ee57a1220942581c303842e186b22f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Kwaadpepper/enum/zipball/cc695e6a07ee57a1220942581c303842e186b22f", + "reference": "cc695e6a07ee57a1220942581c303842e186b22f", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "orchestra/testbench": "^6", + "phpunit/php-code-coverage": "^9", + "phpunit/phpunit": "~9", + "slevomat/coding-standard": "^7", + "squizlabs/php_codesniffer": "^3" }, "type": "library", "extra": { @@ -1339,83 +1469,22 @@ ], "support": { "issues": "https://github.com/Kwaadpepper/enum/issues", - "source": "https://github.com/Kwaadpepper/enum/tree/2.1.2" + "source": "https://github.com/Kwaadpepper/enum/tree/2.1.3" }, - "time": "2021-11-18T16:52:08+00:00" - }, - { - "name": "kwaadpepper/exception-handler", - "version": "0.0.8", - "source": { - "type": "git", - "url": "https://github.com/Kwaadpepper/exception-handler.git", - "reference": "e8ba0e31ca2bf5971e459c623f0f5322a4c7a630" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Kwaadpepper/exception-handler/zipball/e8ba0e31ca2bf5971e459c623f0f5322a4c7a630", - "reference": "e8ba0e31ca2bf5971e459c623f0f5322a4c7a630", - "shasum": "" - }, - "require": { - "illuminate/support": "~7|~8|~9", - "laravel/framework": "~7|~8|~9" - }, - "require-dev": { - "orchestra/testbench": "^6.13", - "phpunit/phpunit": "~9.0", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Kwaadpepper\\ExceptionHandler\\ExceptionHandlerServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Kwaadpepper\\ExceptionHandler\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jérémy Munsch", - "email": "github@jeremydev.ovh", - "homepage": "https://jeremydev.ovh" - } - ], - "description": "Send emails when exceptions occurs", - "homepage": "https://github.com/kwaadpepper/exception-handler", - "keywords": [ - "email", - "exception", - "laravel", - "policies" - ], - "support": { - "issues": "https://github.com/Kwaadpepper/exception-handler/issues", - "source": "https://github.com/Kwaadpepper/exception-handler/tree/0.0.8" - }, - "time": "2022-02-03T15:23:22+00:00" + "time": "2022-07-28T15:18:54+00:00" }, { "name": "laravel/framework", - "version": "v8.83.0", + "version": "v8.83.29", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "29bc8779103909ebc428478b339ee6fa8703e193" + "reference": "d841a226a50c715431952a10260ba4fac9e91cc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/29bc8779103909ebc428478b339ee6fa8703e193", - "reference": "29bc8779103909ebc428478b339ee6fa8703e193", + "url": "https://api.github.com/repos/laravel/framework/zipball/d841a226a50c715431952a10260ba4fac9e91cc4", + "reference": "d841a226a50c715431952a10260ba4fac9e91cc4", "shasum": "" }, "require": { @@ -1575,29 +1644,31 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-02-08T15:44:51+00:00" + "time": "2024-11-20T15:55:41+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.1.0", + "version": "v1.3.7", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "65c9faf50d567b65d81764a44526545689e3fe63" + "reference": "4f48ade902b94323ca3be7646db16209ec76be3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/65c9faf50d567b65d81764a44526545689e3fe63", - "reference": "65c9faf50d567b65d81764a44526545689e3fe63", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/4f48ade902b94323ca3be7646db16209ec76be3d", + "reference": "4f48ade902b94323ca3be7646db16209ec76be3d", "shasum": "" }, "require": { "php": "^7.3|^8.0" }, "require-dev": { - "pestphp/pest": "^1.18", - "phpstan/phpstan": "^0.12.98", - "symfony/var-dumper": "^5.3" + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "nesbot/carbon": "^2.61|^3.0", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" }, "type": "library", "extra": { @@ -1634,42 +1705,40 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2022-02-01T16:29:39+00:00" + "time": "2024-11-14T18:34:49+00:00" }, { "name": "laravel/tinker", - "version": "v2.7.0", + "version": "v2.10.1", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073" + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/5f2f9815b7631b9f586a3de7933c25f9327d4073", - "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073", + "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^7.2.5|^8.0", - "psy/psysh": "^0.10.4|^0.11.1", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" }, "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", - "phpunit/phpunit": "^8.5.8|^9.3.3" + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, "laravel": { "providers": [ "Laravel\\Tinker\\TinkerServiceProvider" @@ -1700,22 +1769,22 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.7.0" + "source": "https://github.com/laravel/tinker/tree/v2.10.1" }, - "time": "2022-01-10T08:52:49+00:00" + "time": "2025-01-27T14:24:01+00:00" }, { "name": "laravel/ui", - "version": "v3.4.3", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "64a0f43492c00780b2261c56cd7007a4f370d95b" + "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/64a0f43492c00780b2261c56cd7007a4f370d95b", - "reference": "64a0f43492c00780b2261c56cd7007a4f370d95b", + "url": "https://api.github.com/repos/laravel/ui/zipball/65ec5c03f7fee2c8ecae785795b829a15be48c2c", + "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c", "shasum": "" }, "require": { @@ -1730,13 +1799,13 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - }, "laravel": { "providers": [ "Laravel\\Ui\\UiServiceProvider" ] + }, + "branch-alias": { + "dev-master": "3.x-dev" } }, "autoload": { @@ -1761,34 +1830,34 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v3.4.3" + "source": "https://github.com/laravel/ui/tree/v3.4.6" }, - "time": "2022-02-08T14:19:32+00:00" + "time": "2022-05-20T13:38:08+00:00" }, { "name": "laravelcollective/html", - "version": "v6.3.0", + "version": "v6.4.1", "source": { "type": "git", "url": "https://github.com/LaravelCollective/html.git", - "reference": "78c3cb516ac9e6d3d76cad9191f81d217302dea6" + "reference": "64ddfdcaeeb8d332bd98bef442bef81e39c3910b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/78c3cb516ac9e6d3d76cad9191f81d217302dea6", - "reference": "78c3cb516ac9e6d3d76cad9191f81d217302dea6", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/64ddfdcaeeb8d332bd98bef442bef81e39c3910b", + "reference": "64ddfdcaeeb8d332bd98bef442bef81e39c3910b", "shasum": "" }, "require": { - "illuminate/http": "^6.0|^7.0|^8.0|^9.0", - "illuminate/routing": "^6.0|^7.0|^8.0|^9.0", - "illuminate/session": "^6.0|^7.0|^8.0|^9.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0", - "illuminate/view": "^6.0|^7.0|^8.0|^9.0", + "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/routing": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/session": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/view": "^6.0|^7.0|^8.0|^9.0|^10.0", "php": ">=7.2.5" }, "require-dev": { - "illuminate/database": "^6.0|^7.0|^8.0|^9.0", + "illuminate/database": "^6.0|^7.0|^8.0|^9.0|^10.0", "mockery/mockery": "~1.0", "phpunit/phpunit": "~8.5|^9.5.10" }, @@ -1835,15 +1904,22 @@ "issues": "https://github.com/LaravelCollective/html/issues", "source": "https://github.com/LaravelCollective/html" }, - "time": "2022-02-08T21:02:54+00:00" + "abandoned": "spatie/laravel-html", + "time": "2023-04-25T02:46:11+00:00" }, { "name": "ldc/ldccrmv2client", - "version": "3.0.1", + "version": "3.0.6", "source": { "type": "git", - "url": "https://voight001.lesidc.com/crm-client", - "reference": "03501c156e0c18a6d2eaac7b899e9b14f3f2bf79" + "url": "git@lab.s-web.fr:ldc-web/projets/crm-client.git", + "reference": "b08177cbd4f1142e6878dc0b1a4bb445e332849f" + }, + "dist": { + "type": "zip", + "url": "https://lab.s-web.fr/api/v4/projects/26/packages/composer/archives/ldc/ldccrmv2client.zip?sha=b08177cbd4f1142e6878dc0b1a4bb445e332849f", + "reference": "b08177cbd4f1142e6878dc0b1a4bb445e332849f", + "shasum": "" }, "require": { "ext-curl": "^7.3", @@ -1886,8 +1962,7 @@ "Client", "LDC", "Laravel" - ], - "time": "2022-02-10T08:39:51+00:00" + ] }, { "name": "league/commonmark", @@ -1984,16 +2059,16 @@ }, { "name": "league/flysystem", - "version": "1.1.9", + "version": "1.1.10", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99" + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", "shasum": "" }, "require": { @@ -2066,7 +2141,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.9" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" }, "funding": [ { @@ -2074,20 +2149,20 @@ "type": "other" } ], - "time": "2021-12-09T09:40:50+00:00" + "time": "2022-10-04T09:16:37+00:00" }, { "name": "league/mime-type-detection", - "version": "1.9.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69" + "reference": "c7f2872fb273bf493811473dafc88d60ae829f48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/aa70e813a6ad3d1558fc927863d47309b4c23e69", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/c7f2872fb273bf493811473dafc88d60ae829f48", + "reference": "c7f2872fb273bf493811473dafc88d60ae829f48", "shasum": "" }, "require": { @@ -2118,7 +2193,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.9.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.12.0" }, "funding": [ { @@ -2130,20 +2205,20 @@ "type": "tidelift" } ], - "time": "2021-11-21T11:48:40+00:00" + "time": "2023-08-03T07:14:11+00:00" }, { "name": "monolog/monolog", - "version": "2.3.5", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5cf826f2991858b54d5c3809bee745560a1042a7", + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7", "shasum": "" }, "require": { @@ -2156,18 +2231,22 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", - "graylog2/gelf-php": "^1.4.2", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", - "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90@dev", - "swiftmailer/swiftmailer": "^5.3|^6.0" + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.38 || ^9.6.19", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -2182,7 +2261,6 @@ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, @@ -2217,7 +2295,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + "source": "https://github.com/Seldaek/monolog/tree/2.10.0" }, "funding": [ { @@ -2229,38 +2307,45 @@ "type": "tidelift" } ], - "time": "2021-10-01T21:08:31+00:00" + "time": "2024-11-12T12:43:37+00:00" }, { "name": "nesbot/carbon", - "version": "2.56.0", + "version": "2.73.0", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "626ec8cbb724cd3c3400c3ed8f730545b744e3f4" + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/626ec8cbb724cd3c3400c3ed8f730545b744e3f4", - "reference": "626ec8cbb724cd3c3400c3ed8f730545b744e3f4", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", "shasum": "" }, "require": { + "carbonphp/carbon-doctrine-types": "*", "ext-json": "*", "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, + "provide": { + "psr/clock-implementation": "1.0" + }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.0", - "doctrine/orm": "^2.7", + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "<6", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54 || ^1.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.14", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", "squizlabs/php_codesniffer": "^3.4" }, "bin": [ @@ -2268,10 +2353,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" - }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -2281,6 +2362,10 @@ "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" } }, "autoload": { @@ -2317,37 +2402,41 @@ }, "funding": [ { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", "type": "tidelift" } ], - "time": "2022-01-21T17:08:38+00:00" + "time": "2025-01-08T20:10:23+00:00" }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.19.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2", + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -2379,9 +2468,87 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2024-09-29T15:01:53+00:00" + }, + { + "name": "nyholm/psr7", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.8.2" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2024-09-09T07:06:30+00:00" }, { "name": "opis/closure", @@ -2411,12 +2578,12 @@ } }, "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, "files": [ "functions.php" - ] + ], + "psr-4": { + "Opis\\Closure\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2450,23 +2617,23 @@ }, { "name": "phenx/php-font-lib", - "version": "0.5.4", + "version": "0.5.6", "source": { "type": "git", "url": "https://github.com/dompdf/php-font-lib.git", - "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4" + "reference": "a1681e9793040740a405ac5b189275059e2a9863" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/dd448ad1ce34c63d09baccd05415e361300c35b4", - "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4", + "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a1681e9793040740a405ac5b189275059e2a9863", + "reference": "a1681e9793040740a405ac5b189275059e2a9863", "shasum": "" }, "require": { "ext-mbstring": "*" }, "require-dev": { - "symfony/phpunit-bridge": "^3 || ^4 || ^5" + "symfony/phpunit-bridge": "^3 || ^4 || ^5 || ^6" }, "type": "library", "autoload": { @@ -2476,7 +2643,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" + "LGPL-2.1-or-later" ], "authors": [ { @@ -2488,29 +2655,31 @@ "homepage": "https://github.com/PhenX/php-font-lib", "support": { "issues": "https://github.com/dompdf/php-font-lib/issues", - "source": "https://github.com/dompdf/php-font-lib/tree/0.5.4" + "source": "https://github.com/dompdf/php-font-lib/tree/0.5.6" }, - "time": "2021-12-17T19:44:54+00:00" + "time": "2024-01-29T14:45:26+00:00" }, { "name": "phenx/php-svg-lib", - "version": "v0.3.3", + "version": "0.4.1", "source": { "type": "git", - "url": "https://github.com/PhenX/php-svg-lib.git", - "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32" + "url": "https://github.com/dompdf/php-svg-lib.git", + "reference": "4498b5df7b08e8469f0f8279651ea5de9626ed02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", - "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/4498b5df7b08e8469f0f8279651ea5de9626ed02", + "reference": "4498b5df7b08e8469f0f8279651ea5de9626ed02", "shasum": "" }, "require": { - "sabberworm/php-css-parser": "^8.3" + "ext-mbstring": "*", + "php": "^7.1 || ^7.2 || ^7.3 || ^7.4 || ^8.0", + "sabberworm/php-css-parser": "^8.4" }, "require-dev": { - "phpunit/phpunit": "^5.5|^6.5" + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5" }, "type": "library", "autoload": { @@ -2531,36 +2700,40 @@ "description": "A library to read, parse and export to PDF SVG files.", "homepage": "https://github.com/PhenX/php-svg-lib", "support": { - "issues": "https://github.com/PhenX/php-svg-lib/issues", - "source": "https://github.com/PhenX/php-svg-lib/tree/master" + "issues": "https://github.com/dompdf/php-svg-lib/issues", + "source": "https://github.com/dompdf/php-svg-lib/tree/0.4.1" }, - "time": "2019-09-11T20:02:13+00:00" + "time": "2022-03-07T12:52:04+00:00" }, { "name": "phpoption/phpoption", - "version": "1.8.1", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15" + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", - "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -2593,7 +2766,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" }, "funding": [ { @@ -2605,7 +2778,7 @@ "type": "tidelift" } ], - "time": "2021-12-04T23:24:31+00:00" + "time": "2024-07-20T21:41:07+00:00" }, { "name": "picqer/php-barcode-generator", @@ -2680,6 +2853,54 @@ }, "time": "2019-01-12T09:29:34+00:00" }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, { "name": "psr/container", "version": "1.1.1", @@ -2780,21 +3001,21 @@ }, { "name": "psr/http-client", - "version": "1.0.1", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -2814,7 +3035,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP clients", @@ -2826,27 +3047,27 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "source": "https://github.com/php-fig/http-client" }, - "time": "2020-06-29T06:28:15+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -2866,10 +3087,10 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -2881,31 +3102,31 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2019-04-30T12:38:16+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", - "version": "1.0.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2920,7 +3141,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -2934,9 +3155,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/log", @@ -3041,16 +3262,16 @@ }, { "name": "psy/psysh", - "version": "v0.11.1", + "version": "v0.11.22", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "570292577277f06f590635381a7f761a6cf4f026" + "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/570292577277f06f590635381a7f761a6cf4f026", - "reference": "570292577277f06f590635381a7f761a6cf4f026", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/128fa1b608be651999ed9789c95e6e2a31b5802b", + "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b", "shasum": "" }, "require": { @@ -3061,24 +3282,29 @@ "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.05.02" + "bamarni/composer-bin-plugin": "^1.2" }, "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." }, "bin": [ "bin/psysh" ], "type": "library", "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, "branch-alias": { - "dev-main": "0.11.x-dev" + "dev-0.11": "0.11.x-dev" } }, "autoload": { @@ -3110,9 +3336,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.1" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.22" }, - "time": "2022-01-03T13:58:38+00:00" + "time": "2023-10-14T21:56:36+00:00" }, { "name": "ralouphie/getallheaders", @@ -3294,20 +3520,20 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.x-dev" - }, "captainhook": { "force-install": true + }, + "branch-alias": { + "dev-main": "4.x-dev" } }, "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3359,12 +3585,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "Respect\\Stringifier\\": "src/" - }, "files": [ "src/stringify.php" - ] + ], + "psr-4": { + "Respect\\Stringifier\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3461,30 +3687,34 @@ }, { "name": "sabberworm/php-css-parser", - "version": "8.4.0", + "version": "v8.8.0", "source": { "type": "git", - "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", - "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30" + "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git", + "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/e41d2140031d533348b2192a83f02d8dd8a71d30", - "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30", + "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/3de493bdddfd1f051249af725c7e0d2c38fed740", + "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740", "shasum": "" }, "require": { "ext-iconv": "*", - "php": ">=5.6.20" + "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { - "codacy/coverage": "^1.4", - "phpunit/phpunit": "^4.8.36" + "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41" }, "suggest": { "ext-mbstring": "for parsing UTF-8 CSS" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.0.x-dev" + } + }, "autoload": { "psr-4": { "Sabberworm\\CSS\\": "src/" @@ -3497,6 +3727,14 @@ "authors": [ { "name": "Raphael Schweikert" + }, + { + "name": "Oliver Klee", + "email": "github@oliverklee.de" + }, + { + "name": "Jake Hotson", + "email": "jake.github@qzdesign.co.uk" } ], "description": "Parser for CSS Files written in PHP", @@ -3507,10 +3745,188 @@ "stylesheet" ], "support": { - "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", - "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0" + "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues", + "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.8.0" }, - "time": "2021-12-11T13:40:54+00:00" + "time": "2025-03-23T17:59:05+00:00" + }, + { + "name": "sentry/sentry", + "version": "4.10.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php.git", + "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/2af937d47d8aadb8dab0b1d7b9557e495dd12856", + "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "guzzlehttp/psr7": "^1.8.4|^2.1.1", + "jean85/pretty-package-versions": "^1.5|^2.0.4", + "php": "^7.2|^8.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0" + }, + "conflict": { + "raven/raven": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.4", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^1.8.4|^2.1.1", + "monolog/monolog": "^1.6|^2.0|^3.0", + "phpbench/phpbench": "^1.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^8.5|^9.6", + "symfony/phpunit-bridge": "^5.2|^6.0|^7.0", + "vimeo/psalm": "^4.17" + }, + "suggest": { + "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Sentry\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "PHP SDK for Sentry (http://sentry.io)", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "profiling", + "sentry", + "tracing" + ], + "support": { + "issues": "https://github.com/getsentry/sentry-php/issues", + "source": "https://github.com/getsentry/sentry-php/tree/4.10.0" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2024-11-06T07:44:19+00:00" + }, + { + "name": "sentry/sentry-laravel", + "version": "4.13.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-laravel.git", + "reference": "d232ac494258e0d50a77c575a5af5f1a426d3f87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/d232ac494258e0d50a77c575a5af5f1a426d3f87", + "reference": "d232ac494258e0d50a77c575a5af5f1a426d3f87", + "shasum": "" + }, + "require": { + "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0", + "nyholm/psr7": "^1.0", + "php": "^7.2 | ^8.0", + "sentry/sentry": "^4.10", + "symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11", + "guzzlehttp/guzzle": "^7.2", + "laravel/folio": "^1.1", + "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0", + "livewire/livewire": "^2.0 | ^3.0", + "mockery/mockery": "^1.3", + "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.4 | ^9.3 | ^10.4 | ^11.5" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Sentry": "Sentry\\Laravel\\Facade" + }, + "providers": [ + "Sentry\\Laravel\\ServiceProvider", + "Sentry\\Laravel\\Tracing\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-0": { + "Sentry\\Laravel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "Laravel SDK for Sentry (https://sentry.io)", + "homepage": "https://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "laravel", + "log", + "logging", + "profiling", + "sentry", + "tracing" + ], + "support": { + "issues": "https://github.com/getsentry/sentry-laravel/issues", + "source": "https://github.com/getsentry/sentry-laravel/tree/4.13.0" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2025-02-18T10:09:29+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -3590,16 +4006,16 @@ }, { "name": "symfony/console", - "version": "v5.4.3", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8" + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2a86ec353d825c75856c6fd14fac416a7bdb6b8", - "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8", + "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", "shasum": "" }, "require": { @@ -3664,12 +4080,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.3" + "source": "https://github.com/symfony/console/tree/v5.4.47" }, "funding": [ { @@ -3685,20 +4101,20 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:28:35+00:00" + "time": "2024-11-06T11:30:55+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.3", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e" + "reference": "4f7f3c35fba88146b56d0025d20ace3f3901f097" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4f7f3c35fba88146b56d0025d20ace3f3901f097", + "reference": "4f7f3c35fba88146b56d0025d20ace3f3901f097", "shasum": "" }, "require": { @@ -3735,7 +4151,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.3" + "source": "https://github.com/symfony/css-selector/tree/v5.4.45" }, "funding": [ { @@ -3751,20 +4167,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918", "shasum": "" }, "require": { @@ -3772,12 +4188,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3802,7 +4218,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4" }, "funding": [ { @@ -3818,20 +4234,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.3", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5" + "reference": "d19ede7a2cafb386be9486c580649d0f9e3d0363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", - "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/d19ede7a2cafb386be9486c580649d0f9e3d0363", + "reference": "d19ede7a2cafb386be9486c580649d0f9e3d0363", "shasum": "" }, "require": { @@ -3873,7 +4289,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.3" + "source": "https://github.com/symfony/error-handler/tree/v5.4.46" }, "funding": [ { @@ -3889,20 +4305,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-11-05T14:17:06+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.3", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d" + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/72982eb416f61003e9bb6e91f8b3213600dcf9e9", + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9", "shasum": "" }, "require": { @@ -3958,7 +4374,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.45" }, "funding": [ { @@ -3974,20 +4390,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.0", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + "reference": "e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f", + "reference": "e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f", "shasum": "" }, "require": { @@ -3999,12 +4415,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4037,7 +4453,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.4" }, "funding": [ { @@ -4053,20 +4469,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/finder", - "version": "v5.4.3", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" + "reference": "63741784cd7b9967975eec610b256eed3ede022b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b", + "reference": "63741784cd7b9967975eec610b256eed3ede022b", "shasum": "" }, "require": { @@ -4100,7 +4516,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.3" + "source": "https://github.com/symfony/finder/tree/v5.4.45" }, "funding": [ { @@ -4116,20 +4532,20 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:34:36+00:00" + "time": "2024-09-28T13:32:08+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.3", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ef409ff341a565a3663157d4324536746d49a0c7" + "reference": "3f38b8af283b830e1363acd79e5bc3412d055341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ef409ff341a565a3663157d4324536746d49a0c7", - "reference": "ef409ff341a565a3663157d4324536746d49a0c7", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3f38b8af283b830e1363acd79e5bc3412d055341", + "reference": "3f38b8af283b830e1363acd79e5bc3412d055341", "shasum": "" }, "require": { @@ -4139,10 +4555,13 @@ "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "predis/predis": "~1.0", + "predis/predis": "^1.0|^2.0", "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0" + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" }, "suggest": { "symfony/mime": "To use the file extension guesser" @@ -4173,7 +4592,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.3" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.48" }, "funding": [ { @@ -4189,20 +4608,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-11-13T18:58:02+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.4", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "49f40347228c773688a0488feea0175aa7f4d268" + "reference": "c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/49f40347228c773688a0488feea0175aa7f4d268", - "reference": "49f40347228c773688a0488feea0175aa7f4d268", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0", + "reference": "c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0", "shasum": "" }, "require": { @@ -4211,7 +4630,7 @@ "symfony/deprecation-contracts": "^2.1|^3", "symfony/error-handler": "^4.4|^5.0|^6.0", "symfony/event-dispatcher": "^5.0|^6.0", - "symfony/http-foundation": "^5.3.7|^6.0", + "symfony/http-foundation": "^5.4.21|^6.2.7", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16" @@ -4251,6 +4670,7 @@ "symfony/stopwatch": "^4.4|^5.0|^6.0", "symfony/translation": "^4.4|^5.0|^6.0", "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/var-dumper": "^4.4.31|^5.4", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -4285,7 +4705,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.4.4" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.48" }, "funding": [ { @@ -4301,20 +4721,20 @@ "type": "tidelift" } ], - "time": "2022-01-29T18:08:07+00:00" + "time": "2024-11-27T12:43:17+00:00" }, { "name": "symfony/mime", - "version": "v5.4.3", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f" + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/e1503cfb5c9a225350f549d3bb99296f4abfb80f", - "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f", + "url": "https://api.github.com/repos/symfony/mime/zipball/8c1b9b3e5b52981551fc6044539af1d974e39064", + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064", "shasum": "" }, "require": { @@ -4328,15 +4748,17 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" + "symfony/mailer": "<4.4", + "symfony/serializer": "<5.4.35|>=6,<6.3.12|>=6.4,<6.4.3" }, "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", + "egulias/email-validator": "^2.1.10|^3.1|^4", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/process": "^5.4|^6.4", "symfony/property-access": "^4.4|^5.1|^6.0", "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.2|^6.0" + "symfony/serializer": "^5.4.35|~6.3.12|^6.4.3" }, "type": "library", "autoload": { @@ -4368,7 +4790,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.3" + "source": "https://github.com/symfony/mime/tree/v5.4.45" }, "funding": [ { @@ -4384,24 +4806,93 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-10-23T20:18:32+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.24.0", + "name": "symfony/options-resolver", + "version": "v5.4.45", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "url": "https://github.com/symfony/options-resolver.git", + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -4411,21 +4902,18 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4450,7 +4938,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -4466,24 +4954,24 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.24.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40" + "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/48becf00c920479ca2e910c22a5a39e5d47ca956", + "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-iconv": "*" @@ -4493,12 +4981,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4533,7 +5018,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.31.0" }, "funding": [ { @@ -4549,36 +5034,33 @@ "type": "tidelift" } ], - "time": "2022-01-04T09:04:05+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.24.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4614,7 +5096,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -4630,38 +5112,34 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:10:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.24.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4701,7 +5179,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -4717,36 +5195,33 @@ "type": "tidelift" } ], - "time": "2021-09-14T14:02:44+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.24.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4785,7 +5260,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -4801,24 +5276,24 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -4828,21 +5303,18 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4868,7 +5340,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -4884,109 +5356,30 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.24.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.24.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5023,7 +5416,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" }, "funding": [ { @@ -5039,33 +5432,30 @@ "type": "tidelift" } ], - "time": "2021-06-05T21:20:04+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5106,7 +5496,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -5122,33 +5512,30 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:33+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.24.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5185,7 +5572,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -5201,20 +5588,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:11+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v5.4.3", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "553f50487389a977eb31cf6b37faae56da00f753" + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/553f50487389a977eb31cf6b37faae56da00f753", - "reference": "553f50487389a977eb31cf6b37faae56da00f753", + "url": "https://api.github.com/repos/symfony/process/zipball/5d1662fb32ebc94f17ddb8d635454a776066733d", + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d", "shasum": "" }, "require": { @@ -5247,7 +5634,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.3" + "source": "https://github.com/symfony/process/tree/v5.4.47" }, "funding": [ { @@ -5263,20 +5650,109 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:28:35+00:00" + "time": "2024-11-06T11:36:42+00:00" }, { - "name": "symfony/routing", - "version": "v5.4.3", + "name": "symfony/psr-http-message-bridge", + "version": "v2.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "44b29c7a94e867ccde1da604792f11a469958981" + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981", - "reference": "44b29c7a94e867ccde1da604792f11a469958981", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/581ca6067eb62640de5ff08ee1ba6850a0ee472e", + "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/http-message": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/http-foundation": "^5.4 || ^6.0" + }, + "require-dev": { + "nyholm/psr7": "^1.1", + "psr/log": "^1.1 || ^2 || ^3", + "symfony/browser-kit": "^5.4 || ^6.0", + "symfony/config": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/framework-bundle": "^5.4 || ^6.0", + "symfony/http-kernel": "^5.4 || ^6.0", + "symfony/phpunit-bridge": "^6.2" + }, + "suggest": { + "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-main": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "http://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/symfony/psr-http-message-bridge/issues", + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-26T11:53:26+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "dd08c19879a9b37ff14fd30dcbdf99a4cf045db1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/dd08c19879a9b37ff14fd30dcbdf99a4cf045db1", + "reference": "dd08c19879a9b37ff14fd30dcbdf99a4cf045db1", "shasum": "" }, "require": { @@ -5291,7 +5767,7 @@ "symfony/yaml": "<4.4" }, "require-dev": { - "doctrine/annotations": "^1.12", + "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", "symfony/config": "^5.3|^6.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0", @@ -5337,7 +5813,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.3" + "source": "https://github.com/symfony/routing/tree/v5.4.48" }, "funding": [ { @@ -5353,26 +5829,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-11-12T18:20:21+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -5382,12 +5858,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5420,7 +5896,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.4" }, "funding": [ { @@ -5436,20 +5912,20 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/string", - "version": "v5.4.3", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10" + "reference": "136ca7d72f72b599f2631aca474a4f8e26719799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10", + "url": "https://api.github.com/repos/symfony/string/zipball/136ca7d72f72b599f2631aca474a4f8e26719799", + "reference": "136ca7d72f72b599f2631aca474a4f8e26719799", "shasum": "" }, "require": { @@ -5471,12 +5947,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, "files": [ "Resources/functions.php" ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] @@ -5506,7 +5982,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.3" + "source": "https://github.com/symfony/string/tree/v5.4.47" }, "funding": [ { @@ -5522,20 +5998,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-11-10T20:33:58+00:00" }, { "name": "symfony/translation", - "version": "v5.4.3", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a9dd7403232c61e87e27fb306bbcd1627f245d70" + "reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a9dd7403232c61e87e27fb306bbcd1627f245d70", - "reference": "a9dd7403232c61e87e27fb306bbcd1627f245d70", + "url": "https://api.github.com/repos/symfony/translation/zipball/98f26acc99341ca4bab345fb14d7b1d7cb825bed", + "reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed", "shasum": "" }, "require": { @@ -5603,7 +6079,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.3" + "source": "https://github.com/symfony/translation/tree/v5.4.45" }, "funding": [ { @@ -5619,20 +6095,20 @@ "type": "tidelift" } ], - "time": "2022-01-07T00:28:17+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.0", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e" + "reference": "450d4172653f38818657022252f9d81be89ee9a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/450d4172653f38818657022252f9d81be89ee9a8", + "reference": "450d4172653f38818657022252f9d81be89ee9a8", "shasum": "" }, "require": { @@ -5643,12 +6119,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5681,7 +6157,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.4" }, "funding": [ { @@ -5697,20 +6173,20 @@ "type": "tidelift" } ], - "time": "2021-08-17T14:20:01+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.3", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "970a01f208bf895c5f327ba40b72288da43adec4" + "reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/970a01f208bf895c5f327ba40b72288da43adec4", - "reference": "970a01f208bf895c5f327ba40b72288da43adec4", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/42f18f170aa86d612c3559cfb3bd11a375df32c8", + "reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8", "shasum": "" }, "require": { @@ -5719,12 +6195,12 @@ "symfony/polyfill-php80": "^1.16" }, "conflict": { - "phpunit/phpunit": "<5.4.3", "symfony/console": "<4.4" }, "require-dev": { "ext-iconv": "*", "symfony/console": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", "symfony/process": "^4.4|^5.0|^6.0", "symfony/uid": "^5.1|^6.0", "twig/twig": "^2.13|^3.0.4" @@ -5770,7 +6246,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.3" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.48" }, "funding": [ { @@ -5786,25 +6262,25 @@ "type": "tidelift" } ], - "time": "2022-01-17T16:30:37+00:00" + "time": "2024-11-08T15:21:10+00:00" }, { "name": "szymach/c-pchart", - "version": "v3.0.12", + "version": "v3.0.17", "source": { "type": "git", "url": "https://github.com/szymach/c-pchart.git", - "reference": "6e06f3f764210956d9372c787d8ffff0b83706d5" + "reference": "c022568da78f73bb7acf7db7a974934a434d47d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/szymach/c-pchart/zipball/6e06f3f764210956d9372c787d8ffff0b83706d5", - "reference": "6e06f3f764210956d9372c787d8ffff0b83706d5", + "url": "https://api.github.com/repos/szymach/c-pchart/zipball/c022568da78f73bb7acf7db7a974934a434d47d7", + "reference": "c022568da78f73bb7acf7db7a974934a434d47d7", "shasum": "" }, "require": { "ext-gd": "*", - "php": "^5.4|^7.0|8.0.*" + "php": "^5.4|^7.0|^8.0" }, "require-dev": { "codeception/codeception": "^4.1.22", @@ -5816,17 +6292,17 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev", - "2.0": "2.0.x-dev" + "2.0": "2.0.x-dev", + "dev-master": "3.0.x-dev" } }, "autoload": { - "psr-4": { - "CpChart\\": "src/" - }, "files": [ "constants.php" - ] + ], + "psr-4": { + "CpChart\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5855,29 +6331,29 @@ ], "support": { "issues": "https://github.com/szymach/c-pchart/issues", - "source": "https://github.com/szymach/c-pchart/tree/v3.0.12" + "source": "https://github.com/szymach/c-pchart/tree/v3.0.17" }, - "time": "2021-12-01T18:49:19+00:00" + "time": "2023-05-27T11:12:02+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.4", + "version": "v2.2.7", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c" + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" @@ -5908,9 +6384,9 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" }, - "time": "2021-12-08T09:12:39+00:00" + "time": "2023-12-08T13:03:43+00:00" }, { "name": "uxweb/sweet-alert", @@ -5939,21 +6415,21 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "UxWeb\\SweetAlert\\SweetAlertServiceProvider" - ], "aliases": { "Alert": "UxWeb\\SweetAlert\\SweetAlert" - } + }, + "providers": [ + "UxWeb\\SweetAlert\\SweetAlertServiceProvider" + ] } }, "autoload": { - "psr-4": { - "UxWeb\\SweetAlert\\": "src/SweetAlert/" - }, "files": [ "src/SweetAlert/functions.php" - ] + ], + "psr-4": { + "UxWeb\\SweetAlert\\": "src/SweetAlert/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5980,39 +6456,43 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.4.1", + "version": "v5.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" + "graham-campbell/result-type": "^1.1.3", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "suggest": { "ext-filter": "Required to use the boolean validator." }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -6044,7 +6524,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" }, "funding": [ { @@ -6056,7 +6536,7 @@ "type": "tidelift" } ], - "time": "2021-12-12T23:22:04+00:00" + "time": "2024-07-20T21:52:34+00:00" }, { "name": "voku/portable-ascii", @@ -6134,21 +6614,21 @@ }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -6186,53 +6666,52 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.6.7", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "b96f9820aaf1ff9afe945207883149e1c7afb298" + "reference": "3372ed65e6d2039d663ed19aa699956f9d346271" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/b96f9820aaf1ff9afe945207883149e1c7afb298", - "reference": "b96f9820aaf1ff9afe945207883149e1c7afb298", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/3372ed65e6d2039d663ed19aa699956f9d346271", + "reference": "3372ed65e6d2039d663ed19aa699956f9d346271", "shasum": "" }, "require": { - "illuminate/routing": "^6|^7|^8|^9", - "illuminate/session": "^6|^7|^8|^9", - "illuminate/support": "^6|^7|^8|^9", + "illuminate/routing": "^7|^8|^9", + "illuminate/session": "^7|^8|^9", + "illuminate/support": "^7|^8|^9", "maximebf/debugbar": "^1.17.2", - "php": ">=7.2", - "symfony/debug": "^4.3|^5|^6", - "symfony/finder": "^4.3|^5|^6" + "php": ">=7.2.5", + "symfony/finder": "^5|^6" }, "require-dev": { "mockery/mockery": "^1.3.3", - "orchestra/testbench-dusk": "^4|^5|^6|^7", + "orchestra/testbench-dusk": "^5|^6|^7", "phpunit/phpunit": "^8.5|^9.0", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.6-dev" - }, "laravel": { - "providers": [ - "Barryvdh\\Debugbar\\ServiceProvider" - ], "aliases": { "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar" - } + }, + "providers": [ + "Barryvdh\\Debugbar\\ServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.6-dev" } }, "autoload": { @@ -6263,7 +6742,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.6.7" + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.7.0" }, "funding": [ { @@ -6275,28 +6754,28 @@ "type": "github" } ], - "time": "2022-02-09T07:52:32+00:00" + "time": "2022-07-11T09:26:42+00:00" }, { "name": "beyondcode/laravel-dump-server", - "version": "1.7.0", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/beyondcode/laravel-dump-server.git", - "reference": "e27c7b942ab62f6ac7168359393d328ec5215b89" + "reference": "1f2452617afc64e47b3cf49978beb7beeef084df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/e27c7b942ab62f6ac7168359393d328ec5215b89", - "reference": "e27c7b942ab62f6ac7168359393d328ec5215b89", + "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/1f2452617afc64e47b3cf49978beb7beeef084df", + "reference": "1f2452617afc64e47b3cf49978beb7beeef084df", "shasum": "" }, "require": { - "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", - "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", - "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", "php": ">=7.2.5", - "symfony/var-dumper": "^5.0" + "symfony/var-dumper": "^5.0|^6.0" }, "require-dev": { "larapack/dd": "^1.0", @@ -6311,12 +6790,12 @@ } }, "autoload": { - "psr-4": { - "BeyondCode\\DumpServer\\": "src" - }, "files": [ "helpers.php" - ] + ], + "psr-4": { + "BeyondCode\\DumpServer\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6338,9 +6817,9 @@ ], "support": { "issues": "https://github.com/beyondcode/laravel-dump-server/issues", - "source": "https://github.com/beyondcode/laravel-dump-server/tree/1.7.0" + "source": "https://github.com/beyondcode/laravel-dump-server/tree/1.9.0" }, - "time": "2020-12-15T10:57:43+00:00" + "time": "2023-02-15T10:29:26+00:00" }, { "name": "dealerdirect/phpcodesniffer-composer-installer", @@ -6419,29 +6898,30 @@ }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { @@ -6468,7 +6948,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -6484,7 +6964,7 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "facade/ignition-contracts", @@ -6541,26 +7021,26 @@ }, { "name": "filp/whoops", - "version": "2.14.5", + "version": "2.18.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", + "php": "^7.1 || ^8.0", "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -6600,7 +7080,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.14.5" + "source": "https://github.com/filp/whoops/tree/2.18.0" }, "funding": [ { @@ -6608,7 +7088,7 @@ "type": "github" } ], - "time": "2022-01-07T12:00:00+00:00" + "time": "2025-03-15T12:00:00+00:00" }, { "name": "fzaninotto/faker", @@ -6773,25 +7253,28 @@ }, { "name": "maximebf/debugbar", - "version": "v1.17.3", + "version": "v1.23.6", "source": { "type": "git", - "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "e8ac3499af0ea5b440908e06cc0abe5898008b3c" + "url": "https://github.com/php-debugbar/php-debugbar.git", + "reference": "4b3d5f1afe09a7db5a9d3282890f49f6176d6542" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/e8ac3499af0ea5b440908e06cc0abe5898008b3c", - "reference": "e8ac3499af0ea5b440908e06cc0abe5898008b3c", + "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/4b3d5f1afe09a7db5a9d3282890f49f6176d6542", + "reference": "4b3d5f1afe09a7db5a9d3282890f49f6176d6542", "shasum": "" }, "require": { - "php": "^7.1|^8", + "php": "^7.2|^8", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^2.6|^3|^4|^5" + "symfony/var-dumper": "^4|^5|^6|^7" }, "require-dev": { - "phpunit/phpunit": "^7.5.20 || ^9.4.2" + "dbrekelmans/bdi": "^1", + "phpunit/phpunit": "^8|^9", + "symfony/panther": "^1|^2.1", + "twig/twig": "^1.38|^2.7|^3.0" }, "suggest": { "kriswallsmith/assetic": "The best way to manage assets", @@ -6801,7 +7284,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.23-dev" } }, "autoload": { @@ -6831,45 +7314,46 @@ "debugbar" ], "support": { - "issues": "https://github.com/maximebf/php-debugbar/issues", - "source": "https://github.com/maximebf/php-debugbar/tree/v1.17.3" + "issues": "https://github.com/php-debugbar/php-debugbar/issues", + "source": "https://github.com/php-debugbar/php-debugbar/tree/v1.23.6" }, - "time": "2021-10-19T12:33:27+00:00" + "abandoned": "php-debugbar/php-debugbar", + "time": "2025-02-13T12:22:36+00:00" }, { "name": "mockery/mockery", - "version": "1.5.0", + "version": "1.6.12", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac" + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", - "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", "shasum": "" }, "require": { "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "conflict": { "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.3" + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, "autoload": { - "psr-0": { - "Mockery": "library/" + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" } }, "notification-url": "https://packagist.org/downloads/", @@ -6880,12 +7364,20 @@ { "name": "Pádraic Brady", "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" + "homepage": "https://github.com/padraic", + "role": "Author" }, { "name": "Dave Marshall", "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" } ], "description": "Mockery is a simple yet flexible PHP mock object framework", @@ -6903,35 +7395,40 @@ "testing" ], "support": { + "docs": "https://docs.mockery.io/", "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.5.0" + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" }, - "time": "2022-01-20T13:18:17+00:00" + "time": "2024-05-16T03:13:13+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "024473a478be9df5fdaca2c793f2232fe788e414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", + "reference": "024473a478be9df5fdaca2c793f2232fe788e414", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { @@ -6956,7 +7453,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" }, "funding": [ { @@ -6964,7 +7461,7 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2025-02-12T12:17:51+00:00" }, { "name": "nunomaduro/collision", @@ -7055,20 +7552,21 @@ }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -7109,22 +7607,28 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", - "version": "3.1.1", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "15a90844ad40f127afd244c0cad228de2a80052a" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/15a90844ad40f127afd244c0cad228de2a80052a", - "reference": "15a90844ad40f127afd244c0cad228de2a80052a", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -7160,268 +7664,39 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.1" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2022-02-07T21:56:48+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "phpstan/phpdoc-parser", + "version": "1.33.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" - }, - "time": "2022-01-04T19:58:01+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "dbc093d7af60eff5cd575d2ed761b15ed40bd08e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/dbc093d7af60eff5cd575d2ed761b15ed40bd08e", - "reference": "dbc093d7af60eff5cd575d2ed761b15ed40bd08e", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.0", "phpunit/phpunit": "^9.5", "symfony/process": "^5.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { "psr-4": { "PHPStan\\PhpDocParser\\": [ @@ -7436,50 +7711,50 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.2.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" }, - "time": "2021-09-16T20:46:02+00:00" + "time": "2024-10-13T11:25:22+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.10", + "version": "9.2.32", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -7507,7 +7782,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -7515,7 +7791,7 @@ "type": "github" } ], - "time": "2021-12-05T09:12:13+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -7760,55 +8036,50 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.13", + "version": "9.6.22", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "597cb647654ede35e43b137926dfdfef0fb11743" + "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/597cb647654ede35e43b137926dfdfef0fb11743", - "reference": "597cb647654ede35e43b137926dfdfef0fb11743", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c", + "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.5.0 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", + "myclabs/deep-copy": "^1.12.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", - "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-code-coverage": "^9.2.32", + "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -7816,7 +8087,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -7847,7 +8118,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.13" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22" }, "funding": [ { @@ -7857,22 +8129,26 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-01-24T07:33:35+00:00" + "time": "2024-12-05T13:48:26+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { @@ -7907,7 +8183,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { @@ -7915,7 +8191,7 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", @@ -8030,16 +8306,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -8092,7 +8368,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -8100,24 +8376,24 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -8149,7 +8425,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -8157,20 +8433,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { @@ -8215,7 +8491,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -8223,20 +8499,20 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -8278,7 +8554,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -8286,20 +8562,20 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { @@ -8355,7 +8631,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -8363,20 +8639,20 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.4", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "19c519631c5a511b7ed0ad64a6713fdb3fd25fe4" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/19c519631c5a511b7ed0ad64a6713fdb3fd25fe4", - "reference": "19c519631c5a511b7ed0ad64a6713fdb3fd25fe4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { @@ -8419,7 +8695,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.4" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -8427,24 +8703,24 @@ "type": "github" } ], - "time": "2022-02-10T07:01:19+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -8476,7 +8752,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -8484,7 +8760,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -8600,16 +8876,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -8648,10 +8924,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -8659,20 +8935,20 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { @@ -8684,7 +8960,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -8705,8 +8981,7 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" }, "funding": [ { @@ -8714,32 +8989,32 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-03-14T16:00:52+00:00" }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -8762,7 +9037,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -8770,7 +9045,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -8827,32 +9102,32 @@ }, { "name": "slevomat/coding-standard", - "version": "7.0.18", + "version": "7.2.1", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "b81ac84f41a4797dc25c8ede1b0718e2a74be0fc" + "reference": "aff06ae7a84e4534bf6f821dc982a93a5d477c90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/b81ac84f41a4797dc25c8ede1b0718e2a74be0fc", - "reference": "b81ac84f41a4797dc25c8ede1b0718e2a74be0fc", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/aff06ae7a84e4534bf6f821dc982a93a5d477c90", + "reference": "aff06ae7a84e4534bf6f821dc982a93a5d477c90", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", - "php": "^7.1 || ^8.0", - "phpstan/phpdoc-parser": "^1.0.0", - "squizlabs/php_codesniffer": "^3.6.1" + "php": "^7.2 || ^8.0", + "phpstan/phpdoc-parser": "^1.5.1", + "squizlabs/php_codesniffer": "^3.6.2" }, "require-dev": { - "phing/phing": "2.17.0", - "php-parallel-lint/php-parallel-lint": "1.3.1", - "phpstan/phpstan": "1.2.0", + "phing/phing": "2.17.3", + "php-parallel-lint/php-parallel-lint": "1.3.2", + "phpstan/phpstan": "1.4.10|1.7.1", "phpstan/phpstan-deprecation-rules": "1.0.0", - "phpstan/phpstan-phpunit": "1.0.0", - "phpstan/phpstan-strict-rules": "1.1.0", - "phpunit/phpunit": "7.5.20|8.5.21|9.5.10" + "phpstan/phpstan-phpunit": "1.0.0|1.1.1", + "phpstan/phpstan-strict-rules": "1.2.3", + "phpunit/phpunit": "7.5.20|8.5.21|9.5.20" }, "type": "phpcodesniffer-standard", "extra": { @@ -8872,7 +9147,7 @@ "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/7.0.18" + "source": "https://github.com/slevomat/coding-standard/tree/7.2.1" }, "funding": [ { @@ -8884,20 +9159,20 @@ "type": "tidelift" } ], - "time": "2021-12-07T17:19:06+00:00" + "time": "2022-05-25T10:58:12+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.6.2", + "version": "3.12.0", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "2d1b63db139c3c6ea0c927698e5160f8b3b8d630" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/2d1b63db139c3c6ea0c927698e5160f8b3b8d630", + "reference": "2d1b63db139c3c6ea0c927698e5160f8b3b8d630", "shasum": "" }, "require": { @@ -8907,11 +9182,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", "extra": { @@ -8926,102 +9201,62 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", - "standards" + "standards", + "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, - "time": "2021-12-12T21:44:58+00:00" - }, - { - "name": "symfony/debug", - "version": "v4.4.37", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "5de6c6e7f52b364840e53851c126be4d71e60470" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/5de6c6e7f52b364840e53851c126be4d71e60470", - "reference": "5de6c6e7f52b364840e53851c126be4d71e60470", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "^1|^2|^3" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.37" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/PHPCSStandards", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2022-01-02T09:41:36+00:00" + "time": "2025-03-18T05:04:51+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -9050,7 +9285,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -9058,7 +9293,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" } ], "aliases": [], @@ -9072,5 +9307,5 @@ "ext-json": "*" }, "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.3.0" } diff --git a/config/exception-handler.php b/config/exception-handler.php deleted file mode 100644 index e0e1deb..0000000 --- a/config/exception-handler.php +++ /dev/null @@ -1,17 +0,0 @@ - !config('app.debug'), - - /** - * Put a developper secured mailbox in here - * so you can receive email if things go mad - */ - 'contactsList' => [ - 'equipe.web@ldc.fr' - ] -]; diff --git a/config/logging.php b/config/logging.php index c92561a..d48374f 100644 --- a/config/logging.php +++ b/config/logging.php @@ -87,6 +87,22 @@ return [ 'driver' => 'errorlog', 'level' => 'debug', ], + + 'stdout' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDOUT_FORMATTER'), + 'with' => [ + 'stream' => 'php://stdout', + ], + ], + + 'k8s' => [ + 'driver' => 'stack', + 'channels' => ['daily', 'stdout'], + 'ignore_exceptions' => false, + ], ], ]; diff --git a/config/sentry.php b/config/sentry.php new file mode 100644 index 0000000..29627fe --- /dev/null +++ b/config/sentry.php @@ -0,0 +1,61 @@ + env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')), + + // The release version of your application. + // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')). + 'release' => env('SENTRY_RELEASE'), + + // When left empty or `null` the Laravel environment will be used. + 'environment' => env('SENTRY_ENVIRONMENT'), + + 'breadcrumbs' => [ + // Capture Laravel logs in breadcrumbs. + 'logs' => true, + + // Capture SQL queries in breadcrumbs. + 'sql_queries' => true, + + // Capture bindings on SQL queries logged in breadcrumbs. + 'sql_bindings' => false, + + // Capture queue job information in breadcrumbs. + 'queue_info' => true, + + // Capture command information in breadcrumbs. + 'command_info' => true, + ], + + 'tracing' => [ + // Trace queue jobs as their own transactions. + 'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', false), + + // Capture queue jobs as spans when executed on the sync driver. + 'queue_jobs' => true, + + // Capture SQL queries as spans. + 'sql_queries' => true, + + // Try to find out where the SQL query originated from and add it to the query spans. + 'sql_origin' => true, + + // Capture views as spans. + 'views' => true, + + // Indicates if the tracing integrations supplied by Sentry should be loaded. + 'default_integrations' => true, + + // Indicates that requests without a matching route should be traced. + 'missing_routes' => false, + ], + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#send-default-pii. + 'send_default_pii' => env('SENTRY_SEND_DEFAULT_PII', false), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#traces-sample-rate. + 'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float)env('SENTRY_TRACES_SAMPLE_RATE'), + + 'before_send' => [\App\Lib\Helpers\ExceptionsHelper::class, 'sentryEventHandler'], +]; diff --git a/database/migrations/2025_03_26_124019_move_uploaded_files_to_build_folder.php b/database/migrations/2025_03_26_124019_move_uploaded_files_to_build_folder.php new file mode 100644 index 0000000..a149fe4 --- /dev/null +++ b/database/migrations/2025_03_26_124019_move_uploaded_files_to_build_folder.php @@ -0,0 +1,85 @@ +withTrashed()->get(); + foreach ($couponModels as $couponModel) { + $couponModel->coupon_gs1code = self::getUpdatedFilePath($couponModel->coupon_gs1code ?? ''); + $couponModel->coupon_thumbnail1 = self::getUpdatedFilePath($couponModel->coupon_thumbnail1 ?? ''); + $couponModel->coupon_thumbnail2 = self::getUpdatedFilePath($couponModel->coupon_thumbnail2 ?? ''); + $couponModel->coupon_thumbnail3 = self::getUpdatedFilePath($couponModel->coupon_thumbnail3 ?? ''); + $couponModel->coupon_thumbnail4 = self::getUpdatedFilePath($couponModel->coupon_thumbnail4 ?? ''); + $couponModel->coupon_image = self::getUpdatedFilePath($couponModel->coupon_image ?? ''); + $couponModel->coupon_decoration_image = self::getUpdatedFilePath($couponModel->coupon_decoration_image ?? ''); + $couponModel->coupon_logo_image = self::getUpdatedFilePath($couponModel->coupon_logo_image ?? ''); + $couponModel->save(); + } + + $siteModels = Site::query()->get(); + foreach ($siteModels as $siteModel) { + $siteModel->site_logo = self::getUpdatedFilePath($siteModel->site_logo ?? '',); + $siteModel->save(); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $couponModels = Coupon::query()->withTrashed()->get(); + foreach ($couponModels as $couponModel) { + $couponModel->coupon_gs1code = self::getOldFilePath($couponModel->coupon_gs1code ?? ''); + $couponModel->coupon_thumbnail1 = self::getOldFilePath($couponModel->coupon_thumbnail1 ?? ''); + $couponModel->coupon_thumbnail2 = self::getOldFilePath($couponModel->coupon_thumbnail2 ?? ''); + $couponModel->coupon_thumbnail3 = self::getOldFilePath($couponModel->coupon_thumbnail3 ?? ''); + $couponModel->coupon_thumbnail4 = self::getOldFilePath($couponModel->coupon_thumbnail4 ?? ''); + $couponModel->coupon_image = self::getOldFilePath($couponModel->coupon_image ?? ''); + $couponModel->coupon_decoration_image = self::getOldFilePath($couponModel->coupon_decoration_image ?? ''); + $couponModel->coupon_logo_image = self::getOldFilePath($couponModel->coupon_logo_image ?? ''); + $couponModel->save(); + } + + $siteModels = Site::query()->get(); + foreach ($siteModels as $siteModel) { + $siteModel->site_logo = self::getOldFilePath($siteModel->site_logo ?? '',); + $siteModel->save(); + } + } + + /** + * Get the updated file path (with 'storage/modelfiles' instead of folder in public) + * @param string $path + * + * @return string + */ + private static function getUpdatedFilePath(string $path): string + { + return !empty($path) ? Str::start($path, 'storage/modelfiles/') : ''; + } + + /** + * Get the old file path (with 'uploads/images' instead of 'storage/modelfiles') + * @param string $path + * + * @return string + */ + private static function getOldFilePath(string $path): string + { + return Str::replaceFirst('storage/modelfiles/', '', $path); + } +} diff --git a/k8s-queues.sh b/k8s-queues.sh new file mode 100644 index 0000000..76dd2eb --- /dev/null +++ b/k8s-queues.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +# From https://stackoverflow.com/a/76488746/17320077 + +work=true + +function stopQueues() { + echo "Stopping queues..." + work=false + php artisan queue:restart + sleep 45s + exit 0 +} + +# handle graceful shutdown +trap "" SIGPIPE +trap stopQueues EXIT + +echo "Starting PHP queue workers..." + +while $work; do + php artisan queue:work database --queue=default,database --sleep=3 --tries=3 --max-time=3600 --no-interaction + sleep 1 +done + +# Si besoin de plusieurs threads puis terminer par un done sans & +#(while $work; do +# php artisan queue:work --queue="$(grep -oP 'SQS_QUEUE=\K.*' .env)" --no-interaction +# sleep 1 +#done &) diff --git a/manifest.yaml b/manifest.yaml new file mode 100644 index 0000000..7e3f166 --- /dev/null +++ b/manifest.yaml @@ -0,0 +1,177 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: ${CI_PROJECT_PATH_SLUG}-config-map +data: + APP_NAME: "${APP_APP_NAME}" + APP_ENV: "${APP_APP_ENV}" + APP_KEY: "${APP_APP_KEY}" + APP_DEBUG: "${APP_APP_DEBUG}" + APP_URL: "https://${REDIRECT}${APP_DOMAIN}" + LOG_CHANNEL: "k8s" + DB_HOST: "mariadb.common-services" + DB_DATABASE: "${APP_DB_DATABASE}" + DB_USERNAME: "${APP_DB_USERNAME}" + DB_PASSWORD: "${APP_DB_PASSWORD}" + MAIL_HOST: "${APP_MAIL_HOST}" + MAIL_PORT: "${APP_MAIL_PORT}" + MAIL_USERNAME: "${APP_MAIL_USERNAME}" + MAIL_PASSWORD: "${APP_MAIL_PASSWORD}" + MAIL_ENCRYPTION: "${APP_MAIL_ENCRYPTION}" + MAIL_FROM_ADDRESS: "${APP_MAIL_FROM_ADDRESS}" + MAIL_FROM_NAME: "${APP_APP_NAME}" + CRM_ENDPOINT: "${APP_CRM_ENDPOINT}" + SENTRY_LARAVEL_DSN: "${APP_SENTRY_LARAVEL_DSN}" + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: ${CI_PROJECT_PATH_SLUG}-pvc-storage +spec: + storageClassName: "csi-cinder-classic" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: $APP_PVC_SIZE +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ${CI_PROJECT_PATH_SLUG}-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: ${CI_PROJECT_PATH_SLUG}-app + template: + metadata: + labels: + app: ${CI_PROJECT_PATH_SLUG}-app + spec: + containers: + - name: ${CI_PROJECT_PATH_SLUG}-container + image: $IMAGE_TAG + envFrom: + - configMapRef: + name: ${CI_PROJECT_PATH_SLUG}-config-map + volumeMounts: + - name: storage + mountPath: /app/srcs/storage + - name: ${CI_PROJECT_PATH_SLUG}-queue-worker + image: $IMAGE_TAG + lifecycle: + preStop: + exec: + command: + [ + "/bin/sh", + "-c", + "kill -s TERM 1; while test $(ps ax | grep -v grep | grep bash | wc -l) -gt 0; do sleep 2s; done", + ] + resources: + limits: + memory: 512Mi + cpu: "1" + command: + - "bash" + args: + - "k8s-queues.sh" + envFrom: + - configMapRef: + name: ${CI_PROJECT_PATH_SLUG}-config-map + volumeMounts: + - name: storage + mountPath: /app/srcs/storage + imagePullSecrets: + - name: docker-registry-credentials + securityContext: + runAsUser: 33 + runAsGroup: 33 + fsGroup: 33 + fsGroupChangePolicy: "OnRootMismatch" + volumes: + - name: storage + persistentVolumeClaim: + claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage +--- +apiVersion: v1 +kind: Service +metadata: + name: ${CI_PROJECT_PATH_SLUG}-service +spec: + selector: + app: ${CI_PROJECT_PATH_SLUG}-app + ports: + - port: 80 + targetPort: 443 +--- +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: ${CI_PROJECT_PATH_SLUG}-ingress-route +spec: + entryPoints: + - web + - websecure + routes: + - match: Host(`${APP_DOMAIN}`) || Host(`www.${APP_DOMAIN}`) + kind: Rule + services: + - name: ${CI_PROJECT_PATH_SLUG}-service + port: 80 + middlewares: + - name: redirect-no-www-to-www + tls: + secretName: ${CRT_TLS_NAME} +--- +apiVersion: batch/v1 +kind: CronJob +metadata: + name: ${CI_PROJECT_PATH_SLUG}-cronjob +spec: + schedule: "* * * * *" + concurrencyPolicy: Forbid + jobTemplate: + spec: + template: + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: app + operator: In + values: + - ${CI_PROJECT_PATH_SLUG}-app + topologyKey: "kubernetes.io/hostname" + namespaces: [$KUBE_NAMESPACE] + containers: + - name: ${CI_PROJECT_PATH_SLUG}-scheduled + image: $IMAGE_TAG + imagePullPolicy: IfNotPresent + command: + - "php" + args: + - "artisan" + - "schedule:run" + envFrom: + - configMapRef: + name: ${CI_PROJECT_PATH_SLUG}-config-map + volumeMounts: + - name: storage + mountPath: /app/srcs/storage + imagePullSecrets: + - name: docker-registry-credentials + volumes: + - name: storage + persistentVolumeClaim: + claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage + securityContext: + runAsUser: 33 + runAsGroup: 33 + fsGroup: 33 + fsGroupChangePolicy: "OnRootMismatch" + restartPolicy: OnFailure diff --git a/package-lock.json b/package-lock.json index f039101..c7e27c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1434 +1,14746 @@ { + "name": "srcs", + "lockfileVersion": 2, "requires": true, - "lockfileVersion": 1, - "dependencies": { - "abbrev": { + "packages": { + "": { + "devDependencies": { + "axios": "^1.8.4", + "bootstrap": "^4.0.0", + "clean-webpack-plugin": "^4.0.0", + "eslint": "^9.23.0", + "eslint-webpack-plugin": "^5.0.0", + "jquery": "^3.2", + "laravel-mix": "^6.0", + "laravel-mix-clean": "^0.1.0", + "laravel-mix-eslint": "^0.2.0", + "laravel-mix-polyfill": "^3.0.1", + "laravel-mix-stylelint": "^1.0.0", + "lodash": "^4.17.5", + "popper.js": "^1.12", + "resolve-url-loader": "^5.0.0", + "sass": "^1.86.0", + "sass-loader": "^12.6.0", + "stylelint": "^16.16.0", + "stylelint-config-idiomatic-order": "^10.0.0", + "stylelint-config-sass-guidelines": "^12.1.0", + "stylelint-config-standard-scss": "^14.0.0", + "stylelint-scss": "^6.11.1", + "stylelint-webpack-plugin": "^5.0.1", + "sweetalert": "^2.0.8", + "vue": "^2.5.7", + "webpack-cli": "^6.0.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.27.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", + "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz", + "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", + "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.12.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.3.tgz", + "integrity": "sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3" + } + }, + "node_modules/@keyv/serialize/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@stylistic/stylelint-plugin": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.2.tgz", + "integrity": "sha512-tylFJGMQo62alGazK74MNxFjMagYOHmBZiePZFOJK2n13JZta0uVkB3Bh5qodUmOLtRH+uxH297EibK14UKm8g==", + "dev": true, + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.1", + "@csstools/css-tokenizer": "^3.0.1", + "@csstools/media-query-list-parser": "^3.0.1", + "is-plain-object": "^5.0.0", + "postcss-selector-parser": "^6.1.2", + "postcss-value-parser": "^4.2.0", + "style-search": "^0.1.0", + "stylelint": "^16.8.2" + }, + "engines": { + "node": "^18.12 || >=20.9" + }, + "peerDependencies": { + "stylelint": "^16.8.0" + } + }, + "node_modules/@stylistic/stylelint-plugin/node_modules/@csstools/media-query-list-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz", + "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.1", + "@csstools/css-tokenizer": "^3.0.1" + } + }, + "node_modules/@stylistic/stylelint-plugin/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/clean-css": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.11.tgz", + "integrity": "sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/imagemin": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-9.0.1.tgz", + "integrity": "sha512-xMWpvrUhtYxl6EeW+UhVH3rwUKhCRx21XddcoWByjDAasXZT5pQaCn0YVnXoTijX5hlTrGqV4TGQL/Htpp00+w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/imagemin-gifsicle": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.4.tgz", + "integrity": "sha512-ZghMBd/Jgqg5utTJNPmvf6DkuHzMhscJ8vgf/7MUGCpO+G+cLrhYltL+5d+h3A1B4W73S2SrmJZ1jS5LACpX+A==", + "dev": true, + "dependencies": { + "@types/imagemin": "*" + } + }, + "node_modules/@types/imagemin-mozjpeg": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.4.tgz", + "integrity": "sha512-ZCAxV8SYJB8ehwHpnbRpHjg5Wc4HcyuAMiDhXbkgC7gujDoOTyHO3dhDkUtZ1oK1DLBRZapqG9etdLVhUml7yQ==", + "dev": true, + "dependencies": { + "@types/imagemin": "*" + } + }, + "node_modules/@types/imagemin-optipng": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.4.tgz", + "integrity": "sha512-mvKnDMC8eCYZetAQudjs1DbgpR84WhsTx1wgvdiXnpuUEti3oJ+MaMYBRWPY0JlQ4+y4TXKOfa7+LOuT8daegQ==", + "dev": true, + "dependencies": { + "@types/imagemin": "*" + } + }, + "node_modules/@types/imagemin-svgo": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", + "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", + "dev": true, + "dependencies": { + "@types/imagemin": "*", + "@types/svgo": "^1" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.13.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.13.tgz", + "integrity": "sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/svgo": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", + "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@vue/compiler-sfc": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", + "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.5", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", + "dev": true, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", + "dev": true, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", + "dev": true, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha512-N+aAxov+CKVS3JuhDIQFr24XvZvwE96Wlhk9dytTg/GmwWoghdOvR8dspx8MVz71O+Y0pA3UPqHF68D6iy8UvQ==", + "dev": true, + "dependencies": { + "util": "0.10.3" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-loader": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", + "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.4", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/body-parser/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bootstrap": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", + "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "jquery": "1.9.1 - 3", + "popper.js": "^1.16.1" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/browserify-rsa/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha512-DNK4ruAqtyHaN8Zne7PkBTO+dD1Lr0YfTduMqlIyjvQIoztBkUxrvL+hKeLW8NXFKHOq/2upkxuoS9znQ9bW9A==", + "deprecated": "This version of 'buffer' is out-of-date. You must update to v4.9.2 or newer", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.9.tgz", + "integrity": "sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==", + "dev": true, + "dependencies": { + "hookified": "^1.7.1", + "keyv": "^5.3.1" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/chokidar/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", + "dev": true, + "dependencies": { + "del": "^4.1.1" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": ">=4.0.0 <6.0.0" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/collect.js": { + "version": "4.36.1", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.36.1.tgz", + "integrity": "sha512-jd97xWPKgHn6uvK31V6zcyPd40lUJd7gpYxbN2VOVxGWO4tyvS9Li4EpsFjXepGTo2tYcOTC4a8YsbQXMJ4XUw==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/concat": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha512-f/ZaH1aLe64qHgTILdldbvyfGiGF4uzeo9IuXUloIOLQzFmIPloy9QbZadNsuVv0j5qbKQvQb/H/UYf2UsKTpw==", + "dev": true, + "dependencies": { + "commander": "^2.9.0" + }, + "bin": { + "concat": "bin/concat" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "node_modules/console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==", + "dev": true, + "dependencies": { + "date-now": "^0.1.4" + } + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/core-js": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", + "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "dev": true, + "dependencies": { + "browserslist": "^4.24.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-functions-list": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", + "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", + "dev": true, + "engines": { + "node": ">=12 || >=16" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==", + "dev": true + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha512-QlJHGiTiOmW4z3EO0qKwjM2Mb+EmOlBHbpC6QgTiXB913NxMKttEuV2SJ+eLA12sMKDg1N8HnncfAtYaNnU+cg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.124", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.124.tgz", + "integrity": "sha512-riELkpDUqBi00gqreV3RIGoowxGrfueEKBd6zPdOk/I8lvuFpBGNkYoHof3zUHbiTBsIU8oxdIIL/WNrAG1/7A==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", + "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.23.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-5.0.0.tgz", + "integrity": "sha512-iDhXf2r55KO1UhMfpus8oGp93wdNF+934q5kEkwa7qn3BH9f51QEC11xQidt+8jfqRnEYYZa2/8lhac7U/vqWw==", + "dev": true, + "dependencies": { + "@types/eslint": "^9.6.1", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "schema-utils": "^4.3.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^8.0.0 || ^9.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha512-VHvyaGnJy+FuGfcfaM7W7OZw4mQiKW73jPHwQXx2VnMSUBajYmytOT5sKEfsBvNPtGX6YDwcrGDz2eocoHg0JA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha512-UUPPULqkyAV+M3Shodis7l8D+IyX6V8SbaBnTb449jf3fMTd8+UOZI1Q70NbZVOQkcR91yYgdHsJiMMMVmYshg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/express/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/express/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/express/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha512-eIgZvM9C3P05kg0qxfqaVU6Tma4QedCPIByQOcemV0vju8ot3cS2DpHi4m2G2JvbSMI152rjfLX0p1pkSdyPlQ==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.7.tgz", + "integrity": "sha512-txsf5fu3anp2ff3+gOJJzRImtrtm/oa9tYLN0iTuINZ++EyVR/nRrg2fKYwvG/pXDofcrvvb0scEbX3NyW/COw==", + "dev": true, + "dependencies": { + "flat-cache": "^6.1.7" + } + }, + "node_modules/file-type": { + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", + "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.7.tgz", + "integrity": "sha512-qwZ4xf1v1m7Rc9XiORly31YaChvKt6oNVHuqqZcoED/7O+ToyNVGobKsIAopY9ODcWpEDKEBAbrSOCBHtNQvew==", + "dev": true, + "dependencies": { + "cacheable": "^1.8.9", + "flatted": "^3.3.3", + "hookified": "^1.7.1" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/hash.js": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hookified": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.8.1.tgz", + "integrity": "sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.3.tgz", + "integrity": "sha512-D3AfvN7SjhTgBSA8L1BN4FpPzuEd06uy4lHwSoRWr0lndi9BKaNzPLKGOWZ2ocSGguozr08TTb2jhCLHaemruw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-minifier-terser/node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/html-minifier-terser/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", + "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/imagemin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", + "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", + "dev": true, + "dependencies": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/img-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-4.0.0.tgz", + "integrity": "sha512-UwRcPQdwdOyEHyCxe1V9s9YFwInwEWCpoO+kJGfIqDrBDqA8jZUsEZTxQ0JteNPGw/Gupmwesk2OhLTcnw6tnQ==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "imagemin": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/img-loader/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/img-loader/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/keyv": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.2.tgz", + "integrity": "sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==", + "dev": true, + "dependencies": { + "@keyv/serialize": "^1.0.3" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/known-css-properties": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", + "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", + "dev": true + }, + "node_modules/laravel-mix": { + "version": "6.0.49", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.49.tgz", + "integrity": "sha512-bBMFpFjp26XfijPvY5y9zGKud7VqlyOE0OWUcPo3vTBY5asw8LTjafAbee1dhfLz6PWNqDziz69CP78ELSpfKw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/runtime": "^7.15.4", + "@types/babel__core": "^7.1.16", + "@types/clean-css": "^4.2.5", + "@types/imagemin-gifsicle": "^7.0.1", + "@types/imagemin-mozjpeg": "^8.0.1", + "@types/imagemin-optipng": "^5.2.1", + "@types/imagemin-svgo": "^8.0.0", + "autoprefixer": "^10.4.0", + "babel-loader": "^8.2.3", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "clean-css": "^5.2.4", + "cli-table3": "^0.6.0", + "collect.js": "^4.28.5", + "commander": "^7.2.0", + "concat": "^1.0.3", + "css-loader": "^5.2.6", + "cssnano": "^5.0.8", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "html-loader": "^1.3.2", + "imagemin": "^7.0.1", + "img-loader": "^4.0.0", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "mini-css-extract-plugin": "^1.6.2", + "node-libs-browser": "^2.2.1", + "postcss-load-config": "^3.1.0", + "postcss-loader": "^6.2.0", + "semver": "^7.3.5", + "strip-ansi": "^6.0.0", + "style-loader": "^2.0.0", + "terser": "^5.9.0", + "terser-webpack-plugin": "^5.2.4", + "vue-style-loader": "^4.1.3", + "webpack": "^5.60.0", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.8.0", + "webpack-notifier": "^1.14.1", + "webpackbar": "^5.0.0-3", + "yargs": "^17.2.1" + }, + "bin": { + "laravel-mix": "bin/cli.js", + "mix": "bin/cli.js" + }, + "engines": { + "node": ">=12.14.0" + }, + "peerDependencies": { + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "postcss": "^8.3.11", + "webpack": "^5.60.0", + "webpack-cli": "^4.9.1" + } + }, + "node_modules/laravel-mix-clean": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/laravel-mix-clean/-/laravel-mix-clean-0.1.0.tgz", + "integrity": "sha512-iOgVELzL0zJ2SNEVEmzCoduZ7tBQNWa/ViWXSTg9Z2QVK05Sld2efzTybR82Lu6ohZaA4btr+KsBBw7kt8aqTQ==", + "dev": true + }, + "node_modules/laravel-mix-eslint": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/laravel-mix-eslint/-/laravel-mix-eslint-0.2.0.tgz", + "integrity": "sha512-UwnaCTNaA4jRNTs8wmlXrf7QgTxdi2ZQBgKTB83bEiFCi5wqcR6svSdlfsWIXmUaySPe2Lv07SfYq9YvLXc1tA==", + "dev": true, + "peerDependencies": { + "laravel-mix": ">=2.1.7" + } + }, + "node_modules/laravel-mix-polyfill": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/laravel-mix-polyfill/-/laravel-mix-polyfill-3.0.1.tgz", + "integrity": "sha512-05Oldnhek6jkg9JMl7Nf/qnkwuTOlwR7DLFWntfy98QOx5o/ipmnsayP9qVTxdLZNcBRuMz6Agt9fxZdO2AUJw==", + "dev": true, + "dependencies": { + "core-js": "^2.6.9 || ^3.1.4", + "regenerator-runtime": "^0.13.2" + }, + "peerDependencies": { + "laravel-mix": "^6.0.0" + } + }, + "node_modules/laravel-mix-polyfill/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/laravel-mix-stylelint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/laravel-mix-stylelint/-/laravel-mix-stylelint-1.0.0.tgz", + "integrity": "sha512-0FZD/Q0MG4tcu8w3MQrAnnRtOKVdPvGKOgYU9PsDuDIOe+PcWFGQEqjej24TgL7pMrqijfFw+J9vSDJIcA0j7A==", + "dev": true + }, + "node_modules/laravel-mix/node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/laravel-mix/node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/laravel-mix/node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/laravel-mix/node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/laravel-mix/node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/laravel-mix/node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/laravel-mix/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/laravel-mix/node_modules/html-loader": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", + "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", + "dev": true, + "dependencies": { + "html-minifier-terser": "^5.1.1", + "htmlparser2": "^4.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/laravel-mix/node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/laravel-mix/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/laravel-mix/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/laravel-mix/node_modules/mini-css-extract-plugin": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.0.0" + } + }, + "node_modules/laravel-mix/node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/laravel-mix/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/laravel-mix/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/laravel-mix/node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/laravel-mix/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/laravel-mix/node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/laravel-mix/node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/laravel-mix/node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/laravel-mix/node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/laravel-mix/node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/laravel-mix/node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/laravel-mix/node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/laravel-mix/node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/laravel-mix/node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/laravel-mix/node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/launch-editor": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha512-cBB1zpoIg3GaI1IJyoc715xmWofOcXbMhVHAR/TLYk+RO+Y6xQfAp+UshPZTojAcju91Jyk5fw4CiLBuBVaQjw==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", + "dev": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-notifier/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-notifier/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "dev": true, + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true + }, + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sorting": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", + "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", + "dev": true, + "peerDependencies": { + "postcss": "^8.4.20" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "node_modules/promise-polyfill": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", + "integrity": "sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ==", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/raw-body/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", + "dev": true + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "dev": true, + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.86.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.86.0.tgz", + "integrity": "sha512-zV8vGUld/+mP4KbMLJMX7TyGCuUp7hnkOScgCMsWuHtns8CWBoz+vmEhoGMXsaJrbUP8gj+F1dLvVe79sK8UdA==", + "dev": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/immutable": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.1.tgz", + "integrity": "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==", + "dev": true + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy-transport/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/spdy/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/std-env": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz", + "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==", + "dev": true + }, + "node_modules/stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha512-nmQnY9D9TlnfQIkYJCCWxvCcQODilFRZIw14gCMYQVXOiY4E1Ze1VMxB+6y3qdXHpTordULo2qWloHmNcNAQYw==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/stylelint": { + "version": "16.16.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.16.0.tgz", + "integrity": "sha512-40X5UOb/0CEFnZVEHyN260HlSSUxPES+arrUphOumGWgXERHfwCD0kNBVILgQSij8iliYVwlc0V7M5bcLP9vPg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2", + "@csstools/selector-specificity": "^5.0.0", + "@dual-bundle/import-meta-resolve": "^4.1.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.1.0", + "debug": "^4.3.7", + "fast-glob": "^3.3.3", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^10.0.7", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^7.0.3", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.35.0", + "mathml-tag-names": "^2.1.3", + "meow": "^13.2.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.5.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "supports-hyperlinks": "^3.2.0", + "svg-tags": "^1.0.0", + "table": "^6.9.0", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/stylelint-config-idiomatic-order": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-idiomatic-order/-/stylelint-config-idiomatic-order-10.0.0.tgz", + "integrity": "sha512-gJjT1nwhgnHS52+mRn+5Iw6keZIPRN4W+vbzct9Elb+tWOo61jC/CzXzAJHvvOYQZqUYItfs2aQ8fU5hnCvuGg==", + "dev": true, + "dependencies": { + "stylelint-order": "^6.0.2" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "stylelint": ">=11" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", + "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.1.0" + } + }, + "node_modules/stylelint-config-recommended-scss": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz", + "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==", + "dev": true, + "dependencies": { + "postcss-scss": "^4.0.9", + "stylelint-config-recommended": "^14.0.1", + "stylelint-scss": "^6.4.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^16.6.1" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/stylelint-config-sass-guidelines": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-12.1.0.tgz", + "integrity": "sha512-NTxEtVT6uNSqRvq+A3ScyKhjUrY/Z845TnpWEwnMgIPZ/+/Waa4+51r6OPuQRMu4XZS3D8DK1UaT4TWFBvuuAw==", + "dev": true, + "dependencies": { + "@stylistic/stylelint-plugin": "^3.0.1", + "postcss-scss": "^4.0.9", + "stylelint-scss": "^6.2.1" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "postcss": "^8.4.21", + "stylelint": "^16.1.0" + } + }, + "node_modules/stylelint-config-standard": { + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", + "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "dependencies": { + "stylelint-config-recommended": "^14.0.1" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.1.0" + } + }, + "node_modules/stylelint-config-standard-scss": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-14.0.0.tgz", + "integrity": "sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg==", + "dev": true, + "dependencies": { + "stylelint-config-recommended-scss": "^14.1.0", + "stylelint-config-standard": "^36.0.1" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^16.11.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/stylelint-order": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", + "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", + "dev": true, + "dependencies": { + "postcss": "^8.4.32", + "postcss-sorting": "^8.0.2" + }, + "peerDependencies": { + "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1" + } + }, + "node_modules/stylelint-scss": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.11.1.tgz", + "integrity": "sha512-e4rYo0UY+BIMtGeGanghrvHTjcryxgZbyFxUedp8dLFqC4P70aawNdYjRrQxbnKhu3BNr4+lt5e/53tcKXiwFA==", + "dev": true, + "dependencies": { + "css-tree": "^3.0.1", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.35.0", + "mdn-data": "^2.15.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.0.2" + } + }, + "node_modules/stylelint-scss/node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/stylelint-scss/node_modules/css-tree/node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true + }, + "node_modules/stylelint-scss/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylelint-scss/node_modules/mdn-data": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.18.0.tgz", + "integrity": "sha512-gtCy1yim/vpHF/tq3B4Z43x3zKWpYeb4IM3d/Mf4oMYcNuoXOYEaqtoFlLHw9zd7+WNN3jNh6/WXyUrD3OIiwQ==", + "dev": true + }, + "node_modules/stylelint-scss/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylelint-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylelint-webpack-plugin/-/stylelint-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-07lpo1uVoFctKv0EOOg/YSrUppcLMjNBSMRqgooNnlbfAOgQfMzvLK+EbXz0HQiEgZobr+XQX9md/TgwTGdzbw==", + "dev": true, + "dependencies": { + "globby": "^11.1.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "stylelint": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/stylelint-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/stylelint-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/stylelint-webpack-plugin/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint-webpack-plugin/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/stylelint-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/stylelint-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/stylelint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/stylelint/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "node_modules/stylelint/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/stylelint/node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/stylelint/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/stylelint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/globby/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/stylelint/node_modules/ignore": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/stylelint/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylelint/node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true + }, + "node_modules/stylelint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/stylelint/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylelint/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/sweetalert": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/sweetalert/-/sweetalert-2.1.2.tgz", + "integrity": "sha512-iWx7X4anRBNDa/a+AdTmvAzQtkN1+s4j/JJRWlHpYE8Qimkohs8/XnFcWeYHH2lMA8LRCa5tj2d244If3S/hzA==", + "dev": true, + "dependencies": { + "es6-object-assign": "^1.1.0", + "promise-polyfill": "^6.0.2" + } + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", + "integrity": "sha512-FW493rSyhf2Wc3apLzxUJlwBVtLvNrL7NnKBHaJkbsAlDcPKjMjTe75cOqSX2kMdPpdIAip38R27Gp6Pea8KGQ==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/vue": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz", + "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", + "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", + "dev": true, + "dependencies": { + "@vue/compiler-sfc": "2.7.16", + "csstype": "^3.1.0" + } + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/vue-style-loader/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webpack": { + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", + "colorette": "^2.0.14", + "commander": "^12.1.0", + "cross-spawn": "^7.0.3", + "envinfo": "^7.14.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^6.0.1" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.82.0" + }, + "peerDependenciesMeta": { + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/webpack-cli/node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-cli/node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-notifier": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", + "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", + "dev": true, + "dependencies": { + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" + }, + "peerDependencies": { + "@types/webpack": ">4.41.31" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack/node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha512-iTwvhNBRetXWe81+VcIw5YeadVSWyze7uA7nVnpP13ulrpnJ3UfQm5ApGnrkmxDJFdrblRdZs0EvaTCIfei5oQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha512-U+iKQ8rDYMRmvEpvDUIWZ3CtM9/imlAc+c1yJ7YV0vu+HNtP82sAkXzuDXPLkIPoLZohnXFSs9wf2E17xk5yZA==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true + }, + "@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "requires": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "requires": { + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.27.0", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "requires": { + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "dev": true, + "requires": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "requires": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + } + }, + "@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "requires": { + "@babel/types": "^7.27.0" + } + }, + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + } + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/preset-env": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + } + }, + "@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + } + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true + }, + "@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "requires": {} + }, + "@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true + }, + "@csstools/media-query-list-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", + "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "dev": true, + "requires": {} + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true + }, + "@eslint-community/eslint-utils": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.4.3" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + } + } + }, + "@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true + }, + "@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "dev": true, + "requires": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@eslint/config-helpers": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz", + "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==", + "dev": true + }, + "@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.15" + } + }, + "@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", + "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", + "dev": true + }, + "@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true + }, + "@eslint/plugin-kit": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", + "dev": true, + "requires": { + "@eslint/core": "^0.12.0", + "levn": "^0.4.1" + } + }, + "@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true + }, + "@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "requires": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "dependencies": { + "@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true + } + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true + }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@keyv/serialize": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.3.tgz", + "integrity": "sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==", + "dev": true, + "requires": { + "buffer": "^6.0.3" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "optional": true, + "requires": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1", + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + } + }, + "@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "dev": true, + "optional": true + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "@stylistic/stylelint-plugin": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.2.tgz", + "integrity": "sha512-tylFJGMQo62alGazK74MNxFjMagYOHmBZiePZFOJK2n13JZta0uVkB3Bh5qodUmOLtRH+uxH297EibK14UKm8g==", + "dev": true, + "requires": { + "@csstools/css-parser-algorithms": "^3.0.1", + "@csstools/css-tokenizer": "^3.0.1", + "@csstools/media-query-list-parser": "^3.0.1", + "is-plain-object": "^5.0.0", + "postcss-selector-parser": "^6.1.2", + "postcss-value-parser": "^4.2.0", + "style-search": "^0.1.0", + "stylelint": "^16.8.2" + }, + "dependencies": { + "@csstools/media-query-list-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz", + "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==", + "dev": true, + "requires": {} + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } + } + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/clean-css": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.11.tgz", + "integrity": "sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==", + "dev": true, + "requires": { + "@types/node": "*", + "source-map": "^0.6.0" + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, + "@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + }, + "dependencies": { + "@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + } + } + }, + "@types/express-serve-static-core": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-9.0.1.tgz", + "integrity": "sha512-xMWpvrUhtYxl6EeW+UhVH3rwUKhCRx21XddcoWByjDAasXZT5pQaCn0YVnXoTijX5hlTrGqV4TGQL/Htpp00+w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin-gifsicle": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.4.tgz", + "integrity": "sha512-ZghMBd/Jgqg5utTJNPmvf6DkuHzMhscJ8vgf/7MUGCpO+G+cLrhYltL+5d+h3A1B4W73S2SrmJZ1jS5LACpX+A==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-mozjpeg": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.4.tgz", + "integrity": "sha512-ZCAxV8SYJB8ehwHpnbRpHjg5Wc4HcyuAMiDhXbkgC7gujDoOTyHO3dhDkUtZ1oK1DLBRZapqG9etdLVhUml7yQ==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-optipng": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.4.tgz", + "integrity": "sha512-mvKnDMC8eCYZetAQudjs1DbgpR84WhsTx1wgvdiXnpuUEti3oJ+MaMYBRWPY0JlQ4+y4TXKOfa7+LOuT8daegQ==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-svgo": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", + "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", + "dev": true, + "requires": { + "@types/imagemin": "*", + "@types/svgo": "^1" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "@types/node": { + "version": "22.13.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.13.tgz", + "integrity": "sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==", + "dev": true, + "requires": { + "undici-types": "~6.20.0" + } + }, + "@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/svgo": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", + "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", + "dev": true + }, + "@types/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "@vue/compiler-sfc": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", + "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==", + "dev": true, + "requires": { + "@babel/parser": "^7.23.5", + "postcss": "^8.4.14", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "^0.6.1" + } + }, + "@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", + "dev": true, + "requires": {} + }, + "@webpack-cli/serve": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { - "mime-types": "2.1.21", - "negotiator": "0.6.1" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } + "requires": {} }, "adjust-sourcemap-loader": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz", - "integrity": "sha512-958oaHHVEXMvsY7v7cC5gEkNIcoaAVIhZ4mBReYVZJOTP9IgKmzLjIOhTtzpLMu+qriXvLsVjJ155EeInp45IQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", "dev": true, "requires": { - "assert": "1.4.1", - "camelcase": "1.2.1", - "loader-utils": "1.1.0", - "lodash.assign": "4.2.0", - "lodash.defaults": "3.1.2", - "object-path": "0.9.2", - "regex-parser": "2.2.9" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "lodash.defaults": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", - "dev": true, - "requires": { - "lodash.assign": "3.2.0", - "lodash.restparam": "3.6.1" - }, - "dependencies": { - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "dev": true, - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._createassigner": "3.1.1", - "lodash.keys": "3.1.2" - } - } - } - } + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" } }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } } }, "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } + "requires": {} }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" - }, - "dependencies": { - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - } + "color-convert": "^2.0.1" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.12.0" - } - }, "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true }, "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "integrity": "sha512-N+aAxov+CKVS3JuhDIQFr24XvZvwE96Wlhk9dytTg/GmwWoghdOvR8dspx8MVz71O+Y0pA3UPqHF68D6iy8UvQ==", "dev": true, "requires": { "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-each-series": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", - "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, "autoprefixer": { - "version": "7.2.6", - "resolved": "http://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", - "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "dev": true, "requires": { - "browserslist": "2.11.3", - "caniuse-lite": "1.0.30000918", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.23", - "postcss-value-parser": "3.3.1" + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, "axios": { - "version": "0.18.0", - "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", "dev": true, "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "1.1.6" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.6.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.11", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.11", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.11" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.11" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "babel-loader": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.5.tgz", - "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", + "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", "dev": true, "requires": { - "find-cache-dir": "1.0.0", - "loader-utils": "1.1.0", - "mkdirp": "0.5.1" + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.4", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "babel-plugin-polyfill-corejs2": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", "dev": true, "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.11" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "0.10.1" - } - }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "3.2.8", - "invariant": "2.2.4", - "semver": "5.6.0" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "semver": "^6.3.1" }, "dependencies": { - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000918", - "electron-to-chromium": "1.3.90" - } + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true } } }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.6.0", - "home-or-tmp": "2.0.0", - "lodash": "4.17.11", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "babel-plugin-polyfill-regenerator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", "dev": true, "requires": { - "core-js": "2.6.0", - "regenerator-runtime": "0.11.1" + "@babel/helper-define-polyfill-provider": "^0.6.4" } }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.11" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.11" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.11", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - } - } - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", "dev": true }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", - "dev": true - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", + "bytes": "3.1.2", + "content-type": "~1.0.5", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { - "ms": "2.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" } }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true } } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "dev": true, "requires": { - "array-flatten": "2.1.2", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "bootstrap": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.3.tgz", - "integrity": "sha512-rDFIzgXcof0jDyjNosjv4Sno77X4KuPeFxG2XZZv1/Kc8DRVGVADdoQyyOVDwPqL36DDmtCQbrpMCqvpPLJQ0w==", + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, + "bootstrap": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", + "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==", + "dev": true, + "requires": {} + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } + "fill-range": "^7.1.1" } }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, - "browser-sync": { - "version": "2.26.3", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.3.tgz", - "integrity": "sha512-VLzpjCA4uXqfzkwqWtMM6hvPm2PNHp2RcmzBXcbi6C9WpkUhhFb8SVAr4CFrCsFxDg+oY6HalOjn8F+egyvhag==", - "dev": true, - "requires": { - "browser-sync-client": "2.26.2", - "browser-sync-ui": "2.26.2", - "bs-recipes": "1.3.4", - "bs-snippet-injector": "2.0.1", - "chokidar": "2.0.4", - "connect": "3.6.6", - "connect-history-api-fallback": "1.5.0", - "dev-ip": "1.0.1", - "easy-extender": "2.3.4", - "eazy-logger": "3.0.2", - "etag": "1.8.1", - "fresh": "0.5.2", - "fs-extra": "3.0.1", - "http-proxy": "1.15.2", - "immutable": "3.8.2", - "localtunnel": "1.9.1", - "micromatch": "2.3.11", - "opn": "5.3.0", - "portscanner": "2.1.1", - "qs": "6.2.3", - "raw-body": "2.3.3", - "resp-modifier": "6.0.2", - "rx": "4.1.0", - "send": "0.16.2", - "serve-index": "1.9.1", - "serve-static": "1.13.2", - "server-destroy": "1.0.1", - "socket.io": "2.1.1", - "ua-parser-js": "0.7.17", - "yargs": "6.4.0" - } - }, - "browser-sync-client": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.2.tgz", - "integrity": "sha512-FEuVJD41fI24HJ30XOT2RyF5WcnEtdJhhTqeyDlnMk/8Ox9MZw109rvk9pdfRWye4soZLe+xcAo9tHSMxvgAdw==", - "dev": true, - "requires": { - "etag": "1.8.1", - "fresh": "0.5.2", - "mitt": "1.1.3", - "rxjs": "5.5.12" - } - }, - "browser-sync-ui": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.2.tgz", - "integrity": "sha512-LF7GMWo8ELOE0eAlxuRCfnGQT1ZxKP9flCfGgZdXFc6BwmoqaJHlYe7MmVvykKkXjolRXTz8ztXAKGVqNwJ3EQ==", - "dev": true, - "requires": { - "async-each-series": "0.1.1", - "connect-history-api-fallback": "1.5.0", - "immutable": "3.8.2", - "server-destroy": "1.0.1", - "socket.io-client": "2.2.0", - "stream-throttle": "0.1.3" - } - }, - "browser-sync-webpack-plugin": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/browser-sync-webpack-plugin/-/browser-sync-webpack-plugin-2.0.1.tgz", - "integrity": "sha512-F9vkVErG4N1XCJb1OI+RD/5oAK1nMd1G5UDfNE/FmUVAyo24YItfXN+etzA8MBC4Z7oLjkuBKDeeLlbFa4NBGQ==", - "dev": true, - "requires": { - "lodash": "4.17.11" - } - }, "browserify-aes": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -1437,9 +14749,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -1448,35 +14760,73 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { - "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "browserify-zlib": { @@ -1485,48 +14835,30 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.7" + "pako": "~1.0.5" } }, "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000918", - "electron-to-chromium": "1.3.90" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" } }, - "bs-recipes": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", - "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", - "dev": true - }, - "bs-snippet-injector": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", - "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", - "dev": true - }, "buffer": { "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha512-DNK4ruAqtyHaN8Zne7PkBTO+dD1Lr0YfTduMqlIyjvQIoztBkUxrvL+hKeLW8NXFKHOq/2upkxuoS9znQ9bW9A==", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -1535,217 +14867,157 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, - "cacache": { - "version": "10.0.4", - "resolved": "http://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "cacheable": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.9.tgz", + "integrity": "sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==", "dev": true, "requires": { - "bluebird": "3.5.3", - "chownr": "1.1.1", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "lru-cache": "4.1.5", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.1", - "y18n": "4.0.0" - }, - "dependencies": { - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - } + "hookified": "^1.7.1", + "keyv": "^5.3.1" } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" - } - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, "caniuse-api": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000918", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000918", - "electron-to-chromium": "1.3.90" - } - } + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "caniuse-db": { - "version": "1.0.30000918", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000918.tgz", - "integrity": "sha512-ZaBZBV3FSuGf1/rOEMY+hfyb2GNgOY9vXQzBSVtXEeLTbYu5y/qcXeu8oFXG6WX9LhLf+v+JEH8lT7YWUHb6VA==", - "dev": true - }, "caniuse-lite": { - "version": "1.0.30000918", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000918.tgz", - "integrity": "sha512-CAZ9QXGViBvhHnmIHhsTPSWFBujDaelKnUj7wwImbyQRxmXynYqKGi3UaZTSz9MoVh+1EVxOS/DFIkrJYgR3aw==", + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true }, "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + } } }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true }, "cipher-base": { @@ -1754,445 +15026,252 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", - "dev": true, - "requires": { - "chalk": "1.1.3" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - } + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, "requires": { - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "source-map": "~0.6.0" } }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "clean-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "del": "^4.1.1" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true + "cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } }, "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "for-own": "1.0.0", - "is-plain-object": "2.0.4", - "kind-of": "6.0.2", - "shallow-clone": "1.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - } + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "collect.js": { + "version": "4.36.1", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.36.1.tgz", + "integrity": "sha512-jd97xWPKgHn6uvK31V6zcyPd40lUJd7gpYxbN2VOVxGWO4tyvS9Li4EpsFjXepGTo2tYcOTC4a8YsbQXMJ4XUw==", "dev": true }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true, - "requires": { - "q": "1.5.1" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" - } - }, - "color": { - "version": "0.11.4", - "resolved": "http://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dev": true, - "requires": { - "clone": "1.0.4", - "color-convert": "1.9.3", - "color-string": "0.3.0" - } - }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "color-string": { - "version": "0.3.0", - "resolved": "http://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true }, - "colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "dev": true, - "requires": { - "color": "0.11.4", - "css-color-names": "0.0.4", - "has": "1.0.3" - } - }, - "colors": { - "version": "1.1.2", - "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": ">= 1.43.0 < 2" } }, "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", "dev": true, "requires": { - "accepts": "1.3.5", - "bytes": "3.0.0", - "compressible": "2.0.15", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.2", - "vary": "1.1.2" + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "concat": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha512-f/ZaH1aLe64qHgTILdldbvyfGiGF4uzeo9IuXUloIOLQzFmIPloy9QbZadNsuVv0j5qbKQvQb/H/UYf2UsKTpw==", + "dev": true, + "requires": { + "commander": "^2.9.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true } } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" - } - }, - "concatenate": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/concatenate/-/concatenate-0.0.2.tgz", - "integrity": "sha1-C0nW6MQQR9dyjNyNYqCGYjOXtJ8=", - "dev": true, - "requires": { - "globs": "0.1.4" - } - }, - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "1.3.2", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", "dev": true }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==", "dev": true, "requires": { - "date-now": "0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "consolidate": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", - "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", - "dev": true, - "requires": { - "bluebird": "3.5.3" + "date-now": "^0.1.4" } }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", "dev": true }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } }, "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true }, "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, "core-js": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.0.tgz", - "integrity": "sha512-kLRC6ncVpuEW/1kwrOXYX6KQASCVtrh1gQr/UiaVgFlf9WE5Vp+lNe5+h3LuMr5PAucWnnEXwH0nQHRH/gpGtw==", + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", + "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", "dev": true }, + "core-js-compat": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "dev": true, + "requires": { + "browserslist": "^4.24.4" + } + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", - "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.12.0", - "parse-json": "4.0.0", - "require-from-string": "2.0.2" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" - } - } + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, "create-ecdh": { @@ -2201,64 +15280,63 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "cross-env": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", - "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", - "dev": true, - "requires": { - "cross-spawn": "6.0.5", - "is-windows": "1.0.2" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "crypt": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true }, "crypto-browserify": { @@ -2267,468 +15345,302 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "dev": true, - "requires": { - "inherits": "2.0.3", - "source-map": "0.6.1", - "source-map-resolve": "0.5.2", - "urix": "0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } + "requires": {} }, - "css-color-names": { - "version": "0.0.4", - "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "css-functions-list": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", + "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", "dev": true }, - "css-loader": { - "version": "0.28.11", - "resolved": "http://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", - "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.1", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.2.1", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.1", - "source-list-map": "2.0.1" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" } }, - "css-selector-tokenizer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", - "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.2", - "regexpu-core": "1.0.0" - }, - "dependencies": { - "regexpu-core": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - } + "mdn-data": "2.0.14", + "source-map": "^0.6.1" } }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, "cssnano": { - "version": "3.10.0", - "resolved": "http://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dev": true, "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.3", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.3", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.1", - "postcss-zindex": "2.2.0" - }, - "dependencies": { - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000918", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - } - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000918", - "electron-to-chromium": "1.3.90" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" } }, + "cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "requires": {} + }, "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "css-tree": "^1.1.2" } }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" - } - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true }, - "d": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.46" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==", "dev": true }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "requires": { - "object-keys": "1.0.12" + "execa": "^5.0.0" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - } - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true }, "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } } } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "integrity": "sha512-QlJHGiTiOmW4z3EO0qKwjM2Mb+EmOlBHbpC6QgTiXB913NxMKttEuV2SJ+eLA12sMKDg1N8HnncfAtYaNnU+cg==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, - "requires": { - "repeating": "2.0.1" - } + "optional": true }, "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "dev-ip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, "diffie-hellman": { "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "@leichtgewicht/ip-codec": "^2.0.1" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, "domain-browser": { @@ -2737,185 +15649,139 @@ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "dotenv": { - "version": "4.0.0", - "resolved": "http://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true }, "dotenv-expand": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", - "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, - "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" - } - }, - "easy-extender": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", - "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", - "dev": true, - "requires": { - "lodash": "4.17.11" - } - }, - "eazy-logger": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", - "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", - "dev": true, - "requires": { - "tfunk": "3.1.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" } }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, "electron-to-chromium": { - "version": "1.3.90", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.90.tgz", - "integrity": "sha512-IjJZKRhFbWSOX1w0sdIXgp4CMRguu6UYcTckyFF/Gjtemsu/25eZ+RXwFlV+UWcIueHyQA1UnRJxocTpH5NdGA==", + "version": "1.5.124", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.124.tgz", + "integrity": "sha512-riELkpDUqBi00gqreV3RIGoowxGrfueEKBd6zPdOk/I8lvuFpBGNkYoHof3zUHbiTBsIU8oxdIIL/WNrAG1/7A==", "dev": true }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", - "dev": true, - "requires": { - "accepts": "1.3.5", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "3.1.0", - "engine.io-parser": "2.1.3", - "ws": "3.3.3" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" - } + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true } } }, - "engine.io-client": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.1.tgz", - "integrity": "sha512-q66JBFuQcy7CSlfAz9L3jH+v7DTT3i6ZEadYcVj2pOs8/0uJHLxKX3WBkGTvULJMdz0tUCyJag0aKT/dpXL9BQ==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "3.1.0", - "engine.io-parser": "2.1.3", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "6.1.2", - "xmlhttprequest-ssl": "1.5.5", - "yeast": "0.1.2" - } + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "1.0.3" - } + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true }, "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.9" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" } }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "1.0.1" - } + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true }, "error-ex": { "version": "1.3.2", @@ -2923,1185 +15789,981 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, - "error-stack-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", - "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "requires": { - "stackframe": "1.0.4" + "es-errors": "^1.3.0" } }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" - } - }, - "es5-ext": { - "version": "0.10.46", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", - "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" } }, "es6-object-assign": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", "dev": true }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46" - } - }, - "es6-templates": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", - "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", - "dev": true, - "requires": { - "recast": "0.11.23", - "through": "2.3.8" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "eslint": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", + "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.23.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "requires": { + "flat-cache": "^4.0.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + } } }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "estraverse": "4.2.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true + }, + "eslint-webpack-plugin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-5.0.0.tgz", + "integrity": "sha512-iDhXf2r55KO1UhMfpus8oGp93wdNF+934q5kEkwa7qn3BH9f51QEC11xQidt+8jfqRnEYYZa2/8lhac7U/vqWw==", + "dev": true, + "requires": { + "@types/eslint": "^9.6.1", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "schema-utils": "^4.3.0" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "requires": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + } + }, + "esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "integrity": "sha512-VHvyaGnJy+FuGfcfaM7W7OZw4mQiKW73jPHwQXx2VnMSUBajYmytOT5sKEfsBvNPtGX6YDwcrGDz2eocoHg0JA==", "dev": true }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "integrity": "sha512-UUPPULqkyAV+M3Shodis7l8D+IyX6V8SbaBnTb449jf3fMTd8+UOZI1Q70NbZVOQkcR91yYgdHsJiMMMVmYshg==", "dev": true }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46" - } - }, "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, - "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", - "dev": true, - "requires": { - "original": "1.0.2" - } - }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.5", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.4" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.1.1", - "repeat-element": "1.1.3", - "repeat-string": "1.6.1" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" } }, "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", - "qs": "6.5.2", - "range-parser": "1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true }, "finalhandler": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" } }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "requires": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true } } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - } - } - }, - "extract-text-webpack-plugin": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", - "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", - "dev": true, - "requires": { - "async": "2.6.1", - "loader-utils": "1.1.0", - "schema-utils": "0.3.0", - "webpack-sources": "1.3.0" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "4.17.11" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + } + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "integrity": "sha512-eIgZvM9C3P05kg0qxfqaVU6Tma4QedCPIByQOcemV0vju8ot3cS2DpHi4m2G2JvbSMI152rjfLX0p1pkSdyPlQ==", "dev": true }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, - "file-loader": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.11.2.tgz", - "integrity": "sha512-N+uhF3mswIFeziHQjGScJ/yHXYt3DiLBeC+9vWW+WjUBiClMSOlV1YrXQi+7KM2aA3Rn4Bybgv+uXFQbfkzpvg==", + "file-entry-cache": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.7.tgz", + "integrity": "sha512-txsf5fu3anp2ff3+gOJJzRImtrtm/oa9tYLN0iTuINZ++EyVR/nRrg2fKYwvG/pXDofcrvvb0scEbX3NyW/COw==", "dev": true, "requires": { - "loader-utils": "1.1.0" + "flat-cache": "^6.1.7" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "file-type": { + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", + "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", "dev": true }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "to-regex-range": "^5.0.1" } }, "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "flat-cache": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.7.tgz", + "integrity": "sha512-qwZ4xf1v1m7Rc9XiORly31YaChvKt6oNVHuqqZcoED/7O+ToyNVGobKsIAopY9ODcWpEDKEBAbrSOCBHtNQvew==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cacheable": "^1.8.9", + "flatted": "^3.3.3", + "hookified": "^1.7.1" } }, + "flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, - "requires": { - "debug": "3.1.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.7", - "mime-types": "2.1.21" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" } }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "0.2.2" - } + "fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, - "friendly-errors-webpack-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz", - "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "error-stack-parser": "2.0.2", - "string-width": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "3.0.1", - "universalify": "0.1.2" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" - } + "fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" } }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "requires": { - "globule": "1.2.1" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" } }, "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globby": { - "version": "6.1.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.3", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" } }, - "globs": { + "globjoin": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globs/-/globs-0.1.4.tgz", - "integrity": "sha512-D23dWbOq48vlOraoSigbcQV4tWrnhwk+E/Um2cMuDS3/5dwGmdFeA7L/vAvDhLFlQOTDqHcXh35m/71g2A2WzQ==", - "dev": true, - "requires": { - "glob": "7.1.3" - } + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "requires": { - "glob": "7.1.3", - "lodash": "4.17.11", - "minimatch": "3.0.4" - } + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", "dev": true }, "handle-thing": { - "version": "1.2.5", - "resolved": "http://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "6.6.1", - "har-schema": "2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", - "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", - "dev": true, - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "has-symbols": "^1.0.3" } }, "hash-base": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash-sum": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", "dev": true }, "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" } }, "he": { @@ -4113,102 +16775,114 @@ "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, "requires": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "hookified": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.8.1.tgz", + "integrity": "sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==", "dev": true }, "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "wbuf": "1.7.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.3.tgz", + "integrity": "sha512-D3AfvN7SjhTgBSA8L1BN4FpPzuEd06uy4lHwSoRWr0lndi9BKaNzPLKGOWZ2ocSGguozr08TTb2jhCLHaemruw==", "dev": true }, - "html-loader": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.4.5.tgz", - "integrity": "sha1-X7zYfNY6XEmn/OL+VvQl4Fcpxow=", + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", "dev": true, "requires": { - "es6-templates": "0.2.3", - "fastparse": "1.1.2", - "html-minifier": "3.5.21", - "loader-utils": "1.1.0", - "object-assign": "4.1.1" - } - }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.2.1", - "commander": "2.17.1", - "he": "1.2.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.4.9" + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", "dev": true, "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" + "source-map": "~0.6.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + } + } + }, + "html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true + }, + "htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + }, + "dependencies": { + "domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1" } } } @@ -4216,496 +16890,287 @@ "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", "dev": true }, "http-errors": { "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.5.0" + "statuses": ">= 1.4.0 < 2" }, "dependencies": { "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", "dev": true } } }, "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", + "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", "dev": true }, "http-proxy": { - "version": "1.15.2", - "resolved": "http://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", - "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, "requires": { - "http-proxy": "1.17.0", - "is-glob": "3.1.0", - "lodash": "4.17.11", - "micromatch": "2.3.11" - }, - "dependencies": { - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", - "dev": true - }, - "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", - "dev": true, - "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.10", - "requires-port": "1.0.0" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.15.2" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" } }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "requires": { - "postcss": "6.0.23" - } + "requires": {} }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true }, + "imagemin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", + "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", + "dev": true, + "requires": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" + } + }, "img-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.1.tgz", - "integrity": "sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-4.0.0.tgz", + "integrity": "sha512-UwRcPQdwdOyEHyCxe1V9s9YFwInwEWCpoO+kJGfIqDrBDqA8jZUsEZTxQ0JteNPGw/Gupmwesk2OhLTcnw6tnQ==", "dev": true, "requires": { - "loader-utils": "1.1.0" + "loader-utils": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } } }, - "immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", - "dev": true - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "requires": { - "import-from": "2.1.0" - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, - "internal-ip": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", - "dev": true, - "requires": { - "meow": "3.7.0" - } + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "1.4.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true }, "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.12.0" - } - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "hasown": "^2.0.2" } }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", - "dev": true, - "requires": { - "lodash.isfinite": "3.3.2" - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true }, "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^2.1.0" } }, "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.2" } }, "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true }, "is-plain-object": { @@ -4714,938 +17179,782 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "1.0.3" + "isobject": "^3.0.1" } }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true, - "requires": { - "html-comment-regex": "1.1.2" - } - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==", - "dev": true - }, - "js-base64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", - "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", "dev": true }, "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "argparse": "^2.0.1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "jsesc": { - "version": "1.3.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json5": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", "dev": true }, + "keyv": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.2.tgz", + "integrity": "sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==", + "dev": true, + "requires": { + "@keyv/serialize": "^1.0.3" + } + }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true + }, + "known-css-properties": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", + "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", "dev": true }, "laravel-mix": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-2.1.14.tgz", - "integrity": "sha512-M/Vzgr6+QQGukciAQ91SZvOhUyrPm41bq/nRyF2j2HR8/g3vzvTQbRkdTGOpq9Z+y3REEj8qR2A3ScnEG37Dgw==", + "version": "6.0.49", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.49.tgz", + "integrity": "sha512-bBMFpFjp26XfijPvY5y9zGKud7VqlyOE0OWUcPo3vTBY5asw8LTjafAbee1dhfLz6PWNqDziz69CP78ELSpfKw==", "dev": true, "requires": { - "autoprefixer": "7.2.6", - "babel-core": "6.26.3", - "babel-loader": "7.1.5", - "babel-plugin-transform-object-rest-spread": "6.26.0", - "babel-plugin-transform-runtime": "6.23.0", - "babel-preset-env": "1.7.0", - "chokidar": "2.0.4", - "clean-css": "4.2.1", - "concatenate": "0.0.2", - "css-loader": "0.28.11", - "dotenv": "4.0.0", - "dotenv-expand": "4.2.0", - "extract-text-webpack-plugin": "3.0.2", - "file-loader": "0.11.2", - "friendly-errors-webpack-plugin": "1.7.0", - "fs-extra": "3.0.1", - "glob": "7.1.3", - "html-loader": "0.4.5", - "img-loader": "3.0.1", - "lodash": "4.17.11", - "md5": "2.2.1", - "node-sass": "4.11.0", - "postcss-loader": "2.1.6", - "resolve-url-loader": "2.3.1", - "sass-loader": "6.0.7", - "style-loader": "0.18.2", - "uglify-js": "2.8.29", - "uglifyjs-webpack-plugin": "1.3.0", - "vue-loader": "13.7.3", - "vue-template-compiler": "2.5.21", - "webpack": "3.12.0", - "webpack-chunk-hash": "0.4.0", - "webpack-dev-server": "2.11.3", - "webpack-merge": "4.1.5", - "webpack-notifier": "1.7.0", - "yargs": "8.0.2" + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/runtime": "^7.15.4", + "@types/babel__core": "^7.1.16", + "@types/clean-css": "^4.2.5", + "@types/imagemin-gifsicle": "^7.0.1", + "@types/imagemin-mozjpeg": "^8.0.1", + "@types/imagemin-optipng": "^5.2.1", + "@types/imagemin-svgo": "^8.0.0", + "autoprefixer": "^10.4.0", + "babel-loader": "^8.2.3", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "clean-css": "^5.2.4", + "cli-table3": "^0.6.0", + "collect.js": "^4.28.5", + "commander": "^7.2.0", + "concat": "^1.0.3", + "css-loader": "^5.2.6", + "cssnano": "^5.0.8", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "html-loader": "^1.3.2", + "imagemin": "^7.0.1", + "img-loader": "^4.0.0", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "mini-css-extract-plugin": "^1.6.2", + "node-libs-browser": "^2.2.1", + "postcss-load-config": "^3.1.0", + "postcss-loader": "^6.2.0", + "semver": "^7.3.5", + "strip-ansi": "^6.0.0", + "style-loader": "^2.0.0", + "terser": "^5.9.0", + "terser-webpack-plugin": "^5.2.4", + "vue-style-loader": "^4.1.3", + "webpack": "^5.60.0", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.8.0", + "webpack-notifier": "^1.14.1", + "webpackbar": "^5.0.0-3", + "yargs": "^17.2.1" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "requires": {} + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "html-loader": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", + "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", + "dev": true, + "requires": { + "html-minifier-terser": "^5.1.1", + "htmlparser2": "^4.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "mini-css-extract-plugin": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" } }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, "requires": { - "pify": "2.3.0" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" } }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true }, - "which-module": { + "style-loader": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", "dev": true, "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" } }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, "requires": { - "camelcase": "4.1.0" + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } } + }, + "webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "dev": true, + "requires": {} } } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "laravel-mix-clean": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/laravel-mix-clean/-/laravel-mix-clean-0.1.0.tgz", + "integrity": "sha512-iOgVELzL0zJ2SNEVEmzCoduZ7tBQNWa/ViWXSTg9Z2QVK05Sld2efzTybR82Lu6ohZaA4btr+KsBBw7kt8aqTQ==", "dev": true }, - "lcid": { + "laravel-mix-eslint": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/laravel-mix-eslint/-/laravel-mix-eslint-0.2.0.tgz", + "integrity": "sha512-UwnaCTNaA4jRNTs8wmlXrf7QgTxdi2ZQBgKTB83bEiFCi5wqcR6svSdlfsWIXmUaySPe2Lv07SfYq9YvLXc1tA==", + "dev": true, + "requires": {} + }, + "laravel-mix-polyfill": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/laravel-mix-polyfill/-/laravel-mix-polyfill-3.0.1.tgz", + "integrity": "sha512-05Oldnhek6jkg9JMl7Nf/qnkwuTOlwR7DLFWntfy98QOx5o/ipmnsayP9qVTxdLZNcBRuMz6Agt9fxZdO2AUJw==", + "dev": true, + "requires": { + "core-js": "^2.6.9 || ^3.1.4", + "regenerator-runtime": "^0.13.2" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + } + } + }, + "laravel-mix-stylelint": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "limiter": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.3.tgz", - "integrity": "sha512-zrycnIMsLw/3ZxTbW7HCez56rcFGecWTx5OZNplzcXUUmJLmoYArC6qdJzmAN5BWiNXGcpjhF9RQ1HSv5zebEw==", + "resolved": "https://registry.npmjs.org/laravel-mix-stylelint/-/laravel-mix-stylelint-1.0.0.tgz", + "integrity": "sha512-0FZD/Q0MG4tcu8w3MQrAnnRtOKVdPvGKOgYU9PsDuDIOe+PcWFGQEqjej24TgL7pMrqijfFw+J9vSDJIcA0j7A==", "dev": true }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "launch-editor": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" } }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "loader-runner": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", - "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true }, "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - }, - "localtunnel": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.1.tgz", - "integrity": "sha512-HWrhOslklDvxgOGFLxi6fQVnvpl6XdX4sPscfqMZkzi3gtt9V7LKBWYvNUcpHSVvjwCQ6xzXacVvICNbNcyPnQ==", - "dev": true, - "requires": { - "axios": "0.17.1", - "debug": "2.6.9", - "openurl": "1.1.1", - "yargs": "6.6.0" - }, - "dependencies": { - "axios": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", - "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=", - "dev": true, - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "1.1.6" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "yargs": { - "version": "6.6.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" - } - } + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", - "dev": true, - "requires": { - "lodash._bindcallback": "3.0.1", - "lodash._isiterateecall": "3.0.9", - "lodash.restparam": "3.6.1" - } - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" } }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "pify": "3.0.0" + "semver": "^6.0.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "1.0.1" - } - }, - "math-expression-evaluator": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", - "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", - "dev": true - }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true }, "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, "requires": { "charenc": "0.0.2", "crypt": "0.0.2", - "is-buffer": "1.1.6" + "is-buffer": "~1.1.6" } }, "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha512-cBB1zpoIg3GaI1IJyoc715xmWofOcXbMhVHAR/TLYk+RO+Y6xQfAp+UshPZTojAcju91Jyk5fw4CiLBuBVaQjw==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, "requires": { - "mimic-fn": "1.2.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "fs-monkey": "^1.0.4" } }, "meow": { - "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true }, "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.3" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "braces": "^3.0.3", + "picomatch": "^2.3.1" } }, "miller-rabin": { @@ -5654,35 +17963,29 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": "1.52.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimalistic-assert": { @@ -5694,2153 +17997,918 @@ "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", - "dev": true, - "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" - } - }, - "mitt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", - "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.3" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" } }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true }, - "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, + "node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "optional": true + }, "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "requires": { - "fstream": "1.0.11", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.5", - "request": "2.88.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" } }, "node-notifier": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.3.0.tgz", - "integrity": "sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", "dev": true, "requires": { - "growly": "1.3.0", - "semver": "5.6.0", - "shellwords": "0.1.1", - "which": "1.3.1" - } - }, - "node-sass": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", - "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", - "dev": true, - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.3", - "get-stdin": "4.0.1", - "glob": "7.1.3", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.1", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.11.1", - "node-gyp": "3.8.0", - "npmlog": "4.1.2", - "request": "2.88.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.1", - "true-case-path": "1.0.3" + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" }, "dependencies": { - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { - "lru-cache": "4.1.5", - "which": "1.3.1" + "is-docker": "^2.0.0" + } + }, + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" } } } }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "2.7.1", - "is-builtin-module": "1.0.0", - "semver": "5.6.0", - "validate-npm-package-license": "3.0.4" - } + "node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true }, "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" - } + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true }, "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^3.0.0" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "boolbase": "^1.0.0" } }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - }, - "object-path": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", - "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "3.0.1" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "3.0.1" - } - }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, - "openurl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", - "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", - "dev": true - }, - "opn": { - "version": "5.3.0", - "resolved": "http://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "mimic-fn": "^2.1.0" } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "requires": { - "url-parse": "1.4.4" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + } + } + }, + "optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" } }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^2.2.0" } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, + "p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "pako": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz", - "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { - "no-case": "2.3.2" + "callsites": "^3.0.0" } }, "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" }, "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } } } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { - "error-ex": "1.3.2" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "1.0.2" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } }, "path-browserify": { - "version": "0.0.0", - "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", "dev": true }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - } + "find-up": "^4.0.0" } }, "popper.js": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.6.tgz", - "integrity": "sha512-AGwHGQBKumlk/MDfrSOf0JHhJCImdDMcGNoqKmKkU+68GFazv3CQ6q9r7Ja1sKDZmYWTckY/uLyEznheTDycnA==", - "dev": true - }, - "portfinder": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", - "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", - "dev": true, - "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "portscanner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", - "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", - "dev": true, - "requires": { - "async": "1.5.2", - "is-number-like": "1.0.8" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", "dev": true }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" } }, "postcss-calc": { - "version": "5.3.1", - "resolved": "http://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" } }, "postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dev": true, "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" } }, "postcss-convert-values": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" } }, "postcss-discard-comments": { - "version": "2.0.4", - "resolved": "http://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } + "requires": {} }, "postcss-discard-duplicates": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } + "requires": {} }, "postcss-discard-empty": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } + "requires": {} }, "postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-discard-unused": { - "version": "2.2.3", - "resolved": "http://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-filter-plugins": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", - "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", - "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } + "requires": {} }, "postcss-load-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", - "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", "dev": true, "requires": { - "cosmiconfig": "4.0.0", - "import-cwd": "2.1.0" + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" } }, - "postcss-load-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - }, - "dependencies": { - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.7.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - } - } - }, - "postcss-load-plugins": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - }, - "dependencies": { - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.7.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - } - } - }, - "postcss-loader": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.6.tgz", - "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "postcss": "6.0.23", - "postcss-load-config": "2.0.0", - "schema-utils": "0.4.7" - }, - "dependencies": { - "ajv": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", - "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", - "dev": true, - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "6.6.1", - "ajv-keywords": "3.2.0" - } - } - } - }, - "postcss-merge-idents": { - "version": "2.1.7", - "resolved": "http://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "dev": true, - "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true }, "postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" } }, "postcss-merge-rules": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.2" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000918", - "electron-to-chromium": "1.3.90" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" } }, - "postcss-message-helpers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", - "dev": true - }, "postcss-minify-font-values": { - "version": "1.0.5", - "resolved": "http://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dev": true, "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "postcss-value-parser": "^4.2.0" } }, "postcss-minify-gradients": { - "version": "1.0.5", - "resolved": "http://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, "postcss-minify-params": { - "version": "1.2.2", - "resolved": "http://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1", - "uniqs": "2.0.0" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, "postcss-minify-selectors": { - "version": "2.1.1", - "resolved": "http://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "postcss-selector-parser": "^6.0.5" } }, "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, - "requires": { - "postcss": "6.0.23" - } + "requires": {} }, "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.1", - "postcss": "6.0.23" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.1", - "postcss": "6.0.23" + "postcss-selector-parser": "^7.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.23" + "icss-utils": "^5.0.0" } }, "postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dev": true, "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-url": { - "version": "3.0.8", - "resolved": "http://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dev": true, "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" } }, "postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "http://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, "postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dev": true, "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" } }, "postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "http://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "postcss-value-parser": "^4.2.0" } }, + "postcss-resolve-nested-selector": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true + }, + "postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "requires": {} + }, + "postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "requires": {} + }, "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" } }, + "postcss-sorting": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", + "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", + "dev": true, + "requires": {} + }, "postcss-svgo": { - "version": "2.1.6", - "resolved": "http://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dev": true, "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1", - "svgo": "0.7.2" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" } }, "postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "http://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "postcss-selector-parser": "^6.0.5" } }, "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "postcss-zindex": { - "version": "2.2.0", - "resolved": "http://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "dev": true, - "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "uniqs": "2.0.0" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.9", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prettier": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", - "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==", - "dev": true + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "optional": true }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", "dev": true }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true }, "process-nextick-args": { @@ -7849,153 +18917,80 @@ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, "promise-polyfill": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", - "integrity": "sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=", + "integrity": "sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ==", "dev": true }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.8.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" - } - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "3.6.1", - "inherits": "2.0.3", - "pump": "2.0.1" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" - } - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", "dev": true }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true }, - "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -8004,250 +18999,160 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } } }, "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" - }, - "dependencies": { - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - } - } - }, - "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", - "dev": true, - "requires": { - "ast-types": "0.9.6", - "esprima": "3.1.3", - "private": "0.1.8", - "source-map": "0.5.7" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - } - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, - "reduce-css-calc": { - "version": "1.3.0", - "resolved": "http://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } - } - }, - "reduce-function-call": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", - "dev": true, - "requires": { - "balanced-match": "0.4.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } + "resolve": "^1.9.0" } }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, + "regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "@babel/runtime": "^7.8.4" } }, "regex-parser": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.9.tgz", - "integrity": "sha512-VncXxOF6uFlYog5prG2j+e2UGJeam5MfNiJnB/qEgo4KTnMm2XrELCg4rNZ6IlaEUZnGlb8aB6lXowCRQtTkkA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", "dev": true }, "regexpu-core": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" } }, "regjsgen": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "dev": true }, "regjsparser": { - "version": "0.1.5", - "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~3.0.2" }, "dependencies": { "jsesc": { - "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true } } @@ -8255,76 +19160,19 @@ "relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.3", - "har-validator": "5.1.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.21", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, "require-from-string": { @@ -8333,140 +19181,86 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "requires": { - "path-parse": "1.0.6" + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve-url-loader": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-2.3.1.tgz", - "integrity": "sha512-tpt4A/tOT8jxRDa91RbBV4c22AGj+WllOxT8rYSYhT2XDdL33Nca9HudwVx4mvP9PLokz+wpCu44tWUGVMYYLA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "dev": true, "requires": { - "adjust-sourcemap-loader": "1.2.0", - "camelcase": "4.1.0", - "convert-source-map": "1.6.0", - "loader-utils": "1.1.0", - "lodash.defaults": "4.2.0", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.5.7", - "urix": "0.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - }, - "resp-modifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", - "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", - "dev": true, - "requires": { - "debug": "2.6.9", - "minimatch": "3.0.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "dev": true, - "requires": { - "convert-source-map": "0.3.5", - "css": "2.2.4" + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" }, "dependencies": { "convert-source-map": { - "version": "0.3.5", - "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true } } }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } + "reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.1.3" } }, "ripemd160": { @@ -8475,32 +19269,17 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { - "aproba": "1.2.0" - } - }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", - "dev": true - }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" + "queue-microtask": "^1.2.2" } }, "safe-buffer": { @@ -8509,264 +19288,112 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "0.1.15" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "sass": { + "version": "1.86.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.86.0.tgz", + "integrity": "sha512-zV8vGUld/+mP4KbMLJMX7TyGCuUp7hnkOScgCMsWuHtns8CWBoz+vmEhoGMXsaJrbUP8gj+F1dLvVe79sK8UdA==", "dev": true, "requires": { - "glob": "7.1.3", - "lodash": "4.17.11", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" + "@parcel/watcher": "^2.4.1", + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" }, "dependencies": { - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "readdirp": "^4.0.1" } }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } - } - } - }, - "sass-loader": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz", - "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==", - "dev": true, - "requires": { - "clone-deep": "2.0.2", - "loader-utils": "1.1.0", - "lodash.tail": "4.1.1", - "neo-async": "2.6.0", - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "immutable": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.1.tgz", + "integrity": "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==", + "dev": true + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true } } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", "dev": true, "requires": { - "ajv": "5.5.2" + "klona": "^2.0.4", + "neo-async": "^2.6.2" } }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "requires": { - "js-base64": "2.4.9", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", "dev": true }, "selfsigned": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", - "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "requires": { - "node-forge": "0.7.5" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } + "@types/node-forge": "^1.3.0", + "node-forge": "^1" } }, "serialize-javascript": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", - "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", - "dev": true + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.21", - "parseurl": "1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" - } - }, - "server-destroy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" } }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true }, "setprototypeof": { @@ -8777,46 +19404,42 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "is-extendable": "0.1.1", - "kind-of": "5.1.0", - "mixin-object": "2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "kind-of": "^6.0.2" } }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", "dev": true }, "shellwords": { @@ -8825,529 +19448,208 @@ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", "dev": true }, + "side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + } + }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", - "dev": true, - "requires": { - "debug": "3.1.0", - "engine.io": "3.2.1", - "has-binary2": "1.0.3", - "socket.io-adapter": "1.1.1", - "socket.io-client": "2.1.1", - "socket.io-parser": "3.2.0" - }, - "dependencies": { - "engine.io-client": { - "version": "3.2.1", - "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "3.1.0", - "engine.io-parser": "2.1.3", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "3.3.3", - "xmlhttprequest-ssl": "1.5.5", - "yeast": "0.1.2" - } - }, - "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "3.1.0", - "engine.io-client": "3.2.1", - "has-binary2": "1.0.3", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "3.2.0", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "3.1.0", - "isarray": "2.0.1" - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" - } - } - } - }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", - "dev": true - }, - "socket.io-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", - "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "3.1.0", - "engine.io-client": "3.3.1", - "has-binary2": "1.0.3", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "3.3.0", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "3.1.0", - "isarray": "2.0.1" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.3.2" - } - }, - "sockjs-client": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", - "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", - "dev": true, - "requires": { - "debug": "2.6.9", - "eventsource": "0.1.6", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "1.1.0" + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", "dev": true }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" - } + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true }, "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { - "source-map": "0.5.7" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.2" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "2.2.0", - "spdx-license-ids": "3.0.2" - } - }, - "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", - "dev": true - }, "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.2", - "select-hose": "2.0.0", - "spdy-transport": "2.1.1" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.3" } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, "spdy-transport": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.1.tgz", - "integrity": "sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "2.6.9", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "wbuf": "1.7.3" + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "3.0.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, - "sshpk": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", - "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", - "dev": true, - "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" - } - }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "stackframe": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", - "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", + "std-env": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz", + "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==", "dev": true }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - } - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "requires": { - "readable-stream": "2.3.6" - } - }, "stream-browserify": { "version": "2.0.1", - "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha512-nmQnY9D9TlnfQIkYJCCWxvCcQODilFRZIw14gCMYQVXOiY4E1Ze1VMxB+6y3qdXHpTordULo2qWloHmNcNAQYw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-http": { @@ -9356,188 +19658,611 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "stream-throttle": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", - "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", - "dev": true, - "requires": { - "commander": "2.19.0", - "limiter": "1.1.3" - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^5.0.1" } }, - "strip-bom": { + "strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true + }, + "stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dev": true, "requires": { - "get-stdin": "4.0.1" + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" } }, - "style-loader": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz", - "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==", + "stylelint": { + "version": "16.16.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.16.0.tgz", + "integrity": "sha512-40X5UOb/0CEFnZVEHyN260HlSSUxPES+arrUphOumGWgXERHfwCD0kNBVILgQSij8iliYVwlc0V7M5bcLP9vPg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2", + "@csstools/selector-specificity": "^5.0.0", + "@dual-bundle/import-meta-resolve": "^4.1.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.1.0", + "debug": "^4.3.7", + "fast-glob": "^3.3.3", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^10.0.7", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^7.0.3", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.35.0", + "mathml-tag-names": "^2.1.3", + "meow": "^13.2.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.5.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "supports-hyperlinks": "^3.2.0", + "svg-tags": "^1.0.0", + "table": "^6.9.0", + "write-file-atomic": "^5.0.1" + }, + "dependencies": { + "@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "requires": {} + }, + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "requires": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + } + }, + "css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "requires": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + } + }, + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true + } + } + }, + "ignore": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "stylelint-config-idiomatic-order": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-idiomatic-order/-/stylelint-config-idiomatic-order-10.0.0.tgz", + "integrity": "sha512-gJjT1nwhgnHS52+mRn+5Iw6keZIPRN4W+vbzct9Elb+tWOo61jC/CzXzAJHvvOYQZqUYItfs2aQ8fU5hnCvuGg==", + "dev": true, + "requires": { + "stylelint-order": "^6.0.2" + } + }, + "stylelint-config-recommended": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", + "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", + "dev": true, + "requires": {} + }, + "stylelint-config-recommended-scss": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz", + "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==", + "dev": true, + "requires": { + "postcss-scss": "^4.0.9", + "stylelint-config-recommended": "^14.0.1", + "stylelint-scss": "^6.4.0" + } + }, + "stylelint-config-sass-guidelines": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-12.1.0.tgz", + "integrity": "sha512-NTxEtVT6uNSqRvq+A3ScyKhjUrY/Z845TnpWEwnMgIPZ/+/Waa4+51r6OPuQRMu4XZS3D8DK1UaT4TWFBvuuAw==", + "dev": true, + "requires": { + "@stylistic/stylelint-plugin": "^3.0.1", + "postcss-scss": "^4.0.9", + "stylelint-scss": "^6.2.1" + } + }, + "stylelint-config-standard": { + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", + "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^14.0.1" + } + }, + "stylelint-config-standard-scss": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-14.0.0.tgz", + "integrity": "sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg==", + "dev": true, + "requires": { + "stylelint-config-recommended-scss": "^14.1.0", + "stylelint-config-standard": "^36.0.1" + } + }, + "stylelint-order": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", + "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", + "dev": true, + "requires": { + "postcss": "^8.4.32", + "postcss-sorting": "^8.0.2" + } + }, + "stylelint-scss": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.11.1.tgz", + "integrity": "sha512-e4rYo0UY+BIMtGeGanghrvHTjcryxgZbyFxUedp8dLFqC4P70aawNdYjRrQxbnKhu3BNr4+lt5e/53tcKXiwFA==", + "dev": true, + "requires": { + "css-tree": "^3.0.1", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.35.0", + "mdn-data": "^2.15.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0" + }, + "dependencies": { + "css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "requires": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "dependencies": { + "mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true + } + } + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "mdn-data": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.18.0.tgz", + "integrity": "sha512-gtCy1yim/vpHF/tq3B4Z43x3zKWpYeb4IM3d/Mf4oMYcNuoXOYEaqtoFlLHw9zd7+WNN3jNh6/WXyUrD3OIiwQ==", + "dev": true + }, + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } + } + }, + "stylelint-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylelint-webpack-plugin/-/stylelint-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-07lpo1uVoFctKv0EOOg/YSrUppcLMjNBSMRqgooNnlbfAOgQfMzvLK+EbXz0HQiEgZobr+XQX9md/TgwTGdzbw==", + "dev": true, + "requires": { + "globby": "^11.1.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" } }, "sweetalert": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/sweetalert/-/sweetalert-2.0.8.tgz", - "integrity": "sha512-43/9dVMDV9ppoMpSAdGpwY3AIF2ACupDWIxqqnhr/OQBYQTVUapK2bb8ex41Y9rbOWNkFWyPBmdqVCJfHdUeew==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/sweetalert/-/sweetalert-2.1.2.tgz", + "integrity": "sha512-iWx7X4anRBNDa/a+AdTmvAzQtkN1+s4j/JJRWlHpYE8Qimkohs8/XnFcWeYHH2lMA8LRCa5tj2d244If3S/hzA==", "dev": true, "requires": { - "es6-object-assign": "1.1.0", - "promise-polyfill": "6.1.0" + "es6-object-assign": "^1.1.0", + "promise-polyfill": "^6.0.2" } }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true + "table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } }, "tapable": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz", - "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==", - "dev": true - }, - "tar": { "version": "2.2.1", - "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tfunk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", - "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "object-path": "0.9.2" - } - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } } }, "thunky": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", - "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", - "dev": true - }, - "time-stamp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz", - "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", + "integrity": "sha512-FW493rSyhf2Wc3apLzxUJlwBVtLvNrL7NnKBHaJkbsAlDcPKjMjTe75cOqSX2kMdPpdIAip38R27Gp6Pea8KGQ==", "dev": true }, "timers-browserify": { @@ -9546,440 +20271,132 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", "dev": true }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^7.0.0" } }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "1.1.31", - "punycode": "1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-right": { + "toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "requires": { - "glob": "7.1.3" - } + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true }, "tty-browserify": { "version": "0.0.0", - "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "prelude-ls": "^1.2.1" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.21" + "mime-types": "~2.1.24" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true }, - "ua-parser-js": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "uglifyjs-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", - "dev": true, - "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.7", - "serialize-javascript": "1.5.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" - }, - "dependencies": { - "ajv": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", - "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", - "dev": true, - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "6.6.1", - "ajv-keywords": "3.2.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" - } - } - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" - } - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "2.0.1" - } - }, - "unique-slug": { + "unicode-canonical-property-names-ecmascript": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } + "escalade": "^3.2.0", + "picocolors": "^1.1.1" } }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", "dev": true, "requires": { "punycode": "1.3.2", @@ -9989,219 +20406,100 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", "dev": true } } }, - "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", - "dev": true, - "requires": { - "querystringify": "2.1.0", - "requires-port": "1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util": { - "version": "0.10.3", - "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } + "inherits": "2.0.3" } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "3.1.0", - "spdx-expression-parse": "3.0.0" - } - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true }, - "vendors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", - "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, "vm-browserify": { - "version": "0.0.4", - "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true }, "vue": { - "version": "2.5.21", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.21.tgz", - "integrity": "sha512-Aejvyyfhn0zjVeLvXd70h4hrE4zZDx1wfZqia6ekkobLmUZ+vNFQer53B4fu0EjWBSiqApxPejzkO1Znt3joxQ==", - "dev": true - }, - "vue-hot-reload-api": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.1.tgz", - "integrity": "sha512-AA86yKZ5uOKz87/q1UpngEXhbRkaYg1b7HMMVRobNV1IVKqZe8oLIzo6iMocVwZXnYitlGwf2k4ZRLOZlS8oPQ==", - "dev": true - }, - "vue-loader": { - "version": "13.7.3", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-13.7.3.tgz", - "integrity": "sha512-ACCwbfeC6HjY2pnDii+Zer+MZ6sdOtwvLmDXRK/BoD3WNR551V22R6KEagwHoTRJ0ZlIhpCBkptpCU6+Ri/05w==", + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz", + "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", "dev": true, "requires": { - "consolidate": "0.14.5", - "hash-sum": "1.0.2", - "loader-utils": "1.1.0", - "lru-cache": "4.1.5", - "postcss": "6.0.23", - "postcss-load-config": "1.2.0", - "postcss-selector-parser": "2.2.3", - "prettier": "1.15.3", - "resolve": "1.8.1", - "source-map": "0.6.1", - "vue-hot-reload-api": "2.3.1", - "vue-style-loader": "3.1.2", - "vue-template-es2015-compiler": "1.6.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.7.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "postcss-load-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1", - "postcss-load-options": "1.2.0", - "postcss-load-plugins": "2.3.0" - } - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "@vue/compiler-sfc": "2.7.16", + "csstype": "^3.1.0" } }, "vue-style-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.1.2.tgz", - "integrity": "sha512-ICtVdK/p+qXWpdSs2alWtsXt9YnDoYjQe0w5616j9+/EhjoxZkbun34uWgsMFnC1MhrMMwaWiImz3K2jK1Yp2Q==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", "dev": true, "requires": { - "hash-sum": "1.0.2", - "loader-utils": "1.1.0" + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } } }, - "vue-template-compiler": { - "version": "2.5.21", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.21.tgz", - "integrity": "sha512-Vmk5Cv7UcmI99B9nXJEkaK262IQNnHp5rJYo+EwYpe2epTAXqcVyExhV6pk8jTkxQK2vRc8v8KmZBAwdmUZvvw==", - "dev": true, - "requires": { - "de-indent": "1.0.2", - "he": "1.2.0" - } - }, - "vue-template-es2015-compiler": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", - "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==", - "dev": true - }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.15", - "neo-async": "2.6.0" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" } }, "wbuf": { @@ -10210,353 +20508,161 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "1.0.1" + "minimalistic-assert": "^1.0.0" } }, "webpack": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", - "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", "dev": true, "requires": { - "acorn": "5.7.3", - "acorn-dynamic-import": "2.0.2", - "ajv": "6.6.1", - "ajv-keywords": "3.2.0", - "async": "2.6.1", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.9", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0", - "yargs": "8.0.2" + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" }, "dependencies": { "ajv": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", - "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" } }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "requires": { - "lodash": "4.17.11" + "fast-deep-equal": "^3.1.3" } }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" } }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.3.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "4.1.0" - } - } - } - }, - "webpack-chunk-hash": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/webpack-chunk-hash/-/webpack-chunk-hash-0.4.0.tgz", - "integrity": "sha1-a0DDBw+8n/DP4P54HHF0r2x8FqQ=", - "dev": true - }, - "webpack-dev-middleware": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", - "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", - "dev": true, - "requires": { - "memory-fs": "0.4.1", - "mime": "1.6.0", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "time-stamp": "2.2.0" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true } } }, - "webpack-dev-server": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.3.tgz", - "integrity": "sha512-Qz22YEFhWx+M2vvJ+rQppRv39JA0h5NNbOOdODApdX6iZ52Diz7vTPXjF7kJlfn+Uc24Qr48I3SZ9yncQwRycg==", + "webpack-cli": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "requires": { - "ansi-html": "0.0.7", - "array-includes": "3.0.3", - "bonjour": "3.5.0", - "chokidar": "2.0.4", - "compression": "1.7.3", - "connect-history-api-fallback": "1.5.0", - "debug": "3.1.0", - "del": "3.0.0", - "express": "4.16.4", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.17.4", - "import-local": "1.0.0", - "internal-ip": "1.2.0", - "ip": "1.1.5", - "killable": "1.0.1", - "loglevel": "1.6.1", - "opn": "5.3.0", - "portfinder": "1.0.20", - "selfsigned": "1.10.4", - "serve-index": "1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.1.5", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.5.0", - "webpack-dev-middleware": "1.12.2", - "yargs": "6.6.0" + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", + "colorette": "^2.0.14", + "commander": "^12.1.0", + "cross-spawn": "^7.0.3", + "envinfo": "^7.14.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^6.0.1" }, "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true + }, + "commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true + }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "requires": { - "has-flag": "3.0.0" + "resolve": "^1.20.0" } }, - "yargs": { - "version": "6.6.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" } } } }, "webpack-merge": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.5.tgz", - "integrity": "sha512-sVcM+MMJv6DO0C0GLLltx8mUlGMKXE0zBsuMqZ9jz2X9gsekALw6Rs0cAfTWc97VuWS6NpVUa78959zANnMMLQ==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, "requires": { - "lodash": "4.17.11" + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" } }, "webpack-notifier": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.7.0.tgz", - "integrity": "sha512-L3UKrl500xk0VDYKkwQxy5/BPhBWsZ2xHsAx2Qe3dVKYUEk9+y690RcNTMIUcVOK2fRgK7KK3PA4ccOq1h+fTg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", + "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", "dev": true, "requires": { - "node-notifier": "5.3.0", - "object-assign": "4.1.1", - "strip-ansi": "3.0.1" + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" } }, "webpack-sources": { @@ -10565,38 +20671,37 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" } }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { - "http-parser-js": "0.5.0", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true - }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "which": { @@ -10605,129 +20710,124 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "1.0.2" - } - }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", - "dev": true, - "requires": { - "errno": "0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "ws": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", - "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", + "write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "requires": { - "async-limiter": "1.0.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "integrity": "sha512-iTwvhNBRetXWe81+VcIw5YeadVSWyze7uA7nVnpP13ulrpnJ3UfQm5ApGnrkmxDJFdrblRdZs0EvaTCIfei5oQ==", "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha512-U+iKQ8rDYMRmvEpvDUIWZ3CtM9/imlAc+c1yJ7YV0vu+HNtP82sAkXzuDXPLkIPoLZohnXFSs9wf2E17xk5yZA==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { - "version": "6.4.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", - "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "window-size": "0.2.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + } } }, "yargs-parser": { - "version": "4.2.1", - "resolved": "http://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } diff --git a/package.json b/package.json index fc2cac2..8444e3b 100644 --- a/package.json +++ b/package.json @@ -2,24 +2,38 @@ "private": true, "scripts": { "dev": "npm run development", - "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", - "watch": "npm run development -- --watch", - "watch-poll": "npm run watch -- --watch-poll", - "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", "prod": "npm run production", - "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" + "production": "mix --production" }, "devDependencies": { - "axios": "^0.18", + "axios": "^1.8.4", "bootstrap": "^4.0.0", - "browser-sync": "^2.24.7", - "browser-sync-webpack-plugin": "2.0.1", - "cross-env": "^5.1", + "clean-webpack-plugin": "^4.0.0", + "eslint": "^9.23.0", + "eslint-webpack-plugin": "^5.0.0", "jquery": "^3.2", - "laravel-mix": "^2.0", + "laravel-mix": "^6.0", + "laravel-mix-clean": "^0.1.0", + "laravel-mix-eslint": "^0.2.0", + "laravel-mix-polyfill": "^3.0.1", + "laravel-mix-stylelint": "^1.0.0", "lodash": "^4.17.5", "popper.js": "^1.12", + "resolve-url-loader": "^5.0.0", + "sass": "^1.86.0", + "sass-loader": "^12.6.0", + "stylelint": "^16.16.0", + "stylelint-config-idiomatic-order": "^10.0.0", + "stylelint-config-sass-guidelines": "^12.1.0", + "stylelint-config-standard-scss": "^14.0.0", + "stylelint-scss": "^6.11.1", + "stylelint-webpack-plugin": "^5.0.1", "sweetalert": "^2.0.8", - "vue": "^2.5.7" + "vue": "^2.5.7", + "webpack-cli": "^6.0.1" } } diff --git a/production-resources.yaml b/production-resources.yaml new file mode 100644 index 0000000..4abfff7 --- /dev/null +++ b/production-resources.yaml @@ -0,0 +1,12 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: $APP_DOMAIN +spec: + dnsNames: + - $APP_DOMAIN + - www.${APP_DOMAIN} + secretName: $APP_DOMAIN + issuerRef: + name: $APP_CERT_ISSUER + kind: ClusterIssuer diff --git a/public/coupons/.gitkeep b/public/coupons/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/public/css/app.css b/public/css/app.css deleted file mode 100644 index 7c4f8b0..0000000 --- a/public/css/app.css +++ /dev/null @@ -1,7410 +0,0 @@ -@font-face { - font-family: 'Nunito-Bold'; - font-style: normal; - font-weight: 400; - src: url("../webfonts/Nunito/Nunito-Bold.ttf") format("truetype"); -} - -@font-face { - font-family: 'Nunito-Regular'; - font-style: normal; - font-weight: 400; - src: url("../webfonts/Nunito/Nunito-Regular.ttf") format("truetype"); -} - -@font-face { - font-family: 'Nunito-ExtraLight'; - font-style: normal; - font-weight: 200; - src: url("../webfonts/Nunito/Nunito-ExtraLight.ttf") format("truetype"); -} - -@font-face { - font-family: 'Nunito-Black'; - font-style: normal; - font-weight: 400; - src: url("../webfonts/Nunito/Nunito-Black.ttf") format("truetype"); -} - -/* http://meyerweb.com/eric/tools/css/reset/ - v2.0 | 20110126 - License: none (public domain) -*/ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} - -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} - -body { - line-height: 1; -} - -ol, ul { - list-style: none; -} - -blockquote, q { - quotes: none; -} - -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -h1 { - font-family: 'Nunito-ExtraLight', sans-serif; - font-size: 2em; - color: #de9700; -} - -h2 { - font-family: 'Nunito-ExtraLight', sans-serif; - font-size: 1.5em; - color: #de9700; - margin-bottom: 30px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} - -h2 i { - margin-right: 10px; -} - -h2 .fa-folder { - position: relative; -} - -h2 .fa-folder .fa-ticket-alt { - position: absolute; - left: 4px; - top: 7px; - font-size: 0.6em; - color: #303030; - margin-left: 0; - width: auto; - text-align: left; -} - -h2 .add-button { - font-size: 0.6em; - background-color: #de9700; - color: #393939; - font-weight: bold; - padding: 5px 10px; - margin: 10px 0; - display: -webkit-inline-box; - display: -ms-inline-flexbox; - display: inline-flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - margin-left: 20px; - text-decoration: none; - border-radius: 5px; - border: 1px solid #de9700; -} - -h2 .add-button:hover { - background-color: #393939; - color: #de9700; - border: 1px solid #de9700; -} - -h3 { - font-family: 'Nunito-ExtraLight', sans-serif; - font-size: 1.3em; - color: #de9700; - margin: 20px 0 10px 0; -} - -h4 { - font-family: 'Nunito-ExtraLight', sans-serif; - font-size: 1.1em; - color: #de9700; - margin: 20px 0 10px 0; -} - -h5 { - font-family: 'Nunito-ExtraLight', sans-serif; - font-size: 1.1em; - color: #adb5bd; - padding-bottom: 5px; -} - -h5 i { - color: #de9700; - margin-right: 10px; -} - -h5 { - font-family: 'Nunito-ExtraLight', sans-serif; - font-size: 1em; - color: #de9700; - margin: 20px 0 10px 0; -} - -p { - font-family: 'Nunito-ExtraLight', sans-serif; - color: #adb5bd; -} - -.add-button { - font-family: 'Nunito-ExtraLight', sans-serif; - font-size: 0.9em; - background-color: #de9700; - color: #393939; - font-weight: bold; - padding: 5px 10px; - display: -webkit-inline-box; - display: -ms-inline-flexbox; - display: inline-flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - margin-left: 20px; - text-decoration: none; - border-radius: 5px; - border: 1px solid #de9700; -} - -.add-button:hover { - background-color: #393939; - color: #de9700; - border: 1px solid #de9700; -} - -.add-button i { - margin-right: 10px; -} - -.code404 { - background-color: #adb5bd; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} - -.code404 div { - width: 400px; - padding: 20px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - background-color: #FFF; -} - -.code404 div h2 { - color: #df0000; - font-weight: bold; -} - -.code404 div p { - color: #000; - text-align: center; - line-height: 1.2em; - font-weight: bold; -} - -.notPublished { - background-color: rgba(223, 0, 0, 0.3) !important; -} - -/*! - * Font Awesome Free 5.3.1 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.fa, -.fas, -.far, -.fal, -.fab { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - line-height: 1; -} - -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -.0667em; -} - -.fa-xs { - font-size: .75em; -} - -.fa-sm { - font-size: .875em; -} - -.fa-1x { - font-size: 1em; -} - -.fa-2x { - font-size: 2em; -} - -.fa-3x { - font-size: 3em; -} - -.fa-4x { - font-size: 4em; -} - -.fa-5x { - font-size: 5em; -} - -.fa-6x { - font-size: 6em; -} - -.fa-7x { - font-size: 7em; -} - -.fa-8x { - font-size: 8em; -} - -.fa-9x { - font-size: 9em; -} - -.fa-10x { - font-size: 10em; -} - -.fa-fw { - text-align: center; - width: 1.25em; -} - -.fa-ul { - list-style-type: none; - margin-left: 2.5em; - padding-left: 0; -} - -.fa-ul > li { - position: relative; -} - -.fa-li { - left: -2em; - position: absolute; - text-align: center; - width: 2em; - line-height: inherit; -} - -.fa-border { - border: solid 0.08em #eee; - border-radius: .1em; - padding: .2em .25em .15em; -} - -.fa-pull-left { - float: left; -} - -.fa-pull-right { - float: right; -} - -.fa.fa-pull-left, -.fas.fa-pull-left, -.far.fa-pull-left, -.fal.fa-pull-left, -.fab.fa-pull-left { - margin-right: .3em; -} - -.fa.fa-pull-right, -.fas.fa-pull-right, -.far.fa-pull-right, -.fal.fa-pull-right, -.fab.fa-pull-right { - margin-left: .3em; -} - -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} - -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -.fa-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; - -webkit-transform: rotate(90deg); - transform: rotate(90deg); -} - -.fa-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; - -webkit-transform: rotate(180deg); - transform: rotate(180deg); -} - -.fa-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; - -webkit-transform: rotate(270deg); - transform: rotate(270deg); -} - -.fa-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; - -webkit-transform: scale(-1, 1); - transform: scale(-1, 1); -} - -.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - -webkit-transform: scale(1, -1); - transform: scale(1, -1); -} - -.fa-flip-horizontal.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - -webkit-transform: scale(-1, -1); - transform: scale(-1, -1); -} - -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - -webkit-filter: none; - filter: none; -} - -.fa-stack { - display: inline-block; - height: 2em; - line-height: 2em; - position: relative; - vertical-align: middle; - width: 2em; -} - -.fa-stack-1x, -.fa-stack-2x { - left: 0; - position: absolute; - text-align: center; - width: 100%; -} - -.fa-stack-1x { - line-height: inherit; -} - -.fa-stack-2x { - font-size: 2em; -} - -.fa-inverse { - color: #fff; -} - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen -readers do not read off random characters that represent icons */ -.fa-500px:before { - content: "\F26E"; -} - -.fa-accessible-icon:before { - content: "\F368"; -} - -.fa-accusoft:before { - content: "\F369"; -} - -.fa-ad:before { - content: "\F641"; -} - -.fa-address-book:before { - content: "\F2B9"; -} - -.fa-address-card:before { - content: "\F2BB"; -} - -.fa-adjust:before { - content: "\F042"; -} - -.fa-adn:before { - content: "\F170"; -} - -.fa-adversal:before { - content: "\F36A"; -} - -.fa-affiliatetheme:before { - content: "\F36B"; -} - -.fa-air-freshener:before { - content: "\F5D0"; -} - -.fa-algolia:before { - content: "\F36C"; -} - -.fa-align-center:before { - content: "\F037"; -} - -.fa-align-justify:before { - content: "\F039"; -} - -.fa-align-left:before { - content: "\F036"; -} - -.fa-align-right:before { - content: "\F038"; -} - -.fa-alipay:before { - content: "\F642"; -} - -.fa-allergies:before { - content: "\F461"; -} - -.fa-amazon:before { - content: "\F270"; -} - -.fa-amazon-pay:before { - content: "\F42C"; -} - -.fa-ambulance:before { - content: "\F0F9"; -} - -.fa-american-sign-language-interpreting:before { - content: "\F2A3"; -} - -.fa-amilia:before { - content: "\F36D"; -} - -.fa-anchor:before { - content: "\F13D"; -} - -.fa-android:before { - content: "\F17B"; -} - -.fa-angellist:before { - content: "\F209"; -} - -.fa-angle-double-down:before { - content: "\F103"; -} - -.fa-angle-double-left:before { - content: "\F100"; -} - -.fa-angle-double-right:before { - content: "\F101"; -} - -.fa-angle-double-up:before { - content: "\F102"; -} - -.fa-angle-down:before { - content: "\F107"; -} - -.fa-angle-left:before { - content: "\F104"; -} - -.fa-angle-right:before { - content: "\F105"; -} - -.fa-angle-up:before { - content: "\F106"; -} - -.fa-angry:before { - content: "\F556"; -} - -.fa-angrycreative:before { - content: "\F36E"; -} - -.fa-angular:before { - content: "\F420"; -} - -.fa-ankh:before { - content: "\F644"; -} - -.fa-app-store:before { - content: "\F36F"; -} - -.fa-app-store-ios:before { - content: "\F370"; -} - -.fa-apper:before { - content: "\F371"; -} - -.fa-apple:before { - content: "\F179"; -} - -.fa-apple-alt:before { - content: "\F5D1"; -} - -.fa-apple-pay:before { - content: "\F415"; -} - -.fa-archive:before { - content: "\F187"; -} - -.fa-archway:before { - content: "\F557"; -} - -.fa-arrow-alt-circle-down:before { - content: "\F358"; -} - -.fa-arrow-alt-circle-left:before { - content: "\F359"; -} - -.fa-arrow-alt-circle-right:before { - content: "\F35A"; -} - -.fa-arrow-alt-circle-up:before { - content: "\F35B"; -} - -.fa-arrow-circle-down:before { - content: "\F0AB"; -} - -.fa-arrow-circle-left:before { - content: "\F0A8"; -} - -.fa-arrow-circle-right:before { - content: "\F0A9"; -} - -.fa-arrow-circle-up:before { - content: "\F0AA"; -} - -.fa-arrow-down:before { - content: "\F063"; -} - -.fa-arrow-left:before { - content: "\F060"; -} - -.fa-arrow-right:before { - content: "\F061"; -} - -.fa-arrow-up:before { - content: "\F062"; -} - -.fa-arrows-alt:before { - content: "\F0B2"; -} - -.fa-arrows-alt-h:before { - content: "\F337"; -} - -.fa-arrows-alt-v:before { - content: "\F338"; -} - -.fa-assistive-listening-systems:before { - content: "\F2A2"; -} - -.fa-asterisk:before { - content: "\F069"; -} - -.fa-asymmetrik:before { - content: "\F372"; -} - -.fa-at:before { - content: "\F1FA"; -} - -.fa-atlas:before { - content: "\F558"; -} - -.fa-atom:before { - content: "\F5D2"; -} - -.fa-audible:before { - content: "\F373"; -} - -.fa-audio-description:before { - content: "\F29E"; -} - -.fa-autoprefixer:before { - content: "\F41C"; -} - -.fa-avianex:before { - content: "\F374"; -} - -.fa-aviato:before { - content: "\F421"; -} - -.fa-award:before { - content: "\F559"; -} - -.fa-aws:before { - content: "\F375"; -} - -.fa-backspace:before { - content: "\F55A"; -} - -.fa-backward:before { - content: "\F04A"; -} - -.fa-balance-scale:before { - content: "\F24E"; -} - -.fa-ban:before { - content: "\F05E"; -} - -.fa-band-aid:before { - content: "\F462"; -} - -.fa-bandcamp:before { - content: "\F2D5"; -} - -.fa-barcode:before { - content: "\F02A"; -} - -.fa-bars:before { - content: "\F0C9"; -} - -.fa-baseball-ball:before { - content: "\F433"; -} - -.fa-basketball-ball:before { - content: "\F434"; -} - -.fa-bath:before { - content: "\F2CD"; -} - -.fa-battery-empty:before { - content: "\F244"; -} - -.fa-battery-full:before { - content: "\F240"; -} - -.fa-battery-half:before { - content: "\F242"; -} - -.fa-battery-quarter:before { - content: "\F243"; -} - -.fa-battery-three-quarters:before { - content: "\F241"; -} - -.fa-bed:before { - content: "\F236"; -} - -.fa-beer:before { - content: "\F0FC"; -} - -.fa-behance:before { - content: "\F1B4"; -} - -.fa-behance-square:before { - content: "\F1B5"; -} - -.fa-bell:before { - content: "\F0F3"; -} - -.fa-bell-slash:before { - content: "\F1F6"; -} - -.fa-bezier-curve:before { - content: "\F55B"; -} - -.fa-bible:before { - content: "\F647"; -} - -.fa-bicycle:before { - content: "\F206"; -} - -.fa-bimobject:before { - content: "\F378"; -} - -.fa-binoculars:before { - content: "\F1E5"; -} - -.fa-birthday-cake:before { - content: "\F1FD"; -} - -.fa-bitbucket:before { - content: "\F171"; -} - -.fa-bitcoin:before { - content: "\F379"; -} - -.fa-bity:before { - content: "\F37A"; -} - -.fa-black-tie:before { - content: "\F27E"; -} - -.fa-blackberry:before { - content: "\F37B"; -} - -.fa-blender:before { - content: "\F517"; -} - -.fa-blind:before { - content: "\F29D"; -} - -.fa-blogger:before { - content: "\F37C"; -} - -.fa-blogger-b:before { - content: "\F37D"; -} - -.fa-bluetooth:before { - content: "\F293"; -} - -.fa-bluetooth-b:before { - content: "\F294"; -} - -.fa-bold:before { - content: "\F032"; -} - -.fa-bolt:before { - content: "\F0E7"; -} - -.fa-bomb:before { - content: "\F1E2"; -} - -.fa-bone:before { - content: "\F5D7"; -} - -.fa-bong:before { - content: "\F55C"; -} - -.fa-book:before { - content: "\F02D"; -} - -.fa-book-open:before { - content: "\F518"; -} - -.fa-book-reader:before { - content: "\F5DA"; -} - -.fa-bookmark:before { - content: "\F02E"; -} - -.fa-bowling-ball:before { - content: "\F436"; -} - -.fa-box:before { - content: "\F466"; -} - -.fa-box-open:before { - content: "\F49E"; -} - -.fa-boxes:before { - content: "\F468"; -} - -.fa-braille:before { - content: "\F2A1"; -} - -.fa-brain:before { - content: "\F5DC"; -} - -.fa-briefcase:before { - content: "\F0B1"; -} - -.fa-briefcase-medical:before { - content: "\F469"; -} - -.fa-broadcast-tower:before { - content: "\F519"; -} - -.fa-broom:before { - content: "\F51A"; -} - -.fa-brush:before { - content: "\F55D"; -} - -.fa-btc:before { - content: "\F15A"; -} - -.fa-bug:before { - content: "\F188"; -} - -.fa-building:before { - content: "\F1AD"; -} - -.fa-bullhorn:before { - content: "\F0A1"; -} - -.fa-bullseye:before { - content: "\F140"; -} - -.fa-burn:before { - content: "\F46A"; -} - -.fa-buromobelexperte:before { - content: "\F37F"; -} - -.fa-bus:before { - content: "\F207"; -} - -.fa-bus-alt:before { - content: "\F55E"; -} - -.fa-business-time:before { - content: "\F64A"; -} - -.fa-buysellads:before { - content: "\F20D"; -} - -.fa-calculator:before { - content: "\F1EC"; -} - -.fa-calendar:before { - content: "\F133"; -} - -.fa-calendar-alt:before { - content: "\F073"; -} - -.fa-calendar-check:before { - content: "\F274"; -} - -.fa-calendar-minus:before { - content: "\F272"; -} - -.fa-calendar-plus:before { - content: "\F271"; -} - -.fa-calendar-times:before { - content: "\F273"; -} - -.fa-camera:before { - content: "\F030"; -} - -.fa-camera-retro:before { - content: "\F083"; -} - -.fa-cannabis:before { - content: "\F55F"; -} - -.fa-capsules:before { - content: "\F46B"; -} - -.fa-car:before { - content: "\F1B9"; -} - -.fa-car-alt:before { - content: "\F5DE"; -} - -.fa-car-battery:before { - content: "\F5DF"; -} - -.fa-car-crash:before { - content: "\F5E1"; -} - -.fa-car-side:before { - content: "\F5E4"; -} - -.fa-caret-down:before { - content: "\F0D7"; -} - -.fa-caret-left:before { - content: "\F0D9"; -} - -.fa-caret-right:before { - content: "\F0DA"; -} - -.fa-caret-square-down:before { - content: "\F150"; -} - -.fa-caret-square-left:before { - content: "\F191"; -} - -.fa-caret-square-right:before { - content: "\F152"; -} - -.fa-caret-square-up:before { - content: "\F151"; -} - -.fa-caret-up:before { - content: "\F0D8"; -} - -.fa-cart-arrow-down:before { - content: "\F218"; -} - -.fa-cart-plus:before { - content: "\F217"; -} - -.fa-cc-amazon-pay:before { - content: "\F42D"; -} - -.fa-cc-amex:before { - content: "\F1F3"; -} - -.fa-cc-apple-pay:before { - content: "\F416"; -} - -.fa-cc-diners-club:before { - content: "\F24C"; -} - -.fa-cc-discover:before { - content: "\F1F2"; -} - -.fa-cc-jcb:before { - content: "\F24B"; -} - -.fa-cc-mastercard:before { - content: "\F1F1"; -} - -.fa-cc-paypal:before { - content: "\F1F4"; -} - -.fa-cc-stripe:before { - content: "\F1F5"; -} - -.fa-cc-visa:before { - content: "\F1F0"; -} - -.fa-centercode:before { - content: "\F380"; -} - -.fa-certificate:before { - content: "\F0A3"; -} - -.fa-chalkboard:before { - content: "\F51B"; -} - -.fa-chalkboard-teacher:before { - content: "\F51C"; -} - -.fa-charging-station:before { - content: "\F5E7"; -} - -.fa-chart-area:before { - content: "\F1FE"; -} - -.fa-chart-bar:before { - content: "\F080"; -} - -.fa-chart-line:before { - content: "\F201"; -} - -.fa-chart-pie:before { - content: "\F200"; -} - -.fa-check:before { - content: "\F00C"; -} - -.fa-check-circle:before { - content: "\F058"; -} - -.fa-check-double:before { - content: "\F560"; -} - -.fa-check-square:before { - content: "\F14A"; -} - -.fa-chess:before { - content: "\F439"; -} - -.fa-chess-bishop:before { - content: "\F43A"; -} - -.fa-chess-board:before { - content: "\F43C"; -} - -.fa-chess-king:before { - content: "\F43F"; -} - -.fa-chess-knight:before { - content: "\F441"; -} - -.fa-chess-pawn:before { - content: "\F443"; -} - -.fa-chess-queen:before { - content: "\F445"; -} - -.fa-chess-rook:before { - content: "\F447"; -} - -.fa-chevron-circle-down:before { - content: "\F13A"; -} - -.fa-chevron-circle-left:before { - content: "\F137"; -} - -.fa-chevron-circle-right:before { - content: "\F138"; -} - -.fa-chevron-circle-up:before { - content: "\F139"; -} - -.fa-chevron-down:before { - content: "\F078"; -} - -.fa-chevron-left:before { - content: "\F053"; -} - -.fa-chevron-right:before { - content: "\F054"; -} - -.fa-chevron-up:before { - content: "\F077"; -} - -.fa-child:before { - content: "\F1AE"; -} - -.fa-chrome:before { - content: "\F268"; -} - -.fa-church:before { - content: "\F51D"; -} - -.fa-circle:before { - content: "\F111"; -} - -.fa-circle-notch:before { - content: "\F1CE"; -} - -.fa-city:before { - content: "\F64F"; -} - -.fa-clipboard:before { - content: "\F328"; -} - -.fa-clipboard-check:before { - content: "\F46C"; -} - -.fa-clipboard-list:before { - content: "\F46D"; -} - -.fa-clock:before { - content: "\F017"; -} - -.fa-clone:before { - content: "\F24D"; -} - -.fa-closed-captioning:before { - content: "\F20A"; -} - -.fa-cloud:before { - content: "\F0C2"; -} - -.fa-cloud-download-alt:before { - content: "\F381"; -} - -.fa-cloud-upload-alt:before { - content: "\F382"; -} - -.fa-cloudscale:before { - content: "\F383"; -} - -.fa-cloudsmith:before { - content: "\F384"; -} - -.fa-cloudversify:before { - content: "\F385"; -} - -.fa-cocktail:before { - content: "\F561"; -} - -.fa-code:before { - content: "\F121"; -} - -.fa-code-branch:before { - content: "\F126"; -} - -.fa-codepen:before { - content: "\F1CB"; -} - -.fa-codiepie:before { - content: "\F284"; -} - -.fa-coffee:before { - content: "\F0F4"; -} - -.fa-cog:before { - content: "\F013"; -} - -.fa-cogs:before { - content: "\F085"; -} - -.fa-coins:before { - content: "\F51E"; -} - -.fa-columns:before { - content: "\F0DB"; -} - -.fa-comment:before { - content: "\F075"; -} - -.fa-comment-alt:before { - content: "\F27A"; -} - -.fa-comment-dollar:before { - content: "\F651"; -} - -.fa-comment-dots:before { - content: "\F4AD"; -} - -.fa-comment-slash:before { - content: "\F4B3"; -} - -.fa-comments:before { - content: "\F086"; -} - -.fa-comments-dollar:before { - content: "\F653"; -} - -.fa-compact-disc:before { - content: "\F51F"; -} - -.fa-compass:before { - content: "\F14E"; -} - -.fa-compress:before { - content: "\F066"; -} - -.fa-concierge-bell:before { - content: "\F562"; -} - -.fa-connectdevelop:before { - content: "\F20E"; -} - -.fa-contao:before { - content: "\F26D"; -} - -.fa-cookie:before { - content: "\F563"; -} - -.fa-cookie-bite:before { - content: "\F564"; -} - -.fa-copy:before { - content: "\F0C5"; -} - -.fa-copyright:before { - content: "\F1F9"; -} - -.fa-couch:before { - content: "\F4B8"; -} - -.fa-cpanel:before { - content: "\F388"; -} - -.fa-creative-commons:before { - content: "\F25E"; -} - -.fa-creative-commons-by:before { - content: "\F4E7"; -} - -.fa-creative-commons-nc:before { - content: "\F4E8"; -} - -.fa-creative-commons-nc-eu:before { - content: "\F4E9"; -} - -.fa-creative-commons-nc-jp:before { - content: "\F4EA"; -} - -.fa-creative-commons-nd:before { - content: "\F4EB"; -} - -.fa-creative-commons-pd:before { - content: "\F4EC"; -} - -.fa-creative-commons-pd-alt:before { - content: "\F4ED"; -} - -.fa-creative-commons-remix:before { - content: "\F4EE"; -} - -.fa-creative-commons-sa:before { - content: "\F4EF"; -} - -.fa-creative-commons-sampling:before { - content: "\F4F0"; -} - -.fa-creative-commons-sampling-plus:before { - content: "\F4F1"; -} - -.fa-creative-commons-share:before { - content: "\F4F2"; -} - -.fa-credit-card:before { - content: "\F09D"; -} - -.fa-crop:before { - content: "\F125"; -} - -.fa-crop-alt:before { - content: "\F565"; -} - -.fa-cross:before { - content: "\F654"; -} - -.fa-crosshairs:before { - content: "\F05B"; -} - -.fa-crow:before { - content: "\F520"; -} - -.fa-crown:before { - content: "\F521"; -} - -.fa-css3:before { - content: "\F13C"; -} - -.fa-css3-alt:before { - content: "\F38B"; -} - -.fa-cube:before { - content: "\F1B2"; -} - -.fa-cubes:before { - content: "\F1B3"; -} - -.fa-cut:before { - content: "\F0C4"; -} - -.fa-cuttlefish:before { - content: "\F38C"; -} - -.fa-d-and-d:before { - content: "\F38D"; -} - -.fa-dashcube:before { - content: "\F210"; -} - -.fa-database:before { - content: "\F1C0"; -} - -.fa-deaf:before { - content: "\F2A4"; -} - -.fa-delicious:before { - content: "\F1A5"; -} - -.fa-deploydog:before { - content: "\F38E"; -} - -.fa-deskpro:before { - content: "\F38F"; -} - -.fa-desktop:before { - content: "\F108"; -} - -.fa-deviantart:before { - content: "\F1BD"; -} - -.fa-dharmachakra:before { - content: "\F655"; -} - -.fa-diagnoses:before { - content: "\F470"; -} - -.fa-dice:before { - content: "\F522"; -} - -.fa-dice-five:before { - content: "\F523"; -} - -.fa-dice-four:before { - content: "\F524"; -} - -.fa-dice-one:before { - content: "\F525"; -} - -.fa-dice-six:before { - content: "\F526"; -} - -.fa-dice-three:before { - content: "\F527"; -} - -.fa-dice-two:before { - content: "\F528"; -} - -.fa-digg:before { - content: "\F1A6"; -} - -.fa-digital-ocean:before { - content: "\F391"; -} - -.fa-digital-tachograph:before { - content: "\F566"; -} - -.fa-directions:before { - content: "\F5EB"; -} - -.fa-discord:before { - content: "\F392"; -} - -.fa-discourse:before { - content: "\F393"; -} - -.fa-divide:before { - content: "\F529"; -} - -.fa-dizzy:before { - content: "\F567"; -} - -.fa-dna:before { - content: "\F471"; -} - -.fa-dochub:before { - content: "\F394"; -} - -.fa-docker:before { - content: "\F395"; -} - -.fa-dollar-sign:before { - content: "\F155"; -} - -.fa-dolly:before { - content: "\F472"; -} - -.fa-dolly-flatbed:before { - content: "\F474"; -} - -.fa-donate:before { - content: "\F4B9"; -} - -.fa-door-closed:before { - content: "\F52A"; -} - -.fa-door-open:before { - content: "\F52B"; -} - -.fa-dot-circle:before { - content: "\F192"; -} - -.fa-dove:before { - content: "\F4BA"; -} - -.fa-download:before { - content: "\F019"; -} - -.fa-draft2digital:before { - content: "\F396"; -} - -.fa-drafting-compass:before { - content: "\F568"; -} - -.fa-draw-polygon:before { - content: "\F5EE"; -} - -.fa-dribbble:before { - content: "\F17D"; -} - -.fa-dribbble-square:before { - content: "\F397"; -} - -.fa-dropbox:before { - content: "\F16B"; -} - -.fa-drum:before { - content: "\F569"; -} - -.fa-drum-steelpan:before { - content: "\F56A"; -} - -.fa-drupal:before { - content: "\F1A9"; -} - -.fa-dumbbell:before { - content: "\F44B"; -} - -.fa-dyalog:before { - content: "\F399"; -} - -.fa-earlybirds:before { - content: "\F39A"; -} - -.fa-ebay:before { - content: "\F4F4"; -} - -.fa-edge:before { - content: "\F282"; -} - -.fa-edit:before { - content: "\F044"; -} - -.fa-eject:before { - content: "\F052"; -} - -.fa-elementor:before { - content: "\F430"; -} - -.fa-ellipsis-h:before { - content: "\F141"; -} - -.fa-ellipsis-v:before { - content: "\F142"; -} - -.fa-ello:before { - content: "\F5F1"; -} - -.fa-ember:before { - content: "\F423"; -} - -.fa-empire:before { - content: "\F1D1"; -} - -.fa-envelope:before { - content: "\F0E0"; -} - -.fa-envelope-open:before { - content: "\F2B6"; -} - -.fa-envelope-open-text:before { - content: "\F658"; -} - -.fa-envelope-square:before { - content: "\F199"; -} - -.fa-envira:before { - content: "\F299"; -} - -.fa-equals:before { - content: "\F52C"; -} - -.fa-eraser:before { - content: "\F12D"; -} - -.fa-erlang:before { - content: "\F39D"; -} - -.fa-ethereum:before { - content: "\F42E"; -} - -.fa-etsy:before { - content: "\F2D7"; -} - -.fa-euro-sign:before { - content: "\F153"; -} - -.fa-exchange-alt:before { - content: "\F362"; -} - -.fa-exclamation:before { - content: "\F12A"; -} - -.fa-exclamation-circle:before { - content: "\F06A"; -} - -.fa-exclamation-triangle:before { - content: "\F071"; -} - -.fa-expand:before { - content: "\F065"; -} - -.fa-expand-arrows-alt:before { - content: "\F31E"; -} - -.fa-expeditedssl:before { - content: "\F23E"; -} - -.fa-external-link-alt:before { - content: "\F35D"; -} - -.fa-external-link-square-alt:before { - content: "\F360"; -} - -.fa-eye:before { - content: "\F06E"; -} - -.fa-eye-dropper:before { - content: "\F1FB"; -} - -.fa-eye-slash:before { - content: "\F070"; -} - -.fa-facebook:before { - content: "\F09A"; -} - -.fa-facebook-f:before { - content: "\F39E"; -} - -.fa-facebook-messenger:before { - content: "\F39F"; -} - -.fa-facebook-square:before { - content: "\F082"; -} - -.fa-fast-backward:before { - content: "\F049"; -} - -.fa-fast-forward:before { - content: "\F050"; -} - -.fa-fax:before { - content: "\F1AC"; -} - -.fa-feather:before { - content: "\F52D"; -} - -.fa-feather-alt:before { - content: "\F56B"; -} - -.fa-female:before { - content: "\F182"; -} - -.fa-fighter-jet:before { - content: "\F0FB"; -} - -.fa-file:before { - content: "\F15B"; -} - -.fa-file-alt:before { - content: "\F15C"; -} - -.fa-file-archive:before { - content: "\F1C6"; -} - -.fa-file-audio:before { - content: "\F1C7"; -} - -.fa-file-code:before { - content: "\F1C9"; -} - -.fa-file-contract:before { - content: "\F56C"; -} - -.fa-file-download:before { - content: "\F56D"; -} - -.fa-file-excel:before { - content: "\F1C3"; -} - -.fa-file-export:before { - content: "\F56E"; -} - -.fa-file-image:before { - content: "\F1C5"; -} - -.fa-file-import:before { - content: "\F56F"; -} - -.fa-file-invoice:before { - content: "\F570"; -} - -.fa-file-invoice-dollar:before { - content: "\F571"; -} - -.fa-file-medical:before { - content: "\F477"; -} - -.fa-file-medical-alt:before { - content: "\F478"; -} - -.fa-file-pdf:before { - content: "\F1C1"; -} - -.fa-file-powerpoint:before { - content: "\F1C4"; -} - -.fa-file-prescription:before { - content: "\F572"; -} - -.fa-file-signature:before { - content: "\F573"; -} - -.fa-file-upload:before { - content: "\F574"; -} - -.fa-file-video:before { - content: "\F1C8"; -} - -.fa-file-word:before { - content: "\F1C2"; -} - -.fa-fill:before { - content: "\F575"; -} - -.fa-fill-drip:before { - content: "\F576"; -} - -.fa-film:before { - content: "\F008"; -} - -.fa-filter:before { - content: "\F0B0"; -} - -.fa-fingerprint:before { - content: "\F577"; -} - -.fa-fire:before { - content: "\F06D"; -} - -.fa-fire-extinguisher:before { - content: "\F134"; -} - -.fa-firefox:before { - content: "\F269"; -} - -.fa-first-aid:before { - content: "\F479"; -} - -.fa-first-order:before { - content: "\F2B0"; -} - -.fa-first-order-alt:before { - content: "\F50A"; -} - -.fa-firstdraft:before { - content: "\F3A1"; -} - -.fa-fish:before { - content: "\F578"; -} - -.fa-flag:before { - content: "\F024"; -} - -.fa-flag-checkered:before { - content: "\F11E"; -} - -.fa-flask:before { - content: "\F0C3"; -} - -.fa-flickr:before { - content: "\F16E"; -} - -.fa-flipboard:before { - content: "\F44D"; -} - -.fa-flushed:before { - content: "\F579"; -} - -.fa-fly:before { - content: "\F417"; -} - -.fa-folder:before { - content: "\F07B"; -} - -.fa-folder-minus:before { - content: "\F65D"; -} - -.fa-folder-open:before { - content: "\F07C"; -} - -.fa-folder-plus:before { - content: "\F65E"; -} - -.fa-font:before { - content: "\F031"; -} - -.fa-font-awesome:before { - content: "\F2B4"; -} - -.fa-font-awesome-alt:before { - content: "\F35C"; -} - -.fa-font-awesome-flag:before { - content: "\F425"; -} - -.fa-font-awesome-logo-full:before { - content: "\F4E6"; -} - -.fa-fonticons:before { - content: "\F280"; -} - -.fa-fonticons-fi:before { - content: "\F3A2"; -} - -.fa-football-ball:before { - content: "\F44E"; -} - -.fa-fort-awesome:before { - content: "\F286"; -} - -.fa-fort-awesome-alt:before { - content: "\F3A3"; -} - -.fa-forumbee:before { - content: "\F211"; -} - -.fa-forward:before { - content: "\F04E"; -} - -.fa-foursquare:before { - content: "\F180"; -} - -.fa-free-code-camp:before { - content: "\F2C5"; -} - -.fa-freebsd:before { - content: "\F3A4"; -} - -.fa-frog:before { - content: "\F52E"; -} - -.fa-frown:before { - content: "\F119"; -} - -.fa-frown-open:before { - content: "\F57A"; -} - -.fa-fulcrum:before { - content: "\F50B"; -} - -.fa-funnel-dollar:before { - content: "\F662"; -} - -.fa-futbol:before { - content: "\F1E3"; -} - -.fa-galactic-republic:before { - content: "\F50C"; -} - -.fa-galactic-senate:before { - content: "\F50D"; -} - -.fa-gamepad:before { - content: "\F11B"; -} - -.fa-gas-pump:before { - content: "\F52F"; -} - -.fa-gavel:before { - content: "\F0E3"; -} - -.fa-gem:before { - content: "\F3A5"; -} - -.fa-genderless:before { - content: "\F22D"; -} - -.fa-get-pocket:before { - content: "\F265"; -} - -.fa-gg:before { - content: "\F260"; -} - -.fa-gg-circle:before { - content: "\F261"; -} - -.fa-gift:before { - content: "\F06B"; -} - -.fa-git:before { - content: "\F1D3"; -} - -.fa-git-square:before { - content: "\F1D2"; -} - -.fa-github:before { - content: "\F09B"; -} - -.fa-github-alt:before { - content: "\F113"; -} - -.fa-github-square:before { - content: "\F092"; -} - -.fa-gitkraken:before { - content: "\F3A6"; -} - -.fa-gitlab:before { - content: "\F296"; -} - -.fa-gitter:before { - content: "\F426"; -} - -.fa-glass-martini:before { - content: "\F000"; -} - -.fa-glass-martini-alt:before { - content: "\F57B"; -} - -.fa-glasses:before { - content: "\F530"; -} - -.fa-glide:before { - content: "\F2A5"; -} - -.fa-glide-g:before { - content: "\F2A6"; -} - -.fa-globe:before { - content: "\F0AC"; -} - -.fa-globe-africa:before { - content: "\F57C"; -} - -.fa-globe-americas:before { - content: "\F57D"; -} - -.fa-globe-asia:before { - content: "\F57E"; -} - -.fa-gofore:before { - content: "\F3A7"; -} - -.fa-golf-ball:before { - content: "\F450"; -} - -.fa-goodreads:before { - content: "\F3A8"; -} - -.fa-goodreads-g:before { - content: "\F3A9"; -} - -.fa-google:before { - content: "\F1A0"; -} - -.fa-google-drive:before { - content: "\F3AA"; -} - -.fa-google-play:before { - content: "\F3AB"; -} - -.fa-google-plus:before { - content: "\F2B3"; -} - -.fa-google-plus-g:before { - content: "\F0D5"; -} - -.fa-google-plus-square:before { - content: "\F0D4"; -} - -.fa-google-wallet:before { - content: "\F1EE"; -} - -.fa-gopuram:before { - content: "\F664"; -} - -.fa-graduation-cap:before { - content: "\F19D"; -} - -.fa-gratipay:before { - content: "\F184"; -} - -.fa-grav:before { - content: "\F2D6"; -} - -.fa-greater-than:before { - content: "\F531"; -} - -.fa-greater-than-equal:before { - content: "\F532"; -} - -.fa-grimace:before { - content: "\F57F"; -} - -.fa-grin:before { - content: "\F580"; -} - -.fa-grin-alt:before { - content: "\F581"; -} - -.fa-grin-beam:before { - content: "\F582"; -} - -.fa-grin-beam-sweat:before { - content: "\F583"; -} - -.fa-grin-hearts:before { - content: "\F584"; -} - -.fa-grin-squint:before { - content: "\F585"; -} - -.fa-grin-squint-tears:before { - content: "\F586"; -} - -.fa-grin-stars:before { - content: "\F587"; -} - -.fa-grin-tears:before { - content: "\F588"; -} - -.fa-grin-tongue:before { - content: "\F589"; -} - -.fa-grin-tongue-squint:before { - content: "\F58A"; -} - -.fa-grin-tongue-wink:before { - content: "\F58B"; -} - -.fa-grin-wink:before { - content: "\F58C"; -} - -.fa-grip-horizontal:before { - content: "\F58D"; -} - -.fa-grip-vertical:before { - content: "\F58E"; -} - -.fa-gripfire:before { - content: "\F3AC"; -} - -.fa-grunt:before { - content: "\F3AD"; -} - -.fa-gulp:before { - content: "\F3AE"; -} - -.fa-h-square:before { - content: "\F0FD"; -} - -.fa-hacker-news:before { - content: "\F1D4"; -} - -.fa-hacker-news-square:before { - content: "\F3AF"; -} - -.fa-hackerrank:before { - content: "\F5F7"; -} - -.fa-hamsa:before { - content: "\F665"; -} - -.fa-hand-holding:before { - content: "\F4BD"; -} - -.fa-hand-holding-heart:before { - content: "\F4BE"; -} - -.fa-hand-holding-usd:before { - content: "\F4C0"; -} - -.fa-hand-lizard:before { - content: "\F258"; -} - -.fa-hand-paper:before { - content: "\F256"; -} - -.fa-hand-peace:before { - content: "\F25B"; -} - -.fa-hand-point-down:before { - content: "\F0A7"; -} - -.fa-hand-point-left:before { - content: "\F0A5"; -} - -.fa-hand-point-right:before { - content: "\F0A4"; -} - -.fa-hand-point-up:before { - content: "\F0A6"; -} - -.fa-hand-pointer:before { - content: "\F25A"; -} - -.fa-hand-rock:before { - content: "\F255"; -} - -.fa-hand-scissors:before { - content: "\F257"; -} - -.fa-hand-spock:before { - content: "\F259"; -} - -.fa-hands:before { - content: "\F4C2"; -} - -.fa-hands-helping:before { - content: "\F4C4"; -} - -.fa-handshake:before { - content: "\F2B5"; -} - -.fa-hashtag:before { - content: "\F292"; -} - -.fa-haykal:before { - content: "\F666"; -} - -.fa-hdd:before { - content: "\F0A0"; -} - -.fa-heading:before { - content: "\F1DC"; -} - -.fa-headphones:before { - content: "\F025"; -} - -.fa-headphones-alt:before { - content: "\F58F"; -} - -.fa-headset:before { - content: "\F590"; -} - -.fa-heart:before { - content: "\F004"; -} - -.fa-heartbeat:before { - content: "\F21E"; -} - -.fa-helicopter:before { - content: "\F533"; -} - -.fa-highlighter:before { - content: "\F591"; -} - -.fa-hips:before { - content: "\F452"; -} - -.fa-hire-a-helper:before { - content: "\F3B0"; -} - -.fa-history:before { - content: "\F1DA"; -} - -.fa-hockey-puck:before { - content: "\F453"; -} - -.fa-home:before { - content: "\F015"; -} - -.fa-hooli:before { - content: "\F427"; -} - -.fa-hornbill:before { - content: "\F592"; -} - -.fa-hospital:before { - content: "\F0F8"; -} - -.fa-hospital-alt:before { - content: "\F47D"; -} - -.fa-hospital-symbol:before { - content: "\F47E"; -} - -.fa-hot-tub:before { - content: "\F593"; -} - -.fa-hotel:before { - content: "\F594"; -} - -.fa-hotjar:before { - content: "\F3B1"; -} - -.fa-hourglass:before { - content: "\F254"; -} - -.fa-hourglass-end:before { - content: "\F253"; -} - -.fa-hourglass-half:before { - content: "\F252"; -} - -.fa-hourglass-start:before { - content: "\F251"; -} - -.fa-houzz:before { - content: "\F27C"; -} - -.fa-html5:before { - content: "\F13B"; -} - -.fa-hubspot:before { - content: "\F3B2"; -} - -.fa-i-cursor:before { - content: "\F246"; -} - -.fa-id-badge:before { - content: "\F2C1"; -} - -.fa-id-card:before { - content: "\F2C2"; -} - -.fa-id-card-alt:before { - content: "\F47F"; -} - -.fa-image:before { - content: "\F03E"; -} - -.fa-images:before { - content: "\F302"; -} - -.fa-imdb:before { - content: "\F2D8"; -} - -.fa-inbox:before { - content: "\F01C"; -} - -.fa-indent:before { - content: "\F03C"; -} - -.fa-industry:before { - content: "\F275"; -} - -.fa-infinity:before { - content: "\F534"; -} - -.fa-info:before { - content: "\F129"; -} - -.fa-info-circle:before { - content: "\F05A"; -} - -.fa-instagram:before { - content: "\F16D"; -} - -.fa-internet-explorer:before { - content: "\F26B"; -} - -.fa-ioxhost:before { - content: "\F208"; -} - -.fa-italic:before { - content: "\F033"; -} - -.fa-itunes:before { - content: "\F3B4"; -} - -.fa-itunes-note:before { - content: "\F3B5"; -} - -.fa-java:before { - content: "\F4E4"; -} - -.fa-jedi:before { - content: "\F669"; -} - -.fa-jedi-order:before { - content: "\F50E"; -} - -.fa-jenkins:before { - content: "\F3B6"; -} - -.fa-joget:before { - content: "\F3B7"; -} - -.fa-joint:before { - content: "\F595"; -} - -.fa-joomla:before { - content: "\F1AA"; -} - -.fa-journal-whills:before { - content: "\F66A"; -} - -.fa-js:before { - content: "\F3B8"; -} - -.fa-js-square:before { - content: "\F3B9"; -} - -.fa-jsfiddle:before { - content: "\F1CC"; -} - -.fa-kaaba:before { - content: "\F66B"; -} - -.fa-kaggle:before { - content: "\F5FA"; -} - -.fa-key:before { - content: "\F084"; -} - -.fa-keybase:before { - content: "\F4F5"; -} - -.fa-keyboard:before { - content: "\F11C"; -} - -.fa-keycdn:before { - content: "\F3BA"; -} - -.fa-khanda:before { - content: "\F66D"; -} - -.fa-kickstarter:before { - content: "\F3BB"; -} - -.fa-kickstarter-k:before { - content: "\F3BC"; -} - -.fa-kiss:before { - content: "\F596"; -} - -.fa-kiss-beam:before { - content: "\F597"; -} - -.fa-kiss-wink-heart:before { - content: "\F598"; -} - -.fa-kiwi-bird:before { - content: "\F535"; -} - -.fa-korvue:before { - content: "\F42F"; -} - -.fa-landmark:before { - content: "\F66F"; -} - -.fa-language:before { - content: "\F1AB"; -} - -.fa-laptop:before { - content: "\F109"; -} - -.fa-laptop-code:before { - content: "\F5FC"; -} - -.fa-laravel:before { - content: "\F3BD"; -} - -.fa-lastfm:before { - content: "\F202"; -} - -.fa-lastfm-square:before { - content: "\F203"; -} - -.fa-laugh:before { - content: "\F599"; -} - -.fa-laugh-beam:before { - content: "\F59A"; -} - -.fa-laugh-squint:before { - content: "\F59B"; -} - -.fa-laugh-wink:before { - content: "\F59C"; -} - -.fa-layer-group:before { - content: "\F5FD"; -} - -.fa-leaf:before { - content: "\F06C"; -} - -.fa-leanpub:before { - content: "\F212"; -} - -.fa-lemon:before { - content: "\F094"; -} - -.fa-less:before { - content: "\F41D"; -} - -.fa-less-than:before { - content: "\F536"; -} - -.fa-less-than-equal:before { - content: "\F537"; -} - -.fa-level-down-alt:before { - content: "\F3BE"; -} - -.fa-level-up-alt:before { - content: "\F3BF"; -} - -.fa-life-ring:before { - content: "\F1CD"; -} - -.fa-lightbulb:before { - content: "\F0EB"; -} - -.fa-line:before { - content: "\F3C0"; -} - -.fa-link:before { - content: "\F0C1"; -} - -.fa-linkedin:before { - content: "\F08C"; -} - -.fa-linkedin-in:before { - content: "\F0E1"; -} - -.fa-linode:before { - content: "\F2B8"; -} - -.fa-linux:before { - content: "\F17C"; -} - -.fa-lira-sign:before { - content: "\F195"; -} - -.fa-list:before { - content: "\F03A"; -} - -.fa-list-alt:before { - content: "\F022"; -} - -.fa-list-ol:before { - content: "\F0CB"; -} - -.fa-list-ul:before { - content: "\F0CA"; -} - -.fa-location-arrow:before { - content: "\F124"; -} - -.fa-lock:before { - content: "\F023"; -} - -.fa-lock-open:before { - content: "\F3C1"; -} - -.fa-long-arrow-alt-down:before { - content: "\F309"; -} - -.fa-long-arrow-alt-left:before { - content: "\F30A"; -} - -.fa-long-arrow-alt-right:before { - content: "\F30B"; -} - -.fa-long-arrow-alt-up:before { - content: "\F30C"; -} - -.fa-low-vision:before { - content: "\F2A8"; -} - -.fa-luggage-cart:before { - content: "\F59D"; -} - -.fa-lyft:before { - content: "\F3C3"; -} - -.fa-magento:before { - content: "\F3C4"; -} - -.fa-magic:before { - content: "\F0D0"; -} - -.fa-magnet:before { - content: "\F076"; -} - -.fa-mail-bulk:before { - content: "\F674"; -} - -.fa-mailchimp:before { - content: "\F59E"; -} - -.fa-male:before { - content: "\F183"; -} - -.fa-mandalorian:before { - content: "\F50F"; -} - -.fa-map:before { - content: "\F279"; -} - -.fa-map-marked:before { - content: "\F59F"; -} - -.fa-map-marked-alt:before { - content: "\F5A0"; -} - -.fa-map-marker:before { - content: "\F041"; -} - -.fa-map-marker-alt:before { - content: "\F3C5"; -} - -.fa-map-pin:before { - content: "\F276"; -} - -.fa-map-signs:before { - content: "\F277"; -} - -.fa-markdown:before { - content: "\F60F"; -} - -.fa-marker:before { - content: "\F5A1"; -} - -.fa-mars:before { - content: "\F222"; -} - -.fa-mars-double:before { - content: "\F227"; -} - -.fa-mars-stroke:before { - content: "\F229"; -} - -.fa-mars-stroke-h:before { - content: "\F22B"; -} - -.fa-mars-stroke-v:before { - content: "\F22A"; -} - -.fa-mastodon:before { - content: "\F4F6"; -} - -.fa-maxcdn:before { - content: "\F136"; -} - -.fa-medal:before { - content: "\F5A2"; -} - -.fa-medapps:before { - content: "\F3C6"; -} - -.fa-medium:before { - content: "\F23A"; -} - -.fa-medium-m:before { - content: "\F3C7"; -} - -.fa-medkit:before { - content: "\F0FA"; -} - -.fa-medrt:before { - content: "\F3C8"; -} - -.fa-meetup:before { - content: "\F2E0"; -} - -.fa-megaport:before { - content: "\F5A3"; -} - -.fa-meh:before { - content: "\F11A"; -} - -.fa-meh-blank:before { - content: "\F5A4"; -} - -.fa-meh-rolling-eyes:before { - content: "\F5A5"; -} - -.fa-memory:before { - content: "\F538"; -} - -.fa-menorah:before { - content: "\F676"; -} - -.fa-mercury:before { - content: "\F223"; -} - -.fa-microchip:before { - content: "\F2DB"; -} - -.fa-microphone:before { - content: "\F130"; -} - -.fa-microphone-alt:before { - content: "\F3C9"; -} - -.fa-microphone-alt-slash:before { - content: "\F539"; -} - -.fa-microphone-slash:before { - content: "\F131"; -} - -.fa-microscope:before { - content: "\F610"; -} - -.fa-microsoft:before { - content: "\F3CA"; -} - -.fa-minus:before { - content: "\F068"; -} - -.fa-minus-circle:before { - content: "\F056"; -} - -.fa-minus-square:before { - content: "\F146"; -} - -.fa-mix:before { - content: "\F3CB"; -} - -.fa-mixcloud:before { - content: "\F289"; -} - -.fa-mizuni:before { - content: "\F3CC"; -} - -.fa-mobile:before { - content: "\F10B"; -} - -.fa-mobile-alt:before { - content: "\F3CD"; -} - -.fa-modx:before { - content: "\F285"; -} - -.fa-monero:before { - content: "\F3D0"; -} - -.fa-money-bill:before { - content: "\F0D6"; -} - -.fa-money-bill-alt:before { - content: "\F3D1"; -} - -.fa-money-bill-wave:before { - content: "\F53A"; -} - -.fa-money-bill-wave-alt:before { - content: "\F53B"; -} - -.fa-money-check:before { - content: "\F53C"; -} - -.fa-money-check-alt:before { - content: "\F53D"; -} - -.fa-monument:before { - content: "\F5A6"; -} - -.fa-moon:before { - content: "\F186"; -} - -.fa-mortar-pestle:before { - content: "\F5A7"; -} - -.fa-mosque:before { - content: "\F678"; -} - -.fa-motorcycle:before { - content: "\F21C"; -} - -.fa-mouse-pointer:before { - content: "\F245"; -} - -.fa-music:before { - content: "\F001"; -} - -.fa-napster:before { - content: "\F3D2"; -} - -.fa-neos:before { - content: "\F612"; -} - -.fa-neuter:before { - content: "\F22C"; -} - -.fa-newspaper:before { - content: "\F1EA"; -} - -.fa-nimblr:before { - content: "\F5A8"; -} - -.fa-nintendo-switch:before { - content: "\F418"; -} - -.fa-node:before { - content: "\F419"; -} - -.fa-node-js:before { - content: "\F3D3"; -} - -.fa-not-equal:before { - content: "\F53E"; -} - -.fa-notes-medical:before { - content: "\F481"; -} - -.fa-npm:before { - content: "\F3D4"; -} - -.fa-ns8:before { - content: "\F3D5"; -} - -.fa-nutritionix:before { - content: "\F3D6"; -} - -.fa-object-group:before { - content: "\F247"; -} - -.fa-object-ungroup:before { - content: "\F248"; -} - -.fa-odnoklassniki:before { - content: "\F263"; -} - -.fa-odnoklassniki-square:before { - content: "\F264"; -} - -.fa-oil-can:before { - content: "\F613"; -} - -.fa-old-republic:before { - content: "\F510"; -} - -.fa-om:before { - content: "\F679"; -} - -.fa-opencart:before { - content: "\F23D"; -} - -.fa-openid:before { - content: "\F19B"; -} - -.fa-opera:before { - content: "\F26A"; -} - -.fa-optin-monster:before { - content: "\F23C"; -} - -.fa-osi:before { - content: "\F41A"; -} - -.fa-outdent:before { - content: "\F03B"; -} - -.fa-page4:before { - content: "\F3D7"; -} - -.fa-pagelines:before { - content: "\F18C"; -} - -.fa-paint-brush:before { - content: "\F1FC"; -} - -.fa-paint-roller:before { - content: "\F5AA"; -} - -.fa-palette:before { - content: "\F53F"; -} - -.fa-palfed:before { - content: "\F3D8"; -} - -.fa-pallet:before { - content: "\F482"; -} - -.fa-paper-plane:before { - content: "\F1D8"; -} - -.fa-paperclip:before { - content: "\F0C6"; -} - -.fa-parachute-box:before { - content: "\F4CD"; -} - -.fa-paragraph:before { - content: "\F1DD"; -} - -.fa-parking:before { - content: "\F540"; -} - -.fa-passport:before { - content: "\F5AB"; -} - -.fa-pastafarianism:before { - content: "\F67B"; -} - -.fa-paste:before { - content: "\F0EA"; -} - -.fa-patreon:before { - content: "\F3D9"; -} - -.fa-pause:before { - content: "\F04C"; -} - -.fa-pause-circle:before { - content: "\F28B"; -} - -.fa-paw:before { - content: "\F1B0"; -} - -.fa-paypal:before { - content: "\F1ED"; -} - -.fa-peace:before { - content: "\F67C"; -} - -.fa-pen:before { - content: "\F304"; -} - -.fa-pen-alt:before { - content: "\F305"; -} - -.fa-pen-fancy:before { - content: "\F5AC"; -} - -.fa-pen-nib:before { - content: "\F5AD"; -} - -.fa-pen-square:before { - content: "\F14B"; -} - -.fa-pencil-alt:before { - content: "\F303"; -} - -.fa-pencil-ruler:before { - content: "\F5AE"; -} - -.fa-people-carry:before { - content: "\F4CE"; -} - -.fa-percent:before { - content: "\F295"; -} - -.fa-percentage:before { - content: "\F541"; -} - -.fa-periscope:before { - content: "\F3DA"; -} - -.fa-phabricator:before { - content: "\F3DB"; -} - -.fa-phoenix-framework:before { - content: "\F3DC"; -} - -.fa-phoenix-squadron:before { - content: "\F511"; -} - -.fa-phone:before { - content: "\F095"; -} - -.fa-phone-slash:before { - content: "\F3DD"; -} - -.fa-phone-square:before { - content: "\F098"; -} - -.fa-phone-volume:before { - content: "\F2A0"; -} - -.fa-php:before { - content: "\F457"; -} - -.fa-pied-piper:before { - content: "\F2AE"; -} - -.fa-pied-piper-alt:before { - content: "\F1A8"; -} - -.fa-pied-piper-hat:before { - content: "\F4E5"; -} - -.fa-pied-piper-pp:before { - content: "\F1A7"; -} - -.fa-piggy-bank:before { - content: "\F4D3"; -} - -.fa-pills:before { - content: "\F484"; -} - -.fa-pinterest:before { - content: "\F0D2"; -} - -.fa-pinterest-p:before { - content: "\F231"; -} - -.fa-pinterest-square:before { - content: "\F0D3"; -} - -.fa-place-of-worship:before { - content: "\F67F"; -} - -.fa-plane:before { - content: "\F072"; -} - -.fa-plane-arrival:before { - content: "\F5AF"; -} - -.fa-plane-departure:before { - content: "\F5B0"; -} - -.fa-play:before { - content: "\F04B"; -} - -.fa-play-circle:before { - content: "\F144"; -} - -.fa-playstation:before { - content: "\F3DF"; -} - -.fa-plug:before { - content: "\F1E6"; -} - -.fa-plus:before { - content: "\F067"; -} - -.fa-plus-circle:before { - content: "\F055"; -} - -.fa-plus-square:before { - content: "\F0FE"; -} - -.fa-podcast:before { - content: "\F2CE"; -} - -.fa-poll:before { - content: "\F681"; -} - -.fa-poll-h:before { - content: "\F682"; -} - -.fa-poo:before { - content: "\F2FE"; -} - -.fa-poop:before { - content: "\F619"; -} - -.fa-portrait:before { - content: "\F3E0"; -} - -.fa-pound-sign:before { - content: "\F154"; -} - -.fa-power-off:before { - content: "\F011"; -} - -.fa-pray:before { - content: "\F683"; -} - -.fa-praying-hands:before { - content: "\F684"; -} - -.fa-prescription:before { - content: "\F5B1"; -} - -.fa-prescription-bottle:before { - content: "\F485"; -} - -.fa-prescription-bottle-alt:before { - content: "\F486"; -} - -.fa-print:before { - content: "\F02F"; -} - -.fa-procedures:before { - content: "\F487"; -} - -.fa-product-hunt:before { - content: "\F288"; -} - -.fa-project-diagram:before { - content: "\F542"; -} - -.fa-pushed:before { - content: "\F3E1"; -} - -.fa-puzzle-piece:before { - content: "\F12E"; -} - -.fa-python:before { - content: "\F3E2"; -} - -.fa-qq:before { - content: "\F1D6"; -} - -.fa-qrcode:before { - content: "\F029"; -} - -.fa-question:before { - content: "\F128"; -} - -.fa-question-circle:before { - content: "\F059"; -} - -.fa-quidditch:before { - content: "\F458"; -} - -.fa-quinscape:before { - content: "\F459"; -} - -.fa-quora:before { - content: "\F2C4"; -} - -.fa-quote-left:before { - content: "\F10D"; -} - -.fa-quote-right:before { - content: "\F10E"; -} - -.fa-quran:before { - content: "\F687"; -} - -.fa-r-project:before { - content: "\F4F7"; -} - -.fa-random:before { - content: "\F074"; -} - -.fa-ravelry:before { - content: "\F2D9"; -} - -.fa-react:before { - content: "\F41B"; -} - -.fa-readme:before { - content: "\F4D5"; -} - -.fa-rebel:before { - content: "\F1D0"; -} - -.fa-receipt:before { - content: "\F543"; -} - -.fa-recycle:before { - content: "\F1B8"; -} - -.fa-red-river:before { - content: "\F3E3"; -} - -.fa-reddit:before { - content: "\F1A1"; -} - -.fa-reddit-alien:before { - content: "\F281"; -} - -.fa-reddit-square:before { - content: "\F1A2"; -} - -.fa-redo:before { - content: "\F01E"; -} - -.fa-redo-alt:before { - content: "\F2F9"; -} - -.fa-registered:before { - content: "\F25D"; -} - -.fa-rendact:before { - content: "\F3E4"; -} - -.fa-renren:before { - content: "\F18B"; -} - -.fa-reply:before { - content: "\F3E5"; -} - -.fa-reply-all:before { - content: "\F122"; -} - -.fa-replyd:before { - content: "\F3E6"; -} - -.fa-researchgate:before { - content: "\F4F8"; -} - -.fa-resolving:before { - content: "\F3E7"; -} - -.fa-retweet:before { - content: "\F079"; -} - -.fa-rev:before { - content: "\F5B2"; -} - -.fa-ribbon:before { - content: "\F4D6"; -} - -.fa-road:before { - content: "\F018"; -} - -.fa-robot:before { - content: "\F544"; -} - -.fa-rocket:before { - content: "\F135"; -} - -.fa-rocketchat:before { - content: "\F3E8"; -} - -.fa-rockrms:before { - content: "\F3E9"; -} - -.fa-route:before { - content: "\F4D7"; -} - -.fa-rss:before { - content: "\F09E"; -} - -.fa-rss-square:before { - content: "\F143"; -} - -.fa-ruble-sign:before { - content: "\F158"; -} - -.fa-ruler:before { - content: "\F545"; -} - -.fa-ruler-combined:before { - content: "\F546"; -} - -.fa-ruler-horizontal:before { - content: "\F547"; -} - -.fa-ruler-vertical:before { - content: "\F548"; -} - -.fa-rupee-sign:before { - content: "\F156"; -} - -.fa-sad-cry:before { - content: "\F5B3"; -} - -.fa-sad-tear:before { - content: "\F5B4"; -} - -.fa-safari:before { - content: "\F267"; -} - -.fa-sass:before { - content: "\F41E"; -} - -.fa-save:before { - content: "\F0C7"; -} - -.fa-schlix:before { - content: "\F3EA"; -} - -.fa-school:before { - content: "\F549"; -} - -.fa-screwdriver:before { - content: "\F54A"; -} - -.fa-scribd:before { - content: "\F28A"; -} - -.fa-search:before { - content: "\F002"; -} - -.fa-search-dollar:before { - content: "\F688"; -} - -.fa-search-location:before { - content: "\F689"; -} - -.fa-search-minus:before { - content: "\F010"; -} - -.fa-search-plus:before { - content: "\F00E"; -} - -.fa-searchengin:before { - content: "\F3EB"; -} - -.fa-seedling:before { - content: "\F4D8"; -} - -.fa-sellcast:before { - content: "\F2DA"; -} - -.fa-sellsy:before { - content: "\F213"; -} - -.fa-server:before { - content: "\F233"; -} - -.fa-servicestack:before { - content: "\F3EC"; -} - -.fa-shapes:before { - content: "\F61F"; -} - -.fa-share:before { - content: "\F064"; -} - -.fa-share-alt:before { - content: "\F1E0"; -} - -.fa-share-alt-square:before { - content: "\F1E1"; -} - -.fa-share-square:before { - content: "\F14D"; -} - -.fa-shekel-sign:before { - content: "\F20B"; -} - -.fa-shield-alt:before { - content: "\F3ED"; -} - -.fa-ship:before { - content: "\F21A"; -} - -.fa-shipping-fast:before { - content: "\F48B"; -} - -.fa-shirtsinbulk:before { - content: "\F214"; -} - -.fa-shoe-prints:before { - content: "\F54B"; -} - -.fa-shopping-bag:before { - content: "\F290"; -} - -.fa-shopping-basket:before { - content: "\F291"; -} - -.fa-shopping-cart:before { - content: "\F07A"; -} - -.fa-shopware:before { - content: "\F5B5"; -} - -.fa-shower:before { - content: "\F2CC"; -} - -.fa-shuttle-van:before { - content: "\F5B6"; -} - -.fa-sign:before { - content: "\F4D9"; -} - -.fa-sign-in-alt:before { - content: "\F2F6"; -} - -.fa-sign-language:before { - content: "\F2A7"; -} - -.fa-sign-out-alt:before { - content: "\F2F5"; -} - -.fa-signal:before { - content: "\F012"; -} - -.fa-signature:before { - content: "\F5B7"; -} - -.fa-simplybuilt:before { - content: "\F215"; -} - -.fa-sistrix:before { - content: "\F3EE"; -} - -.fa-sitemap:before { - content: "\F0E8"; -} - -.fa-sith:before { - content: "\F512"; -} - -.fa-skull:before { - content: "\F54C"; -} - -.fa-skyatlas:before { - content: "\F216"; -} - -.fa-skype:before { - content: "\F17E"; -} - -.fa-slack:before { - content: "\F198"; -} - -.fa-slack-hash:before { - content: "\F3EF"; -} - -.fa-sliders-h:before { - content: "\F1DE"; -} - -.fa-slideshare:before { - content: "\F1E7"; -} - -.fa-smile:before { - content: "\F118"; -} - -.fa-smile-beam:before { - content: "\F5B8"; -} - -.fa-smile-wink:before { - content: "\F4DA"; -} - -.fa-smoking:before { - content: "\F48D"; -} - -.fa-smoking-ban:before { - content: "\F54D"; -} - -.fa-snapchat:before { - content: "\F2AB"; -} - -.fa-snapchat-ghost:before { - content: "\F2AC"; -} - -.fa-snapchat-square:before { - content: "\F2AD"; -} - -.fa-snowflake:before { - content: "\F2DC"; -} - -.fa-socks:before { - content: "\F696"; -} - -.fa-solar-panel:before { - content: "\F5BA"; -} - -.fa-sort:before { - content: "\F0DC"; -} - -.fa-sort-alpha-down:before { - content: "\F15D"; -} - -.fa-sort-alpha-up:before { - content: "\F15E"; -} - -.fa-sort-amount-down:before { - content: "\F160"; -} - -.fa-sort-amount-up:before { - content: "\F161"; -} - -.fa-sort-down:before { - content: "\F0DD"; -} - -.fa-sort-numeric-down:before { - content: "\F162"; -} - -.fa-sort-numeric-up:before { - content: "\F163"; -} - -.fa-sort-up:before { - content: "\F0DE"; -} - -.fa-soundcloud:before { - content: "\F1BE"; -} - -.fa-spa:before { - content: "\F5BB"; -} - -.fa-space-shuttle:before { - content: "\F197"; -} - -.fa-speakap:before { - content: "\F3F3"; -} - -.fa-spinner:before { - content: "\F110"; -} - -.fa-splotch:before { - content: "\F5BC"; -} - -.fa-spotify:before { - content: "\F1BC"; -} - -.fa-spray-can:before { - content: "\F5BD"; -} - -.fa-square:before { - content: "\F0C8"; -} - -.fa-square-full:before { - content: "\F45C"; -} - -.fa-square-root-alt:before { - content: "\F698"; -} - -.fa-squarespace:before { - content: "\F5BE"; -} - -.fa-stack-exchange:before { - content: "\F18D"; -} - -.fa-stack-overflow:before { - content: "\F16C"; -} - -.fa-stamp:before { - content: "\F5BF"; -} - -.fa-star:before { - content: "\F005"; -} - -.fa-star-and-crescent:before { - content: "\F699"; -} - -.fa-star-half:before { - content: "\F089"; -} - -.fa-star-half-alt:before { - content: "\F5C0"; -} - -.fa-star-of-david:before { - content: "\F69A"; -} - -.fa-star-of-life:before { - content: "\F621"; -} - -.fa-staylinked:before { - content: "\F3F5"; -} - -.fa-steam:before { - content: "\F1B6"; -} - -.fa-steam-square:before { - content: "\F1B7"; -} - -.fa-steam-symbol:before { - content: "\F3F6"; -} - -.fa-step-backward:before { - content: "\F048"; -} - -.fa-step-forward:before { - content: "\F051"; -} - -.fa-stethoscope:before { - content: "\F0F1"; -} - -.fa-sticker-mule:before { - content: "\F3F7"; -} - -.fa-sticky-note:before { - content: "\F249"; -} - -.fa-stop:before { - content: "\F04D"; -} - -.fa-stop-circle:before { - content: "\F28D"; -} - -.fa-stopwatch:before { - content: "\F2F2"; -} - -.fa-store:before { - content: "\F54E"; -} - -.fa-store-alt:before { - content: "\F54F"; -} - -.fa-strava:before { - content: "\F428"; -} - -.fa-stream:before { - content: "\F550"; -} - -.fa-street-view:before { - content: "\F21D"; -} - -.fa-strikethrough:before { - content: "\F0CC"; -} - -.fa-stripe:before { - content: "\F429"; -} - -.fa-stripe-s:before { - content: "\F42A"; -} - -.fa-stroopwafel:before { - content: "\F551"; -} - -.fa-studiovinari:before { - content: "\F3F8"; -} - -.fa-stumbleupon:before { - content: "\F1A4"; -} - -.fa-stumbleupon-circle:before { - content: "\F1A3"; -} - -.fa-subscript:before { - content: "\F12C"; -} - -.fa-subway:before { - content: "\F239"; -} - -.fa-suitcase:before { - content: "\F0F2"; -} - -.fa-suitcase-rolling:before { - content: "\F5C1"; -} - -.fa-sun:before { - content: "\F185"; -} - -.fa-superpowers:before { - content: "\F2DD"; -} - -.fa-superscript:before { - content: "\F12B"; -} - -.fa-supple:before { - content: "\F3F9"; -} - -.fa-surprise:before { - content: "\F5C2"; -} - -.fa-swatchbook:before { - content: "\F5C3"; -} - -.fa-swimmer:before { - content: "\F5C4"; -} - -.fa-swimming-pool:before { - content: "\F5C5"; -} - -.fa-synagogue:before { - content: "\F69B"; -} - -.fa-sync:before { - content: "\F021"; -} - -.fa-sync-alt:before { - content: "\F2F1"; -} - -.fa-syringe:before { - content: "\F48E"; -} - -.fa-table:before { - content: "\F0CE"; -} - -.fa-table-tennis:before { - content: "\F45D"; -} - -.fa-tablet:before { - content: "\F10A"; -} - -.fa-tablet-alt:before { - content: "\F3FA"; -} - -.fa-tablets:before { - content: "\F490"; -} - -.fa-tachometer-alt:before { - content: "\F3FD"; -} - -.fa-tag:before { - content: "\F02B"; -} - -.fa-tags:before { - content: "\F02C"; -} - -.fa-tape:before { - content: "\F4DB"; -} - -.fa-tasks:before { - content: "\F0AE"; -} - -.fa-taxi:before { - content: "\F1BA"; -} - -.fa-teamspeak:before { - content: "\F4F9"; -} - -.fa-teeth:before { - content: "\F62E"; -} - -.fa-teeth-open:before { - content: "\F62F"; -} - -.fa-telegram:before { - content: "\F2C6"; -} - -.fa-telegram-plane:before { - content: "\F3FE"; -} - -.fa-tencent-weibo:before { - content: "\F1D5"; -} - -.fa-terminal:before { - content: "\F120"; -} - -.fa-text-height:before { - content: "\F034"; -} - -.fa-text-width:before { - content: "\F035"; -} - -.fa-th:before { - content: "\F00A"; -} - -.fa-th-large:before { - content: "\F009"; -} - -.fa-th-list:before { - content: "\F00B"; -} - -.fa-the-red-yeti:before { - content: "\F69D"; -} - -.fa-theater-masks:before { - content: "\F630"; -} - -.fa-themeco:before { - content: "\F5C6"; -} - -.fa-themeisle:before { - content: "\F2B2"; -} - -.fa-thermometer:before { - content: "\F491"; -} - -.fa-thermometer-empty:before { - content: "\F2CB"; -} - -.fa-thermometer-full:before { - content: "\F2C7"; -} - -.fa-thermometer-half:before { - content: "\F2C9"; -} - -.fa-thermometer-quarter:before { - content: "\F2CA"; -} - -.fa-thermometer-three-quarters:before { - content: "\F2C8"; -} - -.fa-thumbs-down:before { - content: "\F165"; -} - -.fa-thumbs-up:before { - content: "\F164"; -} - -.fa-thumbtack:before { - content: "\F08D"; -} - -.fa-ticket-alt:before { - content: "\F3FF"; -} - -.fa-times:before { - content: "\F00D"; -} - -.fa-times-circle:before { - content: "\F057"; -} - -.fa-tint:before { - content: "\F043"; -} - -.fa-tint-slash:before { - content: "\F5C7"; -} - -.fa-tired:before { - content: "\F5C8"; -} - -.fa-toggle-off:before { - content: "\F204"; -} - -.fa-toggle-on:before { - content: "\F205"; -} - -.fa-toolbox:before { - content: "\F552"; -} - -.fa-tooth:before { - content: "\F5C9"; -} - -.fa-torah:before { - content: "\F6A0"; -} - -.fa-torii-gate:before { - content: "\F6A1"; -} - -.fa-trade-federation:before { - content: "\F513"; -} - -.fa-trademark:before { - content: "\F25C"; -} - -.fa-traffic-light:before { - content: "\F637"; -} - -.fa-train:before { - content: "\F238"; -} - -.fa-transgender:before { - content: "\F224"; -} - -.fa-transgender-alt:before { - content: "\F225"; -} - -.fa-trash:before { - content: "\F1F8"; -} - -.fa-trash-alt:before { - content: "\F2ED"; -} - -.fa-tree:before { - content: "\F1BB"; -} - -.fa-trello:before { - content: "\F181"; -} - -.fa-tripadvisor:before { - content: "\F262"; -} - -.fa-trophy:before { - content: "\F091"; -} - -.fa-truck:before { - content: "\F0D1"; -} - -.fa-truck-loading:before { - content: "\F4DE"; -} - -.fa-truck-monster:before { - content: "\F63B"; -} - -.fa-truck-moving:before { - content: "\F4DF"; -} - -.fa-truck-pickup:before { - content: "\F63C"; -} - -.fa-tshirt:before { - content: "\F553"; -} - -.fa-tty:before { - content: "\F1E4"; -} - -.fa-tumblr:before { - content: "\F173"; -} - -.fa-tumblr-square:before { - content: "\F174"; -} - -.fa-tv:before { - content: "\F26C"; -} - -.fa-twitch:before { - content: "\F1E8"; -} - -.fa-twitter:before { - content: "\F099"; -} - -.fa-twitter-square:before { - content: "\F081"; -} - -.fa-typo3:before { - content: "\F42B"; -} - -.fa-uber:before { - content: "\F402"; -} - -.fa-uikit:before { - content: "\F403"; -} - -.fa-umbrella:before { - content: "\F0E9"; -} - -.fa-umbrella-beach:before { - content: "\F5CA"; -} - -.fa-underline:before { - content: "\F0CD"; -} - -.fa-undo:before { - content: "\F0E2"; -} - -.fa-undo-alt:before { - content: "\F2EA"; -} - -.fa-uniregistry:before { - content: "\F404"; -} - -.fa-universal-access:before { - content: "\F29A"; -} - -.fa-university:before { - content: "\F19C"; -} - -.fa-unlink:before { - content: "\F127"; -} - -.fa-unlock:before { - content: "\F09C"; -} - -.fa-unlock-alt:before { - content: "\F13E"; -} - -.fa-untappd:before { - content: "\F405"; -} - -.fa-upload:before { - content: "\F093"; -} - -.fa-usb:before { - content: "\F287"; -} - -.fa-user:before { - content: "\F007"; -} - -.fa-user-alt:before { - content: "\F406"; -} - -.fa-user-alt-slash:before { - content: "\F4FA"; -} - -.fa-user-astronaut:before { - content: "\F4FB"; -} - -.fa-user-check:before { - content: "\F4FC"; -} - -.fa-user-circle:before { - content: "\F2BD"; -} - -.fa-user-clock:before { - content: "\F4FD"; -} - -.fa-user-cog:before { - content: "\F4FE"; -} - -.fa-user-edit:before { - content: "\F4FF"; -} - -.fa-user-friends:before { - content: "\F500"; -} - -.fa-user-graduate:before { - content: "\F501"; -} - -.fa-user-lock:before { - content: "\F502"; -} - -.fa-user-md:before { - content: "\F0F0"; -} - -.fa-user-minus:before { - content: "\F503"; -} - -.fa-user-ninja:before { - content: "\F504"; -} - -.fa-user-plus:before { - content: "\F234"; -} - -.fa-user-secret:before { - content: "\F21B"; -} - -.fa-user-shield:before { - content: "\F505"; -} - -.fa-user-slash:before { - content: "\F506"; -} - -.fa-user-tag:before { - content: "\F507"; -} - -.fa-user-tie:before { - content: "\F508"; -} - -.fa-user-times:before { - content: "\F235"; -} - -.fa-users:before { - content: "\F0C0"; -} - -.fa-users-cog:before { - content: "\F509"; -} - -.fa-ussunnah:before { - content: "\F407"; -} - -.fa-utensil-spoon:before { - content: "\F2E5"; -} - -.fa-utensils:before { - content: "\F2E7"; -} - -.fa-vaadin:before { - content: "\F408"; -} - -.fa-vector-square:before { - content: "\F5CB"; -} - -.fa-venus:before { - content: "\F221"; -} - -.fa-venus-double:before { - content: "\F226"; -} - -.fa-venus-mars:before { - content: "\F228"; -} - -.fa-viacoin:before { - content: "\F237"; -} - -.fa-viadeo:before { - content: "\F2A9"; -} - -.fa-viadeo-square:before { - content: "\F2AA"; -} - -.fa-vial:before { - content: "\F492"; -} - -.fa-vials:before { - content: "\F493"; -} - -.fa-viber:before { - content: "\F409"; -} - -.fa-video:before { - content: "\F03D"; -} - -.fa-video-slash:before { - content: "\F4E2"; -} - -.fa-vihara:before { - content: "\F6A7"; -} - -.fa-vimeo:before { - content: "\F40A"; -} - -.fa-vimeo-square:before { - content: "\F194"; -} - -.fa-vimeo-v:before { - content: "\F27D"; -} - -.fa-vine:before { - content: "\F1CA"; -} - -.fa-vk:before { - content: "\F189"; -} - -.fa-vnv:before { - content: "\F40B"; -} - -.fa-volleyball-ball:before { - content: "\F45F"; -} - -.fa-volume-down:before { - content: "\F027"; -} - -.fa-volume-off:before { - content: "\F026"; -} - -.fa-volume-up:before { - content: "\F028"; -} - -.fa-vuejs:before { - content: "\F41F"; -} - -.fa-walking:before { - content: "\F554"; -} - -.fa-wallet:before { - content: "\F555"; -} - -.fa-warehouse:before { - content: "\F494"; -} - -.fa-weebly:before { - content: "\F5CC"; -} - -.fa-weibo:before { - content: "\F18A"; -} - -.fa-weight:before { - content: "\F496"; -} - -.fa-weight-hanging:before { - content: "\F5CD"; -} - -.fa-weixin:before { - content: "\F1D7"; -} - -.fa-whatsapp:before { - content: "\F232"; -} - -.fa-whatsapp-square:before { - content: "\F40C"; -} - -.fa-wheelchair:before { - content: "\F193"; -} - -.fa-whmcs:before { - content: "\F40D"; -} - -.fa-wifi:before { - content: "\F1EB"; -} - -.fa-wikipedia-w:before { - content: "\F266"; -} - -.fa-window-close:before { - content: "\F410"; -} - -.fa-window-maximize:before { - content: "\F2D0"; -} - -.fa-window-minimize:before { - content: "\F2D1"; -} - -.fa-window-restore:before { - content: "\F2D2"; -} - -.fa-windows:before { - content: "\F17A"; -} - -.fa-wine-glass:before { - content: "\F4E3"; -} - -.fa-wine-glass-alt:before { - content: "\F5CE"; -} - -.fa-wix:before { - content: "\F5CF"; -} - -.fa-wolf-pack-battalion:before { - content: "\F514"; -} - -.fa-won-sign:before { - content: "\F159"; -} - -.fa-wordpress:before { - content: "\F19A"; -} - -.fa-wordpress-simple:before { - content: "\F411"; -} - -.fa-wpbeginner:before { - content: "\F297"; -} - -.fa-wpexplorer:before { - content: "\F2DE"; -} - -.fa-wpforms:before { - content: "\F298"; -} - -.fa-wrench:before { - content: "\F0AD"; -} - -.fa-x-ray:before { - content: "\F497"; -} - -.fa-xbox:before { - content: "\F412"; -} - -.fa-xing:before { - content: "\F168"; -} - -.fa-xing-square:before { - content: "\F169"; -} - -.fa-y-combinator:before { - content: "\F23B"; -} - -.fa-yahoo:before { - content: "\F19E"; -} - -.fa-yandex:before { - content: "\F413"; -} - -.fa-yandex-international:before { - content: "\F414"; -} - -.fa-yelp:before { - content: "\F1E9"; -} - -.fa-yen-sign:before { - content: "\F157"; -} - -.fa-yin-yang:before { - content: "\F6AD"; -} - -.fa-yoast:before { - content: "\F2B1"; -} - -.fa-youtube:before { - content: "\F167"; -} - -.fa-youtube-square:before { - content: "\F431"; -} - -.fa-zhihu:before { - content: "\F63F"; -} - -.sr-only { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} - -.sr-only-focusable:active, .sr-only-focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; -} - -/*! - * Font Awesome Free 5.3.1 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -@font-face { - font-family: 'Font Awesome 5 Free'; - font-style: normal; - font-weight: 900; - src: url("../webfonts/fa-solid-900.eot"); - src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); -} - -.fa, -.fas { - font-family: 'Font Awesome 5 Free'; - font-weight: 900; -} - -html { - height: 100%; -} - -body { - min-height: 100%; -} - -.wrapper { - min-height: 100vh; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; -} - -nav { - width: 75px; - height: 93%; - position: fixed; - z-index: 100; - top: 7%; - background: #303030; - left: 0; - -webkit-transition: left 0.5s ease-in; - transition: left 0.5s ease-in; -} - -@media screen and (max-width: 768px) { - nav { - left: -75px; - } -} - -nav .nav-wrapper { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; -} - -nav .nav-wrapper .nav-item { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} - -nav .menu-content { - position: relative; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - height: 100%; - font-size: 2em; -} - -nav .menu-content .menu-item-list { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - padding-top: 65%; - width: 100%; - height: 100%; -} - -nav .menu-content .menu-item-list .menu-item { - width: 100%; - height: 60px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - font-family: 'Nunito-Regular', sans-serif; - color: #adb5bd; - text-decoration: none; -} - -nav .menu-content .menu-item-list .menu-item.logout { - position: absolute; - bottom: 10px; -} - -nav .menu-content .menu-item-list .menu-item:hover:not(.active) { - background: #212121; -} - -nav .menu-content .menu-item-list .menu-item.active { - background: #212121; - border-top: 1px solid #de9700; - border-bottom: 1px solid #de9700; -} - -nav .menu-content .menu-item-list .menu-item.active i { - color: #de9700; -} - -nav .menu-content .menu-item-list .menu-item.active i i { - color: #212121; -} - -nav .menu-content .menu-item-list .menu-item.active span { - color: #de9700; -} - -nav .menu-content .menu-item-list .menu-item i { - min-width: 40px; - text-align: center; -} - -nav .menu-content .menu-item-list .menu-item span { - margin-top: 5px; - font-size: 0.3em; - text-transform: uppercase; -} - -nav .menu-content .menu-item-list .fa-folder { - position: relative; -} - -nav .menu-content .menu-item-list .fa-folder .fa-ticket-alt { - position: absolute; - left: 9px; - top: 9px; - font-size: 0.6em; - color: #303030; - margin-left: 0; - width: auto; - text-align: left; -} - -.burger { - font-size: 1.5em; - position: absolute; - color: #adb5bd; - margin: 10px; - top: 0; - left: 100%; - cursor: pointer; - display: none; -} - -@media screen and (max-width: 768px) { - .burger { - display: block; - } -} - -.close { - font-size: 1.5em; - position: absolute; - color: #adb5bd; - margin: 10px; - top: 0; - left: 100%; - cursor: pointer; - display: none; -} - -.login { - background: #303030; - padding: 20px; - font-family: 'Nunito-Regular', sans-serif; - color: #adb5bd; - min-width: 250px; - border: 1px solid #212121; -} - -.login .title { - margin-bottom: 20px; -} - -.login label { - display: block; - margin: 10px 0; -} - -.login label.form-check-label { - display: inline; -} - -.login .form-check { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; -} - -.login .form-check p { - margin-left: 10px; -} - -.login .submit { - text-align: right; -} - -.login .forgot { - text-align: right; -} - -.login .forgot a { - color: #adb5bd; - font-size: 0.7em; -} - -main { - width: 100%; - min-height: 100%; - background: #393939; -} - -main .title { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} - -main .title h1 { - margin-left: 15px; -} - -main .title .logo { - text-decoration: none; - position: relative; - width: 45px; - height: 45px; - border-radius: 50%; - background-color: #de9700; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} - -main .title .logo i { - color: #2d2d2d; - font-size: 2em; - position: relative; - left: 1px; - top: -3px; -} - -main .title .logo .fa-ticket-alt { - font-size: 1em; - position: absolute; - left: 14px; - top: 6px; -} - -main header { - height: 7%; - border-bottom: 1px solid #de9700; - background-color: #2d2d2d; - -webkit-box-sizing: border-box; - box-sizing: border-box; - position: fixed; - width: 100%; - z-index: 100; -} - -main header .title { - margin-left: 30px; -} - -main header .marque-wrapper { - height: 100%; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - cursor: pointer; -} - -main header .marque-wrapper .marque { - height: 100%; - width: auto; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - margin-right: 30px; -} - -main header .marque-wrapper .marque img { - height: 90%; - width: auto; -} - -main header .marque-wrapper .fa-angle-down { - font-size: 2em; - height: auto; - color: #adb5bd; -} - -main header .marque-wrapper .fa-angle-down:hover { - color: #de9700; - cursor: pointer; -} - -main header .marque-select { - display: none; - position: absolute; - right: 0; - z-index: 100; - top: 100%; -} - -main header .marque-select ul { - margin-top: 1px; - padding: 10px 0; - background-color: #2d2d2d; -} - -main header .marque-select ul li { - text-align: center; - padding: 0 10px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; -} - -main header .marque-select ul li:hover { - background-color: #212121; - border-top: 1px solid #de9700; - border-bottom: 1px solid #de9700; -} - -main header .marque-select ul li button { - background-color: transparent; - color: #adb5bd; - font-family: 'Nunito-Regular', sans-serif; - font-size: 1.2em; - border: 0; - outline: none; - cursor: pointer; -} - -main section { - height: auto; - /* Old browsers */ - padding-left: 7%; - padding-top: 5%; - /* Tooltip container */ - /* Tooltip text */ - /* Tooltip arrow */ - /* Show the tooltip text when you mouse over the tooltip container */ -} - -main section.logout { - height: 100%; - padding: 0; -} - -main section .content-wrapper { - width: 95%; - margin: 0 auto; - overflow: auto; - padding: 40px 0; -} - -main section .content-wrapper.logout { - padding: 0; - height: 100%; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} - -main section .content-wrapper .content-list { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; -} - -main section .content-wrapper input { - min-width: 50%; - padding: 5px 10px; - border: 1px solid #212121; - background-color: #adb5bd; - color: #212121; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} - -main section .content-wrapper input.small { - width: 100px; - text-align: right; - margin-right: 10px; -} - -main section .content-wrapper input.input-file { - min-width: 10%; -} - -main section .content-wrapper textarea { - padding: 5px 10px; - border: 1px solid #212121; - background-color: #adb5bd; - color: #212121; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} - -main section .content-wrapper select { - min-width: 50%; - padding: 5px 10px; - border: 1px solid #212121; - background-color: #adb5bd; - color: #212121; -} - -main section .content-wrapper .form-wrapper { - width: 100%; - font-family: 'Nunito-Regular', sans-serif; - color: #adb5bd; -} - -main section .content-wrapper .form-wrapper figure { - margin-bottom: 20px; - text-align: center; -} - -main section .content-wrapper .form-wrapper .form-split { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -ms-flex-wrap: wrap; - flex-wrap: wrap; -} - -main section .content-wrapper .form-wrapper .form-split.align-start { - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; -} - -@media screen and (max-width: 768px) { - main section .content-wrapper .form-wrapper .form-split { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - } -} - -main section .content-wrapper .form-wrapper .form-field { - width: 48%; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-top: 0.66%; -} - -@media screen and (max-width: 768px) { - main section .content-wrapper .form-wrapper .form-field { - width: 100%; - } -} - -main section .content-wrapper .form-wrapper .form-field span { - width: 40%; - text-align: right; -} - -main section .content-wrapper .form-wrapper .form-field .title { - width: 45%; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; -} - -main section .content-wrapper .form-wrapper .form-field .title span { - margin-top: 5px; - width: 100%; - font-size: 0.8em; - text-align: left; - font-style: italic; -} - -main section .content-wrapper .form-wrapper .form-field.submit { - width: 100%; - margin-top: 20px; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: end; - -ms-flex-align: end; - align-items: flex-end; -} - -main section .content-wrapper .form-wrapper .form-field.submit span { - font-style: italic; - font-size: 0.8em; - margin-right: 20px; -} - -main section .content-wrapper .form-wrapper .form-field.submit input { - min-width: 26%; -} - -main section .content-wrapper .form-wrapper .form-field.limitPrinting, main section .content-wrapper .form-wrapper .form-field.enablelimitperiod, main section .content-wrapper .form-wrapper .form-field.enablelimitquantity, main section .content-wrapper .form-wrapper .form-field.gs1code { - opacity: 0; - -webkit-transition: opacity 0.5s ease-in; - transition: opacity 0.5s ease-in; -} - -main section .content-wrapper .form-wrapper .form-field .figure-desktop { - margin: 10px auto; -} - -main section .content-wrapper .form-wrapper .form-field .figure-desktop img { - width: 70%; - height: auto; -} - -main section .content-wrapper .form-wrapper .form-field .figure-mobile { - margin-top: 10px; -} - -main section .content-wrapper .form-wrapper .form-field .figure-mobile img { - width: 40%; - height: auto; -} - -main section .content-wrapper .form-wrapper .form-field-calendar { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-bottom: 10px; -} - -main section .content-wrapper .form-wrapper .form-field-calendar input { - min-width: auto; - width: 30%; -} - -@media screen and (max-width: 768px) { - main section .content-wrapper .form-wrapper .form-field-calendar input { - width: 45%; - } -} - -main section .content-wrapper .form-wrapper .form-field-calendar input:first-child { - margin-right: 10px; -} - -main section .content-wrapper .form-wrapper .form-field-textarea { - width: 48%; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - margin-top: 10px; -} - -@media screen and (max-width: 768px) { - main section .content-wrapper .form-wrapper .form-field-textarea { - width: 100%; - } -} - -main section .content-wrapper .form-wrapper .form-field-textarea textarea { - width: 100%; - margin-top: 5px; -} - -main section .content-wrapper input:-moz-read-only { - color: #adb5bd; - background-color: transparent; - border: 0; -} - -main section .content-wrapper input:read-only { - color: #adb5bd; - background-color: transparent; - border: 0; -} - -main section .content-wrapper button, main section .content-wrapper input[type=submit] { - padding: 5px 10px; - background-color: #de9700; - color: #212121; - border: 0; - cursor: pointer; - margin: 5px 0; - border: 1px solid #de9700; -} - -main section .content-wrapper button:hover, main section .content-wrapper input[type=submit]:hover { - background-color: #2d2d2d; - color: #de9700; - border: 1px solid #de9700; -} - -main section .content-wrapper .login input[type=email], main section .content-wrapper .login input[type=password] { - width: 100%; - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 10px; - border: 1px solid #212121; -} - -main section .content-wrapper form input[type='checkbox'] { - opacity: 0; - z-index: -1; - display: none; -} - -main section .content-wrapper form input[type='checkbox'] + label { - width: 20px; - height: 20px; - display: inline-block; - position: relative; - box-sizing: border-box; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - text-indent: -999px; - overflow: hidden; - border: 1px solid #de9700; - cursor: pointer; -} - -main section .content-wrapper form input[type='checkbox'] + label { - border: 1px solid #de9700; - background: transparent; -} - -main section .content-wrapper form input[type='checkbox'] + label:before { - content: ''; - width: 10px; - height: 10px; - top: 0; - left: 0; - bottom: 0; - right: 0; - position: absolute; - margin: auto; - background-color: #de9700; - opacity: 0; - z-index: -1; - transition: 0.4s ease-in-out all; - -moz-transition: 0.4s ease-in-out all; - -webkit-transition: 0.4s ease-in-out all; -} - -main section .content-wrapper form input[type='checkbox']:checked + label:before { - opacity: 1; - z-index: 10; - transform: rotate(360deg); - -webkit-transform: rotate(360deg); -} - -main section .content-wrapper .delete-icon { - color: #d70000; -} - -main section .content-wrapper .delete-coupon { - color: #d70000; - cursor: pointer; -} - -main section .content-wrapper .addcalendar, main section .content-wrapper .add-mouvement-btn { - margin-right: 10px; - font-size: 1.1em; - color: #de9700; - cursor: pointer; -} - -main section .content-wrapper .removecalendar { - color: #de9700; - margin-left: 10px; - font-size: 1.5em; - cursor: pointer; -} - -main section .content-wrapper .no-result { - text-align: center; - color: #adb5bd; - font-family: 'Nunito-Regular', sans-serif; - margin: 10px; -} - -main section .content-wrapper .sitesChoice { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - margin-top: 20px; -} - -main section .content-wrapper .sitesChoice .inputGroup { - width: 30%; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - margin-bottom: 10px; -} - -main section .content-wrapper .sitesChoice .inputGroup label { - margin-right: 10px; -} - -main section a { - text-decoration: none; - color: #de9700; -} - -main section a:visited { - text-decoration: none; -} - -main section table { - width: 100%; - color: #adb5bd; - font-family: 'Nunito-Regular', sans-serif; -} - -main section table thead, main section table tfoot { - background-color: #212121; - text-align: left; -} - -main section table th, main section table td { - padding: 5px; -} - -main section table th.center, main section table td.center { - text-align: center; -} - -main section table td:first-child, main section table th:first-child { - text-align: center; -} - -main section table tr:nth-child(even) { - background-color: #303030; -} - -main section table .pagination { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; -} - -main section table .pagination li { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - margin: 0px 5px; -} - -main section table .pagination li:first-child, main section table .pagination li:last-child { - overflow: hidden; - line-height: 1em; -} - -main section table .pagination li:first-child span, main section table .pagination li:first-child a, main section table .pagination li:last-child span, main section table .pagination li:last-child a { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - font-size: 1.8em; -} - -main section .showTemplate { - cursor: pointer; -} - -main section .green { - color: #008e03; -} - -main section .red { - color: #d70000; -} - -main section .orange { - color: #de9700; -} - -main section .campagne-list, main section .notifs-wrapper { - margin-top: 30px; -} - -main section .separator { - height: 1px; - margin: 30px 100px; - background-color: #de9700; -} - -main section .contactWidgets { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-pack: distribute; - justify-content: space-around; - -ms-flex-wrap: wrap; - flex-wrap: wrap; -} - -main section .contactWidgets .loader { - display: none; -} - -main section .contactWidgets .loader h4 { - text-align: center; - opacity: 0.7; -} - -main section .contactWidgets .loader .lds-ripple { - display: block; - position: relative; - width: 64px; - height: 64px; - margin: 0px auto; -} - -main section .contactWidgets .loader .lds-ripple div { - position: absolute; - border: 4px solid #de9700; - opacity: 1; - border-radius: 50%; - -webkit-animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite; - animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite; -} - -main section .contactWidgets .loader .lds-ripple div:nth-child(2) { - -webkit-animation-delay: -0.5s; - animation-delay: -0.5s; -} - -@-webkit-keyframes lds-ripple { - 0% { - top: 28px; - left: 28px; - width: 0; - height: 0; - opacity: 1; - } - 100% { - top: -1px; - left: -1px; - width: 58px; - height: 58px; - opacity: 0; - } -} - -@keyframes lds-ripple { - 0% { - top: 28px; - left: 28px; - width: 0; - height: 0; - opacity: 1; - } - 100% { - top: -1px; - left: -1px; - width: 58px; - height: 58px; - opacity: 0; - } -} - -main section .contactWidgets .campagne { - border: 1px solid #adb5bd; - padding: 20px; - margin-bottom: 10px; - width: 100%; - position: relative; -} - -main section .contactWidgets .campagne:last-child { - margin-bottom: 50px; -} - -main section .contactWidgets .campagne h4 { - margin-top: 0; -} - -main section .contactWidgets .campagne p { - font-family: 'Nunito-Regular', sans-serif; - color: #adb5bd; - margin-bottom: 5px; -} - -main section .contactWidgets .campagne .widget { - margin: 10px 0; -} - -main section .contactWidgets .campagne .widget .copy-url { - cursor: pointer; - padding: 0 5px; -} - -main section .contactWidgets .campagne .widget .copy-url:hover { - background-color: #303030; - color: #de9700; -} - -main section .contactWidgets .campagne .widget .link-copied { - position: absolute; - top: 5px; - right: 5px; - padding: 10px; - background-color: #303030; - color: #de9700; - font-family: 'Nunito-Regular', sans-serif; - opacity: 0; -} - -main section .contactWidgets .campagne .widget .widgetContent { - position: relative; - margin-top: 15px; - text-align: right; -} - -main section .contactWidgets .campagne .widget .widgetContent p { - text-align: center; -} - -main section .contactWidgets .campagne .widget .widgetContent input[type="submit"] { - min-width: 30%; -} - -main section .contactWidgets .campagne .widget .widgetContent .coupon { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; -} - -main section .contactWidgets .campagne .widget .widgetContent .coupon p { - display: block; - margin-bottom: 5px; -} - -main section .contactWidgets .campagne .widget .widgetContent .coupon p:first-child i { - color: #de9700; - margin-right: 10px; -} - -main section .contactWidgets .campagne .widget .widgetContent .coupon p:nth-child(2) { - margin-left: 20px; - font-style: italic; -} - -main section .contactWidgets .campagne .widget .widgetContent .coupon p:last-child { - -ms-flex-item-align: end; - align-self: flex-end; -} - -main section .contactWidgets .campagne .widget .widgetContent .coupon input { - min-width: 50px; - width: 50px; -} - -main section .user-app .heading { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} - -main section .user-app table { - margin-top: 20px; -} - -main section .user-app table tr td { - vertical-align: middle; -} - -main section .user-app table tr td:nth-child(1) { - width: 15%; -} - -main section .user-app table tr td:nth-child(2) { - width: 20%; -} - -main section .user-app table tr td:nth-child(3) { - width: 10%; -} - -main section .user-app table tr td.sites { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; -} - -main section .user-app table tr td.sites p { - width: 48%; - margin-bottom: 5px; -} - -main section .user-app table tr td:nth-child(5) { - width: 5%; -} - -main section .clean-app { - margin-top: 50px; - border-bottom: 1px solid #2d2d2d; -} - -main section .clean-app h5 { - margin-bottom: 40px; -} - -main section .clean-app .clean-line { - padding: 10px; - border-top: 1px solid #2d2d2d; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} - -main section .clean-app .clean-line p span { - font-style: italic; - font-size: 0.8em; -} - -main section .clean-app .clean-line .btn-clean { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; -} - -main section .clean-app .clean-line .btn-clean .add-button { - margin-top: 2px; - margin-bottom: 2px; -} - -main section .clean-app .clean-line .btn-clean .loader-mini { - display: none; -} - -main section .clean-app .clean-line .btn-clean .loader-mini .lds-ripple { - display: block; - position: relative; - width: 30px; - height: 30px; - margin: 0px auto; -} - -main section .clean-app .clean-line .btn-clean .loader-mini .lds-ripple div { - position: absolute; - border: 2px solid #de9700; - opacity: 1; - border-radius: 50%; - -webkit-animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite; - animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite; -} - -main section .clean-app .clean-line .btn-clean .loader-mini .lds-ripple div:nth-child(2) { - -webkit-animation-delay: -0.5s; - animation-delay: -0.5s; -} - -@keyframes lds-ripple { - 0% { - top: 13px; - left: 13px; - width: 0; - height: 0; - opacity: 1; - } - 100% { - top: -1px; - left: -1px; - width: 28px; - height: 28px; - opacity: 0; - } -} - -main section .chart-wrapper { - max-width: 950px; - min-width: 304px; - margin: 0 auto; - background-color: transparent; -} - -main section .chart-wrapper .inner-wrapper { - position: relative; - padding-bottom: 50%; - width: 100%; -} - -main section .chart-wrapper .outer-box { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; -} - -main section .chart-wrapper .inner-box { - width: 100%; - height: 100%; -} - -main section .chart-wrapper text { - font-family: sans-serif; - font-size: 11px; -} - -main section .chart-wrapper p { - font-size: 16px; - margin-top: 5px; - margin-bottom: 40px; -} - -main section .chart-wrapper .axis path, -main section .chart-wrapper .axis line { - fill: none; - stroke: #1F1F2E; - stroke-opacity: 0.7; - shape-rendering: crispEdges; -} - -main section .chart-wrapper .axis path { - stroke-width: 2px; -} - -main section .chart-wrapper .line { - fill: none; - stroke: steelblue; - stroke-width: 5px; -} - -main section .chart-wrapper .legend { - min-width: 200px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - font-size: 16px; - padding: 10px 40px; -} - -main section .chart-wrapper .legend > div { - margin: 0px 25px 10px 0px; - -webkit-box-flex: 0; - -ms-flex-positive: 0; - flex-grow: 0; -} - -main section .chart-wrapper .legend p { - display: inline; - font-size: 0.8em; - font-family: sans-serif; - font-weight: 600; -} - -main section .chart-wrapper .legend .series-marker { - height: 1em; - width: 1em; - border-radius: 35%; - background-color: crimson; - display: inline-block; - margin-right: 4px; - margin-bottom: -0.16rem; -} - -main section .chart-wrapper .overlay { - fill: none; - pointer-events: all; -} - -main section .chart-wrapper .focus circle { - fill: crimson; - stroke: crimson; - stroke-width: 2px; - fill-opacity: 15%; -} - -main section .chart-wrapper .focus rect { - fill: lightblue; - opacity: 0.4; - border-radius: 2px; -} - -main section .chart-wrapper .focus.line { - stroke: steelblue; - stroke-dasharray: 2,5; - stroke-width: 2; - opacity: 0.5; -} - -@media (max-width: 500px) { - main section .chart-wrapper .line { - stroke-width: 3px; - } - main section .chart-wrapper .legend { - font-size: 14px; - } -} - -main section .error-log { - margin-top: 50px; -} - -main section .logs-wrapper { - max-height: 300px; - overflow-y: auto; -} - -main section .logs-wrapper::-webkit-scrollbar-track { - -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); - border-radius: 10px; - background-color: #303030; -} - -main section .logs-wrapper::-webkit-scrollbar { - width: 12px; - background-color: none; -} - -main section .logs-wrapper::-webkit-scrollbar-thumb { - border-radius: 10px; - -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); - background-color: #de9700; -} - -main section .logs-wrapper .logs td { - vertical-align: middle; -} - -main section .logs-wrapper .logs td ul li { - margin-top: 5px; - margin-left: 20px; -} - -main section .alert { - color: #df0000; - font-family: 'Nunito-Regular', sans-serif; - margin: 10px 0; -} - -main section .pub i { - cursor: pointer; -} - -main section .expand-action { - position: absolute; - top: 100px; - right: 50px; -} - -main section .expand-action i { - cursor: pointer; -} - -main section .siteContent { - padding: 20px; -} - -main section .siteContent .campContent { - border-bottom: 1px solid #2d2d2d; -} - -main section .siteContent .campContent:nth-child(odd) { - background-color: #434343; -} - -main section .siteContent .campContent:nth-child(even) { - background-color: #4d4d4d; -} - -main section .siteContent .campContent:first-child { - border-top: 1px solid #2d2d2d; -} - -main section .siteContent .campContent .campDetail { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - padding: 10px; -} - -main section .siteContent .campContent .campDetail .fa-exclamation-triangle { - display: none; -} - -main section .siteContent .campContent .campDetail .fa-angle-down { - cursor: pointer; -} - -main section .siteContent .campContent .campDetail p:first-child { - width: 10%; -} - -main section .siteContent .campContent .campDetail p:nth-child(2) { - width: 35%; - text-align: center; -} - -main section .siteContent .campContent .campDetail p:nth-child(3) { - width: 20%; - text-align: center; -} - -main section .siteContent .campContent .campDetail p:nth-child(4) { - width: 20%; - text-align: center; -} - -main section .siteContent .campContent .campDetail p:nth-child(5) { - width: 10%; - text-align: center; -} - -main section .siteContent .campContent .campDetail p:nth-child(6) { - width: 5%; - text-align: center; -} - -main section .siteContent .campContent .coupons { - display: none; - border-top: 1px solid #2d2d2d; - padding: 20px; -} - -main section .siteContent .campContent .coupons table { - border-collapse: separate; - border-spacing: 2px; -} - -main section .siteContent .campContent .coupons table thead { - background-color: #2d2d2d; -} - -main section .siteContent .campContent .coupons table thead th { - text-align: center; -} - -main section .siteContent .campContent .coupons table tr td { - text-align: center; -} - -main section .title-stat { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - margin-bottom: 20px; -} - -main section .title-stat h2 { - margin-bottom: 0; -} - -main section .title-stat div { - width: 55%; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; -} - -main section .title-stat div input { - min-width: 15%; -} - -main section .title-stat div input#startdate { - margin-right: 5px; -} - -main section .title-stat div h4 { - margin: 0; - margin-right: 20px; -} - -main section .statistiquesGlobales { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; -} - -main section .statistiquesGlobales .campstat { - width: 40%; - text-align: center; - border: 1px solid #212121; -} - -main section .statistiquesGlobales .campstat thead { - text-align: center; -} - -main section .statistiquesGlobales .campstat thead th { - padding: 10px; - font-size: 1.3em; - text-align: center; - font-weight: bold; -} - -main section .statistiquesGlobales .campstat td { - padding: 10px; -} - -main section .statistiquesGlobales .campstat td:first-child { - text-align: left; -} - -main section .statistiquesGlobales .graphStatsGlobales { - width: 55%; -} - -main section .statistiquesGlobales .graphStatsGlobales h3 { - margin: 0 0 20px 0; -} - -main section .title { - margin: 30px 0 10px 0; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - width: 100%; -} - -main section .title h3 { - margin: 0; -} - -main section .title .btns a { - margin-left: 5px; - font-size: 0.8em; -} - -main section .statistiquesContent { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; -} - -main section .statistiquesContent .couponStats { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - width: 40%; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -ms-flex-wrap: wrap; - flex-wrap: wrap; -} - -main section .statistiquesContent .couponStats .couponStatsDetail { - margin-top: 10px; - width: 100%; - border: 1px solid #212121; -} - -main section .statistiquesContent .couponStats .couponStatsDetail h4 { - padding: 10px; - position: relative; - margin-top: 0; - margin-bottom: 0; - text-align: center; - color: #adb5bd; - font-weight: bold; - background-color: #212121; -} - -main section .statistiquesContent .couponStats .couponStatsDetail h4 span { - cursor: pointer; -} - -main section .statistiquesContent .couponStats .couponStatsDetail h4 span:first-child { - width: 95%; - display: block; -} - -main section .statistiquesContent .couponStats .couponStatsDetail h4 .couponLegend { - position: absolute; - display: inline-block; - right: 8px; - top: 8px; - width: 20px; - height: 20px; - border-radius: 50%; - overflow: hidden; -} - -main section .statistiquesContent .couponStats .couponStatsDetail h4 .couponLegend .line { - width: 35px; - height: 20px; - border-bottom: 3px solid red; - -webkit-transform: translateY(-20px) translateX(5px) rotate(27deg); - position: absolute; - top: 9px; - left: -10px; -} - -main section .statistiquesContent .couponStats .couponStatsDetail .content { - display: none; - padding: 10px; -} - -main section .statistiquesContent .couponStats .couponStatsDetail .content figure { - text-align: center; - margin-bottom: 5px; -} - -main section .statistiquesContent .couponStats .couponStatsDetail .content figure img { - width: 60%; - height: auto; -} - -main section .statistiquesContent .couponStats .couponStatsDetail .content p { - margin-bottom: 10px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; -} - -main section .statistiquesContent .couponStats .couponStatsDetail .content p:last-child { - margin-bottom: 0; -} - -main section .statistiquesContent .graphStats { - width: 55%; -} - -main section .statistiquesContent .graphStats h3 { - margin: 30px 0 20px 0; -} - -main section .statistiquesContent .graphStats h3 i { - float: right; - margin-left: 10px; - cursor: pointer; -} - -main section .selector-export { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} - -main section .selector-export h4 { - margin: 0; - margin-right: 20px; -} - -main section .selector-export input { - min-width: 150px; -} - -main section .selector-export input#startdate { - margin-right: 20px; -} - -main section .export-btn { - text-align: right; - margin-top: 20px; -} - -main section .tooltip { - position: relative; - display: inline-block; -} - -main section .tooltip .tooltiptext { - visibility: hidden; - width: 120px; - background-color: #212121; - color: #adb5bd; - text-align: center; - padding: 5px 0; - border-radius: 6px; - font-weight: normal; - /* Position the tooltip text */ - position: absolute; - z-index: 1; - bottom: 125%; - left: 50%; - margin-left: -60px; - line-height: 1.2em; - /* Fade in tooltip */ - opacity: 0; - -webkit-transition: opacity 0.3s; - transition: opacity 0.3s; - font-family: 'Nunito-Regular', sans-serif; - font-size: 0.8em; -} - -main section .tooltip .tooltiptext::after { - content: ""; - position: absolute; - top: 100%; - left: 50%; - margin-left: -5px; - border-width: 5px; - border-style: solid; - border-color: #212121 transparent transparent transparent; -} - -main section .tooltip:hover .tooltiptext { - visibility: visible; - opacity: 1; -} - -#coupons-list { - background-color: #2d2d2d; - padding: 20px; - min-width: 550px; -} - -#coupons-list .inputGroup { - background-color: #393939; - display: block; - margin: 2px 0; - position: relative; -} - -#coupons-list .inputGroup.notPublished { - background-color: rgba(223, 0, 0, 0.3); -} - -#coupons-list .inputGroup label { - padding: 8px 30px; - width: 100%; - display: block; - text-align: left; - color: #adb5bd; - cursor: pointer; - position: relative; - z-index: 2; - -webkit-transition: color 200ms ease-in; - transition: color 200ms ease-in; - overflow: hidden; - -webkit-box-sizing: border-box; - box-sizing: border-box; - font-family: 'Nunito-Regular', sans-serif; -} - -#coupons-list .inputGroup label:before { - width: 10px; - height: 10px; - border-radius: 50%; - content: ''; - background-color: #212121; - position: absolute; - left: 50%; - top: 50%; - -webkit-transform: translate(-50%, -50%) scale3d(1, 1, 1); - transform: translate(-50%, -50%) scale3d(1, 1, 1); - -webkit-transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1); - transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1); - opacity: 0; - z-index: -1; -} - -#coupons-list .inputGroup label:after { - width: 20px; - height: 20px; - content: ''; - border: 1px solid #de9700; - background-color: #393939; - background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.414 11L4 12.414l5.414 5.414L20.828 6.414 19.414 5l-10 10z' fill='%23393939' fill-rule='nonzero'/%3E%3C/svg%3E "); - background-repeat: no-repeat; - background-position: -3px -1px; - z-index: 2; - position: absolute; - right: 30px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - cursor: pointer; - -webkit-transition: all 200ms ease-in; - transition: all 200ms ease-in; -} - -#coupons-list .inputGroup input:checked ~ label { - color: #fff; -} - -#coupons-list .inputGroup input:checked ~ label:before { - -webkit-transform: translate(-50%, -50%) scale3d(130, 130, 1); - transform: translate(-50%, -50%) scale3d(130, 130, 1); - opacity: 1; -} - -#coupons-list .inputGroup input:checked ~ label:after { - background-color: #de9700; - border-color: #de9700; -} - -#coupons-list .inputGroup input { - width: 32px; - height: 32px; - -webkit-box-ordinal-group: 2; - -ms-flex-order: 1; - order: 1; - z-index: 2; - position: absolute; - right: 30px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - cursor: pointer; - visibility: hidden; -} - -#coupons-list input[type=submit] { - padding: 5px 10px; - background-color: #de9700; - color: #212121; - border: 0; - cursor: pointer; - margin: 5px 0; - border: 1px solid #de9700; -} - -#coupons-list input[type=submit]:hover { - background-color: #2d2d2d; - color: #de9700; - border: 1px solid #de9700; -} - -#coupons-list button { - color: #adb5bd; -} - -.fc-container .fancybox-bg { - background: #393939; -} - -.fancybox-is-open.fc-container .fancybox-bg { - opacity: 0.95; -} - -.fc-content { - margin: 20px; - max-width: 550px; - padding: 50px; - -webkit-box-shadow: 10px 10px 60px -25px; - box-shadow: 10px 10px 60px -25px; - border-radius: 4px; -} - -.fc-content h3 { - margin-top: 0; - font-size: 1.6em; - letter-spacing: normal; -} - -.fc-content p { - color: #666; - line-height: 1.5; -} - -.fc-content p:last-child { - margin-bottom: 0; -} - -/* Custom animation */ -.fancybox-fx-material.fancybox-slide--previous, -.fancybox-fx-material.fancybox-slide--next { - -webkit-transform: translateY(-60px) scale(1.1); - transform: translateY(-60px) scale(1.1); - opacity: 0; -} - -.fancybox-fx-material.fancybox-slide--current { - opacity: 1; - -webkit-transform: translateY(0) scale(1); - transform: translateY(0) scale(1); -} - -.fancybox-content { - background-color: #2d2d2d !important; - font-family: 'Nunito-Regular', sans-serif; -} - -.fancybox-content h3 { - color: #d70000; - margin-bottom: 20px; -} - -.fancybox-content h3.info { - color: #008e03; -} - -.fancybox-content p { - color: #adb5bd; - margin: 10px 0; -} - -.fancybox-content p.tright { - text-align: right; -} - -.fancybox-content button { - padding: 5px 10px; - background-color: #de9700; - color: #212121; - border: 0; - cursor: pointer; - margin: 5px 0; - border: 1px solid #de9700; -} - -.fancybox-content button:hover { - background-color: #2d2d2d; - color: #de9700; - border: 1px solid #de9700; -} - -.fancybox-content a { - text-decoration: underline; - cursor: pointer; - margin-right: 15px; -} - -.inputGroup-export { - background-color: #393939; - display: block; - margin: 2px 0; - position: relative; -} - -.inputGroup-export.notPublished { - background-color: rgba(223, 0, 0, 0.3); -} - -.inputGroup-export label { - padding: 8px 30px; - width: 100%; - display: block; - text-align: left; - color: #adb5bd; - cursor: pointer; - position: relative; - z-index: 2; - -webkit-transition: color 200ms ease-in; - transition: color 200ms ease-in; - overflow: hidden; - -webkit-box-sizing: border-box; - box-sizing: border-box; - font-family: 'Nunito-Regular', sans-serif; -} - -.inputGroup-export label:before { - width: 15px; - height: 10px; - border-radius: 50%; - content: ''; - background-color: #212121; - position: absolute; - left: 50%; - top: 50%; - -webkit-transform: translate(-50%, -50%) scale3d(1, 1, 1); - transform: translate(-50%, -50%) scale3d(1, 1, 1); - -webkit-transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1); - transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1); - opacity: 0; - z-index: -1; -} - -.inputGroup-export label:after { - width: 20px; - height: 20px; - content: ''; - border: 1px solid #de9700; - background-color: #393939; - background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.414 11L4 12.414l5.414 5.414L20.828 6.414 19.414 5l-10 10z' fill='%23393939' fill-rule='nonzero'/%3E%3C/svg%3E "); - background-repeat: no-repeat; - background-position: -3px -1px; - z-index: 2; - position: absolute; - right: 30px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - cursor: pointer; - -webkit-transition: all 200ms ease-in; - transition: all 200ms ease-in; -} - -.inputGroup-export input:checked ~ label { - color: #fff; -} - -.inputGroup-export input:checked ~ label:before { - -webkit-transform: translate(-50%, -50%) scale3d(130, 130, 1); - transform: translate(-50%, -50%) scale3d(130, 130, 1); - opacity: 1; -} - -.inputGroup-export input:checked ~ label:after { - background-color: #de9700; - border-color: #de9700; -} - -.inputGroup-export input { - width: 32px; - height: 32px; - -webkit-box-ordinal-group: 2; - -ms-flex-order: 1; - order: 1; - z-index: 2; - position: absolute; - right: 30px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - cursor: pointer; - visibility: hidden; -} diff --git a/public/generation/.gitkeep b/public/generation/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/public/images/logo.png b/public/images/logo.png deleted file mode 100644 index 50fc7f0..0000000 Binary files a/public/images/logo.png and /dev/null differ diff --git a/public/images/logos/.gitkeep b/public/images/logos/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/public/js/Chart.js b/public/js/Chart.js deleted file mode 100644 index 4d872cb..0000000 --- a/public/js/Chart.js +++ /dev/null @@ -1,83 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "/"; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 6); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ 6: -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(7); - - -/***/ }), - -/***/ 7: -/***/ (function(module, exports, __webpack_require__) { - -eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;var require;var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\r\n * Chart.js\r\n * http://chartjs.org/\r\n * Version: 2.7.3\r\n *\r\n * Copyright 2018 Chart.js Contributors\r\n * Released under the MIT license\r\n * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md\r\n */\n(function (f) {\n\tif (( false ? \"undefined\" : _typeof(exports)) === \"object\" && typeof module !== \"undefined\") {\n\t\tmodule.exports = f();\n\t} else if (true) {\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (f),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {\n\t\tvar g;if (typeof window !== \"undefined\") {\n\t\t\tg = window;\n\t\t} else if (typeof global !== \"undefined\") {\n\t\t\tg = global;\n\t\t} else if (typeof self !== \"undefined\") {\n\t\t\tg = self;\n\t\t} else {\n\t\t\tg = this;\n\t\t}g.Chart = f();\n\t}\n})(function () {\n\tvar define, module, exports;return function () {\n\t\tfunction r(e, n, t) {\n\t\t\tfunction o(i, f) {\n\t\t\t\tif (!n[i]) {\n\t\t\t\t\tif (!e[i]) {\n\t\t\t\t\t\tvar c = \"function\" == typeof require && require;if (!f && c) return require(i, !0);if (u) return u(i, !0);var a = new Error(\"Cannot find module '\" + i + \"'\");throw a.code = \"MODULE_NOT_FOUND\", a;\n\t\t\t\t\t}var p = n[i] = { exports: {} };e[i][0].call(p.exports, function (r) {\n\t\t\t\t\t\tvar n = e[i][1][r];return o(n || r);\n\t\t\t\t\t}, p, p.exports, r, e, n, t);\n\t\t\t\t}return n[i].exports;\n\t\t\t}for (var u = \"function\" == typeof require && require, i = 0; i < t.length; i++) {\n\t\t\t\to(t[i]);\n\t\t\t}return o;\n\t\t}return r;\n\t}()({ 1: [function (require, module, exports) {}, {}], 2: [function (require, module, exports) {\n\t\t\t/* MIT license */\n\t\t\tvar colorNames = require(6);\n\n\t\t\tmodule.exports = {\n\t\t\t\tgetRgba: getRgba,\n\t\t\t\tgetHsla: getHsla,\n\t\t\t\tgetRgb: getRgb,\n\t\t\t\tgetHsl: getHsl,\n\t\t\t\tgetHwb: getHwb,\n\t\t\t\tgetAlpha: getAlpha,\n\n\t\t\t\thexString: hexString,\n\t\t\t\trgbString: rgbString,\n\t\t\t\trgbaString: rgbaString,\n\t\t\t\tpercentString: percentString,\n\t\t\t\tpercentaString: percentaString,\n\t\t\t\thslString: hslString,\n\t\t\t\thslaString: hslaString,\n\t\t\t\thwbString: hwbString,\n\t\t\t\tkeyword: keyword\n\t\t\t};\n\n\t\t\tfunction getRgba(string) {\n\t\t\t\tif (!string) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar abbr = /^#([a-fA-F0-9]{3})$/i,\n\t\t\t\t hex = /^#([a-fA-F0-9]{6})$/i,\n\t\t\t\t rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n\t\t\t\t per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n\t\t\t\t keyword = /(\\w+)/;\n\n\t\t\t\tvar rgb = [0, 0, 0],\n\t\t\t\t a = 1,\n\t\t\t\t match = string.match(abbr);\n\t\t\t\tif (match) {\n\t\t\t\t\tmatch = match[1];\n\t\t\t\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\t\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t\t\t\t}\n\t\t\t\t} else if (match = string.match(hex)) {\n\t\t\t\t\tmatch = match[1];\n\t\t\t\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\t\t\t\trgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n\t\t\t\t\t}\n\t\t\t\t} else if (match = string.match(rgba)) {\n\t\t\t\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\t\t\t\trgb[i] = parseInt(match[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\ta = parseFloat(match[4]);\n\t\t\t\t} else if (match = string.match(per)) {\n\t\t\t\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\t\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t\t\t\t}\n\t\t\t\t\ta = parseFloat(match[4]);\n\t\t\t\t} else if (match = string.match(keyword)) {\n\t\t\t\t\tif (match[1] == \"transparent\") {\n\t\t\t\t\t\treturn [0, 0, 0, 0];\n\t\t\t\t\t}\n\t\t\t\t\trgb = colorNames[match[1]];\n\t\t\t\t\tif (!rgb) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\t\t\trgb[i] = scale(rgb[i], 0, 255);\n\t\t\t\t}\n\t\t\t\tif (!a && a != 0) {\n\t\t\t\t\ta = 1;\n\t\t\t\t} else {\n\t\t\t\t\ta = scale(a, 0, 1);\n\t\t\t\t}\n\t\t\t\trgb[3] = a;\n\t\t\t\treturn rgb;\n\t\t\t}\n\n\t\t\tfunction getHsla(string) {\n\t\t\t\tif (!string) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n\t\t\t\tvar match = string.match(hsl);\n\t\t\t\tif (match) {\n\t\t\t\t\tvar alpha = parseFloat(match[4]);\n\t\t\t\t\tvar h = scale(parseInt(match[1]), 0, 360),\n\t\t\t\t\t s = scale(parseFloat(match[2]), 0, 100),\n\t\t\t\t\t l = scale(parseFloat(match[3]), 0, 100),\n\t\t\t\t\t a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\t\t\t\treturn [h, s, l, a];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction getHwb(string) {\n\t\t\t\tif (!string) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n\t\t\t\tvar match = string.match(hwb);\n\t\t\t\tif (match) {\n\t\t\t\t\tvar alpha = parseFloat(match[4]);\n\t\t\t\t\tvar h = scale(parseInt(match[1]), 0, 360),\n\t\t\t\t\t w = scale(parseFloat(match[2]), 0, 100),\n\t\t\t\t\t b = scale(parseFloat(match[3]), 0, 100),\n\t\t\t\t\t a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\t\t\t\treturn [h, w, b, a];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction getRgb(string) {\n\t\t\t\tvar rgba = getRgba(string);\n\t\t\t\treturn rgba && rgba.slice(0, 3);\n\t\t\t}\n\n\t\t\tfunction getHsl(string) {\n\t\t\t\tvar hsla = getHsla(string);\n\t\t\t\treturn hsla && hsla.slice(0, 3);\n\t\t\t}\n\n\t\t\tfunction getAlpha(string) {\n\t\t\t\tvar vals = getRgba(string);\n\t\t\t\tif (vals) {\n\t\t\t\t\treturn vals[3];\n\t\t\t\t} else if (vals = getHsla(string)) {\n\t\t\t\t\treturn vals[3];\n\t\t\t\t} else if (vals = getHwb(string)) {\n\t\t\t\t\treturn vals[3];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// generators\n\t\t\tfunction hexString(rgb) {\n\t\t\t\treturn \"#\" + hexDouble(rgb[0]) + hexDouble(rgb[1]) + hexDouble(rgb[2]);\n\t\t\t}\n\n\t\t\tfunction rgbString(rgba, alpha) {\n\t\t\t\tif (alpha < 1 || rgba[3] && rgba[3] < 1) {\n\t\t\t\t\treturn rgbaString(rgba, alpha);\n\t\t\t\t}\n\t\t\t\treturn \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n\t\t\t}\n\n\t\t\tfunction rgbaString(rgba, alpha) {\n\t\t\t\tif (alpha === undefined) {\n\t\t\t\t\talpha = rgba[3] !== undefined ? rgba[3] : 1;\n\t\t\t\t}\n\t\t\t\treturn \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \", \" + alpha + \")\";\n\t\t\t}\n\n\t\t\tfunction percentString(rgba, alpha) {\n\t\t\t\tif (alpha < 1 || rgba[3] && rgba[3] < 1) {\n\t\t\t\t\treturn percentaString(rgba, alpha);\n\t\t\t\t}\n\t\t\t\tvar r = Math.round(rgba[0] / 255 * 100),\n\t\t\t\t g = Math.round(rgba[1] / 255 * 100),\n\t\t\t\t b = Math.round(rgba[2] / 255 * 100);\n\n\t\t\t\treturn \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n\t\t\t}\n\n\t\t\tfunction percentaString(rgba, alpha) {\n\t\t\t\tvar r = Math.round(rgba[0] / 255 * 100),\n\t\t\t\t g = Math.round(rgba[1] / 255 * 100),\n\t\t\t\t b = Math.round(rgba[2] / 255 * 100);\n\t\t\t\treturn \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n\t\t\t}\n\n\t\t\tfunction hslString(hsla, alpha) {\n\t\t\t\tif (alpha < 1 || hsla[3] && hsla[3] < 1) {\n\t\t\t\t\treturn hslaString(hsla, alpha);\n\t\t\t\t}\n\t\t\t\treturn \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n\t\t\t}\n\n\t\t\tfunction hslaString(hsla, alpha) {\n\t\t\t\tif (alpha === undefined) {\n\t\t\t\t\talpha = hsla[3] !== undefined ? hsla[3] : 1;\n\t\t\t\t}\n\t\t\t\treturn \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \" + alpha + \")\";\n\t\t\t}\n\n\t\t\t// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n\t\t\t// (hwb have alpha optional & 1 is default value)\n\t\t\tfunction hwbString(hwb, alpha) {\n\t\t\t\tif (alpha === undefined) {\n\t\t\t\t\talpha = hwb[3] !== undefined ? hwb[3] : 1;\n\t\t\t\t}\n\t\t\t\treturn \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\" + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n\t\t\t}\n\n\t\t\tfunction keyword(rgb) {\n\t\t\t\treturn reverseNames[rgb.slice(0, 3)];\n\t\t\t}\n\n\t\t\t// helpers\n\t\t\tfunction scale(num, min, max) {\n\t\t\t\treturn Math.min(Math.max(min, num), max);\n\t\t\t}\n\n\t\t\tfunction hexDouble(num) {\n\t\t\t\tvar str = num.toString(16).toUpperCase();\n\t\t\t\treturn str.length < 2 ? \"0\" + str : str;\n\t\t\t}\n\n\t\t\t//create a list of reverse color names\n\t\t\tvar reverseNames = {};\n\t\t\tfor (var name in colorNames) {\n\t\t\t\treverseNames[colorNames[name]] = name;\n\t\t\t}\n\t\t}, { \"6\": 6 }], 3: [function (require, module, exports) {\n\t\t\t/* MIT license */\n\t\t\tvar convert = require(5);\n\t\t\tvar string = require(2);\n\n\t\t\tvar Color = function Color(obj) {\n\t\t\t\tif (obj instanceof Color) {\n\t\t\t\t\treturn obj;\n\t\t\t\t}\n\t\t\t\tif (!(this instanceof Color)) {\n\t\t\t\t\treturn new Color(obj);\n\t\t\t\t}\n\n\t\t\t\tthis.valid = false;\n\t\t\t\tthis.values = {\n\t\t\t\t\trgb: [0, 0, 0],\n\t\t\t\t\thsl: [0, 0, 0],\n\t\t\t\t\thsv: [0, 0, 0],\n\t\t\t\t\thwb: [0, 0, 0],\n\t\t\t\t\tcmyk: [0, 0, 0, 0],\n\t\t\t\t\talpha: 1\n\t\t\t\t};\n\n\t\t\t\t// parse Color() argument\n\t\t\t\tvar vals;\n\t\t\t\tif (typeof obj === 'string') {\n\t\t\t\t\tvals = string.getRgba(obj);\n\t\t\t\t\tif (vals) {\n\t\t\t\t\t\tthis.setValues('rgb', vals);\n\t\t\t\t\t} else if (vals = string.getHsla(obj)) {\n\t\t\t\t\t\tthis.setValues('hsl', vals);\n\t\t\t\t\t} else if (vals = string.getHwb(obj)) {\n\t\t\t\t\t\tthis.setValues('hwb', vals);\n\t\t\t\t\t}\n\t\t\t\t} else if ((typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj)) === 'object') {\n\t\t\t\t\tvals = obj;\n\t\t\t\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\t\t\t\tthis.setValues('rgb', vals);\n\t\t\t\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\t\t\t\tthis.setValues('hsl', vals);\n\t\t\t\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\t\t\t\tthis.setValues('hsv', vals);\n\t\t\t\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\t\t\t\tthis.setValues('hwb', vals);\n\t\t\t\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\t\t\t\tthis.setValues('cmyk', vals);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tColor.prototype = {\n\t\t\t\tisValid: function isValid() {\n\t\t\t\t\treturn this.valid;\n\t\t\t\t},\n\t\t\t\trgb: function rgb() {\n\t\t\t\t\treturn this.setSpace('rgb', arguments);\n\t\t\t\t},\n\t\t\t\thsl: function hsl() {\n\t\t\t\t\treturn this.setSpace('hsl', arguments);\n\t\t\t\t},\n\t\t\t\thsv: function hsv() {\n\t\t\t\t\treturn this.setSpace('hsv', arguments);\n\t\t\t\t},\n\t\t\t\thwb: function hwb() {\n\t\t\t\t\treturn this.setSpace('hwb', arguments);\n\t\t\t\t},\n\t\t\t\tcmyk: function cmyk() {\n\t\t\t\t\treturn this.setSpace('cmyk', arguments);\n\t\t\t\t},\n\n\t\t\t\trgbArray: function rgbArray() {\n\t\t\t\t\treturn this.values.rgb;\n\t\t\t\t},\n\t\t\t\thslArray: function hslArray() {\n\t\t\t\t\treturn this.values.hsl;\n\t\t\t\t},\n\t\t\t\thsvArray: function hsvArray() {\n\t\t\t\t\treturn this.values.hsv;\n\t\t\t\t},\n\t\t\t\thwbArray: function hwbArray() {\n\t\t\t\t\tvar values = this.values;\n\t\t\t\t\tif (values.alpha !== 1) {\n\t\t\t\t\t\treturn values.hwb.concat([values.alpha]);\n\t\t\t\t\t}\n\t\t\t\t\treturn values.hwb;\n\t\t\t\t},\n\t\t\t\tcmykArray: function cmykArray() {\n\t\t\t\t\treturn this.values.cmyk;\n\t\t\t\t},\n\t\t\t\trgbaArray: function rgbaArray() {\n\t\t\t\t\tvar values = this.values;\n\t\t\t\t\treturn values.rgb.concat([values.alpha]);\n\t\t\t\t},\n\t\t\t\thslaArray: function hslaArray() {\n\t\t\t\t\tvar values = this.values;\n\t\t\t\t\treturn values.hsl.concat([values.alpha]);\n\t\t\t\t},\n\t\t\t\talpha: function alpha(val) {\n\t\t\t\t\tif (val === undefined) {\n\t\t\t\t\t\treturn this.values.alpha;\n\t\t\t\t\t}\n\t\t\t\t\tthis.setValues('alpha', val);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\tred: function red(val) {\n\t\t\t\t\treturn this.setChannel('rgb', 0, val);\n\t\t\t\t},\n\t\t\t\tgreen: function green(val) {\n\t\t\t\t\treturn this.setChannel('rgb', 1, val);\n\t\t\t\t},\n\t\t\t\tblue: function blue(val) {\n\t\t\t\t\treturn this.setChannel('rgb', 2, val);\n\t\t\t\t},\n\t\t\t\thue: function hue(val) {\n\t\t\t\t\tif (val) {\n\t\t\t\t\t\tval %= 360;\n\t\t\t\t\t\tval = val < 0 ? 360 + val : val;\n\t\t\t\t\t}\n\t\t\t\t\treturn this.setChannel('hsl', 0, val);\n\t\t\t\t},\n\t\t\t\tsaturation: function saturation(val) {\n\t\t\t\t\treturn this.setChannel('hsl', 1, val);\n\t\t\t\t},\n\t\t\t\tlightness: function lightness(val) {\n\t\t\t\t\treturn this.setChannel('hsl', 2, val);\n\t\t\t\t},\n\t\t\t\tsaturationv: function saturationv(val) {\n\t\t\t\t\treturn this.setChannel('hsv', 1, val);\n\t\t\t\t},\n\t\t\t\twhiteness: function whiteness(val) {\n\t\t\t\t\treturn this.setChannel('hwb', 1, val);\n\t\t\t\t},\n\t\t\t\tblackness: function blackness(val) {\n\t\t\t\t\treturn this.setChannel('hwb', 2, val);\n\t\t\t\t},\n\t\t\t\tvalue: function value(val) {\n\t\t\t\t\treturn this.setChannel('hsv', 2, val);\n\t\t\t\t},\n\t\t\t\tcyan: function cyan(val) {\n\t\t\t\t\treturn this.setChannel('cmyk', 0, val);\n\t\t\t\t},\n\t\t\t\tmagenta: function magenta(val) {\n\t\t\t\t\treturn this.setChannel('cmyk', 1, val);\n\t\t\t\t},\n\t\t\t\tyellow: function yellow(val) {\n\t\t\t\t\treturn this.setChannel('cmyk', 2, val);\n\t\t\t\t},\n\t\t\t\tblack: function black(val) {\n\t\t\t\t\treturn this.setChannel('cmyk', 3, val);\n\t\t\t\t},\n\n\t\t\t\thexString: function hexString() {\n\t\t\t\t\treturn string.hexString(this.values.rgb);\n\t\t\t\t},\n\t\t\t\trgbString: function rgbString() {\n\t\t\t\t\treturn string.rgbString(this.values.rgb, this.values.alpha);\n\t\t\t\t},\n\t\t\t\trgbaString: function rgbaString() {\n\t\t\t\t\treturn string.rgbaString(this.values.rgb, this.values.alpha);\n\t\t\t\t},\n\t\t\t\tpercentString: function percentString() {\n\t\t\t\t\treturn string.percentString(this.values.rgb, this.values.alpha);\n\t\t\t\t},\n\t\t\t\thslString: function hslString() {\n\t\t\t\t\treturn string.hslString(this.values.hsl, this.values.alpha);\n\t\t\t\t},\n\t\t\t\thslaString: function hslaString() {\n\t\t\t\t\treturn string.hslaString(this.values.hsl, this.values.alpha);\n\t\t\t\t},\n\t\t\t\thwbString: function hwbString() {\n\t\t\t\t\treturn string.hwbString(this.values.hwb, this.values.alpha);\n\t\t\t\t},\n\t\t\t\tkeyword: function keyword() {\n\t\t\t\t\treturn string.keyword(this.values.rgb, this.values.alpha);\n\t\t\t\t},\n\n\t\t\t\trgbNumber: function rgbNumber() {\n\t\t\t\t\tvar rgb = this.values.rgb;\n\t\t\t\t\treturn rgb[0] << 16 | rgb[1] << 8 | rgb[2];\n\t\t\t\t},\n\n\t\t\t\tluminosity: function luminosity() {\n\t\t\t\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\t\t\t\tvar rgb = this.values.rgb;\n\t\t\t\t\tvar lum = [];\n\t\t\t\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\t\t\t\tvar chan = rgb[i] / 255;\n\t\t\t\t\t\tlum[i] = chan <= 0.03928 ? chan / 12.92 : Math.pow((chan + 0.055) / 1.055, 2.4);\n\t\t\t\t\t}\n\t\t\t\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t\t\t\t},\n\n\t\t\t\tcontrast: function contrast(color2) {\n\t\t\t\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\t\t\t\tvar lum1 = this.luminosity();\n\t\t\t\t\tvar lum2 = color2.luminosity();\n\t\t\t\t\tif (lum1 > lum2) {\n\t\t\t\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t\t\t\t}\n\t\t\t\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t\t\t\t},\n\n\t\t\t\tlevel: function level(color2) {\n\t\t\t\t\tvar contrastRatio = this.contrast(color2);\n\t\t\t\t\tif (contrastRatio >= 7.1) {\n\t\t\t\t\t\treturn 'AAA';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn contrastRatio >= 4.5 ? 'AA' : '';\n\t\t\t\t},\n\n\t\t\t\tdark: function dark() {\n\t\t\t\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\t\t\t\tvar rgb = this.values.rgb;\n\t\t\t\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\t\t\t\treturn yiq < 128;\n\t\t\t\t},\n\n\t\t\t\tlight: function light() {\n\t\t\t\t\treturn !this.dark();\n\t\t\t\t},\n\n\t\t\t\tnegate: function negate() {\n\t\t\t\t\tvar rgb = [];\n\t\t\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t\t\t\t}\n\t\t\t\t\tthis.setValues('rgb', rgb);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\tlighten: function lighten(ratio) {\n\t\t\t\t\tvar hsl = this.values.hsl;\n\t\t\t\t\thsl[2] += hsl[2] * ratio;\n\t\t\t\t\tthis.setValues('hsl', hsl);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\tdarken: function darken(ratio) {\n\t\t\t\t\tvar hsl = this.values.hsl;\n\t\t\t\t\thsl[2] -= hsl[2] * ratio;\n\t\t\t\t\tthis.setValues('hsl', hsl);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\tsaturate: function saturate(ratio) {\n\t\t\t\t\tvar hsl = this.values.hsl;\n\t\t\t\t\thsl[1] += hsl[1] * ratio;\n\t\t\t\t\tthis.setValues('hsl', hsl);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\tdesaturate: function desaturate(ratio) {\n\t\t\t\t\tvar hsl = this.values.hsl;\n\t\t\t\t\thsl[1] -= hsl[1] * ratio;\n\t\t\t\t\tthis.setValues('hsl', hsl);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\twhiten: function whiten(ratio) {\n\t\t\t\t\tvar hwb = this.values.hwb;\n\t\t\t\t\thwb[1] += hwb[1] * ratio;\n\t\t\t\t\tthis.setValues('hwb', hwb);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\tblacken: function blacken(ratio) {\n\t\t\t\t\tvar hwb = this.values.hwb;\n\t\t\t\t\thwb[2] += hwb[2] * ratio;\n\t\t\t\t\tthis.setValues('hwb', hwb);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\tgreyscale: function greyscale() {\n\t\t\t\t\tvar rgb = this.values.rgb;\n\t\t\t\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\t\t\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\t\t\t\tthis.setValues('rgb', [val, val, val]);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\tclearer: function clearer(ratio) {\n\t\t\t\t\tvar alpha = this.values.alpha;\n\t\t\t\t\tthis.setValues('alpha', alpha - alpha * ratio);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\topaquer: function opaquer(ratio) {\n\t\t\t\t\tvar alpha = this.values.alpha;\n\t\t\t\t\tthis.setValues('alpha', alpha + alpha * ratio);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\trotate: function rotate(degrees) {\n\t\t\t\t\tvar hsl = this.values.hsl;\n\t\t\t\t\tvar hue = (hsl[0] + degrees) % 360;\n\t\t\t\t\thsl[0] = hue < 0 ? 360 + hue : hue;\n\t\t\t\t\tthis.setValues('hsl', hsl);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Ported from sass implementation in C\r\n * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\r\n */\n\t\t\t\tmix: function mix(mixinColor, weight) {\n\t\t\t\t\tvar color1 = this;\n\t\t\t\t\tvar color2 = mixinColor;\n\t\t\t\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\t\t\t\tvar w = 2 * p - 1;\n\t\t\t\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\t\t\t\tvar w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\t\t\t\tvar w2 = 1 - w1;\n\n\t\t\t\t\treturn this.rgb(w1 * color1.red() + w2 * color2.red(), w1 * color1.green() + w2 * color2.green(), w1 * color1.blue() + w2 * color2.blue()).alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t\t\t\t},\n\n\t\t\t\ttoJSON: function toJSON() {\n\t\t\t\t\treturn this.rgb();\n\t\t\t\t},\n\n\t\t\t\tclone: function clone() {\n\t\t\t\t\t// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n\t\t\t\t\t// making the final build way to big to embed in Chart.js. So let's do it manually,\n\t\t\t\t\t// assuming that values to clone are 1 dimension arrays containing only numbers,\n\t\t\t\t\t// except 'alpha' which is a number.\n\t\t\t\t\tvar result = new Color();\n\t\t\t\t\tvar source = this.values;\n\t\t\t\t\tvar target = result.values;\n\t\t\t\t\tvar value, type;\n\n\t\t\t\t\tfor (var prop in source) {\n\t\t\t\t\t\tif (source.hasOwnProperty(prop)) {\n\t\t\t\t\t\t\tvalue = source[prop];\n\t\t\t\t\t\t\ttype = {}.toString.call(value);\n\t\t\t\t\t\t\tif (type === '[object Array]') {\n\t\t\t\t\t\t\t\ttarget[prop] = value.slice(0);\n\t\t\t\t\t\t\t} else if (type === '[object Number]') {\n\t\t\t\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconsole.error('unexpected color value:', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tColor.prototype.spaces = {\n\t\t\t\trgb: ['red', 'green', 'blue'],\n\t\t\t\thsl: ['hue', 'saturation', 'lightness'],\n\t\t\t\thsv: ['hue', 'saturation', 'value'],\n\t\t\t\thwb: ['hue', 'whiteness', 'blackness'],\n\t\t\t\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n\t\t\t};\n\n\t\t\tColor.prototype.maxes = {\n\t\t\t\trgb: [255, 255, 255],\n\t\t\t\thsl: [360, 100, 100],\n\t\t\t\thsv: [360, 100, 100],\n\t\t\t\thwb: [360, 100, 100],\n\t\t\t\tcmyk: [100, 100, 100, 100]\n\t\t\t};\n\n\t\t\tColor.prototype.getValues = function (space) {\n\t\t\t\tvar values = this.values;\n\t\t\t\tvar vals = {};\n\n\t\t\t\tfor (var i = 0; i < space.length; i++) {\n\t\t\t\t\tvals[space.charAt(i)] = values[space][i];\n\t\t\t\t}\n\n\t\t\t\tif (values.alpha !== 1) {\n\t\t\t\t\tvals.a = values.alpha;\n\t\t\t\t}\n\n\t\t\t\t// {r: 255, g: 255, b: 255, a: 0.4}\n\t\t\t\treturn vals;\n\t\t\t};\n\n\t\t\tColor.prototype.setValues = function (space, vals) {\n\t\t\t\tvar values = this.values;\n\t\t\t\tvar spaces = this.spaces;\n\t\t\t\tvar maxes = this.maxes;\n\t\t\t\tvar alpha = 1;\n\t\t\t\tvar i;\n\n\t\t\t\tthis.valid = true;\n\n\t\t\t\tif (space === 'alpha') {\n\t\t\t\t\talpha = vals;\n\t\t\t\t} else if (vals.length) {\n\t\t\t\t\t// [10, 10, 10]\n\t\t\t\t\tvalues[space] = vals.slice(0, space.length);\n\t\t\t\t\talpha = vals[space.length];\n\t\t\t\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t\t\t\t// {r: 10, g: 10, b: 10}\n\t\t\t\t\tfor (i = 0; i < space.length; i++) {\n\t\t\t\t\t\tvalues[space][i] = vals[space.charAt(i)];\n\t\t\t\t\t}\n\n\t\t\t\t\talpha = vals.a;\n\t\t\t\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t\t\t\t// {red: 10, green: 10, blue: 10}\n\t\t\t\t\tvar chans = spaces[space];\n\n\t\t\t\t\tfor (i = 0; i < space.length; i++) {\n\t\t\t\t\t\tvalues[space][i] = vals[chans[i]];\n\t\t\t\t\t}\n\n\t\t\t\t\talpha = vals.alpha;\n\t\t\t\t}\n\n\t\t\t\tvalues.alpha = Math.max(0, Math.min(1, alpha === undefined ? values.alpha : alpha));\n\n\t\t\t\tif (space === 'alpha') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar capped;\n\n\t\t\t\t// cap values of the space prior converting all values\n\t\t\t\tfor (i = 0; i < space.length; i++) {\n\t\t\t\t\tcapped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n\t\t\t\t\tvalues[space][i] = Math.round(capped);\n\t\t\t\t}\n\n\t\t\t\t// convert to all the other color spaces\n\t\t\t\tfor (var sname in spaces) {\n\t\t\t\t\tif (sname !== space) {\n\t\t\t\t\t\tvalues[sname] = convert[space][sname](values[space]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\tColor.prototype.setSpace = function (space, args) {\n\t\t\t\tvar vals = args[0];\n\n\t\t\t\tif (vals === undefined) {\n\t\t\t\t\t// color.rgb()\n\t\t\t\t\treturn this.getValues(space);\n\t\t\t\t}\n\n\t\t\t\t// color.rgb(10, 10, 10)\n\t\t\t\tif (typeof vals === 'number') {\n\t\t\t\t\tvals = Array.prototype.slice.call(args);\n\t\t\t\t}\n\n\t\t\t\tthis.setValues(space, vals);\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\tColor.prototype.setChannel = function (space, index, val) {\n\t\t\t\tvar svalues = this.values[space];\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\t// color.red()\n\t\t\t\t\treturn svalues[index];\n\t\t\t\t} else if (val === svalues[index]) {\n\t\t\t\t\t// color.red(color.red())\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t\t// color.red(100)\n\t\t\t\tsvalues[index] = val;\n\t\t\t\tthis.setValues(space, svalues);\n\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\twindow.Color = Color;\n\t\t\t}\n\n\t\t\tmodule.exports = Color;\n\t\t}, { \"2\": 2, \"5\": 5 }], 4: [function (require, module, exports) {\n\t\t\t/* MIT license */\n\n\t\t\tmodule.exports = {\n\t\t\t\trgb2hsl: rgb2hsl,\n\t\t\t\trgb2hsv: rgb2hsv,\n\t\t\t\trgb2hwb: rgb2hwb,\n\t\t\t\trgb2cmyk: rgb2cmyk,\n\t\t\t\trgb2keyword: rgb2keyword,\n\t\t\t\trgb2xyz: rgb2xyz,\n\t\t\t\trgb2lab: rgb2lab,\n\t\t\t\trgb2lch: rgb2lch,\n\n\t\t\t\thsl2rgb: hsl2rgb,\n\t\t\t\thsl2hsv: hsl2hsv,\n\t\t\t\thsl2hwb: hsl2hwb,\n\t\t\t\thsl2cmyk: hsl2cmyk,\n\t\t\t\thsl2keyword: hsl2keyword,\n\n\t\t\t\thsv2rgb: hsv2rgb,\n\t\t\t\thsv2hsl: hsv2hsl,\n\t\t\t\thsv2hwb: hsv2hwb,\n\t\t\t\thsv2cmyk: hsv2cmyk,\n\t\t\t\thsv2keyword: hsv2keyword,\n\n\t\t\t\thwb2rgb: hwb2rgb,\n\t\t\t\thwb2hsl: hwb2hsl,\n\t\t\t\thwb2hsv: hwb2hsv,\n\t\t\t\thwb2cmyk: hwb2cmyk,\n\t\t\t\thwb2keyword: hwb2keyword,\n\n\t\t\t\tcmyk2rgb: cmyk2rgb,\n\t\t\t\tcmyk2hsl: cmyk2hsl,\n\t\t\t\tcmyk2hsv: cmyk2hsv,\n\t\t\t\tcmyk2hwb: cmyk2hwb,\n\t\t\t\tcmyk2keyword: cmyk2keyword,\n\n\t\t\t\tkeyword2rgb: keyword2rgb,\n\t\t\t\tkeyword2hsl: keyword2hsl,\n\t\t\t\tkeyword2hsv: keyword2hsv,\n\t\t\t\tkeyword2hwb: keyword2hwb,\n\t\t\t\tkeyword2cmyk: keyword2cmyk,\n\t\t\t\tkeyword2lab: keyword2lab,\n\t\t\t\tkeyword2xyz: keyword2xyz,\n\n\t\t\t\txyz2rgb: xyz2rgb,\n\t\t\t\txyz2lab: xyz2lab,\n\t\t\t\txyz2lch: xyz2lch,\n\n\t\t\t\tlab2xyz: lab2xyz,\n\t\t\t\tlab2rgb: lab2rgb,\n\t\t\t\tlab2lch: lab2lch,\n\n\t\t\t\tlch2lab: lch2lab,\n\t\t\t\tlch2xyz: lch2xyz,\n\t\t\t\tlch2rgb: lch2rgb\n\t\t\t};\n\n\t\t\tfunction rgb2hsl(rgb) {\n\t\t\t\tvar r = rgb[0] / 255,\n\t\t\t\t g = rgb[1] / 255,\n\t\t\t\t b = rgb[2] / 255,\n\t\t\t\t min = Math.min(r, g, b),\n\t\t\t\t max = Math.max(r, g, b),\n\t\t\t\t delta = max - min,\n\t\t\t\t h,\n\t\t\t\t s,\n\t\t\t\t l;\n\n\t\t\t\tif (max == min) h = 0;else if (r == max) h = (g - b) / delta;else if (g == max) h = 2 + (b - r) / delta;else if (b == max) h = 4 + (r - g) / delta;\n\n\t\t\t\th = Math.min(h * 60, 360);\n\n\t\t\t\tif (h < 0) h += 360;\n\n\t\t\t\tl = (min + max) / 2;\n\n\t\t\t\tif (max == min) s = 0;else if (l <= 0.5) s = delta / (max + min);else s = delta / (2 - max - min);\n\n\t\t\t\treturn [h, s * 100, l * 100];\n\t\t\t}\n\n\t\t\tfunction rgb2hsv(rgb) {\n\t\t\t\tvar r = rgb[0],\n\t\t\t\t g = rgb[1],\n\t\t\t\t b = rgb[2],\n\t\t\t\t min = Math.min(r, g, b),\n\t\t\t\t max = Math.max(r, g, b),\n\t\t\t\t delta = max - min,\n\t\t\t\t h,\n\t\t\t\t s,\n\t\t\t\t v;\n\n\t\t\t\tif (max == 0) s = 0;else s = delta / max * 1000 / 10;\n\n\t\t\t\tif (max == min) h = 0;else if (r == max) h = (g - b) / delta;else if (g == max) h = 2 + (b - r) / delta;else if (b == max) h = 4 + (r - g) / delta;\n\n\t\t\t\th = Math.min(h * 60, 360);\n\n\t\t\t\tif (h < 0) h += 360;\n\n\t\t\t\tv = max / 255 * 1000 / 10;\n\n\t\t\t\treturn [h, s, v];\n\t\t\t}\n\n\t\t\tfunction rgb2hwb(rgb) {\n\t\t\t\tvar r = rgb[0],\n\t\t\t\t g = rgb[1],\n\t\t\t\t b = rgb[2],\n\t\t\t\t h = rgb2hsl(rgb)[0],\n\t\t\t\t w = 1 / 255 * Math.min(r, Math.min(g, b)),\n\t\t\t\t b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\t\t\t\treturn [h, w * 100, b * 100];\n\t\t\t}\n\n\t\t\tfunction rgb2cmyk(rgb) {\n\t\t\t\tvar r = rgb[0] / 255,\n\t\t\t\t g = rgb[1] / 255,\n\t\t\t\t b = rgb[2] / 255,\n\t\t\t\t c,\n\t\t\t\t m,\n\t\t\t\t y,\n\t\t\t\t k;\n\n\t\t\t\tk = Math.min(1 - r, 1 - g, 1 - b);\n\t\t\t\tc = (1 - r - k) / (1 - k) || 0;\n\t\t\t\tm = (1 - g - k) / (1 - k) || 0;\n\t\t\t\ty = (1 - b - k) / (1 - k) || 0;\n\t\t\t\treturn [c * 100, m * 100, y * 100, k * 100];\n\t\t\t}\n\n\t\t\tfunction rgb2keyword(rgb) {\n\t\t\t\treturn reverseKeywords[JSON.stringify(rgb)];\n\t\t\t}\n\n\t\t\tfunction rgb2xyz(rgb) {\n\t\t\t\tvar r = rgb[0] / 255,\n\t\t\t\t g = rgb[1] / 255,\n\t\t\t\t b = rgb[2] / 255;\n\n\t\t\t\t// assume sRGB\n\t\t\t\tr = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n\t\t\t\tg = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n\t\t\t\tb = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n\n\t\t\t\tvar x = r * 0.4124 + g * 0.3576 + b * 0.1805;\n\t\t\t\tvar y = r * 0.2126 + g * 0.7152 + b * 0.0722;\n\t\t\t\tvar z = r * 0.0193 + g * 0.1192 + b * 0.9505;\n\n\t\t\t\treturn [x * 100, y * 100, z * 100];\n\t\t\t}\n\n\t\t\tfunction rgb2lab(rgb) {\n\t\t\t\tvar xyz = rgb2xyz(rgb),\n\t\t\t\t x = xyz[0],\n\t\t\t\t y = xyz[1],\n\t\t\t\t z = xyz[2],\n\t\t\t\t l,\n\t\t\t\t a,\n\t\t\t\t b;\n\n\t\t\t\tx /= 95.047;\n\t\t\t\ty /= 100;\n\t\t\t\tz /= 108.883;\n\n\t\t\t\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;\n\t\t\t\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;\n\t\t\t\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;\n\n\t\t\t\tl = 116 * y - 16;\n\t\t\t\ta = 500 * (x - y);\n\t\t\t\tb = 200 * (y - z);\n\n\t\t\t\treturn [l, a, b];\n\t\t\t}\n\n\t\t\tfunction rgb2lch(args) {\n\t\t\t\treturn lab2lch(rgb2lab(args));\n\t\t\t}\n\n\t\t\tfunction hsl2rgb(hsl) {\n\t\t\t\tvar h = hsl[0] / 360,\n\t\t\t\t s = hsl[1] / 100,\n\t\t\t\t l = hsl[2] / 100,\n\t\t\t\t t1,\n\t\t\t\t t2,\n\t\t\t\t t3,\n\t\t\t\t rgb,\n\t\t\t\t val;\n\n\t\t\t\tif (s == 0) {\n\t\t\t\t\tval = l * 255;\n\t\t\t\t\treturn [val, val, val];\n\t\t\t\t}\n\n\t\t\t\tif (l < 0.5) t2 = l * (1 + s);else t2 = l + s - l * s;\n\t\t\t\tt1 = 2 * l - t2;\n\n\t\t\t\trgb = [0, 0, 0];\n\t\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\t\t\t\tt3 < 0 && t3++;\n\t\t\t\t\tt3 > 1 && t3--;\n\n\t\t\t\t\tif (6 * t3 < 1) val = t1 + (t2 - t1) * 6 * t3;else if (2 * t3 < 1) val = t2;else if (3 * t3 < 2) val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;else val = t1;\n\n\t\t\t\t\trgb[i] = val * 255;\n\t\t\t\t}\n\n\t\t\t\treturn rgb;\n\t\t\t}\n\n\t\t\tfunction hsl2hsv(hsl) {\n\t\t\t\tvar h = hsl[0],\n\t\t\t\t s = hsl[1] / 100,\n\t\t\t\t l = hsl[2] / 100,\n\t\t\t\t sv,\n\t\t\t\t v;\n\n\t\t\t\tif (l === 0) {\n\t\t\t\t\t// no need to do calc on black\n\t\t\t\t\t// also avoids divide by 0 error\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tl *= 2;\n\t\t\t\ts *= l <= 1 ? l : 2 - l;\n\t\t\t\tv = (l + s) / 2;\n\t\t\t\tsv = 2 * s / (l + s);\n\t\t\t\treturn [h, sv * 100, v * 100];\n\t\t\t}\n\n\t\t\tfunction hsl2hwb(args) {\n\t\t\t\treturn rgb2hwb(hsl2rgb(args));\n\t\t\t}\n\n\t\t\tfunction hsl2cmyk(args) {\n\t\t\t\treturn rgb2cmyk(hsl2rgb(args));\n\t\t\t}\n\n\t\t\tfunction hsl2keyword(args) {\n\t\t\t\treturn rgb2keyword(hsl2rgb(args));\n\t\t\t}\n\n\t\t\tfunction hsv2rgb(hsv) {\n\t\t\t\tvar h = hsv[0] / 60,\n\t\t\t\t s = hsv[1] / 100,\n\t\t\t\t v = hsv[2] / 100,\n\t\t\t\t hi = Math.floor(h) % 6;\n\n\t\t\t\tvar f = h - Math.floor(h),\n\t\t\t\t p = 255 * v * (1 - s),\n\t\t\t\t q = 255 * v * (1 - s * f),\n\t\t\t\t t = 255 * v * (1 - s * (1 - f)),\n\t\t\t\t v = 255 * v;\n\n\t\t\t\tswitch (hi) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\treturn [v, t, p];\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn [q, v, p];\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn [p, v, t];\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn [p, q, v];\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\treturn [t, p, v];\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\treturn [v, p, q];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction hsv2hsl(hsv) {\n\t\t\t\tvar h = hsv[0],\n\t\t\t\t s = hsv[1] / 100,\n\t\t\t\t v = hsv[2] / 100,\n\t\t\t\t sl,\n\t\t\t\t l;\n\n\t\t\t\tl = (2 - s) * v;\n\t\t\t\tsl = s * v;\n\t\t\t\tsl /= l <= 1 ? l : 2 - l;\n\t\t\t\tsl = sl || 0;\n\t\t\t\tl /= 2;\n\t\t\t\treturn [h, sl * 100, l * 100];\n\t\t\t}\n\n\t\t\tfunction hsv2hwb(args) {\n\t\t\t\treturn rgb2hwb(hsv2rgb(args));\n\t\t\t}\n\n\t\t\tfunction hsv2cmyk(args) {\n\t\t\t\treturn rgb2cmyk(hsv2rgb(args));\n\t\t\t}\n\n\t\t\tfunction hsv2keyword(args) {\n\t\t\t\treturn rgb2keyword(hsv2rgb(args));\n\t\t\t}\n\n\t\t\t// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\n\t\t\tfunction hwb2rgb(hwb) {\n\t\t\t\tvar h = hwb[0] / 360,\n\t\t\t\t wh = hwb[1] / 100,\n\t\t\t\t bl = hwb[2] / 100,\n\t\t\t\t ratio = wh + bl,\n\t\t\t\t i,\n\t\t\t\t v,\n\t\t\t\t f,\n\t\t\t\t n;\n\n\t\t\t\t// wh + bl cant be > 1\n\t\t\t\tif (ratio > 1) {\n\t\t\t\t\twh /= ratio;\n\t\t\t\t\tbl /= ratio;\n\t\t\t\t}\n\n\t\t\t\ti = Math.floor(6 * h);\n\t\t\t\tv = 1 - bl;\n\t\t\t\tf = 6 * h - i;\n\t\t\t\tif ((i & 0x01) != 0) {\n\t\t\t\t\tf = 1 - f;\n\t\t\t\t}\n\t\t\t\tn = wh + f * (v - wh); // linear interpolation\n\n\t\t\t\tswitch (i) {\n\t\t\t\t\tdefault:\n\t\t\t\t\tcase 6:\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tr = v;g = n;b = wh;break;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tr = n;g = v;b = wh;break;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tr = wh;g = v;b = n;break;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tr = wh;g = n;b = v;break;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tr = n;g = wh;b = v;break;\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\tr = v;g = wh;b = n;break;\n\t\t\t\t}\n\n\t\t\t\treturn [r * 255, g * 255, b * 255];\n\t\t\t}\n\n\t\t\tfunction hwb2hsl(args) {\n\t\t\t\treturn rgb2hsl(hwb2rgb(args));\n\t\t\t}\n\n\t\t\tfunction hwb2hsv(args) {\n\t\t\t\treturn rgb2hsv(hwb2rgb(args));\n\t\t\t}\n\n\t\t\tfunction hwb2cmyk(args) {\n\t\t\t\treturn rgb2cmyk(hwb2rgb(args));\n\t\t\t}\n\n\t\t\tfunction hwb2keyword(args) {\n\t\t\t\treturn rgb2keyword(hwb2rgb(args));\n\t\t\t}\n\n\t\t\tfunction cmyk2rgb(cmyk) {\n\t\t\t\tvar c = cmyk[0] / 100,\n\t\t\t\t m = cmyk[1] / 100,\n\t\t\t\t y = cmyk[2] / 100,\n\t\t\t\t k = cmyk[3] / 100,\n\t\t\t\t r,\n\t\t\t\t g,\n\t\t\t\t b;\n\n\t\t\t\tr = 1 - Math.min(1, c * (1 - k) + k);\n\t\t\t\tg = 1 - Math.min(1, m * (1 - k) + k);\n\t\t\t\tb = 1 - Math.min(1, y * (1 - k) + k);\n\t\t\t\treturn [r * 255, g * 255, b * 255];\n\t\t\t}\n\n\t\t\tfunction cmyk2hsl(args) {\n\t\t\t\treturn rgb2hsl(cmyk2rgb(args));\n\t\t\t}\n\n\t\t\tfunction cmyk2hsv(args) {\n\t\t\t\treturn rgb2hsv(cmyk2rgb(args));\n\t\t\t}\n\n\t\t\tfunction cmyk2hwb(args) {\n\t\t\t\treturn rgb2hwb(cmyk2rgb(args));\n\t\t\t}\n\n\t\t\tfunction cmyk2keyword(args) {\n\t\t\t\treturn rgb2keyword(cmyk2rgb(args));\n\t\t\t}\n\n\t\t\tfunction xyz2rgb(xyz) {\n\t\t\t\tvar x = xyz[0] / 100,\n\t\t\t\t y = xyz[1] / 100,\n\t\t\t\t z = xyz[2] / 100,\n\t\t\t\t r,\n\t\t\t\t g,\n\t\t\t\t b;\n\n\t\t\t\tr = x * 3.2406 + y * -1.5372 + z * -0.4986;\n\t\t\t\tg = x * -0.9689 + y * 1.8758 + z * 0.0415;\n\t\t\t\tb = x * 0.0557 + y * -0.2040 + z * 1.0570;\n\n\t\t\t\t// assume sRGB\n\t\t\t\tr = r > 0.0031308 ? 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055 : r = r * 12.92;\n\n\t\t\t\tg = g > 0.0031308 ? 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055 : g = g * 12.92;\n\n\t\t\t\tb = b > 0.0031308 ? 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055 : b = b * 12.92;\n\n\t\t\t\tr = Math.min(Math.max(0, r), 1);\n\t\t\t\tg = Math.min(Math.max(0, g), 1);\n\t\t\t\tb = Math.min(Math.max(0, b), 1);\n\n\t\t\t\treturn [r * 255, g * 255, b * 255];\n\t\t\t}\n\n\t\t\tfunction xyz2lab(xyz) {\n\t\t\t\tvar x = xyz[0],\n\t\t\t\t y = xyz[1],\n\t\t\t\t z = xyz[2],\n\t\t\t\t l,\n\t\t\t\t a,\n\t\t\t\t b;\n\n\t\t\t\tx /= 95.047;\n\t\t\t\ty /= 100;\n\t\t\t\tz /= 108.883;\n\n\t\t\t\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;\n\t\t\t\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;\n\t\t\t\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;\n\n\t\t\t\tl = 116 * y - 16;\n\t\t\t\ta = 500 * (x - y);\n\t\t\t\tb = 200 * (y - z);\n\n\t\t\t\treturn [l, a, b];\n\t\t\t}\n\n\t\t\tfunction xyz2lch(args) {\n\t\t\t\treturn lab2lch(xyz2lab(args));\n\t\t\t}\n\n\t\t\tfunction lab2xyz(lab) {\n\t\t\t\tvar l = lab[0],\n\t\t\t\t a = lab[1],\n\t\t\t\t b = lab[2],\n\t\t\t\t x,\n\t\t\t\t y,\n\t\t\t\t z,\n\t\t\t\t y2;\n\n\t\t\t\tif (l <= 8) {\n\t\t\t\t\ty = l * 100 / 903.3;\n\t\t\t\t\ty2 = 7.787 * (y / 100) + 16 / 116;\n\t\t\t\t} else {\n\t\t\t\t\ty = 100 * Math.pow((l + 16) / 116, 3);\n\t\t\t\t\ty2 = Math.pow(y / 100, 1 / 3);\n\t\t\t\t}\n\n\t\t\t\tx = x / 95.047 <= 0.008856 ? x = 95.047 * (a / 500 + y2 - 16 / 116) / 7.787 : 95.047 * Math.pow(a / 500 + y2, 3);\n\n\t\t\t\tz = z / 108.883 <= 0.008859 ? z = 108.883 * (y2 - b / 200 - 16 / 116) / 7.787 : 108.883 * Math.pow(y2 - b / 200, 3);\n\n\t\t\t\treturn [x, y, z];\n\t\t\t}\n\n\t\t\tfunction lab2lch(lab) {\n\t\t\t\tvar l = lab[0],\n\t\t\t\t a = lab[1],\n\t\t\t\t b = lab[2],\n\t\t\t\t hr,\n\t\t\t\t h,\n\t\t\t\t c;\n\n\t\t\t\thr = Math.atan2(b, a);\n\t\t\t\th = hr * 360 / 2 / Math.PI;\n\t\t\t\tif (h < 0) {\n\t\t\t\t\th += 360;\n\t\t\t\t}\n\t\t\t\tc = Math.sqrt(a * a + b * b);\n\t\t\t\treturn [l, c, h];\n\t\t\t}\n\n\t\t\tfunction lab2rgb(args) {\n\t\t\t\treturn xyz2rgb(lab2xyz(args));\n\t\t\t}\n\n\t\t\tfunction lch2lab(lch) {\n\t\t\t\tvar l = lch[0],\n\t\t\t\t c = lch[1],\n\t\t\t\t h = lch[2],\n\t\t\t\t a,\n\t\t\t\t b,\n\t\t\t\t hr;\n\n\t\t\t\thr = h / 360 * 2 * Math.PI;\n\t\t\t\ta = c * Math.cos(hr);\n\t\t\t\tb = c * Math.sin(hr);\n\t\t\t\treturn [l, a, b];\n\t\t\t}\n\n\t\t\tfunction lch2xyz(args) {\n\t\t\t\treturn lab2xyz(lch2lab(args));\n\t\t\t}\n\n\t\t\tfunction lch2rgb(args) {\n\t\t\t\treturn lab2rgb(lch2lab(args));\n\t\t\t}\n\n\t\t\tfunction keyword2rgb(keyword) {\n\t\t\t\treturn cssKeywords[keyword];\n\t\t\t}\n\n\t\t\tfunction keyword2hsl(args) {\n\t\t\t\treturn rgb2hsl(keyword2rgb(args));\n\t\t\t}\n\n\t\t\tfunction keyword2hsv(args) {\n\t\t\t\treturn rgb2hsv(keyword2rgb(args));\n\t\t\t}\n\n\t\t\tfunction keyword2hwb(args) {\n\t\t\t\treturn rgb2hwb(keyword2rgb(args));\n\t\t\t}\n\n\t\t\tfunction keyword2cmyk(args) {\n\t\t\t\treturn rgb2cmyk(keyword2rgb(args));\n\t\t\t}\n\n\t\t\tfunction keyword2lab(args) {\n\t\t\t\treturn rgb2lab(keyword2rgb(args));\n\t\t\t}\n\n\t\t\tfunction keyword2xyz(args) {\n\t\t\t\treturn rgb2xyz(keyword2rgb(args));\n\t\t\t}\n\n\t\t\tvar cssKeywords = {\n\t\t\t\taliceblue: [240, 248, 255],\n\t\t\t\tantiquewhite: [250, 235, 215],\n\t\t\t\taqua: [0, 255, 255],\n\t\t\t\taquamarine: [127, 255, 212],\n\t\t\t\tazure: [240, 255, 255],\n\t\t\t\tbeige: [245, 245, 220],\n\t\t\t\tbisque: [255, 228, 196],\n\t\t\t\tblack: [0, 0, 0],\n\t\t\t\tblanchedalmond: [255, 235, 205],\n\t\t\t\tblue: [0, 0, 255],\n\t\t\t\tblueviolet: [138, 43, 226],\n\t\t\t\tbrown: [165, 42, 42],\n\t\t\t\tburlywood: [222, 184, 135],\n\t\t\t\tcadetblue: [95, 158, 160],\n\t\t\t\tchartreuse: [127, 255, 0],\n\t\t\t\tchocolate: [210, 105, 30],\n\t\t\t\tcoral: [255, 127, 80],\n\t\t\t\tcornflowerblue: [100, 149, 237],\n\t\t\t\tcornsilk: [255, 248, 220],\n\t\t\t\tcrimson: [220, 20, 60],\n\t\t\t\tcyan: [0, 255, 255],\n\t\t\t\tdarkblue: [0, 0, 139],\n\t\t\t\tdarkcyan: [0, 139, 139],\n\t\t\t\tdarkgoldenrod: [184, 134, 11],\n\t\t\t\tdarkgray: [169, 169, 169],\n\t\t\t\tdarkgreen: [0, 100, 0],\n\t\t\t\tdarkgrey: [169, 169, 169],\n\t\t\t\tdarkkhaki: [189, 183, 107],\n\t\t\t\tdarkmagenta: [139, 0, 139],\n\t\t\t\tdarkolivegreen: [85, 107, 47],\n\t\t\t\tdarkorange: [255, 140, 0],\n\t\t\t\tdarkorchid: [153, 50, 204],\n\t\t\t\tdarkred: [139, 0, 0],\n\t\t\t\tdarksalmon: [233, 150, 122],\n\t\t\t\tdarkseagreen: [143, 188, 143],\n\t\t\t\tdarkslateblue: [72, 61, 139],\n\t\t\t\tdarkslategray: [47, 79, 79],\n\t\t\t\tdarkslategrey: [47, 79, 79],\n\t\t\t\tdarkturquoise: [0, 206, 209],\n\t\t\t\tdarkviolet: [148, 0, 211],\n\t\t\t\tdeeppink: [255, 20, 147],\n\t\t\t\tdeepskyblue: [0, 191, 255],\n\t\t\t\tdimgray: [105, 105, 105],\n\t\t\t\tdimgrey: [105, 105, 105],\n\t\t\t\tdodgerblue: [30, 144, 255],\n\t\t\t\tfirebrick: [178, 34, 34],\n\t\t\t\tfloralwhite: [255, 250, 240],\n\t\t\t\tforestgreen: [34, 139, 34],\n\t\t\t\tfuchsia: [255, 0, 255],\n\t\t\t\tgainsboro: [220, 220, 220],\n\t\t\t\tghostwhite: [248, 248, 255],\n\t\t\t\tgold: [255, 215, 0],\n\t\t\t\tgoldenrod: [218, 165, 32],\n\t\t\t\tgray: [128, 128, 128],\n\t\t\t\tgreen: [0, 128, 0],\n\t\t\t\tgreenyellow: [173, 255, 47],\n\t\t\t\tgrey: [128, 128, 128],\n\t\t\t\thoneydew: [240, 255, 240],\n\t\t\t\thotpink: [255, 105, 180],\n\t\t\t\tindianred: [205, 92, 92],\n\t\t\t\tindigo: [75, 0, 130],\n\t\t\t\tivory: [255, 255, 240],\n\t\t\t\tkhaki: [240, 230, 140],\n\t\t\t\tlavender: [230, 230, 250],\n\t\t\t\tlavenderblush: [255, 240, 245],\n\t\t\t\tlawngreen: [124, 252, 0],\n\t\t\t\tlemonchiffon: [255, 250, 205],\n\t\t\t\tlightblue: [173, 216, 230],\n\t\t\t\tlightcoral: [240, 128, 128],\n\t\t\t\tlightcyan: [224, 255, 255],\n\t\t\t\tlightgoldenrodyellow: [250, 250, 210],\n\t\t\t\tlightgray: [211, 211, 211],\n\t\t\t\tlightgreen: [144, 238, 144],\n\t\t\t\tlightgrey: [211, 211, 211],\n\t\t\t\tlightpink: [255, 182, 193],\n\t\t\t\tlightsalmon: [255, 160, 122],\n\t\t\t\tlightseagreen: [32, 178, 170],\n\t\t\t\tlightskyblue: [135, 206, 250],\n\t\t\t\tlightslategray: [119, 136, 153],\n\t\t\t\tlightslategrey: [119, 136, 153],\n\t\t\t\tlightsteelblue: [176, 196, 222],\n\t\t\t\tlightyellow: [255, 255, 224],\n\t\t\t\tlime: [0, 255, 0],\n\t\t\t\tlimegreen: [50, 205, 50],\n\t\t\t\tlinen: [250, 240, 230],\n\t\t\t\tmagenta: [255, 0, 255],\n\t\t\t\tmaroon: [128, 0, 0],\n\t\t\t\tmediumaquamarine: [102, 205, 170],\n\t\t\t\tmediumblue: [0, 0, 205],\n\t\t\t\tmediumorchid: [186, 85, 211],\n\t\t\t\tmediumpurple: [147, 112, 219],\n\t\t\t\tmediumseagreen: [60, 179, 113],\n\t\t\t\tmediumslateblue: [123, 104, 238],\n\t\t\t\tmediumspringgreen: [0, 250, 154],\n\t\t\t\tmediumturquoise: [72, 209, 204],\n\t\t\t\tmediumvioletred: [199, 21, 133],\n\t\t\t\tmidnightblue: [25, 25, 112],\n\t\t\t\tmintcream: [245, 255, 250],\n\t\t\t\tmistyrose: [255, 228, 225],\n\t\t\t\tmoccasin: [255, 228, 181],\n\t\t\t\tnavajowhite: [255, 222, 173],\n\t\t\t\tnavy: [0, 0, 128],\n\t\t\t\toldlace: [253, 245, 230],\n\t\t\t\tolive: [128, 128, 0],\n\t\t\t\tolivedrab: [107, 142, 35],\n\t\t\t\torange: [255, 165, 0],\n\t\t\t\torangered: [255, 69, 0],\n\t\t\t\torchid: [218, 112, 214],\n\t\t\t\tpalegoldenrod: [238, 232, 170],\n\t\t\t\tpalegreen: [152, 251, 152],\n\t\t\t\tpaleturquoise: [175, 238, 238],\n\t\t\t\tpalevioletred: [219, 112, 147],\n\t\t\t\tpapayawhip: [255, 239, 213],\n\t\t\t\tpeachpuff: [255, 218, 185],\n\t\t\t\tperu: [205, 133, 63],\n\t\t\t\tpink: [255, 192, 203],\n\t\t\t\tplum: [221, 160, 221],\n\t\t\t\tpowderblue: [176, 224, 230],\n\t\t\t\tpurple: [128, 0, 128],\n\t\t\t\trebeccapurple: [102, 51, 153],\n\t\t\t\tred: [255, 0, 0],\n\t\t\t\trosybrown: [188, 143, 143],\n\t\t\t\troyalblue: [65, 105, 225],\n\t\t\t\tsaddlebrown: [139, 69, 19],\n\t\t\t\tsalmon: [250, 128, 114],\n\t\t\t\tsandybrown: [244, 164, 96],\n\t\t\t\tseagreen: [46, 139, 87],\n\t\t\t\tseashell: [255, 245, 238],\n\t\t\t\tsienna: [160, 82, 45],\n\t\t\t\tsilver: [192, 192, 192],\n\t\t\t\tskyblue: [135, 206, 235],\n\t\t\t\tslateblue: [106, 90, 205],\n\t\t\t\tslategray: [112, 128, 144],\n\t\t\t\tslategrey: [112, 128, 144],\n\t\t\t\tsnow: [255, 250, 250],\n\t\t\t\tspringgreen: [0, 255, 127],\n\t\t\t\tsteelblue: [70, 130, 180],\n\t\t\t\ttan: [210, 180, 140],\n\t\t\t\tteal: [0, 128, 128],\n\t\t\t\tthistle: [216, 191, 216],\n\t\t\t\ttomato: [255, 99, 71],\n\t\t\t\tturquoise: [64, 224, 208],\n\t\t\t\tviolet: [238, 130, 238],\n\t\t\t\twheat: [245, 222, 179],\n\t\t\t\twhite: [255, 255, 255],\n\t\t\t\twhitesmoke: [245, 245, 245],\n\t\t\t\tyellow: [255, 255, 0],\n\t\t\t\tyellowgreen: [154, 205, 50]\n\t\t\t};\n\n\t\t\tvar reverseKeywords = {};\n\t\t\tfor (var key in cssKeywords) {\n\t\t\t\treverseKeywords[JSON.stringify(cssKeywords[key])] = key;\n\t\t\t}\n\t\t}, {}], 5: [function (require, module, exports) {\n\t\t\tvar conversions = require(4);\n\n\t\t\tvar convert = function convert() {\n\t\t\t\treturn new Converter();\n\t\t\t};\n\n\t\t\tfor (var func in conversions) {\n\t\t\t\t// export Raw versions\n\t\t\t\tconvert[func + \"Raw\"] = function (func) {\n\t\t\t\t\t// accept array or plain args\n\t\t\t\t\treturn function (arg) {\n\t\t\t\t\t\tif (typeof arg == \"number\") arg = Array.prototype.slice.call(arguments);\n\t\t\t\t\t\treturn conversions[func](arg);\n\t\t\t\t\t};\n\t\t\t\t}(func);\n\n\t\t\t\tvar pair = /(\\w+)2(\\w+)/.exec(func),\n\t\t\t\t from = pair[1],\n\t\t\t\t to = pair[2];\n\n\t\t\t\t// export rgb2hsl and [\"rgb\"][\"hsl\"]\n\t\t\t\tconvert[from] = convert[from] || {};\n\n\t\t\t\tconvert[from][to] = convert[func] = function (func) {\n\t\t\t\t\treturn function (arg) {\n\t\t\t\t\t\tif (typeof arg == \"number\") arg = Array.prototype.slice.call(arguments);\n\n\t\t\t\t\t\tvar val = conversions[func](arg);\n\t\t\t\t\t\tif (typeof val == \"string\" || val === undefined) return val; // keyword\n\n\t\t\t\t\t\tfor (var i = 0; i < val.length; i++) {\n\t\t\t\t\t\t\tval[i] = Math.round(val[i]);\n\t\t\t\t\t\t}return val;\n\t\t\t\t\t};\n\t\t\t\t}(func);\n\t\t\t}\n\n\t\t\t/* Converter does lazy conversion and caching */\n\t\t\tvar Converter = function Converter() {\n\t\t\t\tthis.convs = {};\n\t\t\t};\n\n\t\t\t/* Either get the values for a space or\r\n set the values for a space, depending on args */\n\t\t\tConverter.prototype.routeSpace = function (space, args) {\n\t\t\t\tvar values = args[0];\n\t\t\t\tif (values === undefined) {\n\t\t\t\t\t// color.rgb()\n\t\t\t\t\treturn this.getValues(space);\n\t\t\t\t}\n\t\t\t\t// color.rgb(10, 10, 10)\n\t\t\t\tif (typeof values == \"number\") {\n\t\t\t\t\tvalues = Array.prototype.slice.call(args);\n\t\t\t\t}\n\n\t\t\t\treturn this.setValues(space, values);\n\t\t\t};\n\n\t\t\t/* Set the values for a space, invalidating cache */\n\t\t\tConverter.prototype.setValues = function (space, values) {\n\t\t\t\tthis.space = space;\n\t\t\t\tthis.convs = {};\n\t\t\t\tthis.convs[space] = values;\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t/* Get the values for a space. If there's already\r\n a conversion for the space, fetch it, otherwise\r\n compute it */\n\t\t\tConverter.prototype.getValues = function (space) {\n\t\t\t\tvar vals = this.convs[space];\n\t\t\t\tif (!vals) {\n\t\t\t\t\tvar fspace = this.space,\n\t\t\t\t\t from = this.convs[fspace];\n\t\t\t\t\tvals = convert[fspace][space](from);\n\n\t\t\t\t\tthis.convs[space] = vals;\n\t\t\t\t}\n\t\t\t\treturn vals;\n\t\t\t};\n\n\t\t\t[\"rgb\", \"hsl\", \"hsv\", \"cmyk\", \"keyword\"].forEach(function (space) {\n\t\t\t\tConverter.prototype[space] = function (vals) {\n\t\t\t\t\treturn this.routeSpace(space, arguments);\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tmodule.exports = convert;\n\t\t}, { \"4\": 4 }], 6: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tmodule.exports = {\n\t\t\t\t\"aliceblue\": [240, 248, 255],\n\t\t\t\t\"antiquewhite\": [250, 235, 215],\n\t\t\t\t\"aqua\": [0, 255, 255],\n\t\t\t\t\"aquamarine\": [127, 255, 212],\n\t\t\t\t\"azure\": [240, 255, 255],\n\t\t\t\t\"beige\": [245, 245, 220],\n\t\t\t\t\"bisque\": [255, 228, 196],\n\t\t\t\t\"black\": [0, 0, 0],\n\t\t\t\t\"blanchedalmond\": [255, 235, 205],\n\t\t\t\t\"blue\": [0, 0, 255],\n\t\t\t\t\"blueviolet\": [138, 43, 226],\n\t\t\t\t\"brown\": [165, 42, 42],\n\t\t\t\t\"burlywood\": [222, 184, 135],\n\t\t\t\t\"cadetblue\": [95, 158, 160],\n\t\t\t\t\"chartreuse\": [127, 255, 0],\n\t\t\t\t\"chocolate\": [210, 105, 30],\n\t\t\t\t\"coral\": [255, 127, 80],\n\t\t\t\t\"cornflowerblue\": [100, 149, 237],\n\t\t\t\t\"cornsilk\": [255, 248, 220],\n\t\t\t\t\"crimson\": [220, 20, 60],\n\t\t\t\t\"cyan\": [0, 255, 255],\n\t\t\t\t\"darkblue\": [0, 0, 139],\n\t\t\t\t\"darkcyan\": [0, 139, 139],\n\t\t\t\t\"darkgoldenrod\": [184, 134, 11],\n\t\t\t\t\"darkgray\": [169, 169, 169],\n\t\t\t\t\"darkgreen\": [0, 100, 0],\n\t\t\t\t\"darkgrey\": [169, 169, 169],\n\t\t\t\t\"darkkhaki\": [189, 183, 107],\n\t\t\t\t\"darkmagenta\": [139, 0, 139],\n\t\t\t\t\"darkolivegreen\": [85, 107, 47],\n\t\t\t\t\"darkorange\": [255, 140, 0],\n\t\t\t\t\"darkorchid\": [153, 50, 204],\n\t\t\t\t\"darkred\": [139, 0, 0],\n\t\t\t\t\"darksalmon\": [233, 150, 122],\n\t\t\t\t\"darkseagreen\": [143, 188, 143],\n\t\t\t\t\"darkslateblue\": [72, 61, 139],\n\t\t\t\t\"darkslategray\": [47, 79, 79],\n\t\t\t\t\"darkslategrey\": [47, 79, 79],\n\t\t\t\t\"darkturquoise\": [0, 206, 209],\n\t\t\t\t\"darkviolet\": [148, 0, 211],\n\t\t\t\t\"deeppink\": [255, 20, 147],\n\t\t\t\t\"deepskyblue\": [0, 191, 255],\n\t\t\t\t\"dimgray\": [105, 105, 105],\n\t\t\t\t\"dimgrey\": [105, 105, 105],\n\t\t\t\t\"dodgerblue\": [30, 144, 255],\n\t\t\t\t\"firebrick\": [178, 34, 34],\n\t\t\t\t\"floralwhite\": [255, 250, 240],\n\t\t\t\t\"forestgreen\": [34, 139, 34],\n\t\t\t\t\"fuchsia\": [255, 0, 255],\n\t\t\t\t\"gainsboro\": [220, 220, 220],\n\t\t\t\t\"ghostwhite\": [248, 248, 255],\n\t\t\t\t\"gold\": [255, 215, 0],\n\t\t\t\t\"goldenrod\": [218, 165, 32],\n\t\t\t\t\"gray\": [128, 128, 128],\n\t\t\t\t\"green\": [0, 128, 0],\n\t\t\t\t\"greenyellow\": [173, 255, 47],\n\t\t\t\t\"grey\": [128, 128, 128],\n\t\t\t\t\"honeydew\": [240, 255, 240],\n\t\t\t\t\"hotpink\": [255, 105, 180],\n\t\t\t\t\"indianred\": [205, 92, 92],\n\t\t\t\t\"indigo\": [75, 0, 130],\n\t\t\t\t\"ivory\": [255, 255, 240],\n\t\t\t\t\"khaki\": [240, 230, 140],\n\t\t\t\t\"lavender\": [230, 230, 250],\n\t\t\t\t\"lavenderblush\": [255, 240, 245],\n\t\t\t\t\"lawngreen\": [124, 252, 0],\n\t\t\t\t\"lemonchiffon\": [255, 250, 205],\n\t\t\t\t\"lightblue\": [173, 216, 230],\n\t\t\t\t\"lightcoral\": [240, 128, 128],\n\t\t\t\t\"lightcyan\": [224, 255, 255],\n\t\t\t\t\"lightgoldenrodyellow\": [250, 250, 210],\n\t\t\t\t\"lightgray\": [211, 211, 211],\n\t\t\t\t\"lightgreen\": [144, 238, 144],\n\t\t\t\t\"lightgrey\": [211, 211, 211],\n\t\t\t\t\"lightpink\": [255, 182, 193],\n\t\t\t\t\"lightsalmon\": [255, 160, 122],\n\t\t\t\t\"lightseagreen\": [32, 178, 170],\n\t\t\t\t\"lightskyblue\": [135, 206, 250],\n\t\t\t\t\"lightslategray\": [119, 136, 153],\n\t\t\t\t\"lightslategrey\": [119, 136, 153],\n\t\t\t\t\"lightsteelblue\": [176, 196, 222],\n\t\t\t\t\"lightyellow\": [255, 255, 224],\n\t\t\t\t\"lime\": [0, 255, 0],\n\t\t\t\t\"limegreen\": [50, 205, 50],\n\t\t\t\t\"linen\": [250, 240, 230],\n\t\t\t\t\"magenta\": [255, 0, 255],\n\t\t\t\t\"maroon\": [128, 0, 0],\n\t\t\t\t\"mediumaquamarine\": [102, 205, 170],\n\t\t\t\t\"mediumblue\": [0, 0, 205],\n\t\t\t\t\"mediumorchid\": [186, 85, 211],\n\t\t\t\t\"mediumpurple\": [147, 112, 219],\n\t\t\t\t\"mediumseagreen\": [60, 179, 113],\n\t\t\t\t\"mediumslateblue\": [123, 104, 238],\n\t\t\t\t\"mediumspringgreen\": [0, 250, 154],\n\t\t\t\t\"mediumturquoise\": [72, 209, 204],\n\t\t\t\t\"mediumvioletred\": [199, 21, 133],\n\t\t\t\t\"midnightblue\": [25, 25, 112],\n\t\t\t\t\"mintcream\": [245, 255, 250],\n\t\t\t\t\"mistyrose\": [255, 228, 225],\n\t\t\t\t\"moccasin\": [255, 228, 181],\n\t\t\t\t\"navajowhite\": [255, 222, 173],\n\t\t\t\t\"navy\": [0, 0, 128],\n\t\t\t\t\"oldlace\": [253, 245, 230],\n\t\t\t\t\"olive\": [128, 128, 0],\n\t\t\t\t\"olivedrab\": [107, 142, 35],\n\t\t\t\t\"orange\": [255, 165, 0],\n\t\t\t\t\"orangered\": [255, 69, 0],\n\t\t\t\t\"orchid\": [218, 112, 214],\n\t\t\t\t\"palegoldenrod\": [238, 232, 170],\n\t\t\t\t\"palegreen\": [152, 251, 152],\n\t\t\t\t\"paleturquoise\": [175, 238, 238],\n\t\t\t\t\"palevioletred\": [219, 112, 147],\n\t\t\t\t\"papayawhip\": [255, 239, 213],\n\t\t\t\t\"peachpuff\": [255, 218, 185],\n\t\t\t\t\"peru\": [205, 133, 63],\n\t\t\t\t\"pink\": [255, 192, 203],\n\t\t\t\t\"plum\": [221, 160, 221],\n\t\t\t\t\"powderblue\": [176, 224, 230],\n\t\t\t\t\"purple\": [128, 0, 128],\n\t\t\t\t\"rebeccapurple\": [102, 51, 153],\n\t\t\t\t\"red\": [255, 0, 0],\n\t\t\t\t\"rosybrown\": [188, 143, 143],\n\t\t\t\t\"royalblue\": [65, 105, 225],\n\t\t\t\t\"saddlebrown\": [139, 69, 19],\n\t\t\t\t\"salmon\": [250, 128, 114],\n\t\t\t\t\"sandybrown\": [244, 164, 96],\n\t\t\t\t\"seagreen\": [46, 139, 87],\n\t\t\t\t\"seashell\": [255, 245, 238],\n\t\t\t\t\"sienna\": [160, 82, 45],\n\t\t\t\t\"silver\": [192, 192, 192],\n\t\t\t\t\"skyblue\": [135, 206, 235],\n\t\t\t\t\"slateblue\": [106, 90, 205],\n\t\t\t\t\"slategray\": [112, 128, 144],\n\t\t\t\t\"slategrey\": [112, 128, 144],\n\t\t\t\t\"snow\": [255, 250, 250],\n\t\t\t\t\"springgreen\": [0, 255, 127],\n\t\t\t\t\"steelblue\": [70, 130, 180],\n\t\t\t\t\"tan\": [210, 180, 140],\n\t\t\t\t\"teal\": [0, 128, 128],\n\t\t\t\t\"thistle\": [216, 191, 216],\n\t\t\t\t\"tomato\": [255, 99, 71],\n\t\t\t\t\"turquoise\": [64, 224, 208],\n\t\t\t\t\"violet\": [238, 130, 238],\n\t\t\t\t\"wheat\": [245, 222, 179],\n\t\t\t\t\"white\": [255, 255, 255],\n\t\t\t\t\"whitesmoke\": [245, 245, 245],\n\t\t\t\t\"yellow\": [255, 255, 0],\n\t\t\t\t\"yellowgreen\": [154, 205, 50]\n\t\t\t};\n\t\t}, {}], 7: [function (require, module, exports) {\n\t\t\t/**\r\n * @namespace Chart\r\n */\n\t\t\tvar Chart = require(30)();\n\n\t\t\tChart.helpers = require(46);\n\n\t\t\t// @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\n\t\t\trequire(28)(Chart);\n\n\t\t\tChart.Animation = require(22);\n\t\t\tChart.animationService = require(23);\n\t\t\tChart.defaults = require(26);\n\t\t\tChart.Element = require(27);\n\t\t\tChart.elements = require(41);\n\t\t\tChart.Interaction = require(29);\n\t\t\tChart.layouts = require(31);\n\t\t\tChart.platform = require(49);\n\t\t\tChart.plugins = require(32);\n\t\t\tChart.Scale = require(33);\n\t\t\tChart.scaleService = require(34);\n\t\t\tChart.Ticks = require(35);\n\t\t\tChart.Tooltip = require(36);\n\n\t\t\trequire(24)(Chart);\n\t\t\trequire(25)(Chart);\n\n\t\t\trequire(56)(Chart);\n\t\t\trequire(54)(Chart);\n\t\t\trequire(55)(Chart);\n\t\t\trequire(57)(Chart);\n\t\t\trequire(58)(Chart);\n\t\t\trequire(59)(Chart);\n\n\t\t\t// Controllers must be loaded after elements\n\t\t\t// See Chart.core.datasetController.dataElementType\n\t\t\trequire(15)(Chart);\n\t\t\trequire(16)(Chart);\n\t\t\trequire(17)(Chart);\n\t\t\trequire(18)(Chart);\n\t\t\trequire(19)(Chart);\n\t\t\trequire(20)(Chart);\n\t\t\trequire(21)(Chart);\n\n\t\t\trequire(8)(Chart);\n\t\t\trequire(9)(Chart);\n\t\t\trequire(10)(Chart);\n\t\t\trequire(11)(Chart);\n\t\t\trequire(12)(Chart);\n\t\t\trequire(13)(Chart);\n\t\t\trequire(14)(Chart);\n\n\t\t\t// Loading built-in plugins\n\t\t\tvar plugins = require(50);\n\t\t\tfor (var k in plugins) {\n\t\t\t\tif (plugins.hasOwnProperty(k)) {\n\t\t\t\t\tChart.plugins.register(plugins[k]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tChart.platform.initialize();\n\n\t\t\tmodule.exports = Chart;\n\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\twindow.Chart = Chart;\n\t\t\t}\n\n\t\t\t// DEPRECATIONS\n\n\t\t\t/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Legend\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\tChart.Legend = plugins.legend._element;\n\n\t\t\t/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Title\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\tChart.Title = plugins.title._element;\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Chart.plugins instead\r\n * @namespace Chart.pluginService\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\tChart.pluginService = Chart.plugins;\n\n\t\t\t/**\r\n * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\r\n * effect, instead simply create/register plugins via plain JavaScript objects.\r\n * @interface Chart.PluginBase\r\n * @deprecated since version 2.5.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\tChart.PluginBase = Chart.Element.extend({});\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas instead.\r\n * @namespace Chart.canvasHelpers\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\tChart.canvasHelpers = Chart.helpers.canvas;\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Chart.layouts instead.\r\n * @namespace Chart.layoutService\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\tChart.layoutService = Chart.layouts;\n\t\t}, { \"10\": 10, \"11\": 11, \"12\": 12, \"13\": 13, \"14\": 14, \"15\": 15, \"16\": 16, \"17\": 17, \"18\": 18, \"19\": 19, \"20\": 20, \"21\": 21, \"22\": 22, \"23\": 23, \"24\": 24, \"25\": 25, \"26\": 26, \"27\": 27, \"28\": 28, \"29\": 29, \"30\": 30, \"31\": 31, \"32\": 32, \"33\": 33, \"34\": 34, \"35\": 35, \"36\": 36, \"41\": 41, \"46\": 46, \"49\": 49, \"50\": 50, \"54\": 54, \"55\": 55, \"56\": 56, \"57\": 57, \"58\": 58, \"59\": 59, \"8\": 8, \"9\": 9 }], 8: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tChart.Bar = function (context, config) {\n\t\t\t\t\tconfig.type = 'bar';\n\n\t\t\t\t\treturn new Chart(context, config);\n\t\t\t\t};\n\t\t\t};\n\t\t}, {}], 9: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tChart.Bubble = function (context, config) {\n\t\t\t\t\tconfig.type = 'bubble';\n\t\t\t\t\treturn new Chart(context, config);\n\t\t\t\t};\n\t\t\t};\n\t\t}, {}], 10: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tChart.Doughnut = function (context, config) {\n\t\t\t\t\tconfig.type = 'doughnut';\n\n\t\t\t\t\treturn new Chart(context, config);\n\t\t\t\t};\n\t\t\t};\n\t\t}, {}], 11: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tChart.Line = function (context, config) {\n\t\t\t\t\tconfig.type = 'line';\n\n\t\t\t\t\treturn new Chart(context, config);\n\t\t\t\t};\n\t\t\t};\n\t\t}, {}], 12: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tChart.PolarArea = function (context, config) {\n\t\t\t\t\tconfig.type = 'polarArea';\n\n\t\t\t\t\treturn new Chart(context, config);\n\t\t\t\t};\n\t\t\t};\n\t\t}, {}], 13: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tChart.Radar = function (context, config) {\n\t\t\t\t\tconfig.type = 'radar';\n\n\t\t\t\t\treturn new Chart(context, config);\n\t\t\t\t};\n\t\t\t};\n\t\t}, {}], 14: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tmodule.exports = function (Chart) {\n\t\t\t\tChart.Scatter = function (context, config) {\n\t\t\t\t\tconfig.type = 'scatter';\n\t\t\t\t\treturn new Chart(context, config);\n\t\t\t\t};\n\t\t\t};\n\t\t}, {}], 15: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar elements = require(41);\n\t\t\tvar helpers = require(46);\n\n\t\t\tdefaults._set('bar', {\n\t\t\t\thover: {\n\t\t\t\t\tmode: 'label'\n\t\t\t\t},\n\n\t\t\t\tscales: {\n\t\t\t\t\txAxes: [{\n\t\t\t\t\t\ttype: 'category',\n\n\t\t\t\t\t\t// Specific to Bar Controller\n\t\t\t\t\t\tcategoryPercentage: 0.8,\n\t\t\t\t\t\tbarPercentage: 0.9,\n\n\t\t\t\t\t\t// offset settings\n\t\t\t\t\t\toffset: true,\n\n\t\t\t\t\t\t// grid line settings\n\t\t\t\t\t\tgridLines: {\n\t\t\t\t\t\t\toffsetGridLines: true\n\t\t\t\t\t\t}\n\t\t\t\t\t}],\n\n\t\t\t\t\tyAxes: [{\n\t\t\t\t\t\ttype: 'linear'\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdefaults._set('horizontalBar', {\n\t\t\t\thover: {\n\t\t\t\t\tmode: 'index',\n\t\t\t\t\taxis: 'y'\n\t\t\t\t},\n\n\t\t\t\tscales: {\n\t\t\t\t\txAxes: [{\n\t\t\t\t\t\ttype: 'linear',\n\t\t\t\t\t\tposition: 'bottom'\n\t\t\t\t\t}],\n\n\t\t\t\t\tyAxes: [{\n\t\t\t\t\t\tposition: 'left',\n\t\t\t\t\t\ttype: 'category',\n\n\t\t\t\t\t\t// Specific to Horizontal Bar Controller\n\t\t\t\t\t\tcategoryPercentage: 0.8,\n\t\t\t\t\t\tbarPercentage: 0.9,\n\n\t\t\t\t\t\t// offset settings\n\t\t\t\t\t\toffset: true,\n\n\t\t\t\t\t\t// grid line settings\n\t\t\t\t\t\tgridLines: {\n\t\t\t\t\t\t\toffsetGridLines: true\n\t\t\t\t\t\t}\n\t\t\t\t\t}]\n\t\t\t\t},\n\n\t\t\t\telements: {\n\t\t\t\t\trectangle: {\n\t\t\t\t\t\tborderSkipped: 'left'\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\ttooltips: {\n\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\ttitle: function title(item, data) {\n\t\t\t\t\t\t\t// Pick first xLabel for now\n\t\t\t\t\t\t\tvar title = '';\n\n\t\t\t\t\t\t\tif (item.length > 0) {\n\t\t\t\t\t\t\t\tif (item[0].yLabel) {\n\t\t\t\t\t\t\t\t\ttitle = item[0].yLabel;\n\t\t\t\t\t\t\t\t} else if (data.labels.length > 0 && item[0].index < data.labels.length) {\n\t\t\t\t\t\t\t\t\ttitle = data.labels[item[0].index];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn title;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tlabel: function label(item, data) {\n\t\t\t\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\n\t\t\t\t\t\t\treturn datasetLabel + ': ' + item.xLabel;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tmode: 'index',\n\t\t\t\t\taxis: 'y'\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/**\r\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\r\n * @private\r\n */\n\t\t\tfunction computeMinSampleSize(scale, pixels) {\n\t\t\t\tvar min = scale.isHorizontal() ? scale.width : scale.height;\n\t\t\t\tvar ticks = scale.getTicks();\n\t\t\t\tvar prev, curr, i, ilen;\n\n\t\t\t\tfor (i = 1, ilen = pixels.length; i < ilen; ++i) {\n\t\t\t\t\tmin = Math.min(min, pixels[i] - pixels[i - 1]);\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\t\t\t\tcurr = scale.getPixelForTick(i);\n\t\t\t\t\tmin = i > 0 ? Math.min(min, curr - prev) : min;\n\t\t\t\t\tprev = curr;\n\t\t\t\t}\n\n\t\t\t\treturn min;\n\t\t\t}\n\n\t\t\t/**\r\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\r\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\r\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\r\n * @private\r\n */\n\t\t\tfunction computeFitCategoryTraits(index, ruler, options) {\n\t\t\t\tvar thickness = options.barThickness;\n\t\t\t\tvar count = ruler.stackCount;\n\t\t\t\tvar curr = ruler.pixels[index];\n\t\t\t\tvar size, ratio;\n\n\t\t\t\tif (helpers.isNullOrUndef(thickness)) {\n\t\t\t\t\tsize = ruler.min * options.categoryPercentage;\n\t\t\t\t\tratio = options.barPercentage;\n\t\t\t\t} else {\n\t\t\t\t\t// When bar thickness is enforced, category and bar percentages are ignored.\n\t\t\t\t\t// Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n\t\t\t\t\t// and deprecate barPercentage since this value is ignored when thickness is absolute.\n\t\t\t\t\tsize = thickness * count;\n\t\t\t\t\tratio = 1;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tchunk: size / count,\n\t\t\t\t\tratio: ratio,\n\t\t\t\t\tstart: curr - size / 2\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/**\r\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\r\n * percentage options are 1), based on the previous and following categories. This mode\r\n * generates bars with different widths when data are not evenly spaced.\r\n * @private\r\n */\n\t\t\tfunction computeFlexCategoryTraits(index, ruler, options) {\n\t\t\t\tvar pixels = ruler.pixels;\n\t\t\t\tvar curr = pixels[index];\n\t\t\t\tvar prev = index > 0 ? pixels[index - 1] : null;\n\t\t\t\tvar next = index < pixels.length - 1 ? pixels[index + 1] : null;\n\t\t\t\tvar percent = options.categoryPercentage;\n\t\t\t\tvar start, size;\n\n\t\t\t\tif (prev === null) {\n\t\t\t\t\t// first data: its size is double based on the next point or,\n\t\t\t\t\t// if it's also the last data, we use the scale end extremity.\n\t\t\t\t\tprev = curr - (next === null ? ruler.end - curr : next - curr);\n\t\t\t\t}\n\n\t\t\t\tif (next === null) {\n\t\t\t\t\t// last data: its size is also double based on the previous point.\n\t\t\t\t\tnext = curr + curr - prev;\n\t\t\t\t}\n\n\t\t\t\tstart = curr - (curr - prev) / 2 * percent;\n\t\t\t\tsize = (next - prev) / 2 * percent;\n\n\t\t\t\treturn {\n\t\t\t\t\tchunk: size / ruler.stackCount,\n\t\t\t\t\tratio: options.barPercentage,\n\t\t\t\t\tstart: start\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tChart.controllers.bar = Chart.DatasetController.extend({\n\n\t\t\t\t\tdataElementType: elements.Rectangle,\n\n\t\t\t\t\tinitialize: function initialize() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta;\n\n\t\t\t\t\t\tChart.DatasetController.prototype.initialize.apply(me, arguments);\n\n\t\t\t\t\t\tmeta = me.getMeta();\n\t\t\t\t\t\tmeta.stack = me.getDataset().stack;\n\t\t\t\t\t\tmeta.bar = true;\n\t\t\t\t\t},\n\n\t\t\t\t\tupdate: function update(reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar rects = me.getMeta().data;\n\t\t\t\t\t\tvar i, ilen;\n\n\t\t\t\t\t\tme._ruler = me.getRuler();\n\n\t\t\t\t\t\tfor (i = 0, ilen = rects.length; i < ilen; ++i) {\n\t\t\t\t\t\t\tme.updateElement(rects[i], i, reset);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tupdateElement: function updateElement(rectangle, index, reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\t\t\t\t\t\tvar custom = rectangle.custom || {};\n\t\t\t\t\t\tvar rectangleOptions = chart.options.elements.rectangle;\n\n\t\t\t\t\t\trectangle._xScale = me.getScaleForId(meta.xAxisID);\n\t\t\t\t\t\trectangle._yScale = me.getScaleForId(meta.yAxisID);\n\t\t\t\t\t\trectangle._datasetIndex = me.index;\n\t\t\t\t\t\trectangle._index = index;\n\n\t\t\t\t\t\trectangle._model = {\n\t\t\t\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\t\t\t\tlabel: chart.data.labels[index],\n\t\t\t\t\t\t\tborderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleOptions.borderSkipped,\n\t\t\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.valueAtIndexOrDefault(dataset.backgroundColor, index, rectangleOptions.backgroundColor),\n\t\t\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : helpers.valueAtIndexOrDefault(dataset.borderColor, index, rectangleOptions.borderColor),\n\t\t\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : helpers.valueAtIndexOrDefault(dataset.borderWidth, index, rectangleOptions.borderWidth)\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tme.updateElementGeometry(rectangle, index, reset);\n\n\t\t\t\t\t\trectangle.pivot();\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tupdateElementGeometry: function updateElementGeometry(rectangle, index, reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar model = rectangle._model;\n\t\t\t\t\t\tvar vscale = me.getValueScale();\n\t\t\t\t\t\tvar base = vscale.getBasePixel();\n\t\t\t\t\t\tvar horizontal = vscale.isHorizontal();\n\t\t\t\t\t\tvar ruler = me._ruler || me.getRuler();\n\t\t\t\t\t\tvar vpixels = me.calculateBarValuePixels(me.index, index);\n\t\t\t\t\t\tvar ipixels = me.calculateBarIndexPixels(me.index, index, ruler);\n\n\t\t\t\t\t\tmodel.horizontal = horizontal;\n\t\t\t\t\t\tmodel.base = reset ? base : vpixels.base;\n\t\t\t\t\t\tmodel.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\n\t\t\t\t\t\tmodel.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\n\t\t\t\t\t\tmodel.height = horizontal ? ipixels.size : undefined;\n\t\t\t\t\t\tmodel.width = horizontal ? undefined : ipixels.size;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tgetValueScaleId: function getValueScaleId() {\n\t\t\t\t\t\treturn this.getMeta().yAxisID;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tgetIndexScaleId: function getIndexScaleId() {\n\t\t\t\t\t\treturn this.getMeta().xAxisID;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tgetValueScale: function getValueScale() {\n\t\t\t\t\t\treturn this.getScaleForId(this.getValueScaleId());\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tgetIndexScale: function getIndexScale() {\n\t\t\t\t\t\treturn this.getScaleForId(this.getIndexScaleId());\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Returns the stacks based on groups and bar visibility.\r\n * @param {Number} [last] - The dataset index\r\n * @returns {Array} The stack list\r\n * @private\r\n */\n\t\t\t\t\t_getStacks: function _getStacks(last) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar scale = me.getIndexScale();\n\t\t\t\t\t\tvar stacked = scale.options.stacked;\n\t\t\t\t\t\tvar ilen = last === undefined ? chart.data.datasets.length : last + 1;\n\t\t\t\t\t\tvar stacks = [];\n\t\t\t\t\t\tvar i, meta;\n\n\t\t\t\t\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\t\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\t\t\t\tif (meta.bar && chart.isDatasetVisible(i) && (stacked === false || stacked === true && stacks.indexOf(meta.stack) === -1 || stacked === undefined && (meta.stack === undefined || stacks.indexOf(meta.stack) === -1))) {\n\t\t\t\t\t\t\t\tstacks.push(meta.stack);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn stacks;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Returns the effective number of stacks based on groups and bar visibility.\r\n * @private\r\n */\n\t\t\t\t\tgetStackCount: function getStackCount() {\n\t\t\t\t\t\treturn this._getStacks().length;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Returns the stack index for the given dataset based on groups and bar visibility.\r\n * @param {Number} [datasetIndex] - The dataset index\r\n * @param {String} [name] - The stack name to find\r\n * @returns {Number} The stack index\r\n * @private\r\n */\n\t\t\t\t\tgetStackIndex: function getStackIndex(datasetIndex, name) {\n\t\t\t\t\t\tvar stacks = this._getStacks(datasetIndex);\n\t\t\t\t\t\tvar index = name !== undefined ? stacks.indexOf(name) : -1; // indexOf returns -1 if element is not present\n\n\t\t\t\t\t\treturn index === -1 ? stacks.length - 1 : index;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tgetRuler: function getRuler() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar scale = me.getIndexScale();\n\t\t\t\t\t\tvar stackCount = me.getStackCount();\n\t\t\t\t\t\tvar datasetIndex = me.index;\n\t\t\t\t\t\tvar isHorizontal = scale.isHorizontal();\n\t\t\t\t\t\tvar start = isHorizontal ? scale.left : scale.top;\n\t\t\t\t\t\tvar end = start + (isHorizontal ? scale.width : scale.height);\n\t\t\t\t\t\tvar pixels = [];\n\t\t\t\t\t\tvar i, ilen, min;\n\n\t\t\t\t\t\tfor (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\n\t\t\t\t\t\t\tpixels.push(scale.getPixelForValue(null, i, datasetIndex));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmin = helpers.isNullOrUndef(scale.options.barThickness) ? computeMinSampleSize(scale, pixels) : -1;\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tmin: min,\n\t\t\t\t\t\t\tpixels: pixels,\n\t\t\t\t\t\t\tstart: start,\n\t\t\t\t\t\t\tend: end,\n\t\t\t\t\t\t\tstackCount: stackCount,\n\t\t\t\t\t\t\tscale: scale\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Note: pixel values are not clamped to the scale area.\r\n * @private\r\n */\n\t\t\t\t\tcalculateBarValuePixels: function calculateBarValuePixels(datasetIndex, index) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar scale = me.getValueScale();\n\t\t\t\t\t\tvar datasets = chart.data.datasets;\n\t\t\t\t\t\tvar value = scale.getRightValue(datasets[datasetIndex].data[index]);\n\t\t\t\t\t\tvar stacked = scale.options.stacked;\n\t\t\t\t\t\tvar stack = meta.stack;\n\t\t\t\t\t\tvar start = 0;\n\t\t\t\t\t\tvar i, imeta, ivalue, base, head, size;\n\n\t\t\t\t\t\tif (stacked || stacked === undefined && stack !== undefined) {\n\t\t\t\t\t\t\tfor (i = 0; i < datasetIndex; ++i) {\n\t\t\t\t\t\t\t\timeta = chart.getDatasetMeta(i);\n\n\t\t\t\t\t\t\t\tif (imeta.bar && imeta.stack === stack && imeta.controller.getValueScaleId() === scale.id && chart.isDatasetVisible(i)) {\n\n\t\t\t\t\t\t\t\t\tivalue = scale.getRightValue(datasets[i].data[index]);\n\t\t\t\t\t\t\t\t\tif (value < 0 && ivalue < 0 || value >= 0 && ivalue > 0) {\n\t\t\t\t\t\t\t\t\t\tstart += ivalue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbase = scale.getPixelForValue(start);\n\t\t\t\t\t\thead = scale.getPixelForValue(start + value);\n\t\t\t\t\t\tsize = (head - base) / 2;\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsize: size,\n\t\t\t\t\t\t\tbase: base,\n\t\t\t\t\t\t\thead: head,\n\t\t\t\t\t\t\tcenter: head + size / 2\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tcalculateBarIndexPixels: function calculateBarIndexPixels(datasetIndex, index, ruler) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar options = ruler.scale.options;\n\t\t\t\t\t\tvar range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options) : computeFitCategoryTraits(index, ruler, options);\n\n\t\t\t\t\t\tvar stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\n\t\t\t\t\t\tvar center = range.start + range.chunk * stackIndex + range.chunk / 2;\n\t\t\t\t\t\tvar size = Math.min(helpers.valueOrDefault(options.maxBarThickness, Infinity), range.chunk * range.ratio);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tbase: center - size / 2,\n\t\t\t\t\t\t\thead: center + size / 2,\n\t\t\t\t\t\t\tcenter: center,\n\t\t\t\t\t\t\tsize: size\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\n\t\t\t\t\tdraw: function draw() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar scale = me.getValueScale();\n\t\t\t\t\t\tvar rects = me.getMeta().data;\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\t\t\t\t\t\tvar ilen = rects.length;\n\t\t\t\t\t\tvar i = 0;\n\n\t\t\t\t\t\thelpers.canvas.clipArea(chart.ctx, chart.chartArea);\n\n\t\t\t\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\t\t\t\tif (!isNaN(scale.getRightValue(dataset.data[i]))) {\n\t\t\t\t\t\t\t\trects[i].draw();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thelpers.canvas.unclipArea(chart.ctx);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tChart.controllers.horizontalBar = Chart.controllers.bar.extend({\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tgetValueScaleId: function getValueScaleId() {\n\t\t\t\t\t\treturn this.getMeta().xAxisID;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tgetIndexScaleId: function getIndexScaleId() {\n\t\t\t\t\t\treturn this.getMeta().yAxisID;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t}, { \"26\": 26, \"41\": 41, \"46\": 46 }], 16: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar elements = require(41);\n\t\t\tvar helpers = require(46);\n\n\t\t\tdefaults._set('bubble', {\n\t\t\t\thover: {\n\t\t\t\t\tmode: 'single'\n\t\t\t\t},\n\n\t\t\t\tscales: {\n\t\t\t\t\txAxes: [{\n\t\t\t\t\t\ttype: 'linear', // bubble should probably use a linear scale by default\n\t\t\t\t\t\tposition: 'bottom',\n\t\t\t\t\t\tid: 'x-axis-0' // need an ID so datasets can reference the scale\n\t\t\t\t\t}],\n\t\t\t\t\tyAxes: [{\n\t\t\t\t\t\ttype: 'linear',\n\t\t\t\t\t\tposition: 'left',\n\t\t\t\t\t\tid: 'y-axis-0'\n\t\t\t\t\t}]\n\t\t\t\t},\n\n\t\t\t\ttooltips: {\n\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\ttitle: function title() {\n\t\t\t\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\n\t\t\t\t\t\t\treturn '';\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabel: function label(item, data) {\n\t\t\t\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\n\t\t\t\t\t\t\tvar dataPoint = data.datasets[item.datasetIndex].data[item.index];\n\t\t\t\t\t\t\treturn datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tChart.controllers.bubble = Chart.DatasetController.extend({\n\t\t\t\t\t/**\r\n * @protected\r\n */\n\t\t\t\t\tdataElementType: elements.Point,\n\n\t\t\t\t\t/**\r\n * @protected\r\n */\n\t\t\t\t\tupdate: function update(reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar points = meta.data;\n\n\t\t\t\t\t\t// Update Points\n\t\t\t\t\t\thelpers.each(points, function (point, index) {\n\t\t\t\t\t\t\tme.updateElement(point, index, reset);\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @protected\r\n */\n\t\t\t\t\tupdateElement: function updateElement(point, index, reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar custom = point.custom || {};\n\t\t\t\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\t\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\t\t\t\tvar options = me._resolveElementOptions(point, index);\n\t\t\t\t\t\tvar data = me.getDataset().data[index];\n\t\t\t\t\t\tvar dsIndex = me.index;\n\n\t\t\t\t\t\tvar x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue((typeof data === \"undefined\" ? \"undefined\" : _typeof(data)) === 'object' ? data : NaN, index, dsIndex);\n\t\t\t\t\t\tvar y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\n\n\t\t\t\t\t\tpoint._xScale = xScale;\n\t\t\t\t\t\tpoint._yScale = yScale;\n\t\t\t\t\t\tpoint._options = options;\n\t\t\t\t\t\tpoint._datasetIndex = dsIndex;\n\t\t\t\t\t\tpoint._index = index;\n\t\t\t\t\t\tpoint._model = {\n\t\t\t\t\t\t\tbackgroundColor: options.backgroundColor,\n\t\t\t\t\t\t\tborderColor: options.borderColor,\n\t\t\t\t\t\t\tborderWidth: options.borderWidth,\n\t\t\t\t\t\t\thitRadius: options.hitRadius,\n\t\t\t\t\t\t\tpointStyle: options.pointStyle,\n\t\t\t\t\t\t\trotation: options.rotation,\n\t\t\t\t\t\t\tradius: reset ? 0 : options.radius,\n\t\t\t\t\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\n\t\t\t\t\t\t\tx: x,\n\t\t\t\t\t\t\ty: y\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tpoint.pivot();\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @protected\r\n */\n\t\t\t\t\tsetHoverStyle: function setHoverStyle(point) {\n\t\t\t\t\t\tvar model = point._model;\n\t\t\t\t\t\tvar options = point._options;\n\t\t\t\t\t\tpoint.$previousStyle = {\n\t\t\t\t\t\t\tbackgroundColor: model.backgroundColor,\n\t\t\t\t\t\t\tborderColor: model.borderColor,\n\t\t\t\t\t\t\tborderWidth: model.borderWidth,\n\t\t\t\t\t\t\tradius: model.radius\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmodel.backgroundColor = helpers.valueOrDefault(options.hoverBackgroundColor, helpers.getHoverColor(options.backgroundColor));\n\t\t\t\t\t\tmodel.borderColor = helpers.valueOrDefault(options.hoverBorderColor, helpers.getHoverColor(options.borderColor));\n\t\t\t\t\t\tmodel.borderWidth = helpers.valueOrDefault(options.hoverBorderWidth, options.borderWidth);\n\t\t\t\t\t\tmodel.radius = options.radius + options.hoverRadius;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\t_resolveElementOptions: function _resolveElementOptions(point, index) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar datasets = chart.data.datasets;\n\t\t\t\t\t\tvar dataset = datasets[me.index];\n\t\t\t\t\t\tvar custom = point.custom || {};\n\t\t\t\t\t\tvar options = chart.options.elements.point;\n\t\t\t\t\t\tvar resolve = helpers.options.resolve;\n\t\t\t\t\t\tvar data = dataset.data[index];\n\t\t\t\t\t\tvar values = {};\n\t\t\t\t\t\tvar i, ilen, key;\n\n\t\t\t\t\t\t// Scriptable options\n\t\t\t\t\t\tvar context = {\n\t\t\t\t\t\t\tchart: chart,\n\t\t\t\t\t\t\tdataIndex: index,\n\t\t\t\t\t\t\tdataset: dataset,\n\t\t\t\t\t\t\tdatasetIndex: me.index\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tvar keys = ['backgroundColor', 'borderColor', 'borderWidth', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth', 'hoverRadius', 'hitRadius', 'pointStyle', 'rotation'];\n\n\t\t\t\t\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\t\t\t\t\tkey = keys[i];\n\t\t\t\t\t\t\tvalues[key] = resolve([custom[key], dataset[key], options[key]], context, index);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Custom radius resolution\n\t\t\t\t\t\tvalues.radius = resolve([custom.radius, data ? data.r : undefined, dataset.radius, options.radius], context, index);\n\t\t\t\t\t\treturn values;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t}, { \"26\": 26, \"41\": 41, \"46\": 46 }], 17: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar elements = require(41);\n\t\t\tvar helpers = require(46);\n\n\t\t\tdefaults._set('doughnut', {\n\t\t\t\tanimation: {\n\t\t\t\t\t// Boolean - Whether we animate the rotation of the Doughnut\n\t\t\t\t\tanimateRotate: true,\n\t\t\t\t\t// Boolean - Whether we animate scaling the Doughnut from the centre\n\t\t\t\t\tanimateScale: false\n\t\t\t\t},\n\t\t\t\thover: {\n\t\t\t\t\tmode: 'single'\n\t\t\t\t},\n\t\t\t\tlegendCallback: function legendCallback(chart) {\n\t\t\t\t\tvar text = [];\n\t\t\t\t\ttext.push('
    ');\n\n\t\t\t\t\tvar data = chart.data;\n\t\t\t\t\tvar datasets = data.datasets;\n\t\t\t\t\tvar labels = data.labels;\n\n\t\t\t\t\tif (datasets.length) {\n\t\t\t\t\t\tfor (var i = 0; i < datasets[0].data.length; ++i) {\n\t\t\t\t\t\t\ttext.push('
  • ');\n\t\t\t\t\t\t\tif (labels[i]) {\n\t\t\t\t\t\t\t\ttext.push(labels[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttext.push('
  • ');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttext.push('
');\n\t\t\t\t\treturn text.join('');\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tlabels: {\n\t\t\t\t\t\tgenerateLabels: function generateLabels(chart) {\n\t\t\t\t\t\t\tvar data = chart.data;\n\t\t\t\t\t\t\tif (data.labels.length && data.datasets.length) {\n\t\t\t\t\t\t\t\treturn data.labels.map(function (label, i) {\n\t\t\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\n\t\t\t\t\t\t\t\t\tvar ds = data.datasets[0];\n\t\t\t\t\t\t\t\t\tvar arc = meta.data[i];\n\t\t\t\t\t\t\t\t\tvar custom = arc && arc.custom || {};\n\t\t\t\t\t\t\t\t\tvar valueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\t\t\t\t\t\t\tvar arcOpts = chart.options.elements.arc;\n\t\t\t\t\t\t\t\t\tvar fill = custom.backgroundColor ? custom.backgroundColor : valueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);\n\t\t\t\t\t\t\t\t\tvar stroke = custom.borderColor ? custom.borderColor : valueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);\n\t\t\t\t\t\t\t\t\tvar bw = custom.borderWidth ? custom.borderWidth : valueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\ttext: label,\n\t\t\t\t\t\t\t\t\t\tfillStyle: fill,\n\t\t\t\t\t\t\t\t\t\tstrokeStyle: stroke,\n\t\t\t\t\t\t\t\t\t\tlineWidth: bw,\n\t\t\t\t\t\t\t\t\t\thidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n\t\t\t\t\t\t\t\t\t\t// Extra data used for toggling the correct item\n\t\t\t\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tonClick: function onClick(e, legendItem) {\n\t\t\t\t\t\tvar index = legendItem.index;\n\t\t\t\t\t\tvar chart = this.chart;\n\t\t\t\t\t\tvar i, ilen, meta;\n\n\t\t\t\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\t\t\t\t// toggle visibility of index if exists\n\t\t\t\t\t\t\tif (meta.data[index]) {\n\t\t\t\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchart.update();\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// The percentage of the chart that we cut out of the middle.\n\t\t\t\tcutoutPercentage: 50,\n\n\t\t\t\t// The rotation of the chart, where the first data arc begins.\n\t\t\t\trotation: Math.PI * -0.5,\n\n\t\t\t\t// The total circumference of the chart.\n\t\t\t\tcircumference: Math.PI * 2.0,\n\n\t\t\t\t// Need to override these to give a nice default\n\t\t\t\ttooltips: {\n\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\ttitle: function title() {\n\t\t\t\t\t\t\treturn '';\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabel: function label(tooltipItem, data) {\n\t\t\t\t\t\t\tvar dataLabel = data.labels[tooltipItem.index];\n\t\t\t\t\t\t\tvar value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\n\n\t\t\t\t\t\t\tif (helpers.isArray(dataLabel)) {\n\t\t\t\t\t\t\t\t// show value on first line of multiline label\n\t\t\t\t\t\t\t\t// need to clone because we are changing the value\n\t\t\t\t\t\t\t\tdataLabel = dataLabel.slice();\n\t\t\t\t\t\t\t\tdataLabel[0] += value;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdataLabel += value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn dataLabel;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdefaults._set('pie', helpers.clone(defaults.doughnut));\n\t\t\tdefaults._set('pie', {\n\t\t\t\tcutoutPercentage: 0\n\t\t\t});\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tChart.controllers.doughnut = Chart.controllers.pie = Chart.DatasetController.extend({\n\n\t\t\t\t\tdataElementType: elements.Arc,\n\n\t\t\t\t\tlinkScales: helpers.noop,\n\n\t\t\t\t\t// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\n\t\t\t\t\tgetRingIndex: function getRingIndex(datasetIndex) {\n\t\t\t\t\t\tvar ringIndex = 0;\n\n\t\t\t\t\t\tfor (var j = 0; j < datasetIndex; ++j) {\n\t\t\t\t\t\t\tif (this.chart.isDatasetVisible(j)) {\n\t\t\t\t\t\t\t\t++ringIndex;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn ringIndex;\n\t\t\t\t\t},\n\n\t\t\t\t\tupdate: function update(reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar chartArea = chart.chartArea;\n\t\t\t\t\t\tvar opts = chart.options;\n\t\t\t\t\t\tvar arcOpts = opts.elements.arc;\n\t\t\t\t\t\tvar availableWidth = chartArea.right - chartArea.left - arcOpts.borderWidth;\n\t\t\t\t\t\tvar availableHeight = chartArea.bottom - chartArea.top - arcOpts.borderWidth;\n\t\t\t\t\t\tvar minSize = Math.min(availableWidth, availableHeight);\n\t\t\t\t\t\tvar offset = { x: 0, y: 0 };\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar cutoutPercentage = opts.cutoutPercentage;\n\t\t\t\t\t\tvar circumference = opts.circumference;\n\n\t\t\t\t\t\t// If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc\n\t\t\t\t\t\tif (circumference < Math.PI * 2.0) {\n\t\t\t\t\t\t\tvar startAngle = opts.rotation % (Math.PI * 2.0);\n\t\t\t\t\t\t\tstartAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0);\n\t\t\t\t\t\t\tvar endAngle = startAngle + circumference;\n\t\t\t\t\t\t\tvar start = { x: Math.cos(startAngle), y: Math.sin(startAngle) };\n\t\t\t\t\t\t\tvar end = { x: Math.cos(endAngle), y: Math.sin(endAngle) };\n\t\t\t\t\t\t\tvar contains0 = startAngle <= 0 && endAngle >= 0 || startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle;\n\t\t\t\t\t\t\tvar contains90 = startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle || startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle;\n\t\t\t\t\t\t\tvar contains180 = startAngle <= -Math.PI && -Math.PI <= endAngle || startAngle <= Math.PI && Math.PI <= endAngle;\n\t\t\t\t\t\t\tvar contains270 = startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle || startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle;\n\t\t\t\t\t\t\tvar cutout = cutoutPercentage / 100.0;\n\t\t\t\t\t\t\tvar min = { x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)), y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout)) };\n\t\t\t\t\t\t\tvar max = { x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)), y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout)) };\n\t\t\t\t\t\t\tvar size = { width: (max.x - min.x) * 0.5, height: (max.y - min.y) * 0.5 };\n\t\t\t\t\t\t\tminSize = Math.min(availableWidth / size.width, availableHeight / size.height);\n\t\t\t\t\t\t\toffset = { x: (max.x + min.x) * -0.5, y: (max.y + min.y) * -0.5 };\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchart.borderWidth = me.getMaxBorderWidth(meta.data);\n\t\t\t\t\t\tchart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);\n\t\t\t\t\t\tchart.innerRadius = Math.max(cutoutPercentage ? chart.outerRadius / 100 * cutoutPercentage : 0, 0);\n\t\t\t\t\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n\t\t\t\t\t\tchart.offsetX = offset.x * chart.outerRadius;\n\t\t\t\t\t\tchart.offsetY = offset.y * chart.outerRadius;\n\n\t\t\t\t\t\tmeta.total = me.calculateTotal();\n\n\t\t\t\t\t\tme.outerRadius = chart.outerRadius - chart.radiusLength * me.getRingIndex(me.index);\n\t\t\t\t\t\tme.innerRadius = Math.max(me.outerRadius - chart.radiusLength, 0);\n\n\t\t\t\t\t\thelpers.each(meta.data, function (arc, index) {\n\t\t\t\t\t\t\tme.updateElement(arc, index, reset);\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\n\t\t\t\t\tupdateElement: function updateElement(arc, index, reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar chartArea = chart.chartArea;\n\t\t\t\t\t\tvar opts = chart.options;\n\t\t\t\t\t\tvar animationOpts = opts.animation;\n\t\t\t\t\t\tvar centerX = (chartArea.left + chartArea.right) / 2;\n\t\t\t\t\t\tvar centerY = (chartArea.top + chartArea.bottom) / 2;\n\t\t\t\t\t\tvar startAngle = opts.rotation; // non reset case handled later\n\t\t\t\t\t\tvar endAngle = opts.rotation; // non reset case handled later\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\t\t\t\t\t\tvar circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI));\n\t\t\t\t\t\tvar innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\n\t\t\t\t\t\tvar outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\n\t\t\t\t\t\tvar valueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n\t\t\t\t\t\thelpers.extend(arc, {\n\t\t\t\t\t\t\t// Utility\n\t\t\t\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t\t\t\t_index: index,\n\n\t\t\t\t\t\t\t// Desired view properties\n\t\t\t\t\t\t\t_model: {\n\t\t\t\t\t\t\t\tx: centerX + chart.offsetX,\n\t\t\t\t\t\t\t\ty: centerY + chart.offsetY,\n\t\t\t\t\t\t\t\tstartAngle: startAngle,\n\t\t\t\t\t\t\t\tendAngle: endAngle,\n\t\t\t\t\t\t\t\tcircumference: circumference,\n\t\t\t\t\t\t\t\touterRadius: outerRadius,\n\t\t\t\t\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\t\t\t\t\tlabel: valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tvar model = arc._model;\n\n\t\t\t\t\t\t// Resets the visual styles\n\t\t\t\t\t\tvar custom = arc.custom || {};\n\t\t\t\t\t\tvar valueOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\t\t\t\tvar elementOpts = this.chart.options.elements.arc;\n\t\t\t\t\t\tmodel.backgroundColor = custom.backgroundColor ? custom.backgroundColor : valueOrDefault(dataset.backgroundColor, index, elementOpts.backgroundColor);\n\t\t\t\t\t\tmodel.borderColor = custom.borderColor ? custom.borderColor : valueOrDefault(dataset.borderColor, index, elementOpts.borderColor);\n\t\t\t\t\t\tmodel.borderWidth = custom.borderWidth ? custom.borderWidth : valueOrDefault(dataset.borderWidth, index, elementOpts.borderWidth);\n\n\t\t\t\t\t\t// Set correct angles if not resetting\n\t\t\t\t\t\tif (!reset || !animationOpts.animateRotate) {\n\t\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t\tmodel.startAngle = opts.rotation;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmodel.startAngle = me.getMeta().data[index - 1]._model.endAngle;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmodel.endAngle = model.startAngle + model.circumference;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarc.pivot();\n\t\t\t\t\t},\n\n\t\t\t\t\tcalculateTotal: function calculateTotal() {\n\t\t\t\t\t\tvar dataset = this.getDataset();\n\t\t\t\t\t\tvar meta = this.getMeta();\n\t\t\t\t\t\tvar total = 0;\n\t\t\t\t\t\tvar value;\n\n\t\t\t\t\t\thelpers.each(meta.data, function (element, index) {\n\t\t\t\t\t\t\tvalue = dataset.data[index];\n\t\t\t\t\t\t\tif (!isNaN(value) && !element.hidden) {\n\t\t\t\t\t\t\t\ttotal += Math.abs(value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t/* if (total === 0) {\r\n \ttotal = NaN;\r\n }*/\n\n\t\t\t\t\t\treturn total;\n\t\t\t\t\t},\n\n\t\t\t\t\tcalculateCircumference: function calculateCircumference(value) {\n\t\t\t\t\t\tvar total = this.getMeta().total;\n\t\t\t\t\t\tif (total > 0 && !isNaN(value)) {\n\t\t\t\t\t\t\treturn Math.PI * 2.0 * (Math.abs(value) / total);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t},\n\n\t\t\t\t\t// gets the max border or hover width to properly scale pie charts\n\t\t\t\t\tgetMaxBorderWidth: function getMaxBorderWidth(arcs) {\n\t\t\t\t\t\tvar max = 0;\n\t\t\t\t\t\tvar index = this.index;\n\t\t\t\t\t\tvar length = arcs.length;\n\t\t\t\t\t\tvar borderWidth;\n\t\t\t\t\t\tvar hoverWidth;\n\n\t\t\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\t\t\tborderWidth = arcs[i]._model ? arcs[i]._model.borderWidth : 0;\n\t\t\t\t\t\t\thoverWidth = arcs[i]._chart ? arcs[i]._chart.config.data.datasets[index].hoverBorderWidth : 0;\n\n\t\t\t\t\t\t\tmax = borderWidth > max ? borderWidth : max;\n\t\t\t\t\t\t\tmax = hoverWidth > max ? hoverWidth : max;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn max;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t}, { \"26\": 26, \"41\": 41, \"46\": 46 }], 18: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar elements = require(41);\n\t\t\tvar helpers = require(46);\n\n\t\t\tdefaults._set('line', {\n\t\t\t\tshowLines: true,\n\t\t\t\tspanGaps: false,\n\n\t\t\t\thover: {\n\t\t\t\t\tmode: 'label'\n\t\t\t\t},\n\n\t\t\t\tscales: {\n\t\t\t\t\txAxes: [{\n\t\t\t\t\t\ttype: 'category',\n\t\t\t\t\t\tid: 'x-axis-0'\n\t\t\t\t\t}],\n\t\t\t\t\tyAxes: [{\n\t\t\t\t\t\ttype: 'linear',\n\t\t\t\t\t\tid: 'y-axis-0'\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tfunction lineEnabled(dataset, options) {\n\t\t\t\t\treturn helpers.valueOrDefault(dataset.showLine, options.showLines);\n\t\t\t\t}\n\n\t\t\t\tChart.controllers.line = Chart.DatasetController.extend({\n\n\t\t\t\t\tdatasetElementType: elements.Line,\n\n\t\t\t\t\tdataElementType: elements.Point,\n\n\t\t\t\t\tupdate: function update(reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar line = meta.dataset;\n\t\t\t\t\t\tvar points = meta.data || [];\n\t\t\t\t\t\tvar options = me.chart.options;\n\t\t\t\t\t\tvar lineElementOptions = options.elements.line;\n\t\t\t\t\t\tvar scale = me.getScaleForId(meta.yAxisID);\n\t\t\t\t\t\tvar i, ilen, custom;\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\t\t\t\t\t\tvar showLine = lineEnabled(dataset, options);\n\n\t\t\t\t\t\t// Update Line\n\t\t\t\t\t\tif (showLine) {\n\t\t\t\t\t\t\tcustom = line.custom || {};\n\n\t\t\t\t\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\t\t\t\t\tif (dataset.tension !== undefined && dataset.lineTension === undefined) {\n\t\t\t\t\t\t\t\tdataset.lineTension = dataset.tension;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Utility\n\t\t\t\t\t\t\tline._scale = scale;\n\t\t\t\t\t\t\tline._datasetIndex = me.index;\n\t\t\t\t\t\t\t// Data\n\t\t\t\t\t\t\tline._children = points;\n\t\t\t\t\t\t\t// Model\n\t\t\t\t\t\t\tline._model = {\n\t\t\t\t\t\t\t\t// Appearance\n\t\t\t\t\t\t\t\t// The default behavior of lines is to break at null values, according\n\t\t\t\t\t\t\t\t// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\n\t\t\t\t\t\t\t\t// This option gives lines the ability to span gaps\n\t\t\t\t\t\t\t\tspanGaps: dataset.spanGaps ? dataset.spanGaps : options.spanGaps,\n\t\t\t\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.valueOrDefault(dataset.lineTension, lineElementOptions.tension),\n\t\t\t\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : dataset.backgroundColor || lineElementOptions.backgroundColor,\n\t\t\t\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : dataset.borderWidth || lineElementOptions.borderWidth,\n\t\t\t\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : dataset.borderColor || lineElementOptions.borderColor,\n\t\t\t\t\t\t\t\tborderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : dataset.borderCapStyle || lineElementOptions.borderCapStyle,\n\t\t\t\t\t\t\t\tborderDash: custom.borderDash ? custom.borderDash : dataset.borderDash || lineElementOptions.borderDash,\n\t\t\t\t\t\t\t\tborderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : dataset.borderDashOffset || lineElementOptions.borderDashOffset,\n\t\t\t\t\t\t\t\tborderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : dataset.borderJoinStyle || lineElementOptions.borderJoinStyle,\n\t\t\t\t\t\t\t\tfill: custom.fill ? custom.fill : dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill,\n\t\t\t\t\t\t\t\tsteppedLine: custom.steppedLine ? custom.steppedLine : helpers.valueOrDefault(dataset.steppedLine, lineElementOptions.stepped),\n\t\t\t\t\t\t\t\tcubicInterpolationMode: custom.cubicInterpolationMode ? custom.cubicInterpolationMode : helpers.valueOrDefault(dataset.cubicInterpolationMode, lineElementOptions.cubicInterpolationMode)\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tline.pivot();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update Points\n\t\t\t\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\t\t\t\tme.updateElement(points[i], i, reset);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (showLine && line._model.tension !== 0) {\n\t\t\t\t\t\t\tme.updateBezierControlPoints();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Now pivot the point for animation\n\t\t\t\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\t\t\t\tpoints[i].pivot();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tgetPointBackgroundColor: function getPointBackgroundColor(point, index) {\n\t\t\t\t\t\tvar backgroundColor = this.chart.options.elements.point.backgroundColor;\n\t\t\t\t\t\tvar dataset = this.getDataset();\n\t\t\t\t\t\tvar custom = point.custom || {};\n\n\t\t\t\t\t\tif (custom.backgroundColor) {\n\t\t\t\t\t\t\tbackgroundColor = custom.backgroundColor;\n\t\t\t\t\t\t} else if (dataset.pointBackgroundColor) {\n\t\t\t\t\t\t\tbackgroundColor = helpers.valueAtIndexOrDefault(dataset.pointBackgroundColor, index, backgroundColor);\n\t\t\t\t\t\t} else if (dataset.backgroundColor) {\n\t\t\t\t\t\t\tbackgroundColor = dataset.backgroundColor;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn backgroundColor;\n\t\t\t\t\t},\n\n\t\t\t\t\tgetPointBorderColor: function getPointBorderColor(point, index) {\n\t\t\t\t\t\tvar borderColor = this.chart.options.elements.point.borderColor;\n\t\t\t\t\t\tvar dataset = this.getDataset();\n\t\t\t\t\t\tvar custom = point.custom || {};\n\n\t\t\t\t\t\tif (custom.borderColor) {\n\t\t\t\t\t\t\tborderColor = custom.borderColor;\n\t\t\t\t\t\t} else if (dataset.pointBorderColor) {\n\t\t\t\t\t\t\tborderColor = helpers.valueAtIndexOrDefault(dataset.pointBorderColor, index, borderColor);\n\t\t\t\t\t\t} else if (dataset.borderColor) {\n\t\t\t\t\t\t\tborderColor = dataset.borderColor;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn borderColor;\n\t\t\t\t\t},\n\n\t\t\t\t\tgetPointBorderWidth: function getPointBorderWidth(point, index) {\n\t\t\t\t\t\tvar borderWidth = this.chart.options.elements.point.borderWidth;\n\t\t\t\t\t\tvar dataset = this.getDataset();\n\t\t\t\t\t\tvar custom = point.custom || {};\n\n\t\t\t\t\t\tif (!isNaN(custom.borderWidth)) {\n\t\t\t\t\t\t\tborderWidth = custom.borderWidth;\n\t\t\t\t\t\t} else if (!isNaN(dataset.pointBorderWidth) || helpers.isArray(dataset.pointBorderWidth)) {\n\t\t\t\t\t\t\tborderWidth = helpers.valueAtIndexOrDefault(dataset.pointBorderWidth, index, borderWidth);\n\t\t\t\t\t\t} else if (!isNaN(dataset.borderWidth)) {\n\t\t\t\t\t\t\tborderWidth = dataset.borderWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn borderWidth;\n\t\t\t\t\t},\n\n\t\t\t\t\tgetPointRotation: function getPointRotation(point, index) {\n\t\t\t\t\t\tvar pointRotation = this.chart.options.elements.point.rotation;\n\t\t\t\t\t\tvar dataset = this.getDataset();\n\t\t\t\t\t\tvar custom = point.custom || {};\n\n\t\t\t\t\t\tif (!isNaN(custom.rotation)) {\n\t\t\t\t\t\t\tpointRotation = custom.rotation;\n\t\t\t\t\t\t} else if (!isNaN(dataset.pointRotation) || helpers.isArray(dataset.pointRotation)) {\n\t\t\t\t\t\t\tpointRotation = helpers.valueAtIndexOrDefault(dataset.pointRotation, index, pointRotation);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn pointRotation;\n\t\t\t\t\t},\n\n\t\t\t\t\tupdateElement: function updateElement(point, index, reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar custom = point.custom || {};\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\t\t\t\t\t\tvar datasetIndex = me.index;\n\t\t\t\t\t\tvar value = dataset.data[index];\n\t\t\t\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\t\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\t\t\t\tvar pointOptions = me.chart.options.elements.point;\n\t\t\t\t\t\tvar x, y;\n\n\t\t\t\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\t\t\t\tif (dataset.radius !== undefined && dataset.pointRadius === undefined) {\n\t\t\t\t\t\t\tdataset.pointRadius = dataset.radius;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (dataset.hitRadius !== undefined && dataset.pointHitRadius === undefined) {\n\t\t\t\t\t\t\tdataset.pointHitRadius = dataset.hitRadius;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tx = xScale.getPixelForValue((typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) === 'object' ? value : NaN, index, datasetIndex);\n\t\t\t\t\t\ty = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\n\n\t\t\t\t\t\t// Utility\n\t\t\t\t\t\tpoint._xScale = xScale;\n\t\t\t\t\t\tpoint._yScale = yScale;\n\t\t\t\t\t\tpoint._datasetIndex = datasetIndex;\n\t\t\t\t\t\tpoint._index = index;\n\n\t\t\t\t\t\t// Desired view properties\n\t\t\t\t\t\tpoint._model = {\n\t\t\t\t\t\t\tx: x,\n\t\t\t\t\t\t\ty: y,\n\t\t\t\t\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\n\t\t\t\t\t\t\t// Appearance\n\t\t\t\t\t\t\tradius: custom.radius || helpers.valueAtIndexOrDefault(dataset.pointRadius, index, pointOptions.radius),\n\t\t\t\t\t\t\tpointStyle: custom.pointStyle || helpers.valueAtIndexOrDefault(dataset.pointStyle, index, pointOptions.pointStyle),\n\t\t\t\t\t\t\trotation: me.getPointRotation(point, index),\n\t\t\t\t\t\t\tbackgroundColor: me.getPointBackgroundColor(point, index),\n\t\t\t\t\t\t\tborderColor: me.getPointBorderColor(point, index),\n\t\t\t\t\t\t\tborderWidth: me.getPointBorderWidth(point, index),\n\t\t\t\t\t\t\ttension: meta.dataset._model ? meta.dataset._model.tension : 0,\n\t\t\t\t\t\t\tsteppedLine: meta.dataset._model ? meta.dataset._model.steppedLine : false,\n\t\t\t\t\t\t\t// Tooltip\n\t\t\t\t\t\t\thitRadius: custom.hitRadius || helpers.valueAtIndexOrDefault(dataset.pointHitRadius, index, pointOptions.hitRadius)\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\n\t\t\t\t\tcalculatePointY: function calculatePointY(value, index, datasetIndex) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\t\t\t\tvar sumPos = 0;\n\t\t\t\t\t\tvar sumNeg = 0;\n\t\t\t\t\t\tvar i, ds, dsMeta;\n\n\t\t\t\t\t\tif (yScale.options.stacked) {\n\t\t\t\t\t\t\tfor (i = 0; i < datasetIndex; i++) {\n\t\t\t\t\t\t\t\tds = chart.data.datasets[i];\n\t\t\t\t\t\t\t\tdsMeta = chart.getDatasetMeta(i);\n\t\t\t\t\t\t\t\tif (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {\n\t\t\t\t\t\t\t\t\tvar stackedRightValue = Number(yScale.getRightValue(ds.data[index]));\n\t\t\t\t\t\t\t\t\tif (stackedRightValue < 0) {\n\t\t\t\t\t\t\t\t\t\tsumNeg += stackedRightValue || 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tsumPos += stackedRightValue || 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar rightValue = Number(yScale.getRightValue(value));\n\t\t\t\t\t\t\tif (rightValue < 0) {\n\t\t\t\t\t\t\t\treturn yScale.getPixelForValue(sumNeg + rightValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn yScale.getPixelForValue(sumPos + rightValue);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn yScale.getPixelForValue(value);\n\t\t\t\t\t},\n\n\t\t\t\t\tupdateBezierControlPoints: function updateBezierControlPoints() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar area = me.chart.chartArea;\n\t\t\t\t\t\tvar points = meta.data || [];\n\t\t\t\t\t\tvar i, ilen, point, model, controlPoints;\n\n\t\t\t\t\t\t// Only consider points that are drawn in case the spanGaps option is used\n\t\t\t\t\t\tif (meta.dataset._model.spanGaps) {\n\t\t\t\t\t\t\tpoints = points.filter(function (pt) {\n\t\t\t\t\t\t\t\treturn !pt._model.skip;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfunction capControlPoint(pt, min, max) {\n\t\t\t\t\t\t\treturn Math.max(Math.min(pt, max), min);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (meta.dataset._model.cubicInterpolationMode === 'monotone') {\n\t\t\t\t\t\t\thelpers.splineCurveMonotone(points);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\t\t\t\t\tpoint = points[i];\n\t\t\t\t\t\t\t\tmodel = point._model;\n\t\t\t\t\t\t\t\tcontrolPoints = helpers.splineCurve(helpers.previousItem(points, i)._model, model, helpers.nextItem(points, i)._model, meta.dataset._model.tension);\n\t\t\t\t\t\t\t\tmodel.controlPointPreviousX = controlPoints.previous.x;\n\t\t\t\t\t\t\t\tmodel.controlPointPreviousY = controlPoints.previous.y;\n\t\t\t\t\t\t\t\tmodel.controlPointNextX = controlPoints.next.x;\n\t\t\t\t\t\t\t\tmodel.controlPointNextY = controlPoints.next.y;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (me.chart.options.elements.line.capBezierPoints) {\n\t\t\t\t\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\t\t\t\t\tmodel = points[i]._model;\n\t\t\t\t\t\t\t\tmodel.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\n\t\t\t\t\t\t\t\tmodel.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\n\t\t\t\t\t\t\t\tmodel.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\n\t\t\t\t\t\t\t\tmodel.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tdraw: function draw() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar points = meta.data || [];\n\t\t\t\t\t\tvar area = chart.chartArea;\n\t\t\t\t\t\tvar ilen = points.length;\n\t\t\t\t\t\tvar halfBorderWidth;\n\t\t\t\t\t\tvar i = 0;\n\n\t\t\t\t\t\tif (lineEnabled(me.getDataset(), chart.options)) {\n\t\t\t\t\t\t\thalfBorderWidth = (meta.dataset._model.borderWidth || 0) / 2;\n\n\t\t\t\t\t\t\thelpers.canvas.clipArea(chart.ctx, {\n\t\t\t\t\t\t\t\tleft: area.left,\n\t\t\t\t\t\t\t\tright: area.right,\n\t\t\t\t\t\t\t\ttop: area.top - halfBorderWidth,\n\t\t\t\t\t\t\t\tbottom: area.bottom + halfBorderWidth\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tmeta.dataset.draw();\n\n\t\t\t\t\t\t\thelpers.canvas.unclipArea(chart.ctx);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Draw the points\n\t\t\t\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\t\t\t\tpoints[i].draw(area);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tsetHoverStyle: function setHoverStyle(element) {\n\t\t\t\t\t\t// Point\n\t\t\t\t\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\n\t\t\t\t\t\tvar index = element._index;\n\t\t\t\t\t\tvar custom = element.custom || {};\n\t\t\t\t\t\tvar model = element._model;\n\n\t\t\t\t\t\telement.$previousStyle = {\n\t\t\t\t\t\t\tbackgroundColor: model.backgroundColor,\n\t\t\t\t\t\t\tborderColor: model.borderColor,\n\t\t\t\t\t\t\tborderWidth: model.borderWidth,\n\t\t\t\t\t\t\tradius: model.radius\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor || helpers.valueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));\n\t\t\t\t\t\tmodel.borderColor = custom.hoverBorderColor || helpers.valueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));\n\t\t\t\t\t\tmodel.borderWidth = custom.hoverBorderWidth || helpers.valueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);\n\t\t\t\t\t\tmodel.radius = custom.hoverRadius || helpers.valueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t}, { \"26\": 26, \"41\": 41, \"46\": 46 }], 19: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar elements = require(41);\n\t\t\tvar helpers = require(46);\n\n\t\t\tdefaults._set('polarArea', {\n\t\t\t\tscale: {\n\t\t\t\t\ttype: 'radialLinear',\n\t\t\t\t\tangleLines: {\n\t\t\t\t\t\tdisplay: false\n\t\t\t\t\t},\n\t\t\t\t\tgridLines: {\n\t\t\t\t\t\tcircular: true\n\t\t\t\t\t},\n\t\t\t\t\tpointLabels: {\n\t\t\t\t\t\tdisplay: false\n\t\t\t\t\t},\n\t\t\t\t\tticks: {\n\t\t\t\t\t\tbeginAtZero: true\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// Boolean - Whether to animate the rotation of the chart\n\t\t\t\tanimation: {\n\t\t\t\t\tanimateRotate: true,\n\t\t\t\t\tanimateScale: true\n\t\t\t\t},\n\n\t\t\t\tstartAngle: -0.5 * Math.PI,\n\t\t\t\tlegendCallback: function legendCallback(chart) {\n\t\t\t\t\tvar text = [];\n\t\t\t\t\ttext.push('
    ');\n\n\t\t\t\t\tvar data = chart.data;\n\t\t\t\t\tvar datasets = data.datasets;\n\t\t\t\t\tvar labels = data.labels;\n\n\t\t\t\t\tif (datasets.length) {\n\t\t\t\t\t\tfor (var i = 0; i < datasets[0].data.length; ++i) {\n\t\t\t\t\t\t\ttext.push('
  • ');\n\t\t\t\t\t\t\tif (labels[i]) {\n\t\t\t\t\t\t\t\ttext.push(labels[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttext.push('
  • ');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttext.push('
');\n\t\t\t\t\treturn text.join('');\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tlabels: {\n\t\t\t\t\t\tgenerateLabels: function generateLabels(chart) {\n\t\t\t\t\t\t\tvar data = chart.data;\n\t\t\t\t\t\t\tif (data.labels.length && data.datasets.length) {\n\t\t\t\t\t\t\t\treturn data.labels.map(function (label, i) {\n\t\t\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\n\t\t\t\t\t\t\t\t\tvar ds = data.datasets[0];\n\t\t\t\t\t\t\t\t\tvar arc = meta.data[i];\n\t\t\t\t\t\t\t\t\tvar custom = arc.custom || {};\n\t\t\t\t\t\t\t\t\tvar valueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\t\t\t\t\t\t\tvar arcOpts = chart.options.elements.arc;\n\t\t\t\t\t\t\t\t\tvar fill = custom.backgroundColor ? custom.backgroundColor : valueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);\n\t\t\t\t\t\t\t\t\tvar stroke = custom.borderColor ? custom.borderColor : valueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);\n\t\t\t\t\t\t\t\t\tvar bw = custom.borderWidth ? custom.borderWidth : valueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\ttext: label,\n\t\t\t\t\t\t\t\t\t\tfillStyle: fill,\n\t\t\t\t\t\t\t\t\t\tstrokeStyle: stroke,\n\t\t\t\t\t\t\t\t\t\tlineWidth: bw,\n\t\t\t\t\t\t\t\t\t\thidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n\t\t\t\t\t\t\t\t\t\t// Extra data used for toggling the correct item\n\t\t\t\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tonClick: function onClick(e, legendItem) {\n\t\t\t\t\t\tvar index = legendItem.index;\n\t\t\t\t\t\tvar chart = this.chart;\n\t\t\t\t\t\tvar i, ilen, meta;\n\n\t\t\t\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchart.update();\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// Need to override these to give a nice default\n\t\t\t\ttooltips: {\n\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\ttitle: function title() {\n\t\t\t\t\t\t\treturn '';\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabel: function label(item, data) {\n\t\t\t\t\t\t\treturn data.labels[item.index] + ': ' + item.yLabel;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tChart.controllers.polarArea = Chart.DatasetController.extend({\n\n\t\t\t\t\tdataElementType: elements.Arc,\n\n\t\t\t\t\tlinkScales: helpers.noop,\n\n\t\t\t\t\tupdate: function update(reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar start = me.chart.options.startAngle || 0;\n\t\t\t\t\t\tvar starts = me._starts = [];\n\t\t\t\t\t\tvar angles = me._angles = [];\n\t\t\t\t\t\tvar i, ilen, angle;\n\n\t\t\t\t\t\tme._updateRadius();\n\n\t\t\t\t\t\tmeta.count = me.countVisibleElements();\n\n\t\t\t\t\t\tfor (i = 0, ilen = dataset.data.length; i < ilen; i++) {\n\t\t\t\t\t\t\tstarts[i] = start;\n\t\t\t\t\t\t\tangle = me._computeAngle(i);\n\t\t\t\t\t\t\tangles[i] = angle;\n\t\t\t\t\t\t\tstart += angle;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thelpers.each(meta.data, function (arc, index) {\n\t\t\t\t\t\t\tme.updateElement(arc, index, reset);\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\t_updateRadius: function _updateRadius() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar chartArea = chart.chartArea;\n\t\t\t\t\t\tvar opts = chart.options;\n\t\t\t\t\t\tvar arcOpts = opts.elements.arc;\n\t\t\t\t\t\tvar minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n\t\t\t\t\t\tchart.outerRadius = Math.max((minSize - arcOpts.borderWidth / 2) / 2, 0);\n\t\t\t\t\t\tchart.innerRadius = Math.max(opts.cutoutPercentage ? chart.outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n\t\t\t\t\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n\n\t\t\t\t\t\tme.outerRadius = chart.outerRadius - chart.radiusLength * me.index;\n\t\t\t\t\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\n\t\t\t\t\t},\n\n\t\t\t\t\tupdateElement: function updateElement(arc, index, reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\t\t\t\t\t\tvar opts = chart.options;\n\t\t\t\t\t\tvar animationOpts = opts.animation;\n\t\t\t\t\t\tvar scale = chart.scale;\n\t\t\t\t\t\tvar labels = chart.data.labels;\n\n\t\t\t\t\t\tvar centerX = scale.xCenter;\n\t\t\t\t\t\tvar centerY = scale.yCenter;\n\n\t\t\t\t\t\t// var negHalfPI = -0.5 * Math.PI;\n\t\t\t\t\t\tvar datasetStartAngle = opts.startAngle;\n\t\t\t\t\t\tvar distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n\t\t\t\t\t\tvar startAngle = me._starts[index];\n\t\t\t\t\t\tvar endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\n\n\t\t\t\t\t\tvar resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n\n\t\t\t\t\t\thelpers.extend(arc, {\n\t\t\t\t\t\t\t// Utility\n\t\t\t\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t\t\t\t_index: index,\n\t\t\t\t\t\t\t_scale: scale,\n\n\t\t\t\t\t\t\t// Desired view properties\n\t\t\t\t\t\t\t_model: {\n\t\t\t\t\t\t\t\tx: centerX,\n\t\t\t\t\t\t\t\ty: centerY,\n\t\t\t\t\t\t\t\tinnerRadius: 0,\n\t\t\t\t\t\t\t\touterRadius: reset ? resetRadius : distance,\n\t\t\t\t\t\t\t\tstartAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\n\t\t\t\t\t\t\t\tendAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\n\t\t\t\t\t\t\t\tlabel: helpers.valueAtIndexOrDefault(labels, index, labels[index])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Apply border and fill style\n\t\t\t\t\t\tvar elementOpts = this.chart.options.elements.arc;\n\t\t\t\t\t\tvar custom = arc.custom || {};\n\t\t\t\t\t\tvar valueOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\t\t\t\tvar model = arc._model;\n\n\t\t\t\t\t\tmodel.backgroundColor = custom.backgroundColor ? custom.backgroundColor : valueOrDefault(dataset.backgroundColor, index, elementOpts.backgroundColor);\n\t\t\t\t\t\tmodel.borderColor = custom.borderColor ? custom.borderColor : valueOrDefault(dataset.borderColor, index, elementOpts.borderColor);\n\t\t\t\t\t\tmodel.borderWidth = custom.borderWidth ? custom.borderWidth : valueOrDefault(dataset.borderWidth, index, elementOpts.borderWidth);\n\n\t\t\t\t\t\tarc.pivot();\n\t\t\t\t\t},\n\n\t\t\t\t\tcountVisibleElements: function countVisibleElements() {\n\t\t\t\t\t\tvar dataset = this.getDataset();\n\t\t\t\t\t\tvar meta = this.getMeta();\n\t\t\t\t\t\tvar count = 0;\n\n\t\t\t\t\t\thelpers.each(meta.data, function (element, index) {\n\t\t\t\t\t\t\tif (!isNaN(dataset.data[index]) && !element.hidden) {\n\t\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn count;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\t_computeAngle: function _computeAngle(index) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar count = this.getMeta().count;\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\t\t\t\t\t\tvar meta = me.getMeta();\n\n\t\t\t\t\t\tif (isNaN(dataset.data[index]) || meta.data[index].hidden) {\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Scriptable options\n\t\t\t\t\t\tvar context = {\n\t\t\t\t\t\t\tchart: me.chart,\n\t\t\t\t\t\t\tdataIndex: index,\n\t\t\t\t\t\t\tdataset: dataset,\n\t\t\t\t\t\t\tdatasetIndex: me.index\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treturn helpers.options.resolve([me.chart.options.elements.arc.angle, 2 * Math.PI / count], context, index);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t}, { \"26\": 26, \"41\": 41, \"46\": 46 }], 20: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar elements = require(41);\n\t\t\tvar helpers = require(46);\n\n\t\t\tdefaults._set('radar', {\n\t\t\t\tscale: {\n\t\t\t\t\ttype: 'radialLinear'\n\t\t\t\t},\n\t\t\t\telements: {\n\t\t\t\t\tline: {\n\t\t\t\t\t\ttension: 0 // no bezier in radar\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tChart.controllers.radar = Chart.DatasetController.extend({\n\n\t\t\t\t\tdatasetElementType: elements.Line,\n\n\t\t\t\t\tdataElementType: elements.Point,\n\n\t\t\t\t\tlinkScales: helpers.noop,\n\n\t\t\t\t\tupdate: function update(reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar line = meta.dataset;\n\t\t\t\t\t\tvar points = meta.data;\n\t\t\t\t\t\tvar custom = line.custom || {};\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\t\t\t\t\t\tvar lineElementOptions = me.chart.options.elements.line;\n\t\t\t\t\t\tvar scale = me.chart.scale;\n\n\t\t\t\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\t\t\t\tif (dataset.tension !== undefined && dataset.lineTension === undefined) {\n\t\t\t\t\t\t\tdataset.lineTension = dataset.tension;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thelpers.extend(meta.dataset, {\n\t\t\t\t\t\t\t// Utility\n\t\t\t\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t\t\t\t_scale: scale,\n\t\t\t\t\t\t\t// Data\n\t\t\t\t\t\t\t_children: points,\n\t\t\t\t\t\t\t_loop: true,\n\t\t\t\t\t\t\t// Model\n\t\t\t\t\t\t\t_model: {\n\t\t\t\t\t\t\t\t// Appearance\n\t\t\t\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.valueOrDefault(dataset.lineTension, lineElementOptions.tension),\n\t\t\t\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : dataset.backgroundColor || lineElementOptions.backgroundColor,\n\t\t\t\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : dataset.borderWidth || lineElementOptions.borderWidth,\n\t\t\t\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : dataset.borderColor || lineElementOptions.borderColor,\n\t\t\t\t\t\t\t\tfill: custom.fill ? custom.fill : dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill,\n\t\t\t\t\t\t\t\tborderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : dataset.borderCapStyle || lineElementOptions.borderCapStyle,\n\t\t\t\t\t\t\t\tborderDash: custom.borderDash ? custom.borderDash : dataset.borderDash || lineElementOptions.borderDash,\n\t\t\t\t\t\t\t\tborderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : dataset.borderDashOffset || lineElementOptions.borderDashOffset,\n\t\t\t\t\t\t\t\tborderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : dataset.borderJoinStyle || lineElementOptions.borderJoinStyle\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tmeta.dataset.pivot();\n\n\t\t\t\t\t\t// Update Points\n\t\t\t\t\t\thelpers.each(points, function (point, index) {\n\t\t\t\t\t\t\tme.updateElement(point, index, reset);\n\t\t\t\t\t\t}, me);\n\n\t\t\t\t\t\t// Update bezier control points\n\t\t\t\t\t\tme.updateBezierControlPoints();\n\t\t\t\t\t},\n\t\t\t\t\tupdateElement: function updateElement(point, index, reset) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar custom = point.custom || {};\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\t\t\t\t\t\tvar scale = me.chart.scale;\n\t\t\t\t\t\tvar pointElementOptions = me.chart.options.elements.point;\n\t\t\t\t\t\tvar pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\n\n\t\t\t\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\t\t\t\tif (dataset.radius !== undefined && dataset.pointRadius === undefined) {\n\t\t\t\t\t\t\tdataset.pointRadius = dataset.radius;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (dataset.hitRadius !== undefined && dataset.pointHitRadius === undefined) {\n\t\t\t\t\t\t\tdataset.pointHitRadius = dataset.hitRadius;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thelpers.extend(point, {\n\t\t\t\t\t\t\t// Utility\n\t\t\t\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t\t\t\t_index: index,\n\t\t\t\t\t\t\t_scale: scale,\n\n\t\t\t\t\t\t\t// Desired view properties\n\t\t\t\t\t\t\t_model: {\n\t\t\t\t\t\t\t\tx: reset ? scale.xCenter : pointPosition.x, // value not used in dataset scale, but we want a consistent API between scales\n\t\t\t\t\t\t\t\ty: reset ? scale.yCenter : pointPosition.y,\n\n\t\t\t\t\t\t\t\t// Appearance\n\t\t\t\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.valueOrDefault(dataset.lineTension, me.chart.options.elements.line.tension),\n\t\t\t\t\t\t\t\tradius: custom.radius ? custom.radius : helpers.valueAtIndexOrDefault(dataset.pointRadius, index, pointElementOptions.radius),\n\t\t\t\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.valueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor),\n\t\t\t\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : helpers.valueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor),\n\t\t\t\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : helpers.valueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth),\n\t\t\t\t\t\t\t\tpointStyle: custom.pointStyle ? custom.pointStyle : helpers.valueAtIndexOrDefault(dataset.pointStyle, index, pointElementOptions.pointStyle),\n\t\t\t\t\t\t\t\trotation: custom.rotation ? custom.rotation : helpers.valueAtIndexOrDefault(dataset.pointRotation, index, pointElementOptions.rotation),\n\n\t\t\t\t\t\t\t\t// Tooltip\n\t\t\t\t\t\t\t\thitRadius: custom.hitRadius ? custom.hitRadius : helpers.valueAtIndexOrDefault(dataset.pointHitRadius, index, pointElementOptions.hitRadius)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tpoint._model.skip = custom.skip ? custom.skip : isNaN(point._model.x) || isNaN(point._model.y);\n\t\t\t\t\t},\n\t\t\t\t\tupdateBezierControlPoints: function updateBezierControlPoints() {\n\t\t\t\t\t\tvar chartArea = this.chart.chartArea;\n\t\t\t\t\t\tvar meta = this.getMeta();\n\n\t\t\t\t\t\thelpers.each(meta.data, function (point, index) {\n\t\t\t\t\t\t\tvar model = point._model;\n\t\t\t\t\t\t\tvar controlPoints = helpers.splineCurve(helpers.previousItem(meta.data, index, true)._model, model, helpers.nextItem(meta.data, index, true)._model, model.tension);\n\n\t\t\t\t\t\t\t// Prevent the bezier going outside of the bounds of the graph\n\t\t\t\t\t\t\tmodel.controlPointPreviousX = Math.max(Math.min(controlPoints.previous.x, chartArea.right), chartArea.left);\n\t\t\t\t\t\t\tmodel.controlPointPreviousY = Math.max(Math.min(controlPoints.previous.y, chartArea.bottom), chartArea.top);\n\n\t\t\t\t\t\t\tmodel.controlPointNextX = Math.max(Math.min(controlPoints.next.x, chartArea.right), chartArea.left);\n\t\t\t\t\t\t\tmodel.controlPointNextY = Math.max(Math.min(controlPoints.next.y, chartArea.bottom), chartArea.top);\n\n\t\t\t\t\t\t\t// Now pivot the point for animation\n\t\t\t\t\t\t\tpoint.pivot();\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\n\t\t\t\t\tsetHoverStyle: function setHoverStyle(point) {\n\t\t\t\t\t\t// Point\n\t\t\t\t\t\tvar dataset = this.chart.data.datasets[point._datasetIndex];\n\t\t\t\t\t\tvar custom = point.custom || {};\n\t\t\t\t\t\tvar index = point._index;\n\t\t\t\t\t\tvar model = point._model;\n\n\t\t\t\t\t\tpoint.$previousStyle = {\n\t\t\t\t\t\t\tbackgroundColor: model.backgroundColor,\n\t\t\t\t\t\t\tborderColor: model.borderColor,\n\t\t\t\t\t\t\tborderWidth: model.borderWidth,\n\t\t\t\t\t\t\tradius: model.radius\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tmodel.radius = custom.hoverRadius ? custom.hoverRadius : helpers.valueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);\n\t\t\t\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.valueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));\n\t\t\t\t\t\tmodel.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.valueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));\n\t\t\t\t\t\tmodel.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.valueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t}, { \"26\": 26, \"41\": 41, \"46\": 46 }], 21: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\n\t\t\tdefaults._set('scatter', {\n\t\t\t\thover: {\n\t\t\t\t\tmode: 'single'\n\t\t\t\t},\n\n\t\t\t\tscales: {\n\t\t\t\t\txAxes: [{\n\t\t\t\t\t\tid: 'x-axis-1', // need an ID so datasets can reference the scale\n\t\t\t\t\t\ttype: 'linear', // scatter should not use a category axis\n\t\t\t\t\t\tposition: 'bottom'\n\t\t\t\t\t}],\n\t\t\t\t\tyAxes: [{\n\t\t\t\t\t\tid: 'y-axis-1',\n\t\t\t\t\t\ttype: 'linear',\n\t\t\t\t\t\tposition: 'left'\n\t\t\t\t\t}]\n\t\t\t\t},\n\n\t\t\t\tshowLines: false,\n\n\t\t\t\ttooltips: {\n\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\ttitle: function title() {\n\t\t\t\t\t\t\treturn ''; // doesn't make sense for scatter since data are formatted as a point\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabel: function label(item) {\n\t\t\t\t\t\t\treturn '(' + item.xLabel + ', ' + item.yLabel + ')';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\t// Scatter charts use line controllers\n\t\t\t\tChart.controllers.scatter = Chart.controllers.line;\n\t\t\t};\n\t\t}, { \"26\": 26 }], 22: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar Element = require(27);\n\n\t\t\tvar exports = module.exports = Element.extend({\n\t\t\t\tchart: null, // the animation associated chart instance\n\t\t\t\tcurrentStep: 0, // the current animation step\n\t\t\t\tnumSteps: 60, // default number of steps\n\t\t\t\teasing: '', // the easing to use for this animation\n\t\t\t\trender: null, // render function used by the animation service\n\n\t\t\t\tonAnimationProgress: null, // user specified callback to fire on each step of the animation\n\t\t\t\tonAnimationComplete: null // user specified callback to fire when the animation finishes\n\t\t\t});\n\n\t\t\t// DEPRECATIONS\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Chart.Animation instead\r\n * @prop Chart.Animation#animationObject\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\n\t\t\tObject.defineProperty(exports.prototype, 'animationObject', {\n\t\t\t\tget: function get() {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Chart.Animation#chart instead\r\n * @prop Chart.Animation#chartInstance\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\n\t\t\tObject.defineProperty(exports.prototype, 'chartInstance', {\n\t\t\t\tget: function get() {\n\t\t\t\t\treturn this.chart;\n\t\t\t\t},\n\t\t\t\tset: function set(value) {\n\t\t\t\t\tthis.chart = value;\n\t\t\t\t}\n\t\t\t});\n\t\t}, { \"27\": 27 }], 23: [function (require, module, exports) {\n\t\t\t/* global window: false */\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar helpers = require(46);\n\n\t\t\tdefaults._set('global', {\n\t\t\t\tanimation: {\n\t\t\t\t\tduration: 1000,\n\t\t\t\t\teasing: 'easeOutQuart',\n\t\t\t\t\tonProgress: helpers.noop,\n\t\t\t\t\tonComplete: helpers.noop\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmodule.exports = {\n\t\t\t\tframeDuration: 17,\n\t\t\t\tanimations: [],\n\t\t\t\tdropFrames: 0,\n\t\t\t\trequest: null,\n\n\t\t\t\t/**\r\n * @param {Chart} chart - The chart to animate.\r\n * @param {Chart.Animation} animation - The animation that we will animate.\r\n * @param {Number} duration - The animation duration in ms.\r\n * @param {Boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\r\n */\n\t\t\t\taddAnimation: function addAnimation(chart, animation, duration, lazy) {\n\t\t\t\t\tvar animations = this.animations;\n\t\t\t\t\tvar i, ilen;\n\n\t\t\t\t\tanimation.chart = chart;\n\n\t\t\t\t\tif (!lazy) {\n\t\t\t\t\t\tchart.animating = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (i = 0, ilen = animations.length; i < ilen; ++i) {\n\t\t\t\t\t\tif (animations[i].chart === chart) {\n\t\t\t\t\t\t\tanimations[i] = animation;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tanimations.push(animation);\n\n\t\t\t\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\n\t\t\t\t\tif (animations.length === 1) {\n\t\t\t\t\t\tthis.requestAnimationFrame();\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tcancelAnimation: function cancelAnimation(chart) {\n\t\t\t\t\tvar index = helpers.findIndex(this.animations, function (animation) {\n\t\t\t\t\t\treturn animation.chart === chart;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\tthis.animations.splice(index, 1);\n\t\t\t\t\t\tchart.animating = false;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\trequestAnimationFrame: function requestAnimationFrame() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tif (me.request === null) {\n\t\t\t\t\t\t// Skip animation frame requests until the active one is executed.\n\t\t\t\t\t\t// This can happen when processing mouse events, e.g. 'mousemove'\n\t\t\t\t\t\t// and 'mouseout' events will trigger multiple renders.\n\t\t\t\t\t\tme.request = helpers.requestAnimFrame.call(window, function () {\n\t\t\t\t\t\t\tme.request = null;\n\t\t\t\t\t\t\tme.startDigest();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\tstartDigest: function startDigest() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar startTime = Date.now();\n\t\t\t\t\tvar framesToDrop = 0;\n\n\t\t\t\t\tif (me.dropFrames > 1) {\n\t\t\t\t\t\tframesToDrop = Math.floor(me.dropFrames);\n\t\t\t\t\t\tme.dropFrames = me.dropFrames % 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tme.advance(1 + framesToDrop);\n\n\t\t\t\t\tvar endTime = Date.now();\n\n\t\t\t\t\tme.dropFrames += (endTime - startTime) / me.frameDuration;\n\n\t\t\t\t\t// Do we have more stuff to animate?\n\t\t\t\t\tif (me.animations.length > 0) {\n\t\t\t\t\t\tme.requestAnimationFrame();\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\tadvance: function advance(count) {\n\t\t\t\t\tvar animations = this.animations;\n\t\t\t\t\tvar animation, chart;\n\t\t\t\t\tvar i = 0;\n\n\t\t\t\t\twhile (i < animations.length) {\n\t\t\t\t\t\tanimation = animations[i];\n\t\t\t\t\t\tchart = animation.chart;\n\n\t\t\t\t\t\tanimation.currentStep = (animation.currentStep || 0) + count;\n\t\t\t\t\t\tanimation.currentStep = Math.min(animation.currentStep, animation.numSteps);\n\n\t\t\t\t\t\thelpers.callback(animation.render, [chart, animation], chart);\n\t\t\t\t\t\thelpers.callback(animation.onAnimationProgress, [animation], chart);\n\n\t\t\t\t\t\tif (animation.currentStep >= animation.numSteps) {\n\t\t\t\t\t\t\thelpers.callback(animation.onAnimationComplete, [animation], chart);\n\t\t\t\t\t\t\tchart.animating = false;\n\t\t\t\t\t\t\tanimations.splice(i, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}, { \"26\": 26, \"46\": 46 }], 24: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar Animation = require(22);\n\t\t\tvar animations = require(23);\n\t\t\tvar defaults = require(26);\n\t\t\tvar helpers = require(46);\n\t\t\tvar Interaction = require(29);\n\t\t\tvar layouts = require(31);\n\t\t\tvar platform = require(49);\n\t\t\tvar plugins = require(32);\n\t\t\tvar scaleService = require(34);\n\t\t\tvar Tooltip = require(36);\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\t// Create a dictionary of chart types, to allow for extension of existing types\n\t\t\t\tChart.types = {};\n\n\t\t\t\t// Store a reference to each instance - allowing us to globally resize chart instances on window resize.\n\t\t\t\t// Destroy method on the chart will remove the instance of the chart from this reference.\n\t\t\t\tChart.instances = {};\n\n\t\t\t\t// Controllers available for dataset visualization eg. bar, line, slice, etc.\n\t\t\t\tChart.controllers = {};\n\n\t\t\t\t/**\r\n * Initializes the given config with global and chart default values.\r\n */\n\t\t\t\tfunction initConfig(config) {\n\t\t\t\t\tconfig = config || {};\n\n\t\t\t\t\t// Do NOT use configMerge() for the data object because this method merges arrays\n\t\t\t\t\t// and so would change references to labels and datasets, preventing data updates.\n\t\t\t\t\tvar data = config.data = config.data || {};\n\t\t\t\t\tdata.datasets = data.datasets || [];\n\t\t\t\t\tdata.labels = data.labels || [];\n\n\t\t\t\t\tconfig.options = helpers.configMerge(defaults.global, defaults[config.type], config.options || {});\n\n\t\t\t\t\treturn config;\n\t\t\t\t}\n\n\t\t\t\t/**\r\n * Updates the config of the chart\r\n * @param chart {Chart} chart to update the options for\r\n */\n\t\t\t\tfunction updateConfig(chart) {\n\t\t\t\t\tvar newOptions = chart.options;\n\n\t\t\t\t\thelpers.each(chart.scales, function (scale) {\n\t\t\t\t\t\tlayouts.removeBox(chart, scale);\n\t\t\t\t\t});\n\n\t\t\t\t\tnewOptions = helpers.configMerge(Chart.defaults.global, Chart.defaults[chart.config.type], newOptions);\n\n\t\t\t\t\tchart.options = chart.config.options = newOptions;\n\t\t\t\t\tchart.ensureScalesHaveIDs();\n\t\t\t\t\tchart.buildOrUpdateScales();\n\t\t\t\t\t// Tooltip\n\t\t\t\t\tchart.tooltip._options = newOptions.tooltips;\n\t\t\t\t\tchart.tooltip.initialize();\n\t\t\t\t}\n\n\t\t\t\tfunction positionIsHorizontal(position) {\n\t\t\t\t\treturn position === 'top' || position === 'bottom';\n\t\t\t\t}\n\n\t\t\t\thelpers.extend(Chart.prototype, /** @lends Chart */{\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tconstruct: function construct(item, config) {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\tconfig = initConfig(config);\n\n\t\t\t\t\t\tvar context = platform.acquireContext(item, config);\n\t\t\t\t\t\tvar canvas = context && context.canvas;\n\t\t\t\t\t\tvar height = canvas && canvas.height;\n\t\t\t\t\t\tvar width = canvas && canvas.width;\n\n\t\t\t\t\t\tme.id = helpers.uid();\n\t\t\t\t\t\tme.ctx = context;\n\t\t\t\t\t\tme.canvas = canvas;\n\t\t\t\t\t\tme.config = config;\n\t\t\t\t\t\tme.width = width;\n\t\t\t\t\t\tme.height = height;\n\t\t\t\t\t\tme.aspectRatio = height ? width / height : null;\n\t\t\t\t\t\tme.options = config.options;\n\t\t\t\t\t\tme._bufferedRender = false;\n\n\t\t\t\t\t\t/**\r\n * Provided for backward compatibility, Chart and Chart.Controller have been merged,\r\n * the \"instance\" still need to be defined since it might be called from plugins.\r\n * @prop Chart#chart\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\t\t\t\tme.chart = me;\n\t\t\t\t\t\tme.controller = me; // chart.chart.controller #inception\n\n\t\t\t\t\t\t// Add the chart instance to the global namespace\n\t\t\t\t\t\tChart.instances[me.id] = me;\n\n\t\t\t\t\t\t// Define alias to the config data: `chart.data === chart.config.data`\n\t\t\t\t\t\tObject.defineProperty(me, 'data', {\n\t\t\t\t\t\t\tget: function get() {\n\t\t\t\t\t\t\t\treturn me.config.data;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tset: function set(value) {\n\t\t\t\t\t\t\t\tme.config.data = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (!context || !canvas) {\n\t\t\t\t\t\t\t// The given item is not a compatible context2d element, let's return before finalizing\n\t\t\t\t\t\t\t// the chart initialization but after setting basic chart / controller properties that\n\t\t\t\t\t\t\t// can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n\t\t\t\t\t\t\t// https://github.com/chartjs/Chart.js/issues/2807\n\t\t\t\t\t\t\tconsole.error(\"Failed to create chart: can't acquire context from the given item\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tme.initialize();\n\t\t\t\t\t\tme.update();\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tinitialize: function initialize() {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\t// Before init plugin notification\n\t\t\t\t\t\tplugins.notify(me, 'beforeInit');\n\n\t\t\t\t\t\thelpers.retinaScale(me, me.options.devicePixelRatio);\n\n\t\t\t\t\t\tme.bindEvents();\n\n\t\t\t\t\t\tif (me.options.responsive) {\n\t\t\t\t\t\t\t// Initial resize before chart draws (must be silent to preserve initial animations).\n\t\t\t\t\t\t\tme.resize(true);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Make sure scales have IDs and are built before we build any controllers.\n\t\t\t\t\t\tme.ensureScalesHaveIDs();\n\t\t\t\t\t\tme.buildOrUpdateScales();\n\t\t\t\t\t\tme.initToolTip();\n\n\t\t\t\t\t\t// After init plugin notification\n\t\t\t\t\t\tplugins.notify(me, 'afterInit');\n\n\t\t\t\t\t\treturn me;\n\t\t\t\t\t},\n\n\t\t\t\t\tclear: function clear() {\n\t\t\t\t\t\thelpers.canvas.clear(this);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\tstop: function stop() {\n\t\t\t\t\t\t// Stops any current animation loop occurring\n\t\t\t\t\t\tanimations.cancelAnimation(this);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\tresize: function resize(silent) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar options = me.options;\n\t\t\t\t\t\tvar canvas = me.canvas;\n\t\t\t\t\t\tvar aspectRatio = options.maintainAspectRatio && me.aspectRatio || null;\n\n\t\t\t\t\t\t// the canvas render width and height will be casted to integers so make sure that\n\t\t\t\t\t\t// the canvas display style uses the same integer values to avoid blurring effect.\n\n\t\t\t\t\t\t// Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed\n\t\t\t\t\t\tvar newWidth = Math.max(0, Math.floor(helpers.getMaximumWidth(canvas)));\n\t\t\t\t\t\tvar newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers.getMaximumHeight(canvas)));\n\n\t\t\t\t\t\tif (me.width === newWidth && me.height === newHeight) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcanvas.width = me.width = newWidth;\n\t\t\t\t\t\tcanvas.height = me.height = newHeight;\n\t\t\t\t\t\tcanvas.style.width = newWidth + 'px';\n\t\t\t\t\t\tcanvas.style.height = newHeight + 'px';\n\n\t\t\t\t\t\thelpers.retinaScale(me, options.devicePixelRatio);\n\n\t\t\t\t\t\tif (!silent) {\n\t\t\t\t\t\t\t// Notify any plugins about the resize\n\t\t\t\t\t\t\tvar newSize = { width: newWidth, height: newHeight };\n\t\t\t\t\t\t\tplugins.notify(me, 'resize', [newSize]);\n\n\t\t\t\t\t\t\t// Notify of resize\n\t\t\t\t\t\t\tif (me.options.onResize) {\n\t\t\t\t\t\t\t\tme.options.onResize(me, newSize);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tme.stop();\n\t\t\t\t\t\t\tme.update({\n\t\t\t\t\t\t\t\tduration: me.options.responsiveAnimationDuration\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tensureScalesHaveIDs: function ensureScalesHaveIDs() {\n\t\t\t\t\t\tvar options = this.options;\n\t\t\t\t\t\tvar scalesOptions = options.scales || {};\n\t\t\t\t\t\tvar scaleOptions = options.scale;\n\n\t\t\t\t\t\thelpers.each(scalesOptions.xAxes, function (xAxisOptions, index) {\n\t\t\t\t\t\t\txAxisOptions.id = xAxisOptions.id || 'x-axis-' + index;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\thelpers.each(scalesOptions.yAxes, function (yAxisOptions, index) {\n\t\t\t\t\t\t\tyAxisOptions.id = yAxisOptions.id || 'y-axis-' + index;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (scaleOptions) {\n\t\t\t\t\t\t\tscaleOptions.id = scaleOptions.id || 'scale';\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Builds a map of scale ID to scale object for future lookup.\r\n */\n\t\t\t\t\tbuildOrUpdateScales: function buildOrUpdateScales() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar options = me.options;\n\t\t\t\t\t\tvar scales = me.scales || {};\n\t\t\t\t\t\tvar items = [];\n\t\t\t\t\t\tvar updated = Object.keys(scales).reduce(function (obj, id) {\n\t\t\t\t\t\t\tobj[id] = false;\n\t\t\t\t\t\t\treturn obj;\n\t\t\t\t\t\t}, {});\n\n\t\t\t\t\t\tif (options.scales) {\n\t\t\t\t\t\t\titems = items.concat((options.scales.xAxes || []).map(function (xAxisOptions) {\n\t\t\t\t\t\t\t\treturn { options: xAxisOptions, dtype: 'category', dposition: 'bottom' };\n\t\t\t\t\t\t\t}), (options.scales.yAxes || []).map(function (yAxisOptions) {\n\t\t\t\t\t\t\t\treturn { options: yAxisOptions, dtype: 'linear', dposition: 'left' };\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.scale) {\n\t\t\t\t\t\t\titems.push({\n\t\t\t\t\t\t\t\toptions: options.scale,\n\t\t\t\t\t\t\t\tdtype: 'radialLinear',\n\t\t\t\t\t\t\t\tisDefault: true,\n\t\t\t\t\t\t\t\tdposition: 'chartArea'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thelpers.each(items, function (item) {\n\t\t\t\t\t\t\tvar scaleOptions = item.options;\n\t\t\t\t\t\t\tvar id = scaleOptions.id;\n\t\t\t\t\t\t\tvar scaleType = helpers.valueOrDefault(scaleOptions.type, item.dtype);\n\n\t\t\t\t\t\t\tif (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\n\t\t\t\t\t\t\t\tscaleOptions.position = item.dposition;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tupdated[id] = true;\n\t\t\t\t\t\t\tvar scale = null;\n\t\t\t\t\t\t\tif (id in scales && scales[id].type === scaleType) {\n\t\t\t\t\t\t\t\tscale = scales[id];\n\t\t\t\t\t\t\t\tscale.options = scaleOptions;\n\t\t\t\t\t\t\t\tscale.ctx = me.ctx;\n\t\t\t\t\t\t\t\tscale.chart = me;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar scaleClass = scaleService.getScaleConstructor(scaleType);\n\t\t\t\t\t\t\t\tif (!scaleClass) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tscale = new scaleClass({\n\t\t\t\t\t\t\t\t\tid: id,\n\t\t\t\t\t\t\t\t\ttype: scaleType,\n\t\t\t\t\t\t\t\t\toptions: scaleOptions,\n\t\t\t\t\t\t\t\t\tctx: me.ctx,\n\t\t\t\t\t\t\t\t\tchart: me\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tscales[scale.id] = scale;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tscale.mergeTicksOptions();\n\n\t\t\t\t\t\t\t// TODO(SB): I think we should be able to remove this custom case (options.scale)\n\t\t\t\t\t\t\t// and consider it as a regular scale part of the \"scales\"\" map only! This would\n\t\t\t\t\t\t\t// make the logic easier and remove some useless? custom code.\n\t\t\t\t\t\t\tif (item.isDefault) {\n\t\t\t\t\t\t\t\tme.scale = scale;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// clear up discarded scales\n\t\t\t\t\t\thelpers.each(updated, function (hasUpdated, id) {\n\t\t\t\t\t\t\tif (!hasUpdated) {\n\t\t\t\t\t\t\t\tdelete scales[id];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tme.scales = scales;\n\n\t\t\t\t\t\tscaleService.addScalesToLayout(this);\n\t\t\t\t\t},\n\n\t\t\t\t\tbuildOrUpdateControllers: function buildOrUpdateControllers() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar types = [];\n\t\t\t\t\t\tvar newControllers = [];\n\n\t\t\t\t\t\thelpers.each(me.data.datasets, function (dataset, datasetIndex) {\n\t\t\t\t\t\t\tvar meta = me.getDatasetMeta(datasetIndex);\n\t\t\t\t\t\t\tvar type = dataset.type || me.config.type;\n\n\t\t\t\t\t\t\tif (meta.type && meta.type !== type) {\n\t\t\t\t\t\t\t\tme.destroyDatasetMeta(datasetIndex);\n\t\t\t\t\t\t\t\tmeta = me.getDatasetMeta(datasetIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmeta.type = type;\n\n\t\t\t\t\t\t\ttypes.push(meta.type);\n\n\t\t\t\t\t\t\tif (meta.controller) {\n\t\t\t\t\t\t\t\tmeta.controller.updateIndex(datasetIndex);\n\t\t\t\t\t\t\t\tmeta.controller.linkScales();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar ControllerClass = Chart.controllers[meta.type];\n\t\t\t\t\t\t\t\tif (ControllerClass === undefined) {\n\t\t\t\t\t\t\t\t\tthrow new Error('\"' + meta.type + '\" is not a chart type.');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tmeta.controller = new ControllerClass(me, datasetIndex);\n\t\t\t\t\t\t\t\tnewControllers.push(meta.controller);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, me);\n\n\t\t\t\t\t\treturn newControllers;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Reset the elements of all datasets\r\n * @private\r\n */\n\t\t\t\t\tresetElements: function resetElements() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\thelpers.each(me.data.datasets, function (dataset, datasetIndex) {\n\t\t\t\t\t\t\tme.getDatasetMeta(datasetIndex).controller.reset();\n\t\t\t\t\t\t}, me);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Resets the chart back to it's state before the initial animation\r\n */\n\t\t\t\t\treset: function reset() {\n\t\t\t\t\t\tthis.resetElements();\n\t\t\t\t\t\tthis.tooltip.initialize();\n\t\t\t\t\t},\n\n\t\t\t\t\tupdate: function update(config) {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\tif (!config || (typeof config === \"undefined\" ? \"undefined\" : _typeof(config)) !== 'object') {\n\t\t\t\t\t\t\t// backwards compatibility\n\t\t\t\t\t\t\tconfig = {\n\t\t\t\t\t\t\t\tduration: config,\n\t\t\t\t\t\t\t\tlazy: arguments[1]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tupdateConfig(me);\n\n\t\t\t\t\t\t// plugins options references might have change, let's invalidate the cache\n\t\t\t\t\t\t// https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n\t\t\t\t\t\tplugins._invalidate(me);\n\n\t\t\t\t\t\tif (plugins.notify(me, 'beforeUpdate') === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// In case the entire data object changed\n\t\t\t\t\t\tme.tooltip._data = me.data;\n\n\t\t\t\t\t\t// Make sure dataset controllers are updated and new controllers are reset\n\t\t\t\t\t\tvar newControllers = me.buildOrUpdateControllers();\n\n\t\t\t\t\t\t// Make sure all dataset controllers have correct meta data counts\n\t\t\t\t\t\thelpers.each(me.data.datasets, function (dataset, datasetIndex) {\n\t\t\t\t\t\t\tme.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements();\n\t\t\t\t\t\t}, me);\n\n\t\t\t\t\t\tme.updateLayout();\n\n\t\t\t\t\t\t// Can only reset the new controllers after the scales have been updated\n\t\t\t\t\t\tif (me.options.animation && me.options.animation.duration) {\n\t\t\t\t\t\t\thelpers.each(newControllers, function (controller) {\n\t\t\t\t\t\t\t\tcontroller.reset();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tme.updateDatasets();\n\n\t\t\t\t\t\t// Need to reset tooltip in case it is displayed with elements that are removed\n\t\t\t\t\t\t// after update.\n\t\t\t\t\t\tme.tooltip.initialize();\n\n\t\t\t\t\t\t// Last active contains items that were previously in the tooltip.\n\t\t\t\t\t\t// When we reset the tooltip, we need to clear it\n\t\t\t\t\t\tme.lastActive = [];\n\n\t\t\t\t\t\t// Do this before render so that any plugins that need final scale updates can use it\n\t\t\t\t\t\tplugins.notify(me, 'afterUpdate');\n\n\t\t\t\t\t\tif (me._bufferedRender) {\n\t\t\t\t\t\t\tme._bufferedRequest = {\n\t\t\t\t\t\t\t\tduration: config.duration,\n\t\t\t\t\t\t\t\teasing: config.easing,\n\t\t\t\t\t\t\t\tlazy: config.lazy\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tme.render(config);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\r\n * hook, in which case, plugins will not be called on `afterLayout`.\r\n * @private\r\n */\n\t\t\t\t\tupdateLayout: function updateLayout() {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\tif (plugins.notify(me, 'beforeLayout') === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlayouts.update(this, this.width, this.height);\n\n\t\t\t\t\t\t/**\r\n * Provided for backward compatibility, use `afterLayout` instead.\r\n * @method IPlugin#afterScaleUpdate\r\n * @deprecated since version 2.5.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\t\t\t\tplugins.notify(me, 'afterScaleUpdate');\n\t\t\t\t\t\tplugins.notify(me, 'afterLayout');\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\r\n * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\r\n * @private\r\n */\n\t\t\t\t\tupdateDatasets: function updateDatasets() {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\tif (plugins.notify(me, 'beforeDatasetsUpdate') === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n\t\t\t\t\t\t\tme.updateDataset(i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tplugins.notify(me, 'afterDatasetsUpdate');\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\r\n * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\r\n * @private\r\n */\n\t\t\t\t\tupdateDataset: function updateDataset(index) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta = me.getDatasetMeta(index);\n\t\t\t\t\t\tvar args = {\n\t\t\t\t\t\t\tmeta: meta,\n\t\t\t\t\t\t\tindex: index\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmeta.controller.update();\n\n\t\t\t\t\t\tplugins.notify(me, 'afterDatasetUpdate', [args]);\n\t\t\t\t\t},\n\n\t\t\t\t\trender: function render(config) {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\tif (!config || (typeof config === \"undefined\" ? \"undefined\" : _typeof(config)) !== 'object') {\n\t\t\t\t\t\t\t// backwards compatibility\n\t\t\t\t\t\t\tconfig = {\n\t\t\t\t\t\t\t\tduration: config,\n\t\t\t\t\t\t\t\tlazy: arguments[1]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar duration = config.duration;\n\t\t\t\t\t\tvar lazy = config.lazy;\n\n\t\t\t\t\t\tif (plugins.notify(me, 'beforeRender') === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar animationOptions = me.options.animation;\n\t\t\t\t\t\tvar onComplete = function onComplete(animation) {\n\t\t\t\t\t\t\tplugins.notify(me, 'afterRender');\n\t\t\t\t\t\t\thelpers.callback(animationOptions && animationOptions.onComplete, [animation], me);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (animationOptions && (typeof duration !== 'undefined' && duration !== 0 || typeof duration === 'undefined' && animationOptions.duration !== 0)) {\n\t\t\t\t\t\t\tvar animation = new Animation({\n\t\t\t\t\t\t\t\tnumSteps: (duration || animationOptions.duration) / 16.66, // 60 fps\n\t\t\t\t\t\t\t\teasing: config.easing || animationOptions.easing,\n\n\t\t\t\t\t\t\t\trender: function render(chart, animationObject) {\n\t\t\t\t\t\t\t\t\tvar easingFunction = helpers.easing.effects[animationObject.easing];\n\t\t\t\t\t\t\t\t\tvar currentStep = animationObject.currentStep;\n\t\t\t\t\t\t\t\t\tvar stepDecimal = currentStep / animationObject.numSteps;\n\n\t\t\t\t\t\t\t\t\tchart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\tonAnimationProgress: animationOptions.onProgress,\n\t\t\t\t\t\t\t\tonAnimationComplete: onComplete\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tanimations.addAnimation(me, animation, duration, lazy);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tme.draw();\n\n\t\t\t\t\t\t\t// See https://github.com/chartjs/Chart.js/issues/3781\n\t\t\t\t\t\t\tonComplete(new Animation({ numSteps: 0, chart: me }));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn me;\n\t\t\t\t\t},\n\n\t\t\t\t\tdraw: function draw(easingValue) {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\tme.clear();\n\n\t\t\t\t\t\tif (helpers.isNullOrUndef(easingValue)) {\n\t\t\t\t\t\t\teasingValue = 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tme.transition(easingValue);\n\n\t\t\t\t\t\tif (me.width <= 0 || me.height <= 0) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Draw all the scales\n\t\t\t\t\t\thelpers.each(me.boxes, function (box) {\n\t\t\t\t\t\t\tbox.draw(me.chartArea);\n\t\t\t\t\t\t}, me);\n\n\t\t\t\t\t\tif (me.scale) {\n\t\t\t\t\t\t\tme.scale.draw();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tme.drawDatasets(easingValue);\n\t\t\t\t\t\tme._drawTooltip(easingValue);\n\n\t\t\t\t\t\tplugins.notify(me, 'afterDraw', [easingValue]);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\ttransition: function transition(easingValue) {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\tfor (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\t\t\t\tif (me.isDatasetVisible(i)) {\n\t\t\t\t\t\t\t\tme.getDatasetMeta(i).controller.transition(easingValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tme.tooltip.transition(easingValue);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\r\n * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\r\n * @private\r\n */\n\t\t\t\t\tdrawDatasets: function drawDatasets(easingValue) {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\tif (plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Draw datasets reversed to support proper line stacking\n\t\t\t\t\t\tfor (var i = (me.data.datasets || []).length - 1; i >= 0; --i) {\n\t\t\t\t\t\t\tif (me.isDatasetVisible(i)) {\n\t\t\t\t\t\t\t\tme.drawDataset(i, easingValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tplugins.notify(me, 'afterDatasetsDraw', [easingValue]);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\r\n * hook, in which case, plugins will not be called on `afterDatasetDraw`.\r\n * @private\r\n */\n\t\t\t\t\tdrawDataset: function drawDataset(index, easingValue) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta = me.getDatasetMeta(index);\n\t\t\t\t\t\tvar args = {\n\t\t\t\t\t\t\tmeta: meta,\n\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\teasingValue: easingValue\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmeta.controller.draw(easingValue);\n\n\t\t\t\t\t\tplugins.notify(me, 'afterDatasetDraw', [args]);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\r\n * hook, in which case, plugins will not be called on `afterTooltipDraw`.\r\n * @private\r\n */\n\t\t\t\t\t_drawTooltip: function _drawTooltip(easingValue) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar tooltip = me.tooltip;\n\t\t\t\t\t\tvar args = {\n\t\t\t\t\t\t\ttooltip: tooltip,\n\t\t\t\t\t\t\teasingValue: easingValue\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttooltip.draw();\n\n\t\t\t\t\t\tplugins.notify(me, 'afterTooltipDraw', [args]);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get the single element that was clicked on\n\t\t\t\t\t// @return : An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\n\t\t\t\t\tgetElementAtEvent: function getElementAtEvent(e) {\n\t\t\t\t\t\treturn Interaction.modes.single(this, e);\n\t\t\t\t\t},\n\n\t\t\t\t\tgetElementsAtEvent: function getElementsAtEvent(e) {\n\t\t\t\t\t\treturn Interaction.modes.label(this, e, { intersect: true });\n\t\t\t\t\t},\n\n\t\t\t\t\tgetElementsAtXAxis: function getElementsAtXAxis(e) {\n\t\t\t\t\t\treturn Interaction.modes['x-axis'](this, e, { intersect: true });\n\t\t\t\t\t},\n\n\t\t\t\t\tgetElementsAtEventForMode: function getElementsAtEventForMode(e, mode, options) {\n\t\t\t\t\t\tvar method = Interaction.modes[mode];\n\t\t\t\t\t\tif (typeof method === 'function') {\n\t\t\t\t\t\t\treturn method(this, e, options);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t},\n\n\t\t\t\t\tgetDatasetAtEvent: function getDatasetAtEvent(e) {\n\t\t\t\t\t\treturn Interaction.modes.dataset(this, e, { intersect: true });\n\t\t\t\t\t},\n\n\t\t\t\t\tgetDatasetMeta: function getDatasetMeta(datasetIndex) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar dataset = me.data.datasets[datasetIndex];\n\t\t\t\t\t\tif (!dataset._meta) {\n\t\t\t\t\t\t\tdataset._meta = {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar meta = dataset._meta[me.id];\n\t\t\t\t\t\tif (!meta) {\n\t\t\t\t\t\t\tmeta = dataset._meta[me.id] = {\n\t\t\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\t\t\tdata: [],\n\t\t\t\t\t\t\t\tdataset: null,\n\t\t\t\t\t\t\t\tcontroller: null,\n\t\t\t\t\t\t\t\thidden: null, // See isDatasetVisible() comment\n\t\t\t\t\t\t\t\txAxisID: null,\n\t\t\t\t\t\t\t\tyAxisID: null\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn meta;\n\t\t\t\t\t},\n\n\t\t\t\t\tgetVisibleDatasetCount: function getVisibleDatasetCount() {\n\t\t\t\t\t\tvar count = 0;\n\t\t\t\t\t\tfor (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n\t\t\t\t\t\t\tif (this.isDatasetVisible(i)) {\n\t\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn count;\n\t\t\t\t\t},\n\n\t\t\t\t\tisDatasetVisible: function isDatasetVisible(datasetIndex) {\n\t\t\t\t\t\tvar meta = this.getDatasetMeta(datasetIndex);\n\n\t\t\t\t\t\t// meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n\t\t\t\t\t\t// the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n\t\t\t\t\t\treturn typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\n\t\t\t\t\t},\n\n\t\t\t\t\tgenerateLegend: function generateLegend() {\n\t\t\t\t\t\treturn this.options.legendCallback(this);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tdestroyDatasetMeta: function destroyDatasetMeta(datasetIndex) {\n\t\t\t\t\t\tvar id = this.id;\n\t\t\t\t\t\tvar dataset = this.data.datasets[datasetIndex];\n\t\t\t\t\t\tvar meta = dataset._meta && dataset._meta[id];\n\n\t\t\t\t\t\tif (meta) {\n\t\t\t\t\t\t\tmeta.controller.destroy();\n\t\t\t\t\t\t\tdelete dataset._meta[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tdestroy: function destroy() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar canvas = me.canvas;\n\t\t\t\t\t\tvar i, ilen;\n\n\t\t\t\t\t\tme.stop();\n\n\t\t\t\t\t\t// dataset controllers need to cleanup associated data\n\t\t\t\t\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n\t\t\t\t\t\t\tme.destroyDatasetMeta(i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (canvas) {\n\t\t\t\t\t\t\tme.unbindEvents();\n\t\t\t\t\t\t\thelpers.canvas.clear(me);\n\t\t\t\t\t\t\tplatform.releaseContext(me.ctx);\n\t\t\t\t\t\t\tme.canvas = null;\n\t\t\t\t\t\t\tme.ctx = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tplugins.notify(me, 'destroy');\n\n\t\t\t\t\t\tdelete Chart.instances[me.id];\n\t\t\t\t\t},\n\n\t\t\t\t\ttoBase64Image: function toBase64Image() {\n\t\t\t\t\t\treturn this.canvas.toDataURL.apply(this.canvas, arguments);\n\t\t\t\t\t},\n\n\t\t\t\t\tinitToolTip: function initToolTip() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tme.tooltip = new Tooltip({\n\t\t\t\t\t\t\t_chart: me,\n\t\t\t\t\t\t\t_chartInstance: me, // deprecated, backward compatibility\n\t\t\t\t\t\t\t_data: me.data,\n\t\t\t\t\t\t\t_options: me.options.tooltips\n\t\t\t\t\t\t}, me);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tbindEvents: function bindEvents() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar listeners = me._listeners = {};\n\t\t\t\t\t\tvar listener = function listener() {\n\t\t\t\t\t\t\tme.eventHandler.apply(me, arguments);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\thelpers.each(me.options.events, function (type) {\n\t\t\t\t\t\t\tplatform.addEventListener(me, type, listener);\n\t\t\t\t\t\t\tlisteners[type] = listener;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Elements used to detect size change should not be injected for non responsive charts.\n\t\t\t\t\t\t// See https://github.com/chartjs/Chart.js/issues/2210\n\t\t\t\t\t\tif (me.options.responsive) {\n\t\t\t\t\t\t\tlistener = function listener() {\n\t\t\t\t\t\t\t\tme.resize();\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tplatform.addEventListener(me, 'resize', listener);\n\t\t\t\t\t\t\tlisteners.resize = listener;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tunbindEvents: function unbindEvents() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar listeners = me._listeners;\n\t\t\t\t\t\tif (!listeners) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelete me._listeners;\n\t\t\t\t\t\thelpers.each(listeners, function (listener, type) {\n\t\t\t\t\t\t\tplatform.removeEventListener(me, type, listener);\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\n\t\t\t\t\tupdateHoverStyle: function updateHoverStyle(elements, mode, enabled) {\n\t\t\t\t\t\tvar method = enabled ? 'setHoverStyle' : 'removeHoverStyle';\n\t\t\t\t\t\tvar element, i, ilen;\n\n\t\t\t\t\t\tfor (i = 0, ilen = elements.length; i < ilen; ++i) {\n\t\t\t\t\t\t\telement = elements[i];\n\t\t\t\t\t\t\tif (element) {\n\t\t\t\t\t\t\t\tthis.getDatasetMeta(element._datasetIndex).controller[method](element);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\teventHandler: function eventHandler(e) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar tooltip = me.tooltip;\n\n\t\t\t\t\t\tif (plugins.notify(me, 'beforeEvent', [e]) === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Buffer any update calls so that renders do not occur\n\t\t\t\t\t\tme._bufferedRender = true;\n\t\t\t\t\t\tme._bufferedRequest = null;\n\n\t\t\t\t\t\tvar changed = me.handleEvent(e);\n\t\t\t\t\t\t// for smooth tooltip animations issue #4989\n\t\t\t\t\t\t// the tooltip should be the source of change\n\t\t\t\t\t\t// Animation check workaround:\n\t\t\t\t\t\t// tooltip._start will be null when tooltip isn't animating\n\t\t\t\t\t\tif (tooltip) {\n\t\t\t\t\t\t\tchanged = tooltip._start ? tooltip.handleEvent(e) : changed | tooltip.handleEvent(e);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tplugins.notify(me, 'afterEvent', [e]);\n\n\t\t\t\t\t\tvar bufferedRequest = me._bufferedRequest;\n\t\t\t\t\t\tif (bufferedRequest) {\n\t\t\t\t\t\t\t// If we have an update that was triggered, we need to do a normal render\n\t\t\t\t\t\t\tme.render(bufferedRequest);\n\t\t\t\t\t\t} else if (changed && !me.animating) {\n\t\t\t\t\t\t\t// If entering, leaving, or changing elements, animate the change via pivot\n\t\t\t\t\t\t\tme.stop();\n\n\t\t\t\t\t\t\t// We only need to render at this point. Updating will cause scales to be\n\t\t\t\t\t\t\t// recomputed generating flicker & using more memory than necessary.\n\t\t\t\t\t\t\tme.render({\n\t\t\t\t\t\t\t\tduration: me.options.hover.animationDuration,\n\t\t\t\t\t\t\t\tlazy: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tme._bufferedRender = false;\n\t\t\t\t\t\tme._bufferedRequest = null;\n\n\t\t\t\t\t\treturn me;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Handle an event\r\n * @private\r\n * @param {IEvent} event the event to handle\r\n * @return {Boolean} true if the chart needs to re-render\r\n */\n\t\t\t\t\thandleEvent: function handleEvent(e) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar options = me.options || {};\n\t\t\t\t\t\tvar hoverOptions = options.hover;\n\t\t\t\t\t\tvar changed = false;\n\n\t\t\t\t\t\tme.lastActive = me.lastActive || [];\n\n\t\t\t\t\t\t// Find Active Elements for hover and tooltips\n\t\t\t\t\t\tif (e.type === 'mouseout') {\n\t\t\t\t\t\t\tme.active = [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tme.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Invoke onHover hook\n\t\t\t\t\t\t// Need to call with native event here to not break backwards compatibility\n\t\t\t\t\t\thelpers.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\n\n\t\t\t\t\t\tif (e.type === 'mouseup' || e.type === 'click') {\n\t\t\t\t\t\t\tif (options.onClick) {\n\t\t\t\t\t\t\t\t// Use e.native here for backwards compatibility\n\t\t\t\t\t\t\t\toptions.onClick.call(me, e.native, me.active);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Remove styling for last active (even if it may still be active)\n\t\t\t\t\t\tif (me.lastActive.length) {\n\t\t\t\t\t\t\tme.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Built in hover styling\n\t\t\t\t\t\tif (me.active.length && hoverOptions.mode) {\n\t\t\t\t\t\t\tme.updateHoverStyle(me.active, hoverOptions.mode, true);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchanged = !helpers.arrayEquals(me.active, me.lastActive);\n\n\t\t\t\t\t\t// Remember Last Actives\n\t\t\t\t\t\tme.lastActive = me.active;\n\n\t\t\t\t\t\treturn changed;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t/**\r\n * Provided for backward compatibility, use Chart instead.\r\n * @class Chart.Controller\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\t\tChart.Controller = Chart;\n\t\t\t};\n\t\t}, { \"22\": 22, \"23\": 23, \"26\": 26, \"29\": 29, \"31\": 31, \"32\": 32, \"34\": 34, \"36\": 36, \"46\": 46, \"49\": 49 }], 25: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(46);\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n\n\t\t\t\t/**\r\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\r\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\r\n * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\r\n */\n\t\t\t\tfunction listenArrayEvents(array, listener) {\n\t\t\t\t\tif (array._chartjs) {\n\t\t\t\t\t\tarray._chartjs.listeners.push(listener);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tObject.defineProperty(array, '_chartjs', {\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tenumerable: false,\n\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\tlisteners: [listener]\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tarrayEvents.forEach(function (key) {\n\t\t\t\t\t\tvar method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\t\t\tvar base = array[key];\n\n\t\t\t\t\t\tObject.defineProperty(array, key, {\n\t\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\t\tenumerable: false,\n\t\t\t\t\t\t\tvalue: function value() {\n\t\t\t\t\t\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\t\t\t\t\t\t\tvar res = base.apply(this, args);\n\n\t\t\t\t\t\t\t\thelpers.each(array._chartjs.listeners, function (object) {\n\t\t\t\t\t\t\t\t\tif (typeof object[method] === 'function') {\n\t\t\t\t\t\t\t\t\t\tobject[method].apply(object, args);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\treturn res;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t/**\r\n * Removes the given array event listener and cleanup extra attached properties (such as\r\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\r\n */\n\t\t\t\tfunction unlistenArrayEvents(array, listener) {\n\t\t\t\t\tvar stub = array._chartjs;\n\t\t\t\t\tif (!stub) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar listeners = stub.listeners;\n\t\t\t\t\tvar index = listeners.indexOf(listener);\n\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\tlisteners.splice(index, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (listeners.length > 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tarrayEvents.forEach(function (key) {\n\t\t\t\t\t\tdelete array[key];\n\t\t\t\t\t});\n\n\t\t\t\t\tdelete array._chartjs;\n\t\t\t\t}\n\n\t\t\t\t// Base class for all dataset controllers (line, bar, etc)\n\t\t\t\tChart.DatasetController = function (chart, datasetIndex) {\n\t\t\t\t\tthis.initialize(chart, datasetIndex);\n\t\t\t\t};\n\n\t\t\t\thelpers.extend(Chart.DatasetController.prototype, {\n\n\t\t\t\t\t/**\r\n * Element type used to generate a meta dataset (e.g. Chart.element.Line).\r\n * @type {Chart.core.element}\r\n */\n\t\t\t\t\tdatasetElementType: null,\n\n\t\t\t\t\t/**\r\n * Element type used to generate a meta data (e.g. Chart.element.Point).\r\n * @type {Chart.core.element}\r\n */\n\t\t\t\t\tdataElementType: null,\n\n\t\t\t\t\tinitialize: function initialize(chart, datasetIndex) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tme.chart = chart;\n\t\t\t\t\t\tme.index = datasetIndex;\n\t\t\t\t\t\tme.linkScales();\n\t\t\t\t\t\tme.addElements();\n\t\t\t\t\t},\n\n\t\t\t\t\tupdateIndex: function updateIndex(datasetIndex) {\n\t\t\t\t\t\tthis.index = datasetIndex;\n\t\t\t\t\t},\n\n\t\t\t\t\tlinkScales: function linkScales() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\n\t\t\t\t\t\tif (meta.xAxisID === null || !(meta.xAxisID in me.chart.scales)) {\n\t\t\t\t\t\t\tmeta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (meta.yAxisID === null || !(meta.yAxisID in me.chart.scales)) {\n\t\t\t\t\t\t\tmeta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tgetDataset: function getDataset() {\n\t\t\t\t\t\treturn this.chart.data.datasets[this.index];\n\t\t\t\t\t},\n\n\t\t\t\t\tgetMeta: function getMeta() {\n\t\t\t\t\t\treturn this.chart.getDatasetMeta(this.index);\n\t\t\t\t\t},\n\n\t\t\t\t\tgetScaleForId: function getScaleForId(scaleID) {\n\t\t\t\t\t\treturn this.chart.scales[scaleID];\n\t\t\t\t\t},\n\n\t\t\t\t\treset: function reset() {\n\t\t\t\t\t\tthis.update(true);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tdestroy: function destroy() {\n\t\t\t\t\t\tif (this._data) {\n\t\t\t\t\t\t\tunlistenArrayEvents(this._data, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tcreateMetaDataset: function createMetaDataset() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar type = me.datasetElementType;\n\t\t\t\t\t\treturn type && new type({\n\t\t\t\t\t\t\t_chart: me.chart,\n\t\t\t\t\t\t\t_datasetIndex: me.index\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\n\t\t\t\t\tcreateMetaData: function createMetaData(index) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar type = me.dataElementType;\n\t\t\t\t\t\treturn type && new type({\n\t\t\t\t\t\t\t_chart: me.chart,\n\t\t\t\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t\t\t\t_index: index\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\n\t\t\t\t\taddElements: function addElements() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar data = me.getDataset().data || [];\n\t\t\t\t\t\tvar metaData = meta.data;\n\t\t\t\t\t\tvar i, ilen;\n\n\t\t\t\t\t\tfor (i = 0, ilen = data.length; i < ilen; ++i) {\n\t\t\t\t\t\t\tmetaData[i] = metaData[i] || me.createMetaData(i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmeta.dataset = meta.dataset || me.createMetaDataset();\n\t\t\t\t\t},\n\n\t\t\t\t\taddElementAndReset: function addElementAndReset(index) {\n\t\t\t\t\t\tvar element = this.createMetaData(index);\n\t\t\t\t\t\tthis.getMeta().data.splice(index, 0, element);\n\t\t\t\t\t\tthis.updateElement(element, index, true);\n\t\t\t\t\t},\n\n\t\t\t\t\tbuildOrUpdateElements: function buildOrUpdateElements() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar dataset = me.getDataset();\n\t\t\t\t\t\tvar data = dataset.data || (dataset.data = []);\n\n\t\t\t\t\t\t// In order to correctly handle data addition/deletion animation (an thus simulate\n\t\t\t\t\t\t// real-time charts), we need to monitor these data modifications and synchronize\n\t\t\t\t\t\t// the internal meta data accordingly.\n\t\t\t\t\t\tif (me._data !== data) {\n\t\t\t\t\t\t\tif (me._data) {\n\t\t\t\t\t\t\t\t// This case happens when the user replaced the data array instance.\n\t\t\t\t\t\t\t\tunlistenArrayEvents(me._data, me);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlistenArrayEvents(data, me);\n\t\t\t\t\t\t\tme._data = data;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Re-sync meta data in case the user replaced the data array or if we missed\n\t\t\t\t\t\t// any updates and so make sure that we handle number of datapoints changing.\n\t\t\t\t\t\tme.resyncElements();\n\t\t\t\t\t},\n\n\t\t\t\t\tupdate: helpers.noop,\n\n\t\t\t\t\ttransition: function transition(easingValue) {\n\t\t\t\t\t\tvar meta = this.getMeta();\n\t\t\t\t\t\tvar elements = meta.data || [];\n\t\t\t\t\t\tvar ilen = elements.length;\n\t\t\t\t\t\tvar i = 0;\n\n\t\t\t\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\t\t\t\telements[i].transition(easingValue);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (meta.dataset) {\n\t\t\t\t\t\t\tmeta.dataset.transition(easingValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tdraw: function draw() {\n\t\t\t\t\t\tvar meta = this.getMeta();\n\t\t\t\t\t\tvar elements = meta.data || [];\n\t\t\t\t\t\tvar ilen = elements.length;\n\t\t\t\t\t\tvar i = 0;\n\n\t\t\t\t\t\tif (meta.dataset) {\n\t\t\t\t\t\t\tmeta.dataset.draw();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\t\t\t\telements[i].draw();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tremoveHoverStyle: function removeHoverStyle(element) {\n\t\t\t\t\t\thelpers.merge(element._model, element.$previousStyle || {});\n\t\t\t\t\t\tdelete element.$previousStyle;\n\t\t\t\t\t},\n\n\t\t\t\t\tsetHoverStyle: function setHoverStyle(element) {\n\t\t\t\t\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\n\t\t\t\t\t\tvar index = element._index;\n\t\t\t\t\t\tvar custom = element.custom || {};\n\t\t\t\t\t\tvar valueOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\t\t\t\tvar getHoverColor = helpers.getHoverColor;\n\t\t\t\t\t\tvar model = element._model;\n\n\t\t\t\t\t\telement.$previousStyle = {\n\t\t\t\t\t\t\tbackgroundColor: model.backgroundColor,\n\t\t\t\t\t\t\tborderColor: model.borderColor,\n\t\t\t\t\t\t\tborderWidth: model.borderWidth\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : valueOrDefault(dataset.hoverBackgroundColor, index, getHoverColor(model.backgroundColor));\n\t\t\t\t\t\tmodel.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : valueOrDefault(dataset.hoverBorderColor, index, getHoverColor(model.borderColor));\n\t\t\t\t\t\tmodel.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : valueOrDefault(dataset.hoverBorderWidth, index, model.borderWidth);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tresyncElements: function resyncElements() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar meta = me.getMeta();\n\t\t\t\t\t\tvar data = me.getDataset().data;\n\t\t\t\t\t\tvar numMeta = meta.data.length;\n\t\t\t\t\t\tvar numData = data.length;\n\n\t\t\t\t\t\tif (numData < numMeta) {\n\t\t\t\t\t\t\tmeta.data.splice(numData, numMeta - numData);\n\t\t\t\t\t\t} else if (numData > numMeta) {\n\t\t\t\t\t\t\tme.insertElements(numMeta, numData - numMeta);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tinsertElements: function insertElements(start, count) {\n\t\t\t\t\t\tfor (var i = 0; i < count; ++i) {\n\t\t\t\t\t\t\tthis.addElementAndReset(start + i);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tonDataPush: function onDataPush() {\n\t\t\t\t\t\tthis.insertElements(this.getDataset().data.length - 1, arguments.length);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tonDataPop: function onDataPop() {\n\t\t\t\t\t\tthis.getMeta().data.pop();\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tonDataShift: function onDataShift() {\n\t\t\t\t\t\tthis.getMeta().data.shift();\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tonDataSplice: function onDataSplice(start, count) {\n\t\t\t\t\t\tthis.getMeta().data.splice(start, count);\n\t\t\t\t\t\tthis.insertElements(start, arguments.length - 2);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tonDataUnshift: function onDataUnshift() {\n\t\t\t\t\t\tthis.insertElements(0, arguments.length);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tChart.DatasetController.extend = helpers.inherits;\n\t\t\t};\n\t\t}, { \"46\": 46 }], 26: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(46);\n\n\t\t\tmodule.exports = {\n\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t_set: function _set(scope, values) {\n\t\t\t\t\treturn helpers.merge(this[scope] || (this[scope] = {}), values);\n\t\t\t\t}\n\t\t\t};\n\t\t}, { \"46\": 46 }], 27: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar color = require(3);\n\t\t\tvar helpers = require(46);\n\n\t\t\tfunction interpolate(start, view, model, ease) {\n\t\t\t\tvar keys = Object.keys(model);\n\t\t\t\tvar i, ilen, key, actual, origin, target, type, c0, c1;\n\n\t\t\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\t\t\tkey = keys[i];\n\n\t\t\t\t\ttarget = model[key];\n\n\t\t\t\t\t// if a value is added to the model after pivot() has been called, the view\n\t\t\t\t\t// doesn't contain it, so let's initialize the view to the target value.\n\t\t\t\t\tif (!view.hasOwnProperty(key)) {\n\t\t\t\t\t\tview[key] = target;\n\t\t\t\t\t}\n\n\t\t\t\t\tactual = view[key];\n\n\t\t\t\t\tif (actual === target || key[0] === '_') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!start.hasOwnProperty(key)) {\n\t\t\t\t\t\tstart[key] = actual;\n\t\t\t\t\t}\n\n\t\t\t\t\torigin = start[key];\n\n\t\t\t\t\ttype = typeof target === \"undefined\" ? \"undefined\" : _typeof(target);\n\n\t\t\t\t\tif (type === (typeof origin === \"undefined\" ? \"undefined\" : _typeof(origin))) {\n\t\t\t\t\t\tif (type === 'string') {\n\t\t\t\t\t\t\tc0 = color(origin);\n\t\t\t\t\t\t\tif (c0.valid) {\n\t\t\t\t\t\t\t\tc1 = color(target);\n\t\t\t\t\t\t\t\tif (c1.valid) {\n\t\t\t\t\t\t\t\t\tview[key] = c1.mix(c0, ease).rgbString();\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (type === 'number' && isFinite(origin) && isFinite(target)) {\n\t\t\t\t\t\t\tview[key] = origin + (target - origin) * ease;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tview[key] = target;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar Element = function Element(configuration) {\n\t\t\t\thelpers.extend(this, configuration);\n\t\t\t\tthis.initialize.apply(this, arguments);\n\t\t\t};\n\n\t\t\thelpers.extend(Element.prototype, {\n\n\t\t\t\tinitialize: function initialize() {\n\t\t\t\t\tthis.hidden = false;\n\t\t\t\t},\n\n\t\t\t\tpivot: function pivot() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tif (!me._view) {\n\t\t\t\t\t\tme._view = helpers.clone(me._model);\n\t\t\t\t\t}\n\t\t\t\t\tme._start = {};\n\t\t\t\t\treturn me;\n\t\t\t\t},\n\n\t\t\t\ttransition: function transition(ease) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar model = me._model;\n\t\t\t\t\tvar start = me._start;\n\t\t\t\t\tvar view = me._view;\n\n\t\t\t\t\t// No animation -> No Transition\n\t\t\t\t\tif (!model || ease === 1) {\n\t\t\t\t\t\tme._view = model;\n\t\t\t\t\t\tme._start = null;\n\t\t\t\t\t\treturn me;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!view) {\n\t\t\t\t\t\tview = me._view = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!start) {\n\t\t\t\t\t\tstart = me._start = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tinterpolate(start, view, model, ease);\n\n\t\t\t\t\treturn me;\n\t\t\t\t},\n\n\t\t\t\ttooltipPosition: function tooltipPosition() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: this._model.x,\n\t\t\t\t\t\ty: this._model.y\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\thasValue: function hasValue() {\n\t\t\t\t\treturn helpers.isNumber(this._model.x) && helpers.isNumber(this._model.y);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tElement.extend = helpers.inherits;\n\n\t\t\tmodule.exports = Element;\n\t\t}, { \"3\": 3, \"46\": 46 }], 28: [function (require, module, exports) {\n\t\t\t/* global window: false */\n\t\t\t/* global document: false */\n\t\t\t'use strict';\n\n\t\t\tvar color = require(3);\n\t\t\tvar defaults = require(26);\n\t\t\tvar helpers = require(46);\n\t\t\tvar scaleService = require(34);\n\n\t\t\tmodule.exports = function () {\n\n\t\t\t\t// -- Basic js utility methods\n\n\t\t\t\thelpers.configMerge = function () /* objects ... */{\n\t\t\t\t\treturn helpers.merge(helpers.clone(arguments[0]), [].slice.call(arguments, 1), {\n\t\t\t\t\t\tmerger: function merger(key, target, source, options) {\n\t\t\t\t\t\t\tvar tval = target[key] || {};\n\t\t\t\t\t\t\tvar sval = source[key];\n\n\t\t\t\t\t\t\tif (key === 'scales') {\n\t\t\t\t\t\t\t\t// scale config merging is complex. Add our own function here for that\n\t\t\t\t\t\t\t\ttarget[key] = helpers.scaleMerge(tval, sval);\n\t\t\t\t\t\t\t} else if (key === 'scale') {\n\t\t\t\t\t\t\t\t// used in polar area & radar charts since there is only one scale\n\t\t\t\t\t\t\t\ttarget[key] = helpers.merge(tval, [scaleService.getScaleDefaults(sval.type), sval]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\thelpers._merger(key, target, source, options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\thelpers.scaleMerge = function () /* objects ... */{\n\t\t\t\t\treturn helpers.merge(helpers.clone(arguments[0]), [].slice.call(arguments, 1), {\n\t\t\t\t\t\tmerger: function merger(key, target, source, options) {\n\t\t\t\t\t\t\tif (key === 'xAxes' || key === 'yAxes') {\n\t\t\t\t\t\t\t\tvar slen = source[key].length;\n\t\t\t\t\t\t\t\tvar i, type, scale;\n\n\t\t\t\t\t\t\t\tif (!target[key]) {\n\t\t\t\t\t\t\t\t\ttarget[key] = [];\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfor (i = 0; i < slen; ++i) {\n\t\t\t\t\t\t\t\t\tscale = source[key][i];\n\t\t\t\t\t\t\t\t\ttype = helpers.valueOrDefault(scale.type, key === 'xAxes' ? 'category' : 'linear');\n\n\t\t\t\t\t\t\t\t\tif (i >= target[key].length) {\n\t\t\t\t\t\t\t\t\t\ttarget[key].push({});\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (!target[key][i].type || scale.type && scale.type !== target[key][i].type) {\n\t\t\t\t\t\t\t\t\t\t// new/untyped scale or type changed: let's apply the new defaults\n\t\t\t\t\t\t\t\t\t\t// then merge source scale to correctly overwrite the defaults.\n\t\t\t\t\t\t\t\t\t\thelpers.merge(target[key][i], [scaleService.getScaleDefaults(type), scale]);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// scales type are the same\n\t\t\t\t\t\t\t\t\t\thelpers.merge(target[key][i], scale);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\thelpers._merger(key, target, source, options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\thelpers.where = function (collection, filterCallback) {\n\t\t\t\t\tif (helpers.isArray(collection) && Array.prototype.filter) {\n\t\t\t\t\t\treturn collection.filter(filterCallback);\n\t\t\t\t\t}\n\t\t\t\t\tvar filtered = [];\n\n\t\t\t\t\thelpers.each(collection, function (item) {\n\t\t\t\t\t\tif (filterCallback(item)) {\n\t\t\t\t\t\t\tfiltered.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treturn filtered;\n\t\t\t\t};\n\t\t\t\thelpers.findIndex = Array.prototype.findIndex ? function (array, callback, scope) {\n\t\t\t\t\treturn array.findIndex(callback, scope);\n\t\t\t\t} : function (array, callback, scope) {\n\t\t\t\t\tscope = scope === undefined ? array : scope;\n\t\t\t\t\tfor (var i = 0, ilen = array.length; i < ilen; ++i) {\n\t\t\t\t\t\tif (callback.call(scope, array[i], i, array)) {\n\t\t\t\t\t\t\treturn i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn -1;\n\t\t\t\t};\n\t\t\t\thelpers.findNextWhere = function (arrayToSearch, filterCallback, startIndex) {\n\t\t\t\t\t// Default to start of the array\n\t\t\t\t\tif (helpers.isNullOrUndef(startIndex)) {\n\t\t\t\t\t\tstartIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n\t\t\t\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\t\t\t\tif (filterCallback(currentItem)) {\n\t\t\t\t\t\t\treturn currentItem;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\thelpers.findPreviousWhere = function (arrayToSearch, filterCallback, startIndex) {\n\t\t\t\t\t// Default to end of the array\n\t\t\t\t\tif (helpers.isNullOrUndef(startIndex)) {\n\t\t\t\t\t\tstartIndex = arrayToSearch.length;\n\t\t\t\t\t}\n\t\t\t\t\tfor (var i = startIndex - 1; i >= 0; i--) {\n\t\t\t\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\t\t\t\tif (filterCallback(currentItem)) {\n\t\t\t\t\t\t\treturn currentItem;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// -- Math methods\n\t\t\t\thelpers.isNumber = function (n) {\n\t\t\t\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t\t\t\t};\n\t\t\t\thelpers.almostEquals = function (x, y, epsilon) {\n\t\t\t\t\treturn Math.abs(x - y) < epsilon;\n\t\t\t\t};\n\t\t\t\thelpers.almostWhole = function (x, epsilon) {\n\t\t\t\t\tvar rounded = Math.round(x);\n\t\t\t\t\treturn rounded - epsilon < x && rounded + epsilon > x;\n\t\t\t\t};\n\t\t\t\thelpers.max = function (array) {\n\t\t\t\t\treturn array.reduce(function (max, value) {\n\t\t\t\t\t\tif (!isNaN(value)) {\n\t\t\t\t\t\t\treturn Math.max(max, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn max;\n\t\t\t\t\t}, Number.NEGATIVE_INFINITY);\n\t\t\t\t};\n\t\t\t\thelpers.min = function (array) {\n\t\t\t\t\treturn array.reduce(function (min, value) {\n\t\t\t\t\t\tif (!isNaN(value)) {\n\t\t\t\t\t\t\treturn Math.min(min, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn min;\n\t\t\t\t\t}, Number.POSITIVE_INFINITY);\n\t\t\t\t};\n\t\t\t\thelpers.sign = Math.sign ? function (x) {\n\t\t\t\t\treturn Math.sign(x);\n\t\t\t\t} : function (x) {\n\t\t\t\t\tx = +x; // convert to a number\n\t\t\t\t\tif (x === 0 || isNaN(x)) {\n\t\t\t\t\t\treturn x;\n\t\t\t\t\t}\n\t\t\t\t\treturn x > 0 ? 1 : -1;\n\t\t\t\t};\n\t\t\t\thelpers.log10 = Math.log10 ? function (x) {\n\t\t\t\t\treturn Math.log10(x);\n\t\t\t\t} : function (x) {\n\t\t\t\t\tvar exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\n\t\t\t\t\t// Check for whole powers of 10,\n\t\t\t\t\t// which due to floating point rounding error should be corrected.\n\t\t\t\t\tvar powerOf10 = Math.round(exponent);\n\t\t\t\t\tvar isPowerOf10 = x === Math.pow(10, powerOf10);\n\n\t\t\t\t\treturn isPowerOf10 ? powerOf10 : exponent;\n\t\t\t\t};\n\t\t\t\thelpers.toRadians = function (degrees) {\n\t\t\t\t\treturn degrees * (Math.PI / 180);\n\t\t\t\t};\n\t\t\t\thelpers.toDegrees = function (radians) {\n\t\t\t\t\treturn radians * (180 / Math.PI);\n\t\t\t\t};\n\t\t\t\t// Gets the angle from vertical upright to the point about a centre.\n\t\t\t\thelpers.getAngleFromPoint = function (centrePoint, anglePoint) {\n\t\t\t\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x;\n\t\t\t\t\tvar distanceFromYCenter = anglePoint.y - centrePoint.y;\n\t\t\t\t\tvar radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n\t\t\t\t\tvar angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n\t\t\t\t\tif (angle < -0.5 * Math.PI) {\n\t\t\t\t\t\tangle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tangle: angle,\n\t\t\t\t\t\tdistance: radialDistanceFromCenter\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\thelpers.distanceBetweenPoints = function (pt1, pt2) {\n\t\t\t\t\treturn Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n\t\t\t\t};\n\t\t\t\thelpers.aliasPixel = function (pixelWidth) {\n\t\t\t\t\treturn pixelWidth % 2 === 0 ? 0 : 0.5;\n\t\t\t\t};\n\t\t\t\thelpers.splineCurve = function (firstPoint, middlePoint, afterPoint, t) {\n\t\t\t\t\t// Props to Rob Spencer at scaled innovation for his post on splining between points\n\t\t\t\t\t// http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n\t\t\t\t\t// This function must also respect \"skipped\" points\n\n\t\t\t\t\tvar previous = firstPoint.skip ? middlePoint : firstPoint;\n\t\t\t\t\tvar current = middlePoint;\n\t\t\t\t\tvar next = afterPoint.skip ? middlePoint : afterPoint;\n\n\t\t\t\t\tvar d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\n\t\t\t\t\tvar d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\n\n\t\t\t\t\tvar s01 = d01 / (d01 + d12);\n\t\t\t\t\tvar s12 = d12 / (d01 + d12);\n\n\t\t\t\t\t// If all points are the same, s01 & s02 will be inf\n\t\t\t\t\ts01 = isNaN(s01) ? 0 : s01;\n\t\t\t\t\ts12 = isNaN(s12) ? 0 : s12;\n\n\t\t\t\t\tvar fa = t * s01; // scaling factor for triangle Ta\n\t\t\t\t\tvar fb = t * s12;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tprevious: {\n\t\t\t\t\t\t\tx: current.x - fa * (next.x - previous.x),\n\t\t\t\t\t\t\ty: current.y - fa * (next.y - previous.y)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnext: {\n\t\t\t\t\t\t\tx: current.x + fb * (next.x - previous.x),\n\t\t\t\t\t\t\ty: current.y + fb * (next.y - previous.y)\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\thelpers.EPSILON = Number.EPSILON || 1e-14;\n\t\t\t\thelpers.splineCurveMonotone = function (points) {\n\t\t\t\t\t// This function calculates Bézier control points in a similar way than |splineCurve|,\n\t\t\t\t\t// but preserves monotonicity of the provided data and ensures no local extremums are added\n\t\t\t\t\t// between the dataset discrete points due to the interpolation.\n\t\t\t\t\t// See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n\n\t\t\t\t\tvar pointsWithTangents = (points || []).map(function (point) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tmodel: point._model,\n\t\t\t\t\t\t\tdeltaK: 0,\n\t\t\t\t\t\t\tmK: 0\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\t\t// Calculate slopes (deltaK) and initialize tangents (mK)\n\t\t\t\t\tvar pointsLen = pointsWithTangents.length;\n\t\t\t\t\tvar i, pointBefore, pointCurrent, pointAfter;\n\t\t\t\t\tfor (i = 0; i < pointsLen; ++i) {\n\t\t\t\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\t\t\t\tif (pointCurrent.model.skip) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n\t\t\t\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\t\t\t\t\t\tif (pointAfter && !pointAfter.model.skip) {\n\t\t\t\t\t\t\tvar slopeDeltaX = pointAfter.model.x - pointCurrent.model.x;\n\n\t\t\t\t\t\t\t// In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n\t\t\t\t\t\t\tpointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!pointBefore || pointBefore.model.skip) {\n\t\t\t\t\t\t\tpointCurrent.mK = pointCurrent.deltaK;\n\t\t\t\t\t\t} else if (!pointAfter || pointAfter.model.skip) {\n\t\t\t\t\t\t\tpointCurrent.mK = pointBefore.deltaK;\n\t\t\t\t\t\t} else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\n\t\t\t\t\t\t\tpointCurrent.mK = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Adjust tangents to ensure monotonic properties\n\t\t\t\t\tvar alphaK, betaK, tauK, squaredMagnitude;\n\t\t\t\t\tfor (i = 0; i < pointsLen - 1; ++i) {\n\t\t\t\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\t\t\t\tpointAfter = pointsWithTangents[i + 1];\n\t\t\t\t\t\tif (pointCurrent.model.skip || pointAfter.model.skip) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (helpers.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\n\t\t\t\t\t\t\tpointCurrent.mK = pointAfter.mK = 0;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\talphaK = pointCurrent.mK / pointCurrent.deltaK;\n\t\t\t\t\t\tbetaK = pointAfter.mK / pointCurrent.deltaK;\n\t\t\t\t\t\tsquaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n\t\t\t\t\t\tif (squaredMagnitude <= 9) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttauK = 3 / Math.sqrt(squaredMagnitude);\n\t\t\t\t\t\tpointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\n\t\t\t\t\t\tpointAfter.mK = betaK * tauK * pointCurrent.deltaK;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Compute control points\n\t\t\t\t\tvar deltaX;\n\t\t\t\t\tfor (i = 0; i < pointsLen; ++i) {\n\t\t\t\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\t\t\t\tif (pointCurrent.model.skip) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n\t\t\t\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\t\t\t\t\t\tif (pointBefore && !pointBefore.model.skip) {\n\t\t\t\t\t\t\tdeltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\n\t\t\t\t\t\t\tpointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\n\t\t\t\t\t\t\tpointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pointAfter && !pointAfter.model.skip) {\n\t\t\t\t\t\t\tdeltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\n\t\t\t\t\t\t\tpointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\n\t\t\t\t\t\t\tpointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\thelpers.nextItem = function (collection, index, loop) {\n\t\t\t\t\tif (loop) {\n\t\t\t\t\t\treturn index >= collection.length - 1 ? collection[0] : collection[index + 1];\n\t\t\t\t\t}\n\t\t\t\t\treturn index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\n\t\t\t\t};\n\t\t\t\thelpers.previousItem = function (collection, index, loop) {\n\t\t\t\t\tif (loop) {\n\t\t\t\t\t\treturn index <= 0 ? collection[collection.length - 1] : collection[index - 1];\n\t\t\t\t\t}\n\t\t\t\t\treturn index <= 0 ? collection[0] : collection[index - 1];\n\t\t\t\t};\n\t\t\t\t// Implementation of the nice number algorithm used in determining where axis labels will go\n\t\t\t\thelpers.niceNum = function (range, round) {\n\t\t\t\t\tvar exponent = Math.floor(helpers.log10(range));\n\t\t\t\t\tvar fraction = range / Math.pow(10, exponent);\n\t\t\t\t\tvar niceFraction;\n\n\t\t\t\t\tif (round) {\n\t\t\t\t\t\tif (fraction < 1.5) {\n\t\t\t\t\t\t\tniceFraction = 1;\n\t\t\t\t\t\t} else if (fraction < 3) {\n\t\t\t\t\t\t\tniceFraction = 2;\n\t\t\t\t\t\t} else if (fraction < 7) {\n\t\t\t\t\t\t\tniceFraction = 5;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tniceFraction = 10;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (fraction <= 1.0) {\n\t\t\t\t\t\tniceFraction = 1;\n\t\t\t\t\t} else if (fraction <= 2) {\n\t\t\t\t\t\tniceFraction = 2;\n\t\t\t\t\t} else if (fraction <= 5) {\n\t\t\t\t\t\tniceFraction = 5;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tniceFraction = 10;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn niceFraction * Math.pow(10, exponent);\n\t\t\t\t};\n\t\t\t\t// Request animation polyfill - http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n\t\t\t\thelpers.requestAnimFrame = function () {\n\t\t\t\t\tif (typeof window === 'undefined') {\n\t\t\t\t\t\treturn function (callback) {\n\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n\t\t\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\n\t\t\t\t\t};\n\t\t\t\t}();\n\t\t\t\t// -- DOM methods\n\t\t\t\thelpers.getRelativePosition = function (evt, chart) {\n\t\t\t\t\tvar mouseX, mouseY;\n\t\t\t\t\tvar e = evt.originalEvent || evt;\n\t\t\t\t\tvar canvas = evt.target || evt.srcElement;\n\t\t\t\t\tvar boundingRect = canvas.getBoundingClientRect();\n\n\t\t\t\t\tvar touches = e.touches;\n\t\t\t\t\tif (touches && touches.length > 0) {\n\t\t\t\t\t\tmouseX = touches[0].clientX;\n\t\t\t\t\t\tmouseY = touches[0].clientY;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmouseX = e.clientX;\n\t\t\t\t\t\tmouseY = e.clientY;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Scale mouse coordinates into canvas coordinates\n\t\t\t\t\t// by following the pattern laid out by 'jerryj' in the comments of\n\t\t\t\t\t// http://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\n\t\t\t\t\tvar paddingLeft = parseFloat(helpers.getStyle(canvas, 'padding-left'));\n\t\t\t\t\tvar paddingTop = parseFloat(helpers.getStyle(canvas, 'padding-top'));\n\t\t\t\t\tvar paddingRight = parseFloat(helpers.getStyle(canvas, 'padding-right'));\n\t\t\t\t\tvar paddingBottom = parseFloat(helpers.getStyle(canvas, 'padding-bottom'));\n\t\t\t\t\tvar width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\n\t\t\t\t\tvar height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;\n\n\t\t\t\t\t// We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\n\t\t\t\t\t// the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\n\t\t\t\t\tmouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / width * canvas.width / chart.currentDevicePixelRatio);\n\t\t\t\t\tmouseY = Math.round((mouseY - boundingRect.top - paddingTop) / height * canvas.height / chart.currentDevicePixelRatio);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: mouseX,\n\t\t\t\t\t\ty: mouseY\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Private helper function to convert max-width/max-height values that may be percentages into a number\n\t\t\t\tfunction parseMaxStyle(styleValue, node, parentProperty) {\n\t\t\t\t\tvar valueInPixels;\n\t\t\t\t\tif (typeof styleValue === 'string') {\n\t\t\t\t\t\tvalueInPixels = parseInt(styleValue, 10);\n\n\t\t\t\t\t\tif (styleValue.indexOf('%') !== -1) {\n\t\t\t\t\t\t\t// percentage * size in dimension\n\t\t\t\t\t\t\tvalueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueInPixels = styleValue;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn valueInPixels;\n\t\t\t\t}\n\n\t\t\t\t/**\r\n * Returns if the given value contains an effective constraint.\r\n * @private\r\n */\n\t\t\t\tfunction isConstrainedValue(value) {\n\t\t\t\t\treturn value !== undefined && value !== null && value !== 'none';\n\t\t\t\t}\n\n\t\t\t\t// Private helper to get a constraint dimension\n\t\t\t\t// @param domNode : the node to check the constraint on\n\t\t\t\t// @param maxStyle : the style that defines the maximum for the direction we are using (maxWidth / maxHeight)\n\t\t\t\t// @param percentageProperty : property of parent to use when calculating width as a percentage\n\t\t\t\t// @see http://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser\n\t\t\t\tfunction getConstraintDimension(domNode, maxStyle, percentageProperty) {\n\t\t\t\t\tvar view = document.defaultView;\n\t\t\t\t\tvar parentNode = helpers._getParentNode(domNode);\n\t\t\t\t\tvar constrainedNode = view.getComputedStyle(domNode)[maxStyle];\n\t\t\t\t\tvar constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\n\t\t\t\t\tvar hasCNode = isConstrainedValue(constrainedNode);\n\t\t\t\t\tvar hasCContainer = isConstrainedValue(constrainedContainer);\n\t\t\t\t\tvar infinity = Number.POSITIVE_INFINITY;\n\n\t\t\t\t\tif (hasCNode || hasCContainer) {\n\t\t\t\t\t\treturn Math.min(hasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity, hasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn 'none';\n\t\t\t\t}\n\t\t\t\t// returns Number or undefined if no constraint\n\t\t\t\thelpers.getConstraintWidth = function (domNode) {\n\t\t\t\t\treturn getConstraintDimension(domNode, 'max-width', 'clientWidth');\n\t\t\t\t};\n\t\t\t\t// returns Number or undefined if no constraint\n\t\t\t\thelpers.getConstraintHeight = function (domNode) {\n\t\t\t\t\treturn getConstraintDimension(domNode, 'max-height', 'clientHeight');\n\t\t\t\t};\n\t\t\t\t/**\r\n * @private\r\n \t */\n\t\t\t\thelpers._calculatePadding = function (container, padding, parentDimension) {\n\t\t\t\t\tpadding = helpers.getStyle(container, padding);\n\n\t\t\t\t\treturn padding.indexOf('%') > -1 ? parentDimension / parseInt(padding, 10) : parseInt(padding, 10);\n\t\t\t\t};\n\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\thelpers._getParentNode = function (domNode) {\n\t\t\t\t\tvar parent = domNode.parentNode;\n\t\t\t\t\tif (parent && parent.host) {\n\t\t\t\t\t\tparent = parent.host;\n\t\t\t\t\t}\n\t\t\t\t\treturn parent;\n\t\t\t\t};\n\t\t\t\thelpers.getMaximumWidth = function (domNode) {\n\t\t\t\t\tvar container = helpers._getParentNode(domNode);\n\t\t\t\t\tif (!container) {\n\t\t\t\t\t\treturn domNode.clientWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar clientWidth = container.clientWidth;\n\t\t\t\t\tvar paddingLeft = helpers._calculatePadding(container, 'padding-left', clientWidth);\n\t\t\t\t\tvar paddingRight = helpers._calculatePadding(container, 'padding-right', clientWidth);\n\n\t\t\t\t\tvar w = clientWidth - paddingLeft - paddingRight;\n\t\t\t\t\tvar cw = helpers.getConstraintWidth(domNode);\n\t\t\t\t\treturn isNaN(cw) ? w : Math.min(w, cw);\n\t\t\t\t};\n\t\t\t\thelpers.getMaximumHeight = function (domNode) {\n\t\t\t\t\tvar container = helpers._getParentNode(domNode);\n\t\t\t\t\tif (!container) {\n\t\t\t\t\t\treturn domNode.clientHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar clientHeight = container.clientHeight;\n\t\t\t\t\tvar paddingTop = helpers._calculatePadding(container, 'padding-top', clientHeight);\n\t\t\t\t\tvar paddingBottom = helpers._calculatePadding(container, 'padding-bottom', clientHeight);\n\n\t\t\t\t\tvar h = clientHeight - paddingTop - paddingBottom;\n\t\t\t\t\tvar ch = helpers.getConstraintHeight(domNode);\n\t\t\t\t\treturn isNaN(ch) ? h : Math.min(h, ch);\n\t\t\t\t};\n\t\t\t\thelpers.getStyle = function (el, property) {\n\t\t\t\t\treturn el.currentStyle ? el.currentStyle[property] : document.defaultView.getComputedStyle(el, null).getPropertyValue(property);\n\t\t\t\t};\n\t\t\t\thelpers.retinaScale = function (chart, forceRatio) {\n\t\t\t\t\tvar pixelRatio = chart.currentDevicePixelRatio = forceRatio || typeof window !== 'undefined' && window.devicePixelRatio || 1;\n\t\t\t\t\tif (pixelRatio === 1) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar canvas = chart.canvas;\n\t\t\t\t\tvar height = chart.height;\n\t\t\t\t\tvar width = chart.width;\n\n\t\t\t\t\tcanvas.height = height * pixelRatio;\n\t\t\t\t\tcanvas.width = width * pixelRatio;\n\t\t\t\t\tchart.ctx.scale(pixelRatio, pixelRatio);\n\n\t\t\t\t\t// If no style has been set on the canvas, the render size is used as display size,\n\t\t\t\t\t// making the chart visually bigger, so let's enforce it to the \"correct\" values.\n\t\t\t\t\t// See https://github.com/chartjs/Chart.js/issues/3575\n\t\t\t\t\tif (!canvas.style.height && !canvas.style.width) {\n\t\t\t\t\t\tcanvas.style.height = height + 'px';\n\t\t\t\t\t\tcanvas.style.width = width + 'px';\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t// -- Canvas methods\n\t\t\t\thelpers.fontString = function (pixelSize, fontStyle, fontFamily) {\n\t\t\t\t\treturn fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n\t\t\t\t};\n\t\t\t\thelpers.longestText = function (ctx, font, arrayOfThings, cache) {\n\t\t\t\t\tcache = cache || {};\n\t\t\t\t\tvar data = cache.data = cache.data || {};\n\t\t\t\t\tvar gc = cache.garbageCollect = cache.garbageCollect || [];\n\n\t\t\t\t\tif (cache.font !== font) {\n\t\t\t\t\t\tdata = cache.data = {};\n\t\t\t\t\t\tgc = cache.garbageCollect = [];\n\t\t\t\t\t\tcache.font = font;\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.font = font;\n\t\t\t\t\tvar longest = 0;\n\t\t\t\t\thelpers.each(arrayOfThings, function (thing) {\n\t\t\t\t\t\t// Undefined strings and arrays should not be measured\n\t\t\t\t\t\tif (thing !== undefined && thing !== null && helpers.isArray(thing) !== true) {\n\t\t\t\t\t\t\tlongest = helpers.measureText(ctx, data, gc, longest, thing);\n\t\t\t\t\t\t} else if (helpers.isArray(thing)) {\n\t\t\t\t\t\t\t// if it is an array lets measure each element\n\t\t\t\t\t\t\t// to do maybe simplify this function a bit so we can do this more recursively?\n\t\t\t\t\t\t\thelpers.each(thing, function (nestedThing) {\n\t\t\t\t\t\t\t\t// Undefined strings and arrays should not be measured\n\t\t\t\t\t\t\t\tif (nestedThing !== undefined && nestedThing !== null && !helpers.isArray(nestedThing)) {\n\t\t\t\t\t\t\t\t\tlongest = helpers.measureText(ctx, data, gc, longest, nestedThing);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tvar gcLen = gc.length / 2;\n\t\t\t\t\tif (gcLen > arrayOfThings.length) {\n\t\t\t\t\t\tfor (var i = 0; i < gcLen; i++) {\n\t\t\t\t\t\t\tdelete data[gc[i]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgc.splice(0, gcLen);\n\t\t\t\t\t}\n\t\t\t\t\treturn longest;\n\t\t\t\t};\n\t\t\t\thelpers.measureText = function (ctx, data, gc, longest, string) {\n\t\t\t\t\tvar textWidth = data[string];\n\t\t\t\t\tif (!textWidth) {\n\t\t\t\t\t\ttextWidth = data[string] = ctx.measureText(string).width;\n\t\t\t\t\t\tgc.push(string);\n\t\t\t\t\t}\n\t\t\t\t\tif (textWidth > longest) {\n\t\t\t\t\t\tlongest = textWidth;\n\t\t\t\t\t}\n\t\t\t\t\treturn longest;\n\t\t\t\t};\n\t\t\t\thelpers.numberOfLabelLines = function (arrayOfThings) {\n\t\t\t\t\tvar numberOfLines = 1;\n\t\t\t\t\thelpers.each(arrayOfThings, function (thing) {\n\t\t\t\t\t\tif (helpers.isArray(thing)) {\n\t\t\t\t\t\t\tif (thing.length > numberOfLines) {\n\t\t\t\t\t\t\t\tnumberOfLines = thing.length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn numberOfLines;\n\t\t\t\t};\n\n\t\t\t\thelpers.color = !color ? function (value) {\n\t\t\t\t\tconsole.error('Color.js not found!');\n\t\t\t\t\treturn value;\n\t\t\t\t} : function (value) {\n\t\t\t\t\t/* global CanvasGradient */\n\t\t\t\t\tif (value instanceof CanvasGradient) {\n\t\t\t\t\t\tvalue = defaults.global.defaultColor;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn color(value);\n\t\t\t\t};\n\n\t\t\t\thelpers.getHoverColor = function (colorValue) {\n\t\t\t\t\t/* global CanvasPattern */\n\t\t\t\t\treturn colorValue instanceof CanvasPattern ? colorValue : helpers.color(colorValue).saturate(0.5).darken(0.1).rgbString();\n\t\t\t\t};\n\t\t\t};\n\t\t}, { \"26\": 26, \"3\": 3, \"34\": 34, \"46\": 46 }], 29: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(46);\n\n\t\t\t/**\r\n * Helper function to get relative position for an event\r\n * @param {Event|IEvent} event - The event to get the position for\r\n * @param {Chart} chart - The chart\r\n * @returns {Point} the event position\r\n */\n\t\t\tfunction getRelativePosition(e, chart) {\n\t\t\t\tif (e.native) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: e.x,\n\t\t\t\t\t\ty: e.y\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn helpers.getRelativePosition(e, chart);\n\t\t\t}\n\n\t\t\t/**\r\n * Helper function to traverse all of the visible elements in the chart\r\n * @param chart {chart} the chart\r\n * @param handler {Function} the callback to execute for each visible item\r\n */\n\t\t\tfunction parseVisibleItems(chart, handler) {\n\t\t\t\tvar datasets = chart.data.datasets;\n\t\t\t\tvar meta, i, j, ilen, jlen;\n\n\t\t\t\tfor (i = 0, ilen = datasets.length; i < ilen; ++i) {\n\t\t\t\t\tif (!chart.isDatasetVisible(i)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\t\tfor (j = 0, jlen = meta.data.length; j < jlen; ++j) {\n\t\t\t\t\t\tvar element = meta.data[j];\n\t\t\t\t\t\tif (!element._view.skip) {\n\t\t\t\t\t\t\thandler(element);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\r\n * Helper function to get the items that intersect the event position\r\n * @param items {ChartElement[]} elements to filter\r\n * @param position {Point} the point to be nearest to\r\n * @return {ChartElement[]} the nearest items\r\n */\n\t\t\tfunction getIntersectItems(chart, position) {\n\t\t\t\tvar elements = [];\n\n\t\t\t\tparseVisibleItems(chart, function (element) {\n\t\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\t\telements.push(element);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn elements;\n\t\t\t}\n\n\t\t\t/**\r\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\r\n * @param chart {Chart} the chart to look at elements from\r\n * @param position {Point} the point to be nearest to\r\n * @param intersect {Boolean} if true, only consider items that intersect the position\r\n * @param distanceMetric {Function} function to provide the distance between points\r\n * @return {ChartElement[]} the nearest items\r\n */\n\t\t\tfunction getNearestItems(chart, position, intersect, distanceMetric) {\n\t\t\t\tvar minDistance = Number.POSITIVE_INFINITY;\n\t\t\t\tvar nearestItems = [];\n\n\t\t\t\tparseVisibleItems(chart, function (element) {\n\t\t\t\t\tif (intersect && !element.inRange(position.x, position.y)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar center = element.getCenterPoint();\n\t\t\t\t\tvar distance = distanceMetric(position, center);\n\n\t\t\t\t\tif (distance < minDistance) {\n\t\t\t\t\t\tnearestItems = [element];\n\t\t\t\t\t\tminDistance = distance;\n\t\t\t\t\t} else if (distance === minDistance) {\n\t\t\t\t\t\t// Can have multiple items at the same distance in which case we sort by size\n\t\t\t\t\t\tnearestItems.push(element);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn nearestItems;\n\t\t\t}\n\n\t\t\t/**\r\n * Get a distance metric function for two points based on the\r\n * axis mode setting\r\n * @param {String} axis the axis mode. x|y|xy\r\n */\n\t\t\tfunction getDistanceMetricForAxis(axis) {\n\t\t\t\tvar useX = axis.indexOf('x') !== -1;\n\t\t\t\tvar useY = axis.indexOf('y') !== -1;\n\n\t\t\t\treturn function (pt1, pt2) {\n\t\t\t\t\tvar deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n\t\t\t\t\tvar deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n\t\t\t\t\treturn Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfunction indexMode(chart, e, options) {\n\t\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\t\t// Default axis for index mode is 'x' to match old behaviour\n\t\t\t\toptions.axis = options.axis || 'x';\n\t\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\t\t\t\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\t\t\t\tvar elements = [];\n\n\t\t\t\tif (!items.length) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\tchart.data.datasets.forEach(function (dataset, datasetIndex) {\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex)) {\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\t\tvar element = meta.data[items[0]._index];\n\n\t\t\t\t\t\t// don't count items that are skipped (null data)\n\t\t\t\t\t\tif (element && !element._view.skip) {\n\t\t\t\t\t\t\telements.push(element);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn elements;\n\t\t\t}\n\n\t\t\t/**\r\n * @interface IInteractionOptions\r\n */\n\t\t\t/**\r\n * If true, only consider items that intersect the point\r\n * @name IInterfaceOptions#boolean\r\n * @type Boolean\r\n */\n\n\t\t\t/**\r\n * Contains interaction related functions\r\n * @namespace Chart.Interaction\r\n */\n\t\t\tmodule.exports = {\n\t\t\t\t// Helper function for different modes\n\t\t\t\tmodes: {\n\t\t\t\t\tsingle: function single(chart, e) {\n\t\t\t\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\t\t\t\tvar elements = [];\n\n\t\t\t\t\t\tparseVisibleItems(chart, function (element) {\n\t\t\t\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\t\t\t\telements.push(element);\n\t\t\t\t\t\t\t\treturn elements;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn elements.slice(0, 1);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @function Chart.Interaction.modes.label\r\n * @deprecated since version 2.4.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\t\t\tlabel: indexMode,\n\n\t\t\t\t\t/**\r\n * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\r\n * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\r\n * @function Chart.Interaction.modes.index\r\n * @since v2.4.0\r\n * @param chart {chart} the chart we are returning items from\r\n * @param e {Event} the event we are find things at\r\n * @param options {IInteractionOptions} options to use during interaction\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n\t\t\t\t\tindex: indexMode,\n\n\t\t\t\t\t/**\r\n * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\r\n * If the options.intersect is false, we find the nearest item and return the items in that dataset\r\n * @function Chart.Interaction.modes.dataset\r\n * @param chart {chart} the chart we are returning items from\r\n * @param e {Event} the event we are find things at\r\n * @param options {IInteractionOptions} options to use during interaction\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n\t\t\t\t\tdataset: function dataset(chart, e, options) {\n\t\t\t\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\t\t\t\toptions.axis = options.axis || 'xy';\n\t\t\t\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\t\t\t\t\t\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\n\t\t\t\t\t\tif (items.length > 0) {\n\t\t\t\t\t\t\titems = chart.getDatasetMeta(items[0]._datasetIndex).data;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn items;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @function Chart.Interaction.modes.x-axis\r\n * @deprecated since version 2.4.0. Use index mode and intersect == true\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\t\t\t'x-axis': function xAxis(chart, e) {\n\t\t\t\t\t\treturn indexMode(chart, e, { intersect: false });\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Point mode returns all elements that hit test based on the event position\r\n * of the event\r\n * @function Chart.Interaction.modes.intersect\r\n * @param chart {chart} the chart we are returning items from\r\n * @param e {Event} the event we are find things at\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n\t\t\t\t\tpoint: function point(chart, e) {\n\t\t\t\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\t\t\t\treturn getIntersectItems(chart, position);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * nearest mode returns the element closest to the point\r\n * @function Chart.Interaction.modes.intersect\r\n * @param chart {chart} the chart we are returning items from\r\n * @param e {Event} the event we are find things at\r\n * @param options {IInteractionOptions} options to use\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n\t\t\t\t\tnearest: function nearest(chart, e, options) {\n\t\t\t\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\t\t\t\toptions.axis = options.axis || 'xy';\n\t\t\t\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\t\t\t\t\t\tvar nearestItems = getNearestItems(chart, position, options.intersect, distanceMetric);\n\n\t\t\t\t\t\t// We have multiple items at the same distance from the event. Now sort by smallest\n\t\t\t\t\t\tif (nearestItems.length > 1) {\n\t\t\t\t\t\t\tnearestItems.sort(function (a, b) {\n\t\t\t\t\t\t\t\tvar sizeA = a.getArea();\n\t\t\t\t\t\t\t\tvar sizeB = b.getArea();\n\t\t\t\t\t\t\t\tvar ret = sizeA - sizeB;\n\n\t\t\t\t\t\t\t\tif (ret === 0) {\n\t\t\t\t\t\t\t\t\t// if equal sort by dataset index\n\t\t\t\t\t\t\t\t\tret = a._datasetIndex - b._datasetIndex;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Return only 1 item\n\t\t\t\t\t\treturn nearestItems.slice(0, 1);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * x mode returns the elements that hit-test at the current x coordinate\r\n * @function Chart.Interaction.modes.x\r\n * @param chart {chart} the chart we are returning items from\r\n * @param e {Event} the event we are find things at\r\n * @param options {IInteractionOptions} options to use\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n\t\t\t\t\tx: function x(chart, e, options) {\n\t\t\t\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\t\t\t\tvar items = [];\n\t\t\t\t\t\tvar intersectsItem = false;\n\n\t\t\t\t\t\tparseVisibleItems(chart, function (element) {\n\t\t\t\t\t\t\tif (element.inXRange(position.x)) {\n\t\t\t\t\t\t\t\titems.push(element);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\t\t\t\tintersectsItem = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// If we want to trigger on an intersect and we don't have any items\n\t\t\t\t\t\t// that intersect the position, return nothing\n\t\t\t\t\t\tif (options.intersect && !intersectsItem) {\n\t\t\t\t\t\t\titems = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn items;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * y mode returns the elements that hit-test at the current y coordinate\r\n * @function Chart.Interaction.modes.y\r\n * @param chart {chart} the chart we are returning items from\r\n * @param e {Event} the event we are find things at\r\n * @param options {IInteractionOptions} options to use\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n\t\t\t\t\ty: function y(chart, e, options) {\n\t\t\t\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\t\t\t\tvar items = [];\n\t\t\t\t\t\tvar intersectsItem = false;\n\n\t\t\t\t\t\tparseVisibleItems(chart, function (element) {\n\t\t\t\t\t\t\tif (element.inYRange(position.y)) {\n\t\t\t\t\t\t\t\titems.push(element);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\t\t\t\tintersectsItem = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// If we want to trigger on an intersect and we don't have any items\n\t\t\t\t\t\t// that intersect the position, return nothing\n\t\t\t\t\t\tif (options.intersect && !intersectsItem) {\n\t\t\t\t\t\t\titems = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn items;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}, { \"46\": 46 }], 30: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\n\t\t\tdefaults._set('global', {\n\t\t\t\tresponsive: true,\n\t\t\t\tresponsiveAnimationDuration: 0,\n\t\t\t\tmaintainAspectRatio: true,\n\t\t\t\tevents: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'],\n\t\t\t\thover: {\n\t\t\t\t\tonHover: null,\n\t\t\t\t\tmode: 'nearest',\n\t\t\t\t\tintersect: true,\n\t\t\t\t\tanimationDuration: 400\n\t\t\t\t},\n\t\t\t\tonClick: null,\n\t\t\t\tdefaultColor: 'rgba(0,0,0,0.1)',\n\t\t\t\tdefaultFontColor: '#666',\n\t\t\t\tdefaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\t\t\t\tdefaultFontSize: 12,\n\t\t\t\tdefaultFontStyle: 'normal',\n\t\t\t\tshowLines: true,\n\n\t\t\t\t// Element defaults defined in element extensions\n\t\t\t\telements: {},\n\n\t\t\t\t// Layout options such as padding\n\t\t\t\tlayout: {\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmodule.exports = function () {\n\n\t\t\t\t// Occupy the global variable of Chart, and create a simple base class\n\t\t\t\tvar Chart = function Chart(item, config) {\n\t\t\t\t\tthis.construct(item, config);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\tChart.Chart = Chart;\n\n\t\t\t\treturn Chart;\n\t\t\t};\n\t\t}, { \"26\": 26 }], 31: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(46);\n\n\t\t\tfunction filterByPosition(array, position) {\n\t\t\t\treturn helpers.where(array, function (v) {\n\t\t\t\t\treturn v.position === position;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction sortByWeight(array, reverse) {\n\t\t\t\tarray.forEach(function (v, i) {\n\t\t\t\t\tv._tmpIndex_ = i;\n\t\t\t\t\treturn v;\n\t\t\t\t});\n\t\t\t\tarray.sort(function (a, b) {\n\t\t\t\t\tvar v0 = reverse ? b : a;\n\t\t\t\t\tvar v1 = reverse ? a : b;\n\t\t\t\t\treturn v0.weight === v1.weight ? v0._tmpIndex_ - v1._tmpIndex_ : v0.weight - v1.weight;\n\t\t\t\t});\n\t\t\t\tarray.forEach(function (v) {\n\t\t\t\t\tdelete v._tmpIndex_;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t/**\r\n * @interface ILayoutItem\r\n * @prop {String} position - The position of the item in the chart layout. Possible values are\r\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\r\n * @prop {Number} weight - The weight used to sort the item. Higher weights are further away from the chart area\r\n * @prop {Boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\r\n * @prop {Function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\r\n * @prop {Function} update - Takes two parameters: width and height. Returns size of item\r\n * @prop {Function} getPadding - Returns an object with padding on the edges\r\n * @prop {Number} width - Width of item. Must be valid after update()\r\n * @prop {Number} height - Height of item. Must be valid after update()\r\n * @prop {Number} left - Left edge of the item. Set by layout system and cannot be used in update\r\n * @prop {Number} top - Top edge of the item. Set by layout system and cannot be used in update\r\n * @prop {Number} right - Right edge of the item. Set by layout system and cannot be used in update\r\n * @prop {Number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\r\n */\n\n\t\t\t// The layout service is very self explanatory. It's responsible for the layout within a chart.\n\t\t\t// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n\t\t\t// It is this service's responsibility of carrying out that layout.\n\t\t\tmodule.exports = {\n\t\t\t\tdefaults: {},\n\n\t\t\t\t/**\r\n * Register a box to a chart.\r\n * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\r\n * @param {Chart} chart - the chart to use\r\n * @param {ILayoutItem} item - the item to add to be layed out\r\n */\n\t\t\t\taddBox: function addBox(chart, item) {\n\t\t\t\t\tif (!chart.boxes) {\n\t\t\t\t\t\tchart.boxes = [];\n\t\t\t\t\t}\n\n\t\t\t\t\t// initialize item with default values\n\t\t\t\t\titem.fullWidth = item.fullWidth || false;\n\t\t\t\t\titem.position = item.position || 'top';\n\t\t\t\t\titem.weight = item.weight || 0;\n\n\t\t\t\t\tchart.boxes.push(item);\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Remove a layoutItem from a chart\r\n * @param {Chart} chart - the chart to remove the box from\r\n * @param {Object} layoutItem - the item to remove from the layout\r\n */\n\t\t\t\tremoveBox: function removeBox(chart, layoutItem) {\n\t\t\t\t\tvar index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\tchart.boxes.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Sets (or updates) options on the given `item`.\r\n * @param {Chart} chart - the chart in which the item lives (or will be added to)\r\n * @param {Object} item - the item to configure with the given options\r\n * @param {Object} options - the new item options.\r\n */\n\t\t\t\tconfigure: function configure(chart, item, options) {\n\t\t\t\t\tvar props = ['fullWidth', 'position', 'weight'];\n\t\t\t\t\tvar ilen = props.length;\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tvar prop;\n\n\t\t\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\t\t\tprop = props[i];\n\t\t\t\t\t\tif (options.hasOwnProperty(prop)) {\n\t\t\t\t\t\t\titem[prop] = options[prop];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Fits boxes of the given chart into the given size by having each box measure itself\r\n * then running a fitting algorithm\r\n * @param {Chart} chart - the chart\r\n * @param {Number} width - the width to fit into\r\n * @param {Number} height - the height to fit into\r\n */\n\t\t\t\tupdate: function update(chart, width, height) {\n\t\t\t\t\tif (!chart) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar layoutOptions = chart.options.layout || {};\n\t\t\t\t\tvar padding = helpers.options.toPadding(layoutOptions.padding);\n\t\t\t\t\tvar leftPadding = padding.left;\n\t\t\t\t\tvar rightPadding = padding.right;\n\t\t\t\t\tvar topPadding = padding.top;\n\t\t\t\t\tvar bottomPadding = padding.bottom;\n\n\t\t\t\t\tvar leftBoxes = filterByPosition(chart.boxes, 'left');\n\t\t\t\t\tvar rightBoxes = filterByPosition(chart.boxes, 'right');\n\t\t\t\t\tvar topBoxes = filterByPosition(chart.boxes, 'top');\n\t\t\t\t\tvar bottomBoxes = filterByPosition(chart.boxes, 'bottom');\n\t\t\t\t\tvar chartAreaBoxes = filterByPosition(chart.boxes, 'chartArea');\n\n\t\t\t\t\t// Sort boxes by weight. A higher weight is further away from the chart area\n\t\t\t\t\tsortByWeight(leftBoxes, true);\n\t\t\t\t\tsortByWeight(rightBoxes, false);\n\t\t\t\t\tsortByWeight(topBoxes, true);\n\t\t\t\t\tsortByWeight(bottomBoxes, false);\n\n\t\t\t\t\t// Essentially we now have any number of boxes on each of the 4 sides.\n\t\t\t\t\t// Our canvas looks like the following.\n\t\t\t\t\t// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n\t\t\t\t\t// B1 is the bottom axis\n\t\t\t\t\t// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n\t\t\t\t\t// These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n\t\t\t\t\t// an error will be thrown.\n\t\t\t\t\t//\n\t\t\t\t\t// |----------------------------------------------------|\n\t\t\t\t\t// | T1 (Full Width) |\n\t\t\t\t\t// |----------------------------------------------------|\n\t\t\t\t\t// | | | T2 | |\n\t\t\t\t\t// | |----|-------------------------------------|----|\n\t\t\t\t\t// | | | C1 | | C2 | |\n\t\t\t\t\t// | | |----| |----| |\n\t\t\t\t\t// | | | | |\n\t\t\t\t\t// | L1 | L2 | ChartArea (C0) | R1 |\n\t\t\t\t\t// | | | | |\n\t\t\t\t\t// | | |----| |----| |\n\t\t\t\t\t// | | | C3 | | C4 | |\n\t\t\t\t\t// | |----|-------------------------------------|----|\n\t\t\t\t\t// | | | B1 | |\n\t\t\t\t\t// |----------------------------------------------------|\n\t\t\t\t\t// | B2 (Full Width) |\n\t\t\t\t\t// |----------------------------------------------------|\n\t\t\t\t\t//\n\t\t\t\t\t// What we do to find the best sizing, we do the following\n\t\t\t\t\t// 1. Determine the minimum size of the chart area.\n\t\t\t\t\t// 2. Split the remaining width equally between each vertical axis\n\t\t\t\t\t// 3. Split the remaining height equally between each horizontal axis\n\t\t\t\t\t// 4. Give each layout the maximum size it can be. The layout will return it's minimum size\n\t\t\t\t\t// 5. Adjust the sizes of each axis based on it's minimum reported size.\n\t\t\t\t\t// 6. Refit each axis\n\t\t\t\t\t// 7. Position each axis in the final location\n\t\t\t\t\t// 8. Tell the chart the final location of the chart area\n\t\t\t\t\t// 9. Tell any axes that overlay the chart area the positions of the chart area\n\n\t\t\t\t\t// Step 1\n\t\t\t\t\tvar chartWidth = width - leftPadding - rightPadding;\n\t\t\t\t\tvar chartHeight = height - topPadding - bottomPadding;\n\t\t\t\t\tvar chartAreaWidth = chartWidth / 2; // min 50%\n\t\t\t\t\tvar chartAreaHeight = chartHeight / 2; // min 50%\n\n\t\t\t\t\t// Step 2\n\t\t\t\t\tvar verticalBoxWidth = (width - chartAreaWidth) / (leftBoxes.length + rightBoxes.length);\n\n\t\t\t\t\t// Step 3\n\t\t\t\t\tvar horizontalBoxHeight = (height - chartAreaHeight) / (topBoxes.length + bottomBoxes.length);\n\n\t\t\t\t\t// Step 4\n\t\t\t\t\tvar maxChartAreaWidth = chartWidth;\n\t\t\t\t\tvar maxChartAreaHeight = chartHeight;\n\t\t\t\t\tvar minBoxSizes = [];\n\n\t\t\t\t\tfunction getMinimumBoxSize(box) {\n\t\t\t\t\t\tvar minSize;\n\t\t\t\t\t\tvar isHorizontal = box.isHorizontal();\n\n\t\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\t\tminSize = box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, horizontalBoxHeight);\n\t\t\t\t\t\t\tmaxChartAreaHeight -= minSize.height;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tminSize = box.update(verticalBoxWidth, maxChartAreaHeight);\n\t\t\t\t\t\t\tmaxChartAreaWidth -= minSize.width;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tminBoxSizes.push({\n\t\t\t\t\t\t\thorizontal: isHorizontal,\n\t\t\t\t\t\t\tminSize: minSize,\n\t\t\t\t\t\t\tbox: box\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\thelpers.each(leftBoxes.concat(rightBoxes, topBoxes, bottomBoxes), getMinimumBoxSize);\n\n\t\t\t\t\t// If a horizontal box has padding, we move the left boxes over to avoid ugly charts (see issue #2478)\n\t\t\t\t\tvar maxHorizontalLeftPadding = 0;\n\t\t\t\t\tvar maxHorizontalRightPadding = 0;\n\t\t\t\t\tvar maxVerticalTopPadding = 0;\n\t\t\t\t\tvar maxVerticalBottomPadding = 0;\n\n\t\t\t\t\thelpers.each(topBoxes.concat(bottomBoxes), function (horizontalBox) {\n\t\t\t\t\t\tif (horizontalBox.getPadding) {\n\t\t\t\t\t\t\tvar boxPadding = horizontalBox.getPadding();\n\t\t\t\t\t\t\tmaxHorizontalLeftPadding = Math.max(maxHorizontalLeftPadding, boxPadding.left);\n\t\t\t\t\t\t\tmaxHorizontalRightPadding = Math.max(maxHorizontalRightPadding, boxPadding.right);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\thelpers.each(leftBoxes.concat(rightBoxes), function (verticalBox) {\n\t\t\t\t\t\tif (verticalBox.getPadding) {\n\t\t\t\t\t\t\tvar boxPadding = verticalBox.getPadding();\n\t\t\t\t\t\t\tmaxVerticalTopPadding = Math.max(maxVerticalTopPadding, boxPadding.top);\n\t\t\t\t\t\t\tmaxVerticalBottomPadding = Math.max(maxVerticalBottomPadding, boxPadding.bottom);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could\n\t\t\t\t\t// be if the axes are drawn at their minimum sizes.\n\t\t\t\t\t// Steps 5 & 6\n\t\t\t\t\tvar totalLeftBoxesWidth = leftPadding;\n\t\t\t\t\tvar totalRightBoxesWidth = rightPadding;\n\t\t\t\t\tvar totalTopBoxesHeight = topPadding;\n\t\t\t\t\tvar totalBottomBoxesHeight = bottomPadding;\n\n\t\t\t\t\t// Function to fit a box\n\t\t\t\t\tfunction fitBox(box) {\n\t\t\t\t\t\tvar minBoxSize = helpers.findNextWhere(minBoxSizes, function (minBox) {\n\t\t\t\t\t\t\treturn minBox.box === box;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (minBoxSize) {\n\t\t\t\t\t\t\tif (box.isHorizontal()) {\n\t\t\t\t\t\t\t\tvar scaleMargin = {\n\t\t\t\t\t\t\t\t\tleft: Math.max(totalLeftBoxesWidth, maxHorizontalLeftPadding),\n\t\t\t\t\t\t\t\t\tright: Math.max(totalRightBoxesWidth, maxHorizontalRightPadding),\n\t\t\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t\t\tbottom: 0\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends\n\t\t\t\t\t\t\t\t// on the margin. Sometimes they need to increase in size slightly\n\t\t\t\t\t\t\t\tbox.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbox.update(minBoxSize.minSize.width, maxChartAreaHeight);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update, and calculate the left and right margins for the horizontal boxes\n\t\t\t\t\thelpers.each(leftBoxes.concat(rightBoxes), fitBox);\n\n\t\t\t\t\thelpers.each(leftBoxes, function (box) {\n\t\t\t\t\t\ttotalLeftBoxesWidth += box.width;\n\t\t\t\t\t});\n\n\t\t\t\t\thelpers.each(rightBoxes, function (box) {\n\t\t\t\t\t\ttotalRightBoxesWidth += box.width;\n\t\t\t\t\t});\n\n\t\t\t\t\t// Set the Left and Right margins for the horizontal boxes\n\t\t\t\t\thelpers.each(topBoxes.concat(bottomBoxes), fitBox);\n\n\t\t\t\t\t// Figure out how much margin is on the top and bottom of the vertical boxes\n\t\t\t\t\thelpers.each(topBoxes, function (box) {\n\t\t\t\t\t\ttotalTopBoxesHeight += box.height;\n\t\t\t\t\t});\n\n\t\t\t\t\thelpers.each(bottomBoxes, function (box) {\n\t\t\t\t\t\ttotalBottomBoxesHeight += box.height;\n\t\t\t\t\t});\n\n\t\t\t\t\tfunction finalFitVerticalBox(box) {\n\t\t\t\t\t\tvar minBoxSize = helpers.findNextWhere(minBoxSizes, function (minSize) {\n\t\t\t\t\t\t\treturn minSize.box === box;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tvar scaleMargin = {\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\t\ttop: totalTopBoxesHeight,\n\t\t\t\t\t\t\tbottom: totalBottomBoxesHeight\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (minBoxSize) {\n\t\t\t\t\t\t\tbox.update(minBoxSize.minSize.width, maxChartAreaHeight, scaleMargin);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Let the left layout know the final margin\n\t\t\t\t\thelpers.each(leftBoxes.concat(rightBoxes), finalFitVerticalBox);\n\n\t\t\t\t\t// Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance)\n\t\t\t\t\ttotalLeftBoxesWidth = leftPadding;\n\t\t\t\t\ttotalRightBoxesWidth = rightPadding;\n\t\t\t\t\ttotalTopBoxesHeight = topPadding;\n\t\t\t\t\ttotalBottomBoxesHeight = bottomPadding;\n\n\t\t\t\t\thelpers.each(leftBoxes, function (box) {\n\t\t\t\t\t\ttotalLeftBoxesWidth += box.width;\n\t\t\t\t\t});\n\n\t\t\t\t\thelpers.each(rightBoxes, function (box) {\n\t\t\t\t\t\ttotalRightBoxesWidth += box.width;\n\t\t\t\t\t});\n\n\t\t\t\t\thelpers.each(topBoxes, function (box) {\n\t\t\t\t\t\ttotalTopBoxesHeight += box.height;\n\t\t\t\t\t});\n\t\t\t\t\thelpers.each(bottomBoxes, function (box) {\n\t\t\t\t\t\ttotalBottomBoxesHeight += box.height;\n\t\t\t\t\t});\n\n\t\t\t\t\t// We may be adding some padding to account for rotated x axis labels\n\t\t\t\t\tvar leftPaddingAddition = Math.max(maxHorizontalLeftPadding - totalLeftBoxesWidth, 0);\n\t\t\t\t\ttotalLeftBoxesWidth += leftPaddingAddition;\n\t\t\t\t\ttotalRightBoxesWidth += Math.max(maxHorizontalRightPadding - totalRightBoxesWidth, 0);\n\n\t\t\t\t\tvar topPaddingAddition = Math.max(maxVerticalTopPadding - totalTopBoxesHeight, 0);\n\t\t\t\t\ttotalTopBoxesHeight += topPaddingAddition;\n\t\t\t\t\ttotalBottomBoxesHeight += Math.max(maxVerticalBottomPadding - totalBottomBoxesHeight, 0);\n\n\t\t\t\t\t// Figure out if our chart area changed. This would occur if the dataset layout label rotation\n\t\t\t\t\t// changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do\n\t\t\t\t\t// without calling `fit` again\n\t\t\t\t\tvar newMaxChartAreaHeight = height - totalTopBoxesHeight - totalBottomBoxesHeight;\n\t\t\t\t\tvar newMaxChartAreaWidth = width - totalLeftBoxesWidth - totalRightBoxesWidth;\n\n\t\t\t\t\tif (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) {\n\t\t\t\t\t\thelpers.each(leftBoxes, function (box) {\n\t\t\t\t\t\t\tbox.height = newMaxChartAreaHeight;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\thelpers.each(rightBoxes, function (box) {\n\t\t\t\t\t\t\tbox.height = newMaxChartAreaHeight;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\thelpers.each(topBoxes, function (box) {\n\t\t\t\t\t\t\tif (!box.fullWidth) {\n\t\t\t\t\t\t\t\tbox.width = newMaxChartAreaWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\thelpers.each(bottomBoxes, function (box) {\n\t\t\t\t\t\t\tif (!box.fullWidth) {\n\t\t\t\t\t\t\t\tbox.width = newMaxChartAreaWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tmaxChartAreaHeight = newMaxChartAreaHeight;\n\t\t\t\t\t\tmaxChartAreaWidth = newMaxChartAreaWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Step 7 - Position the boxes\n\t\t\t\t\tvar left = leftPadding + leftPaddingAddition;\n\t\t\t\t\tvar top = topPadding + topPaddingAddition;\n\n\t\t\t\t\tfunction placeBox(box) {\n\t\t\t\t\t\tif (box.isHorizontal()) {\n\t\t\t\t\t\t\tbox.left = box.fullWidth ? leftPadding : totalLeftBoxesWidth;\n\t\t\t\t\t\t\tbox.right = box.fullWidth ? width - rightPadding : totalLeftBoxesWidth + maxChartAreaWidth;\n\t\t\t\t\t\t\tbox.top = top;\n\t\t\t\t\t\t\tbox.bottom = top + box.height;\n\n\t\t\t\t\t\t\t// Move to next point\n\t\t\t\t\t\t\ttop = box.bottom;\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tbox.left = left;\n\t\t\t\t\t\t\tbox.right = left + box.width;\n\t\t\t\t\t\t\tbox.top = totalTopBoxesHeight;\n\t\t\t\t\t\t\tbox.bottom = totalTopBoxesHeight + maxChartAreaHeight;\n\n\t\t\t\t\t\t\t// Move to next point\n\t\t\t\t\t\t\tleft = box.right;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\thelpers.each(leftBoxes.concat(topBoxes), placeBox);\n\n\t\t\t\t\t// Account for chart width and height\n\t\t\t\t\tleft += maxChartAreaWidth;\n\t\t\t\t\ttop += maxChartAreaHeight;\n\n\t\t\t\t\thelpers.each(rightBoxes, placeBox);\n\t\t\t\t\thelpers.each(bottomBoxes, placeBox);\n\n\t\t\t\t\t// Step 8\n\t\t\t\t\tchart.chartArea = {\n\t\t\t\t\t\tleft: totalLeftBoxesWidth,\n\t\t\t\t\t\ttop: totalTopBoxesHeight,\n\t\t\t\t\t\tright: totalLeftBoxesWidth + maxChartAreaWidth,\n\t\t\t\t\t\tbottom: totalTopBoxesHeight + maxChartAreaHeight\n\t\t\t\t\t};\n\n\t\t\t\t\t// Step 9\n\t\t\t\t\thelpers.each(chartAreaBoxes, function (box) {\n\t\t\t\t\t\tbox.left = chart.chartArea.left;\n\t\t\t\t\t\tbox.top = chart.chartArea.top;\n\t\t\t\t\t\tbox.right = chart.chartArea.right;\n\t\t\t\t\t\tbox.bottom = chart.chartArea.bottom;\n\n\t\t\t\t\t\tbox.update(maxChartAreaWidth, maxChartAreaHeight);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t}, { \"46\": 46 }], 32: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar helpers = require(46);\n\n\t\t\tdefaults._set('global', {\n\t\t\t\tplugins: {}\n\t\t\t});\n\n\t\t\t/**\r\n * The plugin service singleton\r\n * @namespace Chart.plugins\r\n * @since 2.1.0\r\n */\n\t\t\tmodule.exports = {\n\t\t\t\t/**\r\n * Globally registered plugins.\r\n * @private\r\n */\n\t\t\t\t_plugins: [],\n\n\t\t\t\t/**\r\n * This identifier is used to invalidate the descriptors cache attached to each chart\r\n * when a global plugin is registered or unregistered. In this case, the cache ID is\r\n * incremented and descriptors are regenerated during following API calls.\r\n * @private\r\n */\n\t\t\t\t_cacheId: 0,\n\n\t\t\t\t/**\r\n * Registers the given plugin(s) if not already registered.\r\n * @param {Array|Object} plugins plugin instance(s).\r\n */\n\t\t\t\tregister: function register(plugins) {\n\t\t\t\t\tvar p = this._plugins;\n\t\t\t\t\t[].concat(plugins).forEach(function (plugin) {\n\t\t\t\t\t\tif (p.indexOf(plugin) === -1) {\n\t\t\t\t\t\t\tp.push(plugin);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tthis._cacheId++;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Unregisters the given plugin(s) only if registered.\r\n * @param {Array|Object} plugins plugin instance(s).\r\n */\n\t\t\t\tunregister: function unregister(plugins) {\n\t\t\t\t\tvar p = this._plugins;\n\t\t\t\t\t[].concat(plugins).forEach(function (plugin) {\n\t\t\t\t\t\tvar idx = p.indexOf(plugin);\n\t\t\t\t\t\tif (idx !== -1) {\n\t\t\t\t\t\t\tp.splice(idx, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tthis._cacheId++;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Remove all registered plugins.\r\n * @since 2.1.5\r\n */\n\t\t\t\tclear: function clear() {\n\t\t\t\t\tthis._plugins = [];\n\t\t\t\t\tthis._cacheId++;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns the number of registered plugins?\r\n * @returns {Number}\r\n * @since 2.1.5\r\n */\n\t\t\t\tcount: function count() {\n\t\t\t\t\treturn this._plugins.length;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns all registered plugin instances.\r\n * @returns {Array} array of plugin objects.\r\n * @since 2.1.5\r\n */\n\t\t\t\tgetAll: function getAll() {\n\t\t\t\t\treturn this._plugins;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Calls enabled plugins for `chart` on the specified hook and with the given args.\r\n * This method immediately returns as soon as a plugin explicitly returns false. The\r\n * returned value can be used, for instance, to interrupt the current action.\r\n * @param {Object} chart - The chart instance for which plugins should be called.\r\n * @param {String} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\r\n * @param {Array} [args] - Extra arguments to apply to the hook call.\r\n * @returns {Boolean} false if any of the plugins return false, else returns true.\r\n */\n\t\t\t\tnotify: function notify(chart, hook, args) {\n\t\t\t\t\tvar descriptors = this.descriptors(chart);\n\t\t\t\t\tvar ilen = descriptors.length;\n\t\t\t\t\tvar i, descriptor, plugin, params, method;\n\n\t\t\t\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\t\t\t\tdescriptor = descriptors[i];\n\t\t\t\t\t\tplugin = descriptor.plugin;\n\t\t\t\t\t\tmethod = plugin[hook];\n\t\t\t\t\t\tif (typeof method === 'function') {\n\t\t\t\t\t\t\tparams = [chart].concat(args || []);\n\t\t\t\t\t\t\tparams.push(descriptor.options);\n\t\t\t\t\t\t\tif (method.apply(plugin, params) === false) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns descriptors of enabled plugins for the given chart.\r\n * @returns {Array} [{ plugin, options }]\r\n * @private\r\n */\n\t\t\t\tdescriptors: function descriptors(chart) {\n\t\t\t\t\tvar cache = chart.$plugins || (chart.$plugins = {});\n\t\t\t\t\tif (cache.id === this._cacheId) {\n\t\t\t\t\t\treturn cache.descriptors;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar plugins = [];\n\t\t\t\t\tvar descriptors = [];\n\t\t\t\t\tvar config = chart && chart.config || {};\n\t\t\t\t\tvar options = config.options && config.options.plugins || {};\n\n\t\t\t\t\tthis._plugins.concat(config.plugins || []).forEach(function (plugin) {\n\t\t\t\t\t\tvar idx = plugins.indexOf(plugin);\n\t\t\t\t\t\tif (idx !== -1) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar id = plugin.id;\n\t\t\t\t\t\tvar opts = options[id];\n\t\t\t\t\t\tif (opts === false) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (opts === true) {\n\t\t\t\t\t\t\topts = helpers.clone(defaults.global.plugins[id]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tplugins.push(plugin);\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\tplugin: plugin,\n\t\t\t\t\t\t\toptions: opts || {}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tcache.descriptors = descriptors;\n\t\t\t\t\tcache.id = this._cacheId;\n\t\t\t\t\treturn descriptors;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Invalidates cache for the given chart: descriptors hold a reference on plugin option,\r\n * but in some cases, this reference can be changed by the user when updating options.\r\n * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\r\n * @private\r\n */\n\t\t\t\t_invalidate: function _invalidate(chart) {\n\t\t\t\t\tdelete chart.$plugins;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\r\n * Plugin extension hooks.\r\n * @interface IPlugin\r\n * @since 2.1.0\r\n */\n\t\t\t/**\r\n * @method IPlugin#beforeInit\r\n * @desc Called before initializing `chart`.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#afterInit\r\n * @desc Called after `chart` has been initialized and before the first update.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#beforeUpdate\r\n * @desc Called before updating `chart`. If any plugin returns `false`, the update\r\n * is cancelled (and thus subsequent render(s)) until another `update` is triggered.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Object} options - The plugin options.\r\n * @returns {Boolean} `false` to cancel the chart update.\r\n */\n\t\t\t/**\r\n * @method IPlugin#afterUpdate\r\n * @desc Called after `chart` has been updated and before rendering. Note that this\r\n * hook will not be called if the chart update has been previously cancelled.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#beforeDatasetsUpdate\r\n * @desc Called before updating the `chart` datasets. If any plugin returns `false`,\r\n * the datasets update is cancelled until another `update` is triggered.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Object} options - The plugin options.\r\n * @returns {Boolean} false to cancel the datasets update.\r\n * @since version 2.1.5\r\n */\n\t\t\t/**\r\n * @method IPlugin#afterDatasetsUpdate\r\n * @desc Called after the `chart` datasets have been updated. Note that this hook\r\n * will not be called if the datasets update has been previously cancelled.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Object} options - The plugin options.\r\n * @since version 2.1.5\r\n */\n\t\t\t/**\r\n * @method IPlugin#beforeDatasetUpdate\r\n * @desc Called before updating the `chart` dataset at the given `args.index`. If any plugin\r\n * returns `false`, the datasets update is cancelled until another `update` is triggered.\r\n * @param {Chart} chart - The chart instance.\r\n * @param {Object} args - The call arguments.\r\n * @param {Number} args.index - The dataset index.\r\n * @param {Object} args.meta - The dataset metadata.\r\n * @param {Object} options - The plugin options.\r\n * @returns {Boolean} `false` to cancel the chart datasets drawing.\r\n */\n\t\t\t/**\r\n * @method IPlugin#afterDatasetUpdate\r\n * @desc Called after the `chart` datasets at the given `args.index` has been updated. Note\r\n * that this hook will not be called if the datasets update has been previously cancelled.\r\n * @param {Chart} chart - The chart instance.\r\n * @param {Object} args - The call arguments.\r\n * @param {Number} args.index - The dataset index.\r\n * @param {Object} args.meta - The dataset metadata.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#beforeLayout\r\n * @desc Called before laying out `chart`. If any plugin returns `false`,\r\n * the layout update is cancelled until another `update` is triggered.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Object} options - The plugin options.\r\n * @returns {Boolean} `false` to cancel the chart layout.\r\n */\n\t\t\t/**\r\n * @method IPlugin#afterLayout\r\n * @desc Called after the `chart` has been layed out. Note that this hook will not\r\n * be called if the layout update has been previously cancelled.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#beforeRender\r\n * @desc Called before rendering `chart`. If any plugin returns `false`,\r\n * the rendering is cancelled until another `render` is triggered.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Object} options - The plugin options.\r\n * @returns {Boolean} `false` to cancel the chart rendering.\r\n */\n\t\t\t/**\r\n * @method IPlugin#afterRender\r\n * @desc Called after the `chart` has been fully rendered (and animation completed). Note\r\n * that this hook will not be called if the rendering has been previously cancelled.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#beforeDraw\r\n * @desc Called before drawing `chart` at every animation frame specified by the given\r\n * easing value. If any plugin returns `false`, the frame drawing is cancelled until\r\n * another `render` is triggered.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\r\n * @param {Object} options - The plugin options.\r\n * @returns {Boolean} `false` to cancel the chart drawing.\r\n */\n\t\t\t/**\r\n * @method IPlugin#afterDraw\r\n * @desc Called after the `chart` has been drawn for the specific easing value. Note\r\n * that this hook will not be called if the drawing has been previously cancelled.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#beforeDatasetsDraw\r\n * @desc Called before drawing the `chart` datasets. If any plugin returns `false`,\r\n * the datasets drawing is cancelled until another `render` is triggered.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\r\n * @param {Object} options - The plugin options.\r\n * @returns {Boolean} `false` to cancel the chart datasets drawing.\r\n */\n\t\t\t/**\r\n * @method IPlugin#afterDatasetsDraw\r\n * @desc Called after the `chart` datasets have been drawn. Note that this hook\r\n * will not be called if the datasets drawing has been previously cancelled.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#beforeDatasetDraw\r\n * @desc Called before drawing the `chart` dataset at the given `args.index` (datasets\r\n * are drawn in the reverse order). If any plugin returns `false`, the datasets drawing\r\n * is cancelled until another `render` is triggered.\r\n * @param {Chart} chart - The chart instance.\r\n * @param {Object} args - The call arguments.\r\n * @param {Number} args.index - The dataset index.\r\n * @param {Object} args.meta - The dataset metadata.\r\n * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\r\n * @param {Object} options - The plugin options.\r\n * @returns {Boolean} `false` to cancel the chart datasets drawing.\r\n */\n\t\t\t/**\r\n * @method IPlugin#afterDatasetDraw\r\n * @desc Called after the `chart` datasets at the given `args.index` have been drawn\r\n * (datasets are drawn in the reverse order). Note that this hook will not be called\r\n * if the datasets drawing has been previously cancelled.\r\n * @param {Chart} chart - The chart instance.\r\n * @param {Object} args - The call arguments.\r\n * @param {Number} args.index - The dataset index.\r\n * @param {Object} args.meta - The dataset metadata.\r\n * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#beforeTooltipDraw\r\n * @desc Called before drawing the `tooltip`. If any plugin returns `false`,\r\n * the tooltip drawing is cancelled until another `render` is triggered.\r\n * @param {Chart} chart - The chart instance.\r\n * @param {Object} args - The call arguments.\r\n * @param {Object} args.tooltip - The tooltip.\r\n * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\r\n * @param {Object} options - The plugin options.\r\n * @returns {Boolean} `false` to cancel the chart tooltip drawing.\r\n */\n\t\t\t/**\r\n * @method IPlugin#afterTooltipDraw\r\n * @desc Called after drawing the `tooltip`. Note that this hook will not\r\n * be called if the tooltip drawing has been previously cancelled.\r\n * @param {Chart} chart - The chart instance.\r\n * @param {Object} args - The call arguments.\r\n * @param {Object} args.tooltip - The tooltip.\r\n * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#beforeEvent\r\n * @desc Called before processing the specified `event`. If any plugin returns `false`,\r\n * the event will be discarded.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {IEvent} event - The event object.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#afterEvent\r\n * @desc Called after the `event` has been consumed. Note that this hook\r\n * will not be called if the `event` has been previously discarded.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {IEvent} event - The event object.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#resize\r\n * @desc Called after the chart as been resized.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Number} size - The new canvas display size (eq. canvas.style width & height).\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t\t/**\r\n * @method IPlugin#destroy\r\n * @desc Called after the chart as been destroyed.\r\n * @param {Chart.Controller} chart - The chart instance.\r\n * @param {Object} options - The plugin options.\r\n */\n\t\t}, { \"26\": 26, \"46\": 46 }], 33: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar Element = require(27);\n\t\t\tvar helpers = require(46);\n\t\t\tvar Ticks = require(35);\n\n\t\t\tdefaults._set('scale', {\n\t\t\t\tdisplay: true,\n\t\t\t\tposition: 'left',\n\t\t\t\toffset: false,\n\n\t\t\t\t// grid line settings\n\t\t\t\tgridLines: {\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\tcolor: 'rgba(0, 0, 0, 0.1)',\n\t\t\t\t\tlineWidth: 1,\n\t\t\t\t\tdrawBorder: true,\n\t\t\t\t\tdrawOnChartArea: true,\n\t\t\t\t\tdrawTicks: true,\n\t\t\t\t\ttickMarkLength: 10,\n\t\t\t\t\tzeroLineWidth: 1,\n\t\t\t\t\tzeroLineColor: 'rgba(0,0,0,0.25)',\n\t\t\t\t\tzeroLineBorderDash: [],\n\t\t\t\t\tzeroLineBorderDashOffset: 0.0,\n\t\t\t\t\toffsetGridLines: false,\n\t\t\t\t\tborderDash: [],\n\t\t\t\t\tborderDashOffset: 0.0\n\t\t\t\t},\n\n\t\t\t\t// scale label\n\t\t\t\tscaleLabel: {\n\t\t\t\t\t// display property\n\t\t\t\t\tdisplay: false,\n\n\t\t\t\t\t// actual label\n\t\t\t\t\tlabelString: '',\n\n\t\t\t\t\t// line height\n\t\t\t\t\tlineHeight: 1.2,\n\n\t\t\t\t\t// top/bottom padding\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\ttop: 4,\n\t\t\t\t\t\tbottom: 4\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// label settings\n\t\t\t\tticks: {\n\t\t\t\t\tbeginAtZero: false,\n\t\t\t\t\tminRotation: 0,\n\t\t\t\t\tmaxRotation: 50,\n\t\t\t\t\tmirror: false,\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\treverse: false,\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\tautoSkip: true,\n\t\t\t\t\tautoSkipPadding: 0,\n\t\t\t\t\tlabelOffset: 0,\n\t\t\t\t\t// We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n\t\t\t\t\tcallback: Ticks.formatters.values,\n\t\t\t\t\tminor: {},\n\t\t\t\t\tmajor: {}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfunction labelsFromTicks(ticks) {\n\t\t\t\tvar labels = [];\n\t\t\t\tvar i, ilen;\n\n\t\t\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\t\t\t\tlabels.push(ticks[i].label);\n\t\t\t\t}\n\n\t\t\t\treturn labels;\n\t\t\t}\n\n\t\t\tfunction getLineValue(scale, index, offsetGridLines) {\n\t\t\t\tvar lineValue = scale.getPixelForTick(index);\n\n\t\t\t\tif (offsetGridLines) {\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\tlineValue -= (scale.getPixelForTick(1) - lineValue) / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlineValue -= (lineValue - scale.getPixelForTick(index - 1)) / 2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn lineValue;\n\t\t\t}\n\n\t\t\tfunction computeTextSize(context, tick, font) {\n\t\t\t\treturn helpers.isArray(tick) ? helpers.longestText(context, font, tick) : context.measureText(tick).width;\n\t\t\t}\n\n\t\t\tfunction parseFontOptions(options) {\n\t\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\t\tvar globalDefaults = defaults.global;\n\t\t\t\tvar size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\tvar style = valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\t\tvar family = valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily);\n\n\t\t\t\treturn {\n\t\t\t\t\tsize: size,\n\t\t\t\t\tstyle: style,\n\t\t\t\t\tfamily: family,\n\t\t\t\t\tfont: helpers.fontString(size, style, family)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfunction parseLineHeight(options) {\n\t\t\t\treturn helpers.options.toLineHeight(helpers.valueOrDefault(options.lineHeight, 1.2), helpers.valueOrDefault(options.fontSize, defaults.global.defaultFontSize));\n\t\t\t}\n\n\t\t\tmodule.exports = Element.extend({\n\t\t\t\t/**\r\n * Get the padding needed for the scale\r\n * @method getPadding\r\n * @private\r\n * @returns {Padding} the necessary padding\r\n */\n\t\t\t\tgetPadding: function getPadding() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft: me.paddingLeft || 0,\n\t\t\t\t\t\ttop: me.paddingTop || 0,\n\t\t\t\t\t\tright: me.paddingRight || 0,\n\t\t\t\t\t\tbottom: me.paddingBottom || 0\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns the scale tick objects ({label, major})\r\n * @since 2.7\r\n */\n\t\t\t\tgetTicks: function getTicks() {\n\t\t\t\t\treturn this._ticks;\n\t\t\t\t},\n\n\t\t\t\t// These methods are ordered by lifecyle. Utilities then follow.\n\t\t\t\t// Any function defined here is inherited by all scale types.\n\t\t\t\t// Any function can be extended by the scale type\n\n\t\t\t\tmergeTicksOptions: function mergeTicksOptions() {\n\t\t\t\t\tvar ticks = this.options.ticks;\n\t\t\t\t\tif (ticks.minor === false) {\n\t\t\t\t\t\tticks.minor = {\n\t\t\t\t\t\t\tdisplay: false\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (ticks.major === false) {\n\t\t\t\t\t\tticks.major = {\n\t\t\t\t\t\t\tdisplay: false\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tfor (var key in ticks) {\n\t\t\t\t\t\tif (key !== 'major' && key !== 'minor') {\n\t\t\t\t\t\t\tif (typeof ticks.minor[key] === 'undefined') {\n\t\t\t\t\t\t\t\tticks.minor[key] = ticks[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (typeof ticks.major[key] === 'undefined') {\n\t\t\t\t\t\t\t\tticks.major[key] = ticks[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tbeforeUpdate: function beforeUpdate() {\n\t\t\t\t\thelpers.callback(this.options.beforeUpdate, [this]);\n\t\t\t\t},\n\n\t\t\t\tupdate: function update(maxWidth, maxHeight, margins) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar i, ilen, labels, label, ticks, tick;\n\n\t\t\t\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\t\t\t\tme.beforeUpdate();\n\n\t\t\t\t\t// Absorb the master measurements\n\t\t\t\t\tme.maxWidth = maxWidth;\n\t\t\t\t\tme.maxHeight = maxHeight;\n\t\t\t\t\tme.margins = helpers.extend({\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tbottom: 0\n\t\t\t\t\t}, margins);\n\t\t\t\t\tme.longestTextCache = me.longestTextCache || {};\n\n\t\t\t\t\t// Dimensions\n\t\t\t\t\tme.beforeSetDimensions();\n\t\t\t\t\tme.setDimensions();\n\t\t\t\t\tme.afterSetDimensions();\n\n\t\t\t\t\t// Data min/max\n\t\t\t\t\tme.beforeDataLimits();\n\t\t\t\t\tme.determineDataLimits();\n\t\t\t\t\tme.afterDataLimits();\n\n\t\t\t\t\t// Ticks - `this.ticks` is now DEPRECATED!\n\t\t\t\t\t// Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\n\t\t\t\t\t// and must not be accessed directly from outside this class. `this.ticks` being\n\t\t\t\t\t// around for long time and not marked as private, we can't change its structure\n\t\t\t\t\t// without unexpected breaking changes. If you need to access the scale ticks,\n\t\t\t\t\t// use scale.getTicks() instead.\n\n\t\t\t\t\tme.beforeBuildTicks();\n\n\t\t\t\t\t// New implementations should return an array of objects but for BACKWARD COMPAT,\n\t\t\t\t\t// we still support no return (`this.ticks` internally set by calling this method).\n\t\t\t\t\tticks = me.buildTicks() || [];\n\n\t\t\t\t\tme.afterBuildTicks();\n\n\t\t\t\t\tme.beforeTickToLabelConversion();\n\n\t\t\t\t\t// New implementations should return the formatted tick labels but for BACKWARD\n\t\t\t\t\t// COMPAT, we still support no return (`this.ticks` internally changed by calling\n\t\t\t\t\t// this method and supposed to contain only string values).\n\t\t\t\t\tlabels = me.convertTicksToLabels(ticks) || me.ticks;\n\n\t\t\t\t\tme.afterTickToLabelConversion();\n\n\t\t\t\t\tme.ticks = labels; // BACKWARD COMPATIBILITY\n\n\t\t\t\t\t// IMPORTANT: from this point, we consider that `this.ticks` will NEVER change!\n\n\t\t\t\t\t// BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\n\t\t\t\t\tfor (i = 0, ilen = labels.length; i < ilen; ++i) {\n\t\t\t\t\t\tlabel = labels[i];\n\t\t\t\t\t\ttick = ticks[i];\n\t\t\t\t\t\tif (!tick) {\n\t\t\t\t\t\t\tticks.push(tick = {\n\t\t\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t\t\t\tmajor: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttick.label = label;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tme._ticks = ticks;\n\n\t\t\t\t\t// Tick Rotation\n\t\t\t\t\tme.beforeCalculateTickRotation();\n\t\t\t\t\tme.calculateTickRotation();\n\t\t\t\t\tme.afterCalculateTickRotation();\n\t\t\t\t\t// Fit\n\t\t\t\t\tme.beforeFit();\n\t\t\t\t\tme.fit();\n\t\t\t\t\tme.afterFit();\n\t\t\t\t\t//\n\t\t\t\t\tme.afterUpdate();\n\n\t\t\t\t\treturn me.minSize;\n\t\t\t\t},\n\t\t\t\tafterUpdate: function afterUpdate() {\n\t\t\t\t\thelpers.callback(this.options.afterUpdate, [this]);\n\t\t\t\t},\n\n\t\t\t\t//\n\n\t\t\t\tbeforeSetDimensions: function beforeSetDimensions() {\n\t\t\t\t\thelpers.callback(this.options.beforeSetDimensions, [this]);\n\t\t\t\t},\n\t\t\t\tsetDimensions: function setDimensions() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\t// Reset position before calculating rotation\n\t\t\t\t\t\tme.width = me.maxWidth;\n\t\t\t\t\t\tme.left = 0;\n\t\t\t\t\t\tme.right = me.width;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tme.height = me.maxHeight;\n\n\t\t\t\t\t\t// Reset position before calculating rotation\n\t\t\t\t\t\tme.top = 0;\n\t\t\t\t\t\tme.bottom = me.height;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset padding\n\t\t\t\t\tme.paddingLeft = 0;\n\t\t\t\t\tme.paddingTop = 0;\n\t\t\t\t\tme.paddingRight = 0;\n\t\t\t\t\tme.paddingBottom = 0;\n\t\t\t\t},\n\t\t\t\tafterSetDimensions: function afterSetDimensions() {\n\t\t\t\t\thelpers.callback(this.options.afterSetDimensions, [this]);\n\t\t\t\t},\n\n\t\t\t\t// Data limits\n\t\t\t\tbeforeDataLimits: function beforeDataLimits() {\n\t\t\t\t\thelpers.callback(this.options.beforeDataLimits, [this]);\n\t\t\t\t},\n\t\t\t\tdetermineDataLimits: helpers.noop,\n\t\t\t\tafterDataLimits: function afterDataLimits() {\n\t\t\t\t\thelpers.callback(this.options.afterDataLimits, [this]);\n\t\t\t\t},\n\n\t\t\t\t//\n\t\t\t\tbeforeBuildTicks: function beforeBuildTicks() {\n\t\t\t\t\thelpers.callback(this.options.beforeBuildTicks, [this]);\n\t\t\t\t},\n\t\t\t\tbuildTicks: helpers.noop,\n\t\t\t\tafterBuildTicks: function afterBuildTicks() {\n\t\t\t\t\thelpers.callback(this.options.afterBuildTicks, [this]);\n\t\t\t\t},\n\n\t\t\t\tbeforeTickToLabelConversion: function beforeTickToLabelConversion() {\n\t\t\t\t\thelpers.callback(this.options.beforeTickToLabelConversion, [this]);\n\t\t\t\t},\n\t\t\t\tconvertTicksToLabels: function convertTicksToLabels() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\t// Convert ticks to strings\n\t\t\t\t\tvar tickOpts = me.options.ticks;\n\t\t\t\t\tme.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\n\t\t\t\t},\n\t\t\t\tafterTickToLabelConversion: function afterTickToLabelConversion() {\n\t\t\t\t\thelpers.callback(this.options.afterTickToLabelConversion, [this]);\n\t\t\t\t},\n\n\t\t\t\t//\n\n\t\t\t\tbeforeCalculateTickRotation: function beforeCalculateTickRotation() {\n\t\t\t\t\thelpers.callback(this.options.beforeCalculateTickRotation, [this]);\n\t\t\t\t},\n\t\t\t\tcalculateTickRotation: function calculateTickRotation() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar context = me.ctx;\n\t\t\t\t\tvar tickOpts = me.options.ticks;\n\t\t\t\t\tvar labels = labelsFromTicks(me._ticks);\n\n\t\t\t\t\t// Get the width of each grid by calculating the difference\n\t\t\t\t\t// between x offsets between 0 and 1.\n\t\t\t\t\tvar tickFont = parseFontOptions(tickOpts);\n\t\t\t\t\tcontext.font = tickFont.font;\n\n\t\t\t\t\tvar labelRotation = tickOpts.minRotation || 0;\n\n\t\t\t\t\tif (labels.length && me.options.display && me.isHorizontal()) {\n\t\t\t\t\t\tvar originalLabelWidth = helpers.longestText(context, tickFont.font, labels, me.longestTextCache);\n\t\t\t\t\t\tvar labelWidth = originalLabelWidth;\n\t\t\t\t\t\tvar cosRotation, sinRotation;\n\n\t\t\t\t\t\t// Allow 3 pixels x2 padding either side for label readability\n\t\t\t\t\t\tvar tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6;\n\n\t\t\t\t\t\t// Max label rotation can be set or default to 90 - also act as a loop counter\n\t\t\t\t\t\twhile (labelWidth > tickWidth && labelRotation < tickOpts.maxRotation) {\n\t\t\t\t\t\t\tvar angleRadians = helpers.toRadians(labelRotation);\n\t\t\t\t\t\t\tcosRotation = Math.cos(angleRadians);\n\t\t\t\t\t\t\tsinRotation = Math.sin(angleRadians);\n\n\t\t\t\t\t\t\tif (sinRotation * originalLabelWidth > me.maxHeight) {\n\t\t\t\t\t\t\t\t// go back one step\n\t\t\t\t\t\t\t\tlabelRotation--;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlabelRotation++;\n\t\t\t\t\t\t\tlabelWidth = cosRotation * originalLabelWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tme.labelRotation = labelRotation;\n\t\t\t\t},\n\t\t\t\tafterCalculateTickRotation: function afterCalculateTickRotation() {\n\t\t\t\t\thelpers.callback(this.options.afterCalculateTickRotation, [this]);\n\t\t\t\t},\n\n\t\t\t\t//\n\n\t\t\t\tbeforeFit: function beforeFit() {\n\t\t\t\t\thelpers.callback(this.options.beforeFit, [this]);\n\t\t\t\t},\n\t\t\t\tfit: function fit() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\t// Reset\n\t\t\t\t\tvar minSize = me.minSize = {\n\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\theight: 0\n\t\t\t\t\t};\n\n\t\t\t\t\tvar labels = labelsFromTicks(me._ticks);\n\n\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\tvar tickOpts = opts.ticks;\n\t\t\t\t\tvar scaleLabelOpts = opts.scaleLabel;\n\t\t\t\t\tvar gridLineOpts = opts.gridLines;\n\t\t\t\t\tvar display = opts.display;\n\t\t\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\t\t\tvar tickFont = parseFontOptions(tickOpts);\n\t\t\t\t\tvar tickMarkLength = opts.gridLines.tickMarkLength;\n\n\t\t\t\t\t// Width\n\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\t// subtract the margins to line up with the chartArea if we are a full width scale\n\t\t\t\t\t\tminSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tminSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// height\n\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\tminSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t\t\t\t}\n\n\t\t\t\t\t// Are we showing a title for the scale?\n\t\t\t\t\tif (scaleLabelOpts.display && display) {\n\t\t\t\t\t\tvar scaleLabelLineHeight = parseLineHeight(scaleLabelOpts);\n\t\t\t\t\t\tvar scaleLabelPadding = helpers.options.toPadding(scaleLabelOpts.padding);\n\t\t\t\t\t\tvar deltaHeight = scaleLabelLineHeight + scaleLabelPadding.height;\n\n\t\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\t\tminSize.height += deltaHeight;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tminSize.width += deltaHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Don't bother fitting the ticks if we are not showing them\n\t\t\t\t\tif (tickOpts.display && display) {\n\t\t\t\t\t\tvar largestTextWidth = helpers.longestText(me.ctx, tickFont.font, labels, me.longestTextCache);\n\t\t\t\t\t\tvar tallestLabelHeightInLines = helpers.numberOfLabelLines(labels);\n\t\t\t\t\t\tvar lineSpace = tickFont.size * 0.5;\n\t\t\t\t\t\tvar tickPadding = me.options.ticks.padding;\n\n\t\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\t\t// A horizontal axis is more constrained by the height.\n\t\t\t\t\t\t\tme.longestLabelWidth = largestTextWidth;\n\n\t\t\t\t\t\t\tvar angleRadians = helpers.toRadians(me.labelRotation);\n\t\t\t\t\t\t\tvar cosRotation = Math.cos(angleRadians);\n\t\t\t\t\t\t\tvar sinRotation = Math.sin(angleRadians);\n\n\t\t\t\t\t\t\t// TODO - improve this calculation\n\t\t\t\t\t\t\tvar labelHeight = sinRotation * largestTextWidth + tickFont.size * tallestLabelHeightInLines + lineSpace * (tallestLabelHeightInLines - 1) + lineSpace; // padding\n\n\t\t\t\t\t\t\tminSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n\n\t\t\t\t\t\t\tme.ctx.font = tickFont.font;\n\t\t\t\t\t\t\tvar firstLabelWidth = computeTextSize(me.ctx, labels[0], tickFont.font);\n\t\t\t\t\t\t\tvar lastLabelWidth = computeTextSize(me.ctx, labels[labels.length - 1], tickFont.font);\n\n\t\t\t\t\t\t\t// Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n\t\t\t\t\t\t\t// which means that the right padding is dominated by the font height\n\t\t\t\t\t\t\tif (me.labelRotation !== 0) {\n\t\t\t\t\t\t\t\tme.paddingLeft = opts.position === 'bottom' ? cosRotation * firstLabelWidth + 3 : cosRotation * lineSpace + 3; // add 3 px to move away from canvas edges\n\t\t\t\t\t\t\t\tme.paddingRight = opts.position === 'bottom' ? cosRotation * lineSpace + 3 : cosRotation * lastLabelWidth + 3;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tme.paddingLeft = firstLabelWidth / 2 + 3; // add 3 px to move away from canvas edges\n\t\t\t\t\t\t\t\tme.paddingRight = lastLabelWidth / 2 + 3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// A vertical axis is more constrained by the width. Labels are the\n\t\t\t\t\t\t\t// dominant factor here, so get that length first and account for padding\n\t\t\t\t\t\t\tif (tickOpts.mirror) {\n\t\t\t\t\t\t\t\tlargestTextWidth = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// use lineSpace for consistency with horizontal axis\n\t\t\t\t\t\t\t\t// tickPadding is not implemented for horizontal\n\t\t\t\t\t\t\t\tlargestTextWidth += tickPadding + lineSpace;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tminSize.width = Math.min(me.maxWidth, minSize.width + largestTextWidth);\n\n\t\t\t\t\t\t\tme.paddingTop = tickFont.size / 2;\n\t\t\t\t\t\t\tme.paddingBottom = tickFont.size / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tme.handleMargins();\n\n\t\t\t\t\tme.width = minSize.width;\n\t\t\t\t\tme.height = minSize.height;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Handle margins and padding interactions\r\n * @private\r\n */\n\t\t\t\thandleMargins: function handleMargins() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tif (me.margins) {\n\t\t\t\t\t\tme.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);\n\t\t\t\t\t\tme.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);\n\t\t\t\t\t\tme.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);\n\t\t\t\t\t\tme.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tafterFit: function afterFit() {\n\t\t\t\t\thelpers.callback(this.options.afterFit, [this]);\n\t\t\t\t},\n\n\t\t\t\t// Shared Methods\n\t\t\t\tisHorizontal: function isHorizontal() {\n\t\t\t\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\n\t\t\t\t},\n\t\t\t\tisFullWidth: function isFullWidth() {\n\t\t\t\t\treturn this.options.fullWidth;\n\t\t\t\t},\n\n\t\t\t\t// Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\n\t\t\t\tgetRightValue: function getRightValue(rawValue) {\n\t\t\t\t\t// Null and undefined values first\n\t\t\t\t\tif (helpers.isNullOrUndef(rawValue)) {\n\t\t\t\t\t\treturn NaN;\n\t\t\t\t\t}\n\t\t\t\t\t// isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\n\t\t\t\t\tif (typeof rawValue === 'number' && !isFinite(rawValue)) {\n\t\t\t\t\t\treturn NaN;\n\t\t\t\t\t}\n\t\t\t\t\t// If it is in fact an object, dive in one more level\n\t\t\t\t\tif (rawValue) {\n\t\t\t\t\t\tif (this.isHorizontal()) {\n\t\t\t\t\t\t\tif (rawValue.x !== undefined) {\n\t\t\t\t\t\t\t\treturn this.getRightValue(rawValue.x);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (rawValue.y !== undefined) {\n\t\t\t\t\t\t\treturn this.getRightValue(rawValue.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Value is good, return it\n\t\t\t\t\treturn rawValue;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Used to get the value to display in the tooltip for the data at the given index\r\n * @param index\r\n * @param datasetIndex\r\n */\n\t\t\t\tgetLabelForIndex: helpers.noop,\n\n\t\t\t\t/**\r\n * Returns the location of the given data point. Value can either be an index or a numerical value\r\n * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n * @param value\r\n * @param index\r\n * @param datasetIndex\r\n */\n\t\t\t\tgetPixelForValue: helpers.noop,\n\n\t\t\t\t/**\r\n * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\r\n * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n * @param pixel\r\n */\n\t\t\t\tgetValueForPixel: helpers.noop,\n\n\t\t\t\t/**\r\n * Returns the location of the tick at the given index\r\n * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n */\n\t\t\t\tgetPixelForTick: function getPixelForTick(index) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar offset = me.options.offset;\n\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\t\t\t\tvar tickWidth = innerWidth / Math.max(me._ticks.length - (offset ? 0 : 1), 1);\n\t\t\t\t\t\tvar pixel = tickWidth * index + me.paddingLeft;\n\n\t\t\t\t\t\tif (offset) {\n\t\t\t\t\t\t\tpixel += tickWidth / 2;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar finalVal = me.left + Math.round(pixel);\n\t\t\t\t\t\tfinalVal += me.isFullWidth() ? me.margins.left : 0;\n\t\t\t\t\t\treturn finalVal;\n\t\t\t\t\t}\n\t\t\t\t\tvar innerHeight = me.height - (me.paddingTop + me.paddingBottom);\n\t\t\t\t\treturn me.top + index * (innerHeight / (me._ticks.length - 1));\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Utility for getting the pixel location of a percentage of scale\r\n * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n */\n\t\t\t\tgetPixelForDecimal: function getPixelForDecimal(decimal) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\t\t\t\tvar valueOffset = innerWidth * decimal + me.paddingLeft;\n\n\t\t\t\t\t\tvar finalVal = me.left + Math.round(valueOffset);\n\t\t\t\t\t\tfinalVal += me.isFullWidth() ? me.margins.left : 0;\n\t\t\t\t\t\treturn finalVal;\n\t\t\t\t\t}\n\t\t\t\t\treturn me.top + decimal * me.height;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns the pixel for the minimum chart value\r\n * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n */\n\t\t\t\tgetBasePixel: function getBasePixel() {\n\t\t\t\t\treturn this.getPixelForValue(this.getBaseValue());\n\t\t\t\t},\n\n\t\t\t\tgetBaseValue: function getBaseValue() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar min = me.min;\n\t\t\t\t\tvar max = me.max;\n\n\t\t\t\t\treturn me.beginAtZero ? 0 : min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\r\n * @private\r\n */\n\t\t\t\t_autoSkip: function _autoSkip(ticks) {\n\t\t\t\t\tvar skipRatio;\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\t\t\tvar optionTicks = me.options.ticks.minor;\n\t\t\t\t\tvar tickCount = ticks.length;\n\t\t\t\t\tvar labelRotationRadians = helpers.toRadians(me.labelRotation);\n\t\t\t\t\tvar cosRotation = Math.cos(labelRotationRadians);\n\t\t\t\t\tvar longestRotatedLabel = me.longestLabelWidth * cosRotation;\n\t\t\t\t\tvar result = [];\n\t\t\t\t\tvar i, tick, shouldSkip;\n\n\t\t\t\t\t// figure out the maximum number of gridlines to show\n\t\t\t\t\tvar maxTicks;\n\t\t\t\t\tif (optionTicks.maxTicksLimit) {\n\t\t\t\t\t\tmaxTicks = optionTicks.maxTicksLimit;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\tskipRatio = false;\n\n\t\t\t\t\t\tif ((longestRotatedLabel + optionTicks.autoSkipPadding) * tickCount > me.width - (me.paddingLeft + me.paddingRight)) {\n\t\t\t\t\t\t\tskipRatio = 1 + Math.floor((longestRotatedLabel + optionTicks.autoSkipPadding) * tickCount / (me.width - (me.paddingLeft + me.paddingRight)));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// if they defined a max number of optionTicks,\n\t\t\t\t\t\t// increase skipRatio until that number is met\n\t\t\t\t\t\tif (maxTicks && tickCount > maxTicks) {\n\t\t\t\t\t\t\tskipRatio = Math.max(skipRatio, Math.floor(tickCount / maxTicks));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (i = 0; i < tickCount; i++) {\n\t\t\t\t\t\ttick = ticks[i];\n\n\t\t\t\t\t\t// Since we always show the last tick,we need may need to hide the last shown one before\n\t\t\t\t\t\tshouldSkip = skipRatio > 1 && i % skipRatio > 0 || i % skipRatio === 0 && i + skipRatio >= tickCount;\n\t\t\t\t\t\tif (shouldSkip && i !== tickCount - 1) {\n\t\t\t\t\t\t\t// leave tick in place but make sure it's not displayed (#4635)\n\t\t\t\t\t\t\tdelete tick.label;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult.push(tick);\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\n\t\t\t\t// Actually draw the scale on the canvas\n\t\t\t\t// @param {rectangle} chartArea : the area of the chart to draw full grid lines on\n\t\t\t\tdraw: function draw(chartArea) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar options = me.options;\n\t\t\t\t\tif (!options.display) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar context = me.ctx;\n\t\t\t\t\tvar globalDefaults = defaults.global;\n\t\t\t\t\tvar optionTicks = options.ticks.minor;\n\t\t\t\t\tvar optionMajorTicks = options.ticks.major || optionTicks;\n\t\t\t\t\tvar gridLines = options.gridLines;\n\t\t\t\t\tvar scaleLabel = options.scaleLabel;\n\n\t\t\t\t\tvar isRotated = me.labelRotation !== 0;\n\t\t\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\t\t\tvar ticks = optionTicks.autoSkip ? me._autoSkip(me.getTicks()) : me.getTicks();\n\t\t\t\t\tvar tickFontColor = helpers.valueOrDefault(optionTicks.fontColor, globalDefaults.defaultFontColor);\n\t\t\t\t\tvar tickFont = parseFontOptions(optionTicks);\n\t\t\t\t\tvar majorTickFontColor = helpers.valueOrDefault(optionMajorTicks.fontColor, globalDefaults.defaultFontColor);\n\t\t\t\t\tvar majorTickFont = parseFontOptions(optionMajorTicks);\n\n\t\t\t\t\tvar tl = gridLines.drawTicks ? gridLines.tickMarkLength : 0;\n\n\t\t\t\t\tvar scaleLabelFontColor = helpers.valueOrDefault(scaleLabel.fontColor, globalDefaults.defaultFontColor);\n\t\t\t\t\tvar scaleLabelFont = parseFontOptions(scaleLabel);\n\t\t\t\t\tvar scaleLabelPadding = helpers.options.toPadding(scaleLabel.padding);\n\t\t\t\t\tvar labelRotationRadians = helpers.toRadians(me.labelRotation);\n\n\t\t\t\t\tvar itemsToDraw = [];\n\n\t\t\t\t\tvar axisWidth = me.options.gridLines.lineWidth;\n\t\t\t\t\tvar xTickStart = options.position === 'right' ? me.left : me.right - axisWidth - tl;\n\t\t\t\t\tvar xTickEnd = options.position === 'right' ? me.left + tl : me.right;\n\t\t\t\t\tvar yTickStart = options.position === 'bottom' ? me.top + axisWidth : me.bottom - tl - axisWidth;\n\t\t\t\t\tvar yTickEnd = options.position === 'bottom' ? me.top + axisWidth + tl : me.bottom + axisWidth;\n\n\t\t\t\t\thelpers.each(ticks, function (tick, index) {\n\t\t\t\t\t\t// autoskipper skipped this tick (#4635)\n\t\t\t\t\t\tif (helpers.isNullOrUndef(tick.label)) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar label = tick.label;\n\t\t\t\t\t\tvar lineWidth, lineColor, borderDash, borderDashOffset;\n\t\t\t\t\t\tif (index === me.zeroLineIndex && options.offset === gridLines.offsetGridLines) {\n\t\t\t\t\t\t\t// Draw the first index specially\n\t\t\t\t\t\t\tlineWidth = gridLines.zeroLineWidth;\n\t\t\t\t\t\t\tlineColor = gridLines.zeroLineColor;\n\t\t\t\t\t\t\tborderDash = gridLines.zeroLineBorderDash;\n\t\t\t\t\t\t\tborderDashOffset = gridLines.zeroLineBorderDashOffset;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlineWidth = helpers.valueAtIndexOrDefault(gridLines.lineWidth, index);\n\t\t\t\t\t\t\tlineColor = helpers.valueAtIndexOrDefault(gridLines.color, index);\n\t\t\t\t\t\t\tborderDash = helpers.valueOrDefault(gridLines.borderDash, globalDefaults.borderDash);\n\t\t\t\t\t\t\tborderDashOffset = helpers.valueOrDefault(gridLines.borderDashOffset, globalDefaults.borderDashOffset);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Common properties\n\t\t\t\t\t\tvar tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY;\n\t\t\t\t\t\tvar textAlign = 'middle';\n\t\t\t\t\t\tvar textBaseline = 'middle';\n\t\t\t\t\t\tvar tickPadding = optionTicks.padding;\n\n\t\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\t\tvar labelYOffset = tl + tickPadding;\n\n\t\t\t\t\t\t\tif (options.position === 'bottom') {\n\t\t\t\t\t\t\t\t// bottom\n\t\t\t\t\t\t\t\ttextBaseline = !isRotated ? 'top' : 'middle';\n\t\t\t\t\t\t\t\ttextAlign = !isRotated ? 'center' : 'right';\n\t\t\t\t\t\t\t\tlabelY = me.top + labelYOffset;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// top\n\t\t\t\t\t\t\t\ttextBaseline = !isRotated ? 'bottom' : 'middle';\n\t\t\t\t\t\t\t\ttextAlign = !isRotated ? 'center' : 'left';\n\t\t\t\t\t\t\t\tlabelY = me.bottom - labelYOffset;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar xLineValue = getLineValue(me, index, gridLines.offsetGridLines && ticks.length > 1);\n\t\t\t\t\t\t\tif (xLineValue < me.left) {\n\t\t\t\t\t\t\t\tlineColor = 'rgba(0,0,0,0)';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\txLineValue += helpers.aliasPixel(lineWidth);\n\n\t\t\t\t\t\t\tlabelX = me.getPixelForTick(index) + optionTicks.labelOffset; // x values for optionTicks (need to consider offsetLabel option)\n\n\t\t\t\t\t\t\ttx1 = tx2 = x1 = x2 = xLineValue;\n\t\t\t\t\t\t\tty1 = yTickStart;\n\t\t\t\t\t\t\tty2 = yTickEnd;\n\t\t\t\t\t\t\ty1 = chartArea.top;\n\t\t\t\t\t\t\ty2 = chartArea.bottom + axisWidth;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar isLeft = options.position === 'left';\n\t\t\t\t\t\t\tvar labelXOffset;\n\n\t\t\t\t\t\t\tif (optionTicks.mirror) {\n\t\t\t\t\t\t\t\ttextAlign = isLeft ? 'left' : 'right';\n\t\t\t\t\t\t\t\tlabelXOffset = tickPadding;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttextAlign = isLeft ? 'right' : 'left';\n\t\t\t\t\t\t\t\tlabelXOffset = tl + tickPadding;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlabelX = isLeft ? me.right - labelXOffset : me.left + labelXOffset;\n\n\t\t\t\t\t\t\tvar yLineValue = getLineValue(me, index, gridLines.offsetGridLines && ticks.length > 1);\n\t\t\t\t\t\t\tif (yLineValue < me.top) {\n\t\t\t\t\t\t\t\tlineColor = 'rgba(0,0,0,0)';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tyLineValue += helpers.aliasPixel(lineWidth);\n\n\t\t\t\t\t\t\tlabelY = me.getPixelForTick(index) + optionTicks.labelOffset;\n\n\t\t\t\t\t\t\ttx1 = xTickStart;\n\t\t\t\t\t\t\ttx2 = xTickEnd;\n\t\t\t\t\t\t\tx1 = chartArea.left;\n\t\t\t\t\t\t\tx2 = chartArea.right + axisWidth;\n\t\t\t\t\t\t\tty1 = ty2 = y1 = y2 = yLineValue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titemsToDraw.push({\n\t\t\t\t\t\t\ttx1: tx1,\n\t\t\t\t\t\t\tty1: ty1,\n\t\t\t\t\t\t\ttx2: tx2,\n\t\t\t\t\t\t\tty2: ty2,\n\t\t\t\t\t\t\tx1: x1,\n\t\t\t\t\t\t\ty1: y1,\n\t\t\t\t\t\t\tx2: x2,\n\t\t\t\t\t\t\ty2: y2,\n\t\t\t\t\t\t\tlabelX: labelX,\n\t\t\t\t\t\t\tlabelY: labelY,\n\t\t\t\t\t\t\tglWidth: lineWidth,\n\t\t\t\t\t\t\tglColor: lineColor,\n\t\t\t\t\t\t\tglBorderDash: borderDash,\n\t\t\t\t\t\t\tglBorderDashOffset: borderDashOffset,\n\t\t\t\t\t\t\trotation: -1 * labelRotationRadians,\n\t\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t\t\tmajor: tick.major,\n\t\t\t\t\t\t\ttextBaseline: textBaseline,\n\t\t\t\t\t\t\ttextAlign: textAlign\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// Draw all of the tick labels, tick marks, and grid lines at the correct places\n\t\t\t\t\thelpers.each(itemsToDraw, function (itemToDraw) {\n\t\t\t\t\t\tif (gridLines.display) {\n\t\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\t\tcontext.lineWidth = itemToDraw.glWidth;\n\t\t\t\t\t\t\tcontext.strokeStyle = itemToDraw.glColor;\n\t\t\t\t\t\t\tif (context.setLineDash) {\n\t\t\t\t\t\t\t\tcontext.setLineDash(itemToDraw.glBorderDash);\n\t\t\t\t\t\t\t\tcontext.lineDashOffset = itemToDraw.glBorderDashOffset;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcontext.beginPath();\n\n\t\t\t\t\t\t\tif (gridLines.drawTicks) {\n\t\t\t\t\t\t\t\tcontext.moveTo(itemToDraw.tx1, itemToDraw.ty1);\n\t\t\t\t\t\t\t\tcontext.lineTo(itemToDraw.tx2, itemToDraw.ty2);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (gridLines.drawOnChartArea) {\n\t\t\t\t\t\t\t\tcontext.moveTo(itemToDraw.x1, itemToDraw.y1);\n\t\t\t\t\t\t\t\tcontext.lineTo(itemToDraw.x2, itemToDraw.y2);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcontext.stroke();\n\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (optionTicks.display) {\n\t\t\t\t\t\t\t// Make sure we draw text in the correct color and font\n\t\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\t\tcontext.translate(itemToDraw.labelX, itemToDraw.labelY);\n\t\t\t\t\t\t\tcontext.rotate(itemToDraw.rotation);\n\t\t\t\t\t\t\tcontext.font = itemToDraw.major ? majorTickFont.font : tickFont.font;\n\t\t\t\t\t\t\tcontext.fillStyle = itemToDraw.major ? majorTickFontColor : tickFontColor;\n\t\t\t\t\t\t\tcontext.textBaseline = itemToDraw.textBaseline;\n\t\t\t\t\t\t\tcontext.textAlign = itemToDraw.textAlign;\n\n\t\t\t\t\t\t\tvar label = itemToDraw.label;\n\t\t\t\t\t\t\tif (helpers.isArray(label)) {\n\t\t\t\t\t\t\t\tvar lineCount = label.length;\n\t\t\t\t\t\t\t\tvar lineHeight = tickFont.size * 1.5;\n\t\t\t\t\t\t\t\tvar y = me.isHorizontal() ? 0 : -lineHeight * (lineCount - 1) / 2;\n\n\t\t\t\t\t\t\t\tfor (var i = 0; i < lineCount; ++i) {\n\t\t\t\t\t\t\t\t\t// We just make sure the multiline element is a string here..\n\t\t\t\t\t\t\t\t\tcontext.fillText('' + label[i], 0, y);\n\t\t\t\t\t\t\t\t\t// apply same lineSpacing as calculated @ L#320\n\t\t\t\t\t\t\t\t\ty += lineHeight;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcontext.fillText(label, 0, 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (scaleLabel.display) {\n\t\t\t\t\t\t// Draw the scale label\n\t\t\t\t\t\tvar scaleLabelX;\n\t\t\t\t\t\tvar scaleLabelY;\n\t\t\t\t\t\tvar rotation = 0;\n\t\t\t\t\t\tvar halfLineHeight = parseLineHeight(scaleLabel) / 2;\n\n\t\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\t\tscaleLabelX = me.left + (me.right - me.left) / 2; // midpoint of the width\n\t\t\t\t\t\t\tscaleLabelY = options.position === 'bottom' ? me.bottom - halfLineHeight - scaleLabelPadding.bottom : me.top + halfLineHeight + scaleLabelPadding.top;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar isLeft = options.position === 'left';\n\t\t\t\t\t\t\tscaleLabelX = isLeft ? me.left + halfLineHeight + scaleLabelPadding.top : me.right - halfLineHeight - scaleLabelPadding.top;\n\t\t\t\t\t\t\tscaleLabelY = me.top + (me.bottom - me.top) / 2;\n\t\t\t\t\t\t\trotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.translate(scaleLabelX, scaleLabelY);\n\t\t\t\t\t\tcontext.rotate(rotation);\n\t\t\t\t\t\tcontext.textAlign = 'center';\n\t\t\t\t\t\tcontext.textBaseline = 'middle';\n\t\t\t\t\t\tcontext.fillStyle = scaleLabelFontColor; // render in correct colour\n\t\t\t\t\t\tcontext.font = scaleLabelFont.font;\n\t\t\t\t\t\tcontext.fillText(scaleLabel.labelString, 0, 0);\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (gridLines.drawBorder) {\n\t\t\t\t\t\t// Draw the line at the edge of the axis\n\t\t\t\t\t\tcontext.lineWidth = helpers.valueAtIndexOrDefault(gridLines.lineWidth, 0);\n\t\t\t\t\t\tcontext.strokeStyle = helpers.valueAtIndexOrDefault(gridLines.color, 0);\n\t\t\t\t\t\tvar x1 = me.left;\n\t\t\t\t\t\tvar x2 = me.right + axisWidth;\n\t\t\t\t\t\tvar y1 = me.top;\n\t\t\t\t\t\tvar y2 = me.bottom + axisWidth;\n\n\t\t\t\t\t\tvar aliasPixel = helpers.aliasPixel(context.lineWidth);\n\t\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\t\ty1 = y2 = options.position === 'top' ? me.bottom : me.top;\n\t\t\t\t\t\t\ty1 += aliasPixel;\n\t\t\t\t\t\t\ty2 += aliasPixel;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tx1 = x2 = options.position === 'left' ? me.right : me.left;\n\t\t\t\t\t\t\tx1 += aliasPixel;\n\t\t\t\t\t\t\tx2 += aliasPixel;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontext.beginPath();\n\t\t\t\t\t\tcontext.moveTo(x1, y1);\n\t\t\t\t\t\tcontext.lineTo(x2, y2);\n\t\t\t\t\t\tcontext.stroke();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}, { \"26\": 26, \"27\": 27, \"35\": 35, \"46\": 46 }], 34: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar helpers = require(46);\n\t\t\tvar layouts = require(31);\n\n\t\t\tmodule.exports = {\n\t\t\t\t// Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\n\t\t\t\t// use the new chart options to grab the correct scale\n\t\t\t\tconstructors: {},\n\t\t\t\t// Use a registration function so that we can move to an ES6 map when we no longer need to support\n\t\t\t\t// old browsers\n\n\t\t\t\t// Scale config defaults\n\t\t\t\tdefaults: {},\n\t\t\t\tregisterScaleType: function registerScaleType(type, scaleConstructor, scaleDefaults) {\n\t\t\t\t\tthis.constructors[type] = scaleConstructor;\n\t\t\t\t\tthis.defaults[type] = helpers.clone(scaleDefaults);\n\t\t\t\t},\n\t\t\t\tgetScaleConstructor: function getScaleConstructor(type) {\n\t\t\t\t\treturn this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\n\t\t\t\t},\n\t\t\t\tgetScaleDefaults: function getScaleDefaults(type) {\n\t\t\t\t\t// Return the scale defaults merged with the global settings so that we always use the latest ones\n\t\t\t\t\treturn this.defaults.hasOwnProperty(type) ? helpers.merge({}, [defaults.scale, this.defaults[type]]) : {};\n\t\t\t\t},\n\t\t\t\tupdateScaleDefaults: function updateScaleDefaults(type, additions) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tif (me.defaults.hasOwnProperty(type)) {\n\t\t\t\t\t\tme.defaults[type] = helpers.extend(me.defaults[type], additions);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\taddScalesToLayout: function addScalesToLayout(chart) {\n\t\t\t\t\t// Adds each scale to the chart.boxes array to be sized accordingly\n\t\t\t\t\thelpers.each(chart.scales, function (scale) {\n\t\t\t\t\t\t// Set ILayoutItem parameters for backwards compatibility\n\t\t\t\t\t\tscale.fullWidth = scale.options.fullWidth;\n\t\t\t\t\t\tscale.position = scale.options.position;\n\t\t\t\t\t\tscale.weight = scale.options.weight;\n\t\t\t\t\t\tlayouts.addBox(chart, scale);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t}, { \"26\": 26, \"31\": 31, \"46\": 46 }], 35: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(46);\n\n\t\t\t/**\r\n * Namespace to hold static tick generation functions\r\n * @namespace Chart.Ticks\r\n */\n\t\t\tmodule.exports = {\n\t\t\t\t/**\r\n * Namespace to hold formatters for different types of ticks\r\n * @namespace Chart.Ticks.formatters\r\n */\n\t\t\t\tformatters: {\n\t\t\t\t\t/**\r\n * Formatter for value labels\r\n * @method Chart.Ticks.formatters.values\r\n * @param value the value to display\r\n * @return {String|Array} the label to display\r\n */\n\t\t\t\t\tvalues: function values(value) {\n\t\t\t\t\t\treturn helpers.isArray(value) ? value : '' + value;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Formatter for linear numeric ticks\r\n * @method Chart.Ticks.formatters.linear\r\n * @param tickValue {Number} the value to be formatted\r\n * @param index {Number} the position of the tickValue parameter in the ticks array\r\n * @param ticks {Array} the list of ticks being converted\r\n * @return {String} string representation of the tickValue parameter\r\n */\n\t\t\t\t\tlinear: function linear(tickValue, index, ticks) {\n\t\t\t\t\t\t// If we have lots of ticks, don't use the ones\n\t\t\t\t\t\tvar delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];\n\n\t\t\t\t\t\t// If we have a number like 2.5 as the delta, figure out how many decimal places we need\n\t\t\t\t\t\tif (Math.abs(delta) > 1) {\n\t\t\t\t\t\t\tif (tickValue !== Math.floor(tickValue)) {\n\t\t\t\t\t\t\t\t// not an integer\n\t\t\t\t\t\t\t\tdelta = tickValue - Math.floor(tickValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar logDelta = helpers.log10(Math.abs(delta));\n\t\t\t\t\t\tvar tickString = '';\n\n\t\t\t\t\t\tif (tickValue !== 0) {\n\t\t\t\t\t\t\tvar maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));\n\t\t\t\t\t\t\tif (maxTick < 1e-4) {\n\t\t\t\t\t\t\t\t// all ticks are small numbers; use scientific notation\n\t\t\t\t\t\t\t\tvar logTick = helpers.log10(Math.abs(tickValue));\n\t\t\t\t\t\t\t\ttickString = tickValue.toExponential(Math.floor(logTick) - Math.floor(logDelta));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar numDecimal = -1 * Math.floor(logDelta);\n\t\t\t\t\t\t\t\tnumDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\n\t\t\t\t\t\t\t\ttickString = tickValue.toFixed(numDecimal);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttickString = '0'; // never show decimal places for 0\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn tickString;\n\t\t\t\t\t},\n\n\t\t\t\t\tlogarithmic: function logarithmic(tickValue, index, ticks) {\n\t\t\t\t\t\tvar remain = tickValue / Math.pow(10, Math.floor(helpers.log10(tickValue)));\n\n\t\t\t\t\t\tif (tickValue === 0) {\n\t\t\t\t\t\t\treturn '0';\n\t\t\t\t\t\t} else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\n\t\t\t\t\t\t\treturn tickValue.toExponential();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}, { \"46\": 46 }], 36: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar Element = require(27);\n\t\t\tvar helpers = require(46);\n\n\t\t\tdefaults._set('global', {\n\t\t\t\ttooltips: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tcustom: null,\n\t\t\t\t\tmode: 'nearest',\n\t\t\t\t\tposition: 'average',\n\t\t\t\t\tintersect: true,\n\t\t\t\t\tbackgroundColor: 'rgba(0,0,0,0.8)',\n\t\t\t\t\ttitleFontStyle: 'bold',\n\t\t\t\t\ttitleSpacing: 2,\n\t\t\t\t\ttitleMarginBottom: 6,\n\t\t\t\t\ttitleFontColor: '#fff',\n\t\t\t\t\ttitleAlign: 'left',\n\t\t\t\t\tbodySpacing: 2,\n\t\t\t\t\tbodyFontColor: '#fff',\n\t\t\t\t\tbodyAlign: 'left',\n\t\t\t\t\tfooterFontStyle: 'bold',\n\t\t\t\t\tfooterSpacing: 2,\n\t\t\t\t\tfooterMarginTop: 6,\n\t\t\t\t\tfooterFontColor: '#fff',\n\t\t\t\t\tfooterAlign: 'left',\n\t\t\t\t\tyPadding: 6,\n\t\t\t\t\txPadding: 6,\n\t\t\t\t\tcaretPadding: 2,\n\t\t\t\t\tcaretSize: 5,\n\t\t\t\t\tcornerRadius: 6,\n\t\t\t\t\tmultiKeyBackground: '#fff',\n\t\t\t\t\tdisplayColors: true,\n\t\t\t\t\tborderColor: 'rgba(0,0,0,0)',\n\t\t\t\t\tborderWidth: 0,\n\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\t// Args are: (tooltipItems, data)\n\t\t\t\t\t\tbeforeTitle: helpers.noop,\n\t\t\t\t\t\ttitle: function title(tooltipItems, data) {\n\t\t\t\t\t\t\t// Pick first xLabel for now\n\t\t\t\t\t\t\tvar title = '';\n\t\t\t\t\t\t\tvar labels = data.labels;\n\t\t\t\t\t\t\tvar labelCount = labels ? labels.length : 0;\n\n\t\t\t\t\t\t\tif (tooltipItems.length > 0) {\n\t\t\t\t\t\t\t\tvar item = tooltipItems[0];\n\n\t\t\t\t\t\t\t\tif (item.xLabel) {\n\t\t\t\t\t\t\t\t\ttitle = item.xLabel;\n\t\t\t\t\t\t\t\t} else if (labelCount > 0 && item.index < labelCount) {\n\t\t\t\t\t\t\t\t\ttitle = labels[item.index];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn title;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tafterTitle: helpers.noop,\n\n\t\t\t\t\t\t// Args are: (tooltipItems, data)\n\t\t\t\t\t\tbeforeBody: helpers.noop,\n\n\t\t\t\t\t\t// Args are: (tooltipItem, data)\n\t\t\t\t\t\tbeforeLabel: helpers.noop,\n\t\t\t\t\t\tlabel: function label(tooltipItem, data) {\n\t\t\t\t\t\t\tvar label = data.datasets[tooltipItem.datasetIndex].label || '';\n\n\t\t\t\t\t\t\tif (label) {\n\t\t\t\t\t\t\t\tlabel += ': ';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlabel += tooltipItem.yLabel;\n\t\t\t\t\t\t\treturn label;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabelColor: function labelColor(tooltipItem, chart) {\n\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\n\t\t\t\t\t\t\tvar activeElement = meta.data[tooltipItem.index];\n\t\t\t\t\t\t\tvar view = activeElement._view;\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tborderColor: view.borderColor,\n\t\t\t\t\t\t\t\tbackgroundColor: view.backgroundColor\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabelTextColor: function labelTextColor() {\n\t\t\t\t\t\t\treturn this._options.bodyFontColor;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tafterLabel: helpers.noop,\n\n\t\t\t\t\t\t// Args are: (tooltipItems, data)\n\t\t\t\t\t\tafterBody: helpers.noop,\n\n\t\t\t\t\t\t// Args are: (tooltipItems, data)\n\t\t\t\t\t\tbeforeFooter: helpers.noop,\n\t\t\t\t\t\tfooter: helpers.noop,\n\t\t\t\t\t\tafterFooter: helpers.noop\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar positioners = {\n\t\t\t\t/**\r\n * Average mode places the tooltip at the average position of the elements shown\r\n * @function Chart.Tooltip.positioners.average\r\n * @param elements {ChartElement[]} the elements being displayed in the tooltip\r\n * @returns {Point} tooltip position\r\n */\n\t\t\t\taverage: function average(elements) {\n\t\t\t\t\tif (!elements.length) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar i, len;\n\t\t\t\t\tvar x = 0;\n\t\t\t\t\tvar y = 0;\n\t\t\t\t\tvar count = 0;\n\n\t\t\t\t\tfor (i = 0, len = elements.length; i < len; ++i) {\n\t\t\t\t\t\tvar el = elements[i];\n\t\t\t\t\t\tif (el && el.hasValue()) {\n\t\t\t\t\t\t\tvar pos = el.tooltipPosition();\n\t\t\t\t\t\t\tx += pos.x;\n\t\t\t\t\t\t\ty += pos.y;\n\t\t\t\t\t\t\t++count;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: Math.round(x / count),\n\t\t\t\t\t\ty: Math.round(y / count)\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Gets the tooltip position nearest of the item nearest to the event position\r\n * @function Chart.Tooltip.positioners.nearest\r\n * @param elements {Chart.Element[]} the tooltip elements\r\n * @param eventPosition {Point} the position of the event in canvas coordinates\r\n * @returns {Point} the tooltip position\r\n */\n\t\t\t\tnearest: function nearest(elements, eventPosition) {\n\t\t\t\t\tvar x = eventPosition.x;\n\t\t\t\t\tvar y = eventPosition.y;\n\t\t\t\t\tvar minDistance = Number.POSITIVE_INFINITY;\n\t\t\t\t\tvar i, len, nearestElement;\n\n\t\t\t\t\tfor (i = 0, len = elements.length; i < len; ++i) {\n\t\t\t\t\t\tvar el = elements[i];\n\t\t\t\t\t\tif (el && el.hasValue()) {\n\t\t\t\t\t\t\tvar center = el.getCenterPoint();\n\t\t\t\t\t\t\tvar d = helpers.distanceBetweenPoints(eventPosition, center);\n\n\t\t\t\t\t\t\tif (d < minDistance) {\n\t\t\t\t\t\t\t\tminDistance = d;\n\t\t\t\t\t\t\t\tnearestElement = el;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (nearestElement) {\n\t\t\t\t\t\tvar tp = nearestElement.tooltipPosition();\n\t\t\t\t\t\tx = tp.x;\n\t\t\t\t\t\ty = tp.y;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: x,\n\t\t\t\t\t\ty: y\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\r\n * Helper method to merge the opacity into a color\r\n */\n\t\t\tfunction mergeOpacity(colorString, opacity) {\n\t\t\t\tvar color = helpers.color(colorString);\n\t\t\t\treturn color.alpha(opacity * color.alpha()).rgbaString();\n\t\t\t}\n\n\t\t\t// Helper to push or concat based on if the 2nd parameter is an array or not\n\t\t\tfunction pushOrConcat(base, toPush) {\n\t\t\t\tif (toPush) {\n\t\t\t\t\tif (helpers.isArray(toPush)) {\n\t\t\t\t\t\t// base = base.concat(toPush);\n\t\t\t\t\t\tArray.prototype.push.apply(base, toPush);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbase.push(toPush);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn base;\n\t\t\t}\n\n\t\t\t/**\r\n * Returns array of strings split by newline\r\n * @param {String} value - The value to split by newline.\r\n * @returns {Array} value if newline present - Returned from String split() method\r\n * @function\r\n */\n\t\t\tfunction splitNewlines(str) {\n\t\t\t\tif ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n\t\t\t\t\treturn str.split('\\n');\n\t\t\t\t}\n\t\t\t\treturn str;\n\t\t\t}\n\n\t\t\t// Private helper to create a tooltip item model\n\t\t\t// @param element : the chart element (point, arc, bar) to create the tooltip item for\n\t\t\t// @return : new tooltip item\n\t\t\tfunction createTooltipItem(element) {\n\t\t\t\tvar xScale = element._xScale;\n\t\t\t\tvar yScale = element._yScale || element._scale; // handle radar || polarArea charts\n\t\t\t\tvar index = element._index;\n\t\t\t\tvar datasetIndex = element._datasetIndex;\n\n\t\t\t\treturn {\n\t\t\t\t\txLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\n\t\t\t\t\tyLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\n\t\t\t\t\tindex: index,\n\t\t\t\t\tdatasetIndex: datasetIndex,\n\t\t\t\t\tx: element._model.x,\n\t\t\t\t\ty: element._model.y\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/**\r\n * Helper to get the reset model for the tooltip\r\n * @param tooltipOpts {Object} the tooltip options\r\n */\n\t\t\tfunction getBaseModel(tooltipOpts) {\n\t\t\t\tvar globalDefaults = defaults.global;\n\t\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\n\t\t\t\treturn {\n\t\t\t\t\t// Positioning\n\t\t\t\t\txPadding: tooltipOpts.xPadding,\n\t\t\t\t\tyPadding: tooltipOpts.yPadding,\n\t\t\t\t\txAlign: tooltipOpts.xAlign,\n\t\t\t\t\tyAlign: tooltipOpts.yAlign,\n\n\t\t\t\t\t// Body\n\t\t\t\t\tbodyFontColor: tooltipOpts.bodyFontColor,\n\t\t\t\t\t_bodyFontFamily: valueOrDefault(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t\t\t_bodyFontStyle: valueOrDefault(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\n\t\t\t\t\t_bodyAlign: tooltipOpts.bodyAlign,\n\t\t\t\t\tbodyFontSize: valueOrDefault(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\n\t\t\t\t\tbodySpacing: tooltipOpts.bodySpacing,\n\n\t\t\t\t\t// Title\n\t\t\t\t\ttitleFontColor: tooltipOpts.titleFontColor,\n\t\t\t\t\t_titleFontFamily: valueOrDefault(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t\t\t_titleFontStyle: valueOrDefault(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\n\t\t\t\t\ttitleFontSize: valueOrDefault(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\n\t\t\t\t\t_titleAlign: tooltipOpts.titleAlign,\n\t\t\t\t\ttitleSpacing: tooltipOpts.titleSpacing,\n\t\t\t\t\ttitleMarginBottom: tooltipOpts.titleMarginBottom,\n\n\t\t\t\t\t// Footer\n\t\t\t\t\tfooterFontColor: tooltipOpts.footerFontColor,\n\t\t\t\t\t_footerFontFamily: valueOrDefault(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t\t\t_footerFontStyle: valueOrDefault(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\n\t\t\t\t\tfooterFontSize: valueOrDefault(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\n\t\t\t\t\t_footerAlign: tooltipOpts.footerAlign,\n\t\t\t\t\tfooterSpacing: tooltipOpts.footerSpacing,\n\t\t\t\t\tfooterMarginTop: tooltipOpts.footerMarginTop,\n\n\t\t\t\t\t// Appearance\n\t\t\t\t\tcaretSize: tooltipOpts.caretSize,\n\t\t\t\t\tcornerRadius: tooltipOpts.cornerRadius,\n\t\t\t\t\tbackgroundColor: tooltipOpts.backgroundColor,\n\t\t\t\t\topacity: 0,\n\t\t\t\t\tlegendColorBackground: tooltipOpts.multiKeyBackground,\n\t\t\t\t\tdisplayColors: tooltipOpts.displayColors,\n\t\t\t\t\tborderColor: tooltipOpts.borderColor,\n\t\t\t\t\tborderWidth: tooltipOpts.borderWidth\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/**\r\n * Get the size of the tooltip\r\n */\n\t\t\tfunction getTooltipSize(tooltip, model) {\n\t\t\t\tvar ctx = tooltip._chart.ctx;\n\n\t\t\t\tvar height = model.yPadding * 2; // Tooltip Padding\n\t\t\t\tvar width = 0;\n\n\t\t\t\t// Count of all lines in the body\n\t\t\t\tvar body = model.body;\n\t\t\t\tvar combinedBodyLength = body.reduce(function (count, bodyItem) {\n\t\t\t\t\treturn count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n\t\t\t\t}, 0);\n\t\t\t\tcombinedBodyLength += model.beforeBody.length + model.afterBody.length;\n\n\t\t\t\tvar titleLineCount = model.title.length;\n\t\t\t\tvar footerLineCount = model.footer.length;\n\t\t\t\tvar titleFontSize = model.titleFontSize;\n\t\t\t\tvar bodyFontSize = model.bodyFontSize;\n\t\t\t\tvar footerFontSize = model.footerFontSize;\n\n\t\t\t\theight += titleLineCount * titleFontSize; // Title Lines\n\t\t\t\theight += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\n\t\t\t\theight += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\n\t\t\t\theight += combinedBodyLength * bodyFontSize; // Body Lines\n\t\t\t\theight += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\n\t\t\t\theight += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\n\t\t\t\theight += footerLineCount * footerFontSize; // Footer Lines\n\t\t\t\theight += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\n\n\t\t\t\t// Title width\n\t\t\t\tvar widthPadding = 0;\n\t\t\t\tvar maxLineWidth = function maxLineWidth(line) {\n\t\t\t\t\twidth = Math.max(width, ctx.measureText(line).width + widthPadding);\n\t\t\t\t};\n\n\t\t\t\tctx.font = helpers.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\n\t\t\t\thelpers.each(model.title, maxLineWidth);\n\n\t\t\t\t// Body width\n\t\t\t\tctx.font = helpers.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\n\t\t\t\thelpers.each(model.beforeBody.concat(model.afterBody), maxLineWidth);\n\n\t\t\t\t// Body lines may include some extra width due to the color box\n\t\t\t\twidthPadding = model.displayColors ? bodyFontSize + 2 : 0;\n\t\t\t\thelpers.each(body, function (bodyItem) {\n\t\t\t\t\thelpers.each(bodyItem.before, maxLineWidth);\n\t\t\t\t\thelpers.each(bodyItem.lines, maxLineWidth);\n\t\t\t\t\thelpers.each(bodyItem.after, maxLineWidth);\n\t\t\t\t});\n\n\t\t\t\t// Reset back to 0\n\t\t\t\twidthPadding = 0;\n\n\t\t\t\t// Footer width\n\t\t\t\tctx.font = helpers.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\n\t\t\t\thelpers.each(model.footer, maxLineWidth);\n\n\t\t\t\t// Add padding\n\t\t\t\twidth += 2 * model.xPadding;\n\n\t\t\t\treturn {\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/**\r\n * Helper to get the alignment of a tooltip given the size\r\n */\n\t\t\tfunction determineAlignment(tooltip, size) {\n\t\t\t\tvar model = tooltip._model;\n\t\t\t\tvar chart = tooltip._chart;\n\t\t\t\tvar chartArea = tooltip._chart.chartArea;\n\t\t\t\tvar xAlign = 'center';\n\t\t\t\tvar yAlign = 'center';\n\n\t\t\t\tif (model.y < size.height) {\n\t\t\t\t\tyAlign = 'top';\n\t\t\t\t} else if (model.y > chart.height - size.height) {\n\t\t\t\t\tyAlign = 'bottom';\n\t\t\t\t}\n\n\t\t\t\tvar lf, rf; // functions to determine left, right alignment\n\t\t\t\tvar olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\n\t\t\t\tvar yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\n\t\t\t\tvar midX = (chartArea.left + chartArea.right) / 2;\n\t\t\t\tvar midY = (chartArea.top + chartArea.bottom) / 2;\n\n\t\t\t\tif (yAlign === 'center') {\n\t\t\t\t\tlf = function lf(x) {\n\t\t\t\t\t\treturn x <= midX;\n\t\t\t\t\t};\n\t\t\t\t\trf = function rf(x) {\n\t\t\t\t\t\treturn x > midX;\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tlf = function lf(x) {\n\t\t\t\t\t\treturn x <= size.width / 2;\n\t\t\t\t\t};\n\t\t\t\t\trf = function rf(x) {\n\t\t\t\t\t\treturn x >= chart.width - size.width / 2;\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tolf = function olf(x) {\n\t\t\t\t\treturn x + size.width + model.caretSize + model.caretPadding > chart.width;\n\t\t\t\t};\n\t\t\t\torf = function orf(x) {\n\t\t\t\t\treturn x - size.width - model.caretSize - model.caretPadding < 0;\n\t\t\t\t};\n\t\t\t\tyf = function yf(y) {\n\t\t\t\t\treturn y <= midY ? 'top' : 'bottom';\n\t\t\t\t};\n\n\t\t\t\tif (lf(model.x)) {\n\t\t\t\t\txAlign = 'left';\n\n\t\t\t\t\t// Is tooltip too wide and goes over the right side of the chart.?\n\t\t\t\t\tif (olf(model.x)) {\n\t\t\t\t\t\txAlign = 'center';\n\t\t\t\t\t\tyAlign = yf(model.y);\n\t\t\t\t\t}\n\t\t\t\t} else if (rf(model.x)) {\n\t\t\t\t\txAlign = 'right';\n\n\t\t\t\t\t// Is tooltip too wide and goes outside left edge of canvas?\n\t\t\t\t\tif (orf(model.x)) {\n\t\t\t\t\t\txAlign = 'center';\n\t\t\t\t\t\tyAlign = yf(model.y);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar opts = tooltip._options;\n\t\t\t\treturn {\n\t\t\t\t\txAlign: opts.xAlign ? opts.xAlign : xAlign,\n\t\t\t\t\tyAlign: opts.yAlign ? opts.yAlign : yAlign\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/**\r\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\r\n */\n\t\t\tfunction getBackgroundPoint(vm, size, alignment, chart) {\n\t\t\t\t// Background Position\n\t\t\t\tvar x = vm.x;\n\t\t\t\tvar y = vm.y;\n\n\t\t\t\tvar caretSize = vm.caretSize;\n\t\t\t\tvar caretPadding = vm.caretPadding;\n\t\t\t\tvar cornerRadius = vm.cornerRadius;\n\t\t\t\tvar xAlign = alignment.xAlign;\n\t\t\t\tvar yAlign = alignment.yAlign;\n\t\t\t\tvar paddingAndSize = caretSize + caretPadding;\n\t\t\t\tvar radiusAndPadding = cornerRadius + caretPadding;\n\n\t\t\t\tif (xAlign === 'right') {\n\t\t\t\t\tx -= size.width;\n\t\t\t\t} else if (xAlign === 'center') {\n\t\t\t\t\tx -= size.width / 2;\n\t\t\t\t\tif (x + size.width > chart.width) {\n\t\t\t\t\t\tx = chart.width - size.width;\n\t\t\t\t\t}\n\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\tx = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (yAlign === 'top') {\n\t\t\t\t\ty += paddingAndSize;\n\t\t\t\t} else if (yAlign === 'bottom') {\n\t\t\t\t\ty -= size.height + paddingAndSize;\n\t\t\t\t} else {\n\t\t\t\t\ty -= size.height / 2;\n\t\t\t\t}\n\n\t\t\t\tif (yAlign === 'center') {\n\t\t\t\t\tif (xAlign === 'left') {\n\t\t\t\t\t\tx += paddingAndSize;\n\t\t\t\t\t} else if (xAlign === 'right') {\n\t\t\t\t\t\tx -= paddingAndSize;\n\t\t\t\t\t}\n\t\t\t\t} else if (xAlign === 'left') {\n\t\t\t\t\tx -= radiusAndPadding;\n\t\t\t\t} else if (xAlign === 'right') {\n\t\t\t\t\tx += radiusAndPadding;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tx: x,\n\t\t\t\t\ty: y\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/**\r\n * Helper to build before and after body lines\r\n */\n\t\t\tfunction getBeforeAfterBodyLines(callback) {\n\t\t\t\treturn pushOrConcat([], splitNewlines(callback));\n\t\t\t}\n\n\t\t\tvar exports = module.exports = Element.extend({\n\t\t\t\tinitialize: function initialize() {\n\t\t\t\t\tthis._model = getBaseModel(this._options);\n\t\t\t\t\tthis._lastActive = [];\n\t\t\t\t},\n\n\t\t\t\t// Get the title\n\t\t\t\t// Args are: (tooltipItem, data)\n\t\t\t\tgetTitle: function getTitle() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar opts = me._options;\n\t\t\t\t\tvar callbacks = opts.callbacks;\n\n\t\t\t\t\tvar beforeTitle = callbacks.beforeTitle.apply(me, arguments);\n\t\t\t\t\tvar title = callbacks.title.apply(me, arguments);\n\t\t\t\t\tvar afterTitle = callbacks.afterTitle.apply(me, arguments);\n\n\t\t\t\t\tvar lines = [];\n\t\t\t\t\tlines = pushOrConcat(lines, splitNewlines(beforeTitle));\n\t\t\t\t\tlines = pushOrConcat(lines, splitNewlines(title));\n\t\t\t\t\tlines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n\t\t\t\t\treturn lines;\n\t\t\t\t},\n\n\t\t\t\t// Args are: (tooltipItem, data)\n\t\t\t\tgetBeforeBody: function getBeforeBody() {\n\t\t\t\t\treturn getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));\n\t\t\t\t},\n\n\t\t\t\t// Args are: (tooltipItem, data)\n\t\t\t\tgetBody: function getBody(tooltipItems, data) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar callbacks = me._options.callbacks;\n\t\t\t\t\tvar bodyItems = [];\n\n\t\t\t\t\thelpers.each(tooltipItems, function (tooltipItem) {\n\t\t\t\t\t\tvar bodyItem = {\n\t\t\t\t\t\t\tbefore: [],\n\t\t\t\t\t\t\tlines: [],\n\t\t\t\t\t\t\tafter: []\n\t\t\t\t\t\t};\n\t\t\t\t\t\tpushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));\n\t\t\t\t\t\tpushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\n\t\t\t\t\t\tpushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));\n\n\t\t\t\t\t\tbodyItems.push(bodyItem);\n\t\t\t\t\t});\n\n\t\t\t\t\treturn bodyItems;\n\t\t\t\t},\n\n\t\t\t\t// Args are: (tooltipItem, data)\n\t\t\t\tgetAfterBody: function getAfterBody() {\n\t\t\t\t\treturn getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));\n\t\t\t\t},\n\n\t\t\t\t// Get the footer and beforeFooter and afterFooter lines\n\t\t\t\t// Args are: (tooltipItem, data)\n\t\t\t\tgetFooter: function getFooter() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar callbacks = me._options.callbacks;\n\n\t\t\t\t\tvar beforeFooter = callbacks.beforeFooter.apply(me, arguments);\n\t\t\t\t\tvar footer = callbacks.footer.apply(me, arguments);\n\t\t\t\t\tvar afterFooter = callbacks.afterFooter.apply(me, arguments);\n\n\t\t\t\t\tvar lines = [];\n\t\t\t\t\tlines = pushOrConcat(lines, splitNewlines(beforeFooter));\n\t\t\t\t\tlines = pushOrConcat(lines, splitNewlines(footer));\n\t\t\t\t\tlines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n\t\t\t\t\treturn lines;\n\t\t\t\t},\n\n\t\t\t\tupdate: function update(changed) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar opts = me._options;\n\n\t\t\t\t\t// Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\n\t\t\t\t\t// that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time\n\t\t\t\t\t// which breaks any animations.\n\t\t\t\t\tvar existingModel = me._model;\n\t\t\t\t\tvar model = me._model = getBaseModel(opts);\n\t\t\t\t\tvar active = me._active;\n\n\t\t\t\t\tvar data = me._data;\n\n\t\t\t\t\t// In the case where active.length === 0 we need to keep these at existing values for good animations\n\t\t\t\t\tvar alignment = {\n\t\t\t\t\t\txAlign: existingModel.xAlign,\n\t\t\t\t\t\tyAlign: existingModel.yAlign\n\t\t\t\t\t};\n\t\t\t\t\tvar backgroundPoint = {\n\t\t\t\t\t\tx: existingModel.x,\n\t\t\t\t\t\ty: existingModel.y\n\t\t\t\t\t};\n\t\t\t\t\tvar tooltipSize = {\n\t\t\t\t\t\twidth: existingModel.width,\n\t\t\t\t\t\theight: existingModel.height\n\t\t\t\t\t};\n\t\t\t\t\tvar tooltipPosition = {\n\t\t\t\t\t\tx: existingModel.caretX,\n\t\t\t\t\t\ty: existingModel.caretY\n\t\t\t\t\t};\n\n\t\t\t\t\tvar i, len;\n\n\t\t\t\t\tif (active.length) {\n\t\t\t\t\t\tmodel.opacity = 1;\n\n\t\t\t\t\t\tvar labelColors = [];\n\t\t\t\t\t\tvar labelTextColors = [];\n\t\t\t\t\t\ttooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);\n\n\t\t\t\t\t\tvar tooltipItems = [];\n\t\t\t\t\t\tfor (i = 0, len = active.length; i < len; ++i) {\n\t\t\t\t\t\t\ttooltipItems.push(createTooltipItem(active[i]));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If the user provided a filter function, use it to modify the tooltip items\n\t\t\t\t\t\tif (opts.filter) {\n\t\t\t\t\t\t\ttooltipItems = tooltipItems.filter(function (a) {\n\t\t\t\t\t\t\t\treturn opts.filter(a, data);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If the user provided a sorting function, use it to modify the tooltip items\n\t\t\t\t\t\tif (opts.itemSort) {\n\t\t\t\t\t\t\ttooltipItems = tooltipItems.sort(function (a, b) {\n\t\t\t\t\t\t\t\treturn opts.itemSort(a, b, data);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Determine colors for boxes\n\t\t\t\t\t\thelpers.each(tooltipItems, function (tooltipItem) {\n\t\t\t\t\t\t\tlabelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\n\t\t\t\t\t\t\tlabelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Build the Text Lines\n\t\t\t\t\t\tmodel.title = me.getTitle(tooltipItems, data);\n\t\t\t\t\t\tmodel.beforeBody = me.getBeforeBody(tooltipItems, data);\n\t\t\t\t\t\tmodel.body = me.getBody(tooltipItems, data);\n\t\t\t\t\t\tmodel.afterBody = me.getAfterBody(tooltipItems, data);\n\t\t\t\t\t\tmodel.footer = me.getFooter(tooltipItems, data);\n\n\t\t\t\t\t\t// Initial positioning and colors\n\t\t\t\t\t\tmodel.x = Math.round(tooltipPosition.x);\n\t\t\t\t\t\tmodel.y = Math.round(tooltipPosition.y);\n\t\t\t\t\t\tmodel.caretPadding = opts.caretPadding;\n\t\t\t\t\t\tmodel.labelColors = labelColors;\n\t\t\t\t\t\tmodel.labelTextColors = labelTextColors;\n\n\t\t\t\t\t\t// data points\n\t\t\t\t\t\tmodel.dataPoints = tooltipItems;\n\n\t\t\t\t\t\t// We need to determine alignment of the tooltip\n\t\t\t\t\t\ttooltipSize = getTooltipSize(this, model);\n\t\t\t\t\t\talignment = determineAlignment(this, tooltipSize);\n\t\t\t\t\t\t// Final Size and Position\n\t\t\t\t\t\tbackgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmodel.opacity = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tmodel.xAlign = alignment.xAlign;\n\t\t\t\t\tmodel.yAlign = alignment.yAlign;\n\t\t\t\t\tmodel.x = backgroundPoint.x;\n\t\t\t\t\tmodel.y = backgroundPoint.y;\n\t\t\t\t\tmodel.width = tooltipSize.width;\n\t\t\t\t\tmodel.height = tooltipSize.height;\n\n\t\t\t\t\t// Point where the caret on the tooltip points to\n\t\t\t\t\tmodel.caretX = tooltipPosition.x;\n\t\t\t\t\tmodel.caretY = tooltipPosition.y;\n\n\t\t\t\t\tme._model = model;\n\n\t\t\t\t\tif (changed && opts.custom) {\n\t\t\t\t\t\topts.custom.call(me, model);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn me;\n\t\t\t\t},\n\n\t\t\t\tdrawCaret: function drawCaret(tooltipPoint, size) {\n\t\t\t\t\tvar ctx = this._chart.ctx;\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\tvar caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\n\n\t\t\t\t\tctx.lineTo(caretPosition.x1, caretPosition.y1);\n\t\t\t\t\tctx.lineTo(caretPosition.x2, caretPosition.y2);\n\t\t\t\t\tctx.lineTo(caretPosition.x3, caretPosition.y3);\n\t\t\t\t},\n\t\t\t\tgetCaretPosition: function getCaretPosition(tooltipPoint, size, vm) {\n\t\t\t\t\tvar x1, x2, x3, y1, y2, y3;\n\t\t\t\t\tvar caretSize = vm.caretSize;\n\t\t\t\t\tvar cornerRadius = vm.cornerRadius;\n\t\t\t\t\tvar xAlign = vm.xAlign;\n\t\t\t\t\tvar yAlign = vm.yAlign;\n\t\t\t\t\tvar ptX = tooltipPoint.x;\n\t\t\t\t\tvar ptY = tooltipPoint.y;\n\t\t\t\t\tvar width = size.width;\n\t\t\t\t\tvar height = size.height;\n\n\t\t\t\t\tif (yAlign === 'center') {\n\t\t\t\t\t\ty2 = ptY + height / 2;\n\n\t\t\t\t\t\tif (xAlign === 'left') {\n\t\t\t\t\t\t\tx1 = ptX;\n\t\t\t\t\t\t\tx2 = x1 - caretSize;\n\t\t\t\t\t\t\tx3 = x1;\n\n\t\t\t\t\t\t\ty1 = y2 + caretSize;\n\t\t\t\t\t\t\ty3 = y2 - caretSize;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tx1 = ptX + width;\n\t\t\t\t\t\t\tx2 = x1 + caretSize;\n\t\t\t\t\t\t\tx3 = x1;\n\n\t\t\t\t\t\t\ty1 = y2 - caretSize;\n\t\t\t\t\t\t\ty3 = y2 + caretSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (xAlign === 'left') {\n\t\t\t\t\t\t\tx2 = ptX + cornerRadius + caretSize;\n\t\t\t\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\t\t\t\tx3 = x2 + caretSize;\n\t\t\t\t\t\t} else if (xAlign === 'right') {\n\t\t\t\t\t\t\tx2 = ptX + width - cornerRadius - caretSize;\n\t\t\t\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\t\t\t\tx3 = x2 + caretSize;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tx2 = vm.caretX;\n\t\t\t\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\t\t\t\tx3 = x2 + caretSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (yAlign === 'top') {\n\t\t\t\t\t\t\ty1 = ptY;\n\t\t\t\t\t\t\ty2 = y1 - caretSize;\n\t\t\t\t\t\t\ty3 = y1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ty1 = ptY + height;\n\t\t\t\t\t\t\ty2 = y1 + caretSize;\n\t\t\t\t\t\t\ty3 = y1;\n\t\t\t\t\t\t\t// invert drawing order\n\t\t\t\t\t\t\tvar tmp = x3;\n\t\t\t\t\t\t\tx3 = x1;\n\t\t\t\t\t\t\tx1 = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn { x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3 };\n\t\t\t\t},\n\n\t\t\t\tdrawTitle: function drawTitle(pt, vm, ctx, opacity) {\n\t\t\t\t\tvar title = vm.title;\n\n\t\t\t\t\tif (title.length) {\n\t\t\t\t\t\tctx.textAlign = vm._titleAlign;\n\t\t\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\t\t\tvar titleFontSize = vm.titleFontSize;\n\t\t\t\t\t\tvar titleSpacing = vm.titleSpacing;\n\n\t\t\t\t\t\tctx.fillStyle = mergeOpacity(vm.titleFontColor, opacity);\n\t\t\t\t\t\tctx.font = helpers.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\n\n\t\t\t\t\t\tvar i, len;\n\t\t\t\t\t\tfor (i = 0, len = title.length; i < len; ++i) {\n\t\t\t\t\t\t\tctx.fillText(title[i], pt.x, pt.y);\n\t\t\t\t\t\t\tpt.y += titleFontSize + titleSpacing; // Line Height and spacing\n\n\t\t\t\t\t\t\tif (i + 1 === title.length) {\n\t\t\t\t\t\t\t\tpt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tdrawBody: function drawBody(pt, vm, ctx, opacity) {\n\t\t\t\t\tvar bodyFontSize = vm.bodyFontSize;\n\t\t\t\t\tvar bodySpacing = vm.bodySpacing;\n\t\t\t\t\tvar body = vm.body;\n\n\t\t\t\t\tctx.textAlign = vm._bodyAlign;\n\t\t\t\t\tctx.textBaseline = 'top';\n\t\t\t\t\tctx.font = helpers.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\n\n\t\t\t\t\t// Before Body\n\t\t\t\t\tvar xLinePadding = 0;\n\t\t\t\t\tvar fillLineOfText = function fillLineOfText(line) {\n\t\t\t\t\t\tctx.fillText(line, pt.x + xLinePadding, pt.y);\n\t\t\t\t\t\tpt.y += bodyFontSize + bodySpacing;\n\t\t\t\t\t};\n\n\t\t\t\t\t// Before body lines\n\t\t\t\t\tctx.fillStyle = mergeOpacity(vm.bodyFontColor, opacity);\n\t\t\t\t\thelpers.each(vm.beforeBody, fillLineOfText);\n\n\t\t\t\t\tvar drawColorBoxes = vm.displayColors;\n\t\t\t\t\txLinePadding = drawColorBoxes ? bodyFontSize + 2 : 0;\n\n\t\t\t\t\t// Draw body lines now\n\t\t\t\t\thelpers.each(body, function (bodyItem, i) {\n\t\t\t\t\t\tvar textColor = mergeOpacity(vm.labelTextColors[i], opacity);\n\t\t\t\t\t\tctx.fillStyle = textColor;\n\t\t\t\t\t\thelpers.each(bodyItem.before, fillLineOfText);\n\n\t\t\t\t\t\thelpers.each(bodyItem.lines, function (line) {\n\t\t\t\t\t\t\t// Draw Legend-like boxes if needed\n\t\t\t\t\t\t\tif (drawColorBoxes) {\n\t\t\t\t\t\t\t\t// Fill a white rect so that colours merge nicely if the opacity is < 1\n\t\t\t\t\t\t\t\tctx.fillStyle = mergeOpacity(vm.legendColorBackground, opacity);\n\t\t\t\t\t\t\t\tctx.fillRect(pt.x, pt.y, bodyFontSize, bodyFontSize);\n\n\t\t\t\t\t\t\t\t// Border\n\t\t\t\t\t\t\t\tctx.lineWidth = 1;\n\t\t\t\t\t\t\t\tctx.strokeStyle = mergeOpacity(vm.labelColors[i].borderColor, opacity);\n\t\t\t\t\t\t\t\tctx.strokeRect(pt.x, pt.y, bodyFontSize, bodyFontSize);\n\n\t\t\t\t\t\t\t\t// Inner square\n\t\t\t\t\t\t\t\tctx.fillStyle = mergeOpacity(vm.labelColors[i].backgroundColor, opacity);\n\t\t\t\t\t\t\t\tctx.fillRect(pt.x + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\n\t\t\t\t\t\t\t\tctx.fillStyle = textColor;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfillLineOfText(line);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\thelpers.each(bodyItem.after, fillLineOfText);\n\t\t\t\t\t});\n\n\t\t\t\t\t// Reset back to 0 for after body\n\t\t\t\t\txLinePadding = 0;\n\n\t\t\t\t\t// After body lines\n\t\t\t\t\thelpers.each(vm.afterBody, fillLineOfText);\n\t\t\t\t\tpt.y -= bodySpacing; // Remove last body spacing\n\t\t\t\t},\n\n\t\t\t\tdrawFooter: function drawFooter(pt, vm, ctx, opacity) {\n\t\t\t\t\tvar footer = vm.footer;\n\n\t\t\t\t\tif (footer.length) {\n\t\t\t\t\t\tpt.y += vm.footerMarginTop;\n\n\t\t\t\t\t\tctx.textAlign = vm._footerAlign;\n\t\t\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\t\t\tctx.fillStyle = mergeOpacity(vm.footerFontColor, opacity);\n\t\t\t\t\t\tctx.font = helpers.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\n\n\t\t\t\t\t\thelpers.each(footer, function (line) {\n\t\t\t\t\t\t\tctx.fillText(line, pt.x, pt.y);\n\t\t\t\t\t\t\tpt.y += vm.footerFontSize + vm.footerSpacing;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tdrawBackground: function drawBackground(pt, vm, ctx, tooltipSize, opacity) {\n\t\t\t\t\tctx.fillStyle = mergeOpacity(vm.backgroundColor, opacity);\n\t\t\t\t\tctx.strokeStyle = mergeOpacity(vm.borderColor, opacity);\n\t\t\t\t\tctx.lineWidth = vm.borderWidth;\n\t\t\t\t\tvar xAlign = vm.xAlign;\n\t\t\t\t\tvar yAlign = vm.yAlign;\n\t\t\t\t\tvar x = pt.x;\n\t\t\t\t\tvar y = pt.y;\n\t\t\t\t\tvar width = tooltipSize.width;\n\t\t\t\t\tvar height = tooltipSize.height;\n\t\t\t\t\tvar radius = vm.cornerRadius;\n\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(x + radius, y);\n\t\t\t\t\tif (yAlign === 'top') {\n\t\t\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t\t\t}\n\t\t\t\t\tctx.lineTo(x + width - radius, y);\n\t\t\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n\t\t\t\t\tif (yAlign === 'center' && xAlign === 'right') {\n\t\t\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t\t\t}\n\t\t\t\t\tctx.lineTo(x + width, y + height - radius);\n\t\t\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n\t\t\t\t\tif (yAlign === 'bottom') {\n\t\t\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t\t\t}\n\t\t\t\t\tctx.lineTo(x + radius, y + height);\n\t\t\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n\t\t\t\t\tif (yAlign === 'center' && xAlign === 'left') {\n\t\t\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t\t\t}\n\t\t\t\t\tctx.lineTo(x, y + radius);\n\t\t\t\t\tctx.quadraticCurveTo(x, y, x + radius, y);\n\t\t\t\t\tctx.closePath();\n\n\t\t\t\t\tctx.fill();\n\n\t\t\t\t\tif (vm.borderWidth > 0) {\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tdraw: function draw() {\n\t\t\t\t\tvar ctx = this._chart.ctx;\n\t\t\t\t\tvar vm = this._view;\n\n\t\t\t\t\tif (vm.opacity === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar tooltipSize = {\n\t\t\t\t\t\twidth: vm.width,\n\t\t\t\t\t\theight: vm.height\n\t\t\t\t\t};\n\t\t\t\t\tvar pt = {\n\t\t\t\t\t\tx: vm.x,\n\t\t\t\t\t\ty: vm.y\n\t\t\t\t\t};\n\n\t\t\t\t\t// IE11/Edge does not like very small opacities, so snap to 0\n\t\t\t\t\tvar opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;\n\n\t\t\t\t\t// Truthy/falsey value for empty tooltip\n\t\t\t\t\tvar hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\n\n\t\t\t\t\tif (this._options.enabled && hasTooltipContent) {\n\t\t\t\t\t\t// Draw Background\n\t\t\t\t\t\tthis.drawBackground(pt, vm, ctx, tooltipSize, opacity);\n\n\t\t\t\t\t\t// Draw Title, Body, and Footer\n\t\t\t\t\t\tpt.x += vm.xPadding;\n\t\t\t\t\t\tpt.y += vm.yPadding;\n\n\t\t\t\t\t\t// Titles\n\t\t\t\t\t\tthis.drawTitle(pt, vm, ctx, opacity);\n\n\t\t\t\t\t\t// Body\n\t\t\t\t\t\tthis.drawBody(pt, vm, ctx, opacity);\n\n\t\t\t\t\t\t// Footer\n\t\t\t\t\t\tthis.drawFooter(pt, vm, ctx, opacity);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Handle an event\r\n * @private\r\n * @param {IEvent} event - The event to handle\r\n * @returns {Boolean} true if the tooltip changed\r\n */\n\t\t\t\thandleEvent: function handleEvent(e) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar options = me._options;\n\t\t\t\t\tvar changed = false;\n\n\t\t\t\t\tme._lastActive = me._lastActive || [];\n\n\t\t\t\t\t// Find Active Elements for tooltips\n\t\t\t\t\tif (e.type === 'mouseout') {\n\t\t\t\t\t\tme._active = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tme._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember Last Actives\n\t\t\t\t\tchanged = !helpers.arrayEquals(me._active, me._lastActive);\n\n\t\t\t\t\t// Only handle target event on tooltip change\n\t\t\t\t\tif (changed) {\n\t\t\t\t\t\tme._lastActive = me._active;\n\n\t\t\t\t\t\tif (options.enabled || options.custom) {\n\t\t\t\t\t\t\tme._eventPosition = {\n\t\t\t\t\t\t\t\tx: e.x,\n\t\t\t\t\t\t\t\ty: e.y\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tme.update(true);\n\t\t\t\t\t\t\tme.pivot();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/**\r\n * @namespace Chart.Tooltip.positioners\r\n */\n\t\t\texports.positioners = positioners;\n\t\t}, { \"26\": 26, \"27\": 27, \"46\": 46 }], 37: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar Element = require(27);\n\t\t\tvar helpers = require(46);\n\n\t\t\tdefaults._set('global', {\n\t\t\t\telements: {\n\t\t\t\t\tarc: {\n\t\t\t\t\t\tbackgroundColor: defaults.global.defaultColor,\n\t\t\t\t\t\tborderColor: '#fff',\n\t\t\t\t\t\tborderWidth: 2\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmodule.exports = Element.extend({\n\t\t\t\tinLabelRange: function inLabelRange(mouseX) {\n\t\t\t\t\tvar vm = this._view;\n\n\t\t\t\t\tif (vm) {\n\t\t\t\t\t\treturn Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\n\t\t\t\tinRange: function inRange(chartX, chartY) {\n\t\t\t\t\tvar vm = this._view;\n\n\t\t\t\t\tif (vm) {\n\t\t\t\t\t\tvar pointRelativePosition = helpers.getAngleFromPoint(vm, { x: chartX, y: chartY });\n\t\t\t\t\t\tvar angle = pointRelativePosition.angle;\n\t\t\t\t\t\tvar distance = pointRelativePosition.distance;\n\n\t\t\t\t\t\t// Sanitise angle range\n\t\t\t\t\t\tvar startAngle = vm.startAngle;\n\t\t\t\t\t\tvar endAngle = vm.endAngle;\n\t\t\t\t\t\twhile (endAngle < startAngle) {\n\t\t\t\t\t\t\tendAngle += 2.0 * Math.PI;\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile (angle > endAngle) {\n\t\t\t\t\t\t\tangle -= 2.0 * Math.PI;\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile (angle < startAngle) {\n\t\t\t\t\t\t\tangle += 2.0 * Math.PI;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check if within the range of the open/close angle\n\t\t\t\t\t\tvar betweenAngles = angle >= startAngle && angle <= endAngle;\n\t\t\t\t\t\tvar withinRadius = distance >= vm.innerRadius && distance <= vm.outerRadius;\n\n\t\t\t\t\t\treturn betweenAngles && withinRadius;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\n\t\t\t\tgetCenterPoint: function getCenterPoint() {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\tvar halfAngle = (vm.startAngle + vm.endAngle) / 2;\n\t\t\t\t\tvar halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: vm.x + Math.cos(halfAngle) * halfRadius,\n\t\t\t\t\t\ty: vm.y + Math.sin(halfAngle) * halfRadius\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tgetArea: function getArea() {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\treturn Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\n\t\t\t\t},\n\n\t\t\t\ttooltipPosition: function tooltipPosition() {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\tvar centreAngle = vm.startAngle + (vm.endAngle - vm.startAngle) / 2;\n\t\t\t\t\tvar rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: vm.x + Math.cos(centreAngle) * rangeFromCentre,\n\t\t\t\t\t\ty: vm.y + Math.sin(centreAngle) * rangeFromCentre\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tdraw: function draw() {\n\t\t\t\t\tvar ctx = this._chart.ctx;\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\tvar sA = vm.startAngle;\n\t\t\t\t\tvar eA = vm.endAngle;\n\n\t\t\t\t\tctx.beginPath();\n\n\t\t\t\t\tctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);\n\t\t\t\t\tctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.strokeStyle = vm.borderColor;\n\t\t\t\t\tctx.lineWidth = vm.borderWidth;\n\n\t\t\t\t\tctx.fillStyle = vm.backgroundColor;\n\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tctx.lineJoin = 'bevel';\n\n\t\t\t\t\tif (vm.borderWidth) {\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}, { \"26\": 26, \"27\": 27, \"46\": 46 }], 38: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar Element = require(27);\n\t\t\tvar helpers = require(46);\n\n\t\t\tvar globalDefaults = defaults.global;\n\n\t\t\tdefaults._set('global', {\n\t\t\t\telements: {\n\t\t\t\t\tline: {\n\t\t\t\t\t\ttension: 0.4,\n\t\t\t\t\t\tbackgroundColor: globalDefaults.defaultColor,\n\t\t\t\t\t\tborderWidth: 3,\n\t\t\t\t\t\tborderColor: globalDefaults.defaultColor,\n\t\t\t\t\t\tborderCapStyle: 'butt',\n\t\t\t\t\t\tborderDash: [],\n\t\t\t\t\t\tborderDashOffset: 0.0,\n\t\t\t\t\t\tborderJoinStyle: 'miter',\n\t\t\t\t\t\tcapBezierPoints: true,\n\t\t\t\t\t\tfill: true // do we fill in the area between the line and its base axis\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmodule.exports = Element.extend({\n\t\t\t\tdraw: function draw() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar vm = me._view;\n\t\t\t\t\tvar ctx = me._chart.ctx;\n\t\t\t\t\tvar spanGaps = vm.spanGaps;\n\t\t\t\t\tvar points = me._children.slice(); // clone array\n\t\t\t\t\tvar globalOptionLineElements = globalDefaults.elements.line;\n\t\t\t\t\tvar lastDrawnIndex = -1;\n\t\t\t\t\tvar index, current, previous, currentVM;\n\n\t\t\t\t\t// If we are looping, adding the first point again\n\t\t\t\t\tif (me._loop && points.length) {\n\t\t\t\t\t\tpoints.push(points[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.save();\n\n\t\t\t\t\t// Stroke Line Options\n\t\t\t\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\n\n\t\t\t\t\t// IE 9 and 10 do not support line dash\n\t\t\t\t\tif (ctx.setLineDash) {\n\t\t\t\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.lineDashOffset = vm.borderDashOffset || globalOptionLineElements.borderDashOffset;\n\t\t\t\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\n\t\t\t\t\tctx.lineWidth = vm.borderWidth || globalOptionLineElements.borderWidth;\n\t\t\t\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\n\n\t\t\t\t\t// Stroke Line\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tlastDrawnIndex = -1;\n\n\t\t\t\t\tfor (index = 0; index < points.length; ++index) {\n\t\t\t\t\t\tcurrent = points[index];\n\t\t\t\t\t\tprevious = helpers.previousItem(points, index);\n\t\t\t\t\t\tcurrentVM = current._view;\n\n\t\t\t\t\t\t// First point moves to it's starting position no matter what\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprevious = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];\n\n\t\t\t\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\t\t\t\tif (lastDrawnIndex !== index - 1 && !spanGaps || lastDrawnIndex === -1) {\n\t\t\t\t\t\t\t\t\t// There was a gap and this is the first point after the gap\n\t\t\t\t\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Line to next point\n\t\t\t\t\t\t\t\t\thelpers.canvas.lineTo(ctx, previous._view, current._view);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.stroke();\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\t\t\t});\n\t\t}, { \"26\": 26, \"27\": 27, \"46\": 46 }], 39: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar Element = require(27);\n\t\t\tvar helpers = require(46);\n\n\t\t\tvar defaultColor = defaults.global.defaultColor;\n\n\t\t\tdefaults._set('global', {\n\t\t\t\telements: {\n\t\t\t\t\tpoint: {\n\t\t\t\t\t\tradius: 3,\n\t\t\t\t\t\tpointStyle: 'circle',\n\t\t\t\t\t\tbackgroundColor: defaultColor,\n\t\t\t\t\t\tborderColor: defaultColor,\n\t\t\t\t\t\tborderWidth: 1,\n\t\t\t\t\t\t// Hover\n\t\t\t\t\t\thitRadius: 1,\n\t\t\t\t\t\thoverRadius: 4,\n\t\t\t\t\t\thoverBorderWidth: 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfunction xRange(mouseX) {\n\t\t\t\tvar vm = this._view;\n\t\t\t\treturn vm ? Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius : false;\n\t\t\t}\n\n\t\t\tfunction yRange(mouseY) {\n\t\t\t\tvar vm = this._view;\n\t\t\t\treturn vm ? Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius : false;\n\t\t\t}\n\n\t\t\tmodule.exports = Element.extend({\n\t\t\t\tinRange: function inRange(mouseX, mouseY) {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\treturn vm ? Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2) < Math.pow(vm.hitRadius + vm.radius, 2) : false;\n\t\t\t\t},\n\n\t\t\t\tinLabelRange: xRange,\n\t\t\t\tinXRange: xRange,\n\t\t\t\tinYRange: yRange,\n\n\t\t\t\tgetCenterPoint: function getCenterPoint() {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: vm.x,\n\t\t\t\t\t\ty: vm.y\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tgetArea: function getArea() {\n\t\t\t\t\treturn Math.PI * Math.pow(this._view.radius, 2);\n\t\t\t\t},\n\n\t\t\t\ttooltipPosition: function tooltipPosition() {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: vm.x,\n\t\t\t\t\t\ty: vm.y,\n\t\t\t\t\t\tpadding: vm.radius + vm.borderWidth\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tdraw: function draw(chartArea) {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\tvar model = this._model;\n\t\t\t\t\tvar ctx = this._chart.ctx;\n\t\t\t\t\tvar pointStyle = vm.pointStyle;\n\t\t\t\t\tvar rotation = vm.rotation;\n\t\t\t\t\tvar radius = vm.radius;\n\t\t\t\t\tvar x = vm.x;\n\t\t\t\t\tvar y = vm.y;\n\t\t\t\t\tvar errMargin = 1.01; // 1.01 is margin for Accumulated error. (Especially Edge, IE.)\n\n\t\t\t\t\tif (vm.skip) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clipping for Points.\n\t\t\t\t\tif (chartArea === undefined || model.x >= chartArea.left && chartArea.right * errMargin >= model.x && model.y >= chartArea.top && chartArea.bottom * errMargin >= model.y) {\n\t\t\t\t\t\tctx.strokeStyle = vm.borderColor || defaultColor;\n\t\t\t\t\t\tctx.lineWidth = helpers.valueOrDefault(vm.borderWidth, defaults.global.elements.point.borderWidth);\n\t\t\t\t\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\n\t\t\t\t\t\thelpers.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}, { \"26\": 26, \"27\": 27, \"46\": 46 }], 40: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar Element = require(27);\n\n\t\t\tdefaults._set('global', {\n\t\t\t\telements: {\n\t\t\t\t\trectangle: {\n\t\t\t\t\t\tbackgroundColor: defaults.global.defaultColor,\n\t\t\t\t\t\tborderColor: defaults.global.defaultColor,\n\t\t\t\t\t\tborderSkipped: 'bottom',\n\t\t\t\t\t\tborderWidth: 0\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfunction isVertical(bar) {\n\t\t\t\treturn bar._view.width !== undefined;\n\t\t\t}\n\n\t\t\t/**\r\n * Helper function to get the bounds of the bar regardless of the orientation\r\n * @param bar {Chart.Element.Rectangle} the bar\r\n * @return {Bounds} bounds of the bar\r\n * @private\r\n */\n\t\t\tfunction getBarBounds(bar) {\n\t\t\t\tvar vm = bar._view;\n\t\t\t\tvar x1, x2, y1, y2;\n\n\t\t\t\tif (isVertical(bar)) {\n\t\t\t\t\t// vertical\n\t\t\t\t\tvar halfWidth = vm.width / 2;\n\t\t\t\t\tx1 = vm.x - halfWidth;\n\t\t\t\t\tx2 = vm.x + halfWidth;\n\t\t\t\t\ty1 = Math.min(vm.y, vm.base);\n\t\t\t\t\ty2 = Math.max(vm.y, vm.base);\n\t\t\t\t} else {\n\t\t\t\t\t// horizontal bar\n\t\t\t\t\tvar halfHeight = vm.height / 2;\n\t\t\t\t\tx1 = Math.min(vm.x, vm.base);\n\t\t\t\t\tx2 = Math.max(vm.x, vm.base);\n\t\t\t\t\ty1 = vm.y - halfHeight;\n\t\t\t\t\ty2 = vm.y + halfHeight;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tleft: x1,\n\t\t\t\t\ttop: y1,\n\t\t\t\t\tright: x2,\n\t\t\t\t\tbottom: y2\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tmodule.exports = Element.extend({\n\t\t\t\tdraw: function draw() {\n\t\t\t\t\tvar ctx = this._chart.ctx;\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\tvar left, right, top, bottom, signX, signY, borderSkipped;\n\t\t\t\t\tvar borderWidth = vm.borderWidth;\n\n\t\t\t\t\tif (!vm.horizontal) {\n\t\t\t\t\t\t// bar\n\t\t\t\t\t\tleft = vm.x - vm.width / 2;\n\t\t\t\t\t\tright = vm.x + vm.width / 2;\n\t\t\t\t\t\ttop = vm.y;\n\t\t\t\t\t\tbottom = vm.base;\n\t\t\t\t\t\tsignX = 1;\n\t\t\t\t\t\tsignY = bottom > top ? 1 : -1;\n\t\t\t\t\t\tborderSkipped = vm.borderSkipped || 'bottom';\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// horizontal bar\n\t\t\t\t\t\tleft = vm.base;\n\t\t\t\t\t\tright = vm.x;\n\t\t\t\t\t\ttop = vm.y - vm.height / 2;\n\t\t\t\t\t\tbottom = vm.y + vm.height / 2;\n\t\t\t\t\t\tsignX = right > left ? 1 : -1;\n\t\t\t\t\t\tsignY = 1;\n\t\t\t\t\t\tborderSkipped = vm.borderSkipped || 'left';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Canvas doesn't allow us to stroke inside the width so we can\n\t\t\t\t\t// adjust the sizes to fit if we're setting a stroke on the line\n\t\t\t\t\tif (borderWidth) {\n\t\t\t\t\t\t// borderWidth shold be less than bar width and bar height.\n\t\t\t\t\t\tvar barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom));\n\t\t\t\t\t\tborderWidth = borderWidth > barSize ? barSize : borderWidth;\n\t\t\t\t\t\tvar halfStroke = borderWidth / 2;\n\t\t\t\t\t\t// Adjust borderWidth when bar top position is near vm.base(zero).\n\t\t\t\t\t\tvar borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0);\n\t\t\t\t\t\tvar borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0);\n\t\t\t\t\t\tvar borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0);\n\t\t\t\t\t\tvar borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0);\n\t\t\t\t\t\t// not become a vertical line?\n\t\t\t\t\t\tif (borderLeft !== borderRight) {\n\t\t\t\t\t\t\ttop = borderTop;\n\t\t\t\t\t\t\tbottom = borderBottom;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// not become a horizontal line?\n\t\t\t\t\t\tif (borderTop !== borderBottom) {\n\t\t\t\t\t\t\tleft = borderLeft;\n\t\t\t\t\t\t\tright = borderRight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.fillStyle = vm.backgroundColor;\n\t\t\t\t\tctx.strokeStyle = vm.borderColor;\n\t\t\t\t\tctx.lineWidth = borderWidth;\n\n\t\t\t\t\t// Corner points, from bottom-left to bottom-right clockwise\n\t\t\t\t\t// | 1 2 |\n\t\t\t\t\t// | 0 3 |\n\t\t\t\t\tvar corners = [[left, bottom], [left, top], [right, top], [right, bottom]];\n\n\t\t\t\t\t// Find first (starting) corner with fallback to 'bottom'\n\t\t\t\t\tvar borders = ['bottom', 'left', 'top', 'right'];\n\t\t\t\t\tvar startCorner = borders.indexOf(borderSkipped, 0);\n\t\t\t\t\tif (startCorner === -1) {\n\t\t\t\t\t\tstartCorner = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction cornerAt(index) {\n\t\t\t\t\t\treturn corners[(startCorner + index) % 4];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw rectangle from 'startCorner'\n\t\t\t\t\tvar corner = cornerAt(0);\n\t\t\t\t\tctx.moveTo(corner[0], corner[1]);\n\n\t\t\t\t\tfor (var i = 1; i < 4; i++) {\n\t\t\t\t\t\tcorner = cornerAt(i);\n\t\t\t\t\t\tctx.lineTo(corner[0], corner[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tif (borderWidth) {\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\theight: function height() {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\treturn vm.base - vm.y;\n\t\t\t\t},\n\n\t\t\t\tinRange: function inRange(mouseX, mouseY) {\n\t\t\t\t\tvar inRange = false;\n\n\t\t\t\t\tif (this._view) {\n\t\t\t\t\t\tvar bounds = getBarBounds(this);\n\t\t\t\t\t\tinRange = mouseX >= bounds.left && mouseX <= bounds.right && mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn inRange;\n\t\t\t\t},\n\n\t\t\t\tinLabelRange: function inLabelRange(mouseX, mouseY) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tif (!me._view) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar inRange = false;\n\t\t\t\t\tvar bounds = getBarBounds(me);\n\n\t\t\t\t\tif (isVertical(me)) {\n\t\t\t\t\t\tinRange = mouseX >= bounds.left && mouseX <= bounds.right;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinRange = mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn inRange;\n\t\t\t\t},\n\n\t\t\t\tinXRange: function inXRange(mouseX) {\n\t\t\t\t\tvar bounds = getBarBounds(this);\n\t\t\t\t\treturn mouseX >= bounds.left && mouseX <= bounds.right;\n\t\t\t\t},\n\n\t\t\t\tinYRange: function inYRange(mouseY) {\n\t\t\t\t\tvar bounds = getBarBounds(this);\n\t\t\t\t\treturn mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t\t\t\t},\n\n\t\t\t\tgetCenterPoint: function getCenterPoint() {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\tvar x, y;\n\t\t\t\t\tif (isVertical(this)) {\n\t\t\t\t\t\tx = vm.x;\n\t\t\t\t\t\ty = (vm.y + vm.base) / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx = (vm.x + vm.base) / 2;\n\t\t\t\t\t\ty = vm.y;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn { x: x, y: y };\n\t\t\t\t},\n\n\t\t\t\tgetArea: function getArea() {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\treturn vm.width * Math.abs(vm.y - vm.base);\n\t\t\t\t},\n\n\t\t\t\ttooltipPosition: function tooltipPosition() {\n\t\t\t\t\tvar vm = this._view;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: vm.x,\n\t\t\t\t\t\ty: vm.y\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t}, { \"26\": 26, \"27\": 27 }], 41: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tmodule.exports = {};\n\t\t\tmodule.exports.Arc = require(37);\n\t\t\tmodule.exports.Line = require(38);\n\t\t\tmodule.exports.Point = require(39);\n\t\t\tmodule.exports.Rectangle = require(40);\n\t\t}, { \"37\": 37, \"38\": 38, \"39\": 39, \"40\": 40 }], 42: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(43);\n\n\t\t\t/**\r\n * @namespace Chart.helpers.canvas\r\n */\n\t\t\tvar exports = module.exports = {\n\t\t\t\t/**\r\n * Clears the entire canvas associated to the given `chart`.\r\n * @param {Chart} chart - The chart for which to clear the canvas.\r\n */\n\t\t\t\tclear: function clear(chart) {\n\t\t\t\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\r\n * given size (width, height) and the same `radius` for all corners.\r\n * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\r\n * @param {Number} x - The x axis of the coordinate for the rectangle starting point.\r\n * @param {Number} y - The y axis of the coordinate for the rectangle starting point.\r\n * @param {Number} width - The rectangle's width.\r\n * @param {Number} height - The rectangle's height.\r\n * @param {Number} radius - The rounded amount (in pixels) for the four corners.\r\n * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\r\n */\n\t\t\t\troundedRect: function roundedRect(ctx, x, y, width, height, radius) {\n\t\t\t\t\tif (radius) {\n\t\t\t\t\t\t// NOTE(SB) `epsilon` helps to prevent minor artifacts appearing\n\t\t\t\t\t\t// on Chrome when `r` is exactly half the height or the width.\n\t\t\t\t\t\tvar epsilon = 0.0000001;\n\t\t\t\t\t\tvar r = Math.min(radius, height / 2 - epsilon, width / 2 - epsilon);\n\n\t\t\t\t\t\tctx.moveTo(x + r, y);\n\t\t\t\t\t\tctx.lineTo(x + width - r, y);\n\t\t\t\t\t\tctx.arcTo(x + width, y, x + width, y + r, r);\n\t\t\t\t\t\tctx.lineTo(x + width, y + height - r);\n\t\t\t\t\t\tctx.arcTo(x + width, y + height, x + width - r, y + height, r);\n\t\t\t\t\t\tctx.lineTo(x + r, y + height);\n\t\t\t\t\t\tctx.arcTo(x, y + height, x, y + height - r, r);\n\t\t\t\t\t\tctx.lineTo(x, y + r);\n\t\t\t\t\t\tctx.arcTo(x, y, x + r, y, r);\n\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\tctx.moveTo(x, y);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.rect(x, y, width, height);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tdrawPoint: function drawPoint(ctx, style, radius, x, y, rotation) {\n\t\t\t\t\tvar type, edgeLength, xOffset, yOffset, height, size;\n\t\t\t\t\trotation = rotation || 0;\n\n\t\t\t\t\tif (style && (typeof style === \"undefined\" ? \"undefined\" : _typeof(style)) === 'object') {\n\t\t\t\t\t\ttype = style.toString();\n\t\t\t\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n\t\t\t\t\t\t\tctx.drawImage(style, x - style.width / 2, y - style.height / 2, style.width, style.height);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isNaN(radius) || radius <= 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.translate(x, y);\n\t\t\t\t\tctx.rotate(rotation * Math.PI / 180);\n\t\t\t\t\tctx.beginPath();\n\n\t\t\t\t\tswitch (style) {\n\t\t\t\t\t\t// Default includes circle\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2);\n\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'triangle':\n\t\t\t\t\t\t\tedgeLength = 3 * radius / Math.sqrt(3);\n\t\t\t\t\t\t\theight = edgeLength * Math.sqrt(3) / 2;\n\t\t\t\t\t\t\tctx.moveTo(-edgeLength / 2, height / 3);\n\t\t\t\t\t\t\tctx.lineTo(edgeLength / 2, height / 3);\n\t\t\t\t\t\t\tctx.lineTo(0, -2 * height / 3);\n\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'rect':\n\t\t\t\t\t\t\tsize = 1 / Math.SQRT2 * radius;\n\t\t\t\t\t\t\tctx.rect(-size, -size, 2 * size, 2 * size);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'rectRounded':\n\t\t\t\t\t\t\tvar offset = radius / Math.SQRT2;\n\t\t\t\t\t\t\tvar leftX = -offset;\n\t\t\t\t\t\t\tvar topY = -offset;\n\t\t\t\t\t\t\tvar sideSize = Math.SQRT2 * radius;\n\n\t\t\t\t\t\t\t// NOTE(SB) the rounded rect implementation changed to use `arcTo`\n\t\t\t\t\t\t\t// instead of `quadraticCurveTo` since it generates better results\n\t\t\t\t\t\t\t// when rect is almost a circle. 0.425 (instead of 0.5) produces\n\t\t\t\t\t\t\t// results visually closer to the previous impl.\n\t\t\t\t\t\t\tthis.roundedRect(ctx, leftX, topY, sideSize, sideSize, radius * 0.425);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'rectRot':\n\t\t\t\t\t\t\tsize = 1 / Math.SQRT2 * radius;\n\t\t\t\t\t\t\tctx.moveTo(-size, 0);\n\t\t\t\t\t\t\tctx.lineTo(0, size);\n\t\t\t\t\t\t\tctx.lineTo(size, 0);\n\t\t\t\t\t\t\tctx.lineTo(0, -size);\n\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'cross':\n\t\t\t\t\t\t\tctx.moveTo(0, radius);\n\t\t\t\t\t\t\tctx.lineTo(0, -radius);\n\t\t\t\t\t\t\tctx.moveTo(-radius, 0);\n\t\t\t\t\t\t\tctx.lineTo(radius, 0);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'crossRot':\n\t\t\t\t\t\t\txOffset = Math.cos(Math.PI / 4) * radius;\n\t\t\t\t\t\t\tyOffset = Math.sin(Math.PI / 4) * radius;\n\t\t\t\t\t\t\tctx.moveTo(-xOffset, -yOffset);\n\t\t\t\t\t\t\tctx.lineTo(xOffset, yOffset);\n\t\t\t\t\t\t\tctx.moveTo(-xOffset, yOffset);\n\t\t\t\t\t\t\tctx.lineTo(xOffset, -yOffset);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'star':\n\t\t\t\t\t\t\tctx.moveTo(0, radius);\n\t\t\t\t\t\t\tctx.lineTo(0, -radius);\n\t\t\t\t\t\t\tctx.moveTo(-radius, 0);\n\t\t\t\t\t\t\tctx.lineTo(radius, 0);\n\t\t\t\t\t\t\txOffset = Math.cos(Math.PI / 4) * radius;\n\t\t\t\t\t\t\tyOffset = Math.sin(Math.PI / 4) * radius;\n\t\t\t\t\t\t\tctx.moveTo(-xOffset, -yOffset);\n\t\t\t\t\t\t\tctx.lineTo(xOffset, yOffset);\n\t\t\t\t\t\t\tctx.moveTo(-xOffset, yOffset);\n\t\t\t\t\t\t\tctx.lineTo(xOffset, -yOffset);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'line':\n\t\t\t\t\t\t\tctx.moveTo(-radius, 0);\n\t\t\t\t\t\t\tctx.lineTo(radius, 0);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'dash':\n\t\t\t\t\t\t\tctx.moveTo(0, 0);\n\t\t\t\t\t\t\tctx.lineTo(radius, 0);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tctx.stroke();\n\t\t\t\t\tctx.restore();\n\t\t\t\t},\n\n\t\t\t\tclipArea: function clipArea(ctx, area) {\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n\t\t\t\t\tctx.clip();\n\t\t\t\t},\n\n\t\t\t\tunclipArea: function unclipArea(ctx) {\n\t\t\t\t\tctx.restore();\n\t\t\t\t},\n\n\t\t\t\tlineTo: function lineTo(ctx, previous, target, flip) {\n\t\t\t\t\tif (target.steppedLine) {\n\t\t\t\t\t\tif (target.steppedLine === 'after' && !flip || target.steppedLine !== 'after' && flip) {\n\t\t\t\t\t\t\tctx.lineTo(previous.x, target.y);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.lineTo(target.x, previous.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tctx.lineTo(target.x, target.y);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!target.tension) {\n\t\t\t\t\t\tctx.lineTo(target.x, target.y);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.bezierCurveTo(flip ? previous.controlPointPreviousX : previous.controlPointNextX, flip ? previous.controlPointPreviousY : previous.controlPointNextY, flip ? target.controlPointNextX : target.controlPointPreviousX, flip ? target.controlPointNextY : target.controlPointPreviousY, target.x, target.y);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// DEPRECATIONS\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\r\n * @namespace Chart.helpers.clear\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\thelpers.clear = exports.clear;\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\r\n * @namespace Chart.helpers.drawRoundedRectangle\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\thelpers.drawRoundedRectangle = function (ctx) {\n\t\t\t\tctx.beginPath();\n\t\t\t\texports.roundedRect.apply(exports, arguments);\n\t\t\t};\n\t\t}, { \"43\": 43 }], 43: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\t/**\r\n * @namespace Chart.helpers\r\n */\n\n\t\t\tvar helpers = {\n\t\t\t\t/**\r\n * An empty function that can be used, for example, for optional callback.\r\n */\n\t\t\t\tnoop: function noop() {},\n\n\t\t\t\t/**\r\n * Returns a unique id, sequentially generated from a global variable.\r\n * @returns {Number}\r\n * @function\r\n */\n\t\t\t\tuid: function () {\n\t\t\t\t\tvar id = 0;\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\treturn id++;\n\t\t\t\t\t};\n\t\t\t\t}(),\n\n\t\t\t\t/**\r\n * Returns true if `value` is neither null nor undefined, else returns false.\r\n * @param {*} value - The value to test.\r\n * @returns {Boolean}\r\n * @since 2.7.0\r\n */\n\t\t\t\tisNullOrUndef: function isNullOrUndef(value) {\n\t\t\t\t\treturn value === null || typeof value === 'undefined';\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns true if `value` is an array, else returns false.\r\n * @param {*} value - The value to test.\r\n * @returns {Boolean}\r\n * @function\r\n */\n\t\t\t\tisArray: Array.isArray ? Array.isArray : function (value) {\n\t\t\t\t\treturn Object.prototype.toString.call(value) === '[object Array]';\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns true if `value` is an object (excluding null), else returns false.\r\n * @param {*} value - The value to test.\r\n * @returns {Boolean}\r\n * @since 2.7.0\r\n */\n\t\t\t\tisObject: function isObject(value) {\n\t\t\t\t\treturn value !== null && Object.prototype.toString.call(value) === '[object Object]';\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns `value` if defined, else returns `defaultValue`.\r\n * @param {*} value - The value to return if defined.\r\n * @param {*} defaultValue - The value to return if `value` is undefined.\r\n * @returns {*}\r\n */\n\t\t\t\tvalueOrDefault: function valueOrDefault(value, defaultValue) {\n\t\t\t\t\treturn typeof value === 'undefined' ? defaultValue : value;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns value at the given `index` in array if defined, else returns `defaultValue`.\r\n * @param {Array} value - The array to lookup for value at `index`.\r\n * @param {Number} index - The index in `value` to lookup for value.\r\n * @param {*} defaultValue - The value to return if `value[index]` is undefined.\r\n * @returns {*}\r\n */\n\t\t\t\tvalueAtIndexOrDefault: function valueAtIndexOrDefault(value, index, defaultValue) {\n\t\t\t\t\treturn helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\r\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\r\n * @param {Function} fn - The function to call.\r\n * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\r\n * @param {Object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n * @returns {*}\r\n */\n\t\t\t\tcallback: function callback(fn, args, thisArg) {\n\t\t\t\t\tif (fn && typeof fn.call === 'function') {\n\t\t\t\t\t\treturn fn.apply(thisArg, args);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Note(SB) for performance sake, this method should only be used when loopable type\r\n * is unknown or in none intensive code (not called often and small loopable). Else\r\n * it's preferable to use a regular for() loop and save extra function calls.\r\n * @param {Object|Array} loopable - The object or array to be iterated.\r\n * @param {Function} fn - The function to call for each item.\r\n * @param {Object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n * @param {Boolean} [reverse] - If true, iterates backward on the loopable.\r\n */\n\t\t\t\teach: function each(loopable, fn, thisArg, reverse) {\n\t\t\t\t\tvar i, len, keys;\n\t\t\t\t\tif (helpers.isArray(loopable)) {\n\t\t\t\t\t\tlen = loopable.length;\n\t\t\t\t\t\tif (reverse) {\n\t\t\t\t\t\t\tfor (i = len - 1; i >= 0; i--) {\n\t\t\t\t\t\t\t\tfn.call(thisArg, loopable[i], i);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\t\t\tfn.call(thisArg, loopable[i], i);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (helpers.isObject(loopable)) {\n\t\t\t\t\t\tkeys = Object.keys(loopable);\n\t\t\t\t\t\tlen = keys.length;\n\t\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\t\tfn.call(thisArg, loopable[keys[i]], keys[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\r\n * @see http://stackoverflow.com/a/14853974\r\n * @param {Array} a0 - The array to compare\r\n * @param {Array} a1 - The array to compare\r\n * @returns {Boolean}\r\n */\n\t\t\t\tarrayEquals: function arrayEquals(a0, a1) {\n\t\t\t\t\tvar i, ilen, v0, v1;\n\n\t\t\t\t\tif (!a0 || !a1 || a0.length !== a1.length) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (i = 0, ilen = a0.length; i < ilen; ++i) {\n\t\t\t\t\t\tv0 = a0[i];\n\t\t\t\t\t\tv1 = a1[i];\n\n\t\t\t\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\n\t\t\t\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (v0 !== v1) {\n\t\t\t\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Returns a deep copy of `source` without keeping references on objects and arrays.\r\n * @param {*} source - The value to clone.\r\n * @returns {*}\r\n */\n\t\t\t\tclone: function clone(source) {\n\t\t\t\t\tif (helpers.isArray(source)) {\n\t\t\t\t\t\treturn source.map(helpers.clone);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (helpers.isObject(source)) {\n\t\t\t\t\t\tvar target = {};\n\t\t\t\t\t\tvar keys = Object.keys(source);\n\t\t\t\t\t\tvar klen = keys.length;\n\t\t\t\t\t\tvar k = 0;\n\n\t\t\t\t\t\tfor (; k < klen; ++k) {\n\t\t\t\t\t\t\ttarget[keys[k]] = helpers.clone(source[keys[k]]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn target;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn source;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * The default merger when Chart.helpers.merge is called without merger option.\r\n * Note(SB): this method is also used by configMerge and scaleMerge as fallback.\r\n * @private\r\n */\n\t\t\t\t_merger: function _merger(key, target, source, options) {\n\t\t\t\t\tvar tval = target[key];\n\t\t\t\t\tvar sval = source[key];\n\n\t\t\t\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\n\t\t\t\t\t\thelpers.merge(tval, sval, options);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[key] = helpers.clone(sval);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Merges source[key] in target[key] only if target[key] is undefined.\r\n * @private\r\n */\n\t\t\t\t_mergerIf: function _mergerIf(key, target, source) {\n\t\t\t\t\tvar tval = target[key];\n\t\t\t\t\tvar sval = source[key];\n\n\t\t\t\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\n\t\t\t\t\t\thelpers.mergeIf(tval, sval);\n\t\t\t\t\t} else if (!target.hasOwnProperty(key)) {\n\t\t\t\t\t\ttarget[key] = helpers.clone(sval);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Recursively deep copies `source` properties into `target` with the given `options`.\r\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n * @param {Object} target - The target object in which all sources are merged into.\r\n * @param {Object|Array(Object)} source - Object(s) to merge into `target`.\r\n * @param {Object} [options] - Merging options:\r\n * @param {Function} [options.merger] - The merge method (key, target, source, options)\r\n * @returns {Object} The `target` object.\r\n */\n\t\t\t\tmerge: function merge(target, source, options) {\n\t\t\t\t\tvar sources = helpers.isArray(source) ? source : [source];\n\t\t\t\t\tvar ilen = sources.length;\n\t\t\t\t\tvar merge, i, keys, klen, k;\n\n\t\t\t\t\tif (!helpers.isObject(target)) {\n\t\t\t\t\t\treturn target;\n\t\t\t\t\t}\n\n\t\t\t\t\toptions = options || {};\n\t\t\t\t\tmerge = options.merger || helpers._merger;\n\n\t\t\t\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\t\t\t\tsource = sources[i];\n\t\t\t\t\t\tif (!helpers.isObject(source)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tkeys = Object.keys(source);\n\t\t\t\t\t\tfor (k = 0, klen = keys.length; k < klen; ++k) {\n\t\t\t\t\t\t\tmerge(keys[k], target, source, options);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn target;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\r\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n * @param {Object} target - The target object in which all sources are merged into.\r\n * @param {Object|Array(Object)} source - Object(s) to merge into `target`.\r\n * @returns {Object} The `target` object.\r\n */\n\t\t\t\tmergeIf: function mergeIf(target, source) {\n\t\t\t\t\treturn helpers.merge(target, source, { merger: helpers._mergerIf });\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Applies the contents of two or more objects together into the first object.\r\n * @param {Object} target - The target object in which all objects are merged into.\r\n * @param {Object} arg1 - Object containing additional properties to merge in target.\r\n * @param {Object} argN - Additional objects containing properties to merge in target.\r\n * @returns {Object} The `target` object.\r\n */\n\t\t\t\textend: function extend(target) {\n\t\t\t\t\tvar setFn = function setFn(value, key) {\n\t\t\t\t\t\ttarget[key] = value;\n\t\t\t\t\t};\n\t\t\t\t\tfor (var i = 1, ilen = arguments.length; i < ilen; ++i) {\n\t\t\t\t\t\thelpers.each(arguments[i], setFn);\n\t\t\t\t\t}\n\t\t\t\t\treturn target;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Basic javascript inheritance based on the model created in Backbone.js\r\n */\n\t\t\t\tinherits: function inherits(extensions) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar ChartElement = extensions && extensions.hasOwnProperty('constructor') ? extensions.constructor : function () {\n\t\t\t\t\t\treturn me.apply(this, arguments);\n\t\t\t\t\t};\n\n\t\t\t\t\tvar Surrogate = function Surrogate() {\n\t\t\t\t\t\tthis.constructor = ChartElement;\n\t\t\t\t\t};\n\n\t\t\t\t\tSurrogate.prototype = me.prototype;\n\t\t\t\t\tChartElement.prototype = new Surrogate();\n\t\t\t\t\tChartElement.extend = helpers.inherits;\n\n\t\t\t\t\tif (extensions) {\n\t\t\t\t\t\thelpers.extend(ChartElement.prototype, extensions);\n\t\t\t\t\t}\n\n\t\t\t\t\tChartElement.__super__ = me.prototype;\n\t\t\t\t\treturn ChartElement;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tmodule.exports = helpers;\n\n\t\t\t// DEPRECATIONS\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Chart.helpers.callback instead.\r\n * @function Chart.helpers.callCallback\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\thelpers.callCallback = helpers.callback;\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\r\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\r\n * @function Chart.helpers.indexOf\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\thelpers.indexOf = function (array, item, fromIndex) {\n\t\t\t\treturn Array.prototype.indexOf.call(array, item, fromIndex);\n\t\t\t};\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\r\n * @function Chart.helpers.getValueOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\thelpers.getValueOrDefault = helpers.valueOrDefault;\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\r\n * @function Chart.helpers.getValueAtIndexOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\thelpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\t\t}, {}], 44: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(43);\n\n\t\t\t/**\r\n * Easing functions adapted from Robert Penner's easing equations.\r\n * @namespace Chart.helpers.easingEffects\r\n * @see http://www.robertpenner.com/easing/\r\n */\n\t\t\tvar effects = {\n\t\t\t\tlinear: function linear(t) {\n\t\t\t\t\treturn t;\n\t\t\t\t},\n\n\t\t\t\teaseInQuad: function easeInQuad(t) {\n\t\t\t\t\treturn t * t;\n\t\t\t\t},\n\n\t\t\t\teaseOutQuad: function easeOutQuad(t) {\n\t\t\t\t\treturn -t * (t - 2);\n\t\t\t\t},\n\n\t\t\t\teaseInOutQuad: function easeInOutQuad(t) {\n\t\t\t\t\tif ((t /= 0.5) < 1) {\n\t\t\t\t\t\treturn 0.5 * t * t;\n\t\t\t\t\t}\n\t\t\t\t\treturn -0.5 * (--t * (t - 2) - 1);\n\t\t\t\t},\n\n\t\t\t\teaseInCubic: function easeInCubic(t) {\n\t\t\t\t\treturn t * t * t;\n\t\t\t\t},\n\n\t\t\t\teaseOutCubic: function easeOutCubic(t) {\n\t\t\t\t\treturn (t = t - 1) * t * t + 1;\n\t\t\t\t},\n\n\t\t\t\teaseInOutCubic: function easeInOutCubic(t) {\n\t\t\t\t\tif ((t /= 0.5) < 1) {\n\t\t\t\t\t\treturn 0.5 * t * t * t;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0.5 * ((t -= 2) * t * t + 2);\n\t\t\t\t},\n\n\t\t\t\teaseInQuart: function easeInQuart(t) {\n\t\t\t\t\treturn t * t * t * t;\n\t\t\t\t},\n\n\t\t\t\teaseOutQuart: function easeOutQuart(t) {\n\t\t\t\t\treturn -((t = t - 1) * t * t * t - 1);\n\t\t\t\t},\n\n\t\t\t\teaseInOutQuart: function easeInOutQuart(t) {\n\t\t\t\t\tif ((t /= 0.5) < 1) {\n\t\t\t\t\t\treturn 0.5 * t * t * t * t;\n\t\t\t\t\t}\n\t\t\t\t\treturn -0.5 * ((t -= 2) * t * t * t - 2);\n\t\t\t\t},\n\n\t\t\t\teaseInQuint: function easeInQuint(t) {\n\t\t\t\t\treturn t * t * t * t * t;\n\t\t\t\t},\n\n\t\t\t\teaseOutQuint: function easeOutQuint(t) {\n\t\t\t\t\treturn (t = t - 1) * t * t * t * t + 1;\n\t\t\t\t},\n\n\t\t\t\teaseInOutQuint: function easeInOutQuint(t) {\n\t\t\t\t\tif ((t /= 0.5) < 1) {\n\t\t\t\t\t\treturn 0.5 * t * t * t * t * t;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n\t\t\t\t},\n\n\t\t\t\teaseInSine: function easeInSine(t) {\n\t\t\t\t\treturn -Math.cos(t * (Math.PI / 2)) + 1;\n\t\t\t\t},\n\n\t\t\t\teaseOutSine: function easeOutSine(t) {\n\t\t\t\t\treturn Math.sin(t * (Math.PI / 2));\n\t\t\t\t},\n\n\t\t\t\teaseInOutSine: function easeInOutSine(t) {\n\t\t\t\t\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n\t\t\t\t},\n\n\t\t\t\teaseInExpo: function easeInExpo(t) {\n\t\t\t\t\treturn t === 0 ? 0 : Math.pow(2, 10 * (t - 1));\n\t\t\t\t},\n\n\t\t\t\teaseOutExpo: function easeOutExpo(t) {\n\t\t\t\t\treturn t === 1 ? 1 : -Math.pow(2, -10 * t) + 1;\n\t\t\t\t},\n\n\t\t\t\teaseInOutExpo: function easeInOutExpo(t) {\n\t\t\t\t\tif (t === 0) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (t === 1) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\tif ((t /= 0.5) < 1) {\n\t\t\t\t\t\treturn 0.5 * Math.pow(2, 10 * (t - 1));\n\t\t\t\t\t}\n\t\t\t\t\treturn 0.5 * (-Math.pow(2, -10 * --t) + 2);\n\t\t\t\t},\n\n\t\t\t\teaseInCirc: function easeInCirc(t) {\n\t\t\t\t\tif (t >= 1) {\n\t\t\t\t\t\treturn t;\n\t\t\t\t\t}\n\t\t\t\t\treturn -(Math.sqrt(1 - t * t) - 1);\n\t\t\t\t},\n\n\t\t\t\teaseOutCirc: function easeOutCirc(t) {\n\t\t\t\t\treturn Math.sqrt(1 - (t = t - 1) * t);\n\t\t\t\t},\n\n\t\t\t\teaseInOutCirc: function easeInOutCirc(t) {\n\t\t\t\t\tif ((t /= 0.5) < 1) {\n\t\t\t\t\t\treturn -0.5 * (Math.sqrt(1 - t * t) - 1);\n\t\t\t\t\t}\n\t\t\t\t\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n\t\t\t\t},\n\n\t\t\t\teaseInElastic: function easeInElastic(t) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\tvar p = 0;\n\t\t\t\t\tvar a = 1;\n\t\t\t\t\tif (t === 0) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (t === 1) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (!p) {\n\t\t\t\t\t\tp = 0.3;\n\t\t\t\t\t}\n\t\t\t\t\tif (a < 1) {\n\t\t\t\t\t\ta = 1;\n\t\t\t\t\t\ts = p / 4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\t\t}\n\t\t\t\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n\t\t\t\t},\n\n\t\t\t\teaseOutElastic: function easeOutElastic(t) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\tvar p = 0;\n\t\t\t\t\tvar a = 1;\n\t\t\t\t\tif (t === 0) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (t === 1) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (!p) {\n\t\t\t\t\t\tp = 0.3;\n\t\t\t\t\t}\n\t\t\t\t\tif (a < 1) {\n\t\t\t\t\t\ta = 1;\n\t\t\t\t\t\ts = p / 4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\t\t}\n\t\t\t\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\n\t\t\t\t},\n\n\t\t\t\teaseInOutElastic: function easeInOutElastic(t) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\tvar p = 0;\n\t\t\t\t\tvar a = 1;\n\t\t\t\t\tif (t === 0) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tif ((t /= 0.5) === 2) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (!p) {\n\t\t\t\t\t\tp = 0.45;\n\t\t\t\t\t}\n\t\t\t\t\tif (a < 1) {\n\t\t\t\t\t\ta = 1;\n\t\t\t\t\t\ts = p / 4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t\t\t\t}\n\t\t\t\t\tif (t < 1) {\n\t\t\t\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n\t\t\t\t\t}\n\t\t\t\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\t\t\t\t},\n\t\t\t\teaseInBack: function easeInBack(t) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\treturn t * t * ((s + 1) * t - s);\n\t\t\t\t},\n\n\t\t\t\teaseOutBack: function easeOutBack(t) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\treturn (t = t - 1) * t * ((s + 1) * t + s) + 1;\n\t\t\t\t},\n\n\t\t\t\teaseInOutBack: function easeInOutBack(t) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\tif ((t /= 0.5) < 1) {\n\t\t\t\t\t\treturn 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n\t\t\t\t\t}\n\t\t\t\t\treturn 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n\t\t\t\t},\n\n\t\t\t\teaseInBounce: function easeInBounce(t) {\n\t\t\t\t\treturn 1 - effects.easeOutBounce(1 - t);\n\t\t\t\t},\n\n\t\t\t\teaseOutBounce: function easeOutBounce(t) {\n\t\t\t\t\tif (t < 1 / 2.75) {\n\t\t\t\t\t\treturn 7.5625 * t * t;\n\t\t\t\t\t}\n\t\t\t\t\tif (t < 2 / 2.75) {\n\t\t\t\t\t\treturn 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n\t\t\t\t\t}\n\t\t\t\t\tif (t < 2.5 / 2.75) {\n\t\t\t\t\t\treturn 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n\t\t\t\t\t}\n\t\t\t\t\treturn 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n\t\t\t\t},\n\n\t\t\t\teaseInOutBounce: function easeInOutBounce(t) {\n\t\t\t\t\tif (t < 0.5) {\n\t\t\t\t\t\treturn effects.easeInBounce(t * 2) * 0.5;\n\t\t\t\t\t}\n\t\t\t\t\treturn effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tmodule.exports = {\n\t\t\t\teffects: effects\n\t\t\t};\n\n\t\t\t// DEPRECATIONS\n\n\t\t\t/**\r\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\r\n * @function Chart.helpers.easingEffects\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\thelpers.easingEffects = effects;\n\t\t}, { \"43\": 43 }], 45: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(43);\n\n\t\t\t/**\r\n * @alias Chart.helpers.options\r\n * @namespace\r\n */\n\t\t\tmodule.exports = {\n\t\t\t\t/**\r\n * Converts the given line height `value` in pixels for a specific font `size`.\r\n * @param {Number|String} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\r\n * @param {Number} size - The font size (in pixels) used to resolve relative `value`.\r\n * @returns {Number} The effective line height in pixels (size * 1.2 if value is invalid).\r\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\r\n * @since 2.7.0\r\n */\n\t\t\t\ttoLineHeight: function toLineHeight(value, size) {\n\t\t\t\t\tvar matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\n\t\t\t\t\tif (!matches || matches[1] === 'normal') {\n\t\t\t\t\t\treturn size * 1.2;\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = +matches[2];\n\n\t\t\t\t\tswitch (matches[3]) {\n\t\t\t\t\t\tcase 'px':\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\tcase '%':\n\t\t\t\t\t\t\tvalue /= 100;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn size * value;\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Converts the given value into a padding object with pre-computed width/height.\r\n * @param {Number|Object} value - If a number, set the value to all TRBL component,\r\n * else, if and object, use defined properties and sets undefined ones to 0.\r\n * @returns {Object} The padding values (top, right, bottom, left, width, height)\r\n * @since 2.7.0\r\n */\n\t\t\t\ttoPadding: function toPadding(value) {\n\t\t\t\t\tvar t, r, b, l;\n\n\t\t\t\t\tif (helpers.isObject(value)) {\n\t\t\t\t\t\tt = +value.top || 0;\n\t\t\t\t\t\tr = +value.right || 0;\n\t\t\t\t\t\tb = +value.bottom || 0;\n\t\t\t\t\t\tl = +value.left || 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt = r = b = l = +value || 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tright: r,\n\t\t\t\t\t\tbottom: b,\n\t\t\t\t\t\tleft: l,\n\t\t\t\t\t\theight: t + b,\n\t\t\t\t\t\twidth: l + r\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Evaluates the given `inputs` sequentially and returns the first defined value.\r\n * @param {Array[]} inputs - An array of values, falling back to the last value.\r\n * @param {Object} [context] - If defined and the current value is a function, the value\r\n * is called with `context` as first argument and the result becomes the new input.\r\n * @param {Number} [index] - If defined and the current value is an array, the value\r\n * at `index` become the new input.\r\n * @since 2.7.0\r\n */\n\t\t\t\tresolve: function resolve(inputs, context, index) {\n\t\t\t\t\tvar i, ilen, value;\n\n\t\t\t\t\tfor (i = 0, ilen = inputs.length; i < ilen; ++i) {\n\t\t\t\t\t\tvalue = inputs[i];\n\t\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (context !== undefined && typeof value === 'function') {\n\t\t\t\t\t\t\tvalue = value(context);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (index !== undefined && helpers.isArray(value)) {\n\t\t\t\t\t\t\tvalue = value[index];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}, { \"43\": 43 }], 46: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tmodule.exports = require(43);\n\t\t\tmodule.exports.easing = require(44);\n\t\t\tmodule.exports.canvas = require(42);\n\t\t\tmodule.exports.options = require(45);\n\t\t}, { \"42\": 42, \"43\": 43, \"44\": 44, \"45\": 45 }], 47: [function (require, module, exports) {\n\t\t\t/**\r\n * Platform fallback implementation (minimal).\r\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\r\n */\n\n\t\t\tmodule.exports = {\n\t\t\t\tacquireContext: function acquireContext(item) {\n\t\t\t\t\tif (item && item.canvas) {\n\t\t\t\t\t\t// Support for any object associated to a canvas (including a context2d)\n\t\t\t\t\t\titem = item.canvas;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn item && item.getContext('2d') || null;\n\t\t\t\t}\n\t\t\t};\n\t\t}, {}], 48: [function (require, module, exports) {\n\t\t\t/**\r\n * Chart.Platform implementation for targeting a web browser\r\n */\n\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(46);\n\n\t\t\tvar EXPANDO_KEY = '$chartjs';\n\t\t\tvar CSS_PREFIX = 'chartjs-';\n\t\t\tvar CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\n\t\t\tvar CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\n\t\t\tvar ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\n\n\t\t\t/**\r\n * DOM event types -> Chart.js event types.\r\n * Note: only events with different types are mapped.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\r\n */\n\t\t\tvar EVENT_TYPES = {\n\t\t\t\ttouchstart: 'mousedown',\n\t\t\t\ttouchmove: 'mousemove',\n\t\t\t\ttouchend: 'mouseup',\n\t\t\t\tpointerenter: 'mouseenter',\n\t\t\t\tpointerdown: 'mousedown',\n\t\t\t\tpointermove: 'mousemove',\n\t\t\t\tpointerup: 'mouseup',\n\t\t\t\tpointerleave: 'mouseout',\n\t\t\t\tpointerout: 'mouseout'\n\t\t\t};\n\n\t\t\t/**\r\n * The \"used\" size is the final value of a dimension property after all calculations have\r\n * been performed. This method uses the computed style of `element` but returns undefined\r\n * if the computed style is not expressed in pixels. That can happen in some cases where\r\n * `element` has a size relative to its parent and this last one is not yet displayed,\r\n * for example because of `display: none` on a parent node.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\r\n * @returns {Number} Size in pixels or undefined if unknown.\r\n */\n\t\t\tfunction readUsedSize(element, property) {\n\t\t\t\tvar value = helpers.getStyle(element, property);\n\t\t\t\tvar matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n\t\t\t\treturn matches ? Number(matches[1]) : undefined;\n\t\t\t}\n\n\t\t\t/**\r\n * Initializes the canvas style and render size without modifying the canvas display size,\r\n * since responsiveness is handled by the controller.resize() method. The config is used\r\n * to determine the aspect ratio to apply in case no explicit height has been specified.\r\n */\n\t\t\tfunction initCanvas(canvas, config) {\n\t\t\t\tvar style = canvas.style;\n\n\t\t\t\t// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n\t\t\t\t// returns null or '' if no explicit value has been set to the canvas attribute.\n\t\t\t\tvar renderHeight = canvas.getAttribute('height');\n\t\t\t\tvar renderWidth = canvas.getAttribute('width');\n\n\t\t\t\t// Chart.js modifies some canvas values that we want to restore on destroy\n\t\t\t\tcanvas[EXPANDO_KEY] = {\n\t\t\t\t\tinitial: {\n\t\t\t\t\t\theight: renderHeight,\n\t\t\t\t\t\twidth: renderWidth,\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tdisplay: style.display,\n\t\t\t\t\t\t\theight: style.height,\n\t\t\t\t\t\t\twidth: style.width\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Force canvas to display as block to avoid extra space caused by inline\n\t\t\t\t// elements, which would interfere with the responsive resize process.\n\t\t\t\t// https://github.com/chartjs/Chart.js/issues/2538\n\t\t\t\tstyle.display = style.display || 'block';\n\n\t\t\t\tif (renderWidth === null || renderWidth === '') {\n\t\t\t\t\tvar displayWidth = readUsedSize(canvas, 'width');\n\t\t\t\t\tif (displayWidth !== undefined) {\n\t\t\t\t\t\tcanvas.width = displayWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (renderHeight === null || renderHeight === '') {\n\t\t\t\t\tif (canvas.style.height === '') {\n\t\t\t\t\t\t// If no explicit render height and style height, let's apply the aspect ratio,\n\t\t\t\t\t\t// which one can be specified by the user but also by charts as default option\n\t\t\t\t\t\t// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n\t\t\t\t\t\tcanvas.height = canvas.width / (config.options.aspectRatio || 2);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar displayHeight = readUsedSize(canvas, 'height');\n\t\t\t\t\t\tif (displayWidth !== undefined) {\n\t\t\t\t\t\t\tcanvas.height = displayHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn canvas;\n\t\t\t}\n\n\t\t\t/**\r\n * Detects support for options object argument in addEventListener.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\r\n * @private\r\n */\n\t\t\tvar supportsEventListenerOptions = function () {\n\t\t\t\tvar supports = false;\n\t\t\t\ttry {\n\t\t\t\t\tvar options = Object.defineProperty({}, 'passive', {\n\t\t\t\t\t\tget: function get() {\n\t\t\t\t\t\t\tsupports = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\twindow.addEventListener('e', null, options);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// continue regardless of error\n\t\t\t\t}\n\t\t\t\treturn supports;\n\t\t\t}();\n\n\t\t\t// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n\t\t\t// https://github.com/chartjs/Chart.js/issues/4287\n\t\t\tvar eventListenerOptions = supportsEventListenerOptions ? { passive: true } : false;\n\n\t\t\tfunction _addEventListener(node, type, listener) {\n\t\t\t\tnode.addEventListener(type, listener, eventListenerOptions);\n\t\t\t}\n\n\t\t\tfunction _removeEventListener(node, type, listener) {\n\t\t\t\tnode.removeEventListener(type, listener, eventListenerOptions);\n\t\t\t}\n\n\t\t\tfunction createEvent(type, chart, x, y, nativeEvent) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: type,\n\t\t\t\t\tchart: chart,\n\t\t\t\t\tnative: nativeEvent || null,\n\t\t\t\t\tx: x !== undefined ? x : null,\n\t\t\t\t\ty: y !== undefined ? y : null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfunction fromNativeEvent(event, chart) {\n\t\t\t\tvar type = EVENT_TYPES[event.type] || event.type;\n\t\t\t\tvar pos = helpers.getRelativePosition(event, chart);\n\t\t\t\treturn createEvent(type, chart, pos.x, pos.y, event);\n\t\t\t}\n\n\t\t\tfunction throttled(fn, thisArg) {\n\t\t\t\tvar ticking = false;\n\t\t\t\tvar args = [];\n\n\t\t\t\treturn function () {\n\t\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t\t\tthisArg = thisArg || this;\n\n\t\t\t\t\tif (!ticking) {\n\t\t\t\t\t\tticking = true;\n\t\t\t\t\t\thelpers.requestAnimFrame.call(window, function () {\n\t\t\t\t\t\t\tticking = false;\n\t\t\t\t\t\t\tfn.apply(thisArg, args);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Implementation based on https://github.com/marcj/css-element-queries\n\t\t\tfunction createResizer(handler) {\n\t\t\t\tvar resizer = document.createElement('div');\n\t\t\t\tvar cls = CSS_PREFIX + 'size-monitor';\n\t\t\t\tvar maxSize = 1000000;\n\t\t\t\tvar style = 'position:absolute;' + 'left:0;' + 'top:0;' + 'right:0;' + 'bottom:0;' + 'overflow:hidden;' + 'pointer-events:none;' + 'visibility:hidden;' + 'z-index:-1;';\n\n\t\t\t\tresizer.style.cssText = style;\n\t\t\t\tresizer.className = cls;\n\t\t\t\tresizer.innerHTML = '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
';\n\n\t\t\t\tvar expand = resizer.childNodes[0];\n\t\t\t\tvar shrink = resizer.childNodes[1];\n\n\t\t\t\tresizer._reset = function () {\n\t\t\t\t\texpand.scrollLeft = maxSize;\n\t\t\t\t\texpand.scrollTop = maxSize;\n\t\t\t\t\tshrink.scrollLeft = maxSize;\n\t\t\t\t\tshrink.scrollTop = maxSize;\n\t\t\t\t};\n\t\t\t\tvar onScroll = function onScroll() {\n\t\t\t\t\tresizer._reset();\n\t\t\t\t\thandler();\n\t\t\t\t};\n\n\t\t\t\t_addEventListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\n\t\t\t\t_addEventListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\n\n\t\t\t\treturn resizer;\n\t\t\t}\n\n\t\t\t// https://davidwalsh.name/detect-node-insertion\n\t\t\tfunction watchForRender(node, handler) {\n\t\t\t\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\t\t\t\tvar proxy = expando.renderProxy = function (e) {\n\t\t\t\t\tif (e.animationName === CSS_RENDER_ANIMATION) {\n\t\t\t\t\t\thandler();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\thelpers.each(ANIMATION_START_EVENTS, function (type) {\n\t\t\t\t\t_addEventListener(node, type, proxy);\n\t\t\t\t});\n\n\t\t\t\t// #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\n\t\t\t\t// is removed then added back immediately (same animation frame?). Accessing the\n\t\t\t\t// `offsetParent` property will force a reflow and re-evaluate the CSS animation.\n\t\t\t\t// https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\n\t\t\t\t// https://github.com/chartjs/Chart.js/issues/4737\n\t\t\t\texpando.reflow = !!node.offsetParent;\n\n\t\t\t\tnode.classList.add(CSS_RENDER_MONITOR);\n\t\t\t}\n\n\t\t\tfunction unwatchForRender(node) {\n\t\t\t\tvar expando = node[EXPANDO_KEY] || {};\n\t\t\t\tvar proxy = expando.renderProxy;\n\n\t\t\t\tif (proxy) {\n\t\t\t\t\thelpers.each(ANIMATION_START_EVENTS, function (type) {\n\t\t\t\t\t\t_removeEventListener(node, type, proxy);\n\t\t\t\t\t});\n\n\t\t\t\t\tdelete expando.renderProxy;\n\t\t\t\t}\n\n\t\t\t\tnode.classList.remove(CSS_RENDER_MONITOR);\n\t\t\t}\n\n\t\t\tfunction addResizeListener(node, listener, chart) {\n\t\t\t\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\n\t\t\t\t// Let's keep track of this added resizer and thus avoid DOM query when removing it.\n\t\t\t\tvar resizer = expando.resizer = createResizer(throttled(function () {\n\t\t\t\t\tif (expando.resizer) {\n\t\t\t\t\t\treturn listener(createEvent('resize', chart));\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\t// The resizer needs to be attached to the node parent, so we first need to be\n\t\t\t\t// sure that `node` is attached to the DOM before injecting the resizer element.\n\t\t\t\twatchForRender(node, function () {\n\t\t\t\t\tif (expando.resizer) {\n\t\t\t\t\t\tvar container = node.parentNode;\n\t\t\t\t\t\tif (container && container !== resizer.parentNode) {\n\t\t\t\t\t\t\tcontainer.insertBefore(resizer, container.firstChild);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// The container size might have changed, let's reset the resizer state.\n\t\t\t\t\t\tresizer._reset();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction removeResizeListener(node) {\n\t\t\t\tvar expando = node[EXPANDO_KEY] || {};\n\t\t\t\tvar resizer = expando.resizer;\n\n\t\t\t\tdelete expando.resizer;\n\t\t\t\tunwatchForRender(node);\n\n\t\t\t\tif (resizer && resizer.parentNode) {\n\t\t\t\t\tresizer.parentNode.removeChild(resizer);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction injectCSS(platform, css) {\n\t\t\t\t// http://stackoverflow.com/q/3922139\n\t\t\t\tvar style = platform._style || document.createElement('style');\n\t\t\t\tif (!platform._style) {\n\t\t\t\t\tplatform._style = style;\n\t\t\t\t\tcss = '/* Chart.js */\\n' + css;\n\t\t\t\t\tstyle.setAttribute('type', 'text/css');\n\t\t\t\t\tdocument.getElementsByTagName('head')[0].appendChild(style);\n\t\t\t\t}\n\n\t\t\t\tstyle.appendChild(document.createTextNode(css));\n\t\t\t}\n\n\t\t\tmodule.exports = {\n\t\t\t\t/**\r\n * This property holds whether this platform is enabled for the current environment.\r\n * Currently used by platform.js to select the proper implementation.\r\n * @private\r\n */\n\t\t\t\t_enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\n\n\t\t\t\tinitialize: function initialize() {\n\t\t\t\t\tvar keyframes = 'from{opacity:0.99}to{opacity:1}';\n\n\t\t\t\t\tinjectCSS(this,\n\t\t\t\t\t// DOM rendering detection\n\t\t\t\t\t// https://davidwalsh.name/detect-node-insertion\n\t\t\t\t\t'@-webkit-keyframes ' + CSS_RENDER_ANIMATION + '{' + keyframes + '}' + '@keyframes ' + CSS_RENDER_ANIMATION + '{' + keyframes + '}' + '.' + CSS_RENDER_MONITOR + '{' + '-webkit-animation:' + CSS_RENDER_ANIMATION + ' 0.001s;' + 'animation:' + CSS_RENDER_ANIMATION + ' 0.001s;' + '}');\n\t\t\t\t},\n\n\t\t\t\tacquireContext: function acquireContext(item, config) {\n\t\t\t\t\tif (typeof item === 'string') {\n\t\t\t\t\t\titem = document.getElementById(item);\n\t\t\t\t\t} else if (item.length) {\n\t\t\t\t\t\t// Support for array based queries (such as jQuery)\n\t\t\t\t\t\titem = item[0];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (item && item.canvas) {\n\t\t\t\t\t\t// Support for any object associated to a canvas (including a context2d)\n\t\t\t\t\t\titem = item.canvas;\n\t\t\t\t\t}\n\n\t\t\t\t\t// To prevent canvas fingerprinting, some add-ons undefine the getContext\n\t\t\t\t\t// method, for example: https://github.com/kkapsner/CanvasBlocker\n\t\t\t\t\t// https://github.com/chartjs/Chart.js/issues/2807\n\t\t\t\t\tvar context = item && item.getContext && item.getContext('2d');\n\n\t\t\t\t\t// `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\n\t\t\t\t\t// inside an iframe or when running in a protected environment. We could guess the\n\t\t\t\t\t// types from their toString() value but let's keep things flexible and assume it's\n\t\t\t\t\t// a sufficient condition if the item has a context2D which has item as `canvas`.\n\t\t\t\t\t// https://github.com/chartjs/Chart.js/issues/3887\n\t\t\t\t\t// https://github.com/chartjs/Chart.js/issues/4102\n\t\t\t\t\t// https://github.com/chartjs/Chart.js/issues/4152\n\t\t\t\t\tif (context && context.canvas === item) {\n\t\t\t\t\t\tinitCanvas(item, config);\n\t\t\t\t\t\treturn context;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\n\t\t\t\treleaseContext: function releaseContext(context) {\n\t\t\t\t\tvar canvas = context.canvas;\n\t\t\t\t\tif (!canvas[EXPANDO_KEY]) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar initial = canvas[EXPANDO_KEY].initial;\n\t\t\t\t\t['height', 'width'].forEach(function (prop) {\n\t\t\t\t\t\tvar value = initial[prop];\n\t\t\t\t\t\tif (helpers.isNullOrUndef(value)) {\n\t\t\t\t\t\t\tcanvas.removeAttribute(prop);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcanvas.setAttribute(prop, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\thelpers.each(initial.style || {}, function (value, key) {\n\t\t\t\t\t\tcanvas.style[key] = value;\n\t\t\t\t\t});\n\n\t\t\t\t\t// The canvas render size might have been changed (and thus the state stack discarded),\n\t\t\t\t\t// we can't use save() and restore() to restore the initial state. So make sure that at\n\t\t\t\t\t// least the canvas context is reset to the default state by setting the canvas width.\n\t\t\t\t\t// https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n\t\t\t\t\tcanvas.width = canvas.width;\n\n\t\t\t\t\tdelete canvas[EXPANDO_KEY];\n\t\t\t\t},\n\n\t\t\t\taddEventListener: function addEventListener(chart, type, listener) {\n\t\t\t\t\tvar canvas = chart.canvas;\n\t\t\t\t\tif (type === 'resize') {\n\t\t\t\t\t\t// Note: the resize event is not supported on all browsers.\n\t\t\t\t\t\taddResizeListener(canvas, listener, chart);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\n\t\t\t\t\tvar proxies = expando.proxies || (expando.proxies = {});\n\t\t\t\t\tvar proxy = proxies[chart.id + '_' + type] = function (event) {\n\t\t\t\t\t\tlistener(fromNativeEvent(event, chart));\n\t\t\t\t\t};\n\n\t\t\t\t\t_addEventListener(canvas, type, proxy);\n\t\t\t\t},\n\n\t\t\t\tremoveEventListener: function removeEventListener(chart, type, listener) {\n\t\t\t\t\tvar canvas = chart.canvas;\n\t\t\t\t\tif (type === 'resize') {\n\t\t\t\t\t\t// Note: the resize event is not supported on all browsers.\n\t\t\t\t\t\tremoveResizeListener(canvas, listener);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar expando = listener[EXPANDO_KEY] || {};\n\t\t\t\t\tvar proxies = expando.proxies || {};\n\t\t\t\t\tvar proxy = proxies[chart.id + '_' + type];\n\t\t\t\t\tif (!proxy) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t_removeEventListener(canvas, type, proxy);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// DEPRECATIONS\n\n\t\t\t/**\r\n * Provided for backward compatibility, use EventTarget.addEventListener instead.\r\n * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\n * @function Chart.helpers.addEvent\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\thelpers.addEvent = _addEventListener;\n\n\t\t\t/**\r\n * Provided for backward compatibility, use EventTarget.removeEventListener instead.\r\n * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\r\n * @function Chart.helpers.removeEvent\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\t\t\thelpers.removeEvent = _removeEventListener;\n\t\t}, { \"46\": 46 }], 49: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(46);\n\t\t\tvar basic = require(47);\n\t\t\tvar dom = require(48);\n\n\t\t\t// @TODO Make possible to select another platform at build time.\n\t\t\tvar implementation = dom._enabled ? dom : basic;\n\n\t\t\t/**\r\n * @namespace Chart.platform\r\n * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\r\n * @since 2.4.0\r\n */\n\t\t\tmodule.exports = helpers.extend({\n\t\t\t\t/**\r\n * @since 2.7.0\r\n */\n\t\t\t\tinitialize: function initialize() {},\n\n\t\t\t\t/**\r\n * Called at chart construction time, returns a context2d instance implementing\r\n * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\r\n * @param {*} item - The native item from which to acquire context (platform specific)\r\n * @param {Object} options - The chart options\r\n * @returns {CanvasRenderingContext2D} context2d instance\r\n */\n\t\t\t\tacquireContext: function acquireContext() {},\n\n\t\t\t\t/**\r\n * Called at chart destruction time, releases any resources associated to the context\r\n * previously returned by the acquireContext() method.\r\n * @param {CanvasRenderingContext2D} context - The context2d instance\r\n * @returns {Boolean} true if the method succeeded, else false\r\n */\n\t\t\t\treleaseContext: function releaseContext() {},\n\n\t\t\t\t/**\r\n * Registers the specified listener on the given chart.\r\n * @param {Chart} chart - Chart from which to listen for event\r\n * @param {String} type - The ({@link IEvent}) type to listen for\r\n * @param {Function} listener - Receives a notification (an object that implements\r\n * the {@link IEvent} interface) when an event of the specified type occurs.\r\n */\n\t\t\t\taddEventListener: function addEventListener() {},\n\n\t\t\t\t/**\r\n * Removes the specified listener previously registered with addEventListener.\r\n * @param {Chart} chart -Chart from which to remove the listener\r\n * @param {String} type - The ({@link IEvent}) type to remove\r\n * @param {Function} listener - The listener function to remove from the event target.\r\n */\n\t\t\t\tremoveEventListener: function removeEventListener() {}\n\n\t\t\t}, implementation);\n\n\t\t\t/**\r\n * @interface IPlatform\r\n * Allows abstracting platform dependencies away from the chart\r\n * @borrows Chart.platform.acquireContext as acquireContext\r\n * @borrows Chart.platform.releaseContext as releaseContext\r\n * @borrows Chart.platform.addEventListener as addEventListener\r\n * @borrows Chart.platform.removeEventListener as removeEventListener\r\n */\n\n\t\t\t/**\r\n * @interface IEvent\r\n * @prop {String} type - The event type name, possible values are:\r\n * 'contextmenu', 'mouseenter', 'mousedown', 'mousemove', 'mouseup', 'mouseout',\r\n * 'click', 'dblclick', 'keydown', 'keypress', 'keyup' and 'resize'\r\n * @prop {*} native - The original native event (null for emulated events, e.g. 'resize')\r\n * @prop {Number} x - The mouse x position, relative to the canvas (null for incompatible events)\r\n * @prop {Number} y - The mouse y position, relative to the canvas (null for incompatible events)\r\n */\n\t\t}, { \"46\": 46, \"47\": 47, \"48\": 48 }], 50: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tmodule.exports = {};\n\t\t\tmodule.exports.filler = require(51);\n\t\t\tmodule.exports.legend = require(52);\n\t\t\tmodule.exports.title = require(53);\n\t\t}, { \"51\": 51, \"52\": 52, \"53\": 53 }], 51: [function (require, module, exports) {\n\t\t\t/**\r\n * Plugin based on discussion from the following Chart.js issues:\r\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\r\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\r\n */\n\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar elements = require(41);\n\t\t\tvar helpers = require(46);\n\n\t\t\tdefaults._set('global', {\n\t\t\t\tplugins: {\n\t\t\t\t\tfiller: {\n\t\t\t\t\t\tpropagate: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar mappers = {\n\t\t\t\tdataset: function dataset(source) {\n\t\t\t\t\tvar index = source.fill;\n\t\t\t\t\tvar chart = source.chart;\n\t\t\t\t\tvar meta = chart.getDatasetMeta(index);\n\t\t\t\t\tvar visible = meta && chart.isDatasetVisible(index);\n\t\t\t\t\tvar points = visible && meta.dataset._children || [];\n\t\t\t\t\tvar length = points.length || 0;\n\n\t\t\t\t\treturn !length ? null : function (point, i) {\n\t\t\t\t\t\treturn i < length && points[i]._view || null;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tboundary: function boundary(source) {\n\t\t\t\t\tvar boundary = source.boundary;\n\t\t\t\t\tvar x = boundary ? boundary.x : null;\n\t\t\t\t\tvar y = boundary ? boundary.y : null;\n\n\t\t\t\t\treturn function (point) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tx: x === null ? point.x : x,\n\t\t\t\t\t\t\ty: y === null ? point.y : y\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// @todo if (fill[0] === '#')\n\t\t\tfunction decodeFill(el, index, count) {\n\t\t\t\tvar model = el._model || {};\n\t\t\t\tvar fill = model.fill;\n\t\t\t\tvar target;\n\n\t\t\t\tif (fill === undefined) {\n\t\t\t\t\tfill = !!model.backgroundColor;\n\t\t\t\t}\n\n\t\t\t\tif (fill === false || fill === null) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (fill === true) {\n\t\t\t\t\treturn 'origin';\n\t\t\t\t}\n\n\t\t\t\ttarget = parseFloat(fill, 10);\n\t\t\t\tif (isFinite(target) && Math.floor(target) === target) {\n\t\t\t\t\tif (fill[0] === '-' || fill[0] === '+') {\n\t\t\t\t\t\ttarget = index + target;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (target === index || target < 0 || target >= count) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn target;\n\t\t\t\t}\n\n\t\t\t\tswitch (fill) {\n\t\t\t\t\t// compatibility\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\treturn 'start';\n\t\t\t\t\tcase 'top':\n\t\t\t\t\t\treturn 'end';\n\t\t\t\t\tcase 'zero':\n\t\t\t\t\t\treturn 'origin';\n\t\t\t\t\t// supported boundaries\n\t\t\t\t\tcase 'origin':\n\t\t\t\t\tcase 'start':\n\t\t\t\t\tcase 'end':\n\t\t\t\t\t\treturn fill;\n\t\t\t\t\t// invalid fill values\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction computeBoundary(source) {\n\t\t\t\tvar model = source.el._model || {};\n\t\t\t\tvar scale = source.el._scale || {};\n\t\t\t\tvar fill = source.fill;\n\t\t\t\tvar target = null;\n\t\t\t\tvar horizontal;\n\n\t\t\t\tif (isFinite(fill)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\t// Backward compatibility: until v3, we still need to support boundary values set on\n\t\t\t\t// the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\n\t\t\t\t// controllers might still use it (e.g. the Smith chart).\n\n\t\t\t\tif (fill === 'start') {\n\t\t\t\t\ttarget = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\n\t\t\t\t} else if (fill === 'end') {\n\t\t\t\t\ttarget = model.scaleTop === undefined ? scale.top : model.scaleTop;\n\t\t\t\t} else if (model.scaleZero !== undefined) {\n\t\t\t\t\ttarget = model.scaleZero;\n\t\t\t\t} else if (scale.getBasePosition) {\n\t\t\t\t\ttarget = scale.getBasePosition();\n\t\t\t\t} else if (scale.getBasePixel) {\n\t\t\t\t\ttarget = scale.getBasePixel();\n\t\t\t\t}\n\n\t\t\t\tif (target !== undefined && target !== null) {\n\t\t\t\t\tif (target.x !== undefined && target.y !== undefined) {\n\t\t\t\t\t\treturn target;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof target === 'number' && isFinite(target)) {\n\t\t\t\t\t\thorizontal = scale.isHorizontal();\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tx: horizontal ? target : null,\n\t\t\t\t\t\t\ty: horizontal ? null : target\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfunction resolveTarget(sources, index, propagate) {\n\t\t\t\tvar source = sources[index];\n\t\t\t\tvar fill = source.fill;\n\t\t\t\tvar visited = [index];\n\t\t\t\tvar target;\n\n\t\t\t\tif (!propagate) {\n\t\t\t\t\treturn fill;\n\t\t\t\t}\n\n\t\t\t\twhile (fill !== false && visited.indexOf(fill) === -1) {\n\t\t\t\t\tif (!isFinite(fill)) {\n\t\t\t\t\t\treturn fill;\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget = sources[fill];\n\t\t\t\t\tif (!target) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (target.visible) {\n\t\t\t\t\t\treturn fill;\n\t\t\t\t\t}\n\n\t\t\t\t\tvisited.push(fill);\n\t\t\t\t\tfill = target.fill;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfunction createMapper(source) {\n\t\t\t\tvar fill = source.fill;\n\t\t\t\tvar type = 'dataset';\n\n\t\t\t\tif (fill === false) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (!isFinite(fill)) {\n\t\t\t\t\ttype = 'boundary';\n\t\t\t\t}\n\n\t\t\t\treturn mappers[type](source);\n\t\t\t}\n\n\t\t\tfunction isDrawable(point) {\n\t\t\t\treturn point && !point.skip;\n\t\t\t}\n\n\t\t\tfunction drawArea(ctx, curve0, curve1, len0, len1) {\n\t\t\t\tvar i;\n\n\t\t\t\tif (!len0 || !len1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// building first area curve (normal)\n\t\t\t\tctx.moveTo(curve0[0].x, curve0[0].y);\n\t\t\t\tfor (i = 1; i < len0; ++i) {\n\t\t\t\t\thelpers.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\n\t\t\t\t}\n\n\t\t\t\t// joining the two area curves\n\t\t\t\tctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);\n\n\t\t\t\t// building opposite area curve (reverse)\n\t\t\t\tfor (i = len1 - 1; i > 0; --i) {\n\t\t\t\t\thelpers.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction doFill(ctx, points, mapper, view, color, loop) {\n\t\t\t\tvar count = points.length;\n\t\t\t\tvar span = view.spanGaps;\n\t\t\t\tvar curve0 = [];\n\t\t\t\tvar curve1 = [];\n\t\t\t\tvar len0 = 0;\n\t\t\t\tvar len1 = 0;\n\t\t\t\tvar i, ilen, index, p0, p1, d0, d1;\n\n\t\t\t\tctx.beginPath();\n\n\t\t\t\tfor (i = 0, ilen = count + !!loop; i < ilen; ++i) {\n\t\t\t\t\tindex = i % count;\n\t\t\t\t\tp0 = points[index]._view;\n\t\t\t\t\tp1 = mapper(p0, index, view);\n\t\t\t\t\td0 = isDrawable(p0);\n\t\t\t\t\td1 = isDrawable(p1);\n\n\t\t\t\t\tif (d0 && d1) {\n\t\t\t\t\t\tlen0 = curve0.push(p0);\n\t\t\t\t\t\tlen1 = curve1.push(p1);\n\t\t\t\t\t} else if (len0 && len1) {\n\t\t\t\t\t\tif (!span) {\n\t\t\t\t\t\t\tdrawArea(ctx, curve0, curve1, len0, len1);\n\t\t\t\t\t\t\tlen0 = len1 = 0;\n\t\t\t\t\t\t\tcurve0 = [];\n\t\t\t\t\t\t\tcurve1 = [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (d0) {\n\t\t\t\t\t\t\t\tcurve0.push(p0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (d1) {\n\t\t\t\t\t\t\t\tcurve1.push(p1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdrawArea(ctx, curve0, curve1, len0, len1);\n\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.fillStyle = color;\n\t\t\t\tctx.fill();\n\t\t\t}\n\n\t\t\tmodule.exports = {\n\t\t\t\tid: 'filler',\n\n\t\t\t\tafterDatasetsUpdate: function afterDatasetsUpdate(chart, options) {\n\t\t\t\t\tvar count = (chart.data.datasets || []).length;\n\t\t\t\t\tvar propagate = options.propagate;\n\t\t\t\t\tvar sources = [];\n\t\t\t\t\tvar meta, i, el, source;\n\n\t\t\t\t\tfor (i = 0; i < count; ++i) {\n\t\t\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\t\t\tel = meta.dataset;\n\t\t\t\t\t\tsource = null;\n\n\t\t\t\t\t\tif (el && el._model && el instanceof elements.Line) {\n\t\t\t\t\t\t\tsource = {\n\t\t\t\t\t\t\t\tvisible: chart.isDatasetVisible(i),\n\t\t\t\t\t\t\t\tfill: decodeFill(el, i, count),\n\t\t\t\t\t\t\t\tchart: chart,\n\t\t\t\t\t\t\t\tel: el\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmeta.$filler = source;\n\t\t\t\t\t\tsources.push(source);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (i = 0; i < count; ++i) {\n\t\t\t\t\t\tsource = sources[i];\n\t\t\t\t\t\tif (!source) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsource.fill = resolveTarget(sources, i, propagate);\n\t\t\t\t\t\tsource.boundary = computeBoundary(source);\n\t\t\t\t\t\tsource.mapper = createMapper(source);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tbeforeDatasetDraw: function beforeDatasetDraw(chart, args) {\n\t\t\t\t\tvar meta = args.meta.$filler;\n\t\t\t\t\tif (!meta) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar ctx = chart.ctx;\n\t\t\t\t\tvar el = meta.el;\n\t\t\t\t\tvar view = el._view;\n\t\t\t\t\tvar points = el._children || [];\n\t\t\t\t\tvar mapper = meta.mapper;\n\t\t\t\t\tvar color = view.backgroundColor || defaults.global.defaultColor;\n\n\t\t\t\t\tif (mapper && color && points.length) {\n\t\t\t\t\t\thelpers.canvas.clipArea(ctx, chart.chartArea);\n\t\t\t\t\t\tdoFill(ctx, points, mapper, view, color, el._loop);\n\t\t\t\t\t\thelpers.canvas.unclipArea(ctx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}, { \"26\": 26, \"41\": 41, \"46\": 46 }], 52: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar Element = require(27);\n\t\t\tvar helpers = require(46);\n\t\t\tvar layouts = require(31);\n\n\t\t\tvar noop = helpers.noop;\n\n\t\t\tdefaults._set('global', {\n\t\t\t\tlegend: {\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tfullWidth: true,\n\t\t\t\t\treverse: false,\n\t\t\t\t\tweight: 1000,\n\n\t\t\t\t\t// a callback that will handle\n\t\t\t\t\tonClick: function onClick(e, legendItem) {\n\t\t\t\t\t\tvar index = legendItem.datasetIndex;\n\t\t\t\t\t\tvar ci = this.chart;\n\t\t\t\t\t\tvar meta = ci.getDatasetMeta(index);\n\n\t\t\t\t\t\t// See controller.isDatasetVisible comment\n\t\t\t\t\t\tmeta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;\n\n\t\t\t\t\t\t// We hid a dataset ... rerender the chart\n\t\t\t\t\t\tci.update();\n\t\t\t\t\t},\n\n\t\t\t\t\tonHover: null,\n\n\t\t\t\t\tlabels: {\n\t\t\t\t\t\tboxWidth: 40,\n\t\t\t\t\t\tpadding: 10,\n\t\t\t\t\t\t// Generates labels shown in the legend\n\t\t\t\t\t\t// Valid properties to return:\n\t\t\t\t\t\t// text : text to display\n\t\t\t\t\t\t// fillStyle : fill of coloured box\n\t\t\t\t\t\t// strokeStyle: stroke of coloured box\n\t\t\t\t\t\t// hidden : if this legend item refers to a hidden item\n\t\t\t\t\t\t// lineCap : cap style for line\n\t\t\t\t\t\t// lineDash\n\t\t\t\t\t\t// lineDashOffset :\n\t\t\t\t\t\t// lineJoin :\n\t\t\t\t\t\t// lineWidth :\n\t\t\t\t\t\tgenerateLabels: function generateLabels(chart) {\n\t\t\t\t\t\t\tvar data = chart.data;\n\t\t\t\t\t\t\treturn helpers.isArray(data.datasets) ? data.datasets.map(function (dataset, i) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttext: dataset.label,\n\t\t\t\t\t\t\t\t\tfillStyle: !helpers.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0],\n\t\t\t\t\t\t\t\t\thidden: !chart.isDatasetVisible(i),\n\t\t\t\t\t\t\t\t\tlineCap: dataset.borderCapStyle,\n\t\t\t\t\t\t\t\t\tlineDash: dataset.borderDash,\n\t\t\t\t\t\t\t\t\tlineDashOffset: dataset.borderDashOffset,\n\t\t\t\t\t\t\t\t\tlineJoin: dataset.borderJoinStyle,\n\t\t\t\t\t\t\t\t\tlineWidth: dataset.borderWidth,\n\t\t\t\t\t\t\t\t\tstrokeStyle: dataset.borderColor,\n\t\t\t\t\t\t\t\t\tpointStyle: dataset.pointStyle,\n\n\t\t\t\t\t\t\t\t\t// Below is extra data used for toggling the datasets\n\t\t\t\t\t\t\t\t\tdatasetIndex: i\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}, this) : [];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tlegendCallback: function legendCallback(chart) {\n\t\t\t\t\tvar text = [];\n\t\t\t\t\ttext.push('
    ');\n\t\t\t\t\tfor (var i = 0; i < chart.data.datasets.length; i++) {\n\t\t\t\t\t\ttext.push('
  • ');\n\t\t\t\t\t\tif (chart.data.datasets[i].label) {\n\t\t\t\t\t\t\ttext.push(chart.data.datasets[i].label);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttext.push('
  • ');\n\t\t\t\t\t}\n\t\t\t\t\ttext.push('
');\n\t\t\t\t\treturn text.join('');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/**\r\n * Helper function to get the box width based on the usePointStyle option\r\n * @param labelopts {Object} the label options on the legend\r\n * @param fontSize {Number} the label font size\r\n * @return {Number} width of the color box area\r\n */\n\t\t\tfunction getBoxWidth(labelOpts, fontSize) {\n\t\t\t\treturn labelOpts.usePointStyle ? fontSize * Math.SQRT2 : labelOpts.boxWidth;\n\t\t\t}\n\n\t\t\t/**\r\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n */\n\t\t\tvar Legend = Element.extend({\n\n\t\t\t\tinitialize: function initialize(config) {\n\t\t\t\t\thelpers.extend(this, config);\n\n\t\t\t\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\t\t\t\tthis.legendHitBoxes = [];\n\n\t\t\t\t\t// Are we in doughnut mode which has a different data type\n\t\t\t\t\tthis.doughnutMode = false;\n\t\t\t\t},\n\n\t\t\t\t// These methods are ordered by lifecycle. Utilities then follow.\n\t\t\t\t// Any function defined here is inherited by all legend types.\n\t\t\t\t// Any function can be extended by the legend type\n\n\t\t\t\tbeforeUpdate: noop,\n\t\t\t\tupdate: function update(maxWidth, maxHeight, margins) {\n\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\t\t\t\tme.beforeUpdate();\n\n\t\t\t\t\t// Absorb the master measurements\n\t\t\t\t\tme.maxWidth = maxWidth;\n\t\t\t\t\tme.maxHeight = maxHeight;\n\t\t\t\t\tme.margins = margins;\n\n\t\t\t\t\t// Dimensions\n\t\t\t\t\tme.beforeSetDimensions();\n\t\t\t\t\tme.setDimensions();\n\t\t\t\t\tme.afterSetDimensions();\n\t\t\t\t\t// Labels\n\t\t\t\t\tme.beforeBuildLabels();\n\t\t\t\t\tme.buildLabels();\n\t\t\t\t\tme.afterBuildLabels();\n\n\t\t\t\t\t// Fit\n\t\t\t\t\tme.beforeFit();\n\t\t\t\t\tme.fit();\n\t\t\t\t\tme.afterFit();\n\t\t\t\t\t//\n\t\t\t\t\tme.afterUpdate();\n\n\t\t\t\t\treturn me.minSize;\n\t\t\t\t},\n\t\t\t\tafterUpdate: noop,\n\n\t\t\t\t//\n\n\t\t\t\tbeforeSetDimensions: noop,\n\t\t\t\tsetDimensions: function setDimensions() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\t// Reset position before calculating rotation\n\t\t\t\t\t\tme.width = me.maxWidth;\n\t\t\t\t\t\tme.left = 0;\n\t\t\t\t\t\tme.right = me.width;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tme.height = me.maxHeight;\n\n\t\t\t\t\t\t// Reset position before calculating rotation\n\t\t\t\t\t\tme.top = 0;\n\t\t\t\t\t\tme.bottom = me.height;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset padding\n\t\t\t\t\tme.paddingLeft = 0;\n\t\t\t\t\tme.paddingTop = 0;\n\t\t\t\t\tme.paddingRight = 0;\n\t\t\t\t\tme.paddingBottom = 0;\n\n\t\t\t\t\t// Reset minSize\n\t\t\t\t\tme.minSize = {\n\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\theight: 0\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tafterSetDimensions: noop,\n\n\t\t\t\t//\n\n\t\t\t\tbeforeBuildLabels: noop,\n\t\t\t\tbuildLabels: function buildLabels() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar labelOpts = me.options.labels || {};\n\t\t\t\t\tvar legendItems = helpers.callback(labelOpts.generateLabels, [me.chart], me) || [];\n\n\t\t\t\t\tif (labelOpts.filter) {\n\t\t\t\t\t\tlegendItems = legendItems.filter(function (item) {\n\t\t\t\t\t\t\treturn labelOpts.filter(item, me.chart.data);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (me.options.reverse) {\n\t\t\t\t\t\tlegendItems.reverse();\n\t\t\t\t\t}\n\n\t\t\t\t\tme.legendItems = legendItems;\n\t\t\t\t},\n\t\t\t\tafterBuildLabels: noop,\n\n\t\t\t\t//\n\n\t\t\t\tbeforeFit: noop,\n\t\t\t\tfit: function fit() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\tvar labelOpts = opts.labels;\n\t\t\t\t\tvar display = opts.display;\n\n\t\t\t\t\tvar ctx = me.ctx;\n\n\t\t\t\t\tvar globalDefault = defaults.global;\n\t\t\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\t\t\tvar fontSize = valueOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize);\n\t\t\t\t\tvar fontStyle = valueOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle);\n\t\t\t\t\tvar fontFamily = valueOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily);\n\t\t\t\t\tvar labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\n\t\t\t\t\t// Reset hit boxes\n\t\t\t\t\tvar hitboxes = me.legendHitBoxes = [];\n\n\t\t\t\t\tvar minSize = me.minSize;\n\t\t\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\t\t\t\tminSize.height = display ? 10 : 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tminSize.width = display ? 10 : 0;\n\t\t\t\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t\t\t\t}\n\n\t\t\t\t\t// Increase sizes here\n\t\t\t\t\tif (display) {\n\t\t\t\t\t\tctx.font = labelFont;\n\n\t\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\t\t// Labels\n\n\t\t\t\t\t\t\t// Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n\t\t\t\t\t\t\tvar lineWidths = me.lineWidths = [0];\n\t\t\t\t\t\t\tvar totalHeight = me.legendItems.length ? fontSize + labelOpts.padding : 0;\n\n\t\t\t\t\t\t\tctx.textAlign = 'left';\n\t\t\t\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\t\t\t\thelpers.each(me.legendItems, function (legendItem, i) {\n\t\t\t\t\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\t\t\t\t\tvar width = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n\t\t\t\t\t\t\t\tif (lineWidths[lineWidths.length - 1] + width + labelOpts.padding >= me.width) {\n\t\t\t\t\t\t\t\t\ttotalHeight += fontSize + labelOpts.padding;\n\t\t\t\t\t\t\t\t\tlineWidths[lineWidths.length] = me.left;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tlineWidths[lineWidths.length - 1] += width + labelOpts.padding;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tminSize.height += totalHeight;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar vPadding = labelOpts.padding;\n\t\t\t\t\t\t\tvar columnWidths = me.columnWidths = [];\n\t\t\t\t\t\t\tvar totalWidth = labelOpts.padding;\n\t\t\t\t\t\t\tvar currentColWidth = 0;\n\t\t\t\t\t\t\tvar currentColHeight = 0;\n\t\t\t\t\t\t\tvar itemHeight = fontSize + vPadding;\n\n\t\t\t\t\t\t\thelpers.each(me.legendItems, function (legendItem, i) {\n\t\t\t\t\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\t\t\t\t\tvar itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n\t\t\t\t\t\t\t\t// If too tall, go to new column\n\t\t\t\t\t\t\t\tif (currentColHeight + itemHeight > minSize.height) {\n\t\t\t\t\t\t\t\t\ttotalWidth += currentColWidth + labelOpts.padding;\n\t\t\t\t\t\t\t\t\tcolumnWidths.push(currentColWidth); // previous column width\n\n\t\t\t\t\t\t\t\t\tcurrentColWidth = 0;\n\t\t\t\t\t\t\t\t\tcurrentColHeight = 0;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Get max width\n\t\t\t\t\t\t\t\tcurrentColWidth = Math.max(currentColWidth, itemWidth);\n\t\t\t\t\t\t\t\tcurrentColHeight += itemHeight;\n\n\t\t\t\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t\t\twidth: itemWidth,\n\t\t\t\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\ttotalWidth += currentColWidth;\n\t\t\t\t\t\t\tcolumnWidths.push(currentColWidth);\n\t\t\t\t\t\t\tminSize.width += totalWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tme.width = minSize.width;\n\t\t\t\t\tme.height = minSize.height;\n\t\t\t\t},\n\t\t\t\tafterFit: noop,\n\n\t\t\t\t// Shared Methods\n\t\t\t\tisHorizontal: function isHorizontal() {\n\t\t\t\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\n\t\t\t\t},\n\n\t\t\t\t// Actually draw the legend on the canvas\n\t\t\t\tdraw: function draw() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\tvar labelOpts = opts.labels;\n\t\t\t\t\tvar globalDefault = defaults.global;\n\t\t\t\t\tvar lineDefault = globalDefault.elements.line;\n\t\t\t\t\tvar legendWidth = me.width;\n\t\t\t\t\tvar lineWidths = me.lineWidths;\n\n\t\t\t\t\tif (opts.display) {\n\t\t\t\t\t\tvar ctx = me.ctx;\n\t\t\t\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\t\t\t\tvar fontColor = valueOrDefault(labelOpts.fontColor, globalDefault.defaultFontColor);\n\t\t\t\t\t\tvar fontSize = valueOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize);\n\t\t\t\t\t\tvar fontStyle = valueOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle);\n\t\t\t\t\t\tvar fontFamily = valueOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily);\n\t\t\t\t\t\tvar labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\t\t\t\t\t\tvar cursor;\n\n\t\t\t\t\t\t// Canvas setup\n\t\t\t\t\t\tctx.textAlign = 'left';\n\t\t\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\t\t\tctx.lineWidth = 0.5;\n\t\t\t\t\t\tctx.strokeStyle = fontColor; // for strikethrough effect\n\t\t\t\t\t\tctx.fillStyle = fontColor; // render in correct colour\n\t\t\t\t\t\tctx.font = labelFont;\n\n\t\t\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\t\t\tvar hitboxes = me.legendHitBoxes;\n\n\t\t\t\t\t\t// current position\n\t\t\t\t\t\tvar drawLegendBox = function drawLegendBox(x, y, legendItem) {\n\t\t\t\t\t\t\tif (isNaN(boxWidth) || boxWidth <= 0) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Set the ctx for the box\n\t\t\t\t\t\t\tctx.save();\n\n\t\t\t\t\t\t\tctx.fillStyle = valueOrDefault(legendItem.fillStyle, globalDefault.defaultColor);\n\t\t\t\t\t\t\tctx.lineCap = valueOrDefault(legendItem.lineCap, lineDefault.borderCapStyle);\n\t\t\t\t\t\t\tctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, lineDefault.borderDashOffset);\n\t\t\t\t\t\t\tctx.lineJoin = valueOrDefault(legendItem.lineJoin, lineDefault.borderJoinStyle);\n\t\t\t\t\t\t\tctx.lineWidth = valueOrDefault(legendItem.lineWidth, lineDefault.borderWidth);\n\t\t\t\t\t\t\tctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, globalDefault.defaultColor);\n\t\t\t\t\t\t\tvar isLineWidthZero = valueOrDefault(legendItem.lineWidth, lineDefault.borderWidth) === 0;\n\n\t\t\t\t\t\t\tif (ctx.setLineDash) {\n\t\t\t\t\t\t\t\t// IE 9 and 10 do not support line dash\n\t\t\t\t\t\t\t\tctx.setLineDash(valueOrDefault(legendItem.lineDash, lineDefault.borderDash));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (opts.labels && opts.labels.usePointStyle) {\n\t\t\t\t\t\t\t\t// Recalculate x and y for drawPoint() because its expecting\n\t\t\t\t\t\t\t\t// x and y to be center of figure (instead of top left)\n\t\t\t\t\t\t\t\tvar radius = fontSize * Math.SQRT2 / 2;\n\t\t\t\t\t\t\t\tvar offSet = radius / Math.SQRT2;\n\t\t\t\t\t\t\t\tvar centerX = x + offSet;\n\t\t\t\t\t\t\t\tvar centerY = y + offSet;\n\n\t\t\t\t\t\t\t\t// Draw pointStyle as legend symbol\n\t\t\t\t\t\t\t\thelpers.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Draw box as legend symbol\n\t\t\t\t\t\t\t\tif (!isLineWidthZero) {\n\t\t\t\t\t\t\t\t\tctx.strokeRect(x, y, boxWidth, fontSize);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tctx.fillRect(x, y, boxWidth, fontSize);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tvar fillText = function fillText(x, y, legendItem, textWidth) {\n\t\t\t\t\t\t\tvar halfFontSize = fontSize / 2;\n\t\t\t\t\t\t\tvar xLeft = boxWidth + halfFontSize + x;\n\t\t\t\t\t\t\tvar yMiddle = y + halfFontSize;\n\n\t\t\t\t\t\t\tctx.fillText(legendItem.text, xLeft, yMiddle);\n\n\t\t\t\t\t\t\tif (legendItem.hidden) {\n\t\t\t\t\t\t\t\t// Strikethrough the text if hidden\n\t\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\t\tctx.lineWidth = 2;\n\t\t\t\t\t\t\t\tctx.moveTo(xLeft, yMiddle);\n\t\t\t\t\t\t\t\tctx.lineTo(xLeft + textWidth, yMiddle);\n\t\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Horizontal\n\t\t\t\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\t\tcursor = {\n\t\t\t\t\t\t\t\tx: me.left + (legendWidth - lineWidths[0]) / 2,\n\t\t\t\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\t\t\t\tline: 0\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcursor = {\n\t\t\t\t\t\t\t\tx: me.left + labelOpts.padding,\n\t\t\t\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\t\t\t\tline: 0\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar itemHeight = fontSize + labelOpts.padding;\n\t\t\t\t\t\thelpers.each(me.legendItems, function (legendItem, i) {\n\t\t\t\t\t\t\tvar textWidth = ctx.measureText(legendItem.text).width;\n\t\t\t\t\t\t\tvar width = boxWidth + fontSize / 2 + textWidth;\n\t\t\t\t\t\t\tvar x = cursor.x;\n\t\t\t\t\t\t\tvar y = cursor.y;\n\n\t\t\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\t\t\tif (x + width >= legendWidth) {\n\t\t\t\t\t\t\t\t\ty = cursor.y += itemHeight;\n\t\t\t\t\t\t\t\t\tcursor.line++;\n\t\t\t\t\t\t\t\t\tx = cursor.x = me.left + (legendWidth - lineWidths[cursor.line]) / 2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (y + itemHeight > me.bottom) {\n\t\t\t\t\t\t\t\tx = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\n\t\t\t\t\t\t\t\ty = cursor.y = me.top + labelOpts.padding;\n\t\t\t\t\t\t\t\tcursor.line++;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdrawLegendBox(x, y, legendItem);\n\n\t\t\t\t\t\t\thitboxes[i].left = x;\n\t\t\t\t\t\t\thitboxes[i].top = y;\n\n\t\t\t\t\t\t\t// Fill the actual label\n\t\t\t\t\t\t\tfillText(x, y, legendItem, textWidth);\n\n\t\t\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\t\t\tcursor.x += width + labelOpts.padding;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcursor.y += itemHeight;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\r\n * Handle an event\r\n * @private\r\n * @param {IEvent} event - The event to handle\r\n * @return {Boolean} true if a change occured\r\n */\n\t\t\t\thandleEvent: function handleEvent(e) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\tvar type = e.type === 'mouseup' ? 'click' : e.type;\n\t\t\t\t\tvar changed = false;\n\n\t\t\t\t\tif (type === 'mousemove') {\n\t\t\t\t\t\tif (!opts.onHover) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (type === 'click') {\n\t\t\t\t\t\tif (!opts.onClick) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Chart event already has relative position in it\n\t\t\t\t\tvar x = e.x;\n\t\t\t\t\tvar y = e.y;\n\n\t\t\t\t\tif (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n\t\t\t\t\t\t// See if we are touching one of the dataset boxes\n\t\t\t\t\t\tvar lh = me.legendHitBoxes;\n\t\t\t\t\t\tfor (var i = 0; i < lh.length; ++i) {\n\t\t\t\t\t\t\tvar hitBox = lh[i];\n\n\t\t\t\t\t\t\tif (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n\t\t\t\t\t\t\t\t// Touching an element\n\t\t\t\t\t\t\t\tif (type === 'click') {\n\t\t\t\t\t\t\t\t\t// use e.native for backwards compatibility\n\t\t\t\t\t\t\t\t\topts.onClick.call(me, e.native, me.legendItems[i]);\n\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t} else if (type === 'mousemove') {\n\t\t\t\t\t\t\t\t\t// use e.native for backwards compatibility\n\t\t\t\t\t\t\t\t\topts.onHover.call(me, e.native, me.legendItems[i]);\n\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfunction createNewLegendAndAttach(chart, legendOpts) {\n\t\t\t\tvar legend = new Legend({\n\t\t\t\t\tctx: chart.ctx,\n\t\t\t\t\toptions: legendOpts,\n\t\t\t\t\tchart: chart\n\t\t\t\t});\n\n\t\t\t\tlayouts.configure(chart, legend, legendOpts);\n\t\t\t\tlayouts.addBox(chart, legend);\n\t\t\t\tchart.legend = legend;\n\t\t\t}\n\n\t\t\tmodule.exports = {\n\t\t\t\tid: 'legend',\n\n\t\t\t\t/**\r\n * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\r\n * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\r\n * the plugin, which one will be re-exposed in the chart.js file.\r\n * https://github.com/chartjs/Chart.js/pull/2640\r\n * @private\r\n */\n\t\t\t\t_element: Legend,\n\n\t\t\t\tbeforeInit: function beforeInit(chart) {\n\t\t\t\t\tvar legendOpts = chart.options.legend;\n\n\t\t\t\t\tif (legendOpts) {\n\t\t\t\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tbeforeUpdate: function beforeUpdate(chart) {\n\t\t\t\t\tvar legendOpts = chart.options.legend;\n\t\t\t\t\tvar legend = chart.legend;\n\n\t\t\t\t\tif (legendOpts) {\n\t\t\t\t\t\thelpers.mergeIf(legendOpts, defaults.global.legend);\n\n\t\t\t\t\t\tif (legend) {\n\t\t\t\t\t\t\tlayouts.configure(chart, legend, legendOpts);\n\t\t\t\t\t\t\tlegend.options = legendOpts;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (legend) {\n\t\t\t\t\t\tlayouts.removeBox(chart, legend);\n\t\t\t\t\t\tdelete chart.legend;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tafterEvent: function afterEvent(chart, e) {\n\t\t\t\t\tvar legend = chart.legend;\n\t\t\t\t\tif (legend) {\n\t\t\t\t\t\tlegend.handleEvent(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}, { \"26\": 26, \"27\": 27, \"31\": 31, \"46\": 46 }], 53: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar Element = require(27);\n\t\t\tvar helpers = require(46);\n\t\t\tvar layouts = require(31);\n\n\t\t\tvar noop = helpers.noop;\n\n\t\t\tdefaults._set('global', {\n\t\t\t\ttitle: {\n\t\t\t\t\tdisplay: false,\n\t\t\t\t\tfontStyle: 'bold',\n\t\t\t\t\tfullWidth: true,\n\t\t\t\t\tlineHeight: 1.2,\n\t\t\t\t\tpadding: 10,\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\ttext: '',\n\t\t\t\t\tweight: 2000 // by default greater than legend (1000) to be above\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/**\r\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n */\n\t\t\tvar Title = Element.extend({\n\t\t\t\tinitialize: function initialize(config) {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\thelpers.extend(me, config);\n\n\t\t\t\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\t\t\t\tme.legendHitBoxes = [];\n\t\t\t\t},\n\n\t\t\t\t// These methods are ordered by lifecycle. Utilities then follow.\n\n\t\t\t\tbeforeUpdate: noop,\n\t\t\t\tupdate: function update(maxWidth, maxHeight, margins) {\n\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\t\t\t\tme.beforeUpdate();\n\n\t\t\t\t\t// Absorb the master measurements\n\t\t\t\t\tme.maxWidth = maxWidth;\n\t\t\t\t\tme.maxHeight = maxHeight;\n\t\t\t\t\tme.margins = margins;\n\n\t\t\t\t\t// Dimensions\n\t\t\t\t\tme.beforeSetDimensions();\n\t\t\t\t\tme.setDimensions();\n\t\t\t\t\tme.afterSetDimensions();\n\t\t\t\t\t// Labels\n\t\t\t\t\tme.beforeBuildLabels();\n\t\t\t\t\tme.buildLabels();\n\t\t\t\t\tme.afterBuildLabels();\n\n\t\t\t\t\t// Fit\n\t\t\t\t\tme.beforeFit();\n\t\t\t\t\tme.fit();\n\t\t\t\t\tme.afterFit();\n\t\t\t\t\t//\n\t\t\t\t\tme.afterUpdate();\n\n\t\t\t\t\treturn me.minSize;\n\t\t\t\t},\n\t\t\t\tafterUpdate: noop,\n\n\t\t\t\t//\n\n\t\t\t\tbeforeSetDimensions: noop,\n\t\t\t\tsetDimensions: function setDimensions() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\t// Reset position before calculating rotation\n\t\t\t\t\t\tme.width = me.maxWidth;\n\t\t\t\t\t\tme.left = 0;\n\t\t\t\t\t\tme.right = me.width;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tme.height = me.maxHeight;\n\n\t\t\t\t\t\t// Reset position before calculating rotation\n\t\t\t\t\t\tme.top = 0;\n\t\t\t\t\t\tme.bottom = me.height;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset padding\n\t\t\t\t\tme.paddingLeft = 0;\n\t\t\t\t\tme.paddingTop = 0;\n\t\t\t\t\tme.paddingRight = 0;\n\t\t\t\t\tme.paddingBottom = 0;\n\n\t\t\t\t\t// Reset minSize\n\t\t\t\t\tme.minSize = {\n\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\theight: 0\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tafterSetDimensions: noop,\n\n\t\t\t\t//\n\n\t\t\t\tbeforeBuildLabels: noop,\n\t\t\t\tbuildLabels: noop,\n\t\t\t\tafterBuildLabels: noop,\n\n\t\t\t\t//\n\n\t\t\t\tbeforeFit: noop,\n\t\t\t\tfit: function fit() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\tvar display = opts.display;\n\t\t\t\t\tvar fontSize = valueOrDefault(opts.fontSize, defaults.global.defaultFontSize);\n\t\t\t\t\tvar minSize = me.minSize;\n\t\t\t\t\tvar lineCount = helpers.isArray(opts.text) ? opts.text.length : 1;\n\t\t\t\t\tvar lineHeight = helpers.options.toLineHeight(opts.lineHeight, fontSize);\n\t\t\t\t\tvar textSize = display ? lineCount * lineHeight + opts.padding * 2 : 0;\n\n\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\t\t\t\tminSize.height = textSize;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tminSize.width = textSize;\n\t\t\t\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t\t\t\t}\n\n\t\t\t\t\tme.width = minSize.width;\n\t\t\t\t\tme.height = minSize.height;\n\t\t\t\t},\n\t\t\t\tafterFit: noop,\n\n\t\t\t\t// Shared Methods\n\t\t\t\tisHorizontal: function isHorizontal() {\n\t\t\t\t\tvar pos = this.options.position;\n\t\t\t\t\treturn pos === 'top' || pos === 'bottom';\n\t\t\t\t},\n\n\t\t\t\t// Actually draw the title block on the canvas\n\t\t\t\tdraw: function draw() {\n\t\t\t\t\tvar me = this;\n\t\t\t\t\tvar ctx = me.ctx;\n\t\t\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\tvar globalDefaults = defaults.global;\n\n\t\t\t\t\tif (opts.display) {\n\t\t\t\t\t\tvar fontSize = valueOrDefault(opts.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\t\t\tvar fontStyle = valueOrDefault(opts.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\t\t\t\tvar fontFamily = valueOrDefault(opts.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\t\t\t\tvar titleFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\t\t\t\t\t\tvar lineHeight = helpers.options.toLineHeight(opts.lineHeight, fontSize);\n\t\t\t\t\t\tvar offset = lineHeight / 2 + opts.padding;\n\t\t\t\t\t\tvar rotation = 0;\n\t\t\t\t\t\tvar top = me.top;\n\t\t\t\t\t\tvar left = me.left;\n\t\t\t\t\t\tvar bottom = me.bottom;\n\t\t\t\t\t\tvar right = me.right;\n\t\t\t\t\t\tvar maxWidth, titleX, titleY;\n\n\t\t\t\t\t\tctx.fillStyle = valueOrDefault(opts.fontColor, globalDefaults.defaultFontColor); // render in correct colour\n\t\t\t\t\t\tctx.font = titleFont;\n\n\t\t\t\t\t\t// Horizontal\n\t\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\t\ttitleX = left + (right - left) / 2; // midpoint of the width\n\t\t\t\t\t\t\ttitleY = top + offset;\n\t\t\t\t\t\t\tmaxWidth = right - left;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttitleX = opts.position === 'left' ? left + offset : right - offset;\n\t\t\t\t\t\t\ttitleY = top + (bottom - top) / 2;\n\t\t\t\t\t\t\tmaxWidth = bottom - top;\n\t\t\t\t\t\t\trotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.save();\n\t\t\t\t\t\tctx.translate(titleX, titleY);\n\t\t\t\t\t\tctx.rotate(rotation);\n\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\tctx.textBaseline = 'middle';\n\n\t\t\t\t\t\tvar text = opts.text;\n\t\t\t\t\t\tif (helpers.isArray(text)) {\n\t\t\t\t\t\t\tvar y = 0;\n\t\t\t\t\t\t\tfor (var i = 0; i < text.length; ++i) {\n\t\t\t\t\t\t\t\tctx.fillText(text[i], 0, y, maxWidth);\n\t\t\t\t\t\t\t\ty += lineHeight;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.fillText(text, 0, 0, maxWidth);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfunction createNewTitleBlockAndAttach(chart, titleOpts) {\n\t\t\t\tvar title = new Title({\n\t\t\t\t\tctx: chart.ctx,\n\t\t\t\t\toptions: titleOpts,\n\t\t\t\t\tchart: chart\n\t\t\t\t});\n\n\t\t\t\tlayouts.configure(chart, title, titleOpts);\n\t\t\t\tlayouts.addBox(chart, title);\n\t\t\t\tchart.titleBlock = title;\n\t\t\t}\n\n\t\t\tmodule.exports = {\n\t\t\t\tid: 'title',\n\n\t\t\t\t/**\r\n * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\r\n * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\r\n * the plugin, which one will be re-exposed in the chart.js file.\r\n * https://github.com/chartjs/Chart.js/pull/2640\r\n * @private\r\n */\n\t\t\t\t_element: Title,\n\n\t\t\t\tbeforeInit: function beforeInit(chart) {\n\t\t\t\t\tvar titleOpts = chart.options.title;\n\n\t\t\t\t\tif (titleOpts) {\n\t\t\t\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tbeforeUpdate: function beforeUpdate(chart) {\n\t\t\t\t\tvar titleOpts = chart.options.title;\n\t\t\t\t\tvar titleBlock = chart.titleBlock;\n\n\t\t\t\t\tif (titleOpts) {\n\t\t\t\t\t\thelpers.mergeIf(titleOpts, defaults.global.title);\n\n\t\t\t\t\t\tif (titleBlock) {\n\t\t\t\t\t\t\tlayouts.configure(chart, titleBlock, titleOpts);\n\t\t\t\t\t\t\ttitleBlock.options = titleOpts;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (titleBlock) {\n\t\t\t\t\t\tlayouts.removeBox(chart, titleBlock);\n\t\t\t\t\t\tdelete chart.titleBlock;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}, { \"26\": 26, \"27\": 27, \"31\": 31, \"46\": 46 }], 54: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar Scale = require(33);\n\t\t\tvar scaleService = require(34);\n\n\t\t\tmodule.exports = function () {\n\n\t\t\t\t// Default config for a category scale\n\t\t\t\tvar defaultConfig = {\n\t\t\t\t\tposition: 'bottom'\n\t\t\t\t};\n\n\t\t\t\tvar DatasetScale = Scale.extend({\n\t\t\t\t\t/**\r\n * Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those\r\n * else fall back to data.labels\r\n * @private\r\n */\n\t\t\t\t\tgetLabels: function getLabels() {\n\t\t\t\t\t\tvar data = this.chart.data;\n\t\t\t\t\t\treturn this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;\n\t\t\t\t\t},\n\n\t\t\t\t\tdetermineDataLimits: function determineDataLimits() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar labels = me.getLabels();\n\t\t\t\t\t\tme.minIndex = 0;\n\t\t\t\t\t\tme.maxIndex = labels.length - 1;\n\t\t\t\t\t\tvar findIndex;\n\n\t\t\t\t\t\tif (me.options.ticks.min !== undefined) {\n\t\t\t\t\t\t\t// user specified min value\n\t\t\t\t\t\t\tfindIndex = labels.indexOf(me.options.ticks.min);\n\t\t\t\t\t\t\tme.minIndex = findIndex !== -1 ? findIndex : me.minIndex;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (me.options.ticks.max !== undefined) {\n\t\t\t\t\t\t\t// user specified max value\n\t\t\t\t\t\t\tfindIndex = labels.indexOf(me.options.ticks.max);\n\t\t\t\t\t\t\tme.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tme.min = labels[me.minIndex];\n\t\t\t\t\t\tme.max = labels[me.maxIndex];\n\t\t\t\t\t},\n\n\t\t\t\t\tbuildTicks: function buildTicks() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar labels = me.getLabels();\n\t\t\t\t\t\t// If we are viewing some subset of labels, slice the original array\n\t\t\t\t\t\tme.ticks = me.minIndex === 0 && me.maxIndex === labels.length - 1 ? labels : labels.slice(me.minIndex, me.maxIndex + 1);\n\t\t\t\t\t},\n\n\t\t\t\t\tgetLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar data = me.chart.data;\n\t\t\t\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\t\t\t\tif (data.yLabels && !isHorizontal) {\n\t\t\t\t\t\t\treturn me.getRightValue(data.datasets[datasetIndex].data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn me.ticks[index - me.minIndex];\n\t\t\t\t\t},\n\n\t\t\t\t\t// Used to get data value locations. Value can either be an index or a numerical value\n\t\t\t\t\tgetPixelForValue: function getPixelForValue(value, index) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar offset = me.options.offset;\n\t\t\t\t\t\t// 1 is added because we need the length but we have the indexes\n\t\t\t\t\t\tvar offsetAmt = Math.max(me.maxIndex + 1 - me.minIndex - (offset ? 0 : 1), 1);\n\n\t\t\t\t\t\t// If value is a data object, then index is the index in the data array,\n\t\t\t\t\t\t// not the index of the scale. We need to change that.\n\t\t\t\t\t\tvar valueCategory;\n\t\t\t\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\t\t\t\tvalueCategory = me.isHorizontal() ? value.x : value.y;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (valueCategory !== undefined || value !== undefined && isNaN(index)) {\n\t\t\t\t\t\t\tvar labels = me.getLabels();\n\t\t\t\t\t\t\tvalue = valueCategory || value;\n\t\t\t\t\t\t\tvar idx = labels.indexOf(value);\n\t\t\t\t\t\t\tindex = idx !== -1 ? idx : index;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\t\tvar valueWidth = me.width / offsetAmt;\n\t\t\t\t\t\t\tvar widthOffset = valueWidth * (index - me.minIndex);\n\n\t\t\t\t\t\t\tif (offset) {\n\t\t\t\t\t\t\t\twidthOffset += valueWidth / 2;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn me.left + Math.round(widthOffset);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar valueHeight = me.height / offsetAmt;\n\t\t\t\t\t\tvar heightOffset = valueHeight * (index - me.minIndex);\n\n\t\t\t\t\t\tif (offset) {\n\t\t\t\t\t\t\theightOffset += valueHeight / 2;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn me.top + Math.round(heightOffset);\n\t\t\t\t\t},\n\t\t\t\t\tgetPixelForTick: function getPixelForTick(index) {\n\t\t\t\t\t\treturn this.getPixelForValue(this.ticks[index], index + this.minIndex, null);\n\t\t\t\t\t},\n\t\t\t\t\tgetValueForPixel: function getValueForPixel(pixel) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar offset = me.options.offset;\n\t\t\t\t\t\tvar value;\n\t\t\t\t\t\tvar offsetAmt = Math.max(me._ticks.length - (offset ? 0 : 1), 1);\n\t\t\t\t\t\tvar horz = me.isHorizontal();\n\t\t\t\t\t\tvar valueDimension = (horz ? me.width : me.height) / offsetAmt;\n\n\t\t\t\t\t\tpixel -= horz ? me.left : me.top;\n\n\t\t\t\t\t\tif (offset) {\n\t\t\t\t\t\t\tpixel -= valueDimension / 2;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (pixel <= 0) {\n\t\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvalue = Math.round(pixel / valueDimension);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn value + me.minIndex;\n\t\t\t\t\t},\n\t\t\t\t\tgetBasePixel: function getBasePixel() {\n\t\t\t\t\t\treturn this.bottom;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tscaleService.registerScaleType('category', DatasetScale, defaultConfig);\n\t\t\t};\n\t\t}, { \"33\": 33, \"34\": 34 }], 55: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar helpers = require(46);\n\t\t\tvar scaleService = require(34);\n\t\t\tvar Ticks = require(35);\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tvar defaultConfig = {\n\t\t\t\t\tposition: 'left',\n\t\t\t\t\tticks: {\n\t\t\t\t\t\tcallback: Ticks.formatters.linear\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar LinearScale = Chart.LinearScaleBase.extend({\n\n\t\t\t\t\tdetermineDataLimits: function determineDataLimits() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar data = chart.data;\n\t\t\t\t\t\tvar datasets = data.datasets;\n\t\t\t\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\t\t\t\tvar DEFAULT_MIN = 0;\n\t\t\t\t\t\tvar DEFAULT_MAX = 1;\n\n\t\t\t\t\t\tfunction IDMatches(meta) {\n\t\t\t\t\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// First Calculate the range\n\t\t\t\t\t\tme.min = null;\n\t\t\t\t\t\tme.max = null;\n\n\t\t\t\t\t\tvar hasStacks = opts.stacked;\n\t\t\t\t\t\tif (hasStacks === undefined) {\n\t\t\t\t\t\t\thelpers.each(datasets, function (dataset, datasetIndex) {\n\t\t\t\t\t\t\t\tif (hasStacks) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) && meta.stack !== undefined) {\n\t\t\t\t\t\t\t\t\thasStacks = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (opts.stacked || hasStacks) {\n\t\t\t\t\t\t\tvar valuesPerStack = {};\n\n\t\t\t\t\t\t\thelpers.each(datasets, function (dataset, datasetIndex) {\n\t\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\t\t\t\tvar key = [meta.type,\n\t\t\t\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n\t\t\t\t\t\t\t\topts.stacked === undefined && meta.stack === undefined ? datasetIndex : '', meta.stack].join('.');\n\n\t\t\t\t\t\t\t\tif (valuesPerStack[key] === undefined) {\n\t\t\t\t\t\t\t\t\tvaluesPerStack[key] = {\n\t\t\t\t\t\t\t\t\t\tpositiveValues: [],\n\t\t\t\t\t\t\t\t\t\tnegativeValues: []\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Store these per type\n\t\t\t\t\t\t\t\tvar positiveValues = valuesPerStack[key].positiveValues;\n\t\t\t\t\t\t\t\tvar negativeValues = valuesPerStack[key].negativeValues;\n\n\t\t\t\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\t\t\t\thelpers.each(dataset.data, function (rawValue, index) {\n\t\t\t\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tpositiveValues[index] = positiveValues[index] || 0;\n\t\t\t\t\t\t\t\t\t\tnegativeValues[index] = negativeValues[index] || 0;\n\n\t\t\t\t\t\t\t\t\t\tif (opts.relativePoints) {\n\t\t\t\t\t\t\t\t\t\t\tpositiveValues[index] = 100;\n\t\t\t\t\t\t\t\t\t\t} else if (value < 0) {\n\t\t\t\t\t\t\t\t\t\t\tnegativeValues[index] += value;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tpositiveValues[index] += value;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\thelpers.each(valuesPerStack, function (valuesForType) {\n\t\t\t\t\t\t\t\tvar values = valuesForType.positiveValues.concat(valuesForType.negativeValues);\n\t\t\t\t\t\t\t\tvar minVal = helpers.min(values);\n\t\t\t\t\t\t\t\tvar maxVal = helpers.max(values);\n\t\t\t\t\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\t\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thelpers.each(datasets, function (dataset, datasetIndex) {\n\t\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\t\t\t\thelpers.each(dataset.data, function (rawValue, index) {\n\t\t\t\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tme.min = isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\n\t\t\t\t\t\tme.max = isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;\n\n\t\t\t\t\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\t\t\t\t\tthis.handleTickRangeOptions();\n\t\t\t\t\t},\n\t\t\t\t\tgetTickLimit: function getTickLimit() {\n\t\t\t\t\t\tvar maxTicks;\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar tickOpts = me.options.ticks;\n\n\t\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\t\tmaxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.width / 50));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// The factor of 2 used to scale the font size has been experimentally determined.\n\t\t\t\t\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, defaults.global.defaultFontSize);\n\t\t\t\t\t\t\tmaxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.height / (2 * tickFontSize)));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn maxTicks;\n\t\t\t\t\t},\n\t\t\t\t\t// Called after the ticks are built. We need\n\t\t\t\t\thandleDirectionalChanges: function handleDirectionalChanges() {\n\t\t\t\t\t\tif (!this.isHorizontal()) {\n\t\t\t\t\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\n\t\t\t\t\t\t\tthis.ticks.reverse();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tgetLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n\t\t\t\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t\t\t\t},\n\t\t\t\t\t// Utils\n\t\t\t\t\tgetPixelForValue: function getPixelForValue(value) {\n\t\t\t\t\t\t// This must be called after fit has been run so that\n\t\t\t\t\t\t// this.left, this.top, this.right, and this.bottom have been defined\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar start = me.start;\n\n\t\t\t\t\t\tvar rightValue = +me.getRightValue(value);\n\t\t\t\t\t\tvar pixel;\n\t\t\t\t\t\tvar range = me.end - start;\n\n\t\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\t\tpixel = me.left + me.width / range * (rightValue - start);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpixel = me.bottom - me.height / range * (rightValue - start);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn pixel;\n\t\t\t\t\t},\n\t\t\t\t\tgetValueForPixel: function getValueForPixel(pixel) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\t\t\t\tvar innerDimension = isHorizontal ? me.width : me.height;\n\t\t\t\t\t\tvar offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;\n\t\t\t\t\t\treturn me.start + (me.end - me.start) * offset;\n\t\t\t\t\t},\n\t\t\t\t\tgetPixelForTick: function getPixelForTick(index) {\n\t\t\t\t\t\treturn this.getPixelForValue(this.ticksAsNumbers[index]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tscaleService.registerScaleType('linear', LinearScale, defaultConfig);\n\t\t\t};\n\t\t}, { \"26\": 26, \"34\": 34, \"35\": 35, \"46\": 46 }], 56: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(46);\n\t\t\tvar Scale = require(33);\n\n\t\t\t/**\r\n * Generate a set of linear ticks\r\n * @param generationOptions the options used to generate the ticks\r\n * @param dataRange the range of the data\r\n * @returns {Array} array of tick values\r\n */\n\t\t\tfunction generateTicks(generationOptions, dataRange) {\n\t\t\t\tvar ticks = [];\n\t\t\t\t// To get a \"nice\" value for the tick spacing, we will use the appropriately named\n\t\t\t\t// \"nice number\" algorithm. See http://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n\t\t\t\t// for details.\n\n\t\t\t\tvar factor;\n\t\t\t\tvar precision;\n\t\t\t\tvar spacing;\n\n\t\t\t\tif (generationOptions.stepSize && generationOptions.stepSize > 0) {\n\t\t\t\t\tspacing = generationOptions.stepSize;\n\t\t\t\t} else {\n\t\t\t\t\tvar niceRange = helpers.niceNum(dataRange.max - dataRange.min, false);\n\t\t\t\t\tspacing = helpers.niceNum(niceRange / (generationOptions.maxTicks - 1), true);\n\n\t\t\t\t\tprecision = generationOptions.precision;\n\t\t\t\t\tif (precision !== undefined) {\n\t\t\t\t\t\t// If the user specified a precision, round to that number of decimal places\n\t\t\t\t\t\tfactor = Math.pow(10, precision);\n\t\t\t\t\t\tspacing = Math.ceil(spacing * factor) / factor;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar niceMin = Math.floor(dataRange.min / spacing) * spacing;\n\t\t\t\tvar niceMax = Math.ceil(dataRange.max / spacing) * spacing;\n\n\t\t\t\t// If min, max and stepSize is set and they make an evenly spaced scale use it.\n\t\t\t\tif (!helpers.isNullOrUndef(generationOptions.min) && !helpers.isNullOrUndef(generationOptions.max) && generationOptions.stepSize) {\n\t\t\t\t\t// If very close to our whole number, use it.\n\t\t\t\t\tif (helpers.almostWhole((generationOptions.max - generationOptions.min) / generationOptions.stepSize, spacing / 1000)) {\n\t\t\t\t\t\tniceMin = generationOptions.min;\n\t\t\t\t\t\tniceMax = generationOptions.max;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar numSpaces = (niceMax - niceMin) / spacing;\n\t\t\t\t// If very close to our rounded value, use it.\n\t\t\t\tif (helpers.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n\t\t\t\t\tnumSpaces = Math.round(numSpaces);\n\t\t\t\t} else {\n\t\t\t\t\tnumSpaces = Math.ceil(numSpaces);\n\t\t\t\t}\n\n\t\t\t\tprecision = 1;\n\t\t\t\tif (spacing < 1) {\n\t\t\t\t\tprecision = Math.pow(10, 1 - Math.floor(helpers.log10(spacing)));\n\t\t\t\t\tniceMin = Math.round(niceMin * precision) / precision;\n\t\t\t\t\tniceMax = Math.round(niceMax * precision) / precision;\n\t\t\t\t}\n\t\t\t\tticks.push(generationOptions.min !== undefined ? generationOptions.min : niceMin);\n\t\t\t\tfor (var j = 1; j < numSpaces; ++j) {\n\t\t\t\t\tticks.push(Math.round((niceMin + j * spacing) * precision) / precision);\n\t\t\t\t}\n\t\t\t\tticks.push(generationOptions.max !== undefined ? generationOptions.max : niceMax);\n\n\t\t\t\treturn ticks;\n\t\t\t}\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tvar noop = helpers.noop;\n\n\t\t\t\tChart.LinearScaleBase = Scale.extend({\n\t\t\t\t\tgetRightValue: function getRightValue(value) {\n\t\t\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\t\t\treturn +value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn Scale.prototype.getRightValue.call(this, value);\n\t\t\t\t\t},\n\n\t\t\t\t\thandleTickRangeOptions: function handleTickRangeOptions() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\t\tvar tickOpts = opts.ticks;\n\n\t\t\t\t\t\t// If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\n\t\t\t\t\t\t// do nothing since that would make the chart weird. If the user really wants a weird chart\n\t\t\t\t\t\t// axis, they can manually override it\n\t\t\t\t\t\tif (tickOpts.beginAtZero) {\n\t\t\t\t\t\t\tvar minSign = helpers.sign(me.min);\n\t\t\t\t\t\t\tvar maxSign = helpers.sign(me.max);\n\n\t\t\t\t\t\t\tif (minSign < 0 && maxSign < 0) {\n\t\t\t\t\t\t\t\t// move the top up to 0\n\t\t\t\t\t\t\t\tme.max = 0;\n\t\t\t\t\t\t\t} else if (minSign > 0 && maxSign > 0) {\n\t\t\t\t\t\t\t\t// move the bottom down to 0\n\t\t\t\t\t\t\t\tme.min = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\n\t\t\t\t\t\tvar setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\n\n\t\t\t\t\t\tif (tickOpts.min !== undefined) {\n\t\t\t\t\t\t\tme.min = tickOpts.min;\n\t\t\t\t\t\t} else if (tickOpts.suggestedMin !== undefined) {\n\t\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\t\tme.min = tickOpts.suggestedMin;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tme.min = Math.min(me.min, tickOpts.suggestedMin);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (tickOpts.max !== undefined) {\n\t\t\t\t\t\t\tme.max = tickOpts.max;\n\t\t\t\t\t\t} else if (tickOpts.suggestedMax !== undefined) {\n\t\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\t\tme.max = tickOpts.suggestedMax;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tme.max = Math.max(me.max, tickOpts.suggestedMax);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (setMin !== setMax) {\n\t\t\t\t\t\t\t// We set the min or the max but not both.\n\t\t\t\t\t\t\t// So ensure that our range is good\n\t\t\t\t\t\t\t// Inverted or 0 length range can happen when\n\t\t\t\t\t\t\t// ticks.min is set, and no datasets are visible\n\t\t\t\t\t\t\tif (me.min >= me.max) {\n\t\t\t\t\t\t\t\tif (setMin) {\n\t\t\t\t\t\t\t\t\tme.max = me.min + 1;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tme.min = me.max - 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (me.min === me.max) {\n\t\t\t\t\t\t\tme.max++;\n\n\t\t\t\t\t\t\tif (!tickOpts.beginAtZero) {\n\t\t\t\t\t\t\t\tme.min--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tgetTickLimit: noop,\n\t\t\t\t\thandleDirectionalChanges: noop,\n\n\t\t\t\t\tbuildTicks: function buildTicks() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\t\tvar tickOpts = opts.ticks;\n\n\t\t\t\t\t\t// Figure out what the max number of ticks we can support it is based on the size of\n\t\t\t\t\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 50\n\t\t\t\t\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n\t\t\t\t\t\t// the graph. Make sure we always have at least 2 ticks\n\t\t\t\t\t\tvar maxTicks = me.getTickLimit();\n\t\t\t\t\t\tmaxTicks = Math.max(2, maxTicks);\n\n\t\t\t\t\t\tvar numericGeneratorOptions = {\n\t\t\t\t\t\t\tmaxTicks: maxTicks,\n\t\t\t\t\t\t\tmin: tickOpts.min,\n\t\t\t\t\t\t\tmax: tickOpts.max,\n\t\t\t\t\t\t\tprecision: tickOpts.precision,\n\t\t\t\t\t\t\tstepSize: helpers.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\n\t\t\t\t\t\t};\n\t\t\t\t\t\tvar ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\n\n\t\t\t\t\t\tme.handleDirectionalChanges();\n\n\t\t\t\t\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t\t\t\t\t// range of the scale\n\t\t\t\t\t\tme.max = helpers.max(ticks);\n\t\t\t\t\t\tme.min = helpers.min(ticks);\n\n\t\t\t\t\t\tif (tickOpts.reverse) {\n\t\t\t\t\t\t\tticks.reverse();\n\n\t\t\t\t\t\t\tme.start = me.max;\n\t\t\t\t\t\t\tme.end = me.min;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tme.start = me.min;\n\t\t\t\t\t\t\tme.end = me.max;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tconvertTicksToLabels: function convertTicksToLabels() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tme.ticksAsNumbers = me.ticks.slice();\n\t\t\t\t\t\tme.zeroLineIndex = me.ticks.indexOf(0);\n\n\t\t\t\t\t\tScale.prototype.convertTicksToLabels.call(me);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t}, { \"33\": 33, \"46\": 46 }], 57: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar helpers = require(46);\n\t\t\tvar Scale = require(33);\n\t\t\tvar scaleService = require(34);\n\t\t\tvar Ticks = require(35);\n\n\t\t\t/**\r\n * Generate a set of logarithmic ticks\r\n * @param generationOptions the options used to generate the ticks\r\n * @param dataRange the range of the data\r\n * @returns {Array} array of tick values\r\n */\n\t\t\tfunction generateTicks(generationOptions, dataRange) {\n\t\t\t\tvar ticks = [];\n\t\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\n\t\t\t\t// Figure out what the max number of ticks we can support it is based on the size of\n\t\t\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 50\n\t\t\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n\t\t\t\t// the graph\n\t\t\t\tvar tickVal = valueOrDefault(generationOptions.min, Math.pow(10, Math.floor(helpers.log10(dataRange.min))));\n\n\t\t\t\tvar endExp = Math.floor(helpers.log10(dataRange.max));\n\t\t\t\tvar endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n\t\t\t\tvar exp, significand;\n\n\t\t\t\tif (tickVal === 0) {\n\t\t\t\t\texp = Math.floor(helpers.log10(dataRange.minNotZero));\n\t\t\t\t\tsignificand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\n\n\t\t\t\t\tticks.push(tickVal);\n\t\t\t\t\ttickVal = significand * Math.pow(10, exp);\n\t\t\t\t} else {\n\t\t\t\t\texp = Math.floor(helpers.log10(tickVal));\n\t\t\t\t\tsignificand = Math.floor(tickVal / Math.pow(10, exp));\n\t\t\t\t}\n\t\t\t\tvar precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n\n\t\t\t\tdo {\n\t\t\t\t\tticks.push(tickVal);\n\n\t\t\t\t\t++significand;\n\t\t\t\t\tif (significand === 10) {\n\t\t\t\t\t\tsignificand = 1;\n\t\t\t\t\t\t++exp;\n\t\t\t\t\t\tprecision = exp >= 0 ? 1 : precision;\n\t\t\t\t\t}\n\n\t\t\t\t\ttickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n\t\t\t\t} while (exp < endExp || exp === endExp && significand < endSignificand);\n\n\t\t\t\tvar lastTick = valueOrDefault(generationOptions.max, tickVal);\n\t\t\t\tticks.push(lastTick);\n\n\t\t\t\treturn ticks;\n\t\t\t}\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tvar defaultConfig = {\n\t\t\t\t\tposition: 'left',\n\n\t\t\t\t\t// label settings\n\t\t\t\t\tticks: {\n\t\t\t\t\t\tcallback: Ticks.formatters.logarithmic\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar LogarithmicScale = Scale.extend({\n\t\t\t\t\tdetermineDataLimits: function determineDataLimits() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar data = chart.data;\n\t\t\t\t\t\tvar datasets = data.datasets;\n\t\t\t\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\t\t\t\tfunction IDMatches(meta) {\n\t\t\t\t\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Calculate Range\n\t\t\t\t\t\tme.min = null;\n\t\t\t\t\t\tme.max = null;\n\t\t\t\t\t\tme.minNotZero = null;\n\n\t\t\t\t\t\tvar hasStacks = opts.stacked;\n\t\t\t\t\t\tif (hasStacks === undefined) {\n\t\t\t\t\t\t\thelpers.each(datasets, function (dataset, datasetIndex) {\n\t\t\t\t\t\t\t\tif (hasStacks) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) && meta.stack !== undefined) {\n\t\t\t\t\t\t\t\t\thasStacks = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (opts.stacked || hasStacks) {\n\t\t\t\t\t\t\tvar valuesPerStack = {};\n\n\t\t\t\t\t\t\thelpers.each(datasets, function (dataset, datasetIndex) {\n\t\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\t\t\t\tvar key = [meta.type,\n\t\t\t\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n\t\t\t\t\t\t\t\topts.stacked === undefined && meta.stack === undefined ? datasetIndex : '', meta.stack].join('.');\n\n\t\t\t\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\t\t\t\tif (valuesPerStack[key] === undefined) {\n\t\t\t\t\t\t\t\t\t\tvaluesPerStack[key] = [];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\thelpers.each(dataset.data, function (rawValue, index) {\n\t\t\t\t\t\t\t\t\t\tvar values = valuesPerStack[key];\n\t\t\t\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\t\t\t\t// invalid, hidden and negative values are ignored\n\t\t\t\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden || value < 0) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tvalues[index] = values[index] || 0;\n\t\t\t\t\t\t\t\t\t\tvalues[index] += value;\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\thelpers.each(valuesPerStack, function (valuesForType) {\n\t\t\t\t\t\t\t\tif (valuesForType.length > 0) {\n\t\t\t\t\t\t\t\t\tvar minVal = helpers.min(valuesForType);\n\t\t\t\t\t\t\t\t\tvar maxVal = helpers.max(valuesForType);\n\t\t\t\t\t\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\t\t\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thelpers.each(datasets, function (dataset, datasetIndex) {\n\t\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\t\t\t\thelpers.each(dataset.data, function (rawValue, index) {\n\t\t\t\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\t\t\t\t// invalid, hidden and negative values are ignored\n\t\t\t\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden || value < 0) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {\n\t\t\t\t\t\t\t\t\t\t\tme.minNotZero = value;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Common base implementation to handle ticks.min, ticks.max\n\t\t\t\t\t\tthis.handleTickRangeOptions();\n\t\t\t\t\t},\n\t\t\t\t\thandleTickRangeOptions: function handleTickRangeOptions() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\t\tvar tickOpts = opts.ticks;\n\t\t\t\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\t\t\t\tvar DEFAULT_MIN = 1;\n\t\t\t\t\t\tvar DEFAULT_MAX = 10;\n\n\t\t\t\t\t\tme.min = valueOrDefault(tickOpts.min, me.min);\n\t\t\t\t\t\tme.max = valueOrDefault(tickOpts.max, me.max);\n\n\t\t\t\t\t\tif (me.min === me.max) {\n\t\t\t\t\t\t\tif (me.min !== 0 && me.min !== null) {\n\t\t\t\t\t\t\t\tme.min = Math.pow(10, Math.floor(helpers.log10(me.min)) - 1);\n\t\t\t\t\t\t\t\tme.max = Math.pow(10, Math.floor(helpers.log10(me.max)) + 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tme.min = DEFAULT_MIN;\n\t\t\t\t\t\t\t\tme.max = DEFAULT_MAX;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\tme.min = Math.pow(10, Math.floor(helpers.log10(me.max)) - 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\tme.max = me.min !== 0 ? Math.pow(10, Math.floor(helpers.log10(me.min)) + 1) : DEFAULT_MAX;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (me.minNotZero === null) {\n\t\t\t\t\t\t\tif (me.min > 0) {\n\t\t\t\t\t\t\t\tme.minNotZero = me.min;\n\t\t\t\t\t\t\t} else if (me.max < 1) {\n\t\t\t\t\t\t\t\tme.minNotZero = Math.pow(10, Math.floor(helpers.log10(me.max)));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tme.minNotZero = DEFAULT_MIN;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tbuildTicks: function buildTicks() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\t\tvar tickOpts = opts.ticks;\n\t\t\t\t\t\tvar reverse = !me.isHorizontal();\n\n\t\t\t\t\t\tvar generationOptions = {\n\t\t\t\t\t\t\tmin: tickOpts.min,\n\t\t\t\t\t\t\tmax: tickOpts.max\n\t\t\t\t\t\t};\n\t\t\t\t\t\tvar ticks = me.ticks = generateTicks(generationOptions, me);\n\n\t\t\t\t\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t\t\t\t\t// range of the scale\n\t\t\t\t\t\tme.max = helpers.max(ticks);\n\t\t\t\t\t\tme.min = helpers.min(ticks);\n\n\t\t\t\t\t\tif (tickOpts.reverse) {\n\t\t\t\t\t\t\treverse = !reverse;\n\t\t\t\t\t\t\tme.start = me.max;\n\t\t\t\t\t\t\tme.end = me.min;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tme.start = me.min;\n\t\t\t\t\t\t\tme.end = me.max;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (reverse) {\n\t\t\t\t\t\t\tticks.reverse();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tconvertTicksToLabels: function convertTicksToLabels() {\n\t\t\t\t\t\tthis.tickValues = this.ticks.slice();\n\n\t\t\t\t\t\tScale.prototype.convertTicksToLabels.call(this);\n\t\t\t\t\t},\n\t\t\t\t\t// Get the correct tooltip label\n\t\t\t\t\tgetLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n\t\t\t\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t\t\t\t},\n\t\t\t\t\tgetPixelForTick: function getPixelForTick(index) {\n\t\t\t\t\t\treturn this.getPixelForValue(this.tickValues[index]);\n\t\t\t\t\t},\n\t\t\t\t\t/**\r\n * Returns the value of the first tick.\r\n * @param {Number} value - The minimum not zero value.\r\n * @return {Number} The first tick value.\r\n * @private\r\n */\n\t\t\t\t\t_getFirstTickValue: function _getFirstTickValue(value) {\n\t\t\t\t\t\tvar exp = Math.floor(helpers.log10(value));\n\t\t\t\t\t\tvar significand = Math.floor(value / Math.pow(10, exp));\n\n\t\t\t\t\t\treturn significand * Math.pow(10, exp);\n\t\t\t\t\t},\n\t\t\t\t\tgetPixelForValue: function getPixelForValue(value) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar reverse = me.options.ticks.reverse;\n\t\t\t\t\t\tvar log10 = helpers.log10;\n\t\t\t\t\t\tvar firstTickValue = me._getFirstTickValue(me.minNotZero);\n\t\t\t\t\t\tvar offset = 0;\n\t\t\t\t\t\tvar innerDimension, pixel, start, end, sign;\n\n\t\t\t\t\t\tvalue = +me.getRightValue(value);\n\t\t\t\t\t\tif (reverse) {\n\t\t\t\t\t\t\tstart = me.end;\n\t\t\t\t\t\t\tend = me.start;\n\t\t\t\t\t\t\tsign = -1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstart = me.start;\n\t\t\t\t\t\t\tend = me.end;\n\t\t\t\t\t\t\tsign = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\t\tinnerDimension = me.width;\n\t\t\t\t\t\t\tpixel = reverse ? me.right : me.left;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tinnerDimension = me.height;\n\t\t\t\t\t\t\tsign *= -1; // invert, since the upper-left corner of the canvas is at pixel (0, 0)\n\t\t\t\t\t\t\tpixel = reverse ? me.top : me.bottom;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value !== start) {\n\t\t\t\t\t\t\tif (start === 0) {\n\t\t\t\t\t\t\t\t// include zero tick\n\t\t\t\t\t\t\t\toffset = helpers.getValueOrDefault(me.options.ticks.fontSize, Chart.defaults.global.defaultFontSize);\n\t\t\t\t\t\t\t\tinnerDimension -= offset;\n\t\t\t\t\t\t\t\tstart = firstTickValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (value !== 0) {\n\t\t\t\t\t\t\t\toffset += innerDimension / (log10(end) - log10(start)) * (log10(value) - log10(start));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpixel += sign * offset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn pixel;\n\t\t\t\t\t},\n\t\t\t\t\tgetValueForPixel: function getValueForPixel(pixel) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar reverse = me.options.ticks.reverse;\n\t\t\t\t\t\tvar log10 = helpers.log10;\n\t\t\t\t\t\tvar firstTickValue = me._getFirstTickValue(me.minNotZero);\n\t\t\t\t\t\tvar innerDimension, start, end, value;\n\n\t\t\t\t\t\tif (reverse) {\n\t\t\t\t\t\t\tstart = me.end;\n\t\t\t\t\t\t\tend = me.start;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstart = me.start;\n\t\t\t\t\t\t\tend = me.end;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (me.isHorizontal()) {\n\t\t\t\t\t\t\tinnerDimension = me.width;\n\t\t\t\t\t\t\tvalue = reverse ? me.right - pixel : pixel - me.left;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tinnerDimension = me.height;\n\t\t\t\t\t\t\tvalue = reverse ? pixel - me.top : me.bottom - pixel;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value !== start) {\n\t\t\t\t\t\t\tif (start === 0) {\n\t\t\t\t\t\t\t\t// include zero tick\n\t\t\t\t\t\t\t\tvar offset = helpers.getValueOrDefault(me.options.ticks.fontSize, Chart.defaults.global.defaultFontSize);\n\t\t\t\t\t\t\t\tvalue -= offset;\n\t\t\t\t\t\t\t\tinnerDimension -= offset;\n\t\t\t\t\t\t\t\tstart = firstTickValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue *= log10(end) - log10(start);\n\t\t\t\t\t\t\tvalue /= innerDimension;\n\t\t\t\t\t\t\tvalue = Math.pow(10, log10(start) + value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tscaleService.registerScaleType('logarithmic', LogarithmicScale, defaultConfig);\n\t\t\t};\n\t\t}, { \"33\": 33, \"34\": 34, \"35\": 35, \"46\": 46 }], 58: [function (require, module, exports) {\n\t\t\t'use strict';\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar helpers = require(46);\n\t\t\tvar scaleService = require(34);\n\t\t\tvar Ticks = require(35);\n\n\t\t\tmodule.exports = function (Chart) {\n\n\t\t\t\tvar globalDefaults = defaults.global;\n\n\t\t\t\tvar defaultConfig = {\n\t\t\t\t\tdisplay: true,\n\n\t\t\t\t\t// Boolean - Whether to animate scaling the chart from the centre\n\t\t\t\t\tanimate: true,\n\t\t\t\t\tposition: 'chartArea',\n\n\t\t\t\t\tangleLines: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\tcolor: 'rgba(0, 0, 0, 0.1)',\n\t\t\t\t\t\tlineWidth: 1\n\t\t\t\t\t},\n\n\t\t\t\t\tgridLines: {\n\t\t\t\t\t\tcircular: false\n\t\t\t\t\t},\n\n\t\t\t\t\t// label settings\n\t\t\t\t\tticks: {\n\t\t\t\t\t\t// Boolean - Show a backdrop to the scale label\n\t\t\t\t\t\tshowLabelBackdrop: true,\n\n\t\t\t\t\t\t// String - The colour of the label backdrop\n\t\t\t\t\t\tbackdropColor: 'rgba(255,255,255,0.75)',\n\n\t\t\t\t\t\t// Number - The backdrop padding above & below the label in pixels\n\t\t\t\t\t\tbackdropPaddingY: 2,\n\n\t\t\t\t\t\t// Number - The backdrop padding to the side of the label in pixels\n\t\t\t\t\t\tbackdropPaddingX: 2,\n\n\t\t\t\t\t\tcallback: Ticks.formatters.linear\n\t\t\t\t\t},\n\n\t\t\t\t\tpointLabels: {\n\t\t\t\t\t\t// Boolean - if true, show point labels\n\t\t\t\t\t\tdisplay: true,\n\n\t\t\t\t\t\t// Number - Point label font size in pixels\n\t\t\t\t\t\tfontSize: 10,\n\n\t\t\t\t\t\t// Function - Used to convert point labels\n\t\t\t\t\t\tcallback: function callback(label) {\n\t\t\t\t\t\t\treturn label;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tfunction getValueCount(scale) {\n\t\t\t\t\tvar opts = scale.options;\n\t\t\t\t\treturn opts.angleLines.display || opts.pointLabels.display ? scale.chart.data.labels.length : 0;\n\t\t\t\t}\n\n\t\t\t\tfunction getPointLabelFontOptions(scale) {\n\t\t\t\t\tvar pointLabelOptions = scale.options.pointLabels;\n\t\t\t\t\tvar fontSize = helpers.valueOrDefault(pointLabelOptions.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\t\tvar fontStyle = helpers.valueOrDefault(pointLabelOptions.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\t\t\tvar fontFamily = helpers.valueOrDefault(pointLabelOptions.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\t\t\tvar font = helpers.fontString(fontSize, fontStyle, fontFamily);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsize: fontSize,\n\t\t\t\t\t\tstyle: fontStyle,\n\t\t\t\t\t\tfamily: fontFamily,\n\t\t\t\t\t\tfont: font\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tfunction measureLabelSize(ctx, fontSize, label) {\n\t\t\t\t\tif (helpers.isArray(label)) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tw: helpers.longestText(ctx, ctx.font, label),\n\t\t\t\t\t\t\th: label.length * fontSize + (label.length - 1) * 1.5 * fontSize\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tw: ctx.measureText(label).width,\n\t\t\t\t\t\th: fontSize\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tfunction determineLimits(angle, pos, size, min, max) {\n\t\t\t\t\tif (angle === min || angle === max) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstart: pos - size / 2,\n\t\t\t\t\t\t\tend: pos + size / 2\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (angle < min || angle > max) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstart: pos - size - 5,\n\t\t\t\t\t\t\tend: pos\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstart: pos,\n\t\t\t\t\t\tend: pos + size + 5\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t/**\r\n * Helper function to fit a radial linear scale with point labels\r\n */\n\t\t\t\tfunction fitWithPointLabels(scale) {\n\t\t\t\t\t/*\r\n * Right, this is really confusing and there is a lot of maths going on here\r\n * The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\r\n *\r\n * Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\r\n *\r\n * Solution:\r\n *\r\n * We assume the radius of the polygon is half the size of the canvas at first\r\n * at each index we check if the text overlaps.\r\n *\r\n * Where it does, we store that angle and that index.\r\n *\r\n * After finding the largest index and angle we calculate how much we need to remove\r\n * from the shape radius to move the point inwards by that x.\r\n *\r\n * We average the left and right distances to get the maximum shape radius that can fit in the box\r\n * along with labels.\r\n *\r\n * Once we have that, we can find the centre point for the chart, by taking the x text protrusion\r\n * on each side, removing that from the size, halving it and adding the left x protrusion width.\r\n *\r\n * This will mean we have a shape fitted to the canvas, as large as it can be with the labels\r\n * and position it in the most space efficient manner\r\n *\r\n * https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\r\n */\n\n\t\t\t\t\tvar plFont = getPointLabelFontOptions(scale);\n\n\t\t\t\t\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n\t\t\t\t\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n\t\t\t\t\tvar largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);\n\t\t\t\t\tvar furthestLimits = {\n\t\t\t\t\t\tr: scale.width,\n\t\t\t\t\t\tl: 0,\n\t\t\t\t\t\tt: scale.height,\n\t\t\t\t\t\tb: 0\n\t\t\t\t\t};\n\t\t\t\t\tvar furthestAngles = {};\n\t\t\t\t\tvar i, textSize, pointPosition;\n\n\t\t\t\t\tscale.ctx.font = plFont.font;\n\t\t\t\t\tscale._pointLabelSizes = [];\n\n\t\t\t\t\tvar valueCount = getValueCount(scale);\n\t\t\t\t\tfor (i = 0; i < valueCount; i++) {\n\t\t\t\t\t\tpointPosition = scale.getPointPosition(i, largestPossibleRadius);\n\t\t\t\t\t\ttextSize = measureLabelSize(scale.ctx, plFont.size, scale.pointLabels[i] || '');\n\t\t\t\t\t\tscale._pointLabelSizes[i] = textSize;\n\n\t\t\t\t\t\t// Add quarter circle to make degree 0 mean top of circle\n\t\t\t\t\t\tvar angleRadians = scale.getIndexAngle(i);\n\t\t\t\t\t\tvar angle = helpers.toDegrees(angleRadians) % 360;\n\t\t\t\t\t\tvar hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n\t\t\t\t\t\tvar vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n\n\t\t\t\t\t\tif (hLimits.start < furthestLimits.l) {\n\t\t\t\t\t\t\tfurthestLimits.l = hLimits.start;\n\t\t\t\t\t\t\tfurthestAngles.l = angleRadians;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (hLimits.end > furthestLimits.r) {\n\t\t\t\t\t\t\tfurthestLimits.r = hLimits.end;\n\t\t\t\t\t\t\tfurthestAngles.r = angleRadians;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (vLimits.start < furthestLimits.t) {\n\t\t\t\t\t\t\tfurthestLimits.t = vLimits.start;\n\t\t\t\t\t\t\tfurthestAngles.t = angleRadians;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (vLimits.end > furthestLimits.b) {\n\t\t\t\t\t\t\tfurthestLimits.b = vLimits.end;\n\t\t\t\t\t\t\tfurthestAngles.b = angleRadians;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tscale.setReductions(largestPossibleRadius, furthestLimits, furthestAngles);\n\t\t\t\t}\n\n\t\t\t\t/**\r\n * Helper function to fit a radial linear scale with no point labels\r\n */\n\t\t\t\tfunction _fit(scale) {\n\t\t\t\t\tvar largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);\n\t\t\t\t\tscale.drawingArea = Math.round(largestPossibleRadius);\n\t\t\t\t\tscale.setCenterPoint(0, 0, 0, 0);\n\t\t\t\t}\n\n\t\t\t\tfunction getTextAlignForAngle(angle) {\n\t\t\t\t\tif (angle === 0 || angle === 180) {\n\t\t\t\t\t\treturn 'center';\n\t\t\t\t\t} else if (angle < 180) {\n\t\t\t\t\t\treturn 'left';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn 'right';\n\t\t\t\t}\n\n\t\t\t\tfunction fillText(ctx, text, position, fontSize) {\n\t\t\t\t\tif (helpers.isArray(text)) {\n\t\t\t\t\t\tvar y = position.y;\n\t\t\t\t\t\tvar spacing = 1.5 * fontSize;\n\n\t\t\t\t\t\tfor (var i = 0; i < text.length; ++i) {\n\t\t\t\t\t\t\tctx.fillText(text[i], position.x, y);\n\t\t\t\t\t\t\ty += spacing;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.fillText(text, position.x, position.y);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction adjustPointPositionForLabelHeight(angle, textSize, position) {\n\t\t\t\t\tif (angle === 90 || angle === 270) {\n\t\t\t\t\t\tposition.y -= textSize.h / 2;\n\t\t\t\t\t} else if (angle > 270 || angle < 90) {\n\t\t\t\t\t\tposition.y -= textSize.h;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction drawPointLabels(scale) {\n\t\t\t\t\tvar ctx = scale.ctx;\n\t\t\t\t\tvar opts = scale.options;\n\t\t\t\t\tvar angleLineOpts = opts.angleLines;\n\t\t\t\t\tvar pointLabelOpts = opts.pointLabels;\n\n\t\t\t\t\tctx.lineWidth = angleLineOpts.lineWidth;\n\t\t\t\t\tctx.strokeStyle = angleLineOpts.color;\n\n\t\t\t\t\tvar outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n\n\t\t\t\t\t// Point Label Font\n\t\t\t\t\tvar plFont = getPointLabelFontOptions(scale);\n\n\t\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\t\tfor (var i = getValueCount(scale) - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (angleLineOpts.display) {\n\t\t\t\t\t\t\tvar outerPosition = scale.getPointPosition(i, outerDistance);\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\tctx.moveTo(scale.xCenter, scale.yCenter);\n\t\t\t\t\t\t\tctx.lineTo(outerPosition.x, outerPosition.y);\n\t\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (pointLabelOpts.display) {\n\t\t\t\t\t\t\t// Extra 3px out for some label spacing\n\t\t\t\t\t\t\tvar pointLabelPosition = scale.getPointPosition(i, outerDistance + 5);\n\n\t\t\t\t\t\t\t// Keep this in loop since we may support array properties here\n\t\t\t\t\t\t\tvar pointLabelFontColor = helpers.valueAtIndexOrDefault(pointLabelOpts.fontColor, i, globalDefaults.defaultFontColor);\n\t\t\t\t\t\t\tctx.font = plFont.font;\n\t\t\t\t\t\t\tctx.fillStyle = pointLabelFontColor;\n\n\t\t\t\t\t\t\tvar angleRadians = scale.getIndexAngle(i);\n\t\t\t\t\t\t\tvar angle = helpers.toDegrees(angleRadians);\n\t\t\t\t\t\t\tctx.textAlign = getTextAlignForAngle(angle);\n\t\t\t\t\t\t\tadjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\n\t\t\t\t\t\t\tfillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.size);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction drawRadiusLine(scale, gridLineOpts, radius, index) {\n\t\t\t\t\tvar ctx = scale.ctx;\n\t\t\t\t\tctx.strokeStyle = helpers.valueAtIndexOrDefault(gridLineOpts.color, index - 1);\n\t\t\t\t\tctx.lineWidth = helpers.valueAtIndexOrDefault(gridLineOpts.lineWidth, index - 1);\n\n\t\t\t\t\tif (scale.options.gridLines.circular) {\n\t\t\t\t\t\t// Draw circular arcs between the points\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\n\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Draw straight lines connecting each index\n\t\t\t\t\t\tvar valueCount = getValueCount(scale);\n\n\t\t\t\t\t\tif (valueCount === 0) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tvar pointPosition = scale.getPointPosition(0, radius);\n\t\t\t\t\t\tctx.moveTo(pointPosition.x, pointPosition.y);\n\n\t\t\t\t\t\tfor (var i = 1; i < valueCount; i++) {\n\t\t\t\t\t\t\tpointPosition = scale.getPointPosition(i, radius);\n\t\t\t\t\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.closePath();\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction numberOrZero(param) {\n\t\t\t\t\treturn helpers.isNumber(param) ? param : 0;\n\t\t\t\t}\n\n\t\t\t\tvar LinearRadialScale = Chart.LinearScaleBase.extend({\n\t\t\t\t\tsetDimensions: function setDimensions() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\t\tvar tickOpts = opts.ticks;\n\t\t\t\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\t\t\t\tme.width = me.maxWidth;\n\t\t\t\t\t\tme.height = me.maxHeight;\n\t\t\t\t\t\tme.xCenter = Math.round(me.width / 2);\n\t\t\t\t\t\tme.yCenter = Math.round(me.height / 2);\n\n\t\t\t\t\t\tvar minSize = helpers.min([me.height, me.width]);\n\t\t\t\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\t\t\tme.drawingArea = opts.display ? minSize / 2 - (tickFontSize / 2 + tickOpts.backdropPaddingY) : minSize / 2;\n\t\t\t\t\t},\n\t\t\t\t\tdetermineDataLimits: function determineDataLimits() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar min = Number.POSITIVE_INFINITY;\n\t\t\t\t\t\tvar max = Number.NEGATIVE_INFINITY;\n\n\t\t\t\t\t\thelpers.each(chart.data.datasets, function (dataset, datasetIndex) {\n\t\t\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex)) {\n\t\t\t\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\n\t\t\t\t\t\t\t\thelpers.each(dataset.data, function (rawValue, index) {\n\t\t\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tmin = Math.min(value, min);\n\t\t\t\t\t\t\t\t\tmax = Math.max(value, max);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tme.min = min === Number.POSITIVE_INFINITY ? 0 : min;\n\t\t\t\t\t\tme.max = max === Number.NEGATIVE_INFINITY ? 0 : max;\n\n\t\t\t\t\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\t\t\t\t\tme.handleTickRangeOptions();\n\t\t\t\t\t},\n\t\t\t\t\tgetTickLimit: function getTickLimit() {\n\t\t\t\t\t\tvar tickOpts = this.options.ticks;\n\t\t\t\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\t\t\treturn Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * tickFontSize)));\n\t\t\t\t\t},\n\t\t\t\t\tconvertTicksToLabels: function convertTicksToLabels() {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\tChart.LinearScaleBase.prototype.convertTicksToLabels.call(me);\n\n\t\t\t\t\t\t// Point labels\n\t\t\t\t\t\tme.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);\n\t\t\t\t\t},\n\t\t\t\t\tgetLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n\t\t\t\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t\t\t\t},\n\t\t\t\t\tfit: function fit() {\n\t\t\t\t\t\tif (this.options.pointLabels.display) {\n\t\t\t\t\t\t\tfitWithPointLabels(this);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_fit(this);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t/**\r\n * Set radius reductions and determine new radius and center point\r\n * @private\r\n */\n\t\t\t\t\tsetReductions: function setReductions(largestPossibleRadius, furthestLimits, furthestAngles) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n\t\t\t\t\t\tvar radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n\t\t\t\t\t\tvar radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n\t\t\t\t\t\tvar radiusReductionBottom = -Math.max(furthestLimits.b - me.height, 0) / Math.cos(furthestAngles.b);\n\n\t\t\t\t\t\tradiusReductionLeft = numberOrZero(radiusReductionLeft);\n\t\t\t\t\t\tradiusReductionRight = numberOrZero(radiusReductionRight);\n\t\t\t\t\t\tradiusReductionTop = numberOrZero(radiusReductionTop);\n\t\t\t\t\t\tradiusReductionBottom = numberOrZero(radiusReductionBottom);\n\n\t\t\t\t\t\tme.drawingArea = Math.min(Math.round(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2), Math.round(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\n\t\t\t\t\t\tme.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n\t\t\t\t\t},\n\t\t\t\t\tsetCenterPoint: function setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar maxRight = me.width - rightMovement - me.drawingArea;\n\t\t\t\t\t\tvar maxLeft = leftMovement + me.drawingArea;\n\t\t\t\t\t\tvar maxTop = topMovement + me.drawingArea;\n\t\t\t\t\t\tvar maxBottom = me.height - bottomMovement - me.drawingArea;\n\n\t\t\t\t\t\tme.xCenter = Math.round((maxLeft + maxRight) / 2 + me.left);\n\t\t\t\t\t\tme.yCenter = Math.round((maxTop + maxBottom) / 2 + me.top);\n\t\t\t\t\t},\n\n\t\t\t\t\tgetIndexAngle: function getIndexAngle(index) {\n\t\t\t\t\t\tvar angleMultiplier = Math.PI * 2 / getValueCount(this);\n\t\t\t\t\t\tvar startAngle = this.chart.options && this.chart.options.startAngle ? this.chart.options.startAngle : 0;\n\n\t\t\t\t\t\tvar startAngleRadians = startAngle * Math.PI * 2 / 360;\n\n\t\t\t\t\t\t// Start from the top instead of right, so remove a quarter of the circle\n\t\t\t\t\t\treturn index * angleMultiplier + startAngleRadians;\n\t\t\t\t\t},\n\t\t\t\t\tgetDistanceFromCenterForValue: function getDistanceFromCenterForValue(value) {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\tif (value === null) {\n\t\t\t\t\t\t\treturn 0; // null always in center\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Take into account half font size + the yPadding of the top value\n\t\t\t\t\t\tvar scalingFactor = me.drawingArea / (me.max - me.min);\n\t\t\t\t\t\tif (me.options.ticks.reverse) {\n\t\t\t\t\t\t\treturn (me.max - value) * scalingFactor;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn (value - me.min) * scalingFactor;\n\t\t\t\t\t},\n\t\t\t\t\tgetPointPosition: function getPointPosition(index, distanceFromCenter) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar thisAngle = me.getIndexAngle(index) - Math.PI / 2;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tx: Math.round(Math.cos(thisAngle) * distanceFromCenter) + me.xCenter,\n\t\t\t\t\t\t\ty: Math.round(Math.sin(thisAngle) * distanceFromCenter) + me.yCenter\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t\tgetPointPositionForValue: function getPointPositionForValue(index, value) {\n\t\t\t\t\t\treturn this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n\t\t\t\t\t},\n\n\t\t\t\t\tgetBasePosition: function getBasePosition() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar min = me.min;\n\t\t\t\t\t\tvar max = me.max;\n\n\t\t\t\t\t\treturn me.getPointPositionForValue(0, me.beginAtZero ? 0 : min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0);\n\t\t\t\t\t},\n\n\t\t\t\t\tdraw: function draw() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar opts = me.options;\n\t\t\t\t\t\tvar gridLineOpts = opts.gridLines;\n\t\t\t\t\t\tvar tickOpts = opts.ticks;\n\t\t\t\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\n\t\t\t\t\t\tif (opts.display) {\n\t\t\t\t\t\t\tvar ctx = me.ctx;\n\t\t\t\t\t\t\tvar startAngle = this.getIndexAngle(0);\n\n\t\t\t\t\t\t\t// Tick Font\n\t\t\t\t\t\t\tvar tickFontSize = valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\t\t\t\tvar tickFontStyle = valueOrDefault(tickOpts.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\t\t\t\t\tvar tickFontFamily = valueOrDefault(tickOpts.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\t\t\t\t\tvar tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);\n\n\t\t\t\t\t\t\thelpers.each(me.ticks, function (label, index) {\n\t\t\t\t\t\t\t\t// Don't draw a centre value (if it is minimum)\n\t\t\t\t\t\t\t\tif (index > 0 || tickOpts.reverse) {\n\t\t\t\t\t\t\t\t\tvar yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\n\n\t\t\t\t\t\t\t\t\t// Draw circular lines around the scale\n\t\t\t\t\t\t\t\t\tif (gridLineOpts.display && index !== 0) {\n\t\t\t\t\t\t\t\t\t\tdrawRadiusLine(me, gridLineOpts, yCenterOffset, index);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (tickOpts.display) {\n\t\t\t\t\t\t\t\t\t\tvar tickFontColor = valueOrDefault(tickOpts.fontColor, globalDefaults.defaultFontColor);\n\t\t\t\t\t\t\t\t\t\tctx.font = tickLabelFont;\n\n\t\t\t\t\t\t\t\t\t\tctx.save();\n\t\t\t\t\t\t\t\t\t\tctx.translate(me.xCenter, me.yCenter);\n\t\t\t\t\t\t\t\t\t\tctx.rotate(startAngle);\n\n\t\t\t\t\t\t\t\t\t\tif (tickOpts.showLabelBackdrop) {\n\t\t\t\t\t\t\t\t\t\t\tvar labelWidth = ctx.measureText(label).width;\n\t\t\t\t\t\t\t\t\t\t\tctx.fillStyle = tickOpts.backdropColor;\n\t\t\t\t\t\t\t\t\t\t\tctx.fillRect(-labelWidth / 2 - tickOpts.backdropPaddingX, -yCenterOffset - tickFontSize / 2 - tickOpts.backdropPaddingY, labelWidth + tickOpts.backdropPaddingX * 2, tickFontSize + tickOpts.backdropPaddingY * 2);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\t\t\t\t\t\t\tctx.fillStyle = tickFontColor;\n\t\t\t\t\t\t\t\t\t\tctx.fillText(label, 0, -yCenterOffset);\n\t\t\t\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (opts.angleLines.display || opts.pointLabels.display) {\n\t\t\t\t\t\t\t\tdrawPointLabels(me);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tscaleService.registerScaleType('radialLinear', LinearRadialScale, defaultConfig);\n\t\t\t};\n\t\t}, { \"26\": 26, \"34\": 34, \"35\": 35, \"46\": 46 }], 59: [function (require, module, exports) {\n\t\t\t/* global window: false */\n\t\t\t'use strict';\n\n\t\t\tvar moment = require(1);\n\t\t\tmoment = typeof moment === 'function' ? moment : window.moment;\n\n\t\t\tvar defaults = require(26);\n\t\t\tvar helpers = require(46);\n\t\t\tvar Scale = require(33);\n\t\t\tvar scaleService = require(34);\n\n\t\t\t// Integer constants are from the ES6 spec.\n\t\t\tvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n\t\t\tvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\n\t\t\tvar INTERVALS = {\n\t\t\t\tmillisecond: {\n\t\t\t\t\tcommon: true,\n\t\t\t\t\tsize: 1,\n\t\t\t\t\tsteps: [1, 2, 5, 10, 20, 50, 100, 250, 500]\n\t\t\t\t},\n\t\t\t\tsecond: {\n\t\t\t\t\tcommon: true,\n\t\t\t\t\tsize: 1000,\n\t\t\t\t\tsteps: [1, 2, 5, 10, 15, 30]\n\t\t\t\t},\n\t\t\t\tminute: {\n\t\t\t\t\tcommon: true,\n\t\t\t\t\tsize: 60000,\n\t\t\t\t\tsteps: [1, 2, 5, 10, 15, 30]\n\t\t\t\t},\n\t\t\t\thour: {\n\t\t\t\t\tcommon: true,\n\t\t\t\t\tsize: 3600000,\n\t\t\t\t\tsteps: [1, 2, 3, 6, 12]\n\t\t\t\t},\n\t\t\t\tday: {\n\t\t\t\t\tcommon: true,\n\t\t\t\t\tsize: 86400000,\n\t\t\t\t\tsteps: [1, 2, 5]\n\t\t\t\t},\n\t\t\t\tweek: {\n\t\t\t\t\tcommon: false,\n\t\t\t\t\tsize: 604800000,\n\t\t\t\t\tsteps: [1, 2, 3, 4]\n\t\t\t\t},\n\t\t\t\tmonth: {\n\t\t\t\t\tcommon: true,\n\t\t\t\t\tsize: 2.628e9,\n\t\t\t\t\tsteps: [1, 2, 3]\n\t\t\t\t},\n\t\t\t\tquarter: {\n\t\t\t\t\tcommon: false,\n\t\t\t\t\tsize: 7.884e9,\n\t\t\t\t\tsteps: [1, 2, 3, 4]\n\t\t\t\t},\n\t\t\t\tyear: {\n\t\t\t\t\tcommon: true,\n\t\t\t\t\tsize: 3.154e10\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar UNITS = Object.keys(INTERVALS);\n\n\t\t\tfunction sorter(a, b) {\n\t\t\t\treturn a - b;\n\t\t\t}\n\n\t\t\tfunction arrayUnique(items) {\n\t\t\t\tvar hash = {};\n\t\t\t\tvar out = [];\n\t\t\t\tvar i, ilen, item;\n\n\t\t\t\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\n\t\t\t\t\titem = items[i];\n\t\t\t\t\tif (!hash[item]) {\n\t\t\t\t\t\thash[item] = true;\n\t\t\t\t\t\tout.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn out;\n\t\t\t}\n\n\t\t\t/**\r\n * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\r\n * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\r\n * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\r\n * extremity (left + width or top + height). Note that it would be more optimized to directly\r\n * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\r\n * to create the lookup table. The table ALWAYS contains at least two items: min and max.\r\n *\r\n * @param {Number[]} timestamps - timestamps sorted from lowest to highest.\r\n * @param {String} distribution - If 'linear', timestamps will be spread linearly along the min\r\n * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\r\n * If 'series', timestamps will be positioned at the same distance from each other. In this\r\n * case, only timestamps that break the time linearity are registered, meaning that in the\r\n * best case, all timestamps are linear, the table contains only min and max.\r\n */\n\t\t\tfunction buildLookupTable(timestamps, min, max, distribution) {\n\t\t\t\tif (distribution === 'linear' || !timestamps.length) {\n\t\t\t\t\treturn [{ time: min, pos: 0 }, { time: max, pos: 1 }];\n\t\t\t\t}\n\n\t\t\t\tvar table = [];\n\t\t\t\tvar items = [min];\n\t\t\t\tvar i, ilen, prev, curr, next;\n\n\t\t\t\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n\t\t\t\t\tcurr = timestamps[i];\n\t\t\t\t\tif (curr > min && curr < max) {\n\t\t\t\t\t\titems.push(curr);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titems.push(max);\n\n\t\t\t\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\n\t\t\t\t\tnext = items[i + 1];\n\t\t\t\t\tprev = items[i - 1];\n\t\t\t\t\tcurr = items[i];\n\n\t\t\t\t\t// only add points that breaks the scale linearity\n\t\t\t\t\tif (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\n\t\t\t\t\t\ttable.push({ time: curr, pos: i / (ilen - 1) });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn table;\n\t\t\t}\n\n\t\t\t// @see adapted from http://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\n\t\t\tfunction lookup(table, key, value) {\n\t\t\t\tvar lo = 0;\n\t\t\t\tvar hi = table.length - 1;\n\t\t\t\tvar mid, i0, i1;\n\n\t\t\t\twhile (lo >= 0 && lo <= hi) {\n\t\t\t\t\tmid = lo + hi >> 1;\n\t\t\t\t\ti0 = table[mid - 1] || null;\n\t\t\t\t\ti1 = table[mid];\n\n\t\t\t\t\tif (!i0) {\n\t\t\t\t\t\t// given value is outside table (before first item)\n\t\t\t\t\t\treturn { lo: null, hi: i1 };\n\t\t\t\t\t} else if (i1[key] < value) {\n\t\t\t\t\t\tlo = mid + 1;\n\t\t\t\t\t} else if (i0[key] > value) {\n\t\t\t\t\t\thi = mid - 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn { lo: i0, hi: i1 };\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// given value is outside table (after last item)\n\t\t\t\treturn { lo: i1, hi: null };\n\t\t\t}\n\n\t\t\t/**\r\n * Linearly interpolates the given source `value` using the table items `skey` values and\r\n * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\r\n * returns the position for a timestamp equal to 42. If value is out of bounds, values at\r\n * index [0, 1] or [n - 1, n] are used for the interpolation.\r\n */\n\t\t\tfunction interpolate(table, skey, sval, tkey) {\n\t\t\t\tvar range = lookup(table, skey, sval);\n\n\t\t\t\t// Note: the lookup table ALWAYS contains at least 2 items (min and max)\n\t\t\t\tvar prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\n\t\t\t\tvar next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\n\n\t\t\t\tvar span = next[skey] - prev[skey];\n\t\t\t\tvar ratio = span ? (sval - prev[skey]) / span : 0;\n\t\t\t\tvar offset = (next[tkey] - prev[tkey]) * ratio;\n\n\t\t\t\treturn prev[tkey] + offset;\n\t\t\t}\n\n\t\t\t/**\r\n * Convert the given value to a moment object using the given time options.\r\n * @see http://momentjs.com/docs/#/parsing/\r\n */\n\t\t\tfunction momentify(value, options) {\n\t\t\t\tvar parser = options.parser;\n\t\t\t\tvar format = options.parser || options.format;\n\n\t\t\t\tif (typeof parser === 'function') {\n\t\t\t\t\treturn parser(value);\n\t\t\t\t}\n\n\t\t\t\tif (typeof value === 'string' && typeof format === 'string') {\n\t\t\t\t\treturn moment(value, format);\n\t\t\t\t}\n\n\t\t\t\tif (!(value instanceof moment)) {\n\t\t\t\t\tvalue = moment(value);\n\t\t\t\t}\n\n\t\t\t\tif (value.isValid()) {\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\t// Labels are in an incompatible moment format and no `parser` has been provided.\n\t\t\t\t// The user might still use the deprecated `format` option to convert his inputs.\n\t\t\t\tif (typeof format === 'function') {\n\t\t\t\t\treturn format(value);\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tfunction parse(input, scale) {\n\t\t\t\tif (helpers.isNullOrUndef(input)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tvar options = scale.options.time;\n\t\t\t\tvar value = momentify(scale.getRightValue(input), options);\n\t\t\t\tif (!value.isValid()) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (options.round) {\n\t\t\t\t\tvalue.startOf(options.round);\n\t\t\t\t}\n\n\t\t\t\treturn value.valueOf();\n\t\t\t}\n\n\t\t\t/**\r\n * Returns the number of unit to skip to be able to display up to `capacity` number of ticks\r\n * in `unit` for the given `min` / `max` range and respecting the interval steps constraints.\r\n */\n\t\t\tfunction determineStepSize(min, max, unit, capacity) {\n\t\t\t\tvar range = max - min;\n\t\t\t\tvar interval = INTERVALS[unit];\n\t\t\t\tvar milliseconds = interval.size;\n\t\t\t\tvar steps = interval.steps;\n\t\t\t\tvar i, ilen, factor;\n\n\t\t\t\tif (!steps) {\n\t\t\t\t\treturn Math.ceil(range / (capacity * milliseconds));\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0, ilen = steps.length; i < ilen; ++i) {\n\t\t\t\t\tfactor = steps[i];\n\t\t\t\t\tif (Math.ceil(range / (milliseconds * factor)) <= capacity) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn factor;\n\t\t\t}\n\n\t\t\t/**\r\n * Figures out what unit results in an appropriate number of auto-generated ticks\r\n */\n\t\t\tfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n\t\t\t\tvar ilen = UNITS.length;\n\t\t\t\tvar i, interval, factor;\n\n\t\t\t\tfor (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n\t\t\t\t\tinterval = INTERVALS[UNITS[i]];\n\t\t\t\t\tfactor = interval.steps ? interval.steps[interval.steps.length - 1] : MAX_INTEGER;\n\n\t\t\t\t\tif (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n\t\t\t\t\t\treturn UNITS[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn UNITS[ilen - 1];\n\t\t\t}\n\n\t\t\t/**\r\n * Figures out what unit to format a set of ticks with\r\n */\n\t\t\tfunction determineUnitForFormatting(ticks, minUnit, min, max) {\n\t\t\t\tvar duration = moment.duration(moment(max).diff(moment(min)));\n\t\t\t\tvar ilen = UNITS.length;\n\t\t\t\tvar i, unit;\n\n\t\t\t\tfor (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) {\n\t\t\t\t\tunit = UNITS[i];\n\t\t\t\t\tif (INTERVALS[unit].common && duration.as(unit) >= ticks.length) {\n\t\t\t\t\t\treturn unit;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n\t\t\t}\n\n\t\t\tfunction determineMajorUnit(unit) {\n\t\t\t\tfor (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n\t\t\t\t\tif (INTERVALS[UNITS[i]].common) {\n\t\t\t\t\t\treturn UNITS[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\r\n * Generates a maximum of `capacity` timestamps between min and max, rounded to the\r\n * `minor` unit, aligned on the `major` unit and using the given scale time `options`.\r\n * Important: this method can return ticks outside the min and max range, it's the\r\n * responsibility of the calling code to clamp values if needed.\r\n */\n\t\t\tfunction generate(min, max, capacity, options) {\n\t\t\t\tvar timeOpts = options.time;\n\t\t\t\tvar minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\n\t\t\t\tvar major = determineMajorUnit(minor);\n\t\t\t\tvar stepSize = helpers.valueOrDefault(timeOpts.stepSize, timeOpts.unitStepSize);\n\t\t\t\tvar weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n\t\t\t\tvar majorTicksEnabled = options.ticks.major.enabled;\n\t\t\t\tvar interval = INTERVALS[minor];\n\t\t\t\tvar first = moment(min);\n\t\t\t\tvar last = moment(max);\n\t\t\t\tvar ticks = [];\n\t\t\t\tvar time;\n\n\t\t\t\tif (!stepSize) {\n\t\t\t\t\tstepSize = determineStepSize(min, max, minor, capacity);\n\t\t\t\t}\n\n\t\t\t\t// For 'week' unit, handle the first day of week option\n\t\t\t\tif (weekday) {\n\t\t\t\t\tfirst = first.isoWeekday(weekday);\n\t\t\t\t\tlast = last.isoWeekday(weekday);\n\t\t\t\t}\n\n\t\t\t\t// Align first/last ticks on unit\n\t\t\t\tfirst = first.startOf(weekday ? 'day' : minor);\n\t\t\t\tlast = last.startOf(weekday ? 'day' : minor);\n\n\t\t\t\t// Make sure that the last tick include max\n\t\t\t\tif (last < max) {\n\t\t\t\t\tlast.add(1, minor);\n\t\t\t\t}\n\n\t\t\t\ttime = moment(first);\n\n\t\t\t\tif (majorTicksEnabled && major && !weekday && !timeOpts.round) {\n\t\t\t\t\t// Align the first tick on the previous `minor` unit aligned on the `major` unit:\n\t\t\t\t\t// we first aligned time on the previous `major` unit then add the number of full\n\t\t\t\t\t// stepSize there is between first and the previous major time.\n\t\t\t\t\ttime.startOf(major);\n\t\t\t\t\ttime.add(~~((first - time) / (interval.size * stepSize)) * stepSize, minor);\n\t\t\t\t}\n\n\t\t\t\tfor (; time < last; time.add(stepSize, minor)) {\n\t\t\t\t\tticks.push(+time);\n\t\t\t\t}\n\n\t\t\t\tticks.push(+time);\n\n\t\t\t\treturn ticks;\n\t\t\t}\n\n\t\t\t/**\r\n * Returns the right and left offsets from edges in the form of {left, right}.\r\n * Offsets are added when the `offset` option is true.\r\n */\n\t\t\tfunction computeOffsets(table, ticks, min, max, options) {\n\t\t\t\tvar left = 0;\n\t\t\t\tvar right = 0;\n\t\t\t\tvar upper, lower;\n\n\t\t\t\tif (options.offset && ticks.length) {\n\t\t\t\t\tif (!options.time.min) {\n\t\t\t\t\t\tupper = ticks.length > 1 ? ticks[1] : max;\n\t\t\t\t\t\tlower = ticks[0];\n\t\t\t\t\t\tleft = (interpolate(table, 'time', upper, 'pos') - interpolate(table, 'time', lower, 'pos')) / 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (!options.time.max) {\n\t\t\t\t\t\tupper = ticks[ticks.length - 1];\n\t\t\t\t\t\tlower = ticks.length > 1 ? ticks[ticks.length - 2] : min;\n\t\t\t\t\t\tright = (interpolate(table, 'time', upper, 'pos') - interpolate(table, 'time', lower, 'pos')) / 2;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn { left: left, right: right };\n\t\t\t}\n\n\t\t\tfunction ticksFromTimestamps(values, majorUnit) {\n\t\t\t\tvar ticks = [];\n\t\t\t\tvar i, ilen, value, major;\n\n\t\t\t\tfor (i = 0, ilen = values.length; i < ilen; ++i) {\n\t\t\t\t\tvalue = values[i];\n\t\t\t\t\tmajor = majorUnit ? value === +moment(value).startOf(majorUnit) : false;\n\n\t\t\t\t\tticks.push({\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tmajor: major\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn ticks;\n\t\t\t}\n\n\t\t\tfunction determineLabelFormat(data, timeOpts) {\n\t\t\t\tvar i, momentDate, hasTime;\n\t\t\t\tvar ilen = data.length;\n\n\t\t\t\t// find the label with the most parts (milliseconds, minutes, etc.)\n\t\t\t\t// format all labels with the same level of detail as the most specific label\n\t\t\t\tfor (i = 0; i < ilen; i++) {\n\t\t\t\t\tmomentDate = momentify(data[i], timeOpts);\n\t\t\t\t\tif (momentDate.millisecond() !== 0) {\n\t\t\t\t\t\treturn 'MMM D, YYYY h:mm:ss.SSS a';\n\t\t\t\t\t}\n\t\t\t\t\tif (momentDate.second() !== 0 || momentDate.minute() !== 0 || momentDate.hour() !== 0) {\n\t\t\t\t\t\thasTime = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (hasTime) {\n\t\t\t\t\treturn 'MMM D, YYYY h:mm:ss a';\n\t\t\t\t}\n\t\t\t\treturn 'MMM D, YYYY';\n\t\t\t}\n\n\t\t\tmodule.exports = function () {\n\n\t\t\t\tvar defaultConfig = {\n\t\t\t\t\tposition: 'bottom',\n\n\t\t\t\t\t/**\r\n * Data distribution along the scale:\r\n * - 'linear': data are spread according to their time (distances can vary),\r\n * - 'series': data are spread at the same distance from each other.\r\n * @see https://github.com/chartjs/Chart.js/pull/4507\r\n * @since 2.7.0\r\n */\n\t\t\t\t\tdistribution: 'linear',\n\n\t\t\t\t\t/**\r\n * Scale boundary strategy (bypassed by min/max time options)\r\n * - `data`: make sure data are fully visible, ticks outside are removed\r\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\r\n * @see https://github.com/chartjs/Chart.js/pull/4556\r\n * @since 2.7.0\r\n */\n\t\t\t\t\tbounds: 'data',\n\n\t\t\t\t\ttime: {\n\t\t\t\t\t\tparser: false, // false == a pattern string from http://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\n\t\t\t\t\t\tformat: false, // DEPRECATED false == date objects, moment object, callback or a pattern string from http://momentjs.com/docs/#/parsing/string-format/\n\t\t\t\t\t\tunit: false, // false == automatic or override with week, month, year, etc.\n\t\t\t\t\t\tround: false, // none, or override with week, month, year, etc.\n\t\t\t\t\t\tdisplayFormat: false, // DEPRECATED\n\t\t\t\t\t\tisoWeekday: false, // override week start day - see http://momentjs.com/docs/#/get-set/iso-weekday/\n\t\t\t\t\t\tminUnit: 'millisecond',\n\n\t\t\t\t\t\t// defaults to unit's corresponding unitFormat below or override using pattern string from http://momentjs.com/docs/#/displaying/format/\n\t\t\t\t\t\tdisplayFormats: {\n\t\t\t\t\t\t\tmillisecond: 'h:mm:ss.SSS a', // 11:20:01.123 AM,\n\t\t\t\t\t\t\tsecond: 'h:mm:ss a', // 11:20:01 AM\n\t\t\t\t\t\t\tminute: 'h:mm a', // 11:20 AM\n\t\t\t\t\t\t\thour: 'hA', // 5PM\n\t\t\t\t\t\t\tday: 'MMM D', // Sep 4\n\t\t\t\t\t\t\tweek: 'll', // Week 46, or maybe \"[W]WW - YYYY\" ?\n\t\t\t\t\t\t\tmonth: 'MMM YYYY', // Sept 2015\n\t\t\t\t\t\t\tquarter: '[Q]Q - YYYY', // Q3\n\t\t\t\t\t\t\tyear: 'YYYY' // 2015\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tticks: {\n\t\t\t\t\t\tautoSkip: false,\n\n\t\t\t\t\t\t/**\r\n * Ticks generation input values:\r\n * - 'auto': generates \"optimal\" ticks based on scale size and time options.\r\n * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\r\n * - 'labels': generates ticks from user given `data.labels` values ONLY.\r\n * @see https://github.com/chartjs/Chart.js/pull/4507\r\n * @since 2.7.0\r\n */\n\t\t\t\t\t\tsource: 'auto',\n\n\t\t\t\t\t\tmajor: {\n\t\t\t\t\t\t\tenabled: false\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar TimeScale = Scale.extend({\n\t\t\t\t\tinitialize: function initialize() {\n\t\t\t\t\t\tif (!moment) {\n\t\t\t\t\t\t\tthrow new Error('Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.mergeTicksOptions();\n\n\t\t\t\t\t\tScale.prototype.initialize.call(this);\n\t\t\t\t\t},\n\n\t\t\t\t\tupdate: function update() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar options = me.options;\n\n\t\t\t\t\t\t// DEPRECATIONS: output a message only one time per update\n\t\t\t\t\t\tif (options.time && options.time.format) {\n\t\t\t\t\t\t\tconsole.warn('options.time.format is deprecated and replaced by options.time.parser.');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn Scale.prototype.update.apply(me, arguments);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Allows data to be referenced via 't' attribute\r\n */\n\t\t\t\t\tgetRightValue: function getRightValue(rawValue) {\n\t\t\t\t\t\tif (rawValue && rawValue.t !== undefined) {\n\t\t\t\t\t\t\trawValue = rawValue.t;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn Scale.prototype.getRightValue.call(this, rawValue);\n\t\t\t\t\t},\n\n\t\t\t\t\tdetermineDataLimits: function determineDataLimits() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar chart = me.chart;\n\t\t\t\t\t\tvar timeOpts = me.options.time;\n\t\t\t\t\t\tvar unit = timeOpts.unit || 'day';\n\t\t\t\t\t\tvar min = MAX_INTEGER;\n\t\t\t\t\t\tvar max = MIN_INTEGER;\n\t\t\t\t\t\tvar timestamps = [];\n\t\t\t\t\t\tvar datasets = [];\n\t\t\t\t\t\tvar labels = [];\n\t\t\t\t\t\tvar i, j, ilen, jlen, data, timestamp;\n\n\t\t\t\t\t\t// Convert labels to timestamps\n\t\t\t\t\t\tfor (i = 0, ilen = chart.data.labels.length; i < ilen; ++i) {\n\t\t\t\t\t\t\tlabels.push(parse(chart.data.labels[i], me));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Convert data to timestamps\n\t\t\t\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\t\t\t\tif (chart.isDatasetVisible(i)) {\n\t\t\t\t\t\t\t\tdata = chart.data.datasets[i].data;\n\n\t\t\t\t\t\t\t\t// Let's consider that all data have the same format.\n\t\t\t\t\t\t\t\tif (helpers.isObject(data[0])) {\n\t\t\t\t\t\t\t\t\tdatasets[i] = [];\n\n\t\t\t\t\t\t\t\t\tfor (j = 0, jlen = data.length; j < jlen; ++j) {\n\t\t\t\t\t\t\t\t\t\ttimestamp = parse(data[j], me);\n\t\t\t\t\t\t\t\t\t\ttimestamps.push(timestamp);\n\t\t\t\t\t\t\t\t\t\tdatasets[i][j] = timestamp;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttimestamps.push.apply(timestamps, labels);\n\t\t\t\t\t\t\t\t\tdatasets[i] = labels.slice(0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdatasets[i] = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (labels.length) {\n\t\t\t\t\t\t\t// Sort labels **after** data have been converted\n\t\t\t\t\t\t\tlabels = arrayUnique(labels).sort(sorter);\n\t\t\t\t\t\t\tmin = Math.min(min, labels[0]);\n\t\t\t\t\t\t\tmax = Math.max(max, labels[labels.length - 1]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (timestamps.length) {\n\t\t\t\t\t\t\ttimestamps = arrayUnique(timestamps).sort(sorter);\n\t\t\t\t\t\t\tmin = Math.min(min, timestamps[0]);\n\t\t\t\t\t\t\tmax = Math.max(max, timestamps[timestamps.length - 1]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmin = parse(timeOpts.min, me) || min;\n\t\t\t\t\t\tmax = parse(timeOpts.max, me) || max;\n\n\t\t\t\t\t\t// In case there is no valid min/max, set limits based on unit time option\n\t\t\t\t\t\tmin = min === MAX_INTEGER ? +moment().startOf(unit) : min;\n\t\t\t\t\t\tmax = max === MIN_INTEGER ? +moment().endOf(unit) + 1 : max;\n\n\t\t\t\t\t\t// Make sure that max is strictly higher than min (required by the lookup table)\n\t\t\t\t\t\tme.min = Math.min(min, max);\n\t\t\t\t\t\tme.max = Math.max(min + 1, max);\n\n\t\t\t\t\t\t// PRIVATE\n\t\t\t\t\t\tme._horizontal = me.isHorizontal();\n\t\t\t\t\t\tme._table = [];\n\t\t\t\t\t\tme._timestamps = {\n\t\t\t\t\t\t\tdata: timestamps,\n\t\t\t\t\t\t\tdatasets: datasets,\n\t\t\t\t\t\t\tlabels: labels\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\n\t\t\t\t\tbuildTicks: function buildTicks() {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar min = me.min;\n\t\t\t\t\t\tvar max = me.max;\n\t\t\t\t\t\tvar options = me.options;\n\t\t\t\t\t\tvar timeOpts = options.time;\n\t\t\t\t\t\tvar timestamps = [];\n\t\t\t\t\t\tvar ticks = [];\n\t\t\t\t\t\tvar i, ilen, timestamp;\n\n\t\t\t\t\t\tswitch (options.ticks.source) {\n\t\t\t\t\t\t\tcase 'data':\n\t\t\t\t\t\t\t\ttimestamps = me._timestamps.data;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'labels':\n\t\t\t\t\t\t\t\ttimestamps = me._timestamps.labels;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'auto':\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\ttimestamps = generate(min, max, me.getLabelCapacity(min), options);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.bounds === 'ticks' && timestamps.length) {\n\t\t\t\t\t\t\tmin = timestamps[0];\n\t\t\t\t\t\t\tmax = timestamps[timestamps.length - 1];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Enforce limits with user min/max options\n\t\t\t\t\t\tmin = parse(timeOpts.min, me) || min;\n\t\t\t\t\t\tmax = parse(timeOpts.max, me) || max;\n\n\t\t\t\t\t\t// Remove ticks outside the min/max range\n\t\t\t\t\t\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n\t\t\t\t\t\t\ttimestamp = timestamps[i];\n\t\t\t\t\t\t\tif (timestamp >= min && timestamp <= max) {\n\t\t\t\t\t\t\t\tticks.push(timestamp);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tme.min = min;\n\t\t\t\t\t\tme.max = max;\n\n\t\t\t\t\t\t// PRIVATE\n\t\t\t\t\t\tme._unit = timeOpts.unit || determineUnitForFormatting(ticks, timeOpts.minUnit, me.min, me.max);\n\t\t\t\t\t\tme._majorUnit = determineMajorUnit(me._unit);\n\t\t\t\t\t\tme._table = buildLookupTable(me._timestamps.data, min, max, options.distribution);\n\t\t\t\t\t\tme._offsets = computeOffsets(me._table, ticks, min, max, options);\n\t\t\t\t\t\tme._labelFormat = determineLabelFormat(me._timestamps.data, timeOpts);\n\n\t\t\t\t\t\treturn ticksFromTimestamps(ticks, me._majorUnit);\n\t\t\t\t\t},\n\n\t\t\t\t\tgetLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar data = me.chart.data;\n\t\t\t\t\t\tvar timeOpts = me.options.time;\n\t\t\t\t\t\tvar label = data.labels && index < data.labels.length ? data.labels[index] : '';\n\t\t\t\t\t\tvar value = data.datasets[datasetIndex].data[index];\n\n\t\t\t\t\t\tif (helpers.isObject(value)) {\n\t\t\t\t\t\t\tlabel = me.getRightValue(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (timeOpts.tooltipFormat) {\n\t\t\t\t\t\t\treturn momentify(label, timeOpts).format(timeOpts.tooltipFormat);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof label === 'string') {\n\t\t\t\t\t\t\treturn label;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn momentify(label, timeOpts).format(me._labelFormat);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Function to format an individual tick mark\r\n * @private\r\n */\n\t\t\t\t\ttickFormatFunction: function tickFormatFunction(tick, index, ticks, formatOverride) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar options = me.options;\n\t\t\t\t\t\tvar time = tick.valueOf();\n\t\t\t\t\t\tvar formats = options.time.displayFormats;\n\t\t\t\t\t\tvar minorFormat = formats[me._unit];\n\t\t\t\t\t\tvar majorUnit = me._majorUnit;\n\t\t\t\t\t\tvar majorFormat = formats[majorUnit];\n\t\t\t\t\t\tvar majorTime = tick.clone().startOf(majorUnit).valueOf();\n\t\t\t\t\t\tvar majorTickOpts = options.ticks.major;\n\t\t\t\t\t\tvar major = majorTickOpts.enabled && majorUnit && majorFormat && time === majorTime;\n\t\t\t\t\t\tvar label = tick.format(formatOverride ? formatOverride : major ? majorFormat : minorFormat);\n\t\t\t\t\t\tvar tickOpts = major ? majorTickOpts : options.ticks.minor;\n\t\t\t\t\t\tvar formatter = helpers.valueOrDefault(tickOpts.callback, tickOpts.userCallback);\n\n\t\t\t\t\t\treturn formatter ? formatter(label, index, ticks) : label;\n\t\t\t\t\t},\n\n\t\t\t\t\tconvertTicksToLabels: function convertTicksToLabels(ticks) {\n\t\t\t\t\t\tvar labels = [];\n\t\t\t\t\t\tvar i, ilen;\n\n\t\t\t\t\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\t\t\t\t\t\tlabels.push(this.tickFormatFunction(moment(ticks[i].value), i, ticks));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn labels;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tgetPixelForOffset: function getPixelForOffset(time) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar size = me._horizontal ? me.width : me.height;\n\t\t\t\t\t\tvar start = me._horizontal ? me.left : me.top;\n\t\t\t\t\t\tvar pos = interpolate(me._table, 'time', time, 'pos');\n\n\t\t\t\t\t\treturn start + size * (me._offsets.left + pos) / (me._offsets.left + 1 + me._offsets.right);\n\t\t\t\t\t},\n\n\t\t\t\t\tgetPixelForValue: function getPixelForValue(value, index, datasetIndex) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar time = null;\n\n\t\t\t\t\t\tif (index !== undefined && datasetIndex !== undefined) {\n\t\t\t\t\t\t\ttime = me._timestamps.datasets[datasetIndex][index];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (time === null) {\n\t\t\t\t\t\t\ttime = parse(value, me);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (time !== null) {\n\t\t\t\t\t\t\treturn me.getPixelForOffset(time);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\tgetPixelForTick: function getPixelForTick(index) {\n\t\t\t\t\t\tvar ticks = this.getTicks();\n\t\t\t\t\t\treturn index >= 0 && index < ticks.length ? this.getPixelForOffset(ticks[index].value) : null;\n\t\t\t\t\t},\n\n\t\t\t\t\tgetValueForPixel: function getValueForPixel(pixel) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar size = me._horizontal ? me.width : me.height;\n\t\t\t\t\t\tvar start = me._horizontal ? me.left : me.top;\n\t\t\t\t\t\tvar pos = (size ? (pixel - start) / size : 0) * (me._offsets.left + 1 + me._offsets.left) - me._offsets.right;\n\t\t\t\t\t\tvar time = interpolate(me._table, 'pos', pos, 'time');\n\n\t\t\t\t\t\treturn moment(time);\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * Crude approximation of what the label width might be\r\n * @private\r\n */\n\t\t\t\t\tgetLabelWidth: function getLabelWidth(label) {\n\t\t\t\t\t\tvar me = this;\n\t\t\t\t\t\tvar ticksOpts = me.options.ticks;\n\t\t\t\t\t\tvar tickLabelWidth = me.ctx.measureText(label).width;\n\t\t\t\t\t\tvar angle = helpers.toRadians(ticksOpts.maxRotation);\n\t\t\t\t\t\tvar cosRotation = Math.cos(angle);\n\t\t\t\t\t\tvar sinRotation = Math.sin(angle);\n\t\t\t\t\t\tvar tickFontSize = helpers.valueOrDefault(ticksOpts.fontSize, defaults.global.defaultFontSize);\n\n\t\t\t\t\t\treturn tickLabelWidth * cosRotation + tickFontSize * sinRotation;\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\r\n * @private\r\n */\n\t\t\t\t\tgetLabelCapacity: function getLabelCapacity(exampleTime) {\n\t\t\t\t\t\tvar me = this;\n\n\t\t\t\t\t\tvar formatOverride = me.options.time.displayFormats.millisecond; // Pick the longest format for guestimation\n\n\t\t\t\t\t\tvar exampleLabel = me.tickFormatFunction(moment(exampleTime), 0, [], formatOverride);\n\t\t\t\t\t\tvar tickLabelWidth = me.getLabelWidth(exampleLabel);\n\t\t\t\t\t\tvar innerWidth = me.isHorizontal() ? me.width : me.height;\n\n\t\t\t\t\t\tvar capacity = Math.floor(innerWidth / tickLabelWidth);\n\t\t\t\t\t\treturn capacity > 0 ? capacity : 1;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tscaleService.registerScaleType('time', TimeScale, defaultConfig);\n\t\t\t};\n\t\t}, { \"1\": 1, \"26\": 26, \"33\": 33, \"34\": 34, \"46\": 46 }] }, {}, [7])(7);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvQ2hhcnQuanM/NDA0ZSJdLCJuYW1lcyI6WyJmIiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImciLCJ3aW5kb3ciLCJnbG9iYWwiLCJzZWxmIiwiQ2hhcnQiLCJyIiwiZSIsIm4iLCJ0IiwibyIsImkiLCJjIiwicmVxdWlyZSIsInUiLCJhIiwiRXJyb3IiLCJjb2RlIiwicCIsImNhbGwiLCJsZW5ndGgiLCJjb2xvck5hbWVzIiwiZ2V0UmdiYSIsImdldEhzbGEiLCJnZXRSZ2IiLCJnZXRIc2wiLCJnZXRId2IiLCJnZXRBbHBoYSIsImhleFN0cmluZyIsInJnYlN0cmluZyIsInJnYmFTdHJpbmciLCJwZXJjZW50U3RyaW5nIiwicGVyY2VudGFTdHJpbmciLCJoc2xTdHJpbmciLCJoc2xhU3RyaW5nIiwiaHdiU3RyaW5nIiwia2V5d29yZCIsInN0cmluZyIsImFiYnIiLCJoZXgiLCJyZ2JhIiwicGVyIiwicmdiIiwibWF0Y2giLCJwYXJzZUludCIsInNsaWNlIiwicGFyc2VGbG9hdCIsIk1hdGgiLCJyb3VuZCIsInNjYWxlIiwiaHNsIiwiYWxwaGEiLCJoIiwicyIsImwiLCJpc05hTiIsImh3YiIsInciLCJiIiwiaHNsYSIsInZhbHMiLCJoZXhEb3VibGUiLCJ1bmRlZmluZWQiLCJyZXZlcnNlTmFtZXMiLCJudW0iLCJtaW4iLCJtYXgiLCJzdHIiLCJ0b1N0cmluZyIsInRvVXBwZXJDYXNlIiwibmFtZSIsImNvbnZlcnQiLCJDb2xvciIsIm9iaiIsInZhbGlkIiwidmFsdWVzIiwiaHN2IiwiY215ayIsInNldFZhbHVlcyIsInJlZCIsImxpZ2h0bmVzcyIsInYiLCJ2YWx1ZSIsIndoaXRlbmVzcyIsImN5YW4iLCJwcm90b3R5cGUiLCJpc1ZhbGlkIiwic2V0U3BhY2UiLCJhcmd1bWVudHMiLCJyZ2JBcnJheSIsImhzbEFycmF5IiwiaHN2QXJyYXkiLCJod2JBcnJheSIsImNvbmNhdCIsImNteWtBcnJheSIsInJnYmFBcnJheSIsImhzbGFBcnJheSIsInZhbCIsInNldENoYW5uZWwiLCJncmVlbiIsImJsdWUiLCJodWUiLCJzYXR1cmF0aW9uIiwic2F0dXJhdGlvbnYiLCJibGFja25lc3MiLCJtYWdlbnRhIiwieWVsbG93IiwiYmxhY2siLCJyZ2JOdW1iZXIiLCJsdW1pbm9zaXR5IiwibHVtIiwiY2hhbiIsInBvdyIsImNvbnRyYXN0IiwiY29sb3IyIiwibHVtMSIsImx1bTIiLCJsZXZlbCIsImNvbnRyYXN0UmF0aW8iLCJkYXJrIiwieWlxIiwibGlnaHQiLCJuZWdhdGUiLCJsaWdodGVuIiwicmF0aW8iLCJkYXJrZW4iLCJzYXR1cmF0ZSIsImRlc2F0dXJhdGUiLCJ3aGl0ZW4iLCJibGFja2VuIiwiZ3JleXNjYWxlIiwiY2xlYXJlciIsIm9wYXF1ZXIiLCJyb3RhdGUiLCJkZWdyZWVzIiwibWl4IiwibWl4aW5Db2xvciIsIndlaWdodCIsImNvbG9yMSIsIncxIiwidzIiLCJ0b0pTT04iLCJjbG9uZSIsInJlc3VsdCIsInNvdXJjZSIsInRhcmdldCIsInR5cGUiLCJwcm9wIiwiaGFzT3duUHJvcGVydHkiLCJjb25zb2xlIiwiZXJyb3IiLCJzcGFjZXMiLCJtYXhlcyIsImdldFZhbHVlcyIsInNwYWNlIiwiY2hhckF0IiwiY2hhbnMiLCJjYXBwZWQiLCJzbmFtZSIsImFyZ3MiLCJBcnJheSIsImluZGV4Iiwic3ZhbHVlcyIsInJnYjJoc2wiLCJyZ2IyaHN2IiwicmdiMmh3YiIsInJnYjJjbXlrIiwicmdiMmtleXdvcmQiLCJyZ2IyeHl6IiwicmdiMmxhYiIsInJnYjJsY2giLCJoc2wycmdiIiwiaHNsMmhzdiIsImhzbDJod2IiLCJoc2wyY215ayIsImhzbDJrZXl3b3JkIiwiaHN2MnJnYiIsImhzdjJoc2wiLCJoc3YyaHdiIiwiaHN2MmNteWsiLCJoc3Yya2V5d29yZCIsImh3YjJyZ2IiLCJod2IyaHNsIiwiaHdiMmhzdiIsImh3YjJjbXlrIiwiaHdiMmtleXdvcmQiLCJjbXlrMnJnYiIsImNteWsyaHNsIiwiY215azJoc3YiLCJjbXlrMmh3YiIsImNteWsya2V5d29yZCIsImtleXdvcmQycmdiIiwia2V5d29yZDJoc2wiLCJrZXl3b3JkMmhzdiIsImtleXdvcmQyaHdiIiwia2V5d29yZDJjbXlrIiwia2V5d29yZDJsYWIiLCJrZXl3b3JkMnh5eiIsInh5ejJyZ2IiLCJ4eXoybGFiIiwieHl6MmxjaCIsImxhYjJ4eXoiLCJsYWIycmdiIiwibGFiMmxjaCIsImxjaDJsYWIiLCJsY2gyeHl6IiwibGNoMnJnYiIsImRlbHRhIiwibSIsInkiLCJrIiwicmV2ZXJzZUtleXdvcmRzIiwiSlNPTiIsInN0cmluZ2lmeSIsIngiLCJ6IiwieHl6IiwidDEiLCJ0MiIsInQzIiwic3YiLCJoaSIsImZsb29yIiwicSIsInNsIiwid2giLCJibCIsImxhYiIsInkyIiwiaHIiLCJhdGFuMiIsIlBJIiwic3FydCIsImxjaCIsImNvcyIsInNpbiIsImNzc0tleXdvcmRzIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVldmlvbGV0IiwiYnJvd24iLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbnllbGxvdyIsImdyZXkiLCJob25leWRldyIsImhvdHBpbmsiLCJpbmRpYW5yZWQiLCJpbmRpZ28iLCJpdm9yeSIsImtoYWtpIiwibGF2ZW5kZXIiLCJsYXZlbmRlcmJsdXNoIiwibGF3bmdyZWVuIiwibGVtb25jaGlmZm9uIiwibGlnaHRibHVlIiwibGlnaHRjb3JhbCIsImxpZ2h0Y3lhbiIsImxpZ2h0Z29sZGVucm9keWVsbG93IiwibGlnaHRncmF5IiwibGlnaHRncmVlbiIsImxpZ2h0Z3JleSIsImxpZ2h0cGluayIsImxpZ2h0c2FsbW9uIiwibGlnaHRzZWFncmVlbiIsImxpZ2h0c2t5Ymx1ZSIsImxpZ2h0c2xhdGVncmF5IiwibGlnaHRzbGF0ZWdyZXkiLCJsaWdodHN0ZWVsYmx1ZSIsImxpZ2h0eWVsbG93IiwibGltZSIsImxpbWVncmVlbiIsImxpbmVuIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3dncmVlbiIsImtleSIsImNvbnZlcnNpb25zIiwiQ29udmVydGVyIiwiZnVuYyIsImFyZyIsInBhaXIiLCJleGVjIiwiZnJvbSIsInRvIiwiY29udnMiLCJyb3V0ZVNwYWNlIiwiZnNwYWNlIiwiZm9yRWFjaCIsImhlbHBlcnMiLCJBbmltYXRpb24iLCJhbmltYXRpb25TZXJ2aWNlIiwiZGVmYXVsdHMiLCJFbGVtZW50IiwiZWxlbWVudHMiLCJJbnRlcmFjdGlvbiIsImxheW91dHMiLCJwbGF0Zm9ybSIsInBsdWdpbnMiLCJTY2FsZSIsInNjYWxlU2VydmljZSIsIlRpY2tzIiwiVG9vbHRpcCIsInJlZ2lzdGVyIiwiaW5pdGlhbGl6ZSIsIkxlZ2VuZCIsImxlZ2VuZCIsIl9lbGVtZW50IiwiVGl0bGUiLCJ0aXRsZSIsInBsdWdpblNlcnZpY2UiLCJQbHVnaW5CYXNlIiwiZXh0ZW5kIiwiY2FudmFzSGVscGVycyIsImNhbnZhcyIsImxheW91dFNlcnZpY2UiLCJCYXIiLCJjb250ZXh0IiwiY29uZmlnIiwiQnViYmxlIiwiRG91Z2hudXQiLCJMaW5lIiwiUG9sYXJBcmVhIiwiUmFkYXIiLCJTY2F0dGVyIiwiX3NldCIsImhvdmVyIiwibW9kZSIsInNjYWxlcyIsInhBeGVzIiwiY2F0ZWdvcnlQZXJjZW50YWdlIiwiYmFyUGVyY2VudGFnZSIsIm9mZnNldCIsImdyaWRMaW5lcyIsIm9mZnNldEdyaWRMaW5lcyIsInlBeGVzIiwiYXhpcyIsInBvc2l0aW9uIiwicmVjdGFuZ2xlIiwiYm9yZGVyU2tpcHBlZCIsInRvb2x0aXBzIiwiY2FsbGJhY2tzIiwiaXRlbSIsImRhdGEiLCJ5TGFiZWwiLCJsYWJlbHMiLCJsYWJlbCIsImRhdGFzZXRMYWJlbCIsImRhdGFzZXRzIiwiZGF0YXNldEluZGV4IiwieExhYmVsIiwiY29tcHV0ZU1pblNhbXBsZVNpemUiLCJwaXhlbHMiLCJpc0hvcml6b250YWwiLCJ3aWR0aCIsImhlaWdodCIsInRpY2tzIiwiZ2V0VGlja3MiLCJwcmV2IiwiY3VyciIsImlsZW4iLCJnZXRQaXhlbEZvclRpY2siLCJjb21wdXRlRml0Q2F0ZWdvcnlUcmFpdHMiLCJydWxlciIsIm9wdGlvbnMiLCJ0aGlja25lc3MiLCJiYXJUaGlja25lc3MiLCJjb3VudCIsInN0YWNrQ291bnQiLCJzaXplIiwiaXNOdWxsT3JVbmRlZiIsImNodW5rIiwic3RhcnQiLCJjb21wdXRlRmxleENhdGVnb3J5VHJhaXRzIiwibmV4dCIsInBlcmNlbnQiLCJlbmQiLCJjb250cm9sbGVycyIsImJhciIsIkRhdGFzZXRDb250cm9sbGVyIiwiZGF0YUVsZW1lbnRUeXBlIiwiUmVjdGFuZ2xlIiwibWUiLCJtZXRhIiwiYXBwbHkiLCJnZXRNZXRhIiwic3RhY2siLCJnZXREYXRhc2V0IiwidXBkYXRlIiwicmVzZXQiLCJyZWN0cyIsIl9ydWxlciIsImdldFJ1bGVyIiwidXBkYXRlRWxlbWVudCIsImNoYXJ0IiwiZGF0YXNldCIsImN1c3RvbSIsInJlY3RhbmdsZU9wdGlvbnMiLCJfeFNjYWxlIiwiZ2V0U2NhbGVGb3JJZCIsInhBeGlzSUQiLCJfeVNjYWxlIiwieUF4aXNJRCIsIl9kYXRhc2V0SW5kZXgiLCJfaW5kZXgiLCJfbW9kZWwiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ2YWx1ZUF0SW5kZXhPckRlZmF1bHQiLCJib3JkZXJDb2xvciIsImJvcmRlcldpZHRoIiwidXBkYXRlRWxlbWVudEdlb21ldHJ5IiwicGl2b3QiLCJtb2RlbCIsInZzY2FsZSIsImdldFZhbHVlU2NhbGUiLCJiYXNlIiwiZ2V0QmFzZVBpeGVsIiwiaG9yaXpvbnRhbCIsInZwaXhlbHMiLCJjYWxjdWxhdGVCYXJWYWx1ZVBpeGVscyIsImlwaXhlbHMiLCJjYWxjdWxhdGVCYXJJbmRleFBpeGVscyIsImhlYWQiLCJjZW50ZXIiLCJnZXRWYWx1ZVNjYWxlSWQiLCJnZXRJbmRleFNjYWxlSWQiLCJnZXRJbmRleFNjYWxlIiwiX2dldFN0YWNrcyIsImxhc3QiLCJzdGFja2VkIiwic3RhY2tzIiwiZ2V0RGF0YXNldE1ldGEiLCJpc0RhdGFzZXRWaXNpYmxlIiwiaW5kZXhPZiIsInB1c2giLCJnZXRTdGFja0NvdW50IiwiZ2V0U3RhY2tJbmRleCIsImxlZnQiLCJ0b3AiLCJnZXRQaXhlbEZvclZhbHVlIiwiZ2V0UmlnaHRWYWx1ZSIsImltZXRhIiwiaXZhbHVlIiwiY29udHJvbGxlciIsImlkIiwicmFuZ2UiLCJzdGFja0luZGV4IiwidmFsdWVPckRlZmF1bHQiLCJtYXhCYXJUaGlja25lc3MiLCJJbmZpbml0eSIsImRyYXciLCJjbGlwQXJlYSIsImN0eCIsImNoYXJ0QXJlYSIsInVuY2xpcEFyZWEiLCJob3Jpem9udGFsQmFyIiwiZGF0YVBvaW50IiwiYnViYmxlIiwiUG9pbnQiLCJwb2ludHMiLCJlYWNoIiwicG9pbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJfcmVzb2x2ZUVsZW1lbnRPcHRpb25zIiwiZHNJbmRleCIsImdldFBpeGVsRm9yRGVjaW1hbCIsIk5hTiIsIl9vcHRpb25zIiwiaGl0UmFkaXVzIiwicG9pbnRTdHlsZSIsInJvdGF0aW9uIiwicmFkaXVzIiwic2tpcCIsInNldEhvdmVyU3R5bGUiLCIkcHJldmlvdXNTdHlsZSIsImhvdmVyQmFja2dyb3VuZENvbG9yIiwiZ2V0SG92ZXJDb2xvciIsImhvdmVyQm9yZGVyQ29sb3IiLCJob3ZlckJvcmRlcldpZHRoIiwiaG92ZXJSYWRpdXMiLCJyZXNvbHZlIiwiZGF0YUluZGV4Iiwia2V5cyIsImFuaW1hdGlvbiIsImFuaW1hdGVSb3RhdGUiLCJhbmltYXRlU2NhbGUiLCJsZWdlbmRDYWxsYmFjayIsInRleHQiLCJqb2luIiwiZ2VuZXJhdGVMYWJlbHMiLCJtYXAiLCJkcyIsImFyYyIsImFyY09wdHMiLCJmaWxsIiwic3Ryb2tlIiwiYnciLCJmaWxsU3R5bGUiLCJzdHJva2VTdHlsZSIsImxpbmVXaWR0aCIsImhpZGRlbiIsIm9uQ2xpY2siLCJsZWdlbmRJdGVtIiwiY3V0b3V0UGVyY2VudGFnZSIsImNpcmN1bWZlcmVuY2UiLCJ0b29sdGlwSXRlbSIsImRhdGFMYWJlbCIsImlzQXJyYXkiLCJkb3VnaG51dCIsInBpZSIsIkFyYyIsImxpbmtTY2FsZXMiLCJub29wIiwiZ2V0UmluZ0luZGV4IiwicmluZ0luZGV4IiwiaiIsIm9wdHMiLCJhdmFpbGFibGVXaWR0aCIsInJpZ2h0IiwiYXZhaWxhYmxlSGVpZ2h0IiwiYm90dG9tIiwibWluU2l6ZSIsInN0YXJ0QW5nbGUiLCJlbmRBbmdsZSIsImNvbnRhaW5zMCIsImNvbnRhaW5zOTAiLCJjb250YWluczE4MCIsImNvbnRhaW5zMjcwIiwiY3V0b3V0IiwiZ2V0TWF4Qm9yZGVyV2lkdGgiLCJvdXRlclJhZGl1cyIsImlubmVyUmFkaXVzIiwicmFkaXVzTGVuZ3RoIiwiZ2V0VmlzaWJsZURhdGFzZXRDb3VudCIsIm9mZnNldFgiLCJvZmZzZXRZIiwidG90YWwiLCJjYWxjdWxhdGVUb3RhbCIsImFuaW1hdGlvbk9wdHMiLCJjZW50ZXJYIiwiY2VudGVyWSIsImNhbGN1bGF0ZUNpcmN1bWZlcmVuY2UiLCJlbGVtZW50T3B0cyIsImVsZW1lbnQiLCJhYnMiLCJhcmNzIiwiaG92ZXJXaWR0aCIsIl9jaGFydCIsInNob3dMaW5lcyIsInNwYW5HYXBzIiwibGluZUVuYWJsZWQiLCJzaG93TGluZSIsImxpbmUiLCJkYXRhc2V0RWxlbWVudFR5cGUiLCJsaW5lRWxlbWVudE9wdGlvbnMiLCJ0ZW5zaW9uIiwibGluZVRlbnNpb24iLCJfc2NhbGUiLCJfY2hpbGRyZW4iLCJib3JkZXJDYXBTdHlsZSIsImJvcmRlckRhc2giLCJib3JkZXJEYXNoT2Zmc2V0IiwiYm9yZGVySm9pblN0eWxlIiwic3RlcHBlZExpbmUiLCJzdGVwcGVkIiwiY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSIsInVwZGF0ZUJlemllckNvbnRyb2xQb2ludHMiLCJnZXRQb2ludEJhY2tncm91bmRDb2xvciIsInBvaW50QmFja2dyb3VuZENvbG9yIiwiZ2V0UG9pbnRCb3JkZXJDb2xvciIsInBvaW50Qm9yZGVyQ29sb3IiLCJnZXRQb2ludEJvcmRlcldpZHRoIiwicG9pbnRCb3JkZXJXaWR0aCIsImdldFBvaW50Um90YXRpb24iLCJwb2ludFJvdGF0aW9uIiwicG9pbnRPcHRpb25zIiwicG9pbnRSYWRpdXMiLCJwb2ludEhpdFJhZGl1cyIsImNhbGN1bGF0ZVBvaW50WSIsInN1bVBvcyIsInN1bU5lZyIsImRzTWV0YSIsInN0YWNrZWRSaWdodFZhbHVlIiwiTnVtYmVyIiwicmlnaHRWYWx1ZSIsImFyZWEiLCJjb250cm9sUG9pbnRzIiwiZmlsdGVyIiwicHQiLCJjYXBDb250cm9sUG9pbnQiLCJzcGxpbmVDdXJ2ZU1vbm90b25lIiwic3BsaW5lQ3VydmUiLCJwcmV2aW91c0l0ZW0iLCJuZXh0SXRlbSIsImNvbnRyb2xQb2ludFByZXZpb3VzWCIsInByZXZpb3VzIiwiY29udHJvbFBvaW50UHJldmlvdXNZIiwiY29udHJvbFBvaW50TmV4dFgiLCJjb250cm9sUG9pbnROZXh0WSIsImNhcEJlemllclBvaW50cyIsImhhbGZCb3JkZXJXaWR0aCIsInBvaW50SG92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJwb2ludEhvdmVyQm9yZGVyQ29sb3IiLCJwb2ludEhvdmVyQm9yZGVyV2lkdGgiLCJwb2ludEhvdmVyUmFkaXVzIiwiYW5nbGVMaW5lcyIsImRpc3BsYXkiLCJjaXJjdWxhciIsInBvaW50TGFiZWxzIiwiYmVnaW5BdFplcm8iLCJwb2xhckFyZWEiLCJzdGFydHMiLCJfc3RhcnRzIiwiYW5nbGVzIiwiX2FuZ2xlcyIsImFuZ2xlIiwiX3VwZGF0ZVJhZGl1cyIsImNvdW50VmlzaWJsZUVsZW1lbnRzIiwiX2NvbXB1dGVBbmdsZSIsInhDZW50ZXIiLCJ5Q2VudGVyIiwiZGF0YXNldFN0YXJ0QW5nbGUiLCJkaXN0YW5jZSIsImdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlIiwicmVzZXRSYWRpdXMiLCJyYWRhciIsIl9sb29wIiwicG9pbnRFbGVtZW50T3B0aW9ucyIsInBvaW50UG9zaXRpb24iLCJnZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUiLCJzY2F0dGVyIiwiY3VycmVudFN0ZXAiLCJudW1TdGVwcyIsImVhc2luZyIsInJlbmRlciIsIm9uQW5pbWF0aW9uUHJvZ3Jlc3MiLCJvbkFuaW1hdGlvbkNvbXBsZXRlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJzZXQiLCJkdXJhdGlvbiIsIm9uUHJvZ3Jlc3MiLCJvbkNvbXBsZXRlIiwiZnJhbWVEdXJhdGlvbiIsImFuaW1hdGlvbnMiLCJkcm9wRnJhbWVzIiwicmVxdWVzdCIsImFkZEFuaW1hdGlvbiIsImxhenkiLCJhbmltYXRpbmciLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYW5jZWxBbmltYXRpb24iLCJmaW5kSW5kZXgiLCJzcGxpY2UiLCJyZXF1ZXN0QW5pbUZyYW1lIiwic3RhcnREaWdlc3QiLCJzdGFydFRpbWUiLCJEYXRlIiwibm93IiwiZnJhbWVzVG9Ecm9wIiwiYWR2YW5jZSIsImVuZFRpbWUiLCJjYWxsYmFjayIsInR5cGVzIiwiaW5zdGFuY2VzIiwiaW5pdENvbmZpZyIsImNvbmZpZ01lcmdlIiwidXBkYXRlQ29uZmlnIiwibmV3T3B0aW9ucyIsInJlbW92ZUJveCIsImVuc3VyZVNjYWxlc0hhdmVJRHMiLCJidWlsZE9yVXBkYXRlU2NhbGVzIiwidG9vbHRpcCIsInBvc2l0aW9uSXNIb3Jpem9udGFsIiwiY29uc3RydWN0IiwiYWNxdWlyZUNvbnRleHQiLCJ1aWQiLCJhc3BlY3RSYXRpbyIsIl9idWZmZXJlZFJlbmRlciIsIm5vdGlmeSIsInJldGluYVNjYWxlIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImJpbmRFdmVudHMiLCJyZXNwb25zaXZlIiwicmVzaXplIiwiaW5pdFRvb2xUaXAiLCJjbGVhciIsInN0b3AiLCJzaWxlbnQiLCJtYWludGFpbkFzcGVjdFJhdGlvIiwibmV3V2lkdGgiLCJnZXRNYXhpbXVtV2lkdGgiLCJuZXdIZWlnaHQiLCJnZXRNYXhpbXVtSGVpZ2h0Iiwic3R5bGUiLCJuZXdTaXplIiwib25SZXNpemUiLCJyZXNwb25zaXZlQW5pbWF0aW9uRHVyYXRpb24iLCJzY2FsZXNPcHRpb25zIiwic2NhbGVPcHRpb25zIiwieEF4aXNPcHRpb25zIiwieUF4aXNPcHRpb25zIiwiaXRlbXMiLCJ1cGRhdGVkIiwicmVkdWNlIiwiZHR5cGUiLCJkcG9zaXRpb24iLCJpc0RlZmF1bHQiLCJzY2FsZVR5cGUiLCJzY2FsZUNsYXNzIiwiZ2V0U2NhbGVDb25zdHJ1Y3RvciIsIm1lcmdlVGlja3NPcHRpb25zIiwiaGFzVXBkYXRlZCIsImFkZFNjYWxlc1RvTGF5b3V0IiwiYnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzIiwibmV3Q29udHJvbGxlcnMiLCJkZXN0cm95RGF0YXNldE1ldGEiLCJ1cGRhdGVJbmRleCIsIkNvbnRyb2xsZXJDbGFzcyIsInJlc2V0RWxlbWVudHMiLCJfaW52YWxpZGF0ZSIsIl9kYXRhIiwiYnVpbGRPclVwZGF0ZUVsZW1lbnRzIiwidXBkYXRlTGF5b3V0IiwidXBkYXRlRGF0YXNldHMiLCJsYXN0QWN0aXZlIiwiX2J1ZmZlcmVkUmVxdWVzdCIsInVwZGF0ZURhdGFzZXQiLCJhbmltYXRpb25PcHRpb25zIiwiYW5pbWF0aW9uT2JqZWN0IiwiZWFzaW5nRnVuY3Rpb24iLCJlZmZlY3RzIiwic3RlcERlY2ltYWwiLCJlYXNpbmdWYWx1ZSIsInRyYW5zaXRpb24iLCJib3hlcyIsImJveCIsImRyYXdEYXRhc2V0cyIsIl9kcmF3VG9vbHRpcCIsImRyYXdEYXRhc2V0IiwiZ2V0RWxlbWVudEF0RXZlbnQiLCJtb2RlcyIsInNpbmdsZSIsImdldEVsZW1lbnRzQXRFdmVudCIsImludGVyc2VjdCIsImdldEVsZW1lbnRzQXRYQXhpcyIsImdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUiLCJtZXRob2QiLCJnZXREYXRhc2V0QXRFdmVudCIsIl9tZXRhIiwiZ2VuZXJhdGVMZWdlbmQiLCJkZXN0cm95IiwidW5iaW5kRXZlbnRzIiwicmVsZWFzZUNvbnRleHQiLCJ0b0Jhc2U2NEltYWdlIiwidG9EYXRhVVJMIiwiX2NoYXJ0SW5zdGFuY2UiLCJsaXN0ZW5lcnMiLCJfbGlzdGVuZXJzIiwibGlzdGVuZXIiLCJldmVudEhhbmRsZXIiLCJldmVudHMiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVwZGF0ZUhvdmVyU3R5bGUiLCJlbmFibGVkIiwiY2hhbmdlZCIsImhhbmRsZUV2ZW50IiwiX3N0YXJ0IiwiYnVmZmVyZWRSZXF1ZXN0IiwiYW5pbWF0aW9uRHVyYXRpb24iLCJob3Zlck9wdGlvbnMiLCJhY3RpdmUiLCJvbkhvdmVyIiwibmF0aXZlIiwiYXJyYXlFcXVhbHMiLCJDb250cm9sbGVyIiwiYXJyYXlFdmVudHMiLCJsaXN0ZW5BcnJheUV2ZW50cyIsImFycmF5IiwiX2NoYXJ0anMiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwicmVzIiwib2JqZWN0IiwidW5saXN0ZW5BcnJheUV2ZW50cyIsInN0dWIiLCJhZGRFbGVtZW50cyIsInNjYWxlSUQiLCJjcmVhdGVNZXRhRGF0YXNldCIsImNyZWF0ZU1ldGFEYXRhIiwibWV0YURhdGEiLCJhZGRFbGVtZW50QW5kUmVzZXQiLCJyZXN5bmNFbGVtZW50cyIsInJlbW92ZUhvdmVyU3R5bGUiLCJtZXJnZSIsIm51bU1ldGEiLCJudW1EYXRhIiwiaW5zZXJ0RWxlbWVudHMiLCJvbkRhdGFQdXNoIiwib25EYXRhUG9wIiwicG9wIiwib25EYXRhU2hpZnQiLCJzaGlmdCIsIm9uRGF0YVNwbGljZSIsIm9uRGF0YVVuc2hpZnQiLCJpbmhlcml0cyIsInNjb3BlIiwiY29sb3IiLCJpbnRlcnBvbGF0ZSIsInZpZXciLCJlYXNlIiwiYWN0dWFsIiwib3JpZ2luIiwiYzAiLCJjMSIsImlzRmluaXRlIiwiY29uZmlndXJhdGlvbiIsIl92aWV3IiwidG9vbHRpcFBvc2l0aW9uIiwiaGFzVmFsdWUiLCJpc051bWJlciIsIm1lcmdlciIsInR2YWwiLCJzdmFsIiwic2NhbGVNZXJnZSIsImdldFNjYWxlRGVmYXVsdHMiLCJfbWVyZ2VyIiwic2xlbiIsIndoZXJlIiwiY29sbGVjdGlvbiIsImZpbHRlckNhbGxiYWNrIiwiZmlsdGVyZWQiLCJmaW5kTmV4dFdoZXJlIiwiYXJyYXlUb1NlYXJjaCIsInN0YXJ0SW5kZXgiLCJjdXJyZW50SXRlbSIsImZpbmRQcmV2aW91c1doZXJlIiwiYWxtb3N0RXF1YWxzIiwiZXBzaWxvbiIsImFsbW9zdFdob2xlIiwicm91bmRlZCIsIk5FR0FUSVZFX0lORklOSVRZIiwiUE9TSVRJVkVfSU5GSU5JVFkiLCJzaWduIiwibG9nMTAiLCJleHBvbmVudCIsImxvZyIsIkxPRzEwRSIsInBvd2VyT2YxMCIsImlzUG93ZXJPZjEwIiwidG9SYWRpYW5zIiwidG9EZWdyZWVzIiwicmFkaWFucyIsImdldEFuZ2xlRnJvbVBvaW50IiwiY2VudHJlUG9pbnQiLCJhbmdsZVBvaW50IiwiZGlzdGFuY2VGcm9tWENlbnRlciIsImRpc3RhbmNlRnJvbVlDZW50ZXIiLCJyYWRpYWxEaXN0YW5jZUZyb21DZW50ZXIiLCJkaXN0YW5jZUJldHdlZW5Qb2ludHMiLCJwdDEiLCJwdDIiLCJhbGlhc1BpeGVsIiwicGl4ZWxXaWR0aCIsImZpcnN0UG9pbnQiLCJtaWRkbGVQb2ludCIsImFmdGVyUG9pbnQiLCJjdXJyZW50IiwiZDAxIiwiZDEyIiwiczAxIiwiczEyIiwiZmEiLCJmYiIsIkVQU0lMT04iLCJwb2ludHNXaXRoVGFuZ2VudHMiLCJkZWx0YUsiLCJtSyIsInBvaW50c0xlbiIsInBvaW50QmVmb3JlIiwicG9pbnRDdXJyZW50IiwicG9pbnRBZnRlciIsInNsb3BlRGVsdGFYIiwiYWxwaGFLIiwiYmV0YUsiLCJ0YXVLIiwic3F1YXJlZE1hZ25pdHVkZSIsImRlbHRhWCIsImxvb3AiLCJuaWNlTnVtIiwiZnJhY3Rpb24iLCJuaWNlRnJhY3Rpb24iLCJ3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJvUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXRUaW1lb3V0IiwiZ2V0UmVsYXRpdmVQb3NpdGlvbiIsImV2dCIsIm1vdXNlWCIsIm1vdXNlWSIsIm9yaWdpbmFsRXZlbnQiLCJzcmNFbGVtZW50IiwiYm91bmRpbmdSZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidG91Y2hlcyIsImNsaWVudFgiLCJjbGllbnRZIiwicGFkZGluZ0xlZnQiLCJnZXRTdHlsZSIsInBhZGRpbmdUb3AiLCJwYWRkaW5nUmlnaHQiLCJwYWRkaW5nQm90dG9tIiwiY3VycmVudERldmljZVBpeGVsUmF0aW8iLCJwYXJzZU1heFN0eWxlIiwic3R5bGVWYWx1ZSIsIm5vZGUiLCJwYXJlbnRQcm9wZXJ0eSIsInZhbHVlSW5QaXhlbHMiLCJwYXJlbnROb2RlIiwiaXNDb25zdHJhaW5lZFZhbHVlIiwiZ2V0Q29uc3RyYWludERpbWVuc2lvbiIsImRvbU5vZGUiLCJtYXhTdHlsZSIsInBlcmNlbnRhZ2VQcm9wZXJ0eSIsImRvY3VtZW50IiwiZGVmYXVsdFZpZXciLCJfZ2V0UGFyZW50Tm9kZSIsImNvbnN0cmFpbmVkTm9kZSIsImdldENvbXB1dGVkU3R5bGUiLCJjb25zdHJhaW5lZENvbnRhaW5lciIsImhhc0NOb2RlIiwiaGFzQ0NvbnRhaW5lciIsImluZmluaXR5IiwiZ2V0Q29uc3RyYWludFdpZHRoIiwiZ2V0Q29uc3RyYWludEhlaWdodCIsIl9jYWxjdWxhdGVQYWRkaW5nIiwiY29udGFpbmVyIiwicGFkZGluZyIsInBhcmVudERpbWVuc2lvbiIsInBhcmVudCIsImhvc3QiLCJjbGllbnRXaWR0aCIsImN3IiwiY2xpZW50SGVpZ2h0IiwiY2giLCJlbCIsInByb3BlcnR5IiwiY3VycmVudFN0eWxlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImZvcmNlUmF0aW8iLCJwaXhlbFJhdGlvIiwiZm9udFN0cmluZyIsInBpeGVsU2l6ZSIsImZvbnRTdHlsZSIsImZvbnRGYW1pbHkiLCJsb25nZXN0VGV4dCIsImZvbnQiLCJhcnJheU9mVGhpbmdzIiwiY2FjaGUiLCJnYyIsImdhcmJhZ2VDb2xsZWN0IiwibG9uZ2VzdCIsInRoaW5nIiwibWVhc3VyZVRleHQiLCJuZXN0ZWRUaGluZyIsImdjTGVuIiwidGV4dFdpZHRoIiwibnVtYmVyT2ZMYWJlbExpbmVzIiwibnVtYmVyT2ZMaW5lcyIsIkNhbnZhc0dyYWRpZW50IiwiZGVmYXVsdENvbG9yIiwiY29sb3JWYWx1ZSIsIkNhbnZhc1BhdHRlcm4iLCJwYXJzZVZpc2libGVJdGVtcyIsImhhbmRsZXIiLCJqbGVuIiwiZ2V0SW50ZXJzZWN0SXRlbXMiLCJpblJhbmdlIiwiZ2V0TmVhcmVzdEl0ZW1zIiwiZGlzdGFuY2VNZXRyaWMiLCJtaW5EaXN0YW5jZSIsIm5lYXJlc3RJdGVtcyIsImdldENlbnRlclBvaW50IiwiZ2V0RGlzdGFuY2VNZXRyaWNGb3JBeGlzIiwidXNlWCIsInVzZVkiLCJkZWx0YVkiLCJpbmRleE1vZGUiLCJuZWFyZXN0Iiwic29ydCIsInNpemVBIiwiZ2V0QXJlYSIsInNpemVCIiwicmV0IiwiaW50ZXJzZWN0c0l0ZW0iLCJpblhSYW5nZSIsImluWVJhbmdlIiwiZGVmYXVsdEZvbnRDb2xvciIsImRlZmF1bHRGb250RmFtaWx5IiwiZGVmYXVsdEZvbnRTaXplIiwiZGVmYXVsdEZvbnRTdHlsZSIsImxheW91dCIsImZpbHRlckJ5UG9zaXRpb24iLCJzb3J0QnlXZWlnaHQiLCJyZXZlcnNlIiwiX3RtcEluZGV4XyIsInYwIiwidjEiLCJhZGRCb3giLCJmdWxsV2lkdGgiLCJsYXlvdXRJdGVtIiwiY29uZmlndXJlIiwicHJvcHMiLCJsYXlvdXRPcHRpb25zIiwidG9QYWRkaW5nIiwibGVmdFBhZGRpbmciLCJyaWdodFBhZGRpbmciLCJ0b3BQYWRkaW5nIiwiYm90dG9tUGFkZGluZyIsImxlZnRCb3hlcyIsInJpZ2h0Qm94ZXMiLCJ0b3BCb3hlcyIsImJvdHRvbUJveGVzIiwiY2hhcnRBcmVhQm94ZXMiLCJjaGFydFdpZHRoIiwiY2hhcnRIZWlnaHQiLCJjaGFydEFyZWFXaWR0aCIsImNoYXJ0QXJlYUhlaWdodCIsInZlcnRpY2FsQm94V2lkdGgiLCJob3Jpem9udGFsQm94SGVpZ2h0IiwibWF4Q2hhcnRBcmVhV2lkdGgiLCJtYXhDaGFydEFyZWFIZWlnaHQiLCJtaW5Cb3hTaXplcyIsImdldE1pbmltdW1Cb3hTaXplIiwibWF4SG9yaXpvbnRhbExlZnRQYWRkaW5nIiwibWF4SG9yaXpvbnRhbFJpZ2h0UGFkZGluZyIsIm1heFZlcnRpY2FsVG9wUGFkZGluZyIsIm1heFZlcnRpY2FsQm90dG9tUGFkZGluZyIsImhvcml6b250YWxCb3giLCJnZXRQYWRkaW5nIiwiYm94UGFkZGluZyIsInZlcnRpY2FsQm94IiwidG90YWxMZWZ0Qm94ZXNXaWR0aCIsInRvdGFsUmlnaHRCb3hlc1dpZHRoIiwidG90YWxUb3BCb3hlc0hlaWdodCIsInRvdGFsQm90dG9tQm94ZXNIZWlnaHQiLCJmaXRCb3giLCJtaW5Cb3hTaXplIiwibWluQm94Iiwic2NhbGVNYXJnaW4iLCJmaW5hbEZpdFZlcnRpY2FsQm94IiwibGVmdFBhZGRpbmdBZGRpdGlvbiIsInRvcFBhZGRpbmdBZGRpdGlvbiIsIm5ld01heENoYXJ0QXJlYUhlaWdodCIsIm5ld01heENoYXJ0QXJlYVdpZHRoIiwicGxhY2VCb3giLCJfcGx1Z2lucyIsIl9jYWNoZUlkIiwicGx1Z2luIiwidW5yZWdpc3RlciIsImlkeCIsImdldEFsbCIsImhvb2siLCJkZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJwYXJhbXMiLCIkcGx1Z2lucyIsImRyYXdCb3JkZXIiLCJkcmF3T25DaGFydEFyZWEiLCJkcmF3VGlja3MiLCJ0aWNrTWFya0xlbmd0aCIsInplcm9MaW5lV2lkdGgiLCJ6ZXJvTGluZUNvbG9yIiwiemVyb0xpbmVCb3JkZXJEYXNoIiwiemVyb0xpbmVCb3JkZXJEYXNoT2Zmc2V0Iiwic2NhbGVMYWJlbCIsImxhYmVsU3RyaW5nIiwibGluZUhlaWdodCIsIm1pblJvdGF0aW9uIiwibWF4Um90YXRpb24iLCJtaXJyb3IiLCJhdXRvU2tpcCIsImF1dG9Ta2lwUGFkZGluZyIsImxhYmVsT2Zmc2V0IiwiZm9ybWF0dGVycyIsIm1pbm9yIiwibWFqb3IiLCJsYWJlbHNGcm9tVGlja3MiLCJnZXRMaW5lVmFsdWUiLCJsaW5lVmFsdWUiLCJjb21wdXRlVGV4dFNpemUiLCJ0aWNrIiwicGFyc2VGb250T3B0aW9ucyIsImdsb2JhbERlZmF1bHRzIiwiZm9udFNpemUiLCJmYW1pbHkiLCJwYXJzZUxpbmVIZWlnaHQiLCJ0b0xpbmVIZWlnaHQiLCJfdGlja3MiLCJiZWZvcmVVcGRhdGUiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsIm1hcmdpbnMiLCJsb25nZXN0VGV4dENhY2hlIiwiYmVmb3JlU2V0RGltZW5zaW9ucyIsInNldERpbWVuc2lvbnMiLCJhZnRlclNldERpbWVuc2lvbnMiLCJiZWZvcmVEYXRhTGltaXRzIiwiZGV0ZXJtaW5lRGF0YUxpbWl0cyIsImFmdGVyRGF0YUxpbWl0cyIsImJlZm9yZUJ1aWxkVGlja3MiLCJidWlsZFRpY2tzIiwiYWZ0ZXJCdWlsZFRpY2tzIiwiYmVmb3JlVGlja1RvTGFiZWxDb252ZXJzaW9uIiwiY29udmVydFRpY2tzVG9MYWJlbHMiLCJhZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbiIsImJlZm9yZUNhbGN1bGF0ZVRpY2tSb3RhdGlvbiIsImNhbGN1bGF0ZVRpY2tSb3RhdGlvbiIsImFmdGVyQ2FsY3VsYXRlVGlja1JvdGF0aW9uIiwiYmVmb3JlRml0IiwiZml0IiwiYWZ0ZXJGaXQiLCJhZnRlclVwZGF0ZSIsInRpY2tPcHRzIiwidXNlckNhbGxiYWNrIiwidGlja0ZvbnQiLCJsYWJlbFJvdGF0aW9uIiwib3JpZ2luYWxMYWJlbFdpZHRoIiwibGFiZWxXaWR0aCIsImNvc1JvdGF0aW9uIiwic2luUm90YXRpb24iLCJ0aWNrV2lkdGgiLCJhbmdsZVJhZGlhbnMiLCJzY2FsZUxhYmVsT3B0cyIsImdyaWRMaW5lT3B0cyIsImlzRnVsbFdpZHRoIiwic2NhbGVMYWJlbExpbmVIZWlnaHQiLCJzY2FsZUxhYmVsUGFkZGluZyIsImRlbHRhSGVpZ2h0IiwibGFyZ2VzdFRleHRXaWR0aCIsInRhbGxlc3RMYWJlbEhlaWdodEluTGluZXMiLCJsaW5lU3BhY2UiLCJ0aWNrUGFkZGluZyIsImxvbmdlc3RMYWJlbFdpZHRoIiwibGFiZWxIZWlnaHQiLCJmaXJzdExhYmVsV2lkdGgiLCJsYXN0TGFiZWxXaWR0aCIsImhhbmRsZU1hcmdpbnMiLCJyYXdWYWx1ZSIsImdldExhYmVsRm9ySW5kZXgiLCJnZXRWYWx1ZUZvclBpeGVsIiwiaW5uZXJXaWR0aCIsInBpeGVsIiwiZmluYWxWYWwiLCJpbm5lckhlaWdodCIsImRlY2ltYWwiLCJ2YWx1ZU9mZnNldCIsImdldEJhc2VWYWx1ZSIsIl9hdXRvU2tpcCIsInNraXBSYXRpbyIsIm9wdGlvblRpY2tzIiwidGlja0NvdW50IiwibGFiZWxSb3RhdGlvblJhZGlhbnMiLCJsb25nZXN0Um90YXRlZExhYmVsIiwic2hvdWxkU2tpcCIsIm1heFRpY2tzIiwibWF4VGlja3NMaW1pdCIsIm9wdGlvbk1ham9yVGlja3MiLCJpc1JvdGF0ZWQiLCJ0aWNrRm9udENvbG9yIiwiZm9udENvbG9yIiwibWFqb3JUaWNrRm9udENvbG9yIiwibWFqb3JUaWNrRm9udCIsInRsIiwic2NhbGVMYWJlbEZvbnRDb2xvciIsInNjYWxlTGFiZWxGb250IiwiaXRlbXNUb0RyYXciLCJheGlzV2lkdGgiLCJ4VGlja1N0YXJ0IiwieFRpY2tFbmQiLCJ5VGlja1N0YXJ0IiwieVRpY2tFbmQiLCJsaW5lQ29sb3IiLCJ6ZXJvTGluZUluZGV4IiwidHgxIiwidHkxIiwidHgyIiwidHkyIiwieDEiLCJ5MSIsIngyIiwibGFiZWxYIiwibGFiZWxZIiwidGV4dEFsaWduIiwidGV4dEJhc2VsaW5lIiwibGFiZWxZT2Zmc2V0IiwieExpbmVWYWx1ZSIsImlzTGVmdCIsImxhYmVsWE9mZnNldCIsInlMaW5lVmFsdWUiLCJnbFdpZHRoIiwiZ2xDb2xvciIsImdsQm9yZGVyRGFzaCIsImdsQm9yZGVyRGFzaE9mZnNldCIsIml0ZW1Ub0RyYXciLCJzYXZlIiwic2V0TGluZURhc2giLCJsaW5lRGFzaE9mZnNldCIsImJlZ2luUGF0aCIsIm1vdmVUbyIsImxpbmVUbyIsInJlc3RvcmUiLCJ0cmFuc2xhdGUiLCJsaW5lQ291bnQiLCJmaWxsVGV4dCIsInNjYWxlTGFiZWxYIiwic2NhbGVMYWJlbFkiLCJoYWxmTGluZUhlaWdodCIsImNvbnN0cnVjdG9ycyIsInJlZ2lzdGVyU2NhbGVUeXBlIiwic2NhbGVDb25zdHJ1Y3RvciIsInNjYWxlRGVmYXVsdHMiLCJ1cGRhdGVTY2FsZURlZmF1bHRzIiwiYWRkaXRpb25zIiwibGluZWFyIiwidGlja1ZhbHVlIiwibG9nRGVsdGEiLCJ0aWNrU3RyaW5nIiwibWF4VGljayIsImxvZ1RpY2siLCJ0b0V4cG9uZW50aWFsIiwibnVtRGVjaW1hbCIsInRvRml4ZWQiLCJsb2dhcml0aG1pYyIsInJlbWFpbiIsInRpdGxlRm9udFN0eWxlIiwidGl0bGVTcGFjaW5nIiwidGl0bGVNYXJnaW5Cb3R0b20iLCJ0aXRsZUZvbnRDb2xvciIsInRpdGxlQWxpZ24iLCJib2R5U3BhY2luZyIsImJvZHlGb250Q29sb3IiLCJib2R5QWxpZ24iLCJmb290ZXJGb250U3R5bGUiLCJmb290ZXJTcGFjaW5nIiwiZm9vdGVyTWFyZ2luVG9wIiwiZm9vdGVyRm9udENvbG9yIiwiZm9vdGVyQWxpZ24iLCJ5UGFkZGluZyIsInhQYWRkaW5nIiwiY2FyZXRQYWRkaW5nIiwiY2FyZXRTaXplIiwiY29ybmVyUmFkaXVzIiwibXVsdGlLZXlCYWNrZ3JvdW5kIiwiZGlzcGxheUNvbG9ycyIsImJlZm9yZVRpdGxlIiwidG9vbHRpcEl0ZW1zIiwibGFiZWxDb3VudCIsImFmdGVyVGl0bGUiLCJiZWZvcmVCb2R5IiwiYmVmb3JlTGFiZWwiLCJsYWJlbENvbG9yIiwiYWN0aXZlRWxlbWVudCIsImxhYmVsVGV4dENvbG9yIiwiYWZ0ZXJMYWJlbCIsImFmdGVyQm9keSIsImJlZm9yZUZvb3RlciIsImZvb3RlciIsImFmdGVyRm9vdGVyIiwicG9zaXRpb25lcnMiLCJhdmVyYWdlIiwibGVuIiwicG9zIiwiZXZlbnRQb3NpdGlvbiIsIm5lYXJlc3RFbGVtZW50IiwiZCIsInRwIiwibWVyZ2VPcGFjaXR5IiwiY29sb3JTdHJpbmciLCJvcGFjaXR5IiwicHVzaE9yQ29uY2F0IiwidG9QdXNoIiwic3BsaXROZXdsaW5lcyIsIlN0cmluZyIsInNwbGl0IiwiY3JlYXRlVG9vbHRpcEl0ZW0iLCJnZXRCYXNlTW9kZWwiLCJ0b29sdGlwT3B0cyIsInhBbGlnbiIsInlBbGlnbiIsIl9ib2R5Rm9udEZhbWlseSIsImJvZHlGb250RmFtaWx5IiwiX2JvZHlGb250U3R5bGUiLCJib2R5Rm9udFN0eWxlIiwiX2JvZHlBbGlnbiIsImJvZHlGb250U2l6ZSIsIl90aXRsZUZvbnRGYW1pbHkiLCJ0aXRsZUZvbnRGYW1pbHkiLCJfdGl0bGVGb250U3R5bGUiLCJ0aXRsZUZvbnRTaXplIiwiX3RpdGxlQWxpZ24iLCJfZm9vdGVyRm9udEZhbWlseSIsImZvb3RlckZvbnRGYW1pbHkiLCJfZm9vdGVyRm9udFN0eWxlIiwiZm9vdGVyRm9udFNpemUiLCJfZm9vdGVyQWxpZ24iLCJsZWdlbmRDb2xvckJhY2tncm91bmQiLCJnZXRUb29sdGlwU2l6ZSIsImJvZHkiLCJjb21iaW5lZEJvZHlMZW5ndGgiLCJib2R5SXRlbSIsImJlZm9yZSIsImxpbmVzIiwiYWZ0ZXIiLCJ0aXRsZUxpbmVDb3VudCIsImZvb3RlckxpbmVDb3VudCIsIndpZHRoUGFkZGluZyIsIm1heExpbmVXaWR0aCIsImRldGVybWluZUFsaWdubWVudCIsImxmIiwicmYiLCJvbGYiLCJvcmYiLCJ5ZiIsIm1pZFgiLCJtaWRZIiwiZ2V0QmFja2dyb3VuZFBvaW50Iiwidm0iLCJhbGlnbm1lbnQiLCJwYWRkaW5nQW5kU2l6ZSIsInJhZGl1c0FuZFBhZGRpbmciLCJnZXRCZWZvcmVBZnRlckJvZHlMaW5lcyIsIl9sYXN0QWN0aXZlIiwiZ2V0VGl0bGUiLCJnZXRCZWZvcmVCb2R5IiwiZ2V0Qm9keSIsImJvZHlJdGVtcyIsImdldEFmdGVyQm9keSIsImdldEZvb3RlciIsImV4aXN0aW5nTW9kZWwiLCJfYWN0aXZlIiwiYmFja2dyb3VuZFBvaW50IiwidG9vbHRpcFNpemUiLCJjYXJldFgiLCJjYXJldFkiLCJsYWJlbENvbG9ycyIsImxhYmVsVGV4dENvbG9ycyIsIl9ldmVudFBvc2l0aW9uIiwiaXRlbVNvcnQiLCJkYXRhUG9pbnRzIiwiZHJhd0NhcmV0IiwidG9vbHRpcFBvaW50IiwiY2FyZXRQb3NpdGlvbiIsImdldENhcmV0UG9zaXRpb24iLCJ4MyIsInkzIiwicHRYIiwicHRZIiwidG1wIiwiZHJhd1RpdGxlIiwiZHJhd0JvZHkiLCJ4TGluZVBhZGRpbmciLCJmaWxsTGluZU9mVGV4dCIsImRyYXdDb2xvckJveGVzIiwidGV4dENvbG9yIiwiZmlsbFJlY3QiLCJzdHJva2VSZWN0IiwiZHJhd0Zvb3RlciIsImRyYXdCYWNrZ3JvdW5kIiwicXVhZHJhdGljQ3VydmVUbyIsImNsb3NlUGF0aCIsImhhc1Rvb2x0aXBDb250ZW50IiwiaW5MYWJlbFJhbmdlIiwiY2hhcnRYIiwiY2hhcnRZIiwicG9pbnRSZWxhdGl2ZVBvc2l0aW9uIiwiYmV0d2VlbkFuZ2xlcyIsIndpdGhpblJhZGl1cyIsImhhbGZBbmdsZSIsImhhbGZSYWRpdXMiLCJjZW50cmVBbmdsZSIsInJhbmdlRnJvbUNlbnRyZSIsInNBIiwiZUEiLCJsaW5lSm9pbiIsImdsb2JhbE9wdGlvbkxpbmVFbGVtZW50cyIsImxhc3REcmF3bkluZGV4IiwiY3VycmVudFZNIiwibGluZUNhcCIsInhSYW5nZSIsInlSYW5nZSIsImVyck1hcmdpbiIsImRyYXdQb2ludCIsImlzVmVydGljYWwiLCJnZXRCYXJCb3VuZHMiLCJoYWxmV2lkdGgiLCJoYWxmSGVpZ2h0Iiwic2lnblgiLCJzaWduWSIsImJhclNpemUiLCJoYWxmU3Ryb2tlIiwiYm9yZGVyTGVmdCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyVG9wIiwiYm9yZGVyQm90dG9tIiwiY29ybmVycyIsImJvcmRlcnMiLCJzdGFydENvcm5lciIsImNvcm5lckF0IiwiY29ybmVyIiwiYm91bmRzIiwiY2xlYXJSZWN0Iiwicm91bmRlZFJlY3QiLCJhcmNUbyIsInJlY3QiLCJlZGdlTGVuZ3RoIiwieE9mZnNldCIsInlPZmZzZXQiLCJkcmF3SW1hZ2UiLCJTUVJUMiIsImxlZnRYIiwidG9wWSIsInNpZGVTaXplIiwiY2xpcCIsImZsaXAiLCJiZXppZXJDdXJ2ZVRvIiwiZHJhd1JvdW5kZWRSZWN0YW5nbGUiLCJpc09iamVjdCIsImRlZmF1bHRWYWx1ZSIsImZuIiwidGhpc0FyZyIsImxvb3BhYmxlIiwiYTAiLCJhMSIsImtsZW4iLCJfbWVyZ2VySWYiLCJtZXJnZUlmIiwic291cmNlcyIsInNldEZuIiwiZXh0ZW5zaW9ucyIsIkNoYXJ0RWxlbWVudCIsImNvbnN0cnVjdG9yIiwiU3Vycm9nYXRlIiwiX19zdXBlcl9fIiwiY2FsbENhbGxiYWNrIiwiZnJvbUluZGV4IiwiZ2V0VmFsdWVPckRlZmF1bHQiLCJnZXRWYWx1ZUF0SW5kZXhPckRlZmF1bHQiLCJlYXNlSW5RdWFkIiwiZWFzZU91dFF1YWQiLCJlYXNlSW5PdXRRdWFkIiwiZWFzZUluQ3ViaWMiLCJlYXNlT3V0Q3ViaWMiLCJlYXNlSW5PdXRDdWJpYyIsImVhc2VJblF1YXJ0IiwiZWFzZU91dFF1YXJ0IiwiZWFzZUluT3V0UXVhcnQiLCJlYXNlSW5RdWludCIsImVhc2VPdXRRdWludCIsImVhc2VJbk91dFF1aW50IiwiZWFzZUluU2luZSIsImVhc2VPdXRTaW5lIiwiZWFzZUluT3V0U2luZSIsImVhc2VJbkV4cG8iLCJlYXNlT3V0RXhwbyIsImVhc2VJbk91dEV4cG8iLCJlYXNlSW5DaXJjIiwiZWFzZU91dENpcmMiLCJlYXNlSW5PdXRDaXJjIiwiZWFzZUluRWxhc3RpYyIsImFzaW4iLCJlYXNlT3V0RWxhc3RpYyIsImVhc2VJbk91dEVsYXN0aWMiLCJlYXNlSW5CYWNrIiwiZWFzZU91dEJhY2siLCJlYXNlSW5PdXRCYWNrIiwiZWFzZUluQm91bmNlIiwiZWFzZU91dEJvdW5jZSIsImVhc2VJbk91dEJvdW5jZSIsImVhc2luZ0VmZmVjdHMiLCJtYXRjaGVzIiwiaW5wdXRzIiwiZ2V0Q29udGV4dCIsIkVYUEFORE9fS0VZIiwiQ1NTX1BSRUZJWCIsIkNTU19SRU5ERVJfTU9OSVRPUiIsIkNTU19SRU5ERVJfQU5JTUFUSU9OIiwiQU5JTUFUSU9OX1NUQVJUX0VWRU5UUyIsIkVWRU5UX1RZUEVTIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmRvd24iLCJwb2ludGVybW92ZSIsInBvaW50ZXJ1cCIsInBvaW50ZXJsZWF2ZSIsInBvaW50ZXJvdXQiLCJyZWFkVXNlZFNpemUiLCJpbml0Q2FudmFzIiwicmVuZGVySGVpZ2h0IiwiZ2V0QXR0cmlidXRlIiwicmVuZGVyV2lkdGgiLCJpbml0aWFsIiwiZGlzcGxheVdpZHRoIiwiZGlzcGxheUhlaWdodCIsInN1cHBvcnRzRXZlbnRMaXN0ZW5lck9wdGlvbnMiLCJzdXBwb3J0cyIsImV2ZW50TGlzdGVuZXJPcHRpb25zIiwicGFzc2l2ZSIsImNyZWF0ZUV2ZW50IiwibmF0aXZlRXZlbnQiLCJmcm9tTmF0aXZlRXZlbnQiLCJldmVudCIsInRocm90dGxlZCIsInRpY2tpbmciLCJjcmVhdGVSZXNpemVyIiwicmVzaXplciIsImNyZWF0ZUVsZW1lbnQiLCJjbHMiLCJtYXhTaXplIiwiY3NzVGV4dCIsImNsYXNzTmFtZSIsImlubmVySFRNTCIsImV4cGFuZCIsImNoaWxkTm9kZXMiLCJzaHJpbmsiLCJfcmVzZXQiLCJzY3JvbGxMZWZ0Iiwic2Nyb2xsVG9wIiwib25TY3JvbGwiLCJiaW5kIiwid2F0Y2hGb3JSZW5kZXIiLCJleHBhbmRvIiwicHJveHkiLCJyZW5kZXJQcm94eSIsImFuaW1hdGlvbk5hbWUiLCJyZWZsb3ciLCJvZmZzZXRQYXJlbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJ1bndhdGNoRm9yUmVuZGVyIiwicmVtb3ZlIiwiYWRkUmVzaXplTGlzdGVuZXIiLCJpbnNlcnRCZWZvcmUiLCJmaXJzdENoaWxkIiwicmVtb3ZlUmVzaXplTGlzdGVuZXIiLCJyZW1vdmVDaGlsZCIsImluamVjdENTUyIsImNzcyIsIl9zdHlsZSIsInNldEF0dHJpYnV0ZSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsIl9lbmFibGVkIiwia2V5ZnJhbWVzIiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW1vdmVBdHRyaWJ1dGUiLCJwcm94aWVzIiwiYWRkRXZlbnQiLCJyZW1vdmVFdmVudCIsImJhc2ljIiwiZG9tIiwiaW1wbGVtZW50YXRpb24iLCJmaWxsZXIiLCJwcm9wYWdhdGUiLCJtYXBwZXJzIiwidmlzaWJsZSIsImJvdW5kYXJ5IiwiZGVjb2RlRmlsbCIsImNvbXB1dGVCb3VuZGFyeSIsInNjYWxlQm90dG9tIiwic2NhbGVUb3AiLCJzY2FsZVplcm8iLCJnZXRCYXNlUG9zaXRpb24iLCJyZXNvbHZlVGFyZ2V0IiwidmlzaXRlZCIsImNyZWF0ZU1hcHBlciIsImlzRHJhd2FibGUiLCJkcmF3QXJlYSIsImN1cnZlMCIsImN1cnZlMSIsImxlbjAiLCJsZW4xIiwiZG9GaWxsIiwibWFwcGVyIiwic3BhbiIsInAwIiwicDEiLCJkMCIsImQxIiwiYWZ0ZXJEYXRhc2V0c1VwZGF0ZSIsIiRmaWxsZXIiLCJiZWZvcmVEYXRhc2V0RHJhdyIsImNpIiwiYm94V2lkdGgiLCJsaW5lRGFzaCIsImdldEJveFdpZHRoIiwibGFiZWxPcHRzIiwidXNlUG9pbnRTdHlsZSIsImxlZ2VuZEhpdEJveGVzIiwiZG91Z2hudXRNb2RlIiwiYmVmb3JlQnVpbGRMYWJlbHMiLCJidWlsZExhYmVscyIsImFmdGVyQnVpbGRMYWJlbHMiLCJsZWdlbmRJdGVtcyIsImdsb2JhbERlZmF1bHQiLCJsYWJlbEZvbnQiLCJoaXRib3hlcyIsImxpbmVXaWR0aHMiLCJ0b3RhbEhlaWdodCIsInZQYWRkaW5nIiwiY29sdW1uV2lkdGhzIiwidG90YWxXaWR0aCIsImN1cnJlbnRDb2xXaWR0aCIsImN1cnJlbnRDb2xIZWlnaHQiLCJpdGVtSGVpZ2h0IiwiaXRlbVdpZHRoIiwibGluZURlZmF1bHQiLCJsZWdlbmRXaWR0aCIsImN1cnNvciIsImRyYXdMZWdlbmRCb3giLCJpc0xpbmVXaWR0aFplcm8iLCJvZmZTZXQiLCJoYWxmRm9udFNpemUiLCJ4TGVmdCIsInlNaWRkbGUiLCJsaCIsImhpdEJveCIsImNyZWF0ZU5ld0xlZ2VuZEFuZEF0dGFjaCIsImxlZ2VuZE9wdHMiLCJiZWZvcmVJbml0IiwiYWZ0ZXJFdmVudCIsInRleHRTaXplIiwidGl0bGVGb250IiwidGl0bGVYIiwidGl0bGVZIiwiY3JlYXRlTmV3VGl0bGVCbG9ja0FuZEF0dGFjaCIsInRpdGxlT3B0cyIsInRpdGxlQmxvY2siLCJkZWZhdWx0Q29uZmlnIiwiRGF0YXNldFNjYWxlIiwiZ2V0TGFiZWxzIiwieExhYmVscyIsInlMYWJlbHMiLCJtaW5JbmRleCIsIm1heEluZGV4Iiwib2Zmc2V0QW10IiwidmFsdWVDYXRlZ29yeSIsInZhbHVlV2lkdGgiLCJ3aWR0aE9mZnNldCIsInZhbHVlSGVpZ2h0IiwiaGVpZ2h0T2Zmc2V0IiwiaG9yeiIsInZhbHVlRGltZW5zaW9uIiwiTGluZWFyU2NhbGUiLCJMaW5lYXJTY2FsZUJhc2UiLCJERUZBVUxUX01JTiIsIkRFRkFVTFRfTUFYIiwiSURNYXRjaGVzIiwiaGFzU3RhY2tzIiwidmFsdWVzUGVyU3RhY2siLCJwb3NpdGl2ZVZhbHVlcyIsIm5lZ2F0aXZlVmFsdWVzIiwicmVsYXRpdmVQb2ludHMiLCJ2YWx1ZXNGb3JUeXBlIiwibWluVmFsIiwibWF4VmFsIiwiaGFuZGxlVGlja1JhbmdlT3B0aW9ucyIsImdldFRpY2tMaW1pdCIsImNlaWwiLCJ0aWNrRm9udFNpemUiLCJoYW5kbGVEaXJlY3Rpb25hbENoYW5nZXMiLCJpbm5lckRpbWVuc2lvbiIsInRpY2tzQXNOdW1iZXJzIiwiZ2VuZXJhdGVUaWNrcyIsImdlbmVyYXRpb25PcHRpb25zIiwiZGF0YVJhbmdlIiwiZmFjdG9yIiwicHJlY2lzaW9uIiwic3BhY2luZyIsInN0ZXBTaXplIiwibmljZVJhbmdlIiwibmljZU1pbiIsIm5pY2VNYXgiLCJudW1TcGFjZXMiLCJtaW5TaWduIiwibWF4U2lnbiIsInNldE1pbiIsInN1Z2dlc3RlZE1pbiIsInNldE1heCIsInN1Z2dlc3RlZE1heCIsIm51bWVyaWNHZW5lcmF0b3JPcHRpb25zIiwiZml4ZWRTdGVwU2l6ZSIsInRpY2tWYWwiLCJlbmRFeHAiLCJlbmRTaWduaWZpY2FuZCIsImV4cCIsInNpZ25pZmljYW5kIiwibWluTm90WmVybyIsImxhc3RUaWNrIiwiTG9nYXJpdGhtaWNTY2FsZSIsInRpY2tWYWx1ZXMiLCJfZ2V0Rmlyc3RUaWNrVmFsdWUiLCJmaXJzdFRpY2tWYWx1ZSIsImFuaW1hdGUiLCJzaG93TGFiZWxCYWNrZHJvcCIsImJhY2tkcm9wQ29sb3IiLCJiYWNrZHJvcFBhZGRpbmdZIiwiYmFja2Ryb3BQYWRkaW5nWCIsImdldFZhbHVlQ291bnQiLCJnZXRQb2ludExhYmVsRm9udE9wdGlvbnMiLCJwb2ludExhYmVsT3B0aW9ucyIsIm1lYXN1cmVMYWJlbFNpemUiLCJkZXRlcm1pbmVMaW1pdHMiLCJmaXRXaXRoUG9pbnRMYWJlbHMiLCJwbEZvbnQiLCJsYXJnZXN0UG9zc2libGVSYWRpdXMiLCJmdXJ0aGVzdExpbWl0cyIsImZ1cnRoZXN0QW5nbGVzIiwiX3BvaW50TGFiZWxTaXplcyIsInZhbHVlQ291bnQiLCJnZXRQb2ludFBvc2l0aW9uIiwiZ2V0SW5kZXhBbmdsZSIsImhMaW1pdHMiLCJ2TGltaXRzIiwic2V0UmVkdWN0aW9ucyIsImRyYXdpbmdBcmVhIiwic2V0Q2VudGVyUG9pbnQiLCJnZXRUZXh0QWxpZ25Gb3JBbmdsZSIsImFkanVzdFBvaW50UG9zaXRpb25Gb3JMYWJlbEhlaWdodCIsImRyYXdQb2ludExhYmVscyIsImFuZ2xlTGluZU9wdHMiLCJwb2ludExhYmVsT3B0cyIsIm91dGVyRGlzdGFuY2UiLCJvdXRlclBvc2l0aW9uIiwicG9pbnRMYWJlbFBvc2l0aW9uIiwicG9pbnRMYWJlbEZvbnRDb2xvciIsImRyYXdSYWRpdXNMaW5lIiwibnVtYmVyT3JaZXJvIiwicGFyYW0iLCJMaW5lYXJSYWRpYWxTY2FsZSIsInJhZGl1c1JlZHVjdGlvbkxlZnQiLCJyYWRpdXNSZWR1Y3Rpb25SaWdodCIsInJhZGl1c1JlZHVjdGlvblRvcCIsInJhZGl1c1JlZHVjdGlvbkJvdHRvbSIsImxlZnRNb3ZlbWVudCIsInJpZ2h0TW92ZW1lbnQiLCJ0b3BNb3ZlbWVudCIsImJvdHRvbU1vdmVtZW50IiwibWF4UmlnaHQiLCJtYXhMZWZ0IiwibWF4VG9wIiwibWF4Qm90dG9tIiwiYW5nbGVNdWx0aXBsaWVyIiwic3RhcnRBbmdsZVJhZGlhbnMiLCJzY2FsaW5nRmFjdG9yIiwiZGlzdGFuY2VGcm9tQ2VudGVyIiwidGhpc0FuZ2xlIiwidGlja0ZvbnRTdHlsZSIsInRpY2tGb250RmFtaWx5IiwidGlja0xhYmVsRm9udCIsInlDZW50ZXJPZmZzZXQiLCJtb21lbnQiLCJNSU5fSU5URUdFUiIsIk1JTl9TQUZFX0lOVEVHRVIiLCJNQVhfSU5URUdFUiIsIk1BWF9TQUZFX0lOVEVHRVIiLCJJTlRFUlZBTFMiLCJtaWxsaXNlY29uZCIsImNvbW1vbiIsInN0ZXBzIiwic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIndlZWsiLCJtb250aCIsInF1YXJ0ZXIiLCJ5ZWFyIiwiVU5JVFMiLCJzb3J0ZXIiLCJhcnJheVVuaXF1ZSIsImhhc2giLCJvdXQiLCJidWlsZExvb2t1cFRhYmxlIiwidGltZXN0YW1wcyIsImRpc3RyaWJ1dGlvbiIsInRpbWUiLCJ0YWJsZSIsImxvb2t1cCIsImxvIiwibWlkIiwiaTAiLCJpMSIsInNrZXkiLCJ0a2V5IiwibW9tZW50aWZ5IiwicGFyc2VyIiwiZm9ybWF0IiwicGFyc2UiLCJpbnB1dCIsInN0YXJ0T2YiLCJ2YWx1ZU9mIiwiZGV0ZXJtaW5lU3RlcFNpemUiLCJ1bml0IiwiY2FwYWNpdHkiLCJpbnRlcnZhbCIsIm1pbGxpc2Vjb25kcyIsImRldGVybWluZVVuaXRGb3JBdXRvVGlja3MiLCJtaW5Vbml0IiwiZGV0ZXJtaW5lVW5pdEZvckZvcm1hdHRpbmciLCJkaWZmIiwiYXMiLCJkZXRlcm1pbmVNYWpvclVuaXQiLCJnZW5lcmF0ZSIsInRpbWVPcHRzIiwidW5pdFN0ZXBTaXplIiwid2Vla2RheSIsImlzb1dlZWtkYXkiLCJtYWpvclRpY2tzRW5hYmxlZCIsImZpcnN0IiwiY29tcHV0ZU9mZnNldHMiLCJ1cHBlciIsImxvd2VyIiwidGlja3NGcm9tVGltZXN0YW1wcyIsIm1ham9yVW5pdCIsImRldGVybWluZUxhYmVsRm9ybWF0IiwibW9tZW50RGF0ZSIsImhhc1RpbWUiLCJkaXNwbGF5Rm9ybWF0IiwiZGlzcGxheUZvcm1hdHMiLCJUaW1lU2NhbGUiLCJ3YXJuIiwidGltZXN0YW1wIiwiZW5kT2YiLCJfaG9yaXpvbnRhbCIsIl90YWJsZSIsIl90aW1lc3RhbXBzIiwiZ2V0TGFiZWxDYXBhY2l0eSIsIl91bml0IiwiX21ham9yVW5pdCIsIl9vZmZzZXRzIiwiX2xhYmVsRm9ybWF0IiwidG9vbHRpcEZvcm1hdCIsInRpY2tGb3JtYXRGdW5jdGlvbiIsImZvcm1hdE92ZXJyaWRlIiwiZm9ybWF0cyIsIm1pbm9yRm9ybWF0IiwibWFqb3JGb3JtYXQiLCJtYWpvclRpbWUiLCJtYWpvclRpY2tPcHRzIiwiZm9ybWF0dGVyIiwiZ2V0UGl4ZWxGb3JPZmZzZXQiLCJnZXRMYWJlbFdpZHRoIiwidGlja3NPcHRzIiwidGlja0xhYmVsV2lkdGgiLCJleGFtcGxlVGltZSIsImV4YW1wbGVMYWJlbCJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7Ozs7O0FBU0EsQ0FBQyxVQUFTQSxDQUFULEVBQVc7QUFBQyxLQUFHLGdDQUFPQyxPQUFQLE9BQWlCLFFBQWpCLElBQTJCLE9BQU9DLE1BQVAsS0FBZ0IsV0FBOUMsRUFBMEQ7QUFBQ0EsU0FBT0QsT0FBUCxHQUFlRCxHQUFmO0FBQW1CLEVBQTlFLE1BQW1GLElBQUcsSUFBSCxFQUEwQztBQUFDRyxtQ0FBTyxFQUFQLG9DQUFVSCxDQUFWO0FBQUE7QUFBQTtBQUFBO0FBQWEsRUFBeEQsTUFBNEQ7QUFBQyxNQUFJSSxDQUFKLENBQU0sSUFBRyxPQUFPQyxNQUFQLEtBQWdCLFdBQW5CLEVBQStCO0FBQUNELE9BQUVDLE1BQUY7QUFBUyxHQUF6QyxNQUE4QyxJQUFHLE9BQU9DLE1BQVAsS0FBZ0IsV0FBbkIsRUFBK0I7QUFBQ0YsT0FBRUUsTUFBRjtBQUFTLEdBQXpDLE1BQThDLElBQUcsT0FBT0MsSUFBUCxLQUFjLFdBQWpCLEVBQTZCO0FBQUNILE9BQUVHLElBQUY7QUFBTyxHQUFyQyxNQUF5QztBQUFDSCxPQUFFLElBQUY7QUFBTyxLQUFFSSxLQUFGLEdBQVVSLEdBQVY7QUFBYztBQUFDLENBQS9ULEVBQWlVLFlBQVU7QUFBQyxLQUFJRyxNQUFKLEVBQVdELE1BQVgsRUFBa0JELE9BQWxCLENBQTBCLE9BQVEsWUFBVTtBQUFDLFdBQVNRLENBQVQsQ0FBV0MsQ0FBWCxFQUFhQyxDQUFiLEVBQWVDLENBQWYsRUFBaUI7QUFBQyxZQUFTQyxDQUFULENBQVdDLENBQVgsRUFBYWQsQ0FBYixFQUFlO0FBQUMsUUFBRyxDQUFDVyxFQUFFRyxDQUFGLENBQUosRUFBUztBQUFDLFNBQUcsQ0FBQ0osRUFBRUksQ0FBRixDQUFKLEVBQVM7QUFBQyxVQUFJQyxJQUFFLGNBQVksT0FBT0MsT0FBbkIsSUFBNEJBLE9BQWxDLENBQTBDLElBQUcsQ0FBQ2hCLENBQUQsSUFBSWUsQ0FBUCxFQUFTLE9BQU9BLE9BQUNBLENBQUNELENBQUYsRUFBSSxDQUFDLENBQUwsQ0FBUCxDQUFlLElBQUdHLENBQUgsRUFBSyxPQUFPQSxFQUFFSCxDQUFGLEVBQUksQ0FBQyxDQUFMLENBQVAsQ0FBZSxJQUFJSSxJQUFFLElBQUlDLEtBQUosQ0FBVSx5QkFBdUJMLENBQXZCLEdBQXlCLEdBQW5DLENBQU4sQ0FBOEMsTUFBTUksRUFBRUUsSUFBRixHQUFPLGtCQUFQLEVBQTBCRixDQUFoQztBQUFrQyxVQUFJRyxJQUFFVixFQUFFRyxDQUFGLElBQUssRUFBQ2IsU0FBUSxFQUFULEVBQVgsQ0FBd0JTLEVBQUVJLENBQUYsRUFBSyxDQUFMLEVBQVFRLElBQVIsQ0FBYUQsRUFBRXBCLE9BQWYsRUFBdUIsVUFBU1EsQ0FBVCxFQUFXO0FBQUMsVUFBSUUsSUFBRUQsRUFBRUksQ0FBRixFQUFLLENBQUwsRUFBUUwsQ0FBUixDQUFOLENBQWlCLE9BQU9JLEVBQUVGLEtBQUdGLENBQUwsQ0FBUDtBQUFlLE1BQW5FLEVBQW9FWSxDQUFwRSxFQUFzRUEsRUFBRXBCLE9BQXhFLEVBQWdGUSxDQUFoRixFQUFrRkMsQ0FBbEYsRUFBb0ZDLENBQXBGLEVBQXNGQyxDQUF0RjtBQUF5RixZQUFPRCxFQUFFRyxDQUFGLEVBQUtiLE9BQVo7QUFBb0IsU0FBSSxJQUFJZ0IsSUFBRSxjQUFZLE9BQU9ELE9BQW5CLElBQTRCQSxPQUFsQyxFQUEwQ0YsSUFBRSxDQUFoRCxFQUFrREEsSUFBRUYsRUFBRVcsTUFBdEQsRUFBNkRULEdBQTdEO0FBQWlFRCxNQUFFRCxFQUFFRSxDQUFGLENBQUY7QUFBakUsSUFBeUUsT0FBT0QsQ0FBUDtBQUFTLFVBQU9KLENBQVA7QUFBUyxFQUF4YyxHQUE0YyxFQUFDLEdBQUUsQ0FBQyxVQUFTTyxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0MsQ0FFNTFCLENBRjJ6QixFQUUxekIsRUFGMHpCLENBQUgsRUFFbnpCLEdBQUUsQ0FBQyxVQUFTZSxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDekM7QUFDQSxPQUFJdUIsYUFBYVIsUUFBUSxDQUFSLENBQWpCOztBQUVBZCxVQUFPRCxPQUFQLEdBQWlCO0FBQ2R3QixhQUFTQSxPQURLO0FBRWRDLGFBQVNBLE9BRks7QUFHZEMsWUFBUUEsTUFITTtBQUlkQyxZQUFRQSxNQUpNO0FBS2RDLFlBQVFBLE1BTE07QUFNZEMsY0FBVUEsUUFOSTs7QUFRZEMsZUFBV0EsU0FSRztBQVNkQyxlQUFXQSxTQVRHO0FBVWRDLGdCQUFZQSxVQVZFO0FBV2RDLG1CQUFlQSxhQVhEO0FBWWRDLG9CQUFnQkEsY0FaRjtBQWFkQyxlQUFXQSxTQWJHO0FBY2RDLGdCQUFZQSxVQWRFO0FBZWRDLGVBQVdBLFNBZkc7QUFnQmRDLGFBQVNBO0FBaEJLLElBQWpCOztBQW1CQSxZQUFTZCxPQUFULENBQWlCZSxNQUFqQixFQUF5QjtBQUN0QixRQUFJLENBQUNBLE1BQUwsRUFBYTtBQUNWO0FBQ0Y7QUFDRCxRQUFJQyxPQUFRLHNCQUFaO0FBQUEsUUFDSUMsTUFBTyxzQkFEWDtBQUFBLFFBRUlDLE9BQU8sMEZBRlg7QUFBQSxRQUdJQyxNQUFNLDRHQUhWO0FBQUEsUUFJSUwsVUFBVSxPQUpkOztBQU1BLFFBQUlNLE1BQU0sQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsQ0FBVjtBQUFBLFFBQ0kzQixJQUFJLENBRFI7QUFBQSxRQUVJNEIsUUFBUU4sT0FBT00sS0FBUCxDQUFhTCxJQUFiLENBRlo7QUFHQSxRQUFJSyxLQUFKLEVBQVc7QUFDUkEsYUFBUUEsTUFBTSxDQUFOLENBQVI7QUFDQSxVQUFLLElBQUloQyxJQUFJLENBQWIsRUFBZ0JBLElBQUkrQixJQUFJdEIsTUFBeEIsRUFBZ0NULEdBQWhDLEVBQXFDO0FBQ2xDK0IsVUFBSS9CLENBQUosSUFBU2lDLFNBQVNELE1BQU1oQyxDQUFOLElBQVdnQyxNQUFNaEMsQ0FBTixDQUFwQixFQUE4QixFQUE5QixDQUFUO0FBQ0Y7QUFDSCxLQUxELE1BTUssSUFBSWdDLFFBQVFOLE9BQU9NLEtBQVAsQ0FBYUosR0FBYixDQUFaLEVBQStCO0FBQ2pDSSxhQUFRQSxNQUFNLENBQU4sQ0FBUjtBQUNBLFVBQUssSUFBSWhDLElBQUksQ0FBYixFQUFnQkEsSUFBSStCLElBQUl0QixNQUF4QixFQUFnQ1QsR0FBaEMsRUFBcUM7QUFDbEMrQixVQUFJL0IsQ0FBSixJQUFTaUMsU0FBU0QsTUFBTUUsS0FBTixDQUFZbEMsSUFBSSxDQUFoQixFQUFtQkEsSUFBSSxDQUFKLEdBQVEsQ0FBM0IsQ0FBVCxFQUF3QyxFQUF4QyxDQUFUO0FBQ0Y7QUFDSCxLQUxJLE1BTUEsSUFBSWdDLFFBQVFOLE9BQU9NLEtBQVAsQ0FBYUgsSUFBYixDQUFaLEVBQWdDO0FBQ2xDLFVBQUssSUFBSTdCLElBQUksQ0FBYixFQUFnQkEsSUFBSStCLElBQUl0QixNQUF4QixFQUFnQ1QsR0FBaEMsRUFBcUM7QUFDbEMrQixVQUFJL0IsQ0FBSixJQUFTaUMsU0FBU0QsTUFBTWhDLElBQUksQ0FBVixDQUFULENBQVQ7QUFDRjtBQUNESSxTQUFJK0IsV0FBV0gsTUFBTSxDQUFOLENBQVgsQ0FBSjtBQUNGLEtBTEksTUFNQSxJQUFJQSxRQUFRTixPQUFPTSxLQUFQLENBQWFGLEdBQWIsQ0FBWixFQUErQjtBQUNqQyxVQUFLLElBQUk5QixJQUFJLENBQWIsRUFBZ0JBLElBQUkrQixJQUFJdEIsTUFBeEIsRUFBZ0NULEdBQWhDLEVBQXFDO0FBQ2xDK0IsVUFBSS9CLENBQUosSUFBU29DLEtBQUtDLEtBQUwsQ0FBV0YsV0FBV0gsTUFBTWhDLElBQUksQ0FBVixDQUFYLElBQTJCLElBQXRDLENBQVQ7QUFDRjtBQUNESSxTQUFJK0IsV0FBV0gsTUFBTSxDQUFOLENBQVgsQ0FBSjtBQUNGLEtBTEksTUFNQSxJQUFJQSxRQUFRTixPQUFPTSxLQUFQLENBQWFQLE9BQWIsQ0FBWixFQUFtQztBQUNyQyxTQUFJTyxNQUFNLENBQU4sS0FBWSxhQUFoQixFQUErQjtBQUM1QixhQUFPLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBTyxDQUFQLEVBQVUsQ0FBVixDQUFQO0FBQ0Y7QUFDREQsV0FBTXJCLFdBQVdzQixNQUFNLENBQU4sQ0FBWCxDQUFOO0FBQ0EsU0FBSSxDQUFDRCxHQUFMLEVBQVU7QUFDUDtBQUNGO0FBQ0g7O0FBRUQsU0FBSyxJQUFJL0IsSUFBSSxDQUFiLEVBQWdCQSxJQUFJK0IsSUFBSXRCLE1BQXhCLEVBQWdDVCxHQUFoQyxFQUFxQztBQUNsQytCLFNBQUkvQixDQUFKLElBQVNzQyxNQUFNUCxJQUFJL0IsQ0FBSixDQUFOLEVBQWMsQ0FBZCxFQUFpQixHQUFqQixDQUFUO0FBQ0Y7QUFDRCxRQUFJLENBQUNJLENBQUQsSUFBTUEsS0FBSyxDQUFmLEVBQWtCO0FBQ2ZBLFNBQUksQ0FBSjtBQUNGLEtBRkQsTUFHSztBQUNGQSxTQUFJa0MsTUFBTWxDLENBQU4sRUFBUyxDQUFULEVBQVksQ0FBWixDQUFKO0FBQ0Y7QUFDRDJCLFFBQUksQ0FBSixJQUFTM0IsQ0FBVDtBQUNBLFdBQU8yQixHQUFQO0FBQ0Y7O0FBRUQsWUFBU25CLE9BQVQsQ0FBaUJjLE1BQWpCLEVBQXlCO0FBQ3RCLFFBQUksQ0FBQ0EsTUFBTCxFQUFhO0FBQ1Y7QUFDRjtBQUNELFFBQUlhLE1BQU0sMEdBQVY7QUFDQSxRQUFJUCxRQUFRTixPQUFPTSxLQUFQLENBQWFPLEdBQWIsQ0FBWjtBQUNBLFFBQUlQLEtBQUosRUFBVztBQUNSLFNBQUlRLFFBQVFMLFdBQVdILE1BQU0sQ0FBTixDQUFYLENBQVo7QUFDQSxTQUFJUyxJQUFJSCxNQUFNTCxTQUFTRCxNQUFNLENBQU4sQ0FBVCxDQUFOLEVBQTBCLENBQTFCLEVBQTZCLEdBQTdCLENBQVI7QUFBQSxTQUNJVSxJQUFJSixNQUFNSCxXQUFXSCxNQUFNLENBQU4sQ0FBWCxDQUFOLEVBQTRCLENBQTVCLEVBQStCLEdBQS9CLENBRFI7QUFBQSxTQUVJVyxJQUFJTCxNQUFNSCxXQUFXSCxNQUFNLENBQU4sQ0FBWCxDQUFOLEVBQTRCLENBQTVCLEVBQStCLEdBQS9CLENBRlI7QUFBQSxTQUdJNUIsSUFBSWtDLE1BQU1NLE1BQU1KLEtBQU4sSUFBZSxDQUFmLEdBQW1CQSxLQUF6QixFQUFnQyxDQUFoQyxFQUFtQyxDQUFuQyxDQUhSO0FBSUEsWUFBTyxDQUFDQyxDQUFELEVBQUlDLENBQUosRUFBT0MsQ0FBUCxFQUFVdkMsQ0FBVixDQUFQO0FBQ0Y7QUFDSDs7QUFFRCxZQUFTVyxNQUFULENBQWdCVyxNQUFoQixFQUF3QjtBQUNyQixRQUFJLENBQUNBLE1BQUwsRUFBYTtBQUNWO0FBQ0Y7QUFDRCxRQUFJbUIsTUFBTSx3R0FBVjtBQUNBLFFBQUliLFFBQVFOLE9BQU9NLEtBQVAsQ0FBYWEsR0FBYixDQUFaO0FBQ0EsUUFBSWIsS0FBSixFQUFXO0FBQ1YsU0FBSVEsUUFBUUwsV0FBV0gsTUFBTSxDQUFOLENBQVgsQ0FBWjtBQUNFLFNBQUlTLElBQUlILE1BQU1MLFNBQVNELE1BQU0sQ0FBTixDQUFULENBQU4sRUFBMEIsQ0FBMUIsRUFBNkIsR0FBN0IsQ0FBUjtBQUFBLFNBQ0ljLElBQUlSLE1BQU1ILFdBQVdILE1BQU0sQ0FBTixDQUFYLENBQU4sRUFBNEIsQ0FBNUIsRUFBK0IsR0FBL0IsQ0FEUjtBQUFBLFNBRUllLElBQUlULE1BQU1ILFdBQVdILE1BQU0sQ0FBTixDQUFYLENBQU4sRUFBNEIsQ0FBNUIsRUFBK0IsR0FBL0IsQ0FGUjtBQUFBLFNBR0k1QixJQUFJa0MsTUFBTU0sTUFBTUosS0FBTixJQUFlLENBQWYsR0FBbUJBLEtBQXpCLEVBQWdDLENBQWhDLEVBQW1DLENBQW5DLENBSFI7QUFJQSxZQUFPLENBQUNDLENBQUQsRUFBSUssQ0FBSixFQUFPQyxDQUFQLEVBQVUzQyxDQUFWLENBQVA7QUFDRjtBQUNIOztBQUVELFlBQVNTLE1BQVQsQ0FBZ0JhLE1BQWhCLEVBQXdCO0FBQ3JCLFFBQUlHLE9BQU9sQixRQUFRZSxNQUFSLENBQVg7QUFDQSxXQUFPRyxRQUFRQSxLQUFLSyxLQUFMLENBQVcsQ0FBWCxFQUFjLENBQWQsQ0FBZjtBQUNGOztBQUVELFlBQVNwQixNQUFULENBQWdCWSxNQUFoQixFQUF3QjtBQUN0QixRQUFJc0IsT0FBT3BDLFFBQVFjLE1BQVIsQ0FBWDtBQUNBLFdBQU9zQixRQUFRQSxLQUFLZCxLQUFMLENBQVcsQ0FBWCxFQUFjLENBQWQsQ0FBZjtBQUNEOztBQUVELFlBQVNsQixRQUFULENBQWtCVSxNQUFsQixFQUEwQjtBQUN2QixRQUFJdUIsT0FBT3RDLFFBQVFlLE1BQVIsQ0FBWDtBQUNBLFFBQUl1QixJQUFKLEVBQVU7QUFDUCxZQUFPQSxLQUFLLENBQUwsQ0FBUDtBQUNGLEtBRkQsTUFHSyxJQUFJQSxPQUFPckMsUUFBUWMsTUFBUixDQUFYLEVBQTRCO0FBQzlCLFlBQU91QixLQUFLLENBQUwsQ0FBUDtBQUNGLEtBRkksTUFHQSxJQUFJQSxPQUFPbEMsT0FBT1csTUFBUCxDQUFYLEVBQTJCO0FBQzdCLFlBQU91QixLQUFLLENBQUwsQ0FBUDtBQUNGO0FBQ0g7O0FBRUQ7QUFDQSxZQUFTaEMsU0FBVCxDQUFtQmMsR0FBbkIsRUFBd0I7QUFDckIsV0FBTyxNQUFNbUIsVUFBVW5CLElBQUksQ0FBSixDQUFWLENBQU4sR0FBMEJtQixVQUFVbkIsSUFBSSxDQUFKLENBQVYsQ0FBMUIsR0FDTW1CLFVBQVVuQixJQUFJLENBQUosQ0FBVixDQURiO0FBRUY7O0FBRUQsWUFBU2IsU0FBVCxDQUFtQlcsSUFBbkIsRUFBeUJXLEtBQXpCLEVBQWdDO0FBQzdCLFFBQUlBLFFBQVEsQ0FBUixJQUFjWCxLQUFLLENBQUwsS0FBV0EsS0FBSyxDQUFMLElBQVUsQ0FBdkMsRUFBMkM7QUFDeEMsWUFBT1YsV0FBV1UsSUFBWCxFQUFpQlcsS0FBakIsQ0FBUDtBQUNGO0FBQ0QsV0FBTyxTQUFTWCxLQUFLLENBQUwsQ0FBVCxHQUFtQixJQUFuQixHQUEwQkEsS0FBSyxDQUFMLENBQTFCLEdBQW9DLElBQXBDLEdBQTJDQSxLQUFLLENBQUwsQ0FBM0MsR0FBcUQsR0FBNUQ7QUFDRjs7QUFFRCxZQUFTVixVQUFULENBQW9CVSxJQUFwQixFQUEwQlcsS0FBMUIsRUFBaUM7QUFDOUIsUUFBSUEsVUFBVVcsU0FBZCxFQUF5QjtBQUN0QlgsYUFBU1gsS0FBSyxDQUFMLE1BQVlzQixTQUFaLEdBQXdCdEIsS0FBSyxDQUFMLENBQXhCLEdBQWtDLENBQTNDO0FBQ0Y7QUFDRCxXQUFPLFVBQVVBLEtBQUssQ0FBTCxDQUFWLEdBQW9CLElBQXBCLEdBQTJCQSxLQUFLLENBQUwsQ0FBM0IsR0FBcUMsSUFBckMsR0FBNENBLEtBQUssQ0FBTCxDQUE1QyxHQUNHLElBREgsR0FDVVcsS0FEVixHQUNrQixHQUR6QjtBQUVGOztBQUVELFlBQVNwQixhQUFULENBQXVCUyxJQUF2QixFQUE2QlcsS0FBN0IsRUFBb0M7QUFDakMsUUFBSUEsUUFBUSxDQUFSLElBQWNYLEtBQUssQ0FBTCxLQUFXQSxLQUFLLENBQUwsSUFBVSxDQUF2QyxFQUEyQztBQUN4QyxZQUFPUixlQUFlUSxJQUFmLEVBQXFCVyxLQUFyQixDQUFQO0FBQ0Y7QUFDRCxRQUFJN0MsSUFBSXlDLEtBQUtDLEtBQUwsQ0FBV1IsS0FBSyxDQUFMLElBQVEsR0FBUixHQUFjLEdBQXpCLENBQVI7QUFBQSxRQUNJdkMsSUFBSThDLEtBQUtDLEtBQUwsQ0FBV1IsS0FBSyxDQUFMLElBQVEsR0FBUixHQUFjLEdBQXpCLENBRFI7QUFBQSxRQUVJa0IsSUFBSVgsS0FBS0MsS0FBTCxDQUFXUixLQUFLLENBQUwsSUFBUSxHQUFSLEdBQWMsR0FBekIsQ0FGUjs7QUFJQSxXQUFPLFNBQVNsQyxDQUFULEdBQWEsS0FBYixHQUFxQkwsQ0FBckIsR0FBeUIsS0FBekIsR0FBaUN5RCxDQUFqQyxHQUFxQyxJQUE1QztBQUNGOztBQUVELFlBQVMxQixjQUFULENBQXdCUSxJQUF4QixFQUE4QlcsS0FBOUIsRUFBcUM7QUFDbEMsUUFBSTdDLElBQUl5QyxLQUFLQyxLQUFMLENBQVdSLEtBQUssQ0FBTCxJQUFRLEdBQVIsR0FBYyxHQUF6QixDQUFSO0FBQUEsUUFDSXZDLElBQUk4QyxLQUFLQyxLQUFMLENBQVdSLEtBQUssQ0FBTCxJQUFRLEdBQVIsR0FBYyxHQUF6QixDQURSO0FBQUEsUUFFSWtCLElBQUlYLEtBQUtDLEtBQUwsQ0FBV1IsS0FBSyxDQUFMLElBQVEsR0FBUixHQUFjLEdBQXpCLENBRlI7QUFHQSxXQUFPLFVBQVVsQyxDQUFWLEdBQWMsS0FBZCxHQUFzQkwsQ0FBdEIsR0FBMEIsS0FBMUIsR0FBa0N5RCxDQUFsQyxHQUFzQyxLQUF0QyxJQUErQ1AsU0FBU1gsS0FBSyxDQUFMLENBQVQsSUFBb0IsQ0FBbkUsSUFBd0UsR0FBL0U7QUFDRjs7QUFFRCxZQUFTUCxTQUFULENBQW1CMEIsSUFBbkIsRUFBeUJSLEtBQXpCLEVBQWdDO0FBQzdCLFFBQUlBLFFBQVEsQ0FBUixJQUFjUSxLQUFLLENBQUwsS0FBV0EsS0FBSyxDQUFMLElBQVUsQ0FBdkMsRUFBMkM7QUFDeEMsWUFBT3pCLFdBQVd5QixJQUFYLEVBQWlCUixLQUFqQixDQUFQO0FBQ0Y7QUFDRCxXQUFPLFNBQVNRLEtBQUssQ0FBTCxDQUFULEdBQW1CLElBQW5CLEdBQTBCQSxLQUFLLENBQUwsQ0FBMUIsR0FBb0MsS0FBcEMsR0FBNENBLEtBQUssQ0FBTCxDQUE1QyxHQUFzRCxJQUE3RDtBQUNGOztBQUVELFlBQVN6QixVQUFULENBQW9CeUIsSUFBcEIsRUFBMEJSLEtBQTFCLEVBQWlDO0FBQzlCLFFBQUlBLFVBQVVXLFNBQWQsRUFBeUI7QUFDdEJYLGFBQVNRLEtBQUssQ0FBTCxNQUFZRyxTQUFaLEdBQXdCSCxLQUFLLENBQUwsQ0FBeEIsR0FBa0MsQ0FBM0M7QUFDRjtBQUNELFdBQU8sVUFBVUEsS0FBSyxDQUFMLENBQVYsR0FBb0IsSUFBcEIsR0FBMkJBLEtBQUssQ0FBTCxDQUEzQixHQUFxQyxLQUFyQyxHQUE2Q0EsS0FBSyxDQUFMLENBQTdDLEdBQXVELEtBQXZELEdBQ0dSLEtBREgsR0FDVyxHQURsQjtBQUVGOztBQUVEO0FBQ0E7QUFDQSxZQUFTaEIsU0FBVCxDQUFtQnFCLEdBQW5CLEVBQXdCTCxLQUF4QixFQUErQjtBQUM1QixRQUFJQSxVQUFVVyxTQUFkLEVBQXlCO0FBQ3RCWCxhQUFTSyxJQUFJLENBQUosTUFBV00sU0FBWCxHQUF1Qk4sSUFBSSxDQUFKLENBQXZCLEdBQWdDLENBQXpDO0FBQ0Y7QUFDRCxXQUFPLFNBQVNBLElBQUksQ0FBSixDQUFULEdBQWtCLElBQWxCLEdBQXlCQSxJQUFJLENBQUosQ0FBekIsR0FBa0MsS0FBbEMsR0FBMENBLElBQUksQ0FBSixDQUExQyxHQUFtRCxHQUFuRCxJQUNJTCxVQUFVVyxTQUFWLElBQXVCWCxVQUFVLENBQWpDLEdBQXFDLE9BQU9BLEtBQTVDLEdBQW9ELEVBRHhELElBQzhELEdBRHJFO0FBRUY7O0FBRUQsWUFBU2YsT0FBVCxDQUFpQk0sR0FBakIsRUFBc0I7QUFDcEIsV0FBT3FCLGFBQWFyQixJQUFJRyxLQUFKLENBQVUsQ0FBVixFQUFhLENBQWIsQ0FBYixDQUFQO0FBQ0Q7O0FBRUQ7QUFDQSxZQUFTSSxLQUFULENBQWVlLEdBQWYsRUFBb0JDLEdBQXBCLEVBQXlCQyxHQUF6QixFQUE4QjtBQUMzQixXQUFPbkIsS0FBS2tCLEdBQUwsQ0FBU2xCLEtBQUttQixHQUFMLENBQVNELEdBQVQsRUFBY0QsR0FBZCxDQUFULEVBQTZCRSxHQUE3QixDQUFQO0FBQ0Y7O0FBRUQsWUFBU0wsU0FBVCxDQUFtQkcsR0FBbkIsRUFBd0I7QUFDdEIsUUFBSUcsTUFBTUgsSUFBSUksUUFBSixDQUFhLEVBQWIsRUFBaUJDLFdBQWpCLEVBQVY7QUFDQSxXQUFRRixJQUFJL0MsTUFBSixHQUFhLENBQWQsR0FBbUIsTUFBTStDLEdBQXpCLEdBQStCQSxHQUF0QztBQUNEOztBQUdEO0FBQ0EsT0FBSUosZUFBZSxFQUFuQjtBQUNBLFFBQUssSUFBSU8sSUFBVCxJQUFpQmpELFVBQWpCLEVBQTZCO0FBQzFCMEMsaUJBQWExQyxXQUFXaUQsSUFBWCxDQUFiLElBQWlDQSxJQUFqQztBQUNGO0FBRUEsR0EvTk8sRUErTk4sRUFBQyxLQUFJLENBQUwsRUEvTk0sQ0FGaXpCLEVBaU85eUIsR0FBRSxDQUFDLFVBQVN6RCxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDOUM7QUFDQSxPQUFJeUUsVUFBVTFELFFBQVEsQ0FBUixDQUFkO0FBQ0EsT0FBSXdCLFNBQVN4QixRQUFRLENBQVIsQ0FBYjs7QUFFQSxPQUFJMkQsUUFBUSxTQUFSQSxLQUFRLENBQVVDLEdBQVYsRUFBZTtBQUMxQixRQUFJQSxlQUFlRCxLQUFuQixFQUEwQjtBQUN6QixZQUFPQyxHQUFQO0FBQ0E7QUFDRCxRQUFJLEVBQUUsZ0JBQWdCRCxLQUFsQixDQUFKLEVBQThCO0FBQzdCLFlBQU8sSUFBSUEsS0FBSixDQUFVQyxHQUFWLENBQVA7QUFDQTs7QUFFRCxTQUFLQyxLQUFMLEdBQWEsS0FBYjtBQUNBLFNBQUtDLE1BQUwsR0FBYztBQUNiakMsVUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxDQURRO0FBRWJRLFVBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsQ0FGUTtBQUdiMEIsVUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxDQUhRO0FBSWJwQixVQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBTyxDQUFQLENBSlE7QUFLYnFCLFdBQU0sQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsRUFBVSxDQUFWLENBTE87QUFNYjFCLFlBQU87QUFOTSxLQUFkOztBQVNBO0FBQ0EsUUFBSVMsSUFBSjtBQUNBLFFBQUksT0FBT2EsR0FBUCxLQUFlLFFBQW5CLEVBQTZCO0FBQzVCYixZQUFPdkIsT0FBT2YsT0FBUCxDQUFlbUQsR0FBZixDQUFQO0FBQ0EsU0FBSWIsSUFBSixFQUFVO0FBQ1QsV0FBS2tCLFNBQUwsQ0FBZSxLQUFmLEVBQXNCbEIsSUFBdEI7QUFDQSxNQUZELE1BRU8sSUFBSUEsT0FBT3ZCLE9BQU9kLE9BQVAsQ0FBZWtELEdBQWYsQ0FBWCxFQUFnQztBQUN0QyxXQUFLSyxTQUFMLENBQWUsS0FBZixFQUFzQmxCLElBQXRCO0FBQ0EsTUFGTSxNQUVBLElBQUlBLE9BQU92QixPQUFPWCxNQUFQLENBQWMrQyxHQUFkLENBQVgsRUFBK0I7QUFDckMsV0FBS0ssU0FBTCxDQUFlLEtBQWYsRUFBc0JsQixJQUF0QjtBQUNBO0FBQ0QsS0FURCxNQVNPLElBQUksUUFBT2EsR0FBUCx5Q0FBT0EsR0FBUCxPQUFlLFFBQW5CLEVBQTZCO0FBQ25DYixZQUFPYSxHQUFQO0FBQ0EsU0FBSWIsS0FBS3RELENBQUwsS0FBV3dELFNBQVgsSUFBd0JGLEtBQUttQixHQUFMLEtBQWFqQixTQUF6QyxFQUFvRDtBQUNuRCxXQUFLZ0IsU0FBTCxDQUFlLEtBQWYsRUFBc0JsQixJQUF0QjtBQUNBLE1BRkQsTUFFTyxJQUFJQSxLQUFLTixDQUFMLEtBQVdRLFNBQVgsSUFBd0JGLEtBQUtvQixTQUFMLEtBQW1CbEIsU0FBL0MsRUFBMEQ7QUFDaEUsV0FBS2dCLFNBQUwsQ0FBZSxLQUFmLEVBQXNCbEIsSUFBdEI7QUFDQSxNQUZNLE1BRUEsSUFBSUEsS0FBS3FCLENBQUwsS0FBV25CLFNBQVgsSUFBd0JGLEtBQUtzQixLQUFMLEtBQWVwQixTQUEzQyxFQUFzRDtBQUM1RCxXQUFLZ0IsU0FBTCxDQUFlLEtBQWYsRUFBc0JsQixJQUF0QjtBQUNBLE1BRk0sTUFFQSxJQUFJQSxLQUFLSCxDQUFMLEtBQVdLLFNBQVgsSUFBd0JGLEtBQUt1QixTQUFMLEtBQW1CckIsU0FBL0MsRUFBMEQ7QUFDaEUsV0FBS2dCLFNBQUwsQ0FBZSxLQUFmLEVBQXNCbEIsSUFBdEI7QUFDQSxNQUZNLE1BRUEsSUFBSUEsS0FBS2hELENBQUwsS0FBV2tELFNBQVgsSUFBd0JGLEtBQUt3QixJQUFMLEtBQWN0QixTQUExQyxFQUFxRDtBQUMzRCxXQUFLZ0IsU0FBTCxDQUFlLE1BQWYsRUFBdUJsQixJQUF2QjtBQUNBO0FBQ0Q7QUFDRCxJQTNDRDs7QUE2Q0FZLFNBQU1hLFNBQU4sR0FBa0I7QUFDakJDLGFBQVMsbUJBQVk7QUFDcEIsWUFBTyxLQUFLWixLQUFaO0FBQ0EsS0FIZ0I7QUFJakJoQyxTQUFLLGVBQVk7QUFDaEIsWUFBTyxLQUFLNkMsUUFBTCxDQUFjLEtBQWQsRUFBcUJDLFNBQXJCLENBQVA7QUFDQSxLQU5nQjtBQU9qQnRDLFNBQUssZUFBWTtBQUNoQixZQUFPLEtBQUtxQyxRQUFMLENBQWMsS0FBZCxFQUFxQkMsU0FBckIsQ0FBUDtBQUNBLEtBVGdCO0FBVWpCWixTQUFLLGVBQVk7QUFDaEIsWUFBTyxLQUFLVyxRQUFMLENBQWMsS0FBZCxFQUFxQkMsU0FBckIsQ0FBUDtBQUNBLEtBWmdCO0FBYWpCaEMsU0FBSyxlQUFZO0FBQ2hCLFlBQU8sS0FBSytCLFFBQUwsQ0FBYyxLQUFkLEVBQXFCQyxTQUFyQixDQUFQO0FBQ0EsS0FmZ0I7QUFnQmpCWCxVQUFNLGdCQUFZO0FBQ2pCLFlBQU8sS0FBS1UsUUFBTCxDQUFjLE1BQWQsRUFBc0JDLFNBQXRCLENBQVA7QUFDQSxLQWxCZ0I7O0FBb0JqQkMsY0FBVSxvQkFBWTtBQUNyQixZQUFPLEtBQUtkLE1BQUwsQ0FBWWpDLEdBQW5CO0FBQ0EsS0F0QmdCO0FBdUJqQmdELGNBQVUsb0JBQVk7QUFDckIsWUFBTyxLQUFLZixNQUFMLENBQVl6QixHQUFuQjtBQUNBLEtBekJnQjtBQTBCakJ5QyxjQUFVLG9CQUFZO0FBQ3JCLFlBQU8sS0FBS2hCLE1BQUwsQ0FBWUMsR0FBbkI7QUFDQSxLQTVCZ0I7QUE2QmpCZ0IsY0FBVSxvQkFBWTtBQUNyQixTQUFJakIsU0FBUyxLQUFLQSxNQUFsQjtBQUNBLFNBQUlBLE9BQU94QixLQUFQLEtBQWlCLENBQXJCLEVBQXdCO0FBQ3ZCLGFBQU93QixPQUFPbkIsR0FBUCxDQUFXcUMsTUFBWCxDQUFrQixDQUFDbEIsT0FBT3hCLEtBQVIsQ0FBbEIsQ0FBUDtBQUNBO0FBQ0QsWUFBT3dCLE9BQU9uQixHQUFkO0FBQ0EsS0FuQ2dCO0FBb0NqQnNDLGVBQVcscUJBQVk7QUFDdEIsWUFBTyxLQUFLbkIsTUFBTCxDQUFZRSxJQUFuQjtBQUNBLEtBdENnQjtBQXVDakJrQixlQUFXLHFCQUFZO0FBQ3RCLFNBQUlwQixTQUFTLEtBQUtBLE1BQWxCO0FBQ0EsWUFBT0EsT0FBT2pDLEdBQVAsQ0FBV21ELE1BQVgsQ0FBa0IsQ0FBQ2xCLE9BQU94QixLQUFSLENBQWxCLENBQVA7QUFDQSxLQTFDZ0I7QUEyQ2pCNkMsZUFBVyxxQkFBWTtBQUN0QixTQUFJckIsU0FBUyxLQUFLQSxNQUFsQjtBQUNBLFlBQU9BLE9BQU96QixHQUFQLENBQVcyQyxNQUFYLENBQWtCLENBQUNsQixPQUFPeEIsS0FBUixDQUFsQixDQUFQO0FBQ0EsS0E5Q2dCO0FBK0NqQkEsV0FBTyxlQUFVOEMsR0FBVixFQUFlO0FBQ3JCLFNBQUlBLFFBQVFuQyxTQUFaLEVBQXVCO0FBQ3RCLGFBQU8sS0FBS2EsTUFBTCxDQUFZeEIsS0FBbkI7QUFDQTtBQUNELFVBQUsyQixTQUFMLENBQWUsT0FBZixFQUF3Qm1CLEdBQXhCO0FBQ0EsWUFBTyxJQUFQO0FBQ0EsS0FyRGdCOztBQXVEakJsQixTQUFLLGFBQVVrQixHQUFWLEVBQWU7QUFDbkIsWUFBTyxLQUFLQyxVQUFMLENBQWdCLEtBQWhCLEVBQXVCLENBQXZCLEVBQTBCRCxHQUExQixDQUFQO0FBQ0EsS0F6RGdCO0FBMERqQkUsV0FBTyxlQUFVRixHQUFWLEVBQWU7QUFDckIsWUFBTyxLQUFLQyxVQUFMLENBQWdCLEtBQWhCLEVBQXVCLENBQXZCLEVBQTBCRCxHQUExQixDQUFQO0FBQ0EsS0E1RGdCO0FBNkRqQkcsVUFBTSxjQUFVSCxHQUFWLEVBQWU7QUFDcEIsWUFBTyxLQUFLQyxVQUFMLENBQWdCLEtBQWhCLEVBQXVCLENBQXZCLEVBQTBCRCxHQUExQixDQUFQO0FBQ0EsS0EvRGdCO0FBZ0VqQkksU0FBSyxhQUFVSixHQUFWLEVBQWU7QUFDbkIsU0FBSUEsR0FBSixFQUFTO0FBQ1JBLGFBQU8sR0FBUDtBQUNBQSxZQUFNQSxNQUFNLENBQU4sR0FBVSxNQUFNQSxHQUFoQixHQUFzQkEsR0FBNUI7QUFDQTtBQUNELFlBQU8sS0FBS0MsVUFBTCxDQUFnQixLQUFoQixFQUF1QixDQUF2QixFQUEwQkQsR0FBMUIsQ0FBUDtBQUNBLEtBdEVnQjtBQXVFakJLLGdCQUFZLG9CQUFVTCxHQUFWLEVBQWU7QUFDMUIsWUFBTyxLQUFLQyxVQUFMLENBQWdCLEtBQWhCLEVBQXVCLENBQXZCLEVBQTBCRCxHQUExQixDQUFQO0FBQ0EsS0F6RWdCO0FBMEVqQmpCLGVBQVcsbUJBQVVpQixHQUFWLEVBQWU7QUFDekIsWUFBTyxLQUFLQyxVQUFMLENBQWdCLEtBQWhCLEVBQXVCLENBQXZCLEVBQTBCRCxHQUExQixDQUFQO0FBQ0EsS0E1RWdCO0FBNkVqQk0saUJBQWEscUJBQVVOLEdBQVYsRUFBZTtBQUMzQixZQUFPLEtBQUtDLFVBQUwsQ0FBZ0IsS0FBaEIsRUFBdUIsQ0FBdkIsRUFBMEJELEdBQTFCLENBQVA7QUFDQSxLQS9FZ0I7QUFnRmpCZCxlQUFXLG1CQUFVYyxHQUFWLEVBQWU7QUFDekIsWUFBTyxLQUFLQyxVQUFMLENBQWdCLEtBQWhCLEVBQXVCLENBQXZCLEVBQTBCRCxHQUExQixDQUFQO0FBQ0EsS0FsRmdCO0FBbUZqQk8sZUFBVyxtQkFBVVAsR0FBVixFQUFlO0FBQ3pCLFlBQU8sS0FBS0MsVUFBTCxDQUFnQixLQUFoQixFQUF1QixDQUF2QixFQUEwQkQsR0FBMUIsQ0FBUDtBQUNBLEtBckZnQjtBQXNGakJmLFdBQU8sZUFBVWUsR0FBVixFQUFlO0FBQ3JCLFlBQU8sS0FBS0MsVUFBTCxDQUFnQixLQUFoQixFQUF1QixDQUF2QixFQUEwQkQsR0FBMUIsQ0FBUDtBQUNBLEtBeEZnQjtBQXlGakJiLFVBQU0sY0FBVWEsR0FBVixFQUFlO0FBQ3BCLFlBQU8sS0FBS0MsVUFBTCxDQUFnQixNQUFoQixFQUF3QixDQUF4QixFQUEyQkQsR0FBM0IsQ0FBUDtBQUNBLEtBM0ZnQjtBQTRGakJRLGFBQVMsaUJBQVVSLEdBQVYsRUFBZTtBQUN2QixZQUFPLEtBQUtDLFVBQUwsQ0FBZ0IsTUFBaEIsRUFBd0IsQ0FBeEIsRUFBMkJELEdBQTNCLENBQVA7QUFDQSxLQTlGZ0I7QUErRmpCUyxZQUFRLGdCQUFVVCxHQUFWLEVBQWU7QUFDdEIsWUFBTyxLQUFLQyxVQUFMLENBQWdCLE1BQWhCLEVBQXdCLENBQXhCLEVBQTJCRCxHQUEzQixDQUFQO0FBQ0EsS0FqR2dCO0FBa0dqQlUsV0FBTyxlQUFVVixHQUFWLEVBQWU7QUFDckIsWUFBTyxLQUFLQyxVQUFMLENBQWdCLE1BQWhCLEVBQXdCLENBQXhCLEVBQTJCRCxHQUEzQixDQUFQO0FBQ0EsS0FwR2dCOztBQXNHakJyRSxlQUFXLHFCQUFZO0FBQ3RCLFlBQU9TLE9BQU9ULFNBQVAsQ0FBaUIsS0FBSytDLE1BQUwsQ0FBWWpDLEdBQTdCLENBQVA7QUFDQSxLQXhHZ0I7QUF5R2pCYixlQUFXLHFCQUFZO0FBQ3RCLFlBQU9RLE9BQU9SLFNBQVAsQ0FBaUIsS0FBSzhDLE1BQUwsQ0FBWWpDLEdBQTdCLEVBQWtDLEtBQUtpQyxNQUFMLENBQVl4QixLQUE5QyxDQUFQO0FBQ0EsS0EzR2dCO0FBNEdqQnJCLGdCQUFZLHNCQUFZO0FBQ3ZCLFlBQU9PLE9BQU9QLFVBQVAsQ0FBa0IsS0FBSzZDLE1BQUwsQ0FBWWpDLEdBQTlCLEVBQW1DLEtBQUtpQyxNQUFMLENBQVl4QixLQUEvQyxDQUFQO0FBQ0EsS0E5R2dCO0FBK0dqQnBCLG1CQUFlLHlCQUFZO0FBQzFCLFlBQU9NLE9BQU9OLGFBQVAsQ0FBcUIsS0FBSzRDLE1BQUwsQ0FBWWpDLEdBQWpDLEVBQXNDLEtBQUtpQyxNQUFMLENBQVl4QixLQUFsRCxDQUFQO0FBQ0EsS0FqSGdCO0FBa0hqQmxCLGVBQVcscUJBQVk7QUFDdEIsWUFBT0ksT0FBT0osU0FBUCxDQUFpQixLQUFLMEMsTUFBTCxDQUFZekIsR0FBN0IsRUFBa0MsS0FBS3lCLE1BQUwsQ0FBWXhCLEtBQTlDLENBQVA7QUFDQSxLQXBIZ0I7QUFxSGpCakIsZ0JBQVksc0JBQVk7QUFDdkIsWUFBT0csT0FBT0gsVUFBUCxDQUFrQixLQUFLeUMsTUFBTCxDQUFZekIsR0FBOUIsRUFBbUMsS0FBS3lCLE1BQUwsQ0FBWXhCLEtBQS9DLENBQVA7QUFDQSxLQXZIZ0I7QUF3SGpCaEIsZUFBVyxxQkFBWTtBQUN0QixZQUFPRSxPQUFPRixTQUFQLENBQWlCLEtBQUt3QyxNQUFMLENBQVluQixHQUE3QixFQUFrQyxLQUFLbUIsTUFBTCxDQUFZeEIsS0FBOUMsQ0FBUDtBQUNBLEtBMUhnQjtBQTJIakJmLGFBQVMsbUJBQVk7QUFDcEIsWUFBT0MsT0FBT0QsT0FBUCxDQUFlLEtBQUt1QyxNQUFMLENBQVlqQyxHQUEzQixFQUFnQyxLQUFLaUMsTUFBTCxDQUFZeEIsS0FBNUMsQ0FBUDtBQUNBLEtBN0hnQjs7QUErSGpCeUQsZUFBVyxxQkFBWTtBQUN0QixTQUFJbEUsTUFBTSxLQUFLaUMsTUFBTCxDQUFZakMsR0FBdEI7QUFDQSxZQUFRQSxJQUFJLENBQUosS0FBVSxFQUFYLEdBQWtCQSxJQUFJLENBQUosS0FBVSxDQUE1QixHQUFpQ0EsSUFBSSxDQUFKLENBQXhDO0FBQ0EsS0FsSWdCOztBQW9JakJtRSxnQkFBWSxzQkFBWTtBQUN2QjtBQUNBLFNBQUluRSxNQUFNLEtBQUtpQyxNQUFMLENBQVlqQyxHQUF0QjtBQUNBLFNBQUlvRSxNQUFNLEVBQVY7QUFDQSxVQUFLLElBQUluRyxJQUFJLENBQWIsRUFBZ0JBLElBQUkrQixJQUFJdEIsTUFBeEIsRUFBZ0NULEdBQWhDLEVBQXFDO0FBQ3BDLFVBQUlvRyxPQUFPckUsSUFBSS9CLENBQUosSUFBUyxHQUFwQjtBQUNBbUcsVUFBSW5HLENBQUosSUFBVW9HLFFBQVEsT0FBVCxHQUFvQkEsT0FBTyxLQUEzQixHQUFtQ2hFLEtBQUtpRSxHQUFMLENBQVUsQ0FBQ0QsT0FBTyxLQUFSLElBQWlCLEtBQTNCLEVBQW1DLEdBQW5DLENBQTVDO0FBQ0E7QUFDRCxZQUFPLFNBQVNELElBQUksQ0FBSixDQUFULEdBQWtCLFNBQVNBLElBQUksQ0FBSixDQUEzQixHQUFvQyxTQUFTQSxJQUFJLENBQUosQ0FBcEQ7QUFDQSxLQTdJZ0I7O0FBK0lqQkcsY0FBVSxrQkFBVUMsTUFBVixFQUFrQjtBQUMzQjtBQUNBLFNBQUlDLE9BQU8sS0FBS04sVUFBTCxFQUFYO0FBQ0EsU0FBSU8sT0FBT0YsT0FBT0wsVUFBUCxFQUFYO0FBQ0EsU0FBSU0sT0FBT0MsSUFBWCxFQUFpQjtBQUNoQixhQUFPLENBQUNELE9BQU8sSUFBUixLQUFpQkMsT0FBTyxJQUF4QixDQUFQO0FBQ0E7QUFDRCxZQUFPLENBQUNBLE9BQU8sSUFBUixLQUFpQkQsT0FBTyxJQUF4QixDQUFQO0FBQ0EsS0F2SmdCOztBQXlKakJFLFdBQU8sZUFBVUgsTUFBVixFQUFrQjtBQUN4QixTQUFJSSxnQkFBZ0IsS0FBS0wsUUFBTCxDQUFjQyxNQUFkLENBQXBCO0FBQ0EsU0FBSUksaUJBQWlCLEdBQXJCLEVBQTBCO0FBQ3pCLGFBQU8sS0FBUDtBQUNBOztBQUVELFlBQVFBLGlCQUFpQixHQUFsQixHQUF5QixJQUF6QixHQUFnQyxFQUF2QztBQUNBLEtBaEtnQjs7QUFrS2pCQyxVQUFNLGdCQUFZO0FBQ2pCO0FBQ0EsU0FBSTdFLE1BQU0sS0FBS2lDLE1BQUwsQ0FBWWpDLEdBQXRCO0FBQ0EsU0FBSThFLE1BQU0sQ0FBQzlFLElBQUksQ0FBSixJQUFTLEdBQVQsR0FBZUEsSUFBSSxDQUFKLElBQVMsR0FBeEIsR0FBOEJBLElBQUksQ0FBSixJQUFTLEdBQXhDLElBQStDLElBQXpEO0FBQ0EsWUFBTzhFLE1BQU0sR0FBYjtBQUNBLEtBdktnQjs7QUF5S2pCQyxXQUFPLGlCQUFZO0FBQ2xCLFlBQU8sQ0FBQyxLQUFLRixJQUFMLEVBQVI7QUFDQSxLQTNLZ0I7O0FBNktqQkcsWUFBUSxrQkFBWTtBQUNuQixTQUFJaEYsTUFBTSxFQUFWO0FBQ0EsVUFBSyxJQUFJL0IsSUFBSSxDQUFiLEVBQWdCQSxJQUFJLENBQXBCLEVBQXVCQSxHQUF2QixFQUE0QjtBQUMzQitCLFVBQUkvQixDQUFKLElBQVMsTUFBTSxLQUFLZ0UsTUFBTCxDQUFZakMsR0FBWixDQUFnQi9CLENBQWhCLENBQWY7QUFDQTtBQUNELFVBQUttRSxTQUFMLENBQWUsS0FBZixFQUFzQnBDLEdBQXRCO0FBQ0EsWUFBTyxJQUFQO0FBQ0EsS0FwTGdCOztBQXNMakJpRixhQUFTLGlCQUFVQyxLQUFWLEVBQWlCO0FBQ3pCLFNBQUkxRSxNQUFNLEtBQUt5QixNQUFMLENBQVl6QixHQUF0QjtBQUNBQSxTQUFJLENBQUosS0FBVUEsSUFBSSxDQUFKLElBQVMwRSxLQUFuQjtBQUNBLFVBQUs5QyxTQUFMLENBQWUsS0FBZixFQUFzQjVCLEdBQXRCO0FBQ0EsWUFBTyxJQUFQO0FBQ0EsS0EzTGdCOztBQTZMakIyRSxZQUFRLGdCQUFVRCxLQUFWLEVBQWlCO0FBQ3hCLFNBQUkxRSxNQUFNLEtBQUt5QixNQUFMLENBQVl6QixHQUF0QjtBQUNBQSxTQUFJLENBQUosS0FBVUEsSUFBSSxDQUFKLElBQVMwRSxLQUFuQjtBQUNBLFVBQUs5QyxTQUFMLENBQWUsS0FBZixFQUFzQjVCLEdBQXRCO0FBQ0EsWUFBTyxJQUFQO0FBQ0EsS0FsTWdCOztBQW9NakI0RSxjQUFVLGtCQUFVRixLQUFWLEVBQWlCO0FBQzFCLFNBQUkxRSxNQUFNLEtBQUt5QixNQUFMLENBQVl6QixHQUF0QjtBQUNBQSxTQUFJLENBQUosS0FBVUEsSUFBSSxDQUFKLElBQVMwRSxLQUFuQjtBQUNBLFVBQUs5QyxTQUFMLENBQWUsS0FBZixFQUFzQjVCLEdBQXRCO0FBQ0EsWUFBTyxJQUFQO0FBQ0EsS0F6TWdCOztBQTJNakI2RSxnQkFBWSxvQkFBVUgsS0FBVixFQUFpQjtBQUM1QixTQUFJMUUsTUFBTSxLQUFLeUIsTUFBTCxDQUFZekIsR0FBdEI7QUFDQUEsU0FBSSxDQUFKLEtBQVVBLElBQUksQ0FBSixJQUFTMEUsS0FBbkI7QUFDQSxVQUFLOUMsU0FBTCxDQUFlLEtBQWYsRUFBc0I1QixHQUF0QjtBQUNBLFlBQU8sSUFBUDtBQUNBLEtBaE5nQjs7QUFrTmpCOEUsWUFBUSxnQkFBVUosS0FBVixFQUFpQjtBQUN4QixTQUFJcEUsTUFBTSxLQUFLbUIsTUFBTCxDQUFZbkIsR0FBdEI7QUFDQUEsU0FBSSxDQUFKLEtBQVVBLElBQUksQ0FBSixJQUFTb0UsS0FBbkI7QUFDQSxVQUFLOUMsU0FBTCxDQUFlLEtBQWYsRUFBc0J0QixHQUF0QjtBQUNBLFlBQU8sSUFBUDtBQUNBLEtBdk5nQjs7QUF5TmpCeUUsYUFBUyxpQkFBVUwsS0FBVixFQUFpQjtBQUN6QixTQUFJcEUsTUFBTSxLQUFLbUIsTUFBTCxDQUFZbkIsR0FBdEI7QUFDQUEsU0FBSSxDQUFKLEtBQVVBLElBQUksQ0FBSixJQUFTb0UsS0FBbkI7QUFDQSxVQUFLOUMsU0FBTCxDQUFlLEtBQWYsRUFBc0J0QixHQUF0QjtBQUNBLFlBQU8sSUFBUDtBQUNBLEtBOU5nQjs7QUFnT2pCMEUsZUFBVyxxQkFBWTtBQUN0QixTQUFJeEYsTUFBTSxLQUFLaUMsTUFBTCxDQUFZakMsR0FBdEI7QUFDQTtBQUNBLFNBQUl1RCxNQUFNdkQsSUFBSSxDQUFKLElBQVMsR0FBVCxHQUFlQSxJQUFJLENBQUosSUFBUyxJQUF4QixHQUErQkEsSUFBSSxDQUFKLElBQVMsSUFBbEQ7QUFDQSxVQUFLb0MsU0FBTCxDQUFlLEtBQWYsRUFBc0IsQ0FBQ21CLEdBQUQsRUFBTUEsR0FBTixFQUFXQSxHQUFYLENBQXRCO0FBQ0EsWUFBTyxJQUFQO0FBQ0EsS0F0T2dCOztBQXdPakJrQyxhQUFTLGlCQUFVUCxLQUFWLEVBQWlCO0FBQ3pCLFNBQUl6RSxRQUFRLEtBQUt3QixNQUFMLENBQVl4QixLQUF4QjtBQUNBLFVBQUsyQixTQUFMLENBQWUsT0FBZixFQUF3QjNCLFFBQVNBLFFBQVF5RSxLQUF6QztBQUNBLFlBQU8sSUFBUDtBQUNBLEtBNU9nQjs7QUE4T2pCUSxhQUFTLGlCQUFVUixLQUFWLEVBQWlCO0FBQ3pCLFNBQUl6RSxRQUFRLEtBQUt3QixNQUFMLENBQVl4QixLQUF4QjtBQUNBLFVBQUsyQixTQUFMLENBQWUsT0FBZixFQUF3QjNCLFFBQVNBLFFBQVF5RSxLQUF6QztBQUNBLFlBQU8sSUFBUDtBQUNBLEtBbFBnQjs7QUFvUGpCUyxZQUFRLGdCQUFVQyxPQUFWLEVBQW1CO0FBQzFCLFNBQUlwRixNQUFNLEtBQUt5QixNQUFMLENBQVl6QixHQUF0QjtBQUNBLFNBQUltRCxNQUFNLENBQUNuRCxJQUFJLENBQUosSUFBU29GLE9BQVYsSUFBcUIsR0FBL0I7QUFDQXBGLFNBQUksQ0FBSixJQUFTbUQsTUFBTSxDQUFOLEdBQVUsTUFBTUEsR0FBaEIsR0FBc0JBLEdBQS9CO0FBQ0EsVUFBS3ZCLFNBQUwsQ0FBZSxLQUFmLEVBQXNCNUIsR0FBdEI7QUFDQSxZQUFPLElBQVA7QUFDQSxLQTFQZ0I7O0FBNFBqQjs7OztBQUlBcUYsU0FBSyxhQUFVQyxVQUFWLEVBQXNCQyxNQUF0QixFQUE4QjtBQUNsQyxTQUFJQyxTQUFTLElBQWI7QUFDQSxTQUFJeEIsU0FBU3NCLFVBQWI7QUFDQSxTQUFJdEgsSUFBSXVILFdBQVczRSxTQUFYLEdBQXVCLEdBQXZCLEdBQTZCMkUsTUFBckM7O0FBRUEsU0FBSWhGLElBQUksSUFBSXZDLENBQUosR0FBUSxDQUFoQjtBQUNBLFNBQUlILElBQUkySCxPQUFPdkYsS0FBUCxLQUFpQitELE9BQU8vRCxLQUFQLEVBQXpCOztBQUVBLFNBQUl3RixLQUFLLENBQUMsQ0FBRWxGLElBQUkxQyxDQUFKLEtBQVUsQ0FBQyxDQUFaLEdBQWlCMEMsQ0FBakIsR0FBcUIsQ0FBQ0EsSUFBSTFDLENBQUwsS0FBVyxJQUFJMEMsSUFBSTFDLENBQW5CLENBQXRCLElBQStDLENBQWhELElBQXFELEdBQTlEO0FBQ0EsU0FBSTZILEtBQUssSUFBSUQsRUFBYjs7QUFFQSxZQUFPLEtBQ0xqRyxHQURLLENBRUxpRyxLQUFLRCxPQUFPM0QsR0FBUCxFQUFMLEdBQW9CNkQsS0FBSzFCLE9BQU9uQyxHQUFQLEVBRnBCLEVBR0w0RCxLQUFLRCxPQUFPdkMsS0FBUCxFQUFMLEdBQXNCeUMsS0FBSzFCLE9BQU9mLEtBQVAsRUFIdEIsRUFJTHdDLEtBQUtELE9BQU90QyxJQUFQLEVBQUwsR0FBcUJ3QyxLQUFLMUIsT0FBT2QsSUFBUCxFQUpyQixFQU1MakQsS0FOSyxDQU1DdUYsT0FBT3ZGLEtBQVAsS0FBaUJqQyxDQUFqQixHQUFxQmdHLE9BQU8vRCxLQUFQLE1BQWtCLElBQUlqQyxDQUF0QixDQU50QixDQUFQO0FBT0EsS0FsUmdCOztBQW9SakIySCxZQUFRLGtCQUFZO0FBQ25CLFlBQU8sS0FBS25HLEdBQUwsRUFBUDtBQUNBLEtBdFJnQjs7QUF3UmpCb0csV0FBTyxpQkFBWTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQUlDLFNBQVMsSUFBSXZFLEtBQUosRUFBYjtBQUNBLFNBQUl3RSxTQUFTLEtBQUtyRSxNQUFsQjtBQUNBLFNBQUlzRSxTQUFTRixPQUFPcEUsTUFBcEI7QUFDQSxTQUFJTyxLQUFKLEVBQVdnRSxJQUFYOztBQUVBLFVBQUssSUFBSUMsSUFBVCxJQUFpQkgsTUFBakIsRUFBeUI7QUFDeEIsVUFBSUEsT0FBT0ksY0FBUCxDQUFzQkQsSUFBdEIsQ0FBSixFQUFpQztBQUNoQ2pFLGVBQVE4RCxPQUFPRyxJQUFQLENBQVI7QUFDQUQsY0FBUSxFQUFELENBQUs5RSxRQUFMLENBQWNqRCxJQUFkLENBQW1CK0QsS0FBbkIsQ0FBUDtBQUNBLFdBQUlnRSxTQUFTLGdCQUFiLEVBQStCO0FBQzlCRCxlQUFPRSxJQUFQLElBQWVqRSxNQUFNckMsS0FBTixDQUFZLENBQVosQ0FBZjtBQUNBLFFBRkQsTUFFTyxJQUFJcUcsU0FBUyxpQkFBYixFQUFnQztBQUN0Q0QsZUFBT0UsSUFBUCxJQUFlakUsS0FBZjtBQUNBLFFBRk0sTUFFQTtBQUNObUUsZ0JBQVFDLEtBQVIsQ0FBYyx5QkFBZCxFQUF5Q3BFLEtBQXpDO0FBQ0E7QUFDRDtBQUNEOztBQUVELFlBQU82RCxNQUFQO0FBQ0E7QUFqVGdCLElBQWxCOztBQW9UQXZFLFNBQU1hLFNBQU4sQ0FBZ0JrRSxNQUFoQixHQUF5QjtBQUN4QjdHLFNBQUssQ0FBQyxLQUFELEVBQVEsT0FBUixFQUFpQixNQUFqQixDQURtQjtBQUV4QlEsU0FBSyxDQUFDLEtBQUQsRUFBUSxZQUFSLEVBQXNCLFdBQXRCLENBRm1CO0FBR3hCMEIsU0FBSyxDQUFDLEtBQUQsRUFBUSxZQUFSLEVBQXNCLE9BQXRCLENBSG1CO0FBSXhCcEIsU0FBSyxDQUFDLEtBQUQsRUFBUSxXQUFSLEVBQXFCLFdBQXJCLENBSm1CO0FBS3hCcUIsVUFBTSxDQUFDLE1BQUQsRUFBUyxTQUFULEVBQW9CLFFBQXBCLEVBQThCLE9BQTlCO0FBTGtCLElBQXpCOztBQVFBTCxTQUFNYSxTQUFOLENBQWdCbUUsS0FBaEIsR0FBd0I7QUFDdkI5RyxTQUFLLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBRGtCO0FBRXZCUSxTQUFLLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBRmtCO0FBR3ZCMEIsU0FBSyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQUhrQjtBQUl2QnBCLFNBQUssQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FKa0I7QUFLdkJxQixVQUFNLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCLEdBQWhCO0FBTGlCLElBQXhCOztBQVFBTCxTQUFNYSxTQUFOLENBQWdCb0UsU0FBaEIsR0FBNEIsVUFBVUMsS0FBVixFQUFpQjtBQUM1QyxRQUFJL0UsU0FBUyxLQUFLQSxNQUFsQjtBQUNBLFFBQUlmLE9BQU8sRUFBWDs7QUFFQSxTQUFLLElBQUlqRCxJQUFJLENBQWIsRUFBZ0JBLElBQUkrSSxNQUFNdEksTUFBMUIsRUFBa0NULEdBQWxDLEVBQXVDO0FBQ3RDaUQsVUFBSzhGLE1BQU1DLE1BQU4sQ0FBYWhKLENBQWIsQ0FBTCxJQUF3QmdFLE9BQU8rRSxLQUFQLEVBQWMvSSxDQUFkLENBQXhCO0FBQ0E7O0FBRUQsUUFBSWdFLE9BQU94QixLQUFQLEtBQWlCLENBQXJCLEVBQXdCO0FBQ3ZCUyxVQUFLN0MsQ0FBTCxHQUFTNEQsT0FBT3hCLEtBQWhCO0FBQ0E7O0FBRUQ7QUFDQSxXQUFPUyxJQUFQO0FBQ0EsSUFkRDs7QUFnQkFZLFNBQU1hLFNBQU4sQ0FBZ0JQLFNBQWhCLEdBQTRCLFVBQVU0RSxLQUFWLEVBQWlCOUYsSUFBakIsRUFBdUI7QUFDbEQsUUFBSWUsU0FBUyxLQUFLQSxNQUFsQjtBQUNBLFFBQUk0RSxTQUFTLEtBQUtBLE1BQWxCO0FBQ0EsUUFBSUMsUUFBUSxLQUFLQSxLQUFqQjtBQUNBLFFBQUlyRyxRQUFRLENBQVo7QUFDQSxRQUFJeEMsQ0FBSjs7QUFFQSxTQUFLK0QsS0FBTCxHQUFhLElBQWI7O0FBRUEsUUFBSWdGLFVBQVUsT0FBZCxFQUF1QjtBQUN0QnZHLGFBQVFTLElBQVI7QUFDQSxLQUZELE1BRU8sSUFBSUEsS0FBS3hDLE1BQVQsRUFBaUI7QUFDdkI7QUFDQXVELFlBQU8rRSxLQUFQLElBQWdCOUYsS0FBS2YsS0FBTCxDQUFXLENBQVgsRUFBYzZHLE1BQU10SSxNQUFwQixDQUFoQjtBQUNBK0IsYUFBUVMsS0FBSzhGLE1BQU10SSxNQUFYLENBQVI7QUFDQSxLQUpNLE1BSUEsSUFBSXdDLEtBQUs4RixNQUFNQyxNQUFOLENBQWEsQ0FBYixDQUFMLE1BQTBCN0YsU0FBOUIsRUFBeUM7QUFDL0M7QUFDQSxVQUFLbkQsSUFBSSxDQUFULEVBQVlBLElBQUkrSSxNQUFNdEksTUFBdEIsRUFBOEJULEdBQTlCLEVBQW1DO0FBQ2xDZ0UsYUFBTytFLEtBQVAsRUFBYy9JLENBQWQsSUFBbUJpRCxLQUFLOEYsTUFBTUMsTUFBTixDQUFhaEosQ0FBYixDQUFMLENBQW5CO0FBQ0E7O0FBRUR3QyxhQUFRUyxLQUFLN0MsQ0FBYjtBQUNBLEtBUE0sTUFPQSxJQUFJNkMsS0FBSzJGLE9BQU9HLEtBQVAsRUFBYyxDQUFkLENBQUwsTUFBMkI1RixTQUEvQixFQUEwQztBQUNoRDtBQUNBLFNBQUk4RixRQUFRTCxPQUFPRyxLQUFQLENBQVo7O0FBRUEsVUFBSy9JLElBQUksQ0FBVCxFQUFZQSxJQUFJK0ksTUFBTXRJLE1BQXRCLEVBQThCVCxHQUE5QixFQUFtQztBQUNsQ2dFLGFBQU8rRSxLQUFQLEVBQWMvSSxDQUFkLElBQW1CaUQsS0FBS2dHLE1BQU1qSixDQUFOLENBQUwsQ0FBbkI7QUFDQTs7QUFFRHdDLGFBQVFTLEtBQUtULEtBQWI7QUFDQTs7QUFFRHdCLFdBQU94QixLQUFQLEdBQWVKLEtBQUttQixHQUFMLENBQVMsQ0FBVCxFQUFZbkIsS0FBS2tCLEdBQUwsQ0FBUyxDQUFULEVBQWFkLFVBQVVXLFNBQVYsR0FBc0JhLE9BQU94QixLQUE3QixHQUFxQ0EsS0FBbEQsQ0FBWixDQUFmOztBQUVBLFFBQUl1RyxVQUFVLE9BQWQsRUFBdUI7QUFDdEIsWUFBTyxLQUFQO0FBQ0E7O0FBRUQsUUFBSUcsTUFBSjs7QUFFQTtBQUNBLFNBQUtsSixJQUFJLENBQVQsRUFBWUEsSUFBSStJLE1BQU10SSxNQUF0QixFQUE4QlQsR0FBOUIsRUFBbUM7QUFDbENrSixjQUFTOUcsS0FBS21CLEdBQUwsQ0FBUyxDQUFULEVBQVluQixLQUFLa0IsR0FBTCxDQUFTdUYsTUFBTUUsS0FBTixFQUFhL0ksQ0FBYixDQUFULEVBQTBCZ0UsT0FBTytFLEtBQVAsRUFBYy9JLENBQWQsQ0FBMUIsQ0FBWixDQUFUO0FBQ0FnRSxZQUFPK0UsS0FBUCxFQUFjL0ksQ0FBZCxJQUFtQm9DLEtBQUtDLEtBQUwsQ0FBVzZHLE1BQVgsQ0FBbkI7QUFDQTs7QUFFRDtBQUNBLFNBQUssSUFBSUMsS0FBVCxJQUFrQlAsTUFBbEIsRUFBMEI7QUFDekIsU0FBSU8sVUFBVUosS0FBZCxFQUFxQjtBQUNwQi9FLGFBQU9tRixLQUFQLElBQWdCdkYsUUFBUW1GLEtBQVIsRUFBZUksS0FBZixFQUFzQm5GLE9BQU8rRSxLQUFQLENBQXRCLENBQWhCO0FBQ0E7QUFDRDs7QUFFRCxXQUFPLElBQVA7QUFDQSxJQXZERDs7QUF5REFsRixTQUFNYSxTQUFOLENBQWdCRSxRQUFoQixHQUEyQixVQUFVbUUsS0FBVixFQUFpQkssSUFBakIsRUFBdUI7QUFDakQsUUFBSW5HLE9BQU9tRyxLQUFLLENBQUwsQ0FBWDs7QUFFQSxRQUFJbkcsU0FBU0UsU0FBYixFQUF3QjtBQUN2QjtBQUNBLFlBQU8sS0FBSzJGLFNBQUwsQ0FBZUMsS0FBZixDQUFQO0FBQ0E7O0FBRUQ7QUFDQSxRQUFJLE9BQU85RixJQUFQLEtBQWdCLFFBQXBCLEVBQThCO0FBQzdCQSxZQUFPb0csTUFBTTNFLFNBQU4sQ0FBZ0J4QyxLQUFoQixDQUFzQjFCLElBQXRCLENBQTJCNEksSUFBM0IsQ0FBUDtBQUNBOztBQUVELFNBQUtqRixTQUFMLENBQWU0RSxLQUFmLEVBQXNCOUYsSUFBdEI7QUFDQSxXQUFPLElBQVA7QUFDQSxJQWZEOztBQWlCQVksU0FBTWEsU0FBTixDQUFnQmEsVUFBaEIsR0FBNkIsVUFBVXdELEtBQVYsRUFBaUJPLEtBQWpCLEVBQXdCaEUsR0FBeEIsRUFBNkI7QUFDekQsUUFBSWlFLFVBQVUsS0FBS3ZGLE1BQUwsQ0FBWStFLEtBQVosQ0FBZDtBQUNBLFFBQUl6RCxRQUFRbkMsU0FBWixFQUF1QjtBQUN0QjtBQUNBLFlBQU9vRyxRQUFRRCxLQUFSLENBQVA7QUFDQSxLQUhELE1BR08sSUFBSWhFLFFBQVFpRSxRQUFRRCxLQUFSLENBQVosRUFBNEI7QUFDbEM7QUFDQSxZQUFPLElBQVA7QUFDQTs7QUFFRDtBQUNBQyxZQUFRRCxLQUFSLElBQWlCaEUsR0FBakI7QUFDQSxTQUFLbkIsU0FBTCxDQUFlNEUsS0FBZixFQUFzQlEsT0FBdEI7O0FBRUEsV0FBTyxJQUFQO0FBQ0EsSUFmRDs7QUFpQkEsT0FBSSxPQUFPaEssTUFBUCxLQUFrQixXQUF0QixFQUFtQztBQUNsQ0EsV0FBT3NFLEtBQVAsR0FBZUEsS0FBZjtBQUNBOztBQUVEekUsVUFBT0QsT0FBUCxHQUFpQjBFLEtBQWpCO0FBRUMsR0F2ZVksRUF1ZVgsRUFBQyxLQUFJLENBQUwsRUFBTyxLQUFJLENBQVgsRUF2ZVcsQ0FqTzR5QixFQXdzQnh5QixHQUFFLENBQUMsVUFBUzNELE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNwRDs7QUFFQUMsVUFBT0QsT0FBUCxHQUFpQjtBQUNmcUssYUFBU0EsT0FETTtBQUVmQyxhQUFTQSxPQUZNO0FBR2ZDLGFBQVNBLE9BSE07QUFJZkMsY0FBVUEsUUFKSztBQUtmQyxpQkFBYUEsV0FMRTtBQU1mQyxhQUFTQSxPQU5NO0FBT2ZDLGFBQVNBLE9BUE07QUFRZkMsYUFBU0EsT0FSTTs7QUFVZkMsYUFBU0EsT0FWTTtBQVdmQyxhQUFTQSxPQVhNO0FBWWZDLGFBQVNBLE9BWk07QUFhZkMsY0FBVUEsUUFiSztBQWNmQyxpQkFBYUEsV0FkRTs7QUFnQmZDLGFBQVNBLE9BaEJNO0FBaUJmQyxhQUFTQSxPQWpCTTtBQWtCZkMsYUFBU0EsT0FsQk07QUFtQmZDLGNBQVVBLFFBbkJLO0FBb0JmQyxpQkFBYUEsV0FwQkU7O0FBc0JmQyxhQUFTQSxPQXRCTTtBQXVCZkMsYUFBU0EsT0F2Qk07QUF3QmZDLGFBQVNBLE9BeEJNO0FBeUJmQyxjQUFVQSxRQXpCSztBQTBCZkMsaUJBQWFBLFdBMUJFOztBQTRCZkMsY0FBVUEsUUE1Qks7QUE2QmZDLGNBQVVBLFFBN0JLO0FBOEJmQyxjQUFVQSxRQTlCSztBQStCZkMsY0FBVUEsUUEvQks7QUFnQ2ZDLGtCQUFjQSxZQWhDQzs7QUFrQ2ZDLGlCQUFhQSxXQWxDRTtBQW1DZkMsaUJBQWFBLFdBbkNFO0FBb0NmQyxpQkFBYUEsV0FwQ0U7QUFxQ2ZDLGlCQUFhQSxXQXJDRTtBQXNDZkMsa0JBQWNBLFlBdENDO0FBdUNmQyxpQkFBYUEsV0F2Q0U7QUF3Q2ZDLGlCQUFhQSxXQXhDRTs7QUEwQ2ZDLGFBQVNBLE9BMUNNO0FBMkNmQyxhQUFTQSxPQTNDTTtBQTRDZkMsYUFBU0EsT0E1Q007O0FBOENmQyxhQUFTQSxPQTlDTTtBQStDZkMsYUFBU0EsT0EvQ007QUFnRGZDLGFBQVNBLE9BaERNOztBQWtEZkMsYUFBU0EsT0FsRE07QUFtRGZDLGFBQVNBLE9BbkRNO0FBb0RmQyxhQUFTQTtBQXBETSxJQUFqQjs7QUF3REEsWUFBUzNDLE9BQVQsQ0FBaUJ6SCxHQUFqQixFQUFzQjtBQUNwQixRQUFJcEMsSUFBSW9DLElBQUksQ0FBSixJQUFPLEdBQWY7QUFBQSxRQUNJekMsSUFBSXlDLElBQUksQ0FBSixJQUFPLEdBRGY7QUFBQSxRQUVJZ0IsSUFBSWhCLElBQUksQ0FBSixJQUFPLEdBRmY7QUFBQSxRQUdJdUIsTUFBTWxCLEtBQUtrQixHQUFMLENBQVMzRCxDQUFULEVBQVlMLENBQVosRUFBZXlELENBQWYsQ0FIVjtBQUFBLFFBSUlRLE1BQU1uQixLQUFLbUIsR0FBTCxDQUFTNUQsQ0FBVCxFQUFZTCxDQUFaLEVBQWV5RCxDQUFmLENBSlY7QUFBQSxRQUtJcUosUUFBUTdJLE1BQU1ELEdBTGxCO0FBQUEsUUFNSWIsQ0FOSjtBQUFBLFFBTU9DLENBTlA7QUFBQSxRQU1VQyxDQU5WOztBQVFBLFFBQUlZLE9BQU9ELEdBQVgsRUFDRWIsSUFBSSxDQUFKLENBREYsS0FFSyxJQUFJOUMsS0FBSzRELEdBQVQsRUFDSGQsSUFBSSxDQUFDbkQsSUFBSXlELENBQUwsSUFBVXFKLEtBQWQsQ0FERyxLQUVBLElBQUk5TSxLQUFLaUUsR0FBVCxFQUNIZCxJQUFJLElBQUksQ0FBQ00sSUFBSXBELENBQUwsSUFBVXlNLEtBQWxCLENBREcsS0FFQSxJQUFJckosS0FBS1EsR0FBVCxFQUNIZCxJQUFJLElBQUksQ0FBQzlDLElBQUlMLENBQUwsSUFBUzhNLEtBQWpCOztBQUVGM0osUUFBSUwsS0FBS2tCLEdBQUwsQ0FBU2IsSUFBSSxFQUFiLEVBQWlCLEdBQWpCLENBQUo7O0FBRUEsUUFBSUEsSUFBSSxDQUFSLEVBQ0VBLEtBQUssR0FBTDs7QUFFRkUsUUFBSSxDQUFDVyxNQUFNQyxHQUFQLElBQWMsQ0FBbEI7O0FBRUEsUUFBSUEsT0FBT0QsR0FBWCxFQUNFWixJQUFJLENBQUosQ0FERixLQUVLLElBQUlDLEtBQUssR0FBVCxFQUNIRCxJQUFJMEosU0FBUzdJLE1BQU1ELEdBQWYsQ0FBSixDQURHLEtBR0haLElBQUkwSixTQUFTLElBQUk3SSxHQUFKLEdBQVVELEdBQW5CLENBQUo7O0FBRUYsV0FBTyxDQUFDYixDQUFELEVBQUlDLElBQUksR0FBUixFQUFhQyxJQUFJLEdBQWpCLENBQVA7QUFDRDs7QUFFRCxZQUFTOEcsT0FBVCxDQUFpQjFILEdBQWpCLEVBQXNCO0FBQ3BCLFFBQUlwQyxJQUFJb0MsSUFBSSxDQUFKLENBQVI7QUFBQSxRQUNJekMsSUFBSXlDLElBQUksQ0FBSixDQURSO0FBQUEsUUFFSWdCLElBQUloQixJQUFJLENBQUosQ0FGUjtBQUFBLFFBR0l1QixNQUFNbEIsS0FBS2tCLEdBQUwsQ0FBUzNELENBQVQsRUFBWUwsQ0FBWixFQUFleUQsQ0FBZixDQUhWO0FBQUEsUUFJSVEsTUFBTW5CLEtBQUttQixHQUFMLENBQVM1RCxDQUFULEVBQVlMLENBQVosRUFBZXlELENBQWYsQ0FKVjtBQUFBLFFBS0lxSixRQUFRN0ksTUFBTUQsR0FMbEI7QUFBQSxRQU1JYixDQU5KO0FBQUEsUUFNT0MsQ0FOUDtBQUFBLFFBTVU0QixDQU5WOztBQVFBLFFBQUlmLE9BQU8sQ0FBWCxFQUNFYixJQUFJLENBQUosQ0FERixLQUdFQSxJQUFLMEosUUFBTTdJLEdBQU4sR0FBWSxJQUFiLEdBQW1CLEVBQXZCOztBQUVGLFFBQUlBLE9BQU9ELEdBQVgsRUFDRWIsSUFBSSxDQUFKLENBREYsS0FFSyxJQUFJOUMsS0FBSzRELEdBQVQsRUFDSGQsSUFBSSxDQUFDbkQsSUFBSXlELENBQUwsSUFBVXFKLEtBQWQsQ0FERyxLQUVBLElBQUk5TSxLQUFLaUUsR0FBVCxFQUNIZCxJQUFJLElBQUksQ0FBQ00sSUFBSXBELENBQUwsSUFBVXlNLEtBQWxCLENBREcsS0FFQSxJQUFJckosS0FBS1EsR0FBVCxFQUNIZCxJQUFJLElBQUksQ0FBQzlDLElBQUlMLENBQUwsSUFBVThNLEtBQWxCOztBQUVGM0osUUFBSUwsS0FBS2tCLEdBQUwsQ0FBU2IsSUFBSSxFQUFiLEVBQWlCLEdBQWpCLENBQUo7O0FBRUEsUUFBSUEsSUFBSSxDQUFSLEVBQ0VBLEtBQUssR0FBTDs7QUFFRjZCLFFBQU1mLE1BQU0sR0FBUCxHQUFjLElBQWYsR0FBdUIsRUFBM0I7O0FBRUEsV0FBTyxDQUFDZCxDQUFELEVBQUlDLENBQUosRUFBTzRCLENBQVAsQ0FBUDtBQUNEOztBQUVELFlBQVNvRixPQUFULENBQWlCM0gsR0FBakIsRUFBc0I7QUFDcEIsUUFBSXBDLElBQUlvQyxJQUFJLENBQUosQ0FBUjtBQUFBLFFBQ0l6QyxJQUFJeUMsSUFBSSxDQUFKLENBRFI7QUFBQSxRQUVJZ0IsSUFBSWhCLElBQUksQ0FBSixDQUZSO0FBQUEsUUFHSVUsSUFBSStHLFFBQVF6SCxHQUFSLEVBQWEsQ0FBYixDQUhSO0FBQUEsUUFJSWUsSUFBSSxJQUFFLEdBQUYsR0FBUVYsS0FBS2tCLEdBQUwsQ0FBUzNELENBQVQsRUFBWXlDLEtBQUtrQixHQUFMLENBQVNoRSxDQUFULEVBQVl5RCxDQUFaLENBQVosQ0FKaEI7QUFBQSxRQUtJQSxJQUFJLElBQUksSUFBRSxHQUFGLEdBQVFYLEtBQUttQixHQUFMLENBQVM1RCxDQUFULEVBQVl5QyxLQUFLbUIsR0FBTCxDQUFTakUsQ0FBVCxFQUFZeUQsQ0FBWixDQUFaLENBTHBCOztBQU9BLFdBQU8sQ0FBQ04sQ0FBRCxFQUFJSyxJQUFJLEdBQVIsRUFBYUMsSUFBSSxHQUFqQixDQUFQO0FBQ0Q7O0FBRUQsWUFBUzRHLFFBQVQsQ0FBa0I1SCxHQUFsQixFQUF1QjtBQUNyQixRQUFJcEMsSUFBSW9DLElBQUksQ0FBSixJQUFTLEdBQWpCO0FBQUEsUUFDSXpDLElBQUl5QyxJQUFJLENBQUosSUFBUyxHQURqQjtBQUFBLFFBRUlnQixJQUFJaEIsSUFBSSxDQUFKLElBQVMsR0FGakI7QUFBQSxRQUdJOUIsQ0FISjtBQUFBLFFBR09vTSxDQUhQO0FBQUEsUUFHVUMsQ0FIVjtBQUFBLFFBR2FDLENBSGI7O0FBS0FBLFFBQUluSyxLQUFLa0IsR0FBTCxDQUFTLElBQUkzRCxDQUFiLEVBQWdCLElBQUlMLENBQXBCLEVBQXVCLElBQUl5RCxDQUEzQixDQUFKO0FBQ0E5QyxRQUFJLENBQUMsSUFBSU4sQ0FBSixHQUFRNE0sQ0FBVCxLQUFlLElBQUlBLENBQW5CLEtBQXlCLENBQTdCO0FBQ0FGLFFBQUksQ0FBQyxJQUFJL00sQ0FBSixHQUFRaU4sQ0FBVCxLQUFlLElBQUlBLENBQW5CLEtBQXlCLENBQTdCO0FBQ0FELFFBQUksQ0FBQyxJQUFJdkosQ0FBSixHQUFRd0osQ0FBVCxLQUFlLElBQUlBLENBQW5CLEtBQXlCLENBQTdCO0FBQ0EsV0FBTyxDQUFDdE0sSUFBSSxHQUFMLEVBQVVvTSxJQUFJLEdBQWQsRUFBbUJDLElBQUksR0FBdkIsRUFBNEJDLElBQUksR0FBaEMsQ0FBUDtBQUNEOztBQUVELFlBQVMzQyxXQUFULENBQXFCN0gsR0FBckIsRUFBMEI7QUFDeEIsV0FBT3lLLGdCQUFnQkMsS0FBS0MsU0FBTCxDQUFlM0ssR0FBZixDQUFoQixDQUFQO0FBQ0Q7O0FBRUQsWUFBUzhILE9BQVQsQ0FBaUI5SCxHQUFqQixFQUFzQjtBQUNwQixRQUFJcEMsSUFBSW9DLElBQUksQ0FBSixJQUFTLEdBQWpCO0FBQUEsUUFDSXpDLElBQUl5QyxJQUFJLENBQUosSUFBUyxHQURqQjtBQUFBLFFBRUlnQixJQUFJaEIsSUFBSSxDQUFKLElBQVMsR0FGakI7O0FBSUE7QUFDQXBDLFFBQUlBLElBQUksT0FBSixHQUFjeUMsS0FBS2lFLEdBQUwsQ0FBVSxDQUFDMUcsSUFBSSxLQUFMLElBQWMsS0FBeEIsRUFBZ0MsR0FBaEMsQ0FBZCxHQUFzREEsSUFBSSxLQUE5RDtBQUNBTCxRQUFJQSxJQUFJLE9BQUosR0FBYzhDLEtBQUtpRSxHQUFMLENBQVUsQ0FBQy9HLElBQUksS0FBTCxJQUFjLEtBQXhCLEVBQWdDLEdBQWhDLENBQWQsR0FBc0RBLElBQUksS0FBOUQ7QUFDQXlELFFBQUlBLElBQUksT0FBSixHQUFjWCxLQUFLaUUsR0FBTCxDQUFVLENBQUN0RCxJQUFJLEtBQUwsSUFBYyxLQUF4QixFQUFnQyxHQUFoQyxDQUFkLEdBQXNEQSxJQUFJLEtBQTlEOztBQUVBLFFBQUk0SixJQUFLaE4sSUFBSSxNQUFMLEdBQWdCTCxJQUFJLE1BQXBCLEdBQStCeUQsSUFBSSxNQUEzQztBQUNBLFFBQUl1SixJQUFLM00sSUFBSSxNQUFMLEdBQWdCTCxJQUFJLE1BQXBCLEdBQStCeUQsSUFBSSxNQUEzQztBQUNBLFFBQUk2SixJQUFLak4sSUFBSSxNQUFMLEdBQWdCTCxJQUFJLE1BQXBCLEdBQStCeUQsSUFBSSxNQUEzQzs7QUFFQSxXQUFPLENBQUM0SixJQUFJLEdBQUwsRUFBVUwsSUFBRyxHQUFiLEVBQWtCTSxJQUFJLEdBQXRCLENBQVA7QUFDRDs7QUFFRCxZQUFTOUMsT0FBVCxDQUFpQi9ILEdBQWpCLEVBQXNCO0FBQ3BCLFFBQUk4SyxNQUFNaEQsUUFBUTlILEdBQVIsQ0FBVjtBQUFBLFFBQ000SyxJQUFJRSxJQUFJLENBQUosQ0FEVjtBQUFBLFFBRU1QLElBQUlPLElBQUksQ0FBSixDQUZWO0FBQUEsUUFHTUQsSUFBSUMsSUFBSSxDQUFKLENBSFY7QUFBQSxRQUlNbEssQ0FKTjtBQUFBLFFBSVN2QyxDQUpUO0FBQUEsUUFJWTJDLENBSlo7O0FBTUE0SixTQUFLLE1BQUw7QUFDQUwsU0FBSyxHQUFMO0FBQ0FNLFNBQUssT0FBTDs7QUFFQUQsUUFBSUEsSUFBSSxRQUFKLEdBQWV2SyxLQUFLaUUsR0FBTCxDQUFTc0csQ0FBVCxFQUFZLElBQUUsQ0FBZCxDQUFmLEdBQW1DLFFBQVFBLENBQVQsR0FBZSxLQUFLLEdBQTFEO0FBQ0FMLFFBQUlBLElBQUksUUFBSixHQUFlbEssS0FBS2lFLEdBQUwsQ0FBU2lHLENBQVQsRUFBWSxJQUFFLENBQWQsQ0FBZixHQUFtQyxRQUFRQSxDQUFULEdBQWUsS0FBSyxHQUExRDtBQUNBTSxRQUFJQSxJQUFJLFFBQUosR0FBZXhLLEtBQUtpRSxHQUFMLENBQVN1RyxDQUFULEVBQVksSUFBRSxDQUFkLENBQWYsR0FBbUMsUUFBUUEsQ0FBVCxHQUFlLEtBQUssR0FBMUQ7O0FBRUFqSyxRQUFLLE1BQU0ySixDQUFQLEdBQVksRUFBaEI7QUFDQWxNLFFBQUksT0FBT3VNLElBQUlMLENBQVgsQ0FBSjtBQUNBdkosUUFBSSxPQUFPdUosSUFBSU0sQ0FBWCxDQUFKOztBQUVBLFdBQU8sQ0FBQ2pLLENBQUQsRUFBSXZDLENBQUosRUFBTzJDLENBQVAsQ0FBUDtBQUNEOztBQUVELFlBQVNnSCxPQUFULENBQWlCWCxJQUFqQixFQUF1QjtBQUNyQixXQUFPNEMsUUFBUWxDLFFBQVFWLElBQVIsQ0FBUixDQUFQO0FBQ0Q7O0FBRUQsWUFBU1ksT0FBVCxDQUFpQnpILEdBQWpCLEVBQXNCO0FBQ3BCLFFBQUlFLElBQUlGLElBQUksQ0FBSixJQUFTLEdBQWpCO0FBQUEsUUFDSUcsSUFBSUgsSUFBSSxDQUFKLElBQVMsR0FEakI7QUFBQSxRQUVJSSxJQUFJSixJQUFJLENBQUosSUFBUyxHQUZqQjtBQUFBLFFBR0l1SyxFQUhKO0FBQUEsUUFHUUMsRUFIUjtBQUFBLFFBR1lDLEVBSFo7QUFBQSxRQUdnQmpMLEdBSGhCO0FBQUEsUUFHcUJ1RCxHQUhyQjs7QUFLQSxRQUFJNUMsS0FBSyxDQUFULEVBQVk7QUFDVjRDLFdBQU0zQyxJQUFJLEdBQVY7QUFDQSxZQUFPLENBQUMyQyxHQUFELEVBQU1BLEdBQU4sRUFBV0EsR0FBWCxDQUFQO0FBQ0Q7O0FBRUQsUUFBSTNDLElBQUksR0FBUixFQUNFb0ssS0FBS3BLLEtBQUssSUFBSUQsQ0FBVCxDQUFMLENBREYsS0FHRXFLLEtBQUtwSyxJQUFJRCxDQUFKLEdBQVFDLElBQUlELENBQWpCO0FBQ0ZvSyxTQUFLLElBQUluSyxDQUFKLEdBQVFvSyxFQUFiOztBQUVBaEwsVUFBTSxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxDQUFOO0FBQ0EsU0FBSyxJQUFJL0IsSUFBSSxDQUFiLEVBQWdCQSxJQUFJLENBQXBCLEVBQXVCQSxHQUF2QixFQUE0QjtBQUMxQmdOLFVBQUt2SyxJQUFJLElBQUksQ0FBSixHQUFRLEVBQUd6QyxJQUFJLENBQVAsQ0FBakI7QUFDQWdOLFVBQUssQ0FBTCxJQUFVQSxJQUFWO0FBQ0FBLFVBQUssQ0FBTCxJQUFVQSxJQUFWOztBQUVBLFNBQUksSUFBSUEsRUFBSixHQUFTLENBQWIsRUFDRTFILE1BQU13SCxLQUFLLENBQUNDLEtBQUtELEVBQU4sSUFBWSxDQUFaLEdBQWdCRSxFQUEzQixDQURGLEtBRUssSUFBSSxJQUFJQSxFQUFKLEdBQVMsQ0FBYixFQUNIMUgsTUFBTXlILEVBQU4sQ0FERyxLQUVBLElBQUksSUFBSUMsRUFBSixHQUFTLENBQWIsRUFDSDFILE1BQU13SCxLQUFLLENBQUNDLEtBQUtELEVBQU4sS0FBYSxJQUFJLENBQUosR0FBUUUsRUFBckIsSUFBMkIsQ0FBdEMsQ0FERyxLQUdIMUgsTUFBTXdILEVBQU47O0FBRUYvSyxTQUFJL0IsQ0FBSixJQUFTc0YsTUFBTSxHQUFmO0FBQ0Q7O0FBRUQsV0FBT3ZELEdBQVA7QUFDRDs7QUFFRCxZQUFTa0ksT0FBVCxDQUFpQjFILEdBQWpCLEVBQXNCO0FBQ3BCLFFBQUlFLElBQUlGLElBQUksQ0FBSixDQUFSO0FBQUEsUUFDSUcsSUFBSUgsSUFBSSxDQUFKLElBQVMsR0FEakI7QUFBQSxRQUVJSSxJQUFJSixJQUFJLENBQUosSUFBUyxHQUZqQjtBQUFBLFFBR0kwSyxFQUhKO0FBQUEsUUFHUTNJLENBSFI7O0FBS0EsUUFBRzNCLE1BQU0sQ0FBVCxFQUFZO0FBQ1I7QUFDQTtBQUNBLFlBQU8sQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsQ0FBUDtBQUNIOztBQUVEQSxTQUFLLENBQUw7QUFDQUQsU0FBTUMsS0FBSyxDQUFOLEdBQVdBLENBQVgsR0FBZSxJQUFJQSxDQUF4QjtBQUNBMkIsUUFBSSxDQUFDM0IsSUFBSUQsQ0FBTCxJQUFVLENBQWQ7QUFDQXVLLFNBQU0sSUFBSXZLLENBQUwsSUFBV0MsSUFBSUQsQ0FBZixDQUFMO0FBQ0EsV0FBTyxDQUFDRCxDQUFELEVBQUl3SyxLQUFLLEdBQVQsRUFBYzNJLElBQUksR0FBbEIsQ0FBUDtBQUNEOztBQUVELFlBQVM0RixPQUFULENBQWlCZCxJQUFqQixFQUF1QjtBQUNyQixXQUFPTSxRQUFRTSxRQUFRWixJQUFSLENBQVIsQ0FBUDtBQUNEOztBQUVELFlBQVNlLFFBQVQsQ0FBa0JmLElBQWxCLEVBQXdCO0FBQ3RCLFdBQU9PLFNBQVNLLFFBQVFaLElBQVIsQ0FBVCxDQUFQO0FBQ0Q7O0FBRUQsWUFBU2dCLFdBQVQsQ0FBcUJoQixJQUFyQixFQUEyQjtBQUN6QixXQUFPUSxZQUFZSSxRQUFRWixJQUFSLENBQVosQ0FBUDtBQUNEOztBQUdELFlBQVNpQixPQUFULENBQWlCcEcsR0FBakIsRUFBc0I7QUFDcEIsUUFBSXhCLElBQUl3QixJQUFJLENBQUosSUFBUyxFQUFqQjtBQUFBLFFBQ0l2QixJQUFJdUIsSUFBSSxDQUFKLElBQVMsR0FEakI7QUFBQSxRQUVJSyxJQUFJTCxJQUFJLENBQUosSUFBUyxHQUZqQjtBQUFBLFFBR0lpSixLQUFLOUssS0FBSytLLEtBQUwsQ0FBVzFLLENBQVgsSUFBZ0IsQ0FIekI7O0FBS0EsUUFBSXZELElBQUl1RCxJQUFJTCxLQUFLK0ssS0FBTCxDQUFXMUssQ0FBWCxDQUFaO0FBQUEsUUFDSWxDLElBQUksTUFBTStELENBQU4sSUFBVyxJQUFJNUIsQ0FBZixDQURSO0FBQUEsUUFFSTBLLElBQUksTUFBTTlJLENBQU4sSUFBVyxJQUFLNUIsSUFBSXhELENBQXBCLENBRlI7QUFBQSxRQUdJWSxJQUFJLE1BQU13RSxDQUFOLElBQVcsSUFBSzVCLEtBQUssSUFBSXhELENBQVQsQ0FBaEIsQ0FIUjtBQUFBLFFBSUlvRixJQUFJLE1BQU1BLENBSmQ7O0FBTUEsWUFBTzRJLEVBQVA7QUFDRSxVQUFLLENBQUw7QUFDRSxhQUFPLENBQUM1SSxDQUFELEVBQUl4RSxDQUFKLEVBQU9TLENBQVAsQ0FBUDtBQUNGLFVBQUssQ0FBTDtBQUNFLGFBQU8sQ0FBQzZNLENBQUQsRUFBSTlJLENBQUosRUFBTy9ELENBQVAsQ0FBUDtBQUNGLFVBQUssQ0FBTDtBQUNFLGFBQU8sQ0FBQ0EsQ0FBRCxFQUFJK0QsQ0FBSixFQUFPeEUsQ0FBUCxDQUFQO0FBQ0YsVUFBSyxDQUFMO0FBQ0UsYUFBTyxDQUFDUyxDQUFELEVBQUk2TSxDQUFKLEVBQU85SSxDQUFQLENBQVA7QUFDRixVQUFLLENBQUw7QUFDRSxhQUFPLENBQUN4RSxDQUFELEVBQUlTLENBQUosRUFBTytELENBQVAsQ0FBUDtBQUNGLFVBQUssQ0FBTDtBQUNFLGFBQU8sQ0FBQ0EsQ0FBRCxFQUFJL0QsQ0FBSixFQUFPNk0sQ0FBUCxDQUFQO0FBWko7QUFjRDs7QUFFRCxZQUFTOUMsT0FBVCxDQUFpQnJHLEdBQWpCLEVBQXNCO0FBQ3BCLFFBQUl4QixJQUFJd0IsSUFBSSxDQUFKLENBQVI7QUFBQSxRQUNJdkIsSUFBSXVCLElBQUksQ0FBSixJQUFTLEdBRGpCO0FBQUEsUUFFSUssSUFBSUwsSUFBSSxDQUFKLElBQVMsR0FGakI7QUFBQSxRQUdJb0osRUFISjtBQUFBLFFBR1ExSyxDQUhSOztBQUtBQSxRQUFJLENBQUMsSUFBSUQsQ0FBTCxJQUFVNEIsQ0FBZDtBQUNBK0ksU0FBSzNLLElBQUk0QixDQUFUO0FBQ0ErSSxVQUFPMUssS0FBSyxDQUFOLEdBQVdBLENBQVgsR0FBZSxJQUFJQSxDQUF6QjtBQUNBMEssU0FBS0EsTUFBTSxDQUFYO0FBQ0ExSyxTQUFLLENBQUw7QUFDQSxXQUFPLENBQUNGLENBQUQsRUFBSTRLLEtBQUssR0FBVCxFQUFjMUssSUFBSSxHQUFsQixDQUFQO0FBQ0Q7O0FBRUQsWUFBUzRILE9BQVQsQ0FBaUJuQixJQUFqQixFQUF1QjtBQUNyQixXQUFPTSxRQUFRVyxRQUFRakIsSUFBUixDQUFSLENBQVA7QUFDRDs7QUFFRCxZQUFTb0IsUUFBVCxDQUFrQnBCLElBQWxCLEVBQXdCO0FBQ3RCLFdBQU9PLFNBQVNVLFFBQVFqQixJQUFSLENBQVQsQ0FBUDtBQUNEOztBQUVELFlBQVNxQixXQUFULENBQXFCckIsSUFBckIsRUFBMkI7QUFDekIsV0FBT1EsWUFBWVMsUUFBUWpCLElBQVIsQ0FBWixDQUFQO0FBQ0Q7O0FBRUQ7QUFDQSxZQUFTc0IsT0FBVCxDQUFpQjdILEdBQWpCLEVBQXNCO0FBQ3BCLFFBQUlKLElBQUlJLElBQUksQ0FBSixJQUFTLEdBQWpCO0FBQUEsUUFDSXlLLEtBQUt6SyxJQUFJLENBQUosSUFBUyxHQURsQjtBQUFBLFFBRUkwSyxLQUFLMUssSUFBSSxDQUFKLElBQVMsR0FGbEI7QUFBQSxRQUdJb0UsUUFBUXFHLEtBQUtDLEVBSGpCO0FBQUEsUUFJSXZOLENBSko7QUFBQSxRQUlPc0UsQ0FKUDtBQUFBLFFBSVVwRixDQUpWO0FBQUEsUUFJYVcsQ0FKYjs7QUFNQTtBQUNBLFFBQUlvSCxRQUFRLENBQVosRUFBZTtBQUNicUcsV0FBTXJHLEtBQU47QUFDQXNHLFdBQU10RyxLQUFOO0FBQ0Q7O0FBRURqSCxRQUFJb0MsS0FBSytLLEtBQUwsQ0FBVyxJQUFJMUssQ0FBZixDQUFKO0FBQ0E2QixRQUFJLElBQUlpSixFQUFSO0FBQ0FyTyxRQUFJLElBQUl1RCxDQUFKLEdBQVF6QyxDQUFaO0FBQ0EsUUFBSSxDQUFDQSxJQUFJLElBQUwsS0FBYyxDQUFsQixFQUFxQjtBQUNuQmQsU0FBSSxJQUFJQSxDQUFSO0FBQ0Q7QUFDRFcsUUFBSXlOLEtBQUtwTyxLQUFLb0YsSUFBSWdKLEVBQVQsQ0FBVCxDQW5Cb0IsQ0FtQkk7O0FBRXhCLFlBQVF0TixDQUFSO0FBQ0U7QUFDQSxVQUFLLENBQUw7QUFDQSxVQUFLLENBQUw7QUFBUUwsVUFBSTJFLENBQUosQ0FBT2hGLElBQUlPLENBQUosQ0FBT2tELElBQUl1SyxFQUFKLENBQVE7QUFDOUIsVUFBSyxDQUFMO0FBQVEzTixVQUFJRSxDQUFKLENBQU9QLElBQUlnRixDQUFKLENBQU92QixJQUFJdUssRUFBSixDQUFRO0FBQzlCLFVBQUssQ0FBTDtBQUFRM04sVUFBSTJOLEVBQUosQ0FBUWhPLElBQUlnRixDQUFKLENBQU92QixJQUFJbEQsQ0FBSixDQUFPO0FBQzlCLFVBQUssQ0FBTDtBQUFRRixVQUFJMk4sRUFBSixDQUFRaE8sSUFBSU8sQ0FBSixDQUFPa0QsSUFBSXVCLENBQUosQ0FBTztBQUM5QixVQUFLLENBQUw7QUFBUTNFLFVBQUlFLENBQUosQ0FBT1AsSUFBSWdPLEVBQUosQ0FBUXZLLElBQUl1QixDQUFKLENBQU87QUFDOUIsVUFBSyxDQUFMO0FBQVEzRSxVQUFJMkUsQ0FBSixDQUFPaEYsSUFBSWdPLEVBQUosQ0FBUXZLLElBQUlsRCxDQUFKLENBQU87QUFSaEM7O0FBV0EsV0FBTyxDQUFDRixJQUFJLEdBQUwsRUFBVUwsSUFBSSxHQUFkLEVBQW1CeUQsSUFBSSxHQUF2QixDQUFQO0FBQ0Q7O0FBRUQsWUFBUzRILE9BQVQsQ0FBaUJ2QixJQUFqQixFQUF1QjtBQUNyQixXQUFPSSxRQUFRa0IsUUFBUXRCLElBQVIsQ0FBUixDQUFQO0FBQ0Q7O0FBRUQsWUFBU3dCLE9BQVQsQ0FBaUJ4QixJQUFqQixFQUF1QjtBQUNyQixXQUFPSyxRQUFRaUIsUUFBUXRCLElBQVIsQ0FBUixDQUFQO0FBQ0Q7O0FBRUQsWUFBU3lCLFFBQVQsQ0FBa0J6QixJQUFsQixFQUF3QjtBQUN0QixXQUFPTyxTQUFTZSxRQUFRdEIsSUFBUixDQUFULENBQVA7QUFDRDs7QUFFRCxZQUFTMEIsV0FBVCxDQUFxQjFCLElBQXJCLEVBQTJCO0FBQ3pCLFdBQU9RLFlBQVljLFFBQVF0QixJQUFSLENBQVosQ0FBUDtBQUNEOztBQUVELFlBQVMyQixRQUFULENBQWtCN0csSUFBbEIsRUFBd0I7QUFDdEIsUUFBSWpFLElBQUlpRSxLQUFLLENBQUwsSUFBVSxHQUFsQjtBQUFBLFFBQ0ltSSxJQUFJbkksS0FBSyxDQUFMLElBQVUsR0FEbEI7QUFBQSxRQUVJb0ksSUFBSXBJLEtBQUssQ0FBTCxJQUFVLEdBRmxCO0FBQUEsUUFHSXFJLElBQUlySSxLQUFLLENBQUwsSUFBVSxHQUhsQjtBQUFBLFFBSUl2RSxDQUpKO0FBQUEsUUFJT0wsQ0FKUDtBQUFBLFFBSVV5RCxDQUpWOztBQU1BcEQsUUFBSSxJQUFJeUMsS0FBS2tCLEdBQUwsQ0FBUyxDQUFULEVBQVlyRCxLQUFLLElBQUlzTSxDQUFULElBQWNBLENBQTFCLENBQVI7QUFDQWpOLFFBQUksSUFBSThDLEtBQUtrQixHQUFMLENBQVMsQ0FBVCxFQUFZK0ksS0FBSyxJQUFJRSxDQUFULElBQWNBLENBQTFCLENBQVI7QUFDQXhKLFFBQUksSUFBSVgsS0FBS2tCLEdBQUwsQ0FBUyxDQUFULEVBQVlnSixLQUFLLElBQUlDLENBQVQsSUFBY0EsQ0FBMUIsQ0FBUjtBQUNBLFdBQU8sQ0FBQzVNLElBQUksR0FBTCxFQUFVTCxJQUFJLEdBQWQsRUFBbUJ5RCxJQUFJLEdBQXZCLENBQVA7QUFDRDs7QUFFRCxZQUFTaUksUUFBVCxDQUFrQjVCLElBQWxCLEVBQXdCO0FBQ3RCLFdBQU9JLFFBQVF1QixTQUFTM0IsSUFBVCxDQUFSLENBQVA7QUFDRDs7QUFFRCxZQUFTNkIsUUFBVCxDQUFrQjdCLElBQWxCLEVBQXdCO0FBQ3RCLFdBQU9LLFFBQVFzQixTQUFTM0IsSUFBVCxDQUFSLENBQVA7QUFDRDs7QUFFRCxZQUFTOEIsUUFBVCxDQUFrQjlCLElBQWxCLEVBQXdCO0FBQ3RCLFdBQU9NLFFBQVFxQixTQUFTM0IsSUFBVCxDQUFSLENBQVA7QUFDRDs7QUFFRCxZQUFTK0IsWUFBVCxDQUFzQi9CLElBQXRCLEVBQTRCO0FBQzFCLFdBQU9RLFlBQVltQixTQUFTM0IsSUFBVCxDQUFaLENBQVA7QUFDRDs7QUFHRCxZQUFTdUMsT0FBVCxDQUFpQmtCLEdBQWpCLEVBQXNCO0FBQ3BCLFFBQUlGLElBQUlFLElBQUksQ0FBSixJQUFTLEdBQWpCO0FBQUEsUUFDSVAsSUFBSU8sSUFBSSxDQUFKLElBQVMsR0FEakI7QUFBQSxRQUVJRCxJQUFJQyxJQUFJLENBQUosSUFBUyxHQUZqQjtBQUFBLFFBR0lsTixDQUhKO0FBQUEsUUFHT0wsQ0FIUDtBQUFBLFFBR1V5RCxDQUhWOztBQUtBcEQsUUFBS2dOLElBQUksTUFBTCxHQUFnQkwsSUFBSSxDQUFDLE1BQXJCLEdBQWdDTSxJQUFJLENBQUMsTUFBekM7QUFDQXROLFFBQUtxTixJQUFJLENBQUMsTUFBTixHQUFpQkwsSUFBSSxNQUFyQixHQUFnQ00sSUFBSSxNQUF4QztBQUNBN0osUUFBSzRKLElBQUksTUFBTCxHQUFnQkwsSUFBSSxDQUFDLE1BQXJCLEdBQWdDTSxJQUFJLE1BQXhDOztBQUVBO0FBQ0FqTixRQUFJQSxJQUFJLFNBQUosR0FBa0IsUUFBUXlDLEtBQUtpRSxHQUFMLENBQVMxRyxDQUFULEVBQVksTUFBTSxHQUFsQixDQUFULEdBQW1DLEtBQXBELEdBQ0FBLElBQUtBLElBQUksS0FEYjs7QUFHQUwsUUFBSUEsSUFBSSxTQUFKLEdBQWtCLFFBQVE4QyxLQUFLaUUsR0FBTCxDQUFTL0csQ0FBVCxFQUFZLE1BQU0sR0FBbEIsQ0FBVCxHQUFtQyxLQUFwRCxHQUNBQSxJQUFLQSxJQUFJLEtBRGI7O0FBR0F5RCxRQUFJQSxJQUFJLFNBQUosR0FBa0IsUUFBUVgsS0FBS2lFLEdBQUwsQ0FBU3RELENBQVQsRUFBWSxNQUFNLEdBQWxCLENBQVQsR0FBbUMsS0FBcEQsR0FDQUEsSUFBS0EsSUFBSSxLQURiOztBQUdBcEQsUUFBSXlDLEtBQUtrQixHQUFMLENBQVNsQixLQUFLbUIsR0FBTCxDQUFTLENBQVQsRUFBWTVELENBQVosQ0FBVCxFQUF5QixDQUF6QixDQUFKO0FBQ0FMLFFBQUk4QyxLQUFLa0IsR0FBTCxDQUFTbEIsS0FBS21CLEdBQUwsQ0FBUyxDQUFULEVBQVlqRSxDQUFaLENBQVQsRUFBeUIsQ0FBekIsQ0FBSjtBQUNBeUQsUUFBSVgsS0FBS2tCLEdBQUwsQ0FBU2xCLEtBQUttQixHQUFMLENBQVMsQ0FBVCxFQUFZUixDQUFaLENBQVQsRUFBeUIsQ0FBekIsQ0FBSjs7QUFFQSxXQUFPLENBQUNwRCxJQUFJLEdBQUwsRUFBVUwsSUFBSSxHQUFkLEVBQW1CeUQsSUFBSSxHQUF2QixDQUFQO0FBQ0Q7O0FBRUQsWUFBUzZJLE9BQVQsQ0FBaUJpQixHQUFqQixFQUFzQjtBQUNwQixRQUFJRixJQUFJRSxJQUFJLENBQUosQ0FBUjtBQUFBLFFBQ0lQLElBQUlPLElBQUksQ0FBSixDQURSO0FBQUEsUUFFSUQsSUFBSUMsSUFBSSxDQUFKLENBRlI7QUFBQSxRQUdJbEssQ0FISjtBQUFBLFFBR092QyxDQUhQO0FBQUEsUUFHVTJDLENBSFY7O0FBS0E0SixTQUFLLE1BQUw7QUFDQUwsU0FBSyxHQUFMO0FBQ0FNLFNBQUssT0FBTDs7QUFFQUQsUUFBSUEsSUFBSSxRQUFKLEdBQWV2SyxLQUFLaUUsR0FBTCxDQUFTc0csQ0FBVCxFQUFZLElBQUUsQ0FBZCxDQUFmLEdBQW1DLFFBQVFBLENBQVQsR0FBZSxLQUFLLEdBQTFEO0FBQ0FMLFFBQUlBLElBQUksUUFBSixHQUFlbEssS0FBS2lFLEdBQUwsQ0FBU2lHLENBQVQsRUFBWSxJQUFFLENBQWQsQ0FBZixHQUFtQyxRQUFRQSxDQUFULEdBQWUsS0FBSyxHQUExRDtBQUNBTSxRQUFJQSxJQUFJLFFBQUosR0FBZXhLLEtBQUtpRSxHQUFMLENBQVN1RyxDQUFULEVBQVksSUFBRSxDQUFkLENBQWYsR0FBbUMsUUFBUUEsQ0FBVCxHQUFlLEtBQUssR0FBMUQ7O0FBRUFqSyxRQUFLLE1BQU0ySixDQUFQLEdBQVksRUFBaEI7QUFDQWxNLFFBQUksT0FBT3VNLElBQUlMLENBQVgsQ0FBSjtBQUNBdkosUUFBSSxPQUFPdUosSUFBSU0sQ0FBWCxDQUFKOztBQUVBLFdBQU8sQ0FBQ2pLLENBQUQsRUFBSXZDLENBQUosRUFBTzJDLENBQVAsQ0FBUDtBQUNEOztBQUVELFlBQVM4SSxPQUFULENBQWlCekMsSUFBakIsRUFBdUI7QUFDckIsV0FBTzRDLFFBQVFKLFFBQVF4QyxJQUFSLENBQVIsQ0FBUDtBQUNEOztBQUVELFlBQVMwQyxPQUFULENBQWlCMEIsR0FBakIsRUFBc0I7QUFDcEIsUUFBSTdLLElBQUk2SyxJQUFJLENBQUosQ0FBUjtBQUFBLFFBQ0lwTixJQUFJb04sSUFBSSxDQUFKLENBRFI7QUFBQSxRQUVJekssSUFBSXlLLElBQUksQ0FBSixDQUZSO0FBQUEsUUFHSWIsQ0FISjtBQUFBLFFBR09MLENBSFA7QUFBQSxRQUdVTSxDQUhWO0FBQUEsUUFHYWEsRUFIYjs7QUFLQSxRQUFJOUssS0FBSyxDQUFULEVBQVk7QUFDVjJKLFNBQUszSixJQUFJLEdBQUwsR0FBWSxLQUFoQjtBQUNBOEssVUFBTSxTQUFTbkIsSUFBSSxHQUFiLENBQUQsR0FBdUIsS0FBSyxHQUFqQztBQUNELEtBSEQsTUFHTztBQUNMQSxTQUFJLE1BQU1sSyxLQUFLaUUsR0FBTCxDQUFTLENBQUMxRCxJQUFJLEVBQUwsSUFBVyxHQUFwQixFQUF5QixDQUF6QixDQUFWO0FBQ0E4SyxVQUFLckwsS0FBS2lFLEdBQUwsQ0FBU2lHLElBQUksR0FBYixFQUFrQixJQUFFLENBQXBCLENBQUw7QUFDRDs7QUFFREssUUFBSUEsSUFBSSxNQUFKLElBQWMsUUFBZCxHQUF5QkEsSUFBSyxVQUFXdk0sSUFBSSxHQUFMLEdBQVlxTixFQUFaLEdBQWtCLEtBQUssR0FBakMsQ0FBRCxHQUEyQyxLQUF4RSxHQUFnRixTQUFTckwsS0FBS2lFLEdBQUwsQ0FBVWpHLElBQUksR0FBTCxHQUFZcU4sRUFBckIsRUFBeUIsQ0FBekIsQ0FBN0Y7O0FBRUFiLFFBQUlBLElBQUksT0FBSixJQUFlLFFBQWYsR0FBMEJBLElBQUssV0FBV2EsS0FBTTFLLElBQUksR0FBVixHQUFrQixLQUFLLEdBQWxDLENBQUQsR0FBNEMsS0FBMUUsR0FBa0YsVUFBVVgsS0FBS2lFLEdBQUwsQ0FBU29ILEtBQU0xSyxJQUFJLEdBQW5CLEVBQXlCLENBQXpCLENBQWhHOztBQUVBLFdBQU8sQ0FBQzRKLENBQUQsRUFBSUwsQ0FBSixFQUFPTSxDQUFQLENBQVA7QUFDRDs7QUFFRCxZQUFTWixPQUFULENBQWlCd0IsR0FBakIsRUFBc0I7QUFDcEIsUUFBSTdLLElBQUk2SyxJQUFJLENBQUosQ0FBUjtBQUFBLFFBQ0lwTixJQUFJb04sSUFBSSxDQUFKLENBRFI7QUFBQSxRQUVJekssSUFBSXlLLElBQUksQ0FBSixDQUZSO0FBQUEsUUFHSUUsRUFISjtBQUFBLFFBR1FqTCxDQUhSO0FBQUEsUUFHV3hDLENBSFg7O0FBS0F5TixTQUFLdEwsS0FBS3VMLEtBQUwsQ0FBVzVLLENBQVgsRUFBYzNDLENBQWQsQ0FBTDtBQUNBcUMsUUFBSWlMLEtBQUssR0FBTCxHQUFXLENBQVgsR0FBZXRMLEtBQUt3TCxFQUF4QjtBQUNBLFFBQUluTCxJQUFJLENBQVIsRUFBVztBQUNUQSxVQUFLLEdBQUw7QUFDRDtBQUNEeEMsUUFBSW1DLEtBQUt5TCxJQUFMLENBQVV6TixJQUFJQSxDQUFKLEdBQVEyQyxJQUFJQSxDQUF0QixDQUFKO0FBQ0EsV0FBTyxDQUFDSixDQUFELEVBQUkxQyxDQUFKLEVBQU93QyxDQUFQLENBQVA7QUFDRDs7QUFFRCxZQUFTc0osT0FBVCxDQUFpQjNDLElBQWpCLEVBQXVCO0FBQ3JCLFdBQU91QyxRQUFRRyxRQUFRMUMsSUFBUixDQUFSLENBQVA7QUFDRDs7QUFFRCxZQUFTNkMsT0FBVCxDQUFpQjZCLEdBQWpCLEVBQXNCO0FBQ3BCLFFBQUluTCxJQUFJbUwsSUFBSSxDQUFKLENBQVI7QUFBQSxRQUNJN04sSUFBSTZOLElBQUksQ0FBSixDQURSO0FBQUEsUUFFSXJMLElBQUlxTCxJQUFJLENBQUosQ0FGUjtBQUFBLFFBR0kxTixDQUhKO0FBQUEsUUFHTzJDLENBSFA7QUFBQSxRQUdVMkssRUFIVjs7QUFLQUEsU0FBS2pMLElBQUksR0FBSixHQUFVLENBQVYsR0FBY0wsS0FBS3dMLEVBQXhCO0FBQ0F4TixRQUFJSCxJQUFJbUMsS0FBSzJMLEdBQUwsQ0FBU0wsRUFBVCxDQUFSO0FBQ0EzSyxRQUFJOUMsSUFBSW1DLEtBQUs0TCxHQUFMLENBQVNOLEVBQVQsQ0FBUjtBQUNBLFdBQU8sQ0FBQy9LLENBQUQsRUFBSXZDLENBQUosRUFBTzJDLENBQVAsQ0FBUDtBQUNEOztBQUVELFlBQVNtSixPQUFULENBQWlCOUMsSUFBakIsRUFBdUI7QUFDckIsV0FBTzBDLFFBQVFHLFFBQVE3QyxJQUFSLENBQVIsQ0FBUDtBQUNEOztBQUVELFlBQVMrQyxPQUFULENBQWlCL0MsSUFBakIsRUFBdUI7QUFDckIsV0FBTzJDLFFBQVFFLFFBQVE3QyxJQUFSLENBQVIsQ0FBUDtBQUNEOztBQUVELFlBQVNnQyxXQUFULENBQXFCM0osT0FBckIsRUFBOEI7QUFDNUIsV0FBT3dNLFlBQVl4TSxPQUFaLENBQVA7QUFDRDs7QUFFRCxZQUFTNEosV0FBVCxDQUFxQmpDLElBQXJCLEVBQTJCO0FBQ3pCLFdBQU9JLFFBQVE0QixZQUFZaEMsSUFBWixDQUFSLENBQVA7QUFDRDs7QUFFRCxZQUFTa0MsV0FBVCxDQUFxQmxDLElBQXJCLEVBQTJCO0FBQ3pCLFdBQU9LLFFBQVEyQixZQUFZaEMsSUFBWixDQUFSLENBQVA7QUFDRDs7QUFFRCxZQUFTbUMsV0FBVCxDQUFxQm5DLElBQXJCLEVBQTJCO0FBQ3pCLFdBQU9NLFFBQVEwQixZQUFZaEMsSUFBWixDQUFSLENBQVA7QUFDRDs7QUFFRCxZQUFTb0MsWUFBVCxDQUFzQnBDLElBQXRCLEVBQTRCO0FBQzFCLFdBQU9PLFNBQVN5QixZQUFZaEMsSUFBWixDQUFULENBQVA7QUFDRDs7QUFFRCxZQUFTcUMsV0FBVCxDQUFxQnJDLElBQXJCLEVBQTJCO0FBQ3pCLFdBQU9VLFFBQVFzQixZQUFZaEMsSUFBWixDQUFSLENBQVA7QUFDRDs7QUFFRCxZQUFTc0MsV0FBVCxDQUFxQnRDLElBQXJCLEVBQTJCO0FBQ3pCLFdBQU9TLFFBQVF1QixZQUFZaEMsSUFBWixDQUFSLENBQVA7QUFDRDs7QUFFRCxPQUFJNkUsY0FBYztBQUNoQkMsZUFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQURJO0FBRWhCQyxrQkFBYyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQUZFO0FBR2hCQyxVQUFNLENBQUMsQ0FBRCxFQUFHLEdBQUgsRUFBTyxHQUFQLENBSFU7QUFJaEJDLGdCQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBSkk7QUFLaEJDLFdBQVEsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0FMUTtBQU1oQkMsV0FBUSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQU5RO0FBT2hCQyxZQUFRLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBUFE7QUFRaEJ4SSxXQUFRLENBQUMsQ0FBRCxFQUFHLENBQUgsRUFBSyxDQUFMLENBUlE7QUFTaEJ5SSxvQkFBZ0IsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0FUQTtBQVVoQmhKLFVBQU0sQ0FBQyxDQUFELEVBQUcsQ0FBSCxFQUFLLEdBQUwsQ0FWVTtBQVdoQmlKLGdCQUFZLENBQUMsR0FBRCxFQUFLLEVBQUwsRUFBUSxHQUFSLENBWEk7QUFZaEJDLFdBQVEsQ0FBQyxHQUFELEVBQUssRUFBTCxFQUFRLEVBQVIsQ0FaUTtBQWFoQkMsZUFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWJJO0FBY2hCQyxlQUFZLENBQUMsRUFBRCxFQUFJLEdBQUosRUFBUSxHQUFSLENBZEk7QUFlaEJDLGdCQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxDQUFULENBZkk7QUFnQmhCQyxlQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxFQUFULENBaEJJO0FBaUJoQkMsV0FBUSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVCxDQWpCUTtBQWtCaEJDLG9CQUFnQixDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWxCQTtBQW1CaEJDLGNBQVUsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0FuQk07QUFvQmhCQyxhQUFVLENBQUMsR0FBRCxFQUFLLEVBQUwsRUFBUSxFQUFSLENBcEJNO0FBcUJoQjFLLFVBQU0sQ0FBQyxDQUFELEVBQUcsR0FBSCxFQUFPLEdBQVAsQ0FyQlU7QUFzQmhCMkssY0FBVSxDQUFDLENBQUQsRUFBRyxDQUFILEVBQUssR0FBTCxDQXRCTTtBQXVCaEJDLGNBQVUsQ0FBQyxDQUFELEVBQUcsR0FBSCxFQUFPLEdBQVAsQ0F2Qk07QUF3QmhCQyxtQkFBZ0IsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEVBQVQsQ0F4QkE7QUF5QmhCQyxjQUFVLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBekJNO0FBMEJoQkMsZUFBWSxDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sQ0FBUCxDQTFCSTtBQTJCaEJDLGNBQVUsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0EzQk07QUE0QmhCQyxlQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBNUJJO0FBNkJoQkMsaUJBQWMsQ0FBQyxHQUFELEVBQUssQ0FBTCxFQUFPLEdBQVAsQ0E3QkU7QUE4QmhCQyxvQkFBZ0IsQ0FBQyxFQUFELEVBQUksR0FBSixFQUFRLEVBQVIsQ0E5QkE7QUErQmhCQyxnQkFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsQ0FBVCxDQS9CSTtBQWdDaEJDLGdCQUFZLENBQUMsR0FBRCxFQUFLLEVBQUwsRUFBUSxHQUFSLENBaENJO0FBaUNoQkMsYUFBVSxDQUFDLEdBQUQsRUFBSyxDQUFMLEVBQU8sQ0FBUCxDQWpDTTtBQWtDaEJDLGdCQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBbENJO0FBbUNoQkMsa0JBQWMsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0FuQ0U7QUFvQ2hCQyxtQkFBZ0IsQ0FBQyxFQUFELEVBQUksRUFBSixFQUFPLEdBQVAsQ0FwQ0E7QUFxQ2hCQyxtQkFBZ0IsQ0FBQyxFQUFELEVBQUksRUFBSixFQUFPLEVBQVAsQ0FyQ0E7QUFzQ2hCQyxtQkFBZ0IsQ0FBQyxFQUFELEVBQUksRUFBSixFQUFPLEVBQVAsQ0F0Q0E7QUF1Q2hCQyxtQkFBZ0IsQ0FBQyxDQUFELEVBQUcsR0FBSCxFQUFPLEdBQVAsQ0F2Q0E7QUF3Q2hCQyxnQkFBWSxDQUFDLEdBQUQsRUFBSyxDQUFMLEVBQU8sR0FBUCxDQXhDSTtBQXlDaEJDLGNBQVUsQ0FBQyxHQUFELEVBQUssRUFBTCxFQUFRLEdBQVIsQ0F6Q007QUEwQ2hCQyxpQkFBYyxDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sR0FBUCxDQTFDRTtBQTJDaEJDLGFBQVUsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0EzQ007QUE0Q2hCQyxhQUFVLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBNUNNO0FBNkNoQkMsZ0JBQVksQ0FBQyxFQUFELEVBQUksR0FBSixFQUFRLEdBQVIsQ0E3Q0k7QUE4Q2hCQyxlQUFZLENBQUMsR0FBRCxFQUFLLEVBQUwsRUFBUSxFQUFSLENBOUNJO0FBK0NoQkMsaUJBQWMsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0EvQ0U7QUFnRGhCQyxpQkFBYyxDQUFDLEVBQUQsRUFBSSxHQUFKLEVBQVEsRUFBUixDQWhERTtBQWlEaEJDLGFBQVUsQ0FBQyxHQUFELEVBQUssQ0FBTCxFQUFPLEdBQVAsQ0FqRE07QUFrRGhCQyxlQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBbERJO0FBbURoQkMsZ0JBQVksQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0FuREk7QUFvRGhCQyxVQUFNLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxDQUFULENBcERVO0FBcURoQkMsZUFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVCxDQXJESTtBQXNEaEJDLFVBQU0sQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0F0RFU7QUF1RGhCNUwsV0FBUSxDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sQ0FBUCxDQXZEUTtBQXdEaEI2TCxpQkFBYyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVCxDQXhERTtBQXlEaEJDLFVBQU0sQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0F6RFU7QUEwRGhCQyxjQUFVLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBMURNO0FBMkRoQkMsYUFBVSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTNETTtBQTREaEJDLGVBQVksQ0FBQyxHQUFELEVBQUssRUFBTCxFQUFRLEVBQVIsQ0E1REk7QUE2RGhCQyxZQUFRLENBQUMsRUFBRCxFQUFJLENBQUosRUFBTSxHQUFOLENBN0RRO0FBOERoQkMsV0FBUSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTlEUTtBQStEaEJDLFdBQVEsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0EvRFE7QUFnRWhCQyxjQUFVLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBaEVNO0FBaUVoQkMsbUJBQWdCLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBakVBO0FBa0VoQkMsZUFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsQ0FBVCxDQWxFSTtBQW1FaEJDLGtCQUFjLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBbkVFO0FBb0VoQkMsZUFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXBFSTtBQXFFaEJDLGdCQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBckVJO0FBc0VoQkMsZUFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXRFSTtBQXVFaEJDLDBCQUFzQixDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXZFTjtBQXdFaEJDLGVBQVksQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0F4RUk7QUF5RWhCQyxnQkFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXpFSTtBQTBFaEJDLGVBQVksQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0ExRUk7QUEyRWhCQyxlQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBM0VJO0FBNEVoQkMsaUJBQWMsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0E1RUU7QUE2RWhCQyxtQkFBZ0IsQ0FBQyxFQUFELEVBQUksR0FBSixFQUFRLEdBQVIsQ0E3RUE7QUE4RWhCQyxrQkFBYyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTlFRTtBQStFaEJDLG9CQUFnQixDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQS9FQTtBQWdGaEJDLG9CQUFnQixDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWhGQTtBQWlGaEJDLG9CQUFnQixDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWpGQTtBQWtGaEJDLGlCQUFjLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBbEZFO0FBbUZoQkMsVUFBTSxDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sQ0FBUCxDQW5GVTtBQW9GaEJDLGVBQVksQ0FBQyxFQUFELEVBQUksR0FBSixFQUFRLEVBQVIsQ0FwRkk7QUFxRmhCQyxXQUFRLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBckZRO0FBc0ZoQnBOLGFBQVUsQ0FBQyxHQUFELEVBQUssQ0FBTCxFQUFPLEdBQVAsQ0F0Rk07QUF1RmhCcU4sWUFBUSxDQUFDLEdBQUQsRUFBSyxDQUFMLEVBQU8sQ0FBUCxDQXZGUTtBQXdGaEJDLHNCQUFrQixDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXhGRjtBQXlGaEJDLGdCQUFZLENBQUMsQ0FBRCxFQUFHLENBQUgsRUFBSyxHQUFMLENBekZJO0FBMEZoQkMsa0JBQWMsQ0FBQyxHQUFELEVBQUssRUFBTCxFQUFRLEdBQVIsQ0ExRkU7QUEyRmhCQyxrQkFBYyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTNGRTtBQTRGaEJDLG9CQUFnQixDQUFDLEVBQUQsRUFBSSxHQUFKLEVBQVEsR0FBUixDQTVGQTtBQTZGaEJDLHFCQUFrQixDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTdGRjtBQThGaEJDLHVCQUFvQixDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sR0FBUCxDQTlGSjtBQStGaEJDLHFCQUFrQixDQUFDLEVBQUQsRUFBSSxHQUFKLEVBQVEsR0FBUixDQS9GRjtBQWdHaEJDLHFCQUFrQixDQUFDLEdBQUQsRUFBSyxFQUFMLEVBQVEsR0FBUixDQWhHRjtBQWlHaEJDLGtCQUFjLENBQUMsRUFBRCxFQUFJLEVBQUosRUFBTyxHQUFQLENBakdFO0FBa0doQkMsZUFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWxHSTtBQW1HaEJDLGVBQVksQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0FuR0k7QUFvR2hCQyxjQUFVLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBcEdNO0FBcUdoQkMsaUJBQWMsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0FyR0U7QUFzR2hCQyxVQUFNLENBQUMsQ0FBRCxFQUFHLENBQUgsRUFBSyxHQUFMLENBdEdVO0FBdUdoQkMsYUFBVSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXZHTTtBQXdHaEJDLFdBQVEsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLENBQVQsQ0F4R1E7QUF5R2hCQyxlQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxFQUFULENBekdJO0FBMEdoQkMsWUFBUSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsQ0FBVCxDQTFHUTtBQTJHaEJDLGVBQVksQ0FBQyxHQUFELEVBQUssRUFBTCxFQUFRLENBQVIsQ0EzR0k7QUE0R2hCQyxZQUFRLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBNUdRO0FBNkdoQkMsbUJBQWdCLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBN0dBO0FBOEdoQkMsZUFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTlHSTtBQStHaEJDLG1CQUFnQixDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQS9HQTtBQWdIaEJDLG1CQUFnQixDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWhIQTtBQWlIaEJDLGdCQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBakhJO0FBa0hoQkMsZUFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWxISTtBQW1IaEJDLFVBQU0sQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEVBQVQsQ0FuSFU7QUFvSGhCQyxVQUFNLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBcEhVO0FBcUhoQkMsVUFBTSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXJIVTtBQXNIaEJDLGdCQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBdEhJO0FBdUhoQkMsWUFBUSxDQUFDLEdBQUQsRUFBSyxDQUFMLEVBQU8sR0FBUCxDQXZIUTtBQXdIaEJDLG1CQUFlLENBQUMsR0FBRCxFQUFNLEVBQU4sRUFBVSxHQUFWLENBeEhDO0FBeUhoQmhSLFNBQU0sQ0FBQyxHQUFELEVBQUssQ0FBTCxFQUFPLENBQVAsQ0F6SFU7QUEwSGhCaVIsZUFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTFISTtBQTJIaEJDLGVBQVksQ0FBQyxFQUFELEVBQUksR0FBSixFQUFRLEdBQVIsQ0EzSEk7QUE0SGhCQyxpQkFBYyxDQUFDLEdBQUQsRUFBSyxFQUFMLEVBQVEsRUFBUixDQTVIRTtBQTZIaEJDLFlBQVEsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0E3SFE7QUE4SGhCQyxnQkFBWSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVCxDQTlISTtBQStIaEJDLGNBQVUsQ0FBQyxFQUFELEVBQUksR0FBSixFQUFRLEVBQVIsQ0EvSE07QUFnSWhCQyxjQUFVLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBaElNO0FBaUloQkMsWUFBUSxDQUFDLEdBQUQsRUFBSyxFQUFMLEVBQVEsRUFBUixDQWpJUTtBQWtJaEJDLFlBQVEsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0FsSVE7QUFtSWhCQyxhQUFVLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBbklNO0FBb0loQkMsZUFBWSxDQUFDLEdBQUQsRUFBSyxFQUFMLEVBQVEsR0FBUixDQXBJSTtBQXFJaEJDLGVBQVksQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0FySUk7QUFzSWhCQyxlQUFZLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBdElJO0FBdUloQkMsVUFBTSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXZJVTtBQXdJaEJDLGlCQUFjLENBQUMsQ0FBRCxFQUFHLEdBQUgsRUFBTyxHQUFQLENBeElFO0FBeUloQkMsZUFBWSxDQUFDLEVBQUQsRUFBSSxHQUFKLEVBQVEsR0FBUixDQXpJSTtBQTBJaEJDLFNBQU0sQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0ExSVU7QUEySWhCQyxVQUFNLENBQUMsQ0FBRCxFQUFHLEdBQUgsRUFBTyxHQUFQLENBM0lVO0FBNEloQkMsYUFBVSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTVJTTtBQTZJaEJDLFlBQVEsQ0FBQyxHQUFELEVBQUssRUFBTCxFQUFRLEVBQVIsQ0E3SVE7QUE4SWhCQyxlQUFZLENBQUMsRUFBRCxFQUFJLEdBQUosRUFBUSxHQUFSLENBOUlJO0FBK0loQkMsWUFBUSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQS9JUTtBQWdKaEJDLFdBQVEsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0FoSlE7QUFpSmhCQyxXQUFRLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBakpRO0FBa0poQkMsZ0JBQVksQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0FsSkk7QUFtSmhCOVEsWUFBUSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsQ0FBVCxDQW5KUTtBQW9KaEIrUSxpQkFBYyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVDtBQXBKRSxJQUFsQjs7QUF1SkEsT0FBSXRLLGtCQUFrQixFQUF0QjtBQUNBLFFBQUssSUFBSXVLLEdBQVQsSUFBZ0I5SSxXQUFoQixFQUE2QjtBQUMzQnpCLG9CQUFnQkMsS0FBS0MsU0FBTCxDQUFldUIsWUFBWThJLEdBQVosQ0FBZixDQUFoQixJQUFvREEsR0FBcEQ7QUFDRDtBQUVBLEdBNXJCa0IsRUE0ckJqQixFQTVyQmlCLENBeHNCc3lCLEVBbzRDbnpCLEdBQUUsQ0FBQyxVQUFTN1csT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ3pDLE9BQUk2WCxjQUFjOVcsUUFBUSxDQUFSLENBQWxCOztBQUVBLE9BQUkwRCxVQUFVLFNBQVZBLE9BQVUsR0FBVztBQUN0QixXQUFPLElBQUlxVCxTQUFKLEVBQVA7QUFDRixJQUZEOztBQUlBLFFBQUssSUFBSUMsSUFBVCxJQUFpQkYsV0FBakIsRUFBOEI7QUFDNUI7QUFDQXBULFlBQVFzVCxPQUFPLEtBQWYsSUFBMEIsVUFBU0EsSUFBVCxFQUFlO0FBQ3ZDO0FBQ0EsWUFBTyxVQUFTQyxHQUFULEVBQWM7QUFDbkIsVUFBSSxPQUFPQSxHQUFQLElBQWMsUUFBbEIsRUFDRUEsTUFBTTlOLE1BQU0zRSxTQUFOLENBQWdCeEMsS0FBaEIsQ0FBc0IxQixJQUF0QixDQUEyQnFFLFNBQTNCLENBQU47QUFDRixhQUFPbVMsWUFBWUUsSUFBWixFQUFrQkMsR0FBbEIsQ0FBUDtBQUNELE1BSkQ7QUFLRCxLQVB3QixDQU90QkQsSUFQc0IsQ0FBekI7O0FBU0EsUUFBSUUsT0FBTyxjQUFjQyxJQUFkLENBQW1CSCxJQUFuQixDQUFYO0FBQUEsUUFDSUksT0FBT0YsS0FBSyxDQUFMLENBRFg7QUFBQSxRQUVJRyxLQUFLSCxLQUFLLENBQUwsQ0FGVDs7QUFJQTtBQUNBeFQsWUFBUTBULElBQVIsSUFBZ0IxVCxRQUFRMFQsSUFBUixLQUFpQixFQUFqQzs7QUFFQTFULFlBQVEwVCxJQUFSLEVBQWNDLEVBQWQsSUFBb0IzVCxRQUFRc1QsSUFBUixJQUFpQixVQUFTQSxJQUFULEVBQWU7QUFDbEQsWUFBTyxVQUFTQyxHQUFULEVBQWM7QUFDbkIsVUFBSSxPQUFPQSxHQUFQLElBQWMsUUFBbEIsRUFDRUEsTUFBTTlOLE1BQU0zRSxTQUFOLENBQWdCeEMsS0FBaEIsQ0FBc0IxQixJQUF0QixDQUEyQnFFLFNBQTNCLENBQU47O0FBRUYsVUFBSVMsTUFBTTBSLFlBQVlFLElBQVosRUFBa0JDLEdBQWxCLENBQVY7QUFDQSxVQUFJLE9BQU83UixHQUFQLElBQWMsUUFBZCxJQUEwQkEsUUFBUW5DLFNBQXRDLEVBQ0UsT0FBT21DLEdBQVAsQ0FOaUIsQ0FNTDs7QUFFZCxXQUFLLElBQUl0RixJQUFJLENBQWIsRUFBZ0JBLElBQUlzRixJQUFJN0UsTUFBeEIsRUFBZ0NULEdBQWhDO0FBQ0VzRixXQUFJdEYsQ0FBSixJQUFTb0MsS0FBS0MsS0FBTCxDQUFXaUQsSUFBSXRGLENBQUosQ0FBWCxDQUFUO0FBREYsT0FFQSxPQUFPc0YsR0FBUDtBQUNELE1BWEQ7QUFZRCxLQWJtQyxDQWFqQzRSLElBYmlDLENBQXBDO0FBY0Q7O0FBR0Q7QUFDQSxPQUFJRCxZQUFZLFNBQVpBLFNBQVksR0FBVztBQUN4QixTQUFLTyxLQUFMLEdBQWEsRUFBYjtBQUNGLElBRkQ7O0FBSUE7O0FBRUFQLGFBQVV2UyxTQUFWLENBQW9CK1MsVUFBcEIsR0FBaUMsVUFBUzFPLEtBQVQsRUFBZ0JLLElBQWhCLEVBQXNCO0FBQ3BELFFBQUlwRixTQUFTb0YsS0FBSyxDQUFMLENBQWI7QUFDQSxRQUFJcEYsV0FBV2IsU0FBZixFQUEwQjtBQUN2QjtBQUNBLFlBQU8sS0FBSzJGLFNBQUwsQ0FBZUMsS0FBZixDQUFQO0FBQ0Y7QUFDRDtBQUNBLFFBQUksT0FBTy9FLE1BQVAsSUFBaUIsUUFBckIsRUFBK0I7QUFDNUJBLGNBQVNxRixNQUFNM0UsU0FBTixDQUFnQnhDLEtBQWhCLENBQXNCMUIsSUFBdEIsQ0FBMkI0SSxJQUEzQixDQUFUO0FBQ0Y7O0FBRUQsV0FBTyxLQUFLakYsU0FBTCxDQUFlNEUsS0FBZixFQUFzQi9FLE1BQXRCLENBQVA7QUFDRixJQVpEOztBQWNBO0FBQ0FpVCxhQUFVdlMsU0FBVixDQUFvQlAsU0FBcEIsR0FBZ0MsVUFBUzRFLEtBQVQsRUFBZ0IvRSxNQUFoQixFQUF3QjtBQUNyRCxTQUFLK0UsS0FBTCxHQUFhQSxLQUFiO0FBQ0EsU0FBS3lPLEtBQUwsR0FBYSxFQUFiO0FBQ0EsU0FBS0EsS0FBTCxDQUFXek8sS0FBWCxJQUFvQi9FLE1BQXBCO0FBQ0EsV0FBTyxJQUFQO0FBQ0YsSUFMRDs7QUFPQTs7O0FBR0FpVCxhQUFVdlMsU0FBVixDQUFvQm9FLFNBQXBCLEdBQWdDLFVBQVNDLEtBQVQsRUFBZ0I7QUFDN0MsUUFBSTlGLE9BQU8sS0FBS3VVLEtBQUwsQ0FBV3pPLEtBQVgsQ0FBWDtBQUNBLFFBQUksQ0FBQzlGLElBQUwsRUFBVztBQUNSLFNBQUl5VSxTQUFTLEtBQUszTyxLQUFsQjtBQUFBLFNBQ0l1TyxPQUFPLEtBQUtFLEtBQUwsQ0FBV0UsTUFBWCxDQURYO0FBRUF6VSxZQUFPVyxRQUFROFQsTUFBUixFQUFnQjNPLEtBQWhCLEVBQXVCdU8sSUFBdkIsQ0FBUDs7QUFFQSxVQUFLRSxLQUFMLENBQVd6TyxLQUFYLElBQW9COUYsSUFBcEI7QUFDRjtBQUNGLFdBQU9BLElBQVA7QUFDRCxJQVZEOztBQVlBLElBQUMsS0FBRCxFQUFRLEtBQVIsRUFBZSxLQUFmLEVBQXNCLE1BQXRCLEVBQThCLFNBQTlCLEVBQXlDMFUsT0FBekMsQ0FBaUQsVUFBUzVPLEtBQVQsRUFBZ0I7QUFDOURrTyxjQUFVdlMsU0FBVixDQUFvQnFFLEtBQXBCLElBQTZCLFVBQVM5RixJQUFULEVBQWU7QUFDekMsWUFBTyxLQUFLd1UsVUFBTCxDQUFnQjFPLEtBQWhCLEVBQXVCbEUsU0FBdkIsQ0FBUDtBQUNGLEtBRkQ7QUFHRixJQUpEOztBQU1BekYsVUFBT0QsT0FBUCxHQUFpQnlFLE9BQWpCO0FBQ0MsR0E3Rk8sRUE2Rk4sRUFBQyxLQUFJLENBQUwsRUE3Rk0sQ0FwNENpekIsRUFpK0M5eUIsR0FBRSxDQUFDLFVBQVMxRCxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDOUM7O0FBRUFDLFVBQU9ELE9BQVAsR0FBaUI7QUFDaEIsaUJBQWEsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FERztBQUVoQixvQkFBZ0IsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FGQTtBQUdoQixZQUFRLENBQUMsQ0FBRCxFQUFJLEdBQUosRUFBUyxHQUFULENBSFE7QUFJaEIsa0JBQWMsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FKRTtBQUtoQixhQUFTLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBTE87QUFNaEIsYUFBUyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQU5PO0FBT2hCLGNBQVUsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FQTTtBQVFoQixhQUFTLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBTyxDQUFQLENBUk87QUFTaEIsc0JBQWtCLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBVEY7QUFVaEIsWUFBUSxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sR0FBUCxDQVZRO0FBV2hCLGtCQUFjLENBQUMsR0FBRCxFQUFNLEVBQU4sRUFBVSxHQUFWLENBWEU7QUFZaEIsYUFBUyxDQUFDLEdBQUQsRUFBTSxFQUFOLEVBQVUsRUFBVixDQVpPO0FBYWhCLGlCQUFhLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBYkc7QUFjaEIsaUJBQWEsQ0FBQyxFQUFELEVBQUssR0FBTCxFQUFVLEdBQVYsQ0FkRztBQWVoQixrQkFBYyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsQ0FBWCxDQWZFO0FBZ0JoQixpQkFBYSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsRUFBWCxDQWhCRztBQWlCaEIsYUFBUyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsRUFBWCxDQWpCTztBQWtCaEIsc0JBQWtCLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBbEJGO0FBbUJoQixnQkFBWSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQW5CSTtBQW9CaEIsZUFBVyxDQUFDLEdBQUQsRUFBTSxFQUFOLEVBQVUsRUFBVixDQXBCSztBQXFCaEIsWUFBUSxDQUFDLENBQUQsRUFBSSxHQUFKLEVBQVMsR0FBVCxDQXJCUTtBQXNCaEIsZ0JBQVksQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLEdBQVAsQ0F0Qkk7QUF1QmhCLGdCQUFZLENBQUMsQ0FBRCxFQUFJLEdBQUosRUFBUyxHQUFULENBdkJJO0FBd0JoQixxQkFBaUIsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEVBQVgsQ0F4QkQ7QUF5QmhCLGdCQUFZLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBekJJO0FBMEJoQixpQkFBYSxDQUFDLENBQUQsRUFBSSxHQUFKLEVBQVMsQ0FBVCxDQTFCRztBQTJCaEIsZ0JBQVksQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0EzQkk7QUE0QmhCLGlCQUFhLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBNUJHO0FBNkJoQixtQkFBZSxDQUFDLEdBQUQsRUFBTSxDQUFOLEVBQVMsR0FBVCxDQTdCQztBQThCaEIsc0JBQWtCLENBQUMsRUFBRCxFQUFLLEdBQUwsRUFBVSxFQUFWLENBOUJGO0FBK0JoQixrQkFBYyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsQ0FBWCxDQS9CRTtBQWdDaEIsa0JBQWMsQ0FBQyxHQUFELEVBQU0sRUFBTixFQUFVLEdBQVYsQ0FoQ0U7QUFpQ2hCLGVBQVcsQ0FBQyxHQUFELEVBQU0sQ0FBTixFQUFTLENBQVQsQ0FqQ0s7QUFrQ2hCLGtCQUFjLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBbENFO0FBbUNoQixvQkFBZ0IsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FuQ0E7QUFvQ2hCLHFCQUFpQixDQUFDLEVBQUQsRUFBSyxFQUFMLEVBQVMsR0FBVCxDQXBDRDtBQXFDaEIscUJBQWlCLENBQUMsRUFBRCxFQUFLLEVBQUwsRUFBUyxFQUFULENBckNEO0FBc0NoQixxQkFBaUIsQ0FBQyxFQUFELEVBQUssRUFBTCxFQUFTLEVBQVQsQ0F0Q0Q7QUF1Q2hCLHFCQUFpQixDQUFDLENBQUQsRUFBSSxHQUFKLEVBQVMsR0FBVCxDQXZDRDtBQXdDaEIsa0JBQWMsQ0FBQyxHQUFELEVBQU0sQ0FBTixFQUFTLEdBQVQsQ0F4Q0U7QUF5Q2hCLGdCQUFZLENBQUMsR0FBRCxFQUFNLEVBQU4sRUFBVSxHQUFWLENBekNJO0FBMENoQixtQkFBZSxDQUFDLENBQUQsRUFBSSxHQUFKLEVBQVMsR0FBVCxDQTFDQztBQTJDaEIsZUFBVyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQTNDSztBQTRDaEIsZUFBVyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQTVDSztBQTZDaEIsa0JBQWMsQ0FBQyxFQUFELEVBQUssR0FBTCxFQUFVLEdBQVYsQ0E3Q0U7QUE4Q2hCLGlCQUFhLENBQUMsR0FBRCxFQUFNLEVBQU4sRUFBVSxFQUFWLENBOUNHO0FBK0NoQixtQkFBZSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQS9DQztBQWdEaEIsbUJBQWUsQ0FBQyxFQUFELEVBQUssR0FBTCxFQUFVLEVBQVYsQ0FoREM7QUFpRGhCLGVBQVcsQ0FBQyxHQUFELEVBQU0sQ0FBTixFQUFTLEdBQVQsQ0FqREs7QUFrRGhCLGlCQUFhLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBbERHO0FBbURoQixrQkFBYyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQW5ERTtBQW9EaEIsWUFBUSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsQ0FBWCxDQXBEUTtBQXFEaEIsaUJBQWEsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEVBQVgsQ0FyREc7QUFzRGhCLFlBQVEsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0F0RFE7QUF1RGhCLGFBQVMsQ0FBQyxDQUFELEVBQUksR0FBSixFQUFTLENBQVQsQ0F2RE87QUF3RGhCLG1CQUFlLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxFQUFYLENBeERDO0FBeURoQixZQUFRLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBekRRO0FBMERoQixnQkFBWSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQTFESTtBQTJEaEIsZUFBVyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQTNESztBQTREaEIsaUJBQWEsQ0FBQyxHQUFELEVBQU0sRUFBTixFQUFVLEVBQVYsQ0E1REc7QUE2RGhCLGNBQVUsQ0FBQyxFQUFELEVBQUssQ0FBTCxFQUFRLEdBQVIsQ0E3RE07QUE4RGhCLGFBQVMsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0E5RE87QUErRGhCLGFBQVMsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0EvRE87QUFnRWhCLGdCQUFZLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBaEVJO0FBaUVoQixxQkFBaUIsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FqRUQ7QUFrRWhCLGlCQUFhLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxDQUFYLENBbEVHO0FBbUVoQixvQkFBZ0IsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FuRUE7QUFvRWhCLGlCQUFhLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBcEVHO0FBcUVoQixrQkFBYyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQXJFRTtBQXNFaEIsaUJBQWEsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0F0RUc7QUF1RWhCLDRCQUF3QixDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQXZFUjtBQXdFaEIsaUJBQWEsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0F4RUc7QUF5RWhCLGtCQUFjLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBekVFO0FBMEVoQixpQkFBYSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQTFFRztBQTJFaEIsaUJBQWEsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0EzRUc7QUE0RWhCLG1CQUFlLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBNUVDO0FBNkVoQixxQkFBaUIsQ0FBQyxFQUFELEVBQUssR0FBTCxFQUFVLEdBQVYsQ0E3RUQ7QUE4RWhCLG9CQUFnQixDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQTlFQTtBQStFaEIsc0JBQWtCLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBL0VGO0FBZ0ZoQixzQkFBa0IsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FoRkY7QUFpRmhCLHNCQUFrQixDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQWpGRjtBQWtGaEIsbUJBQWUsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FsRkM7QUFtRmhCLFlBQVEsQ0FBQyxDQUFELEVBQUksR0FBSixFQUFTLENBQVQsQ0FuRlE7QUFvRmhCLGlCQUFhLENBQUMsRUFBRCxFQUFLLEdBQUwsRUFBVSxFQUFWLENBcEZHO0FBcUZoQixhQUFTLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBckZPO0FBc0ZoQixlQUFXLENBQUMsR0FBRCxFQUFNLENBQU4sRUFBUyxHQUFULENBdEZLO0FBdUZoQixjQUFVLENBQUMsR0FBRCxFQUFNLENBQU4sRUFBUyxDQUFULENBdkZNO0FBd0ZoQix3QkFBb0IsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0F4Rko7QUF5RmhCLGtCQUFjLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBTyxHQUFQLENBekZFO0FBMEZoQixvQkFBZ0IsQ0FBQyxHQUFELEVBQU0sRUFBTixFQUFVLEdBQVYsQ0ExRkE7QUEyRmhCLG9CQUFnQixDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQTNGQTtBQTRGaEIsc0JBQWtCLENBQUMsRUFBRCxFQUFLLEdBQUwsRUFBVSxHQUFWLENBNUZGO0FBNkZoQix1QkFBbUIsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0E3Rkg7QUE4RmhCLHlCQUFxQixDQUFDLENBQUQsRUFBSSxHQUFKLEVBQVMsR0FBVCxDQTlGTDtBQStGaEIsdUJBQW1CLENBQUMsRUFBRCxFQUFLLEdBQUwsRUFBVSxHQUFWLENBL0ZIO0FBZ0doQix1QkFBbUIsQ0FBQyxHQUFELEVBQU0sRUFBTixFQUFVLEdBQVYsQ0FoR0g7QUFpR2hCLG9CQUFnQixDQUFDLEVBQUQsRUFBSyxFQUFMLEVBQVMsR0FBVCxDQWpHQTtBQWtHaEIsaUJBQWEsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FsR0c7QUFtR2hCLGlCQUFhLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBbkdHO0FBb0doQixnQkFBWSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQXBHSTtBQXFHaEIsbUJBQWUsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FyR0M7QUFzR2hCLFlBQVEsQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLEdBQVAsQ0F0R1E7QUF1R2hCLGVBQVcsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0F2R0s7QUF3R2hCLGFBQVMsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLENBQVgsQ0F4R087QUF5R2hCLGlCQUFhLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxFQUFYLENBekdHO0FBMEdoQixjQUFVLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxDQUFYLENBMUdNO0FBMkdoQixpQkFBYSxDQUFDLEdBQUQsRUFBTSxFQUFOLEVBQVUsQ0FBVixDQTNHRztBQTRHaEIsY0FBVSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQTVHTTtBQTZHaEIscUJBQWlCLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBN0dEO0FBOEdoQixpQkFBYSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQTlHRztBQStHaEIscUJBQWlCLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBL0dEO0FBZ0hoQixxQkFBaUIsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FoSEQ7QUFpSGhCLGtCQUFjLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBakhFO0FBa0hoQixpQkFBYSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQWxIRztBQW1IaEIsWUFBUSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsRUFBWCxDQW5IUTtBQW9IaEIsWUFBUSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQXBIUTtBQXFIaEIsWUFBUSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQXJIUTtBQXNIaEIsa0JBQWMsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0F0SEU7QUF1SGhCLGNBQVUsQ0FBQyxHQUFELEVBQU0sQ0FBTixFQUFTLEdBQVQsQ0F2SE07QUF3SGhCLHFCQUFpQixDQUFDLEdBQUQsRUFBTSxFQUFOLEVBQVUsR0FBVixDQXhIRDtBQXlIaEIsV0FBTyxDQUFDLEdBQUQsRUFBTSxDQUFOLEVBQVMsQ0FBVCxDQXpIUztBQTBIaEIsaUJBQWEsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0ExSEc7QUEySGhCLGlCQUFhLENBQUMsRUFBRCxFQUFLLEdBQUwsRUFBVSxHQUFWLENBM0hHO0FBNEhoQixtQkFBZSxDQUFDLEdBQUQsRUFBTSxFQUFOLEVBQVUsRUFBVixDQTVIQztBQTZIaEIsY0FBVSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQTdITTtBQThIaEIsa0JBQWMsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEVBQVgsQ0E5SEU7QUErSGhCLGdCQUFZLENBQUMsRUFBRCxFQUFLLEdBQUwsRUFBVSxFQUFWLENBL0hJO0FBZ0loQixnQkFBWSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQWhJSTtBQWlJaEIsY0FBVSxDQUFDLEdBQUQsRUFBTSxFQUFOLEVBQVUsRUFBVixDQWpJTTtBQWtJaEIsY0FBVSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQWxJTTtBQW1JaEIsZUFBVyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQW5JSztBQW9JaEIsaUJBQWEsQ0FBQyxHQUFELEVBQU0sRUFBTixFQUFVLEdBQVYsQ0FwSUc7QUFxSWhCLGlCQUFhLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBcklHO0FBc0loQixpQkFBYSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQXRJRztBQXVJaEIsWUFBUSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQXZJUTtBQXdJaEIsbUJBQWUsQ0FBQyxDQUFELEVBQUksR0FBSixFQUFTLEdBQVQsQ0F4SUM7QUF5SWhCLGlCQUFhLENBQUMsRUFBRCxFQUFLLEdBQUwsRUFBVSxHQUFWLENBeklHO0FBMEloQixXQUFPLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBMUlTO0FBMkloQixZQUFRLENBQUMsQ0FBRCxFQUFJLEdBQUosRUFBUyxHQUFULENBM0lRO0FBNEloQixlQUFXLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLENBNUlLO0FBNkloQixjQUFVLENBQUMsR0FBRCxFQUFNLEVBQU4sRUFBVSxFQUFWLENBN0lNO0FBOEloQixpQkFBYSxDQUFDLEVBQUQsRUFBSyxHQUFMLEVBQVUsR0FBVixDQTlJRztBQStJaEIsY0FBVSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQS9JTTtBQWdKaEIsYUFBUyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQWhKTztBQWlKaEIsYUFBUyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQWpKTztBQWtKaEIsa0JBQWMsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsQ0FsSkU7QUFtSmhCLGNBQVUsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLENBQVgsQ0FuSk07QUFvSmhCLG1CQUFlLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxFQUFYO0FBcEpDLElBQWpCO0FBdUpDLEdBMUpZLEVBMEpYLEVBMUpXLENBaitDNHlCLEVBMm5EbnpCLEdBQUUsQ0FBQyxVQUFTZSxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDekM7OztBQUdBLE9BQUlPLFFBQVFRLFFBQVEsRUFBUixHQUFaOztBQUVBUixTQUFNa1ksT0FBTixHQUFnQjFYLFFBQVEsRUFBUixDQUFoQjs7QUFFQTtBQUNBQSxXQUFRLEVBQVIsRUFBWVIsS0FBWjs7QUFFQUEsU0FBTW1ZLFNBQU4sR0FBa0IzWCxRQUFRLEVBQVIsQ0FBbEI7QUFDQVIsU0FBTW9ZLGdCQUFOLEdBQXlCNVgsUUFBUSxFQUFSLENBQXpCO0FBQ0FSLFNBQU1xWSxRQUFOLEdBQWlCN1gsUUFBUSxFQUFSLENBQWpCO0FBQ0FSLFNBQU1zWSxPQUFOLEdBQWdCOVgsUUFBUSxFQUFSLENBQWhCO0FBQ0FSLFNBQU11WSxRQUFOLEdBQWlCL1gsUUFBUSxFQUFSLENBQWpCO0FBQ0FSLFNBQU13WSxXQUFOLEdBQW9CaFksUUFBUSxFQUFSLENBQXBCO0FBQ0FSLFNBQU15WSxPQUFOLEdBQWdCalksUUFBUSxFQUFSLENBQWhCO0FBQ0FSLFNBQU0wWSxRQUFOLEdBQWlCbFksUUFBUSxFQUFSLENBQWpCO0FBQ0FSLFNBQU0yWSxPQUFOLEdBQWdCblksUUFBUSxFQUFSLENBQWhCO0FBQ0FSLFNBQU00WSxLQUFOLEdBQWNwWSxRQUFRLEVBQVIsQ0FBZDtBQUNBUixTQUFNNlksWUFBTixHQUFxQnJZLFFBQVEsRUFBUixDQUFyQjtBQUNBUixTQUFNOFksS0FBTixHQUFjdFksUUFBUSxFQUFSLENBQWQ7QUFDQVIsU0FBTStZLE9BQU4sR0FBZ0J2WSxRQUFRLEVBQVIsQ0FBaEI7O0FBRUFBLFdBQVEsRUFBUixFQUFZUixLQUFaO0FBQ0FRLFdBQVEsRUFBUixFQUFZUixLQUFaOztBQUVBUSxXQUFRLEVBQVIsRUFBWVIsS0FBWjtBQUNBUSxXQUFRLEVBQVIsRUFBWVIsS0FBWjtBQUNBUSxXQUFRLEVBQVIsRUFBWVIsS0FBWjtBQUNBUSxXQUFRLEVBQVIsRUFBWVIsS0FBWjtBQUNBUSxXQUFRLEVBQVIsRUFBWVIsS0FBWjtBQUNBUSxXQUFRLEVBQVIsRUFBWVIsS0FBWjs7QUFFQTtBQUNBO0FBQ0FRLFdBQVEsRUFBUixFQUFZUixLQUFaO0FBQ0FRLFdBQVEsRUFBUixFQUFZUixLQUFaO0FBQ0FRLFdBQVEsRUFBUixFQUFZUixLQUFaO0FBQ0FRLFdBQVEsRUFBUixFQUFZUixLQUFaO0FBQ0FRLFdBQVEsRUFBUixFQUFZUixLQUFaO0FBQ0FRLFdBQVEsRUFBUixFQUFZUixLQUFaO0FBQ0FRLFdBQVEsRUFBUixFQUFZUixLQUFaOztBQUVBUSxXQUFRLENBQVIsRUFBV1IsS0FBWDtBQUNBUSxXQUFRLENBQVIsRUFBV1IsS0FBWDtBQUNBUSxXQUFRLEVBQVIsRUFBWVIsS0FBWjtBQUNBUSxXQUFRLEVBQVIsRUFBWVIsS0FBWjtBQUNBUSxXQUFRLEVBQVIsRUFBWVIsS0FBWjtBQUNBUSxXQUFRLEVBQVIsRUFBWVIsS0FBWjtBQUNBUSxXQUFRLEVBQVIsRUFBWVIsS0FBWjs7QUFFQTtBQUNBLE9BQUkyWSxVQUFVblksUUFBUSxFQUFSLENBQWQ7QUFDQSxRQUFLLElBQUlxTSxDQUFULElBQWM4TCxPQUFkLEVBQXVCO0FBQ3RCLFFBQUlBLFFBQVE1UCxjQUFSLENBQXVCOEQsQ0FBdkIsQ0FBSixFQUErQjtBQUM5QjdNLFdBQU0yWSxPQUFOLENBQWNLLFFBQWQsQ0FBdUJMLFFBQVE5TCxDQUFSLENBQXZCO0FBQ0E7QUFDRDs7QUFFRDdNLFNBQU0wWSxRQUFOLENBQWVPLFVBQWY7O0FBRUF2WixVQUFPRCxPQUFQLEdBQWlCTyxLQUFqQjtBQUNBLE9BQUksT0FBT0gsTUFBUCxLQUFrQixXQUF0QixFQUFtQztBQUNsQ0EsV0FBT0csS0FBUCxHQUFlQSxLQUFmO0FBQ0E7O0FBRUQ7O0FBRUE7Ozs7Ozs7QUFPQUEsU0FBTWtaLE1BQU4sR0FBZVAsUUFBUVEsTUFBUixDQUFlQyxRQUE5Qjs7QUFFQTs7Ozs7OztBQU9BcFosU0FBTXFaLEtBQU4sR0FBY1YsUUFBUVcsS0FBUixDQUFjRixRQUE1Qjs7QUFFQTs7Ozs7OztBQU9BcFosU0FBTXVaLGFBQU4sR0FBc0J2WixNQUFNMlksT0FBNUI7O0FBRUE7Ozs7Ozs7O0FBUUEzWSxTQUFNd1osVUFBTixHQUFtQnhaLE1BQU1zWSxPQUFOLENBQWNtQixNQUFkLENBQXFCLEVBQXJCLENBQW5COztBQUVBOzs7Ozs7O0FBT0F6WixTQUFNMFosYUFBTixHQUFzQjFaLE1BQU1rWSxPQUFOLENBQWN5QixNQUFwQzs7QUFFQTs7Ozs7OztBQU9BM1osU0FBTTRaLGFBQU4sR0FBc0I1WixNQUFNeVksT0FBNUI7QUFFQyxHQTdITyxFQTZITixFQUFDLE1BQUssRUFBTixFQUFTLE1BQUssRUFBZCxFQUFpQixNQUFLLEVBQXRCLEVBQXlCLE1BQUssRUFBOUIsRUFBaUMsTUFBSyxFQUF0QyxFQUF5QyxNQUFLLEVBQTlDLEVBQWlELE1BQUssRUFBdEQsRUFBeUQsTUFBSyxFQUE5RCxFQUFpRSxNQUFLLEVBQXRFLEVBQXlFLE1BQUssRUFBOUUsRUFBaUYsTUFBSyxFQUF0RixFQUF5RixNQUFLLEVBQTlGLEVBQWlHLE1BQUssRUFBdEcsRUFBeUcsTUFBSyxFQUE5RyxFQUFpSCxNQUFLLEVBQXRILEVBQXlILE1BQUssRUFBOUgsRUFBaUksTUFBSyxFQUF0SSxFQUF5SSxNQUFLLEVBQTlJLEVBQWlKLE1BQUssRUFBdEosRUFBeUosTUFBSyxFQUE5SixFQUFpSyxNQUFLLEVBQXRLLEVBQXlLLE1BQUssRUFBOUssRUFBaUwsTUFBSyxFQUF0TCxFQUF5TCxNQUFLLEVBQTlMLEVBQWlNLE1BQUssRUFBdE0sRUFBeU0sTUFBSyxFQUE5TSxFQUFpTixNQUFLLEVBQXROLEVBQXlOLE1BQUssRUFBOU4sRUFBaU8sTUFBSyxFQUF0TyxFQUF5TyxNQUFLLEVBQTlPLEVBQWlQLE1BQUssRUFBdFAsRUFBeVAsTUFBSyxFQUE5UCxFQUFpUSxNQUFLLEVBQXRRLEVBQXlRLE1BQUssRUFBOVEsRUFBaVIsTUFBSyxFQUF0UixFQUF5UixNQUFLLEVBQTlSLEVBQWlTLE1BQUssRUFBdFMsRUFBeVMsS0FBSSxDQUE3UyxFQUErUyxLQUFJLENBQW5ULEVBN0hNLENBM25EaXpCLEVBd3ZEaGdCLEdBQUUsQ0FBQyxVQUFTalksT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQzVWOztBQUVBQyxVQUFPRCxPQUFQLEdBQWlCLFVBQVNPLEtBQVQsRUFBZ0I7O0FBRWhDQSxVQUFNNlosR0FBTixHQUFZLFVBQVNDLE9BQVQsRUFBa0JDLE1BQWxCLEVBQTBCO0FBQ3JDQSxZQUFPbFIsSUFBUCxHQUFjLEtBQWQ7O0FBRUEsWUFBTyxJQUFJN0ksS0FBSixDQUFVOFosT0FBVixFQUFtQkMsTUFBbkIsQ0FBUDtBQUNBLEtBSkQ7QUFNQSxJQVJEO0FBVUMsR0FiMFQsRUFhelQsRUFieVQsQ0F4dkQ4ZixFQXF3RG56QixHQUFFLENBQUMsVUFBU3ZaLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUN6Qzs7QUFFQUMsVUFBT0QsT0FBUCxHQUFpQixVQUFTTyxLQUFULEVBQWdCOztBQUVoQ0EsVUFBTWdhLE1BQU4sR0FBZSxVQUFTRixPQUFULEVBQWtCQyxNQUFsQixFQUEwQjtBQUN4Q0EsWUFBT2xSLElBQVAsR0FBYyxRQUFkO0FBQ0EsWUFBTyxJQUFJN0ksS0FBSixDQUFVOFosT0FBVixFQUFtQkMsTUFBbkIsQ0FBUDtBQUNBLEtBSEQ7QUFLQSxJQVBEO0FBU0MsR0FaTyxFQVlOLEVBWk0sQ0Fyd0RpekIsRUFpeERuekIsSUFBRyxDQUFDLFVBQVN2WixPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDMUM7O0FBRUFDLFVBQU9ELE9BQVAsR0FBaUIsVUFBU08sS0FBVCxFQUFnQjs7QUFFaENBLFVBQU1pYSxRQUFOLEdBQWlCLFVBQVNILE9BQVQsRUFBa0JDLE1BQWxCLEVBQTBCO0FBQzFDQSxZQUFPbFIsSUFBUCxHQUFjLFVBQWQ7O0FBRUEsWUFBTyxJQUFJN0ksS0FBSixDQUFVOFosT0FBVixFQUFtQkMsTUFBbkIsQ0FBUDtBQUNBLEtBSkQ7QUFNQSxJQVJEO0FBVUMsR0FiUSxFQWFQLEVBYk8sQ0FqeERnekIsRUE4eERuekIsSUFBRyxDQUFDLFVBQVN2WixPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDMUM7O0FBRUFDLFVBQU9ELE9BQVAsR0FBaUIsVUFBU08sS0FBVCxFQUFnQjs7QUFFaENBLFVBQU1rYSxJQUFOLEdBQWEsVUFBU0osT0FBVCxFQUFrQkMsTUFBbEIsRUFBMEI7QUFDdENBLFlBQU9sUixJQUFQLEdBQWMsTUFBZDs7QUFFQSxZQUFPLElBQUk3SSxLQUFKLENBQVU4WixPQUFWLEVBQW1CQyxNQUFuQixDQUFQO0FBQ0EsS0FKRDtBQU1BLElBUkQ7QUFVQyxHQWJRLEVBYVAsRUFiTyxDQTl4RGd6QixFQTJ5RG56QixJQUFHLENBQUMsVUFBU3ZaLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUMxQzs7QUFFQUMsVUFBT0QsT0FBUCxHQUFpQixVQUFTTyxLQUFULEVBQWdCOztBQUVoQ0EsVUFBTW1hLFNBQU4sR0FBa0IsVUFBU0wsT0FBVCxFQUFrQkMsTUFBbEIsRUFBMEI7QUFDM0NBLFlBQU9sUixJQUFQLEdBQWMsV0FBZDs7QUFFQSxZQUFPLElBQUk3SSxLQUFKLENBQVU4WixPQUFWLEVBQW1CQyxNQUFuQixDQUFQO0FBQ0EsS0FKRDtBQU1BLElBUkQ7QUFVQyxHQWJRLEVBYVAsRUFiTyxDQTN5RGd6QixFQXd6RG56QixJQUFHLENBQUMsVUFBU3ZaLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUMxQzs7QUFFQUMsVUFBT0QsT0FBUCxHQUFpQixVQUFTTyxLQUFULEVBQWdCOztBQUVoQ0EsVUFBTW9hLEtBQU4sR0FBYyxVQUFTTixPQUFULEVBQWtCQyxNQUFsQixFQUEwQjtBQUN2Q0EsWUFBT2xSLElBQVAsR0FBYyxPQUFkOztBQUVBLFlBQU8sSUFBSTdJLEtBQUosQ0FBVThaLE9BQVYsRUFBbUJDLE1BQW5CLENBQVA7QUFDQSxLQUpEO0FBTUEsSUFSRDtBQVVDLEdBYlEsRUFhUCxFQWJPLENBeHpEZ3pCLEVBcTBEbnpCLElBQUcsQ0FBQyxVQUFTdlosT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQzFDOztBQUVBQyxVQUFPRCxPQUFQLEdBQWlCLFVBQVNPLEtBQVQsRUFBZ0I7QUFDaENBLFVBQU1xYSxPQUFOLEdBQWdCLFVBQVNQLE9BQVQsRUFBa0JDLE1BQWxCLEVBQTBCO0FBQ3pDQSxZQUFPbFIsSUFBUCxHQUFjLFNBQWQ7QUFDQSxZQUFPLElBQUk3SSxLQUFKLENBQVU4WixPQUFWLEVBQW1CQyxNQUFuQixDQUFQO0FBQ0EsS0FIRDtBQUlBLElBTEQ7QUFPQyxHQVZRLEVBVVAsRUFWTyxDQXIwRGd6QixFQSswRG56QixJQUFHLENBQUMsVUFBU3ZaLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUMxQzs7QUFFQSxPQUFJNFksV0FBVzdYLFFBQVEsRUFBUixDQUFmO0FBQ0EsT0FBSStYLFdBQVcvWCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUkwWCxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7O0FBRUE2WCxZQUFTaUMsSUFBVCxDQUFjLEtBQWQsRUFBcUI7QUFDcEJDLFdBQU87QUFDTkMsV0FBTTtBQURBLEtBRGE7O0FBS3BCQyxZQUFRO0FBQ1BDLFlBQU8sQ0FBQztBQUNQN1IsWUFBTSxVQURDOztBQUdQO0FBQ0E4UiwwQkFBb0IsR0FKYjtBQUtQQyxxQkFBZSxHQUxSOztBQU9QO0FBQ0FDLGNBQVEsSUFSRDs7QUFVUDtBQUNBQyxpQkFBVztBQUNWQyx3QkFBaUI7QUFEUDtBQVhKLE1BQUQsQ0FEQTs7QUFpQlBDLFlBQU8sQ0FBQztBQUNQblMsWUFBTTtBQURDLE1BQUQ7QUFqQkE7QUFMWSxJQUFyQjs7QUE0QkF3UCxZQUFTaUMsSUFBVCxDQUFjLGVBQWQsRUFBK0I7QUFDOUJDLFdBQU87QUFDTkMsV0FBTSxPQURBO0FBRU5TLFdBQU07QUFGQSxLQUR1Qjs7QUFNOUJSLFlBQVE7QUFDUEMsWUFBTyxDQUFDO0FBQ1A3UixZQUFNLFFBREM7QUFFUHFTLGdCQUFVO0FBRkgsTUFBRCxDQURBOztBQU1QRixZQUFPLENBQUM7QUFDUEUsZ0JBQVUsTUFESDtBQUVQclMsWUFBTSxVQUZDOztBQUlQO0FBQ0E4UiwwQkFBb0IsR0FMYjtBQU1QQyxxQkFBZSxHQU5SOztBQVFQO0FBQ0FDLGNBQVEsSUFURDs7QUFXUDtBQUNBQyxpQkFBVztBQUNWQyx3QkFBaUI7QUFEUDtBQVpKLE1BQUQ7QUFOQSxLQU5zQjs7QUE4QjlCeEMsY0FBVTtBQUNUNEMsZ0JBQVc7QUFDVkMscUJBQWU7QUFETDtBQURGLEtBOUJvQjs7QUFvQzlCQyxjQUFVO0FBQ1RDLGdCQUFXO0FBQ1ZoQyxhQUFPLGVBQVNpQyxJQUFULEVBQWVDLElBQWYsRUFBcUI7QUFDM0I7QUFDQSxXQUFJbEMsUUFBUSxFQUFaOztBQUVBLFdBQUlpQyxLQUFLeGEsTUFBTCxHQUFjLENBQWxCLEVBQXFCO0FBQ3BCLFlBQUl3YSxLQUFLLENBQUwsRUFBUUUsTUFBWixFQUFvQjtBQUNuQm5DLGlCQUFRaUMsS0FBSyxDQUFMLEVBQVFFLE1BQWhCO0FBQ0EsU0FGRCxNQUVPLElBQUlELEtBQUtFLE1BQUwsQ0FBWTNhLE1BQVosR0FBcUIsQ0FBckIsSUFBMEJ3YSxLQUFLLENBQUwsRUFBUTNSLEtBQVIsR0FBZ0I0UixLQUFLRSxNQUFMLENBQVkzYSxNQUExRCxFQUFrRTtBQUN4RXVZLGlCQUFRa0MsS0FBS0UsTUFBTCxDQUFZSCxLQUFLLENBQUwsRUFBUTNSLEtBQXBCLENBQVI7QUFDQTtBQUNEOztBQUVELGNBQU8wUCxLQUFQO0FBQ0EsT0FkUzs7QUFnQlZxQyxhQUFPLGVBQVNKLElBQVQsRUFBZUMsSUFBZixFQUFxQjtBQUMzQixXQUFJSSxlQUFlSixLQUFLSyxRQUFMLENBQWNOLEtBQUtPLFlBQW5CLEVBQWlDSCxLQUFqQyxJQUEwQyxFQUE3RDtBQUNBLGNBQU9DLGVBQWUsSUFBZixHQUFzQkwsS0FBS1EsTUFBbEM7QUFDQTtBQW5CUyxNQURGO0FBc0JUdkIsV0FBTSxPQXRCRztBQXVCVFMsV0FBTTtBQXZCRztBQXBDb0IsSUFBL0I7O0FBK0RBOzs7O0FBSUEsWUFBU2Usb0JBQVQsQ0FBOEJwWixLQUE5QixFQUFxQ3FaLE1BQXJDLEVBQTZDO0FBQzVDLFFBQUlyWSxNQUFNaEIsTUFBTXNaLFlBQU4sS0FBdUJ0WixNQUFNdVosS0FBN0IsR0FBcUN2WixNQUFNd1osTUFBckQ7QUFDQSxRQUFJQyxRQUFRelosTUFBTTBaLFFBQU4sRUFBWjtBQUNBLFFBQUlDLElBQUosRUFBVUMsSUFBVixFQUFnQmxjLENBQWhCLEVBQW1CbWMsSUFBbkI7O0FBRUEsU0FBS25jLElBQUksQ0FBSixFQUFPbWMsT0FBT1IsT0FBT2xiLE1BQTFCLEVBQWtDVCxJQUFJbWMsSUFBdEMsRUFBNEMsRUFBRW5jLENBQTlDLEVBQWlEO0FBQ2hEc0QsV0FBTWxCLEtBQUtrQixHQUFMLENBQVNBLEdBQVQsRUFBY3FZLE9BQU8zYixDQUFQLElBQVkyYixPQUFPM2IsSUFBSSxDQUFYLENBQTFCLENBQU47QUFDQTs7QUFFRCxTQUFLQSxJQUFJLENBQUosRUFBT21jLE9BQU9KLE1BQU10YixNQUF6QixFQUFpQ1QsSUFBSW1jLElBQXJDLEVBQTJDLEVBQUVuYyxDQUE3QyxFQUFnRDtBQUMvQ2tjLFlBQU81WixNQUFNOFosZUFBTixDQUFzQnBjLENBQXRCLENBQVA7QUFDQXNELFdBQU10RCxJQUFJLENBQUosR0FBUW9DLEtBQUtrQixHQUFMLENBQVNBLEdBQVQsRUFBYzRZLE9BQU9ELElBQXJCLENBQVIsR0FBcUMzWSxHQUEzQztBQUNBMlksWUFBT0MsSUFBUDtBQUNBOztBQUVELFdBQU81WSxHQUFQO0FBQ0E7O0FBRUQ7Ozs7OztBQU1BLFlBQVMrWSx3QkFBVCxDQUFrQy9TLEtBQWxDLEVBQXlDZ1QsS0FBekMsRUFBZ0RDLE9BQWhELEVBQXlEO0FBQ3hELFFBQUlDLFlBQVlELFFBQVFFLFlBQXhCO0FBQ0EsUUFBSUMsUUFBUUosTUFBTUssVUFBbEI7QUFDQSxRQUFJVCxPQUFPSSxNQUFNWCxNQUFOLENBQWFyUyxLQUFiLENBQVg7QUFDQSxRQUFJc1QsSUFBSixFQUFVM1YsS0FBVjs7QUFFQSxRQUFJMlEsUUFBUWlGLGFBQVIsQ0FBc0JMLFNBQXRCLENBQUosRUFBc0M7QUFDckNJLFlBQU9OLE1BQU1oWixHQUFOLEdBQVlpWixRQUFRbEMsa0JBQTNCO0FBQ0FwVCxhQUFRc1YsUUFBUWpDLGFBQWhCO0FBQ0EsS0FIRCxNQUdPO0FBQ047QUFDQTtBQUNBO0FBQ0FzQyxZQUFPSixZQUFZRSxLQUFuQjtBQUNBelYsYUFBUSxDQUFSO0FBQ0E7O0FBRUQsV0FBTztBQUNONlYsWUFBT0YsT0FBT0YsS0FEUjtBQUVOelYsWUFBT0EsS0FGRDtBQUdOOFYsWUFBT2IsT0FBUVUsT0FBTztBQUhoQixLQUFQO0FBS0E7O0FBRUQ7Ozs7OztBQU1BLFlBQVNJLHlCQUFULENBQW1DMVQsS0FBbkMsRUFBMENnVCxLQUExQyxFQUFpREMsT0FBakQsRUFBMEQ7QUFDekQsUUFBSVosU0FBU1csTUFBTVgsTUFBbkI7QUFDQSxRQUFJTyxPQUFPUCxPQUFPclMsS0FBUCxDQUFYO0FBQ0EsUUFBSTJTLE9BQU8zUyxRQUFRLENBQVIsR0FBWXFTLE9BQU9yUyxRQUFRLENBQWYsQ0FBWixHQUFnQyxJQUEzQztBQUNBLFFBQUkyVCxPQUFPM1QsUUFBUXFTLE9BQU9sYixNQUFQLEdBQWdCLENBQXhCLEdBQTRCa2IsT0FBT3JTLFFBQVEsQ0FBZixDQUE1QixHQUFnRCxJQUEzRDtBQUNBLFFBQUk0VCxVQUFVWCxRQUFRbEMsa0JBQXRCO0FBQ0EsUUFBSTBDLEtBQUosRUFBV0gsSUFBWDs7QUFFQSxRQUFJWCxTQUFTLElBQWIsRUFBbUI7QUFDbEI7QUFDQTtBQUNBQSxZQUFPQyxRQUFRZSxTQUFTLElBQVQsR0FBZ0JYLE1BQU1hLEdBQU4sR0FBWWpCLElBQTVCLEdBQW1DZSxPQUFPZixJQUFsRCxDQUFQO0FBQ0E7O0FBRUQsUUFBSWUsU0FBUyxJQUFiLEVBQW1CO0FBQ2xCO0FBQ0FBLFlBQU9mLE9BQU9BLElBQVAsR0FBY0QsSUFBckI7QUFDQTs7QUFFRGMsWUFBUWIsT0FBUSxDQUFDQSxPQUFPRCxJQUFSLElBQWdCLENBQWpCLEdBQXNCaUIsT0FBckM7QUFDQU4sV0FBUSxDQUFDSyxPQUFPaEIsSUFBUixJQUFnQixDQUFqQixHQUFzQmlCLE9BQTdCOztBQUVBLFdBQU87QUFDTkosWUFBT0YsT0FBT04sTUFBTUssVUFEZDtBQUVOMVYsWUFBT3NWLFFBQVFqQyxhQUZUO0FBR055QyxZQUFPQTtBQUhELEtBQVA7QUFLQTs7QUFFRDNkLFVBQU9ELE9BQVAsR0FBaUIsVUFBU08sS0FBVCxFQUFnQjs7QUFFaENBLFVBQU0wZCxXQUFOLENBQWtCQyxHQUFsQixHQUF3QjNkLE1BQU00ZCxpQkFBTixDQUF3Qm5FLE1BQXhCLENBQStCOztBQUV0RG9FLHNCQUFpQnRGLFNBQVN1RixTQUY0Qjs7QUFJdEQ3RSxpQkFBWSxzQkFBVztBQUN0QixVQUFJOEUsS0FBSyxJQUFUO0FBQ0EsVUFBSUMsSUFBSjs7QUFFQWhlLFlBQU00ZCxpQkFBTixDQUF3QjVZLFNBQXhCLENBQWtDaVUsVUFBbEMsQ0FBNkNnRixLQUE3QyxDQUFtREYsRUFBbkQsRUFBdUQ1WSxTQUF2RDs7QUFFQTZZLGFBQU9ELEdBQUdHLE9BQUgsRUFBUDtBQUNBRixXQUFLRyxLQUFMLEdBQWFKLEdBQUdLLFVBQUgsR0FBZ0JELEtBQTdCO0FBQ0FILFdBQUtMLEdBQUwsR0FBVyxJQUFYO0FBQ0EsTUFicUQ7O0FBZXREVSxhQUFRLGdCQUFTQyxLQUFULEVBQWdCO0FBQ3ZCLFVBQUlQLEtBQUssSUFBVDtBQUNBLFVBQUlRLFFBQVFSLEdBQUdHLE9BQUgsR0FBYTFDLElBQXpCO0FBQ0EsVUFBSWxiLENBQUosRUFBT21jLElBQVA7O0FBRUFzQixTQUFHUyxNQUFILEdBQVlULEdBQUdVLFFBQUgsRUFBWjs7QUFFQSxXQUFLbmUsSUFBSSxDQUFKLEVBQU9tYyxPQUFPOEIsTUFBTXhkLE1BQXpCLEVBQWlDVCxJQUFJbWMsSUFBckMsRUFBMkMsRUFBRW5jLENBQTdDLEVBQWdEO0FBQy9DeWQsVUFBR1csYUFBSCxDQUFpQkgsTUFBTWplLENBQU4sQ0FBakIsRUFBMkJBLENBQTNCLEVBQThCZ2UsS0FBOUI7QUFDQTtBQUNELE1BekJxRDs7QUEyQnRESSxvQkFBZSx1QkFBU3ZELFNBQVQsRUFBb0J2UixLQUFwQixFQUEyQjBVLEtBQTNCLEVBQWtDO0FBQ2hELFVBQUlQLEtBQUssSUFBVDtBQUNBLFVBQUlZLFFBQVFaLEdBQUdZLEtBQWY7QUFDQSxVQUFJWCxPQUFPRCxHQUFHRyxPQUFILEVBQVg7QUFDQSxVQUFJVSxVQUFVYixHQUFHSyxVQUFILEVBQWQ7QUFDQSxVQUFJUyxTQUFTMUQsVUFBVTBELE1BQVYsSUFBb0IsRUFBakM7QUFDQSxVQUFJQyxtQkFBbUJILE1BQU05QixPQUFOLENBQWN0RSxRQUFkLENBQXVCNEMsU0FBOUM7O0FBRUFBLGdCQUFVNEQsT0FBVixHQUFvQmhCLEdBQUdpQixhQUFILENBQWlCaEIsS0FBS2lCLE9BQXRCLENBQXBCO0FBQ0E5RCxnQkFBVStELE9BQVYsR0FBb0JuQixHQUFHaUIsYUFBSCxDQUFpQmhCLEtBQUttQixPQUF0QixDQUFwQjtBQUNBaEUsZ0JBQVVpRSxhQUFWLEdBQTBCckIsR0FBR25VLEtBQTdCO0FBQ0F1UixnQkFBVWtFLE1BQVYsR0FBbUJ6VixLQUFuQjs7QUFFQXVSLGdCQUFVbUUsTUFBVixHQUFtQjtBQUNsQjFELHFCQUFjZ0QsUUFBUWpELEtBREo7QUFFbEJBLGNBQU9nRCxNQUFNbkQsSUFBTixDQUFXRSxNQUFYLENBQWtCOVIsS0FBbEIsQ0FGVztBQUdsQndSLHNCQUFleUQsT0FBT3pELGFBQVAsR0FBdUJ5RCxPQUFPekQsYUFBOUIsR0FBOEMwRCxpQkFBaUIxRCxhQUg1RDtBQUlsQm1FLHdCQUFpQlYsT0FBT1UsZUFBUCxHQUF5QlYsT0FBT1UsZUFBaEMsR0FBa0RySCxRQUFRc0gscUJBQVIsQ0FBOEJaLFFBQVFXLGVBQXRDLEVBQXVEM1YsS0FBdkQsRUFBOERrVixpQkFBaUJTLGVBQS9FLENBSmpEO0FBS2xCRSxvQkFBYVosT0FBT1ksV0FBUCxHQUFxQlosT0FBT1ksV0FBNUIsR0FBMEN2SCxRQUFRc0gscUJBQVIsQ0FBOEJaLFFBQVFhLFdBQXRDLEVBQW1EN1YsS0FBbkQsRUFBMERrVixpQkFBaUJXLFdBQTNFLENBTHJDO0FBTWxCQyxvQkFBYWIsT0FBT2EsV0FBUCxHQUFxQmIsT0FBT2EsV0FBNUIsR0FBMEN4SCxRQUFRc0gscUJBQVIsQ0FBOEJaLFFBQVFjLFdBQXRDLEVBQW1EOVYsS0FBbkQsRUFBMERrVixpQkFBaUJZLFdBQTNFO0FBTnJDLE9BQW5COztBQVNBM0IsU0FBRzRCLHFCQUFILENBQXlCeEUsU0FBekIsRUFBb0N2UixLQUFwQyxFQUEyQzBVLEtBQTNDOztBQUVBbkQsZ0JBQVV5RSxLQUFWO0FBQ0EsTUFwRHFEOztBQXNEdEQ7OztBQUdBRCw0QkFBdUIsK0JBQVN4RSxTQUFULEVBQW9CdlIsS0FBcEIsRUFBMkIwVSxLQUEzQixFQUFrQztBQUN4RCxVQUFJUCxLQUFLLElBQVQ7QUFDQSxVQUFJOEIsUUFBUTFFLFVBQVVtRSxNQUF0QjtBQUNBLFVBQUlRLFNBQVMvQixHQUFHZ0MsYUFBSCxFQUFiO0FBQ0EsVUFBSUMsT0FBT0YsT0FBT0csWUFBUCxFQUFYO0FBQ0EsVUFBSUMsYUFBYUosT0FBTzVELFlBQVAsRUFBakI7QUFDQSxVQUFJVSxRQUFRbUIsR0FBR1MsTUFBSCxJQUFhVCxHQUFHVSxRQUFILEVBQXpCO0FBQ0EsVUFBSTBCLFVBQVVwQyxHQUFHcUMsdUJBQUgsQ0FBMkJyQyxHQUFHblUsS0FBOUIsRUFBcUNBLEtBQXJDLENBQWQ7QUFDQSxVQUFJeVcsVUFBVXRDLEdBQUd1Qyx1QkFBSCxDQUEyQnZDLEdBQUduVSxLQUE5QixFQUFxQ0EsS0FBckMsRUFBNENnVCxLQUE1QyxDQUFkOztBQUVBaUQsWUFBTUssVUFBTixHQUFtQkEsVUFBbkI7QUFDQUwsWUFBTUcsSUFBTixHQUFhMUIsUUFBUTBCLElBQVIsR0FBZUcsUUFBUUgsSUFBcEM7QUFDQUgsWUFBTTVTLENBQU4sR0FBVWlULGFBQWE1QixRQUFRMEIsSUFBUixHQUFlRyxRQUFRSSxJQUFwQyxHQUEyQ0YsUUFBUUcsTUFBN0Q7QUFDQVgsWUFBTWpULENBQU4sR0FBVXNULGFBQWFHLFFBQVFHLE1BQXJCLEdBQThCbEMsUUFBUTBCLElBQVIsR0FBZUcsUUFBUUksSUFBL0Q7QUFDQVYsWUFBTXpELE1BQU4sR0FBZThELGFBQWFHLFFBQVFuRCxJQUFyQixHQUE0QnpaLFNBQTNDO0FBQ0FvYyxZQUFNMUQsS0FBTixHQUFjK0QsYUFBYXpjLFNBQWIsR0FBeUI0YyxRQUFRbkQsSUFBL0M7QUFDQSxNQXpFcUQ7O0FBMkV0RDs7O0FBR0F1RCxzQkFBaUIsMkJBQVc7QUFDM0IsYUFBTyxLQUFLdkMsT0FBTCxHQUFlaUIsT0FBdEI7QUFDQSxNQWhGcUQ7O0FBa0Z0RDs7O0FBR0F1QixzQkFBaUIsMkJBQVc7QUFDM0IsYUFBTyxLQUFLeEMsT0FBTCxHQUFlZSxPQUF0QjtBQUNBLE1BdkZxRDs7QUF5RnREOzs7QUFHQWMsb0JBQWUseUJBQVc7QUFDekIsYUFBTyxLQUFLZixhQUFMLENBQW1CLEtBQUt5QixlQUFMLEVBQW5CLENBQVA7QUFDQSxNQTlGcUQ7O0FBZ0d0RDs7O0FBR0FFLG9CQUFlLHlCQUFXO0FBQ3pCLGFBQU8sS0FBSzNCLGFBQUwsQ0FBbUIsS0FBSzBCLGVBQUwsRUFBbkIsQ0FBUDtBQUNBLE1BckdxRDs7QUF1R3REOzs7Ozs7QUFNQUUsaUJBQVksb0JBQVNDLElBQVQsRUFBZTtBQUMxQixVQUFJOUMsS0FBSyxJQUFUO0FBQ0EsVUFBSVksUUFBUVosR0FBR1ksS0FBZjtBQUNBLFVBQUkvYixRQUFRbWIsR0FBRzRDLGFBQUgsRUFBWjtBQUNBLFVBQUlHLFVBQVVsZSxNQUFNaWEsT0FBTixDQUFjaUUsT0FBNUI7QUFDQSxVQUFJckUsT0FBT29FLFNBQVNwZCxTQUFULEdBQXFCa2IsTUFBTW5ELElBQU4sQ0FBV0ssUUFBWCxDQUFvQjlhLE1BQXpDLEdBQWtEOGYsT0FBTyxDQUFwRTtBQUNBLFVBQUlFLFNBQVMsRUFBYjtBQUNBLFVBQUl6Z0IsQ0FBSixFQUFPMGQsSUFBUDs7QUFFQSxXQUFLMWQsSUFBSSxDQUFULEVBQVlBLElBQUltYyxJQUFoQixFQUFzQixFQUFFbmMsQ0FBeEIsRUFBMkI7QUFDMUIwZCxjQUFPVyxNQUFNcUMsY0FBTixDQUFxQjFnQixDQUFyQixDQUFQO0FBQ0EsV0FBSTBkLEtBQUtMLEdBQUwsSUFBWWdCLE1BQU1zQyxnQkFBTixDQUF1QjNnQixDQUF2QixDQUFaLEtBQ0Z3Z0IsWUFBWSxLQUFaLElBQ0FBLFlBQVksSUFBWixJQUFvQkMsT0FBT0csT0FBUCxDQUFlbEQsS0FBS0csS0FBcEIsTUFBK0IsQ0FBQyxDQURwRCxJQUVBMkMsWUFBWXJkLFNBQVosS0FBMEJ1YSxLQUFLRyxLQUFMLEtBQWUxYSxTQUFmLElBQTRCc2QsT0FBT0csT0FBUCxDQUFlbEQsS0FBS0csS0FBcEIsTUFBK0IsQ0FBQyxDQUF0RixDQUhFLENBQUosRUFHOEY7QUFDN0Y0QyxlQUFPSSxJQUFQLENBQVluRCxLQUFLRyxLQUFqQjtBQUNBO0FBQ0Q7O0FBRUQsYUFBTzRDLE1BQVA7QUFDQSxNQWpJcUQ7O0FBbUl0RDs7OztBQUlBSyxvQkFBZSx5QkFBVztBQUN6QixhQUFPLEtBQUtSLFVBQUwsR0FBa0I3ZixNQUF6QjtBQUNBLE1BeklxRDs7QUEySXREOzs7Ozs7O0FBT0FzZ0Isb0JBQWUsdUJBQVN2RixZQUFULEVBQXVCN1gsSUFBdkIsRUFBNkI7QUFDM0MsVUFBSThjLFNBQVMsS0FBS0gsVUFBTCxDQUFnQjlFLFlBQWhCLENBQWI7QUFDQSxVQUFJbFMsUUFBUzNGLFNBQVNSLFNBQVYsR0FDVHNkLE9BQU9HLE9BQVAsQ0FBZWpkLElBQWYsQ0FEUyxHQUVULENBQUMsQ0FGSixDQUYyQyxDQUlwQzs7QUFFUCxhQUFRMkYsVUFBVSxDQUFDLENBQVosR0FDSm1YLE9BQU9oZ0IsTUFBUCxHQUFnQixDQURaLEdBRUo2SSxLQUZIO0FBR0EsTUEzSnFEOztBQTZKdEQ7OztBQUdBNlUsZUFBVSxvQkFBVztBQUNwQixVQUFJVixLQUFLLElBQVQ7QUFDQSxVQUFJbmIsUUFBUW1iLEdBQUc0QyxhQUFILEVBQVo7QUFDQSxVQUFJMUQsYUFBYWMsR0FBR3FELGFBQUgsRUFBakI7QUFDQSxVQUFJdEYsZUFBZWlDLEdBQUduVSxLQUF0QjtBQUNBLFVBQUlzUyxlQUFldFosTUFBTXNaLFlBQU4sRUFBbkI7QUFDQSxVQUFJbUIsUUFBUW5CLGVBQWV0WixNQUFNMGUsSUFBckIsR0FBNEIxZSxNQUFNMmUsR0FBOUM7QUFDQSxVQUFJOUQsTUFBTUosU0FBU25CLGVBQWV0WixNQUFNdVosS0FBckIsR0FBNkJ2WixNQUFNd1osTUFBNUMsQ0FBVjtBQUNBLFVBQUlILFNBQVMsRUFBYjtBQUNBLFVBQUkzYixDQUFKLEVBQU9tYyxJQUFQLEVBQWE3WSxHQUFiOztBQUVBLFdBQUt0RCxJQUFJLENBQUosRUFBT21jLE9BQU9zQixHQUFHRyxPQUFILEdBQWExQyxJQUFiLENBQWtCemEsTUFBckMsRUFBNkNULElBQUltYyxJQUFqRCxFQUF1RCxFQUFFbmMsQ0FBekQsRUFBNEQ7QUFDM0QyYixjQUFPa0YsSUFBUCxDQUFZdmUsTUFBTTRlLGdCQUFOLENBQXVCLElBQXZCLEVBQTZCbGhCLENBQTdCLEVBQWdDd2IsWUFBaEMsQ0FBWjtBQUNBOztBQUVEbFksWUFBTXNVLFFBQVFpRixhQUFSLENBQXNCdmEsTUFBTWlhLE9BQU4sQ0FBY0UsWUFBcEMsSUFDSGYscUJBQXFCcFosS0FBckIsRUFBNEJxWixNQUE1QixDQURHLEdBRUgsQ0FBQyxDQUZKOztBQUlBLGFBQU87QUFDTnJZLFlBQUtBLEdBREM7QUFFTnFZLGVBQVFBLE1BRkY7QUFHTm9CLGNBQU9BLEtBSEQ7QUFJTkksWUFBS0EsR0FKQztBQUtOUixtQkFBWUEsVUFMTjtBQU1OcmEsY0FBT0E7QUFORCxPQUFQO0FBUUEsTUEzTHFEOztBQTZMdEQ7Ozs7QUFJQXdkLDhCQUF5QixpQ0FBU3RFLFlBQVQsRUFBdUJsUyxLQUF2QixFQUE4QjtBQUN0RCxVQUFJbVUsS0FBSyxJQUFUO0FBQ0EsVUFBSVksUUFBUVosR0FBR1ksS0FBZjtBQUNBLFVBQUlYLE9BQU9ELEdBQUdHLE9BQUgsRUFBWDtBQUNBLFVBQUl0YixRQUFRbWIsR0FBR2dDLGFBQUgsRUFBWjtBQUNBLFVBQUlsRSxXQUFXOEMsTUFBTW5ELElBQU4sQ0FBV0ssUUFBMUI7QUFDQSxVQUFJaFgsUUFBUWpDLE1BQU02ZSxhQUFOLENBQW9CNUYsU0FBU0MsWUFBVCxFQUF1Qk4sSUFBdkIsQ0FBNEI1UixLQUE1QixDQUFwQixDQUFaO0FBQ0EsVUFBSWtYLFVBQVVsZSxNQUFNaWEsT0FBTixDQUFjaUUsT0FBNUI7QUFDQSxVQUFJM0MsUUFBUUgsS0FBS0csS0FBakI7QUFDQSxVQUFJZCxRQUFRLENBQVo7QUFDQSxVQUFJL2MsQ0FBSixFQUFPb2hCLEtBQVAsRUFBY0MsTUFBZCxFQUFzQjNCLElBQXRCLEVBQTRCTyxJQUE1QixFQUFrQ3JELElBQWxDOztBQUVBLFVBQUk0RCxXQUFZQSxZQUFZcmQsU0FBWixJQUF5QjBhLFVBQVUxYSxTQUFuRCxFQUErRDtBQUM5RCxZQUFLbkQsSUFBSSxDQUFULEVBQVlBLElBQUl3YixZQUFoQixFQUE4QixFQUFFeGIsQ0FBaEMsRUFBbUM7QUFDbENvaEIsZ0JBQVEvQyxNQUFNcUMsY0FBTixDQUFxQjFnQixDQUFyQixDQUFSOztBQUVBLFlBQUlvaEIsTUFBTS9ELEdBQU4sSUFDSCtELE1BQU12RCxLQUFOLEtBQWdCQSxLQURiLElBRUh1RCxNQUFNRSxVQUFOLENBQWlCbkIsZUFBakIsT0FBdUM3ZCxNQUFNaWYsRUFGMUMsSUFHSGxELE1BQU1zQyxnQkFBTixDQUF1QjNnQixDQUF2QixDQUhELEVBRzRCOztBQUUzQnFoQixrQkFBUy9lLE1BQU02ZSxhQUFOLENBQW9CNUYsU0FBU3ZiLENBQVQsRUFBWWtiLElBQVosQ0FBaUI1UixLQUFqQixDQUFwQixDQUFUO0FBQ0EsYUFBSy9FLFFBQVEsQ0FBUixJQUFhOGMsU0FBUyxDQUF2QixJQUE4QjljLFNBQVMsQ0FBVCxJQUFjOGMsU0FBUyxDQUF6RCxFQUE2RDtBQUM1RHRFLG1CQUFTc0UsTUFBVDtBQUNBO0FBQ0Q7QUFDRDtBQUNEOztBQUVEM0IsYUFBT3BkLE1BQU00ZSxnQkFBTixDQUF1Qm5FLEtBQXZCLENBQVA7QUFDQWtELGFBQU8zZCxNQUFNNGUsZ0JBQU4sQ0FBdUJuRSxRQUFReFksS0FBL0IsQ0FBUDtBQUNBcVksYUFBTyxDQUFDcUQsT0FBT1AsSUFBUixJQUFnQixDQUF2Qjs7QUFFQSxhQUFPO0FBQ045QyxhQUFNQSxJQURBO0FBRU44QyxhQUFNQSxJQUZBO0FBR05PLGFBQU1BLElBSEE7QUFJTkMsZUFBUUQsT0FBT3JELE9BQU87QUFKaEIsT0FBUDtBQU1BLE1BeE9xRDs7QUEwT3REOzs7QUFHQW9ELDhCQUF5QixpQ0FBU3hFLFlBQVQsRUFBdUJsUyxLQUF2QixFQUE4QmdULEtBQTlCLEVBQXFDO0FBQzdELFVBQUltQixLQUFLLElBQVQ7QUFDQSxVQUFJbEIsVUFBVUQsTUFBTWhhLEtBQU4sQ0FBWWlhLE9BQTFCO0FBQ0EsVUFBSWlGLFFBQVFqRixRQUFRRSxZQUFSLEtBQXlCLE1BQXpCLEdBQ1RPLDBCQUEwQjFULEtBQTFCLEVBQWlDZ1QsS0FBakMsRUFBd0NDLE9BQXhDLENBRFMsR0FFVEYseUJBQXlCL1MsS0FBekIsRUFBZ0NnVCxLQUFoQyxFQUF1Q0MsT0FBdkMsQ0FGSDs7QUFJQSxVQUFJa0YsYUFBYWhFLEdBQUdzRCxhQUFILENBQWlCdkYsWUFBakIsRUFBK0JpQyxHQUFHRyxPQUFILEdBQWFDLEtBQTVDLENBQWpCO0FBQ0EsVUFBSXFDLFNBQVNzQixNQUFNekUsS0FBTixHQUFleUUsTUFBTTFFLEtBQU4sR0FBYzJFLFVBQTdCLEdBQTRDRCxNQUFNMUUsS0FBTixHQUFjLENBQXZFO0FBQ0EsVUFBSUYsT0FBT3hhLEtBQUtrQixHQUFMLENBQ1ZzVSxRQUFROEosY0FBUixDQUF1Qm5GLFFBQVFvRixlQUEvQixFQUFnREMsUUFBaEQsQ0FEVSxFQUVWSixNQUFNMUUsS0FBTixHQUFjMEUsTUFBTXZhLEtBRlYsQ0FBWDs7QUFJQSxhQUFPO0FBQ055WSxhQUFNUSxTQUFTdEQsT0FBTyxDQURoQjtBQUVOcUQsYUFBTUMsU0FBU3RELE9BQU8sQ0FGaEI7QUFHTnNELGVBQVFBLE1BSEY7QUFJTnRELGFBQU1BO0FBSkEsT0FBUDtBQU1BLE1BaFFxRDs7QUFrUXREaUYsV0FBTSxnQkFBVztBQUNoQixVQUFJcEUsS0FBSyxJQUFUO0FBQ0EsVUFBSVksUUFBUVosR0FBR1ksS0FBZjtBQUNBLFVBQUkvYixRQUFRbWIsR0FBR2dDLGFBQUgsRUFBWjtBQUNBLFVBQUl4QixRQUFRUixHQUFHRyxPQUFILEdBQWExQyxJQUF6QjtBQUNBLFVBQUlvRCxVQUFVYixHQUFHSyxVQUFILEVBQWQ7QUFDQSxVQUFJM0IsT0FBTzhCLE1BQU14ZCxNQUFqQjtBQUNBLFVBQUlULElBQUksQ0FBUjs7QUFFQTRYLGNBQVF5QixNQUFSLENBQWV5SSxRQUFmLENBQXdCekQsTUFBTTBELEdBQTlCLEVBQW1DMUQsTUFBTTJELFNBQXpDOztBQUVBLGFBQU9oaUIsSUFBSW1jLElBQVgsRUFBaUIsRUFBRW5jLENBQW5CLEVBQXNCO0FBQ3JCLFdBQUksQ0FBQzRDLE1BQU1OLE1BQU02ZSxhQUFOLENBQW9CN0MsUUFBUXBELElBQVIsQ0FBYWxiLENBQWIsQ0FBcEIsQ0FBTixDQUFMLEVBQWtEO0FBQ2pEaWUsY0FBTWplLENBQU4sRUFBUzZoQixJQUFUO0FBQ0E7QUFDRDs7QUFFRGpLLGNBQVF5QixNQUFSLENBQWU0SSxVQUFmLENBQTBCNUQsTUFBTTBELEdBQWhDO0FBQ0E7QUFwUnFELEtBQS9CLENBQXhCOztBQXVSQXJpQixVQUFNMGQsV0FBTixDQUFrQjhFLGFBQWxCLEdBQWtDeGlCLE1BQU0wZCxXQUFOLENBQWtCQyxHQUFsQixDQUFzQmxFLE1BQXRCLENBQTZCO0FBQzlEOzs7QUFHQWdILHNCQUFpQiwyQkFBVztBQUMzQixhQUFPLEtBQUt2QyxPQUFMLEdBQWVlLE9BQXRCO0FBQ0EsTUFONkQ7O0FBUTlEOzs7QUFHQXlCLHNCQUFpQiwyQkFBVztBQUMzQixhQUFPLEtBQUt4QyxPQUFMLEdBQWVpQixPQUF0QjtBQUNBO0FBYjZELEtBQTdCLENBQWxDO0FBZUEsSUF4U0Q7QUEwU0MsR0FuZVEsRUFtZVAsRUFBQyxNQUFLLEVBQU4sRUFBUyxNQUFLLEVBQWQsRUFBaUIsTUFBSyxFQUF0QixFQW5lTyxDQS8wRGd6QixFQWt6RTV4QixJQUFHLENBQUMsVUFBUzNlLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRTs7QUFFQSxPQUFJNFksV0FBVzdYLFFBQVEsRUFBUixDQUFmO0FBQ0EsT0FBSStYLFdBQVcvWCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUkwWCxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7O0FBRUE2WCxZQUFTaUMsSUFBVCxDQUFjLFFBQWQsRUFBd0I7QUFDdkJDLFdBQU87QUFDTkMsV0FBTTtBQURBLEtBRGdCOztBQUt2QkMsWUFBUTtBQUNQQyxZQUFPLENBQUM7QUFDUDdSLFlBQU0sUUFEQyxFQUNTO0FBQ2hCcVMsZ0JBQVUsUUFGSDtBQUdQMkcsVUFBSSxVQUhHLENBR1E7QUFIUixNQUFELENBREE7QUFNUDdHLFlBQU8sQ0FBQztBQUNQblMsWUFBTSxRQURDO0FBRVBxUyxnQkFBVSxNQUZIO0FBR1AyRyxVQUFJO0FBSEcsTUFBRDtBQU5BLEtBTGU7O0FBa0J2QnhHLGNBQVU7QUFDVEMsZ0JBQVc7QUFDVmhDLGFBQU8saUJBQVc7QUFDakI7QUFDQSxjQUFPLEVBQVA7QUFDQSxPQUpTO0FBS1ZxQyxhQUFPLGVBQVNKLElBQVQsRUFBZUMsSUFBZixFQUFxQjtBQUMzQixXQUFJSSxlQUFlSixLQUFLSyxRQUFMLENBQWNOLEtBQUtPLFlBQW5CLEVBQWlDSCxLQUFqQyxJQUEwQyxFQUE3RDtBQUNBLFdBQUk4RyxZQUFZakgsS0FBS0ssUUFBTCxDQUFjTixLQUFLTyxZQUFuQixFQUFpQ04sSUFBakMsQ0FBc0NELEtBQUszUixLQUEzQyxDQUFoQjtBQUNBLGNBQU9nUyxlQUFlLEtBQWYsR0FBdUJMLEtBQUtRLE1BQTVCLEdBQXFDLElBQXJDLEdBQTRDUixLQUFLRSxNQUFqRCxHQUEwRCxJQUExRCxHQUFpRWdILFVBQVV4aUIsQ0FBM0UsR0FBK0UsR0FBdEY7QUFDQTtBQVRTO0FBREY7QUFsQmEsSUFBeEI7O0FBa0NBUCxVQUFPRCxPQUFQLEdBQWlCLFVBQVNPLEtBQVQsRUFBZ0I7O0FBRWhDQSxVQUFNMGQsV0FBTixDQUFrQmdGLE1BQWxCLEdBQTJCMWlCLE1BQU00ZCxpQkFBTixDQUF3Qm5FLE1BQXhCLENBQStCO0FBQ3pEOzs7QUFHQW9FLHNCQUFpQnRGLFNBQVNvSyxLQUorQjs7QUFNekQ7OztBQUdBdEUsYUFBUSxnQkFBU0MsS0FBVCxFQUFnQjtBQUN2QixVQUFJUCxLQUFLLElBQVQ7QUFDQSxVQUFJQyxPQUFPRCxHQUFHRyxPQUFILEVBQVg7QUFDQSxVQUFJMEUsU0FBUzVFLEtBQUt4QyxJQUFsQjs7QUFFQTtBQUNBdEQsY0FBUTJLLElBQVIsQ0FBYUQsTUFBYixFQUFxQixVQUFTRSxLQUFULEVBQWdCbFosS0FBaEIsRUFBdUI7QUFDM0NtVSxVQUFHVyxhQUFILENBQWlCb0UsS0FBakIsRUFBd0JsWixLQUF4QixFQUErQjBVLEtBQS9CO0FBQ0EsT0FGRDtBQUdBLE1BbEJ3RDs7QUFvQnpEOzs7QUFHQUksb0JBQWUsdUJBQVNvRSxLQUFULEVBQWdCbFosS0FBaEIsRUFBdUIwVSxLQUF2QixFQUE4QjtBQUM1QyxVQUFJUCxLQUFLLElBQVQ7QUFDQSxVQUFJQyxPQUFPRCxHQUFHRyxPQUFILEVBQVg7QUFDQSxVQUFJVyxTQUFTaUUsTUFBTWpFLE1BQU4sSUFBZ0IsRUFBN0I7QUFDQSxVQUFJa0UsU0FBU2hGLEdBQUdpQixhQUFILENBQWlCaEIsS0FBS2lCLE9BQXRCLENBQWI7QUFDQSxVQUFJK0QsU0FBU2pGLEdBQUdpQixhQUFILENBQWlCaEIsS0FBS21CLE9BQXRCLENBQWI7QUFDQSxVQUFJdEMsVUFBVWtCLEdBQUdrRixzQkFBSCxDQUEwQkgsS0FBMUIsRUFBaUNsWixLQUFqQyxDQUFkO0FBQ0EsVUFBSTRSLE9BQU91QyxHQUFHSyxVQUFILEdBQWdCNUMsSUFBaEIsQ0FBcUI1UixLQUFyQixDQUFYO0FBQ0EsVUFBSXNaLFVBQVVuRixHQUFHblUsS0FBakI7O0FBRUEsVUFBSXFELElBQUlxUixRQUFReUUsT0FBT0ksa0JBQVAsQ0FBMEIsR0FBMUIsQ0FBUixHQUF5Q0osT0FBT3ZCLGdCQUFQLENBQXdCLFFBQU9oRyxJQUFQLHlDQUFPQSxJQUFQLE9BQWdCLFFBQWhCLEdBQTJCQSxJQUEzQixHQUFrQzRILEdBQTFELEVBQStEeFosS0FBL0QsRUFBc0VzWixPQUF0RSxDQUFqRDtBQUNBLFVBQUl0VyxJQUFJMFIsUUFBUTBFLE9BQU8vQyxZQUFQLEVBQVIsR0FBZ0MrQyxPQUFPeEIsZ0JBQVAsQ0FBd0JoRyxJQUF4QixFQUE4QjVSLEtBQTlCLEVBQXFDc1osT0FBckMsQ0FBeEM7O0FBRUFKLFlBQU0vRCxPQUFOLEdBQWdCZ0UsTUFBaEI7QUFDQUQsWUFBTTVELE9BQU4sR0FBZ0I4RCxNQUFoQjtBQUNBRixZQUFNTyxRQUFOLEdBQWlCeEcsT0FBakI7QUFDQWlHLFlBQU0xRCxhQUFOLEdBQXNCOEQsT0FBdEI7QUFDQUosWUFBTXpELE1BQU4sR0FBZXpWLEtBQWY7QUFDQWtaLFlBQU14RCxNQUFOLEdBQWU7QUFDZEMsd0JBQWlCMUMsUUFBUTBDLGVBRFg7QUFFZEUsb0JBQWE1QyxRQUFRNEMsV0FGUDtBQUdkQyxvQkFBYTdDLFFBQVE2QyxXQUhQO0FBSWQ0RCxrQkFBV3pHLFFBQVF5RyxTQUpMO0FBS2RDLG1CQUFZMUcsUUFBUTBHLFVBTE47QUFNZEMsaUJBQVUzRyxRQUFRMkcsUUFOSjtBQU9kQyxlQUFRbkYsUUFBUSxDQUFSLEdBQVl6QixRQUFRNEcsTUFQZDtBQVFkQyxhQUFNN0UsT0FBTzZFLElBQVAsSUFBZXhnQixNQUFNK0osQ0FBTixDQUFmLElBQTJCL0osTUFBTTBKLENBQU4sQ0FSbkI7QUFTZEssVUFBR0EsQ0FUVztBQVVkTCxVQUFHQTtBQVZXLE9BQWY7O0FBYUFrVyxZQUFNbEQsS0FBTjtBQUNBLE1BdkR3RDs7QUF5RHpEOzs7QUFHQStELG9CQUFlLHVCQUFTYixLQUFULEVBQWdCO0FBQzlCLFVBQUlqRCxRQUFRaUQsTUFBTXhELE1BQWxCO0FBQ0EsVUFBSXpDLFVBQVVpRyxNQUFNTyxRQUFwQjtBQUNBUCxZQUFNYyxjQUFOLEdBQXVCO0FBQ3RCckUsd0JBQWlCTSxNQUFNTixlQUREO0FBRXRCRSxvQkFBYUksTUFBTUosV0FGRztBQUd0QkMsb0JBQWFHLE1BQU1ILFdBSEc7QUFJdEIrRCxlQUFRNUQsTUFBTTREO0FBSlEsT0FBdkI7QUFNQTVELFlBQU1OLGVBQU4sR0FBd0JySCxRQUFROEosY0FBUixDQUF1Qm5GLFFBQVFnSCxvQkFBL0IsRUFBcUQzTCxRQUFRNEwsYUFBUixDQUFzQmpILFFBQVEwQyxlQUE5QixDQUFyRCxDQUF4QjtBQUNBTSxZQUFNSixXQUFOLEdBQW9CdkgsUUFBUThKLGNBQVIsQ0FBdUJuRixRQUFRa0gsZ0JBQS9CLEVBQWlEN0wsUUFBUTRMLGFBQVIsQ0FBc0JqSCxRQUFRNEMsV0FBOUIsQ0FBakQsQ0FBcEI7QUFDQUksWUFBTUgsV0FBTixHQUFvQnhILFFBQVE4SixjQUFSLENBQXVCbkYsUUFBUW1ILGdCQUEvQixFQUFpRG5ILFFBQVE2QyxXQUF6RCxDQUFwQjtBQUNBRyxZQUFNNEQsTUFBTixHQUFlNUcsUUFBUTRHLE1BQVIsR0FBaUI1RyxRQUFRb0gsV0FBeEM7QUFDQSxNQXpFd0Q7O0FBMkV6RDs7O0FBR0FoQiw2QkFBd0IsZ0NBQVNILEtBQVQsRUFBZ0JsWixLQUFoQixFQUF1QjtBQUM5QyxVQUFJbVUsS0FBSyxJQUFUO0FBQ0EsVUFBSVksUUFBUVosR0FBR1ksS0FBZjtBQUNBLFVBQUk5QyxXQUFXOEMsTUFBTW5ELElBQU4sQ0FBV0ssUUFBMUI7QUFDQSxVQUFJK0MsVUFBVS9DLFNBQVNrQyxHQUFHblUsS0FBWixDQUFkO0FBQ0EsVUFBSWlWLFNBQVNpRSxNQUFNakUsTUFBTixJQUFnQixFQUE3QjtBQUNBLFVBQUloQyxVQUFVOEIsTUFBTTlCLE9BQU4sQ0FBY3RFLFFBQWQsQ0FBdUJ1SyxLQUFyQztBQUNBLFVBQUlvQixVQUFVaE0sUUFBUTJFLE9BQVIsQ0FBZ0JxSCxPQUE5QjtBQUNBLFVBQUkxSSxPQUFPb0QsUUFBUXBELElBQVIsQ0FBYTVSLEtBQWIsQ0FBWDtBQUNBLFVBQUl0RixTQUFTLEVBQWI7QUFDQSxVQUFJaEUsQ0FBSixFQUFPbWMsSUFBUCxFQUFhcEYsR0FBYjs7QUFFQTtBQUNBLFVBQUl5QyxVQUFVO0FBQ2I2RSxjQUFPQSxLQURNO0FBRWJ3RixrQkFBV3ZhLEtBRkU7QUFHYmdWLGdCQUFTQSxPQUhJO0FBSWI5QyxxQkFBY2lDLEdBQUduVTtBQUpKLE9BQWQ7O0FBT0EsVUFBSXdhLE9BQU8sQ0FDVixpQkFEVSxFQUVWLGFBRlUsRUFHVixhQUhVLEVBSVYsc0JBSlUsRUFLVixrQkFMVSxFQU1WLGtCQU5VLEVBT1YsYUFQVSxFQVFWLFdBUlUsRUFTVixZQVRVLEVBVVYsVUFWVSxDQUFYOztBQWFBLFdBQUs5akIsSUFBSSxDQUFKLEVBQU9tYyxPQUFPMkgsS0FBS3JqQixNQUF4QixFQUFnQ1QsSUFBSW1jLElBQXBDLEVBQTBDLEVBQUVuYyxDQUE1QyxFQUErQztBQUM5QytXLGFBQU0rTSxLQUFLOWpCLENBQUwsQ0FBTjtBQUNBZ0UsY0FBTytTLEdBQVAsSUFBYzZNLFFBQVEsQ0FDckJyRixPQUFPeEgsR0FBUCxDQURxQixFQUVyQnVILFFBQVF2SCxHQUFSLENBRnFCLEVBR3JCd0YsUUFBUXhGLEdBQVIsQ0FIcUIsQ0FBUixFQUlYeUMsT0FKVyxFQUlGbFEsS0FKRSxDQUFkO0FBS0E7O0FBRUQ7QUFDQXRGLGFBQU9tZixNQUFQLEdBQWdCUyxRQUFRLENBQ3ZCckYsT0FBTzRFLE1BRGdCLEVBRXZCakksT0FBT0EsS0FBS3ZiLENBQVosR0FBZ0J3RCxTQUZPLEVBR3ZCbWIsUUFBUTZFLE1BSGUsRUFJdkI1RyxRQUFRNEcsTUFKZSxDQUFSLEVBS2IzSixPQUxhLEVBS0psUSxLQUxJLENBQWhCO0FBTUEsYUFBT3RGLE1BQVA7QUFDQTtBQWhJd0QsS0FBL0IsQ0FBM0I7QUFrSUEsSUFwSUQ7QUFzSUMsR0EvSytCLEVBK0s5QixFQUFDLE1BQUssRUFBTixFQUFTLE1BQUssRUFBZCxFQUFpQixNQUFLLEVBQXRCLEVBL0s4QixDQWx6RXl4QixFQWkrRTV4QixJQUFHLENBQUMsVUFBUzlELE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRTs7QUFFQSxPQUFJNFksV0FBVzdYLFFBQVEsRUFBUixDQUFmO0FBQ0EsT0FBSStYLFdBQVcvWCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUkwWCxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7O0FBRUE2WCxZQUFTaUMsSUFBVCxDQUFjLFVBQWQsRUFBMEI7QUFDekIrSixlQUFXO0FBQ1Y7QUFDQUMsb0JBQWUsSUFGTDtBQUdWO0FBQ0FDLG1CQUFjO0FBSkosS0FEYztBQU96QmhLLFdBQU87QUFDTkMsV0FBTTtBQURBLEtBUGtCO0FBVXpCZ0ssb0JBQWdCLHdCQUFTN0YsS0FBVCxFQUFnQjtBQUMvQixTQUFJOEYsT0FBTyxFQUFYO0FBQ0FBLFVBQUt0RCxJQUFMLENBQVUsZ0JBQWdCeEMsTUFBTWtELEVBQXRCLEdBQTJCLFdBQXJDOztBQUVBLFNBQUlyRyxPQUFPbUQsTUFBTW5ELElBQWpCO0FBQ0EsU0FBSUssV0FBV0wsS0FBS0ssUUFBcEI7QUFDQSxTQUFJSCxTQUFTRixLQUFLRSxNQUFsQjs7QUFFQSxTQUFJRyxTQUFTOWEsTUFBYixFQUFxQjtBQUNwQixXQUFLLElBQUlULElBQUksQ0FBYixFQUFnQkEsSUFBSXViLFNBQVMsQ0FBVCxFQUFZTCxJQUFaLENBQWlCemEsTUFBckMsRUFBNkMsRUFBRVQsQ0FBL0MsRUFBa0Q7QUFDakRta0IsWUFBS3RELElBQUwsQ0FBVSx1Q0FBdUN0RixTQUFTLENBQVQsRUFBWTBELGVBQVosQ0FBNEJqZixDQUE1QixDQUF2QyxHQUF3RSxXQUFsRjtBQUNBLFdBQUlvYixPQUFPcGIsQ0FBUCxDQUFKLEVBQWU7QUFDZG1rQixhQUFLdEQsSUFBTCxDQUFVekYsT0FBT3BiLENBQVAsQ0FBVjtBQUNBO0FBQ0Rta0IsWUFBS3RELElBQUwsQ0FBVSxPQUFWO0FBQ0E7QUFDRDs7QUFFRHNELFVBQUt0RCxJQUFMLENBQVUsT0FBVjtBQUNBLFlBQU9zRCxLQUFLQyxJQUFMLENBQVUsRUFBVixDQUFQO0FBQ0EsS0E5QndCO0FBK0J6QnZMLFlBQVE7QUFDUHVDLGFBQVE7QUFDUGlKLHNCQUFnQix3QkFBU2hHLEtBQVQsRUFBZ0I7QUFDL0IsV0FBSW5ELE9BQU9tRCxNQUFNbkQsSUFBakI7QUFDQSxXQUFJQSxLQUFLRSxNQUFMLENBQVkzYSxNQUFaLElBQXNCeWEsS0FBS0ssUUFBTCxDQUFjOWEsTUFBeEMsRUFBZ0Q7QUFDL0MsZUFBT3lhLEtBQUtFLE1BQUwsQ0FBWWtKLEdBQVosQ0FBZ0IsVUFBU2pKLEtBQVQsRUFBZ0JyYixDQUFoQixFQUFtQjtBQUN6QyxhQUFJMGQsT0FBT1csTUFBTXFDLGNBQU4sQ0FBcUIsQ0FBckIsQ0FBWDtBQUNBLGFBQUk2RCxLQUFLckosS0FBS0ssUUFBTCxDQUFjLENBQWQsQ0FBVDtBQUNBLGFBQUlpSixNQUFNOUcsS0FBS3hDLElBQUwsQ0FBVWxiLENBQVYsQ0FBVjtBQUNBLGFBQUl1ZSxTQUFTaUcsT0FBT0EsSUFBSWpHLE1BQVgsSUFBcUIsRUFBbEM7QUFDQSxhQUFJVyx3QkFBd0J0SCxRQUFRc0gscUJBQXBDO0FBQ0EsYUFBSXVGLFVBQVVwRyxNQUFNOUIsT0FBTixDQUFjdEUsUUFBZCxDQUF1QnVNLEdBQXJDO0FBQ0EsYUFBSUUsT0FBT25HLE9BQU9VLGVBQVAsR0FBeUJWLE9BQU9VLGVBQWhDLEdBQWtEQyxzQkFBc0JxRixHQUFHdEYsZUFBekIsRUFBMENqZixDQUExQyxFQUE2Q3lrQixRQUFReEYsZUFBckQsQ0FBN0Q7QUFDQSxhQUFJMEYsU0FBU3BHLE9BQU9ZLFdBQVAsR0FBcUJaLE9BQU9ZLFdBQTVCLEdBQTBDRCxzQkFBc0JxRixHQUFHcEYsV0FBekIsRUFBc0NuZixDQUF0QyxFQUF5Q3lrQixRQUFRdEYsV0FBakQsQ0FBdkQ7QUFDQSxhQUFJeUYsS0FBS3JHLE9BQU9hLFdBQVAsR0FBcUJiLE9BQU9hLFdBQTVCLEdBQTBDRixzQkFBc0JxRixHQUFHbkYsV0FBekIsRUFBc0NwZixDQUF0QyxFQUF5Q3lrQixRQUFRckYsV0FBakQsQ0FBbkQ7O0FBRUEsZ0JBQU87QUFDTitFLGdCQUFNOUksS0FEQTtBQUVOd0oscUJBQVdILElBRkw7QUFHTkksdUJBQWFILE1BSFA7QUFJTkkscUJBQVdILEVBSkw7QUFLTkksa0JBQVFwaUIsTUFBTTJoQixHQUFHckosSUFBSCxDQUFRbGIsQ0FBUixDQUFOLEtBQXFCMGQsS0FBS3hDLElBQUwsQ0FBVWxiLENBQVYsRUFBYWdsQixNQUxwQzs7QUFPTjtBQUNBMWIsaUJBQU90SjtBQVJELFVBQVA7QUFVQSxTQXJCTSxDQUFQO0FBc0JBO0FBQ0QsY0FBTyxFQUFQO0FBQ0E7QUE1Qk0sTUFERDs7QUFnQ1BpbEIsY0FBUyxpQkFBU3JsQixDQUFULEVBQVlzbEIsVUFBWixFQUF3QjtBQUNoQyxVQUFJNWIsUUFBUTRiLFdBQVc1YixLQUF2QjtBQUNBLFVBQUkrVSxRQUFRLEtBQUtBLEtBQWpCO0FBQ0EsVUFBSXJlLENBQUosRUFBT21jLElBQVAsRUFBYXVCLElBQWI7O0FBRUEsV0FBSzFkLElBQUksQ0FBSixFQUFPbWMsT0FBTyxDQUFDa0MsTUFBTW5ELElBQU4sQ0FBV0ssUUFBWCxJQUF1QixFQUF4QixFQUE0QjlhLE1BQS9DLEVBQXVEVCxJQUFJbWMsSUFBM0QsRUFBaUUsRUFBRW5jLENBQW5FLEVBQXNFO0FBQ3JFMGQsY0FBT1csTUFBTXFDLGNBQU4sQ0FBcUIxZ0IsQ0FBckIsQ0FBUDtBQUNBO0FBQ0EsV0FBSTBkLEtBQUt4QyxJQUFMLENBQVU1UixLQUFWLENBQUosRUFBc0I7QUFDckJvVSxhQUFLeEMsSUFBTCxDQUFVNVIsS0FBVixFQUFpQjBiLE1BQWpCLEdBQTBCLENBQUN0SCxLQUFLeEMsSUFBTCxDQUFVNVIsS0FBVixFQUFpQjBiLE1BQTVDO0FBQ0E7QUFDRDs7QUFFRDNHLFlBQU1OLE1BQU47QUFDQTtBQTlDTSxLQS9CaUI7O0FBZ0Z6QjtBQUNBb0gsc0JBQWtCLEVBakZPOztBQW1GekI7QUFDQWpDLGNBQVU5Z0IsS0FBS3dMLEVBQUwsR0FBVSxDQUFDLEdBcEZJOztBQXNGekI7QUFDQXdYLG1CQUFlaGpCLEtBQUt3TCxFQUFMLEdBQVUsR0F2RkE7O0FBeUZ6QjtBQUNBbU4sY0FBVTtBQUNUQyxnQkFBVztBQUNWaEMsYUFBTyxpQkFBVztBQUNqQixjQUFPLEVBQVA7QUFDQSxPQUhTO0FBSVZxQyxhQUFPLGVBQVNnSyxXQUFULEVBQXNCbkssSUFBdEIsRUFBNEI7QUFDbEMsV0FBSW9LLFlBQVlwSyxLQUFLRSxNQUFMLENBQVlpSyxZQUFZL2IsS0FBeEIsQ0FBaEI7QUFDQSxXQUFJL0UsUUFBUSxPQUFPMlcsS0FBS0ssUUFBTCxDQUFjOEosWUFBWTdKLFlBQTFCLEVBQXdDTixJQUF4QyxDQUE2Q21LLFlBQVkvYixLQUF6RCxDQUFuQjs7QUFFQSxXQUFJc08sUUFBUTJOLE9BQVIsQ0FBZ0JELFNBQWhCLENBQUosRUFBZ0M7QUFDL0I7QUFDQTtBQUNBQSxvQkFBWUEsVUFBVXBqQixLQUFWLEVBQVo7QUFDQW9qQixrQkFBVSxDQUFWLEtBQWdCL2dCLEtBQWhCO0FBQ0EsUUFMRCxNQUtPO0FBQ04rZ0IscUJBQWEvZ0IsS0FBYjtBQUNBOztBQUVELGNBQU8rZ0IsU0FBUDtBQUNBO0FBbEJTO0FBREY7QUExRmUsSUFBMUI7O0FBa0hBdk4sWUFBU2lDLElBQVQsQ0FBYyxLQUFkLEVBQXFCcEMsUUFBUXpQLEtBQVIsQ0FBYzRQLFNBQVN5TixRQUF2QixDQUFyQjtBQUNBek4sWUFBU2lDLElBQVQsQ0FBYyxLQUFkLEVBQXFCO0FBQ3BCbUwsc0JBQWtCO0FBREUsSUFBckI7O0FBSUEvbEIsVUFBT0QsT0FBUCxHQUFpQixVQUFTTyxLQUFULEVBQWdCOztBQUVoQ0EsVUFBTTBkLFdBQU4sQ0FBa0JvSSxRQUFsQixHQUE2QjlsQixNQUFNMGQsV0FBTixDQUFrQnFJLEdBQWxCLEdBQXdCL2xCLE1BQU00ZCxpQkFBTixDQUF3Qm5FLE1BQXhCLENBQStCOztBQUVuRm9FLHNCQUFpQnRGLFNBQVN5TixHQUZ5RDs7QUFJbkZDLGlCQUFZL04sUUFBUWdPLElBSitEOztBQU1uRjtBQUNBQyxtQkFBYyxzQkFBU3JLLFlBQVQsRUFBdUI7QUFDcEMsVUFBSXNLLFlBQVksQ0FBaEI7O0FBRUEsV0FBSyxJQUFJQyxJQUFJLENBQWIsRUFBZ0JBLElBQUl2SyxZQUFwQixFQUFrQyxFQUFFdUssQ0FBcEMsRUFBdUM7QUFDdEMsV0FBSSxLQUFLMUgsS0FBTCxDQUFXc0MsZ0JBQVgsQ0FBNEJvRixDQUE1QixDQUFKLEVBQW9DO0FBQ25DLFVBQUVELFNBQUY7QUFDQTtBQUNEOztBQUVELGFBQU9BLFNBQVA7QUFDQSxNQWpCa0Y7O0FBbUJuRi9ILGFBQVEsZ0JBQVNDLEtBQVQsRUFBZ0I7QUFDdkIsVUFBSVAsS0FBSyxJQUFUO0FBQ0EsVUFBSVksUUFBUVosR0FBR1ksS0FBZjtBQUNBLFVBQUkyRCxZQUFZM0QsTUFBTTJELFNBQXRCO0FBQ0EsVUFBSWdFLE9BQU8zSCxNQUFNOUIsT0FBakI7QUFDQSxVQUFJa0ksVUFBVXVCLEtBQUsvTixRQUFMLENBQWN1TSxHQUE1QjtBQUNBLFVBQUl5QixpQkFBaUJqRSxVQUFVa0UsS0FBVixHQUFrQmxFLFVBQVVoQixJQUE1QixHQUFtQ3lELFFBQVFyRixXQUFoRTtBQUNBLFVBQUkrRyxrQkFBa0JuRSxVQUFVb0UsTUFBVixHQUFtQnBFLFVBQVVmLEdBQTdCLEdBQW1Dd0QsUUFBUXJGLFdBQWpFO0FBQ0EsVUFBSWlILFVBQVVqa0IsS0FBS2tCLEdBQUwsQ0FBUzJpQixjQUFULEVBQXlCRSxlQUF6QixDQUFkO0FBQ0EsVUFBSTVMLFNBQVMsRUFBQzVOLEdBQUcsQ0FBSixFQUFPTCxHQUFHLENBQVYsRUFBYjtBQUNBLFVBQUlvUixPQUFPRCxHQUFHRyxPQUFILEVBQVg7QUFDQSxVQUFJdUgsbUJBQW1CYSxLQUFLYixnQkFBNUI7QUFDQSxVQUFJQyxnQkFBZ0JZLEtBQUtaLGFBQXpCOztBQUVBO0FBQ0EsVUFBSUEsZ0JBQWdCaGpCLEtBQUt3TCxFQUFMLEdBQVUsR0FBOUIsRUFBbUM7QUFDbEMsV0FBSTBZLGFBQWFOLEtBQUs5QyxRQUFMLElBQWlCOWdCLEtBQUt3TCxFQUFMLEdBQVUsR0FBM0IsQ0FBakI7QUFDQTBZLHFCQUFjbGtCLEtBQUt3TCxFQUFMLEdBQVUsR0FBVixJQUFpQjBZLGNBQWNsa0IsS0FBS3dMLEVBQW5CLEdBQXdCLENBQUMsQ0FBekIsR0FBNkIwWSxhQUFhLENBQUNsa0IsS0FBS3dMLEVBQW5CLEdBQXdCLENBQXhCLEdBQTRCLENBQTFFLENBQWQ7QUFDQSxXQUFJMlksV0FBV0QsYUFBYWxCLGFBQTVCO0FBQ0EsV0FBSXJJLFFBQVEsRUFBQ3BRLEdBQUd2SyxLQUFLMkwsR0FBTCxDQUFTdVksVUFBVCxDQUFKLEVBQTBCaGEsR0FBR2xLLEtBQUs0TCxHQUFMLENBQVNzWSxVQUFULENBQTdCLEVBQVo7QUFDQSxXQUFJbkosTUFBTSxFQUFDeFEsR0FBR3ZLLEtBQUsyTCxHQUFMLENBQVN3WSxRQUFULENBQUosRUFBd0JqYSxHQUFHbEssS0FBSzRMLEdBQUwsQ0FBU3VZLFFBQVQsQ0FBM0IsRUFBVjtBQUNBLFdBQUlDLFlBQWFGLGNBQWMsQ0FBZCxJQUFtQkMsWUFBWSxDQUFoQyxJQUF1Q0QsY0FBY2xrQixLQUFLd0wsRUFBTCxHQUFVLEdBQXhCLElBQStCeEwsS0FBS3dMLEVBQUwsR0FBVSxHQUFWLElBQWlCMlksUUFBdkc7QUFDQSxXQUFJRSxhQUFjSCxjQUFjbGtCLEtBQUt3TCxFQUFMLEdBQVUsR0FBeEIsSUFBK0J4TCxLQUFLd0wsRUFBTCxHQUFVLEdBQVYsSUFBaUIyWSxRQUFqRCxJQUErREQsY0FBY2xrQixLQUFLd0wsRUFBTCxHQUFVLEdBQXhCLElBQStCeEwsS0FBS3dMLEVBQUwsR0FBVSxHQUFWLElBQWlCMlksUUFBaEk7QUFDQSxXQUFJRyxjQUFlSixjQUFjLENBQUNsa0IsS0FBS3dMLEVBQXBCLElBQTBCLENBQUN4TCxLQUFLd0wsRUFBTixJQUFZMlksUUFBdkMsSUFBcURELGNBQWNsa0IsS0FBS3dMLEVBQW5CLElBQXlCeEwsS0FBS3dMLEVBQUwsSUFBVzJZLFFBQTNHO0FBQ0EsV0FBSUksY0FBZUwsY0FBYyxDQUFDbGtCLEtBQUt3TCxFQUFOLEdBQVcsR0FBekIsSUFBZ0MsQ0FBQ3hMLEtBQUt3TCxFQUFOLEdBQVcsR0FBWCxJQUFrQjJZLFFBQW5ELElBQWlFRCxjQUFjbGtCLEtBQUt3TCxFQUFMLEdBQVUsR0FBeEIsSUFBK0J4TCxLQUFLd0wsRUFBTCxHQUFVLEdBQVYsSUFBaUIyWSxRQUFuSTtBQUNBLFdBQUlLLFNBQVN6QixtQkFBbUIsS0FBaEM7QUFDQSxXQUFJN2hCLE1BQU0sRUFBQ3FKLEdBQUcrWixjQUFjLENBQUMsQ0FBZixHQUFtQnRrQixLQUFLa0IsR0FBTCxDQUFTeVosTUFBTXBRLENBQU4sSUFBV29RLE1BQU1wUSxDQUFOLEdBQVUsQ0FBVixHQUFjLENBQWQsR0FBa0JpYSxNQUE3QixDQUFULEVBQStDekosSUFBSXhRLENBQUosSUFBU3dRLElBQUl4USxDQUFKLEdBQVEsQ0FBUixHQUFZLENBQVosR0FBZ0JpYSxNQUF6QixDQUEvQyxDQUF2QixFQUF5R3RhLEdBQUdxYSxjQUFjLENBQUMsQ0FBZixHQUFtQnZrQixLQUFLa0IsR0FBTCxDQUFTeVosTUFBTXpRLENBQU4sSUFBV3lRLE1BQU16USxDQUFOLEdBQVUsQ0FBVixHQUFjLENBQWQsR0FBa0JzYSxNQUE3QixDQUFULEVBQStDekosSUFBSTdRLENBQUosSUFBUzZRLElBQUk3USxDQUFKLEdBQVEsQ0FBUixHQUFZLENBQVosR0FBZ0JzYSxNQUF6QixDQUEvQyxDQUEvSCxFQUFWO0FBQ0EsV0FBSXJqQixNQUFNLEVBQUNvSixHQUFHNlosWUFBWSxDQUFaLEdBQWdCcGtCLEtBQUttQixHQUFMLENBQVN3WixNQUFNcFEsQ0FBTixJQUFXb1EsTUFBTXBRLENBQU4sR0FBVSxDQUFWLEdBQWMsQ0FBZCxHQUFrQmlhLE1BQTdCLENBQVQsRUFBK0N6SixJQUFJeFEsQ0FBSixJQUFTd1EsSUFBSXhRLENBQUosR0FBUSxDQUFSLEdBQVksQ0FBWixHQUFnQmlhLE1BQXpCLENBQS9DLENBQXBCLEVBQXNHdGEsR0FBR21hLGFBQWEsQ0FBYixHQUFpQnJrQixLQUFLbUIsR0FBTCxDQUFTd1osTUFBTXpRLENBQU4sSUFBV3lRLE1BQU16USxDQUFOLEdBQVUsQ0FBVixHQUFjLENBQWQsR0FBa0JzYSxNQUE3QixDQUFULEVBQStDekosSUFBSTdRLENBQUosSUFBUzZRLElBQUk3USxDQUFKLEdBQVEsQ0FBUixHQUFZLENBQVosR0FBZ0JzYSxNQUF6QixDQUEvQyxDQUExSCxFQUFWO0FBQ0EsV0FBSWhLLE9BQU8sRUFBQ2YsT0FBTyxDQUFDdFksSUFBSW9KLENBQUosR0FBUXJKLElBQUlxSixDQUFiLElBQWtCLEdBQTFCLEVBQStCbVAsUUFBUSxDQUFDdlksSUFBSStJLENBQUosR0FBUWhKLElBQUlnSixDQUFiLElBQWtCLEdBQXpELEVBQVg7QUFDQStaLGlCQUFVamtCLEtBQUtrQixHQUFMLENBQVMyaUIsaUJBQWlCckosS0FBS2YsS0FBL0IsRUFBc0NzSyxrQkFBa0J2SixLQUFLZCxNQUE3RCxDQUFWO0FBQ0F2QixnQkFBUyxFQUFDNU4sR0FBRyxDQUFDcEosSUFBSW9KLENBQUosR0FBUXJKLElBQUlxSixDQUFiLElBQWtCLENBQUMsR0FBdkIsRUFBNEJMLEdBQUcsQ0FBQy9JLElBQUkrSSxDQUFKLEdBQVFoSixJQUFJZ0osQ0FBYixJQUFrQixDQUFDLEdBQWxELEVBQVQ7QUFDQTs7QUFFRCtSLFlBQU1lLFdBQU4sR0FBb0IzQixHQUFHb0osaUJBQUgsQ0FBcUJuSixLQUFLeEMsSUFBMUIsQ0FBcEI7QUFDQW1ELFlBQU15SSxXQUFOLEdBQW9CMWtCLEtBQUttQixHQUFMLENBQVMsQ0FBQzhpQixVQUFVaEksTUFBTWUsV0FBakIsSUFBZ0MsQ0FBekMsRUFBNEMsQ0FBNUMsQ0FBcEI7QUFDQWYsWUFBTTBJLFdBQU4sR0FBb0Iza0IsS0FBS21CLEdBQUwsQ0FBUzRoQixtQkFBb0I5RyxNQUFNeUksV0FBTixHQUFvQixHQUFyQixHQUE2QjNCLGdCQUFoRCxHQUFvRSxDQUE3RSxFQUFnRixDQUFoRixDQUFwQjtBQUNBOUcsWUFBTTJJLFlBQU4sR0FBcUIsQ0FBQzNJLE1BQU15SSxXQUFOLEdBQW9CekksTUFBTTBJLFdBQTNCLElBQTBDMUksTUFBTTRJLHNCQUFOLEVBQS9EO0FBQ0E1SSxZQUFNNkksT0FBTixHQUFnQjNNLE9BQU81TixDQUFQLEdBQVcwUixNQUFNeUksV0FBakM7QUFDQXpJLFlBQU04SSxPQUFOLEdBQWdCNU0sT0FBT2pPLENBQVAsR0FBVytSLE1BQU15SSxXQUFqQzs7QUFFQXBKLFdBQUswSixLQUFMLEdBQWEzSixHQUFHNEosY0FBSCxFQUFiOztBQUVBNUosU0FBR3FKLFdBQUgsR0FBaUJ6SSxNQUFNeUksV0FBTixHQUFxQnpJLE1BQU0ySSxZQUFOLEdBQXFCdkosR0FBR29JLFlBQUgsQ0FBZ0JwSSxHQUFHblUsS0FBbkIsQ0FBM0Q7QUFDQW1VLFNBQUdzSixXQUFILEdBQWlCM2tCLEtBQUttQixHQUFMLENBQVNrYSxHQUFHcUosV0FBSCxHQUFpQnpJLE1BQU0ySSxZQUFoQyxFQUE4QyxDQUE5QyxDQUFqQjs7QUFFQXBQLGNBQVEySyxJQUFSLENBQWE3RSxLQUFLeEMsSUFBbEIsRUFBd0IsVUFBU3NKLEdBQVQsRUFBY2xiLEtBQWQsRUFBcUI7QUFDNUNtVSxVQUFHVyxhQUFILENBQWlCb0csR0FBakIsRUFBc0JsYixLQUF0QixFQUE2QjBVLEtBQTdCO0FBQ0EsT0FGRDtBQUdBLE1BbkVrRjs7QUFxRW5GSSxvQkFBZSx1QkFBU29HLEdBQVQsRUFBY2xiLEtBQWQsRUFBcUIwVSxLQUFyQixFQUE0QjtBQUMxQyxVQUFJUCxLQUFLLElBQVQ7QUFDQSxVQUFJWSxRQUFRWixHQUFHWSxLQUFmO0FBQ0EsVUFBSTJELFlBQVkzRCxNQUFNMkQsU0FBdEI7QUFDQSxVQUFJZ0UsT0FBTzNILE1BQU05QixPQUFqQjtBQUNBLFVBQUkrSyxnQkFBZ0J0QixLQUFLakMsU0FBekI7QUFDQSxVQUFJd0QsVUFBVSxDQUFDdkYsVUFBVWhCLElBQVYsR0FBaUJnQixVQUFVa0UsS0FBNUIsSUFBcUMsQ0FBbkQ7QUFDQSxVQUFJc0IsVUFBVSxDQUFDeEYsVUFBVWYsR0FBVixHQUFnQmUsVUFBVW9FLE1BQTNCLElBQXFDLENBQW5EO0FBQ0EsVUFBSUUsYUFBYU4sS0FBSzlDLFFBQXRCLENBUjBDLENBUVY7QUFDaEMsVUFBSXFELFdBQVdQLEtBQUs5QyxRQUFwQixDQVQwQyxDQVNaO0FBQzlCLFVBQUk1RSxVQUFVYixHQUFHSyxVQUFILEVBQWQ7QUFDQSxVQUFJc0gsZ0JBQWdCcEgsU0FBU3NKLGNBQWN0RCxhQUF2QixHQUF1QyxDQUF2QyxHQUEyQ1EsSUFBSVEsTUFBSixHQUFhLENBQWIsR0FBaUJ2SCxHQUFHZ0ssc0JBQUgsQ0FBMEJuSixRQUFRcEQsSUFBUixDQUFhNVIsS0FBYixDQUExQixLQUFrRDBjLEtBQUtaLGFBQUwsSUFBc0IsTUFBTWhqQixLQUFLd0wsRUFBakMsQ0FBbEQsQ0FBaEY7QUFDQSxVQUFJbVosY0FBYy9JLFNBQVNzSixjQUFjckQsWUFBdkIsR0FBc0MsQ0FBdEMsR0FBMEN4RyxHQUFHc0osV0FBL0Q7QUFDQSxVQUFJRCxjQUFjOUksU0FBU3NKLGNBQWNyRCxZQUF2QixHQUFzQyxDQUF0QyxHQUEwQ3hHLEdBQUdxSixXQUEvRDtBQUNBLFVBQUk1SCx3QkFBd0J0SCxRQUFRc0gscUJBQXBDOztBQUVBdEgsY0FBUXVCLE1BQVIsQ0FBZXFMLEdBQWYsRUFBb0I7QUFDbkI7QUFDQTFGLHNCQUFlckIsR0FBR25VLEtBRkM7QUFHbkJ5VixlQUFRelYsS0FIVzs7QUFLbkI7QUFDQTBWLGVBQVE7QUFDUHJTLFdBQUc0YSxVQUFVbEosTUFBTTZJLE9BRFo7QUFFUDVhLFdBQUdrYixVQUFVbkosTUFBTThJLE9BRlo7QUFHUGIsb0JBQVlBLFVBSEw7QUFJUEMsa0JBQVVBLFFBSkg7QUFLUG5CLHVCQUFlQSxhQUxSO0FBTVAwQixxQkFBYUEsV0FOTjtBQU9QQyxxQkFBYUEsV0FQTjtBQVFQMUwsZUFBTzZELHNCQUFzQlosUUFBUWpELEtBQTlCLEVBQXFDL1IsS0FBckMsRUFBNEMrVSxNQUFNbkQsSUFBTixDQUFXRSxNQUFYLENBQWtCOVIsS0FBbEIsQ0FBNUM7QUFSQTtBQU5XLE9BQXBCOztBQWtCQSxVQUFJaVcsUUFBUWlGLElBQUl4RixNQUFoQjs7QUFFQTtBQUNBLFVBQUlULFNBQVNpRyxJQUFJakcsTUFBSixJQUFjLEVBQTNCO0FBQ0EsVUFBSW1ELGlCQUFpQjlKLFFBQVFzSCxxQkFBN0I7QUFDQSxVQUFJd0ksY0FBYyxLQUFLckosS0FBTCxDQUFXOUIsT0FBWCxDQUFtQnRFLFFBQW5CLENBQTRCdU0sR0FBOUM7QUFDQWpGLFlBQU1OLGVBQU4sR0FBd0JWLE9BQU9VLGVBQVAsR0FBeUJWLE9BQU9VLGVBQWhDLEdBQWtEeUMsZUFBZXBELFFBQVFXLGVBQXZCLEVBQXdDM1YsS0FBeEMsRUFBK0NvZSxZQUFZekksZUFBM0QsQ0FBMUU7QUFDQU0sWUFBTUosV0FBTixHQUFvQlosT0FBT1ksV0FBUCxHQUFxQlosT0FBT1ksV0FBNUIsR0FBMEN1QyxlQUFlcEQsUUFBUWEsV0FBdkIsRUFBb0M3VixLQUFwQyxFQUEyQ29lLFlBQVl2SSxXQUF2RCxDQUE5RDtBQUNBSSxZQUFNSCxXQUFOLEdBQW9CYixPQUFPYSxXQUFQLEdBQXFCYixPQUFPYSxXQUE1QixHQUEwQ3NDLGVBQWVwRCxRQUFRYyxXQUF2QixFQUFvQzlWLEtBQXBDLEVBQTJDb2UsWUFBWXRJLFdBQXZELENBQTlEOztBQUVBO0FBQ0EsVUFBSSxDQUFDcEIsS0FBRCxJQUFVLENBQUNzSixjQUFjdEQsYUFBN0IsRUFBNEM7QUFDM0MsV0FBSTFhLFVBQVUsQ0FBZCxFQUFpQjtBQUNoQmlXLGNBQU0rRyxVQUFOLEdBQW1CTixLQUFLOUMsUUFBeEI7QUFDQSxRQUZELE1BRU87QUFDTjNELGNBQU0rRyxVQUFOLEdBQW1CN0ksR0FBR0csT0FBSCxHQUFhMUMsSUFBYixDQUFrQjVSLFFBQVEsQ0FBMUIsRUFBNkIwVixNQUE3QixDQUFvQ3VILFFBQXZEO0FBQ0E7O0FBRURoSCxhQUFNZ0gsUUFBTixHQUFpQmhILE1BQU0rRyxVQUFOLEdBQW1CL0csTUFBTTZGLGFBQTFDO0FBQ0E7O0FBRURaLFVBQUlsRixLQUFKO0FBQ0EsTUE3SGtGOztBQStIbkYrSCxxQkFBZ0IsMEJBQVc7QUFDMUIsVUFBSS9JLFVBQVUsS0FBS1IsVUFBTCxFQUFkO0FBQ0EsVUFBSUosT0FBTyxLQUFLRSxPQUFMLEVBQVg7QUFDQSxVQUFJd0osUUFBUSxDQUFaO0FBQ0EsVUFBSTdpQixLQUFKOztBQUVBcVQsY0FBUTJLLElBQVIsQ0FBYTdFLEtBQUt4QyxJQUFsQixFQUF3QixVQUFTeU0sT0FBVCxFQUFrQnJlLEtBQWxCLEVBQXlCO0FBQ2hEL0UsZUFBUStaLFFBQVFwRCxJQUFSLENBQWE1UixLQUFiLENBQVI7QUFDQSxXQUFJLENBQUMxRyxNQUFNMkIsS0FBTixDQUFELElBQWlCLENBQUNvakIsUUFBUTNDLE1BQTlCLEVBQXNDO0FBQ3JDb0MsaUJBQVNobEIsS0FBS3dsQixHQUFMLENBQVNyakIsS0FBVCxDQUFUO0FBQ0E7QUFDRCxPQUxEOztBQU9BOzs7O0FBSUEsYUFBTzZpQixLQUFQO0FBQ0EsTUFqSmtGOztBQW1KbkZLLDZCQUF3QixnQ0FBU2xqQixLQUFULEVBQWdCO0FBQ3ZDLFVBQUk2aUIsUUFBUSxLQUFLeEosT0FBTCxHQUFld0osS0FBM0I7QUFDQSxVQUFJQSxRQUFRLENBQVIsSUFBYSxDQUFDeGtCLE1BQU0yQixLQUFOLENBQWxCLEVBQWdDO0FBQy9CLGNBQVFuQyxLQUFLd0wsRUFBTCxHQUFVLEdBQVgsSUFBbUJ4TCxLQUFLd2xCLEdBQUwsQ0FBU3JqQixLQUFULElBQWtCNmlCLEtBQXJDLENBQVA7QUFDQTtBQUNELGFBQU8sQ0FBUDtBQUNBLE1BekprRjs7QUEySm5GO0FBQ0FQLHdCQUFtQiwyQkFBU2dCLElBQVQsRUFBZTtBQUNqQyxVQUFJdGtCLE1BQU0sQ0FBVjtBQUNBLFVBQUkrRixRQUFRLEtBQUtBLEtBQWpCO0FBQ0EsVUFBSTdJLFNBQVNvbkIsS0FBS3BuQixNQUFsQjtBQUNBLFVBQUkyZSxXQUFKO0FBQ0EsVUFBSTBJLFVBQUo7O0FBRUEsV0FBSyxJQUFJOW5CLElBQUksQ0FBYixFQUFnQkEsSUFBSVMsTUFBcEIsRUFBNEJULEdBQTVCLEVBQWlDO0FBQ2hDb2YscUJBQWN5SSxLQUFLN25CLENBQUwsRUFBUWdmLE1BQVIsR0FBaUI2SSxLQUFLN25CLENBQUwsRUFBUWdmLE1BQVIsQ0FBZUksV0FBaEMsR0FBOEMsQ0FBNUQ7QUFDQTBJLG9CQUFhRCxLQUFLN25CLENBQUwsRUFBUStuQixNQUFSLEdBQWlCRixLQUFLN25CLENBQUwsRUFBUStuQixNQUFSLENBQWV0TyxNQUFmLENBQXNCeUIsSUFBdEIsQ0FBMkJLLFFBQTNCLENBQW9DalMsS0FBcEMsRUFBMkNvYSxnQkFBNUQsR0FBK0UsQ0FBNUY7O0FBRUFuZ0IsYUFBTTZiLGNBQWM3YixHQUFkLEdBQW9CNmIsV0FBcEIsR0FBa0M3YixHQUF4QztBQUNBQSxhQUFNdWtCLGFBQWF2a0IsR0FBYixHQUFtQnVrQixVQUFuQixHQUFnQ3ZrQixHQUF0QztBQUNBO0FBQ0QsYUFBT0EsR0FBUDtBQUNBO0FBM0trRixLQUEvQixDQUFyRDtBQTZLQSxJQS9LRDtBQWlMQyxHQS9TK0IsRUErUzlCLEVBQUMsTUFBSyxFQUFOLEVBQVMsTUFBSyxFQUFkLEVBQWlCLE1BQUssRUFBdEIsRUEvUzhCLENBaitFeXhCLEVBZ3hGNXhCLElBQUcsQ0FBQyxVQUFTckQsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ2pFOztBQUVBLE9BQUk0WSxXQUFXN1gsUUFBUSxFQUFSLENBQWY7QUFDQSxPQUFJK1gsV0FBVy9YLFFBQVEsRUFBUixDQUFmO0FBQ0EsT0FBSTBYLFVBQVUxWCxRQUFRLEVBQVIsQ0FBZDs7QUFFQTZYLFlBQVNpQyxJQUFULENBQWMsTUFBZCxFQUFzQjtBQUNyQmdPLGVBQVcsSUFEVTtBQUVyQkMsY0FBVSxLQUZXOztBQUlyQmhPLFdBQU87QUFDTkMsV0FBTTtBQURBLEtBSmM7O0FBUXJCQyxZQUFRO0FBQ1BDLFlBQU8sQ0FBQztBQUNQN1IsWUFBTSxVQURDO0FBRVBnWixVQUFJO0FBRkcsTUFBRCxDQURBO0FBS1A3RyxZQUFPLENBQUM7QUFDUG5TLFlBQU0sUUFEQztBQUVQZ1osVUFBSTtBQUZHLE1BQUQ7QUFMQTtBQVJhLElBQXRCOztBQW9CQW5pQixVQUFPRCxPQUFQLEdBQWlCLFVBQVNPLEtBQVQsRUFBZ0I7O0FBRWhDLGFBQVN3b0IsV0FBVCxDQUFxQjVKLE9BQXJCLEVBQThCL0IsT0FBOUIsRUFBdUM7QUFDdEMsWUFBTzNFLFFBQVE4SixjQUFSLENBQXVCcEQsUUFBUTZKLFFBQS9CLEVBQXlDNUwsUUFBUXlMLFNBQWpELENBQVA7QUFDQTs7QUFFRHRvQixVQUFNMGQsV0FBTixDQUFrQmdMLElBQWxCLEdBQXlCMW9CLE1BQU00ZCxpQkFBTixDQUF3Qm5FLE1BQXhCLENBQStCOztBQUV2RGtQLHlCQUFvQnBRLFNBQVMyQixJQUYwQjs7QUFJdkQyRCxzQkFBaUJ0RixTQUFTb0ssS0FKNkI7O0FBTXZEdEUsYUFBUSxnQkFBU0MsS0FBVCxFQUFnQjtBQUN2QixVQUFJUCxLQUFLLElBQVQ7QUFDQSxVQUFJQyxPQUFPRCxHQUFHRyxPQUFILEVBQVg7QUFDQSxVQUFJd0ssT0FBTzFLLEtBQUtZLE9BQWhCO0FBQ0EsVUFBSWdFLFNBQVM1RSxLQUFLeEMsSUFBTCxJQUFhLEVBQTFCO0FBQ0EsVUFBSXFCLFVBQVVrQixHQUFHWSxLQUFILENBQVM5QixPQUF2QjtBQUNBLFVBQUkrTCxxQkFBcUIvTCxRQUFRdEUsUUFBUixDQUFpQm1RLElBQTFDO0FBQ0EsVUFBSTlsQixRQUFRbWIsR0FBR2lCLGFBQUgsQ0FBaUJoQixLQUFLbUIsT0FBdEIsQ0FBWjtBQUNBLFVBQUk3ZSxDQUFKLEVBQU9tYyxJQUFQLEVBQWFvQyxNQUFiO0FBQ0EsVUFBSUQsVUFBVWIsR0FBR0ssVUFBSCxFQUFkO0FBQ0EsVUFBSXFLLFdBQVdELFlBQVk1SixPQUFaLEVBQXFCL0IsT0FBckIsQ0FBZjs7QUFFQTtBQUNBLFVBQUk0TCxRQUFKLEVBQWM7QUFDYjVKLGdCQUFTNkosS0FBSzdKLE1BQUwsSUFBZSxFQUF4Qjs7QUFFQTtBQUNBLFdBQUtELFFBQVFpSyxPQUFSLEtBQW9CcGxCLFNBQXJCLElBQW9DbWIsUUFBUWtLLFdBQVIsS0FBd0JybEIsU0FBaEUsRUFBNEU7QUFDM0VtYixnQkFBUWtLLFdBQVIsR0FBc0JsSyxRQUFRaUssT0FBOUI7QUFDQTs7QUFFRDtBQUNBSCxZQUFLSyxNQUFMLEdBQWNubUIsS0FBZDtBQUNBOGxCLFlBQUt0SixhQUFMLEdBQXFCckIsR0FBR25VLEtBQXhCO0FBQ0E7QUFDQThlLFlBQUtNLFNBQUwsR0FBaUJwRyxNQUFqQjtBQUNBO0FBQ0E4RixZQUFLcEosTUFBTCxHQUFjO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQWlKLGtCQUFVM0osUUFBUTJKLFFBQVIsR0FBbUIzSixRQUFRMkosUUFBM0IsR0FBc0MxTCxRQUFRMEwsUUFMM0M7QUFNYk0saUJBQVNoSyxPQUFPZ0ssT0FBUCxHQUFpQmhLLE9BQU9nSyxPQUF4QixHQUFrQzNRLFFBQVE4SixjQUFSLENBQXVCcEQsUUFBUWtLLFdBQS9CLEVBQTRDRixtQkFBbUJDLE9BQS9ELENBTjlCO0FBT2J0Six5QkFBaUJWLE9BQU9VLGVBQVAsR0FBeUJWLE9BQU9VLGVBQWhDLEdBQW1EWCxRQUFRVyxlQUFSLElBQTJCcUosbUJBQW1CckosZUFQckc7QUFRYkcscUJBQWFiLE9BQU9hLFdBQVAsR0FBcUJiLE9BQU9hLFdBQTVCLEdBQTJDZCxRQUFRYyxXQUFSLElBQXVCa0osbUJBQW1CbEosV0FSckY7QUFTYkQscUJBQWFaLE9BQU9ZLFdBQVAsR0FBcUJaLE9BQU9ZLFdBQTVCLEdBQTJDYixRQUFRYSxXQUFSLElBQXVCbUosbUJBQW1CbkosV0FUckY7QUFVYndKLHdCQUFnQnBLLE9BQU9vSyxjQUFQLEdBQXdCcEssT0FBT29LLGNBQS9CLEdBQWlEckssUUFBUXFLLGNBQVIsSUFBMEJMLG1CQUFtQkssY0FWakc7QUFXYkMsb0JBQVlySyxPQUFPcUssVUFBUCxHQUFvQnJLLE9BQU9xSyxVQUEzQixHQUF5Q3RLLFFBQVFzSyxVQUFSLElBQXNCTixtQkFBbUJNLFVBWGpGO0FBWWJDLDBCQUFrQnRLLE9BQU9zSyxnQkFBUCxHQUEwQnRLLE9BQU9zSyxnQkFBakMsR0FBcUR2SyxRQUFRdUssZ0JBQVIsSUFBNEJQLG1CQUFtQk8sZ0JBWnpHO0FBYWJDLHlCQUFpQnZLLE9BQU91SyxlQUFQLEdBQXlCdkssT0FBT3VLLGVBQWhDLEdBQW1EeEssUUFBUXdLLGVBQVIsSUFBMkJSLG1CQUFtQlEsZUFickc7QUFjYnBFLGNBQU1uRyxPQUFPbUcsSUFBUCxHQUFjbkcsT0FBT21HLElBQXJCLEdBQTZCcEcsUUFBUW9HLElBQVIsS0FBaUJ2aEIsU0FBakIsR0FBNkJtYixRQUFRb0csSUFBckMsR0FBNEM0RCxtQkFBbUI1RCxJQWRyRjtBQWVicUUscUJBQWF4SyxPQUFPd0ssV0FBUCxHQUFxQnhLLE9BQU93SyxXQUE1QixHQUEwQ25SLFFBQVE4SixjQUFSLENBQXVCcEQsUUFBUXlLLFdBQS9CLEVBQTRDVCxtQkFBbUJVLE9BQS9ELENBZjFDO0FBZ0JiQyxnQ0FBd0IxSyxPQUFPMEssc0JBQVAsR0FBZ0MxSyxPQUFPMEssc0JBQXZDLEdBQWdFclIsUUFBUThKLGNBQVIsQ0FBdUJwRCxRQUFRMkssc0JBQS9CLEVBQXVEWCxtQkFBbUJXLHNCQUExRTtBQWhCM0UsUUFBZDs7QUFtQkFiLFlBQUs5SSxLQUFMO0FBQ0E7O0FBRUQ7QUFDQSxXQUFLdGYsSUFBSSxDQUFKLEVBQU9tYyxPQUFPbUcsT0FBTzdoQixNQUExQixFQUFrQ1QsSUFBSW1jLElBQXRDLEVBQTRDLEVBQUVuYyxDQUE5QyxFQUFpRDtBQUNoRHlkLFVBQUdXLGFBQUgsQ0FBaUJrRSxPQUFPdGlCLENBQVAsQ0FBakIsRUFBNEJBLENBQTVCLEVBQStCZ2UsS0FBL0I7QUFDQTs7QUFFRCxVQUFJbUssWUFBWUMsS0FBS3BKLE1BQUwsQ0FBWXVKLE9BQVosS0FBd0IsQ0FBeEMsRUFBMkM7QUFDMUM5SyxVQUFHeUwseUJBQUg7QUFDQTs7QUFFRDtBQUNBLFdBQUtscEIsSUFBSSxDQUFKLEVBQU9tYyxPQUFPbUcsT0FBTzdoQixNQUExQixFQUFrQ1QsSUFBSW1jLElBQXRDLEVBQTRDLEVBQUVuYyxDQUE5QyxFQUFpRDtBQUNoRHNpQixjQUFPdGlCLENBQVAsRUFBVXNmLEtBQVY7QUFDQTtBQUNELE1BcEVzRDs7QUFzRXZENkosOEJBQXlCLGlDQUFTM0csS0FBVCxFQUFnQmxaLEtBQWhCLEVBQXVCO0FBQy9DLFVBQUkyVixrQkFBa0IsS0FBS1osS0FBTCxDQUFXOUIsT0FBWCxDQUFtQnRFLFFBQW5CLENBQTRCdUssS0FBNUIsQ0FBa0N2RCxlQUF4RDtBQUNBLFVBQUlYLFVBQVUsS0FBS1IsVUFBTCxFQUFkO0FBQ0EsVUFBSVMsU0FBU2lFLE1BQU1qRSxNQUFOLElBQWdCLEVBQTdCOztBQUVBLFVBQUlBLE9BQU9VLGVBQVgsRUFBNEI7QUFDM0JBLHlCQUFrQlYsT0FBT1UsZUFBekI7QUFDQSxPQUZELE1BRU8sSUFBSVgsUUFBUThLLG9CQUFaLEVBQWtDO0FBQ3hDbksseUJBQWtCckgsUUFBUXNILHFCQUFSLENBQThCWixRQUFROEssb0JBQXRDLEVBQTREOWYsS0FBNUQsRUFBbUUyVixlQUFuRSxDQUFsQjtBQUNBLE9BRk0sTUFFQSxJQUFJWCxRQUFRVyxlQUFaLEVBQTZCO0FBQ25DQSx5QkFBa0JYLFFBQVFXLGVBQTFCO0FBQ0E7O0FBRUQsYUFBT0EsZUFBUDtBQUNBLE1BcEZzRDs7QUFzRnZEb0ssMEJBQXFCLDZCQUFTN0csS0FBVCxFQUFnQmxaLEtBQWhCLEVBQXVCO0FBQzNDLFVBQUk2VixjQUFjLEtBQUtkLEtBQUwsQ0FBVzlCLE9BQVgsQ0FBbUJ0RSxRQUFuQixDQUE0QnVLLEtBQTVCLENBQWtDckQsV0FBcEQ7QUFDQSxVQUFJYixVQUFVLEtBQUtSLFVBQUwsRUFBZDtBQUNBLFVBQUlTLFNBQVNpRSxNQUFNakUsTUFBTixJQUFnQixFQUE3Qjs7QUFFQSxVQUFJQSxPQUFPWSxXQUFYLEVBQXdCO0FBQ3ZCQSxxQkFBY1osT0FBT1ksV0FBckI7QUFDQSxPQUZELE1BRU8sSUFBSWIsUUFBUWdMLGdCQUFaLEVBQThCO0FBQ3BDbksscUJBQWN2SCxRQUFRc0gscUJBQVIsQ0FBOEJaLFFBQVFnTCxnQkFBdEMsRUFBd0RoZ0IsS0FBeEQsRUFBK0Q2VixXQUEvRCxDQUFkO0FBQ0EsT0FGTSxNQUVBLElBQUliLFFBQVFhLFdBQVosRUFBeUI7QUFDL0JBLHFCQUFjYixRQUFRYSxXQUF0QjtBQUNBOztBQUVELGFBQU9BLFdBQVA7QUFDQSxNQXBHc0Q7O0FBc0d2RG9LLDBCQUFxQiw2QkFBUy9HLEtBQVQsRUFBZ0JsWixLQUFoQixFQUF1QjtBQUMzQyxVQUFJOFYsY0FBYyxLQUFLZixLQUFMLENBQVc5QixPQUFYLENBQW1CdEUsUUFBbkIsQ0FBNEJ1SyxLQUE1QixDQUFrQ3BELFdBQXBEO0FBQ0EsVUFBSWQsVUFBVSxLQUFLUixVQUFMLEVBQWQ7QUFDQSxVQUFJUyxTQUFTaUUsTUFBTWpFLE1BQU4sSUFBZ0IsRUFBN0I7O0FBRUEsVUFBSSxDQUFDM2IsTUFBTTJiLE9BQU9hLFdBQWIsQ0FBTCxFQUFnQztBQUMvQkEscUJBQWNiLE9BQU9hLFdBQXJCO0FBQ0EsT0FGRCxNQUVPLElBQUksQ0FBQ3hjLE1BQU0wYixRQUFRa0wsZ0JBQWQsQ0FBRCxJQUFvQzVSLFFBQVEyTixPQUFSLENBQWdCakgsUUFBUWtMLGdCQUF4QixDQUF4QyxFQUFtRjtBQUN6RnBLLHFCQUFjeEgsUUFBUXNILHFCQUFSLENBQThCWixRQUFRa0wsZ0JBQXRDLEVBQXdEbGdCLEtBQXhELEVBQStEOFYsV0FBL0QsQ0FBZDtBQUNBLE9BRk0sTUFFQSxJQUFJLENBQUN4YyxNQUFNMGIsUUFBUWMsV0FBZCxDQUFMLEVBQWlDO0FBQ3ZDQSxxQkFBY2QsUUFBUWMsV0FBdEI7QUFDQTs7QUFFRCxhQUFPQSxXQUFQO0FBQ0EsTUFwSHNEOztBQXNIdkRxSyx1QkFBa0IsMEJBQVNqSCxLQUFULEVBQWdCbFosS0FBaEIsRUFBdUI7QUFDeEMsVUFBSW9nQixnQkFBZ0IsS0FBS3JMLEtBQUwsQ0FBVzlCLE9BQVgsQ0FBbUJ0RSxRQUFuQixDQUE0QnVLLEtBQTVCLENBQWtDVSxRQUF0RDtBQUNBLFVBQUk1RSxVQUFVLEtBQUtSLFVBQUwsRUFBZDtBQUNBLFVBQUlTLFNBQVNpRSxNQUFNakUsTUFBTixJQUFnQixFQUE3Qjs7QUFFQSxVQUFJLENBQUMzYixNQUFNMmIsT0FBTzJFLFFBQWIsQ0FBTCxFQUE2QjtBQUM1QndHLHVCQUFnQm5MLE9BQU8yRSxRQUF2QjtBQUNBLE9BRkQsTUFFTyxJQUFJLENBQUN0Z0IsTUFBTTBiLFFBQVFvTCxhQUFkLENBQUQsSUFBaUM5UixRQUFRMk4sT0FBUixDQUFnQmpILFFBQVFvTCxhQUF4QixDQUFyQyxFQUE2RTtBQUNuRkEsdUJBQWdCOVIsUUFBUXNILHFCQUFSLENBQThCWixRQUFRb0wsYUFBdEMsRUFBcURwZ0IsS0FBckQsRUFBNERvZ0IsYUFBNUQsQ0FBaEI7QUFDQTtBQUNELGFBQU9BLGFBQVA7QUFDQSxNQWpJc0Q7O0FBbUl2RHRMLG9CQUFlLHVCQUFTb0UsS0FBVCxFQUFnQmxaLEtBQWhCLEVBQXVCMFUsS0FBdkIsRUFBOEI7QUFDNUMsVUFBSVAsS0FBSyxJQUFUO0FBQ0EsVUFBSUMsT0FBT0QsR0FBR0csT0FBSCxFQUFYO0FBQ0EsVUFBSVcsU0FBU2lFLE1BQU1qRSxNQUFOLElBQWdCLEVBQTdCO0FBQ0EsVUFBSUQsVUFBVWIsR0FBR0ssVUFBSCxFQUFkO0FBQ0EsVUFBSXRDLGVBQWVpQyxHQUFHblUsS0FBdEI7QUFDQSxVQUFJL0UsUUFBUStaLFFBQVFwRCxJQUFSLENBQWE1UixLQUFiLENBQVo7QUFDQSxVQUFJb1osU0FBU2pGLEdBQUdpQixhQUFILENBQWlCaEIsS0FBS21CLE9BQXRCLENBQWI7QUFDQSxVQUFJNEQsU0FBU2hGLEdBQUdpQixhQUFILENBQWlCaEIsS0FBS2lCLE9BQXRCLENBQWI7QUFDQSxVQUFJZ0wsZUFBZWxNLEdBQUdZLEtBQUgsQ0FBUzlCLE9BQVQsQ0FBaUJ0RSxRQUFqQixDQUEwQnVLLEtBQTdDO0FBQ0EsVUFBSTdWLENBQUosRUFBT0wsQ0FBUDs7QUFFQTtBQUNBLFVBQUtnUyxRQUFRNkUsTUFBUixLQUFtQmhnQixTQUFwQixJQUFtQ21iLFFBQVFzTCxXQUFSLEtBQXdCem1CLFNBQS9ELEVBQTJFO0FBQzFFbWIsZUFBUXNMLFdBQVIsR0FBc0J0TCxRQUFRNkUsTUFBOUI7QUFDQTtBQUNELFVBQUs3RSxRQUFRMEUsU0FBUixLQUFzQjdmLFNBQXZCLElBQXNDbWIsUUFBUXVMLGNBQVIsS0FBMkIxbUIsU0FBckUsRUFBaUY7QUFDaEZtYixlQUFRdUwsY0FBUixHQUF5QnZMLFFBQVEwRSxTQUFqQztBQUNBOztBQUVEclcsVUFBSThWLE9BQU92QixnQkFBUCxDQUF3QixRQUFPM2MsS0FBUCx5Q0FBT0EsS0FBUCxPQUFpQixRQUFqQixHQUE0QkEsS0FBNUIsR0FBb0N1ZSxHQUE1RCxFQUFpRXhaLEtBQWpFLEVBQXdFa1MsWUFBeEUsQ0FBSjtBQUNBbFAsVUFBSTBSLFFBQVEwRSxPQUFPL0MsWUFBUCxFQUFSLEdBQWdDbEMsR0FBR3FNLGVBQUgsQ0FBbUJ2bEIsS0FBbkIsRUFBMEIrRSxLQUExQixFQUFpQ2tTLFlBQWpDLENBQXBDOztBQUVBO0FBQ0FnSCxZQUFNL0QsT0FBTixHQUFnQmdFLE1BQWhCO0FBQ0FELFlBQU01RCxPQUFOLEdBQWdCOEQsTUFBaEI7QUFDQUYsWUFBTTFELGFBQU4sR0FBc0J0RCxZQUF0QjtBQUNBZ0gsWUFBTXpELE1BQU4sR0FBZXpWLEtBQWY7O0FBRUE7QUFDQWtaLFlBQU14RCxNQUFOLEdBQWU7QUFDZHJTLFVBQUdBLENBRFc7QUFFZEwsVUFBR0EsQ0FGVztBQUdkOFcsYUFBTTdFLE9BQU82RSxJQUFQLElBQWV4Z0IsTUFBTStKLENBQU4sQ0FBZixJQUEyQi9KLE1BQU0wSixDQUFOLENBSG5CO0FBSWQ7QUFDQTZXLGVBQVE1RSxPQUFPNEUsTUFBUCxJQUFpQnZMLFFBQVFzSCxxQkFBUixDQUE4QlosUUFBUXNMLFdBQXRDLEVBQW1EdGdCLEtBQW5ELEVBQTBEcWdCLGFBQWF4RyxNQUF2RSxDQUxYO0FBTWRGLG1CQUFZMUUsT0FBTzBFLFVBQVAsSUFBcUJyTCxRQUFRc0gscUJBQVIsQ0FBOEJaLFFBQVEyRSxVQUF0QyxFQUFrRDNaLEtBQWxELEVBQXlEcWdCLGFBQWExRyxVQUF0RSxDQU5uQjtBQU9kQyxpQkFBVXpGLEdBQUdnTSxnQkFBSCxDQUFvQmpILEtBQXBCLEVBQTJCbFosS0FBM0IsQ0FQSTtBQVFkMlYsd0JBQWlCeEIsR0FBRzBMLHVCQUFILENBQTJCM0csS0FBM0IsRUFBa0NsWixLQUFsQyxDQVJIO0FBU2Q2VixvQkFBYTFCLEdBQUc0TCxtQkFBSCxDQUF1QjdHLEtBQXZCLEVBQThCbFosS0FBOUIsQ0FUQztBQVVkOFYsb0JBQWEzQixHQUFHOEwsbUJBQUgsQ0FBdUIvRyxLQUF2QixFQUE4QmxaLEtBQTlCLENBVkM7QUFXZGlmLGdCQUFTN0ssS0FBS1ksT0FBTCxDQUFhVSxNQUFiLEdBQXNCdEIsS0FBS1ksT0FBTCxDQUFhVSxNQUFiLENBQW9CdUosT0FBMUMsR0FBb0QsQ0FYL0M7QUFZZFEsb0JBQWFyTCxLQUFLWSxPQUFMLENBQWFVLE1BQWIsR0FBc0J0QixLQUFLWSxPQUFMLENBQWFVLE1BQWIsQ0FBb0IrSixXQUExQyxHQUF3RCxLQVp2RDtBQWFkO0FBQ0EvRixrQkFBV3pFLE9BQU95RSxTQUFQLElBQW9CcEwsUUFBUXNILHFCQUFSLENBQThCWixRQUFRdUwsY0FBdEMsRUFBc0R2Z0IsS0FBdEQsRUFBNkRxZ0IsYUFBYTNHLFNBQTFFO0FBZGpCLE9BQWY7QUFnQkEsTUFqTHNEOztBQW1MdkQ4RyxzQkFBaUIseUJBQVN2bEIsS0FBVCxFQUFnQitFLEtBQWhCLEVBQXVCa1MsWUFBdkIsRUFBcUM7QUFDckQsVUFBSWlDLEtBQUssSUFBVDtBQUNBLFVBQUlZLFFBQVFaLEdBQUdZLEtBQWY7QUFDQSxVQUFJWCxPQUFPRCxHQUFHRyxPQUFILEVBQVg7QUFDQSxVQUFJOEUsU0FBU2pGLEdBQUdpQixhQUFILENBQWlCaEIsS0FBS21CLE9BQXRCLENBQWI7QUFDQSxVQUFJa0wsU0FBUyxDQUFiO0FBQ0EsVUFBSUMsU0FBUyxDQUFiO0FBQ0EsVUFBSWhxQixDQUFKLEVBQU91a0IsRUFBUCxFQUFXMEYsTUFBWDs7QUFFQSxVQUFJdkgsT0FBT25HLE9BQVAsQ0FBZWlFLE9BQW5CLEVBQTRCO0FBQzNCLFlBQUt4Z0IsSUFBSSxDQUFULEVBQVlBLElBQUl3YixZQUFoQixFQUE4QnhiLEdBQTlCLEVBQW1DO0FBQ2xDdWtCLGFBQUtsRyxNQUFNbkQsSUFBTixDQUFXSyxRQUFYLENBQW9CdmIsQ0FBcEIsQ0FBTDtBQUNBaXFCLGlCQUFTNUwsTUFBTXFDLGNBQU4sQ0FBcUIxZ0IsQ0FBckIsQ0FBVDtBQUNBLFlBQUlpcUIsT0FBTzFoQixJQUFQLEtBQWdCLE1BQWhCLElBQTBCMGhCLE9BQU9wTCxPQUFQLEtBQW1CNkQsT0FBT25CLEVBQXBELElBQTBEbEQsTUFBTXNDLGdCQUFOLENBQXVCM2dCLENBQXZCLENBQTlELEVBQXlGO0FBQ3hGLGFBQUlrcUIsb0JBQW9CQyxPQUFPekgsT0FBT3ZCLGFBQVAsQ0FBcUJvRCxHQUFHckosSUFBSCxDQUFRNVIsS0FBUixDQUFyQixDQUFQLENBQXhCO0FBQ0EsYUFBSTRnQixvQkFBb0IsQ0FBeEIsRUFBMkI7QUFDMUJGLG9CQUFVRSxxQkFBcUIsQ0FBL0I7QUFDQSxVQUZELE1BRU87QUFDTkgsb0JBQVVHLHFCQUFxQixDQUEvQjtBQUNBO0FBQ0Q7QUFDRDs7QUFFRCxXQUFJRSxhQUFhRCxPQUFPekgsT0FBT3ZCLGFBQVAsQ0FBcUI1YyxLQUFyQixDQUFQLENBQWpCO0FBQ0EsV0FBSTZsQixhQUFhLENBQWpCLEVBQW9CO0FBQ25CLGVBQU8xSCxPQUFPeEIsZ0JBQVAsQ0FBd0I4SSxTQUFTSSxVQUFqQyxDQUFQO0FBQ0E7QUFDRCxjQUFPMUgsT0FBT3hCLGdCQUFQLENBQXdCNkksU0FBU0ssVUFBakMsQ0FBUDtBQUNBOztBQUVELGFBQU8xSCxPQUFPeEIsZ0JBQVAsQ0FBd0IzYyxLQUF4QixDQUFQO0FBQ0EsTUFsTnNEOztBQW9OdkQya0IsZ0NBQTJCLHFDQUFXO0FBQ3JDLFVBQUl6TCxLQUFLLElBQVQ7QUFDQSxVQUFJQyxPQUFPRCxHQUFHRyxPQUFILEVBQVg7QUFDQSxVQUFJeU0sT0FBTzVNLEdBQUdZLEtBQUgsQ0FBUzJELFNBQXBCO0FBQ0EsVUFBSU0sU0FBVTVFLEtBQUt4QyxJQUFMLElBQWEsRUFBM0I7QUFDQSxVQUFJbGIsQ0FBSixFQUFPbWMsSUFBUCxFQUFhcUcsS0FBYixFQUFvQmpELEtBQXBCLEVBQTJCK0ssYUFBM0I7O0FBRUE7QUFDQSxVQUFJNU0sS0FBS1ksT0FBTCxDQUFhVSxNQUFiLENBQW9CaUosUUFBeEIsRUFBa0M7QUFDakMzRixnQkFBU0EsT0FBT2lJLE1BQVAsQ0FBYyxVQUFTQyxFQUFULEVBQWE7QUFDbkMsZUFBTyxDQUFDQSxHQUFHeEwsTUFBSCxDQUFVb0UsSUFBbEI7QUFDQSxRQUZRLENBQVQ7QUFHQTs7QUFFRCxlQUFTcUgsZUFBVCxDQUF5QkQsRUFBekIsRUFBNkJsbkIsR0FBN0IsRUFBa0NDLEdBQWxDLEVBQXVDO0FBQ3RDLGNBQU9uQixLQUFLbUIsR0FBTCxDQUFTbkIsS0FBS2tCLEdBQUwsQ0FBU2tuQixFQUFULEVBQWFqbkIsR0FBYixDQUFULEVBQTRCRCxHQUE1QixDQUFQO0FBQ0E7O0FBRUQsVUFBSW9hLEtBQUtZLE9BQUwsQ0FBYVUsTUFBYixDQUFvQmlLLHNCQUFwQixLQUErQyxVQUFuRCxFQUErRDtBQUM5RHJSLGVBQVE4UyxtQkFBUixDQUE0QnBJLE1BQTVCO0FBQ0EsT0FGRCxNQUVPO0FBQ04sWUFBS3RpQixJQUFJLENBQUosRUFBT21jLE9BQU9tRyxPQUFPN2hCLE1BQTFCLEVBQWtDVCxJQUFJbWMsSUFBdEMsRUFBNEMsRUFBRW5jLENBQTlDLEVBQWlEO0FBQ2hEd2lCLGdCQUFRRixPQUFPdGlCLENBQVAsQ0FBUjtBQUNBdWYsZ0JBQVFpRCxNQUFNeEQsTUFBZDtBQUNBc0wsd0JBQWdCMVMsUUFBUStTLFdBQVIsQ0FDZi9TLFFBQVFnVCxZQUFSLENBQXFCdEksTUFBckIsRUFBNkJ0aUIsQ0FBN0IsRUFBZ0NnZixNQURqQixFQUVmTyxLQUZlLEVBR2YzSCxRQUFRaVQsUUFBUixDQUFpQnZJLE1BQWpCLEVBQXlCdGlCLENBQXpCLEVBQTRCZ2YsTUFIYixFQUlmdEIsS0FBS1ksT0FBTCxDQUFhVSxNQUFiLENBQW9CdUosT0FKTCxDQUFoQjtBQU1BaEosY0FBTXVMLHFCQUFOLEdBQThCUixjQUFjUyxRQUFkLENBQXVCcGUsQ0FBckQ7QUFDQTRTLGNBQU15TCxxQkFBTixHQUE4QlYsY0FBY1MsUUFBZCxDQUF1QnplLENBQXJEO0FBQ0FpVCxjQUFNMEwsaUJBQU4sR0FBMEJYLGNBQWNyTixJQUFkLENBQW1CdFEsQ0FBN0M7QUFDQTRTLGNBQU0yTCxpQkFBTixHQUEwQlosY0FBY3JOLElBQWQsQ0FBbUIzUSxDQUE3QztBQUNBO0FBQ0Q7O0FBRUQsVUFBSW1SLEdBQUdZLEtBQUgsQ0FBUzlCLE9BQVQsQ0FBaUJ0RSxRQUFqQixDQUEwQm1RLElBQTFCLENBQStCK0MsZUFBbkMsRUFBb0Q7QUFDbkQsWUFBS25yQixJQUFJLENBQUosRUFBT21jLE9BQU9tRyxPQUFPN2hCLE1BQTFCLEVBQWtDVCxJQUFJbWMsSUFBdEMsRUFBNEMsRUFBRW5jLENBQTlDLEVBQWlEO0FBQ2hEdWYsZ0JBQVErQyxPQUFPdGlCLENBQVAsRUFBVWdmLE1BQWxCO0FBQ0FPLGNBQU11TCxxQkFBTixHQUE4QkwsZ0JBQWdCbEwsTUFBTXVMLHFCQUF0QixFQUE2Q1QsS0FBS3JKLElBQWxELEVBQXdEcUosS0FBS25FLEtBQTdELENBQTlCO0FBQ0EzRyxjQUFNeUwscUJBQU4sR0FBOEJQLGdCQUFnQmxMLE1BQU15TCxxQkFBdEIsRUFBNkNYLEtBQUtwSixHQUFsRCxFQUF1RG9KLEtBQUtqRSxNQUE1RCxDQUE5QjtBQUNBN0csY0FBTTBMLGlCQUFOLEdBQTBCUixnQkFBZ0JsTCxNQUFNMEwsaUJBQXRCLEVBQXlDWixLQUFLckosSUFBOUMsRUFBb0RxSixLQUFLbkUsS0FBekQsQ0FBMUI7QUFDQTNHLGNBQU0yTCxpQkFBTixHQUEwQlQsZ0JBQWdCbEwsTUFBTTJMLGlCQUF0QixFQUF5Q2IsS0FBS3BKLEdBQTlDLEVBQW1Eb0osS0FBS2pFLE1BQXhELENBQTFCO0FBQ0E7QUFDRDtBQUNELE1BbFFzRDs7QUFvUXZEdkUsV0FBTSxnQkFBVztBQUNoQixVQUFJcEUsS0FBSyxJQUFUO0FBQ0EsVUFBSVksUUFBUVosR0FBR1ksS0FBZjtBQUNBLFVBQUlYLE9BQU9ELEdBQUdHLE9BQUgsRUFBWDtBQUNBLFVBQUkwRSxTQUFTNUUsS0FBS3hDLElBQUwsSUFBYSxFQUExQjtBQUNBLFVBQUltUCxPQUFPaE0sTUFBTTJELFNBQWpCO0FBQ0EsVUFBSTdGLE9BQU9tRyxPQUFPN2hCLE1BQWxCO0FBQ0EsVUFBSTJxQixlQUFKO0FBQ0EsVUFBSXByQixJQUFJLENBQVI7O0FBRUEsVUFBSWtvQixZQUFZekssR0FBR0ssVUFBSCxFQUFaLEVBQTZCTyxNQUFNOUIsT0FBbkMsQ0FBSixFQUFpRDtBQUNoRDZPLHlCQUFrQixDQUFDMU4sS0FBS1ksT0FBTCxDQUFhVSxNQUFiLENBQW9CSSxXQUFwQixJQUFtQyxDQUFwQyxJQUF5QyxDQUEzRDs7QUFFQXhILGVBQVF5QixNQUFSLENBQWV5SSxRQUFmLENBQXdCekQsTUFBTTBELEdBQTlCLEVBQW1DO0FBQ2xDZixjQUFNcUosS0FBS3JKLElBRHVCO0FBRWxDa0YsZUFBT21FLEtBQUtuRSxLQUZzQjtBQUdsQ2pGLGFBQUtvSixLQUFLcEosR0FBTCxHQUFXbUssZUFIa0I7QUFJbENoRixnQkFBUWlFLEtBQUtqRSxNQUFMLEdBQWNnRjtBQUpZLFFBQW5DOztBQU9BMU4sWUFBS1ksT0FBTCxDQUFhdUQsSUFBYjs7QUFFQWpLLGVBQVF5QixNQUFSLENBQWU0SSxVQUFmLENBQTBCNUQsTUFBTTBELEdBQWhDO0FBQ0E7O0FBRUQ7QUFDQSxhQUFPL2hCLElBQUltYyxJQUFYLEVBQWlCLEVBQUVuYyxDQUFuQixFQUFzQjtBQUNyQnNpQixjQUFPdGlCLENBQVAsRUFBVTZoQixJQUFWLENBQWV3SSxJQUFmO0FBQ0E7QUFDRCxNQWpTc0Q7O0FBbVN2RGhILG9CQUFlLHVCQUFTc0UsT0FBVCxFQUFrQjtBQUNoQztBQUNBLFVBQUlySixVQUFVLEtBQUtELEtBQUwsQ0FBV25ELElBQVgsQ0FBZ0JLLFFBQWhCLENBQXlCb00sUUFBUTdJLGFBQWpDLENBQWQ7QUFDQSxVQUFJeFYsUUFBUXFlLFFBQVE1SSxNQUFwQjtBQUNBLFVBQUlSLFNBQVNvSixRQUFRcEosTUFBUixJQUFrQixFQUEvQjtBQUNBLFVBQUlnQixRQUFRb0ksUUFBUTNJLE1BQXBCOztBQUVBMkksY0FBUXJFLGNBQVIsR0FBeUI7QUFDeEJyRSx3QkFBaUJNLE1BQU1OLGVBREM7QUFFeEJFLG9CQUFhSSxNQUFNSixXQUZLO0FBR3hCQyxvQkFBYUcsTUFBTUgsV0FISztBQUl4QitELGVBQVE1RCxNQUFNNEQ7QUFKVSxPQUF6Qjs7QUFPQTVELFlBQU1OLGVBQU4sR0FBd0JWLE9BQU9nRixvQkFBUCxJQUErQjNMLFFBQVFzSCxxQkFBUixDQUE4QlosUUFBUStNLHlCQUF0QyxFQUFpRS9oQixLQUFqRSxFQUF3RXNPLFFBQVE0TCxhQUFSLENBQXNCakUsTUFBTU4sZUFBNUIsQ0FBeEUsQ0FBdkQ7QUFDQU0sWUFBTUosV0FBTixHQUFvQlosT0FBT2tGLGdCQUFQLElBQTJCN0wsUUFBUXNILHFCQUFSLENBQThCWixRQUFRZ04scUJBQXRDLEVBQTZEaGlCLEtBQTdELEVBQW9Fc08sUUFBUTRMLGFBQVIsQ0FBc0JqRSxNQUFNSixXQUE1QixDQUFwRSxDQUEvQztBQUNBSSxZQUFNSCxXQUFOLEdBQW9CYixPQUFPbUYsZ0JBQVAsSUFBMkI5TCxRQUFRc0gscUJBQVIsQ0FBOEJaLFFBQVFpTixxQkFBdEMsRUFBNkRqaUIsS0FBN0QsRUFBb0VpVyxNQUFNSCxXQUExRSxDQUEvQztBQUNBRyxZQUFNNEQsTUFBTixHQUFlNUUsT0FBT29GLFdBQVAsSUFBc0IvTCxRQUFRc0gscUJBQVIsQ0FBOEJaLFFBQVFrTixnQkFBdEMsRUFBd0RsaUIsS0FBeEQsRUFBK0QsS0FBSytVLEtBQUwsQ0FBVzlCLE9BQVgsQ0FBbUJ0RSxRQUFuQixDQUE0QnVLLEtBQTVCLENBQWtDbUIsV0FBakcsQ0FBckM7QUFDQTtBQXJUc0QsS0FBL0IsQ0FBekI7QUF1VEEsSUE3VEQ7QUErVEMsR0ExVitCLEVBMFY5QixFQUFDLE1BQUssRUFBTixFQUFTLE1BQUssRUFBZCxFQUFpQixNQUFLLEVBQXRCLEVBMVY4QixDQWh4Rnl4QixFQTBtRzV4QixJQUFHLENBQUMsVUFBU3pqQixPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDakU7O0FBRUEsT0FBSTRZLFdBQVc3WCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUkrWCxXQUFXL1gsUUFBUSxFQUFSLENBQWY7QUFDQSxPQUFJMFgsVUFBVTFYLFFBQVEsRUFBUixDQUFkOztBQUVBNlgsWUFBU2lDLElBQVQsQ0FBYyxXQUFkLEVBQTJCO0FBQzFCMVgsV0FBTztBQUNOaUcsV0FBTSxjQURBO0FBRU5rakIsaUJBQVk7QUFDWEMsZUFBUztBQURFLE1BRk47QUFLTmxSLGdCQUFXO0FBQ1ZtUixnQkFBVTtBQURBLE1BTEw7QUFRTkMsa0JBQWE7QUFDWkYsZUFBUztBQURHLE1BUlA7QUFXTjNQLFlBQU87QUFDTjhQLG1CQUFhO0FBRFA7QUFYRCxLQURtQjs7QUFpQjFCO0FBQ0E5SCxlQUFXO0FBQ1ZDLG9CQUFlLElBREw7QUFFVkMsbUJBQWM7QUFGSixLQWxCZTs7QUF1QjFCcUMsZ0JBQVksQ0FBQyxHQUFELEdBQU9sa0IsS0FBS3dMLEVBdkJFO0FBd0IxQnNXLG9CQUFnQix3QkFBUzdGLEtBQVQsRUFBZ0I7QUFDL0IsU0FBSThGLE9BQU8sRUFBWDtBQUNBQSxVQUFLdEQsSUFBTCxDQUFVLGdCQUFnQnhDLE1BQU1rRCxFQUF0QixHQUEyQixXQUFyQzs7QUFFQSxTQUFJckcsT0FBT21ELE1BQU1uRCxJQUFqQjtBQUNBLFNBQUlLLFdBQVdMLEtBQUtLLFFBQXBCO0FBQ0EsU0FBSUgsU0FBU0YsS0FBS0UsTUFBbEI7O0FBRUEsU0FBSUcsU0FBUzlhLE1BQWIsRUFBcUI7QUFDcEIsV0FBSyxJQUFJVCxJQUFJLENBQWIsRUFBZ0JBLElBQUl1YixTQUFTLENBQVQsRUFBWUwsSUFBWixDQUFpQnphLE1BQXJDLEVBQTZDLEVBQUVULENBQS9DLEVBQWtEO0FBQ2pEbWtCLFlBQUt0RCxJQUFMLENBQVUsdUNBQXVDdEYsU0FBUyxDQUFULEVBQVkwRCxlQUFaLENBQTRCamYsQ0FBNUIsQ0FBdkMsR0FBd0UsV0FBbEY7QUFDQSxXQUFJb2IsT0FBT3BiLENBQVAsQ0FBSixFQUFlO0FBQ2Rta0IsYUFBS3RELElBQUwsQ0FBVXpGLE9BQU9wYixDQUFQLENBQVY7QUFDQTtBQUNEbWtCLFlBQUt0RCxJQUFMLENBQVUsT0FBVjtBQUNBO0FBQ0Q7O0FBRURzRCxVQUFLdEQsSUFBTCxDQUFVLE9BQVY7QUFDQSxZQUFPc0QsS0FBS0MsSUFBTCxDQUFVLEVBQVYsQ0FBUDtBQUNBLEtBNUN5QjtBQTZDMUJ2TCxZQUFRO0FBQ1B1QyxhQUFRO0FBQ1BpSixzQkFBZ0Isd0JBQVNoRyxLQUFULEVBQWdCO0FBQy9CLFdBQUluRCxPQUFPbUQsTUFBTW5ELElBQWpCO0FBQ0EsV0FBSUEsS0FBS0UsTUFBTCxDQUFZM2EsTUFBWixJQUFzQnlhLEtBQUtLLFFBQUwsQ0FBYzlhLE1BQXhDLEVBQWdEO0FBQy9DLGVBQU95YSxLQUFLRSxNQUFMLENBQVlrSixHQUFaLENBQWdCLFVBQVNqSixLQUFULEVBQWdCcmIsQ0FBaEIsRUFBbUI7QUFDekMsYUFBSTBkLE9BQU9XLE1BQU1xQyxjQUFOLENBQXFCLENBQXJCLENBQVg7QUFDQSxhQUFJNkQsS0FBS3JKLEtBQUtLLFFBQUwsQ0FBYyxDQUFkLENBQVQ7QUFDQSxhQUFJaUosTUFBTTlHLEtBQUt4QyxJQUFMLENBQVVsYixDQUFWLENBQVY7QUFDQSxhQUFJdWUsU0FBU2lHLElBQUlqRyxNQUFKLElBQWMsRUFBM0I7QUFDQSxhQUFJVyx3QkFBd0J0SCxRQUFRc0gscUJBQXBDO0FBQ0EsYUFBSXVGLFVBQVVwRyxNQUFNOUIsT0FBTixDQUFjdEUsUUFBZCxDQUF1QnVNLEdBQXJDO0FBQ0EsYUFBSUUsT0FBT25HLE9BQU9VLGVBQVAsR0FBeUJWLE9BQU9VLGVBQWhDLEdBQWtEQyxzQkFBc0JxRixHQUFHdEYsZUFBekIsRUFBMENqZixDQUExQyxFQUE2Q3lrQixRQUFReEYsZUFBckQsQ0FBN0Q7QUFDQSxhQUFJMEYsU0FBU3BHLE9BQU9ZLFdBQVAsR0FBcUJaLE9BQU9ZLFdBQTVCLEdBQTBDRCxzQkFBc0JxRixHQUFHcEYsV0FBekIsRUFBc0NuZixDQUF0QyxFQUF5Q3lrQixRQUFRdEYsV0FBakQsQ0FBdkQ7QUFDQSxhQUFJeUYsS0FBS3JHLE9BQU9hLFdBQVAsR0FBcUJiLE9BQU9hLFdBQTVCLEdBQTBDRixzQkFBc0JxRixHQUFHbkYsV0FBekIsRUFBc0NwZixDQUF0QyxFQUF5Q3lrQixRQUFRckYsV0FBakQsQ0FBbkQ7O0FBRUEsZ0JBQU87QUFDTitFLGdCQUFNOUksS0FEQTtBQUVOd0oscUJBQVdILElBRkw7QUFHTkksdUJBQWFILE1BSFA7QUFJTkkscUJBQVdILEVBSkw7QUFLTkksa0JBQVFwaUIsTUFBTTJoQixHQUFHckosSUFBSCxDQUFRbGIsQ0FBUixDQUFOLEtBQXFCMGQsS0FBS3hDLElBQUwsQ0FBVWxiLENBQVYsRUFBYWdsQixNQUxwQzs7QUFPTjtBQUNBMWIsaUJBQU90SjtBQVJELFVBQVA7QUFVQSxTQXJCTSxDQUFQO0FBc0JBO0FBQ0QsY0FBTyxFQUFQO0FBQ0E7QUE1Qk0sTUFERDs7QUFnQ1BpbEIsY0FBUyxpQkFBU3JsQixDQUFULEVBQVlzbEIsVUFBWixFQUF3QjtBQUNoQyxVQUFJNWIsUUFBUTRiLFdBQVc1YixLQUF2QjtBQUNBLFVBQUkrVSxRQUFRLEtBQUtBLEtBQWpCO0FBQ0EsVUFBSXJlLENBQUosRUFBT21jLElBQVAsRUFBYXVCLElBQWI7O0FBRUEsV0FBSzFkLElBQUksQ0FBSixFQUFPbWMsT0FBTyxDQUFDa0MsTUFBTW5ELElBQU4sQ0FBV0ssUUFBWCxJQUF1QixFQUF4QixFQUE0QjlhLE1BQS9DLEVBQXVEVCxJQUFJbWMsSUFBM0QsRUFBaUUsRUFBRW5jLENBQW5FLEVBQXNFO0FBQ3JFMGQsY0FBT1csTUFBTXFDLGNBQU4sQ0FBcUIxZ0IsQ0FBckIsQ0FBUDtBQUNBMGQsWUFBS3hDLElBQUwsQ0FBVTVSLEtBQVYsRUFBaUIwYixNQUFqQixHQUEwQixDQUFDdEgsS0FBS3hDLElBQUwsQ0FBVTVSLEtBQVYsRUFBaUIwYixNQUE1QztBQUNBOztBQUVEM0csWUFBTU4sTUFBTjtBQUNBO0FBM0NNLEtBN0NrQjs7QUEyRjFCO0FBQ0FoRCxjQUFVO0FBQ1RDLGdCQUFXO0FBQ1ZoQyxhQUFPLGlCQUFXO0FBQ2pCLGNBQU8sRUFBUDtBQUNBLE9BSFM7QUFJVnFDLGFBQU8sZUFBU0osSUFBVCxFQUFlQyxJQUFmLEVBQXFCO0FBQzNCLGNBQU9BLEtBQUtFLE1BQUwsQ0FBWUgsS0FBSzNSLEtBQWpCLElBQTBCLElBQTFCLEdBQWlDMlIsS0FBS0UsTUFBN0M7QUFDQTtBQU5TO0FBREY7QUE1RmdCLElBQTNCOztBQXdHQS9iLFVBQU9ELE9BQVAsR0FBaUIsVUFBU08sS0FBVCxFQUFnQjs7QUFFaENBLFVBQU0wZCxXQUFOLENBQWtCME8sU0FBbEIsR0FBOEJwc0IsTUFBTTRkLGlCQUFOLENBQXdCbkUsTUFBeEIsQ0FBK0I7O0FBRTVEb0Usc0JBQWlCdEYsU0FBU3lOLEdBRmtDOztBQUk1REMsaUJBQVkvTixRQUFRZ08sSUFKd0M7O0FBTTVEN0gsYUFBUSxnQkFBU0MsS0FBVCxFQUFnQjtBQUN2QixVQUFJUCxLQUFLLElBQVQ7QUFDQSxVQUFJYSxVQUFVYixHQUFHSyxVQUFILEVBQWQ7QUFDQSxVQUFJSixPQUFPRCxHQUFHRyxPQUFILEVBQVg7QUFDQSxVQUFJYixRQUFRVSxHQUFHWSxLQUFILENBQVM5QixPQUFULENBQWlCK0osVUFBakIsSUFBK0IsQ0FBM0M7QUFDQSxVQUFJeUYsU0FBU3RPLEdBQUd1TyxPQUFILEdBQWEsRUFBMUI7QUFDQSxVQUFJQyxTQUFTeE8sR0FBR3lPLE9BQUgsR0FBYSxFQUExQjtBQUNBLFVBQUlsc0IsQ0FBSixFQUFPbWMsSUFBUCxFQUFhZ1EsS0FBYjs7QUFFQTFPLFNBQUcyTyxhQUFIOztBQUVBMU8sV0FBS2hCLEtBQUwsR0FBYWUsR0FBRzRPLG9CQUFILEVBQWI7O0FBRUEsV0FBS3JzQixJQUFJLENBQUosRUFBT21jLE9BQU9tQyxRQUFRcEQsSUFBUixDQUFhemEsTUFBaEMsRUFBd0NULElBQUltYyxJQUE1QyxFQUFrRG5jLEdBQWxELEVBQXVEO0FBQ3REK3JCLGNBQU8vckIsQ0FBUCxJQUFZK2MsS0FBWjtBQUNBb1AsZUFBUTFPLEdBQUc2TyxhQUFILENBQWlCdHNCLENBQWpCLENBQVI7QUFDQWlzQixjQUFPanNCLENBQVAsSUFBWW1zQixLQUFaO0FBQ0FwUCxnQkFBU29QLEtBQVQ7QUFDQTs7QUFFRHZVLGNBQVEySyxJQUFSLENBQWE3RSxLQUFLeEMsSUFBbEIsRUFBd0IsVUFBU3NKLEdBQVQsRUFBY2xiLEtBQWQsRUFBcUI7QUFDNUNtVSxVQUFHVyxhQUFILENBQWlCb0csR0FBakIsRUFBc0JsYixLQUF0QixFQUE2QjBVLEtBQTdCO0FBQ0EsT0FGRDtBQUdBLE1BN0IyRDs7QUErQjVEOzs7QUFHQW9PLG9CQUFlLHlCQUFXO0FBQ3pCLFVBQUkzTyxLQUFLLElBQVQ7QUFDQSxVQUFJWSxRQUFRWixHQUFHWSxLQUFmO0FBQ0EsVUFBSTJELFlBQVkzRCxNQUFNMkQsU0FBdEI7QUFDQSxVQUFJZ0UsT0FBTzNILE1BQU05QixPQUFqQjtBQUNBLFVBQUlrSSxVQUFVdUIsS0FBSy9OLFFBQUwsQ0FBY3VNLEdBQTVCO0FBQ0EsVUFBSTZCLFVBQVVqa0IsS0FBS2tCLEdBQUwsQ0FBUzBlLFVBQVVrRSxLQUFWLEdBQWtCbEUsVUFBVWhCLElBQXJDLEVBQTJDZ0IsVUFBVW9FLE1BQVYsR0FBbUJwRSxVQUFVZixHQUF4RSxDQUFkOztBQUVBNUMsWUFBTXlJLFdBQU4sR0FBb0Ixa0IsS0FBS21CLEdBQUwsQ0FBUyxDQUFDOGlCLFVBQVU1QixRQUFRckYsV0FBUixHQUFzQixDQUFqQyxJQUFzQyxDQUEvQyxFQUFrRCxDQUFsRCxDQUFwQjtBQUNBZixZQUFNMEksV0FBTixHQUFvQjNrQixLQUFLbUIsR0FBTCxDQUFTeWlCLEtBQUtiLGdCQUFMLEdBQXlCOUcsTUFBTXlJLFdBQU4sR0FBb0IsR0FBckIsR0FBNkJkLEtBQUtiLGdCQUExRCxHQUE4RSxDQUF2RixFQUEwRixDQUExRixDQUFwQjtBQUNBOUcsWUFBTTJJLFlBQU4sR0FBcUIsQ0FBQzNJLE1BQU15SSxXQUFOLEdBQW9CekksTUFBTTBJLFdBQTNCLElBQTBDMUksTUFBTTRJLHNCQUFOLEVBQS9EOztBQUVBeEosU0FBR3FKLFdBQUgsR0FBaUJ6SSxNQUFNeUksV0FBTixHQUFxQnpJLE1BQU0ySSxZQUFOLEdBQXFCdkosR0FBR25VLEtBQTlEO0FBQ0FtVSxTQUFHc0osV0FBSCxHQUFpQnRKLEdBQUdxSixXQUFILEdBQWlCekksTUFBTTJJLFlBQXhDO0FBQ0EsTUFoRDJEOztBQWtENUQ1SSxvQkFBZSx1QkFBU29HLEdBQVQsRUFBY2xiLEtBQWQsRUFBcUIwVSxLQUFyQixFQUE0QjtBQUMxQyxVQUFJUCxLQUFLLElBQVQ7QUFDQSxVQUFJWSxRQUFRWixHQUFHWSxLQUFmO0FBQ0EsVUFBSUMsVUFBVWIsR0FBR0ssVUFBSCxFQUFkO0FBQ0EsVUFBSWtJLE9BQU8zSCxNQUFNOUIsT0FBakI7QUFDQSxVQUFJK0ssZ0JBQWdCdEIsS0FBS2pDLFNBQXpCO0FBQ0EsVUFBSXpoQixRQUFRK2IsTUFBTS9iLEtBQWxCO0FBQ0EsVUFBSThZLFNBQVNpRCxNQUFNbkQsSUFBTixDQUFXRSxNQUF4Qjs7QUFFQSxVQUFJbU0sVUFBVWpsQixNQUFNaXFCLE9BQXBCO0FBQ0EsVUFBSS9FLFVBQVVsbEIsTUFBTWtxQixPQUFwQjs7QUFFQTtBQUNBLFVBQUlDLG9CQUFvQnpHLEtBQUtNLFVBQTdCO0FBQ0EsVUFBSW9HLFdBQVdsSSxJQUFJUSxNQUFKLEdBQWEsQ0FBYixHQUFpQjFpQixNQUFNcXFCLDZCQUFOLENBQW9Dck8sUUFBUXBELElBQVIsQ0FBYTVSLEtBQWIsQ0FBcEMsQ0FBaEM7QUFDQSxVQUFJZ2QsYUFBYTdJLEdBQUd1TyxPQUFILENBQVcxaUIsS0FBWCxDQUFqQjtBQUNBLFVBQUlpZCxXQUFXRCxjQUFjOUIsSUFBSVEsTUFBSixHQUFhLENBQWIsR0FBaUJ2SCxHQUFHeU8sT0FBSCxDQUFXNWlCLEtBQVgsQ0FBL0IsQ0FBZjs7QUFFQSxVQUFJc2pCLGNBQWN0RixjQUFjckQsWUFBZCxHQUE2QixDQUE3QixHQUFpQzNoQixNQUFNcXFCLDZCQUFOLENBQW9Dck8sUUFBUXBELElBQVIsQ0FBYTVSLEtBQWIsQ0FBcEMsQ0FBbkQ7O0FBRUFzTyxjQUFRdUIsTUFBUixDQUFlcUwsR0FBZixFQUFvQjtBQUNuQjtBQUNBMUYsc0JBQWVyQixHQUFHblUsS0FGQztBQUduQnlWLGVBQVF6VixLQUhXO0FBSW5CbWYsZUFBUW5tQixLQUpXOztBQU1uQjtBQUNBMGMsZUFBUTtBQUNQclMsV0FBRzRhLE9BREk7QUFFUGpiLFdBQUdrYixPQUZJO0FBR1BULHFCQUFhLENBSE47QUFJUEQscUJBQWE5SSxRQUFRNE8sV0FBUixHQUFzQkYsUUFKNUI7QUFLUHBHLG9CQUFZdEksU0FBU3NKLGNBQWN0RCxhQUF2QixHQUF1Q3lJLGlCQUF2QyxHQUEyRG5HLFVBTGhFO0FBTVBDLGtCQUFVdkksU0FBU3NKLGNBQWN0RCxhQUF2QixHQUF1Q3lJLGlCQUF2QyxHQUEyRGxHLFFBTjlEO0FBT1BsTCxlQUFPekQsUUFBUXNILHFCQUFSLENBQThCOUQsTUFBOUIsRUFBc0M5UixLQUF0QyxFQUE2QzhSLE9BQU85UixLQUFQLENBQTdDO0FBUEE7QUFQVyxPQUFwQjs7QUFrQkE7QUFDQSxVQUFJb2UsY0FBYyxLQUFLckosS0FBTCxDQUFXOUIsT0FBWCxDQUFtQnRFLFFBQW5CLENBQTRCdU0sR0FBOUM7QUFDQSxVQUFJakcsU0FBU2lHLElBQUlqRyxNQUFKLElBQWMsRUFBM0I7QUFDQSxVQUFJbUQsaUJBQWlCOUosUUFBUXNILHFCQUE3QjtBQUNBLFVBQUlLLFFBQVFpRixJQUFJeEYsTUFBaEI7O0FBRUFPLFlBQU1OLGVBQU4sR0FBd0JWLE9BQU9VLGVBQVAsR0FBeUJWLE9BQU9VLGVBQWhDLEdBQWtEeUMsZUFBZXBELFFBQVFXLGVBQXZCLEVBQXdDM1YsS0FBeEMsRUFBK0NvZSxZQUFZekksZUFBM0QsQ0FBMUU7QUFDQU0sWUFBTUosV0FBTixHQUFvQlosT0FBT1ksV0FBUCxHQUFxQlosT0FBT1ksV0FBNUIsR0FBMEN1QyxlQUFlcEQsUUFBUWEsV0FBdkIsRUFBb0M3VixLQUFwQyxFQUEyQ29lLFlBQVl2SSxXQUF2RCxDQUE5RDtBQUNBSSxZQUFNSCxXQUFOLEdBQW9CYixPQUFPYSxXQUFQLEdBQXFCYixPQUFPYSxXQUE1QixHQUEwQ3NDLGVBQWVwRCxRQUFRYyxXQUF2QixFQUFvQzlWLEtBQXBDLEVBQTJDb2UsWUFBWXRJLFdBQXZELENBQTlEOztBQUVBb0YsVUFBSWxGLEtBQUo7QUFDQSxNQW5HMkQ7O0FBcUc1RCtNLDJCQUFzQixnQ0FBVztBQUNoQyxVQUFJL04sVUFBVSxLQUFLUixVQUFMLEVBQWQ7QUFDQSxVQUFJSixPQUFPLEtBQUtFLE9BQUwsRUFBWDtBQUNBLFVBQUlsQixRQUFRLENBQVo7O0FBRUE5RSxjQUFRMkssSUFBUixDQUFhN0UsS0FBS3hDLElBQWxCLEVBQXdCLFVBQVN5TSxPQUFULEVBQWtCcmUsS0FBbEIsRUFBeUI7QUFDaEQsV0FBSSxDQUFDMUcsTUFBTTBiLFFBQVFwRCxJQUFSLENBQWE1UixLQUFiLENBQU4sQ0FBRCxJQUErQixDQUFDcWUsUUFBUTNDLE1BQTVDLEVBQW9EO0FBQ25EdEk7QUFDQTtBQUNELE9BSkQ7O0FBTUEsYUFBT0EsS0FBUDtBQUNBLE1BakgyRDs7QUFtSDVEOzs7QUFHQTRQLG9CQUFlLHVCQUFTaGpCLEtBQVQsRUFBZ0I7QUFDOUIsVUFBSW1VLEtBQUssSUFBVDtBQUNBLFVBQUlmLFFBQVEsS0FBS2tCLE9BQUwsR0FBZWxCLEtBQTNCO0FBQ0EsVUFBSTRCLFVBQVViLEdBQUdLLFVBQUgsRUFBZDtBQUNBLFVBQUlKLE9BQU9ELEdBQUdHLE9BQUgsRUFBWDs7QUFFQSxVQUFJaGIsTUFBTTBiLFFBQVFwRCxJQUFSLENBQWE1UixLQUFiLENBQU4sS0FBOEJvVSxLQUFLeEMsSUFBTCxDQUFVNVIsS0FBVixFQUFpQjBiLE1BQW5ELEVBQTJEO0FBQzFELGNBQU8sQ0FBUDtBQUNBOztBQUVEO0FBQ0EsVUFBSXhMLFVBQVU7QUFDYjZFLGNBQU9aLEdBQUdZLEtBREc7QUFFYndGLGtCQUFXdmEsS0FGRTtBQUdiZ1YsZ0JBQVNBLE9BSEk7QUFJYjlDLHFCQUFjaUMsR0FBR25VO0FBSkosT0FBZDs7QUFPQSxhQUFPc08sUUFBUTJFLE9BQVIsQ0FBZ0JxSCxPQUFoQixDQUF3QixDQUM5Qm5HLEdBQUdZLEtBQUgsQ0FBUzlCLE9BQVQsQ0FBaUJ0RSxRQUFqQixDQUEwQnVNLEdBQTFCLENBQThCMkgsS0FEQSxFQUU3QixJQUFJL3BCLEtBQUt3TCxFQUFWLEdBQWdCOE8sS0FGYyxDQUF4QixFQUdKbEQsT0FISSxFQUdLbFEsS0FITCxDQUFQO0FBSUE7QUE1STJELEtBQS9CLENBQTlCO0FBOElBLElBaEpEO0FBa0pDLEdBalErQixFQWlROUIsRUFBQyxNQUFLLEVBQU4sRUFBUyxNQUFLLEVBQWQsRUFBaUIsTUFBSyxFQUF0QixFQWpROEIsQ0ExbUd5eEIsRUEyMkc1eEIsSUFBRyxDQUFDLFVBQVNwSixPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDakU7O0FBRUEsT0FBSTRZLFdBQVc3WCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUkrWCxXQUFXL1gsUUFBUSxFQUFSLENBQWY7QUFDQSxPQUFJMFgsVUFBVTFYLFFBQVEsRUFBUixDQUFkOztBQUVBNlgsWUFBU2lDLElBQVQsQ0FBYyxPQUFkLEVBQXVCO0FBQ3RCMVgsV0FBTztBQUNOaUcsV0FBTTtBQURBLEtBRGU7QUFJdEIwUCxjQUFVO0FBQ1RtUSxXQUFNO0FBQ0xHLGVBQVMsQ0FESixDQUNNO0FBRE47QUFERztBQUpZLElBQXZCOztBQVdBbnBCLFVBQU9ELE9BQVAsR0FBaUIsVUFBU08sS0FBVCxFQUFnQjs7QUFFaENBLFVBQU0wZCxXQUFOLENBQWtCeVAsS0FBbEIsR0FBMEJudEIsTUFBTTRkLGlCQUFOLENBQXdCbkUsTUFBeEIsQ0FBK0I7O0FBRXhEa1AseUJBQW9CcFEsU0FBUzJCLElBRjJCOztBQUl4RDJELHNCQUFpQnRGLFNBQVNvSyxLQUo4Qjs7QUFNeERzRCxpQkFBWS9OLFFBQVFnTyxJQU5vQzs7QUFReEQ3SCxhQUFRLGdCQUFTQyxLQUFULEVBQWdCO0FBQ3ZCLFVBQUlQLEtBQUssSUFBVDtBQUNBLFVBQUlDLE9BQU9ELEdBQUdHLE9BQUgsRUFBWDtBQUNBLFVBQUl3SyxPQUFPMUssS0FBS1ksT0FBaEI7QUFDQSxVQUFJZ0UsU0FBUzVFLEtBQUt4QyxJQUFsQjtBQUNBLFVBQUlxRCxTQUFTNkosS0FBSzdKLE1BQUwsSUFBZSxFQUE1QjtBQUNBLFVBQUlELFVBQVViLEdBQUdLLFVBQUgsRUFBZDtBQUNBLFVBQUl3SyxxQkFBcUI3SyxHQUFHWSxLQUFILENBQVM5QixPQUFULENBQWlCdEUsUUFBakIsQ0FBMEJtUSxJQUFuRDtBQUNBLFVBQUk5bEIsUUFBUW1iLEdBQUdZLEtBQUgsQ0FBUy9iLEtBQXJCOztBQUVBO0FBQ0EsVUFBS2djLFFBQVFpSyxPQUFSLEtBQW9CcGxCLFNBQXJCLElBQW9DbWIsUUFBUWtLLFdBQVIsS0FBd0JybEIsU0FBaEUsRUFBNEU7QUFDM0VtYixlQUFRa0ssV0FBUixHQUFzQmxLLFFBQVFpSyxPQUE5QjtBQUNBOztBQUVEM1EsY0FBUXVCLE1BQVIsQ0FBZXVFLEtBQUtZLE9BQXBCLEVBQTZCO0FBQzVCO0FBQ0FRLHNCQUFlckIsR0FBR25VLEtBRlU7QUFHNUJtZixlQUFRbm1CLEtBSG9CO0FBSTVCO0FBQ0FvbUIsa0JBQVdwRyxNQUxpQjtBQU01QndLLGNBQU8sSUFOcUI7QUFPNUI7QUFDQTlOLGVBQVE7QUFDUDtBQUNBdUosaUJBQVNoSyxPQUFPZ0ssT0FBUCxHQUFpQmhLLE9BQU9nSyxPQUF4QixHQUFrQzNRLFFBQVE4SixjQUFSLENBQXVCcEQsUUFBUWtLLFdBQS9CLEVBQTRDRixtQkFBbUJDLE9BQS9ELENBRnBDO0FBR1B0Six5QkFBaUJWLE9BQU9VLGVBQVAsR0FBeUJWLE9BQU9VLGVBQWhDLEdBQW1EWCxRQUFRVyxlQUFSLElBQTJCcUosbUJBQW1CckosZUFIM0c7QUFJUEcscUJBQWFiLE9BQU9hLFdBQVAsR0FBcUJiLE9BQU9hLFdBQTVCLEdBQTJDZCxRQUFRYyxXQUFSLElBQXVCa0osbUJBQW1CbEosV0FKM0Y7QUFLUEQscUJBQWFaLE9BQU9ZLFdBQVAsR0FBcUJaLE9BQU9ZLFdBQTVCLEdBQTJDYixRQUFRYSxXQUFSLElBQXVCbUosbUJBQW1CbkosV0FMM0Y7QUFNUHVGLGNBQU1uRyxPQUFPbUcsSUFBUCxHQUFjbkcsT0FBT21HLElBQXJCLEdBQTZCcEcsUUFBUW9HLElBQVIsS0FBaUJ2aEIsU0FBakIsR0FBNkJtYixRQUFRb0csSUFBckMsR0FBNEM0RCxtQkFBbUI1RCxJQU4zRjtBQU9QaUUsd0JBQWdCcEssT0FBT29LLGNBQVAsR0FBd0JwSyxPQUFPb0ssY0FBL0IsR0FBaURySyxRQUFRcUssY0FBUixJQUEwQkwsbUJBQW1CSyxjQVB2RztBQVFQQyxvQkFBWXJLLE9BQU9xSyxVQUFQLEdBQW9CckssT0FBT3FLLFVBQTNCLEdBQXlDdEssUUFBUXNLLFVBQVIsSUFBc0JOLG1CQUFtQk0sVUFSdkY7QUFTUEMsMEJBQWtCdEssT0FBT3NLLGdCQUFQLEdBQTBCdEssT0FBT3NLLGdCQUFqQyxHQUFxRHZLLFFBQVF1SyxnQkFBUixJQUE0QlAsbUJBQW1CTyxnQkFUL0c7QUFVUEMseUJBQWlCdkssT0FBT3VLLGVBQVAsR0FBeUJ2SyxPQUFPdUssZUFBaEMsR0FBbUR4SyxRQUFRd0ssZUFBUixJQUEyQlIsbUJBQW1CUTtBQVYzRztBQVJvQixPQUE3Qjs7QUFzQkFwTCxXQUFLWSxPQUFMLENBQWFnQixLQUFiOztBQUVBO0FBQ0ExSCxjQUFRMkssSUFBUixDQUFhRCxNQUFiLEVBQXFCLFVBQVNFLEtBQVQsRUFBZ0JsWixLQUFoQixFQUF1QjtBQUMzQ21VLFVBQUdXLGFBQUgsQ0FBaUJvRSxLQUFqQixFQUF3QmxaLEtBQXhCLEVBQStCMFUsS0FBL0I7QUFDQSxPQUZELEVBRUdQLEVBRkg7O0FBSUE7QUFDQUEsU0FBR3lMLHlCQUFIO0FBQ0EsTUF0RHVEO0FBdUR4RDlLLG9CQUFlLHVCQUFTb0UsS0FBVCxFQUFnQmxaLEtBQWhCLEVBQXVCMFUsS0FBdkIsRUFBOEI7QUFDNUMsVUFBSVAsS0FBSyxJQUFUO0FBQ0EsVUFBSWMsU0FBU2lFLE1BQU1qRSxNQUFOLElBQWdCLEVBQTdCO0FBQ0EsVUFBSUQsVUFBVWIsR0FBR0ssVUFBSCxFQUFkO0FBQ0EsVUFBSXhiLFFBQVFtYixHQUFHWSxLQUFILENBQVMvYixLQUFyQjtBQUNBLFVBQUl5cUIsc0JBQXNCdFAsR0FBR1ksS0FBSCxDQUFTOUIsT0FBVCxDQUFpQnRFLFFBQWpCLENBQTBCdUssS0FBcEQ7QUFDQSxVQUFJd0ssZ0JBQWdCMXFCLE1BQU0ycUIsd0JBQU4sQ0FBK0IzakIsS0FBL0IsRUFBc0NnVixRQUFRcEQsSUFBUixDQUFhNVIsS0FBYixDQUF0QyxDQUFwQjs7QUFFQTtBQUNBLFVBQUtnVixRQUFRNkUsTUFBUixLQUFtQmhnQixTQUFwQixJQUFtQ21iLFFBQVFzTCxXQUFSLEtBQXdCem1CLFNBQS9ELEVBQTJFO0FBQzFFbWIsZUFBUXNMLFdBQVIsR0FBc0J0TCxRQUFRNkUsTUFBOUI7QUFDQTtBQUNELFVBQUs3RSxRQUFRMEUsU0FBUixLQUFzQjdmLFNBQXZCLElBQXNDbWIsUUFBUXVMLGNBQVIsS0FBMkIxbUIsU0FBckUsRUFBaUY7QUFDaEZtYixlQUFRdUwsY0FBUixHQUF5QnZMLFFBQVEwRSxTQUFqQztBQUNBOztBQUVEcEwsY0FBUXVCLE1BQVIsQ0FBZXFKLEtBQWYsRUFBc0I7QUFDckI7QUFDQTFELHNCQUFlckIsR0FBR25VLEtBRkc7QUFHckJ5VixlQUFRelYsS0FIYTtBQUlyQm1mLGVBQVFubUIsS0FKYTs7QUFNckI7QUFDQTBjLGVBQVE7QUFDUHJTLFdBQUdxUixRQUFRMWIsTUFBTWlxQixPQUFkLEdBQXdCUyxjQUFjcmdCLENBRGxDLEVBQ3FDO0FBQzVDTCxXQUFHMFIsUUFBUTFiLE1BQU1rcUIsT0FBZCxHQUF3QlEsY0FBYzFnQixDQUZsQzs7QUFJUDtBQUNBaWMsaUJBQVNoSyxPQUFPZ0ssT0FBUCxHQUFpQmhLLE9BQU9nSyxPQUF4QixHQUFrQzNRLFFBQVE4SixjQUFSLENBQXVCcEQsUUFBUWtLLFdBQS9CLEVBQTRDL0ssR0FBR1ksS0FBSCxDQUFTOUIsT0FBVCxDQUFpQnRFLFFBQWpCLENBQTBCbVEsSUFBMUIsQ0FBK0JHLE9BQTNFLENBTHBDO0FBTVBwRixnQkFBUTVFLE9BQU80RSxNQUFQLEdBQWdCNUUsT0FBTzRFLE1BQXZCLEdBQWdDdkwsUUFBUXNILHFCQUFSLENBQThCWixRQUFRc0wsV0FBdEMsRUFBbUR0Z0IsS0FBbkQsRUFBMER5akIsb0JBQW9CNUosTUFBOUUsQ0FOakM7QUFPUGxFLHlCQUFpQlYsT0FBT1UsZUFBUCxHQUF5QlYsT0FBT1UsZUFBaEMsR0FBa0RySCxRQUFRc0gscUJBQVIsQ0FBOEJaLFFBQVE4SyxvQkFBdEMsRUFBNEQ5ZixLQUE1RCxFQUFtRXlqQixvQkFBb0I5TixlQUF2RixDQVA1RDtBQVFQRSxxQkFBYVosT0FBT1ksV0FBUCxHQUFxQlosT0FBT1ksV0FBNUIsR0FBMEN2SCxRQUFRc0gscUJBQVIsQ0FBOEJaLFFBQVFnTCxnQkFBdEMsRUFBd0RoZ0IsS0FBeEQsRUFBK0R5akIsb0JBQW9CNU4sV0FBbkYsQ0FSaEQ7QUFTUEMscUJBQWFiLE9BQU9hLFdBQVAsR0FBcUJiLE9BQU9hLFdBQTVCLEdBQTBDeEgsUUFBUXNILHFCQUFSLENBQThCWixRQUFRa0wsZ0JBQXRDLEVBQXdEbGdCLEtBQXhELEVBQStEeWpCLG9CQUFvQjNOLFdBQW5GLENBVGhEO0FBVVA2RCxvQkFBWTFFLE9BQU8wRSxVQUFQLEdBQW9CMUUsT0FBTzBFLFVBQTNCLEdBQXdDckwsUUFBUXNILHFCQUFSLENBQThCWixRQUFRMkUsVUFBdEMsRUFBa0QzWixLQUFsRCxFQUF5RHlqQixvQkFBb0I5SixVQUE3RSxDQVY3QztBQVdQQyxrQkFBVTNFLE9BQU8yRSxRQUFQLEdBQWtCM0UsT0FBTzJFLFFBQXpCLEdBQW9DdEwsUUFBUXNILHFCQUFSLENBQThCWixRQUFRb0wsYUFBdEMsRUFBcURwZ0IsS0FBckQsRUFBNER5akIsb0JBQW9CN0osUUFBaEYsQ0FYdkM7O0FBYVA7QUFDQUYsbUJBQVd6RSxPQUFPeUUsU0FBUCxHQUFtQnpFLE9BQU95RSxTQUExQixHQUFzQ3BMLFFBQVFzSCxxQkFBUixDQUE4QlosUUFBUXVMLGNBQXRDLEVBQXNEdmdCLEtBQXRELEVBQTZEeWpCLG9CQUFvQi9KLFNBQWpGO0FBZDFDO0FBUGEsT0FBdEI7O0FBeUJBUixZQUFNeEQsTUFBTixDQUFhb0UsSUFBYixHQUFvQjdFLE9BQU82RSxJQUFQLEdBQWM3RSxPQUFPNkUsSUFBckIsR0FBNkJ4Z0IsTUFBTTRmLE1BQU14RCxNQUFOLENBQWFyUyxDQUFuQixLQUF5Qi9KLE1BQU00ZixNQUFNeEQsTUFBTixDQUFhMVMsQ0FBbkIsQ0FBMUU7QUFDQSxNQWpHdUQ7QUFrR3hENGMsZ0NBQTJCLHFDQUFXO0FBQ3JDLFVBQUlsSCxZQUFZLEtBQUszRCxLQUFMLENBQVcyRCxTQUEzQjtBQUNBLFVBQUl0RSxPQUFPLEtBQUtFLE9BQUwsRUFBWDs7QUFFQWhHLGNBQVEySyxJQUFSLENBQWE3RSxLQUFLeEMsSUFBbEIsRUFBd0IsVUFBU3NILEtBQVQsRUFBZ0JsWixLQUFoQixFQUF1QjtBQUM5QyxXQUFJaVcsUUFBUWlELE1BQU14RCxNQUFsQjtBQUNBLFdBQUlzTCxnQkFBZ0IxUyxRQUFRK1MsV0FBUixDQUNuQi9TLFFBQVFnVCxZQUFSLENBQXFCbE4sS0FBS3hDLElBQTFCLEVBQWdDNVIsS0FBaEMsRUFBdUMsSUFBdkMsRUFBNkMwVixNQUQxQixFQUVuQk8sS0FGbUIsRUFHbkIzSCxRQUFRaVQsUUFBUixDQUFpQm5OLEtBQUt4QyxJQUF0QixFQUE0QjVSLEtBQTVCLEVBQW1DLElBQW5DLEVBQXlDMFYsTUFIdEIsRUFJbkJPLE1BQU1nSixPQUphLENBQXBCOztBQU9BO0FBQ0FoSixhQUFNdUwscUJBQU4sR0FBOEIxb0IsS0FBS21CLEdBQUwsQ0FBU25CLEtBQUtrQixHQUFMLENBQVNnbkIsY0FBY1MsUUFBZCxDQUF1QnBlLENBQWhDLEVBQW1DcVYsVUFBVWtFLEtBQTdDLENBQVQsRUFBOERsRSxVQUFVaEIsSUFBeEUsQ0FBOUI7QUFDQXpCLGFBQU15TCxxQkFBTixHQUE4QjVvQixLQUFLbUIsR0FBTCxDQUFTbkIsS0FBS2tCLEdBQUwsQ0FBU2duQixjQUFjUyxRQUFkLENBQXVCemUsQ0FBaEMsRUFBbUMwVixVQUFVb0UsTUFBN0MsQ0FBVCxFQUErRHBFLFVBQVVmLEdBQXpFLENBQTlCOztBQUVBMUIsYUFBTTBMLGlCQUFOLEdBQTBCN29CLEtBQUttQixHQUFMLENBQVNuQixLQUFLa0IsR0FBTCxDQUFTZ25CLGNBQWNyTixJQUFkLENBQW1CdFEsQ0FBNUIsRUFBK0JxVixVQUFVa0UsS0FBekMsQ0FBVCxFQUEwRGxFLFVBQVVoQixJQUFwRSxDQUExQjtBQUNBekIsYUFBTTJMLGlCQUFOLEdBQTBCOW9CLEtBQUttQixHQUFMLENBQVNuQixLQUFLa0IsR0FBTCxDQUFTZ25CLGNBQWNyTixJQUFkLENBQW1CM1EsQ0FBNUIsRUFBK0IwVixVQUFVb0UsTUFBekMsQ0FBVCxFQUEyRHBFLFVBQVVmLEdBQXJFLENBQTFCOztBQUVBO0FBQ0F1QixhQUFNbEQsS0FBTjtBQUNBLE9BbEJEO0FBbUJBLE1Bekh1RDs7QUEySHhEK0Qsb0JBQWUsdUJBQVNiLEtBQVQsRUFBZ0I7QUFDOUI7QUFDQSxVQUFJbEUsVUFBVSxLQUFLRCxLQUFMLENBQVduRCxJQUFYLENBQWdCSyxRQUFoQixDQUF5QmlILE1BQU0xRCxhQUEvQixDQUFkO0FBQ0EsVUFBSVAsU0FBU2lFLE1BQU1qRSxNQUFOLElBQWdCLEVBQTdCO0FBQ0EsVUFBSWpWLFFBQVFrWixNQUFNekQsTUFBbEI7QUFDQSxVQUFJUSxRQUFRaUQsTUFBTXhELE1BQWxCOztBQUVBd0QsWUFBTWMsY0FBTixHQUF1QjtBQUN0QnJFLHdCQUFpQk0sTUFBTU4sZUFERDtBQUV0QkUsb0JBQWFJLE1BQU1KLFdBRkc7QUFHdEJDLG9CQUFhRyxNQUFNSCxXQUhHO0FBSXRCK0QsZUFBUTVELE1BQU00RDtBQUpRLE9BQXZCOztBQU9BNUQsWUFBTTRELE1BQU4sR0FBZTVFLE9BQU9vRixXQUFQLEdBQXFCcEYsT0FBT29GLFdBQTVCLEdBQTBDL0wsUUFBUXNILHFCQUFSLENBQThCWixRQUFRa04sZ0JBQXRDLEVBQXdEbGlCLEtBQXhELEVBQStELEtBQUsrVSxLQUFMLENBQVc5QixPQUFYLENBQW1CdEUsUUFBbkIsQ0FBNEJ1SyxLQUE1QixDQUFrQ21CLFdBQWpHLENBQXpEO0FBQ0FwRSxZQUFNTixlQUFOLEdBQXdCVixPQUFPZ0Ysb0JBQVAsR0FBOEJoRixPQUFPZ0Ysb0JBQXJDLEdBQTREM0wsUUFBUXNILHFCQUFSLENBQThCWixRQUFRK00seUJBQXRDLEVBQWlFL2hCLEtBQWpFLEVBQXdFc08sUUFBUTRMLGFBQVIsQ0FBc0JqRSxNQUFNTixlQUE1QixDQUF4RSxDQUFwRjtBQUNBTSxZQUFNSixXQUFOLEdBQW9CWixPQUFPa0YsZ0JBQVAsR0FBMEJsRixPQUFPa0YsZ0JBQWpDLEdBQW9EN0wsUUFBUXNILHFCQUFSLENBQThCWixRQUFRZ04scUJBQXRDLEVBQTZEaGlCLEtBQTdELEVBQW9Fc08sUUFBUTRMLGFBQVIsQ0FBc0JqRSxNQUFNSixXQUE1QixDQUFwRSxDQUF4RTtBQUNBSSxZQUFNSCxXQUFOLEdBQW9CYixPQUFPbUYsZ0JBQVAsR0FBMEJuRixPQUFPbUYsZ0JBQWpDLEdBQW9EOUwsUUFBUXNILHFCQUFSLENBQThCWixRQUFRaU4scUJBQXRDLEVBQTZEamlCLEtBQTdELEVBQW9FaVcsTUFBTUgsV0FBMUUsQ0FBeEU7QUFDQTtBQTdJdUQsS0FBL0IsQ0FBMUI7QUErSUEsSUFqSkQ7QUFtSkMsR0FySytCLEVBcUs5QixFQUFDLE1BQUssRUFBTixFQUFTLE1BQUssRUFBZCxFQUFpQixNQUFLLEVBQXRCLEVBcks4QixDQTMyR3l4QixFQWdoSDV4QixJQUFHLENBQUMsVUFBU2xmLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRTs7QUFFQSxPQUFJNFksV0FBVzdYLFFBQVEsRUFBUixDQUFmOztBQUVBNlgsWUFBU2lDLElBQVQsQ0FBYyxTQUFkLEVBQXlCO0FBQ3hCQyxXQUFPO0FBQ05DLFdBQU07QUFEQSxLQURpQjs7QUFLeEJDLFlBQVE7QUFDUEMsWUFBTyxDQUFDO0FBQ1BtSCxVQUFJLFVBREcsRUFDWTtBQUNuQmhaLFlBQU0sUUFGQyxFQUVZO0FBQ25CcVMsZ0JBQVU7QUFISCxNQUFELENBREE7QUFNUEYsWUFBTyxDQUFDO0FBQ1A2RyxVQUFJLFVBREc7QUFFUGhaLFlBQU0sUUFGQztBQUdQcVMsZ0JBQVU7QUFISCxNQUFEO0FBTkEsS0FMZ0I7O0FBa0J4Qm9OLGVBQVcsS0FsQmE7O0FBb0J4QmpOLGNBQVU7QUFDVEMsZ0JBQVc7QUFDVmhDLGFBQU8saUJBQVc7QUFDakIsY0FBTyxFQUFQLENBRGlCLENBQ0Y7QUFDZixPQUhTO0FBSVZxQyxhQUFPLGVBQVNKLElBQVQsRUFBZTtBQUNyQixjQUFPLE1BQU1BLEtBQUtRLE1BQVgsR0FBb0IsSUFBcEIsR0FBMkJSLEtBQUtFLE1BQWhDLEdBQXlDLEdBQWhEO0FBQ0E7QUFOUztBQURGO0FBcEJjLElBQXpCOztBQWdDQS9iLFVBQU9ELE9BQVAsR0FBaUIsVUFBU08sS0FBVCxFQUFnQjs7QUFFaEM7QUFDQUEsVUFBTTBkLFdBQU4sQ0FBa0I4UCxPQUFsQixHQUE0Qnh0QixNQUFNMGQsV0FBTixDQUFrQmdMLElBQTlDO0FBRUEsSUFMRDtBQU9DLEdBNUMrQixFQTRDOUIsRUFBQyxNQUFLLEVBQU4sRUE1QzhCLENBaGhIeXhCLEVBNGpINXlCLElBQUcsQ0FBQyxVQUFTbG9CLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRDs7QUFFQSxPQUFJNlksVUFBVTlYLFFBQVEsRUFBUixDQUFkOztBQUVBLE9BQUlmLFVBQVVDLE9BQU9ELE9BQVAsR0FBaUI2WSxRQUFRbUIsTUFBUixDQUFlO0FBQzdDa0YsV0FBTyxJQURzQyxFQUNoQztBQUNiOE8saUJBQWEsQ0FGZ0MsRUFFN0I7QUFDaEJDLGNBQVUsRUFIbUMsRUFHL0I7QUFDZEMsWUFBUSxFQUpxQyxFQUlqQztBQUNaQyxZQUFRLElBTHFDLEVBSy9COztBQUVkQyx5QkFBcUIsSUFQd0IsRUFPbEI7QUFDM0JDLHlCQUFxQixJQVJ3QixDQVFsQjtBQVJrQixJQUFmLENBQS9COztBQVdBOztBQUVBOzs7Ozs7QUFNQUMsVUFBT0MsY0FBUCxDQUFzQnZ1QixRQUFRdUYsU0FBOUIsRUFBeUMsaUJBQXpDLEVBQTREO0FBQzNEaXBCLFNBQUssZUFBVztBQUNmLFlBQU8sSUFBUDtBQUNBO0FBSDBELElBQTVEOztBQU1BOzs7Ozs7QUFNQUYsVUFBT0MsY0FBUCxDQUFzQnZ1QixRQUFRdUYsU0FBOUIsRUFBeUMsZUFBekMsRUFBMEQ7QUFDekRpcEIsU0FBSyxlQUFXO0FBQ2YsWUFBTyxLQUFLdFAsS0FBWjtBQUNBLEtBSHdEO0FBSXpEdVAsU0FBSyxhQUFTcnBCLEtBQVQsRUFBZ0I7QUFDcEIsVUFBSzhaLEtBQUwsR0FBYTlaLEtBQWI7QUFDQTtBQU53RCxJQUExRDtBQVNDLEdBN0NlLEVBNkNkLEVBQUMsTUFBSyxFQUFOLEVBN0NjLENBNWpIeXlCLEVBeW1INXlCLElBQUcsQ0FBQyxVQUFTckUsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ2pEO0FBQ0E7O0FBRUEsT0FBSTRZLFdBQVc3WCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUkwWCxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7O0FBRUE2WCxZQUFTaUMsSUFBVCxDQUFjLFFBQWQsRUFBd0I7QUFDdkIrSixlQUFXO0FBQ1Y4SixlQUFVLElBREE7QUFFVlIsYUFBUSxjQUZFO0FBR1ZTLGlCQUFZbFcsUUFBUWdPLElBSFY7QUFJVm1JLGlCQUFZblcsUUFBUWdPO0FBSlY7QUFEWSxJQUF4Qjs7QUFTQXhtQixVQUFPRCxPQUFQLEdBQWlCO0FBQ2hCNnVCLG1CQUFlLEVBREM7QUFFaEJDLGdCQUFZLEVBRkk7QUFHaEJDLGdCQUFZLENBSEk7QUFJaEJDLGFBQVMsSUFKTzs7QUFNaEI7Ozs7OztBQU1BQyxrQkFBYyxzQkFBUy9QLEtBQVQsRUFBZ0IwRixTQUFoQixFQUEyQjhKLFFBQTNCLEVBQXFDUSxJQUFyQyxFQUEyQztBQUN4RCxTQUFJSixhQUFhLEtBQUtBLFVBQXRCO0FBQ0EsU0FBSWp1QixDQUFKLEVBQU9tYyxJQUFQOztBQUVBNEgsZUFBVTFGLEtBQVYsR0FBa0JBLEtBQWxCOztBQUVBLFNBQUksQ0FBQ2dRLElBQUwsRUFBVztBQUNWaFEsWUFBTWlRLFNBQU4sR0FBa0IsSUFBbEI7QUFDQTs7QUFFRCxVQUFLdHVCLElBQUksQ0FBSixFQUFPbWMsT0FBTzhSLFdBQVd4dEIsTUFBOUIsRUFBc0NULElBQUltYyxJQUExQyxFQUFnRCxFQUFFbmMsQ0FBbEQsRUFBcUQ7QUFDcEQsVUFBSWl1QixXQUFXanVCLENBQVgsRUFBY3FlLEtBQWQsS0FBd0JBLEtBQTVCLEVBQW1DO0FBQ2xDNFAsa0JBQVdqdUIsQ0FBWCxJQUFnQitqQixTQUFoQjtBQUNBO0FBQ0E7QUFDRDs7QUFFRGtLLGdCQUFXcE4sSUFBWCxDQUFnQmtELFNBQWhCOztBQUVBO0FBQ0EsU0FBSWtLLFdBQVd4dEIsTUFBWCxLQUFzQixDQUExQixFQUE2QjtBQUM1QixXQUFLOHRCLHFCQUFMO0FBQ0E7QUFDRCxLQW5DZTs7QUFxQ2hCQyxxQkFBaUIseUJBQVNuUSxLQUFULEVBQWdCO0FBQ2hDLFNBQUkvVSxRQUFRc08sUUFBUTZXLFNBQVIsQ0FBa0IsS0FBS1IsVUFBdkIsRUFBbUMsVUFBU2xLLFNBQVQsRUFBb0I7QUFDbEUsYUFBT0EsVUFBVTFGLEtBQVYsS0FBb0JBLEtBQTNCO0FBQ0EsTUFGVyxDQUFaOztBQUlBLFNBQUkvVSxVQUFVLENBQUMsQ0FBZixFQUFrQjtBQUNqQixXQUFLMmtCLFVBQUwsQ0FBZ0JTLE1BQWhCLENBQXVCcGxCLEtBQXZCLEVBQThCLENBQTlCO0FBQ0ErVSxZQUFNaVEsU0FBTixHQUFrQixLQUFsQjtBQUNBO0FBQ0QsS0E5Q2U7O0FBZ0RoQkMsMkJBQXVCLGlDQUFXO0FBQ2pDLFNBQUk5USxLQUFLLElBQVQ7QUFDQSxTQUFJQSxHQUFHMFEsT0FBSCxLQUFlLElBQW5CLEVBQXlCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBMVEsU0FBRzBRLE9BQUgsR0FBYXZXLFFBQVErVyxnQkFBUixDQUF5Qm51QixJQUF6QixDQUE4QmpCLE1BQTlCLEVBQXNDLFlBQVc7QUFDN0RrZSxVQUFHMFEsT0FBSCxHQUFhLElBQWI7QUFDQTFRLFVBQUdtUixXQUFIO0FBQ0EsT0FIWSxDQUFiO0FBSUE7QUFDRCxLQTNEZTs7QUE2RGhCOzs7QUFHQUEsaUJBQWEsdUJBQVc7QUFDdkIsU0FBSW5SLEtBQUssSUFBVDtBQUNBLFNBQUlvUixZQUFZQyxLQUFLQyxHQUFMLEVBQWhCO0FBQ0EsU0FBSUMsZUFBZSxDQUFuQjs7QUFFQSxTQUFJdlIsR0FBR3lRLFVBQUgsR0FBZ0IsQ0FBcEIsRUFBdUI7QUFDdEJjLHFCQUFlNXNCLEtBQUsrSyxLQUFMLENBQVdzUSxHQUFHeVEsVUFBZCxDQUFmO0FBQ0F6USxTQUFHeVEsVUFBSCxHQUFnQnpRLEdBQUd5USxVQUFILEdBQWdCLENBQWhDO0FBQ0E7O0FBRUR6USxRQUFHd1IsT0FBSCxDQUFXLElBQUlELFlBQWY7O0FBRUEsU0FBSUUsVUFBVUosS0FBS0MsR0FBTCxFQUFkOztBQUVBdFIsUUFBR3lRLFVBQUgsSUFBaUIsQ0FBQ2dCLFVBQVVMLFNBQVgsSUFBd0JwUixHQUFHdVEsYUFBNUM7O0FBRUE7QUFDQSxTQUFJdlEsR0FBR3dRLFVBQUgsQ0FBY3h0QixNQUFkLEdBQXVCLENBQTNCLEVBQThCO0FBQzdCZ2QsU0FBRzhRLHFCQUFIO0FBQ0E7QUFDRCxLQXBGZTs7QUFzRmhCOzs7QUFHQVUsYUFBUyxpQkFBU3ZTLEtBQVQsRUFBZ0I7QUFDeEIsU0FBSXVSLGFBQWEsS0FBS0EsVUFBdEI7QUFDQSxTQUFJbEssU0FBSixFQUFlMUYsS0FBZjtBQUNBLFNBQUlyZSxJQUFJLENBQVI7O0FBRUEsWUFBT0EsSUFBSWl1QixXQUFXeHRCLE1BQXRCLEVBQThCO0FBQzdCc2pCLGtCQUFZa0ssV0FBV2p1QixDQUFYLENBQVo7QUFDQXFlLGNBQVEwRixVQUFVMUYsS0FBbEI7O0FBRUEwRixnQkFBVW9KLFdBQVYsR0FBd0IsQ0FBQ3BKLFVBQVVvSixXQUFWLElBQXlCLENBQTFCLElBQStCelEsS0FBdkQ7QUFDQXFILGdCQUFVb0osV0FBVixHQUF3Qi9xQixLQUFLa0IsR0FBTCxDQUFTeWdCLFVBQVVvSixXQUFuQixFQUFnQ3BKLFVBQVVxSixRQUExQyxDQUF4Qjs7QUFFQXhWLGNBQVF1WCxRQUFSLENBQWlCcEwsVUFBVXVKLE1BQTNCLEVBQW1DLENBQUNqUCxLQUFELEVBQVEwRixTQUFSLENBQW5DLEVBQXVEMUYsS0FBdkQ7QUFDQXpHLGNBQVF1WCxRQUFSLENBQWlCcEwsVUFBVXdKLG1CQUEzQixFQUFnRCxDQUFDeEosU0FBRCxDQUFoRCxFQUE2RDFGLEtBQTdEOztBQUVBLFVBQUkwRixVQUFVb0osV0FBVixJQUF5QnBKLFVBQVVxSixRQUF2QyxFQUFpRDtBQUNoRHhWLGVBQVF1WCxRQUFSLENBQWlCcEwsVUFBVXlKLG1CQUEzQixFQUFnRCxDQUFDekosU0FBRCxDQUFoRCxFQUE2RDFGLEtBQTdEO0FBQ0FBLGFBQU1pUSxTQUFOLEdBQWtCLEtBQWxCO0FBQ0FMLGtCQUFXUyxNQUFYLENBQWtCMXVCLENBQWxCLEVBQXFCLENBQXJCO0FBQ0EsT0FKRCxNQUlPO0FBQ04sU0FBRUEsQ0FBRjtBQUNBO0FBQ0Q7QUFDRDtBQWhIZSxJQUFqQjtBQW1IQyxHQW5JZSxFQW1JZCxFQUFDLE1BQUssRUFBTixFQUFTLE1BQUssRUFBZCxFQW5JYyxDQXptSHl5QixFQTR1SHB5QixJQUFHLENBQUMsVUFBU0UsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ3pEOztBQUVBLE9BQUkwWSxZQUFZM1gsUUFBUSxFQUFSLENBQWhCO0FBQ0EsT0FBSSt0QixhQUFhL3RCLFFBQVEsRUFBUixDQUFqQjtBQUNBLE9BQUk2WCxXQUFXN1gsUUFBUSxFQUFSLENBQWY7QUFDQSxPQUFJMFgsVUFBVTFYLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSWdZLGNBQWNoWSxRQUFRLEVBQVIsQ0FBbEI7QUFDQSxPQUFJaVksVUFBVWpZLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSWtZLFdBQVdsWSxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUltWSxVQUFVblksUUFBUSxFQUFSLENBQWQ7QUFDQSxPQUFJcVksZUFBZXJZLFFBQVEsRUFBUixDQUFuQjtBQUNBLE9BQUl1WSxVQUFVdlksUUFBUSxFQUFSLENBQWQ7O0FBRUFkLFVBQU9ELE9BQVAsR0FBaUIsVUFBU08sS0FBVCxFQUFnQjs7QUFFaEM7QUFDQUEsVUFBTTB2QixLQUFOLEdBQWMsRUFBZDs7QUFFQTtBQUNBO0FBQ0ExdkIsVUFBTTJ2QixTQUFOLEdBQWtCLEVBQWxCOztBQUVBO0FBQ0EzdkIsVUFBTTBkLFdBQU4sR0FBb0IsRUFBcEI7O0FBRUE7OztBQUdBLGFBQVNrUyxVQUFULENBQW9CN1YsTUFBcEIsRUFBNEI7QUFDM0JBLGNBQVNBLFVBQVUsRUFBbkI7O0FBRUE7QUFDQTtBQUNBLFNBQUl5QixPQUFPekIsT0FBT3lCLElBQVAsR0FBY3pCLE9BQU95QixJQUFQLElBQWUsRUFBeEM7QUFDQUEsVUFBS0ssUUFBTCxHQUFnQkwsS0FBS0ssUUFBTCxJQUFpQixFQUFqQztBQUNBTCxVQUFLRSxNQUFMLEdBQWNGLEtBQUtFLE1BQUwsSUFBZSxFQUE3Qjs7QUFFQTNCLFlBQU84QyxPQUFQLEdBQWlCM0UsUUFBUTJYLFdBQVIsQ0FDaEJ4WCxTQUFTdlksTUFETyxFQUVoQnVZLFNBQVMwQixPQUFPbFIsSUFBaEIsQ0FGZ0IsRUFHaEJrUixPQUFPOEMsT0FBUCxJQUFrQixFQUhGLENBQWpCOztBQUtBLFlBQU85QyxNQUFQO0FBQ0E7O0FBRUQ7Ozs7QUFJQSxhQUFTK1YsWUFBVCxDQUFzQm5SLEtBQXRCLEVBQTZCO0FBQzVCLFNBQUlvUixhQUFhcFIsTUFBTTlCLE9BQXZCOztBQUVBM0UsYUFBUTJLLElBQVIsQ0FBYWxFLE1BQU1sRSxNQUFuQixFQUEyQixVQUFTN1gsS0FBVCxFQUFnQjtBQUMxQzZWLGNBQVF1WCxTQUFSLENBQWtCclIsS0FBbEIsRUFBeUIvYixLQUF6QjtBQUNBLE1BRkQ7O0FBSUFtdEIsa0JBQWE3WCxRQUFRMlgsV0FBUixDQUNaN3ZCLE1BQU1xWSxRQUFOLENBQWV2WSxNQURILEVBRVpFLE1BQU1xWSxRQUFOLENBQWVzRyxNQUFNNUUsTUFBTixDQUFhbFIsSUFBNUIsQ0FGWSxFQUdaa25CLFVBSFksQ0FBYjs7QUFLQXBSLFdBQU05QixPQUFOLEdBQWdCOEIsTUFBTTVFLE1BQU4sQ0FBYThDLE9BQWIsR0FBdUJrVCxVQUF2QztBQUNBcFIsV0FBTXNSLG1CQUFOO0FBQ0F0UixXQUFNdVIsbUJBQU47QUFDQTtBQUNBdlIsV0FBTXdSLE9BQU4sQ0FBYzlNLFFBQWQsR0FBeUIwTSxXQUFXMVUsUUFBcEM7QUFDQXNELFdBQU13UixPQUFOLENBQWNsWCxVQUFkO0FBQ0E7O0FBRUQsYUFBU21YLG9CQUFULENBQThCbFYsUUFBOUIsRUFBd0M7QUFDdkMsWUFBT0EsYUFBYSxLQUFiLElBQXNCQSxhQUFhLFFBQTFDO0FBQ0E7O0FBRURoRCxZQUFRdUIsTUFBUixDQUFlelosTUFBTWdGLFNBQXJCLEVBQWdDLG1CQUFvQjtBQUNuRDs7O0FBR0FxckIsZ0JBQVcsbUJBQVM5VSxJQUFULEVBQWV4QixNQUFmLEVBQXVCO0FBQ2pDLFVBQUlnRSxLQUFLLElBQVQ7O0FBRUFoRSxlQUFTNlYsV0FBVzdWLE1BQVgsQ0FBVDs7QUFFQSxVQUFJRCxVQUFVcEIsU0FBUzRYLGNBQVQsQ0FBd0IvVSxJQUF4QixFQUE4QnhCLE1BQTlCLENBQWQ7QUFDQSxVQUFJSixTQUFTRyxXQUFXQSxRQUFRSCxNQUFoQztBQUNBLFVBQUl5QyxTQUFTekMsVUFBVUEsT0FBT3lDLE1BQTlCO0FBQ0EsVUFBSUQsUUFBUXhDLFVBQVVBLE9BQU93QyxLQUE3Qjs7QUFFQTRCLFNBQUc4RCxFQUFILEdBQVEzSixRQUFRcVksR0FBUixFQUFSO0FBQ0F4UyxTQUFHc0UsR0FBSCxHQUFTdkksT0FBVDtBQUNBaUUsU0FBR3BFLE1BQUgsR0FBWUEsTUFBWjtBQUNBb0UsU0FBR2hFLE1BQUgsR0FBWUEsTUFBWjtBQUNBZ0UsU0FBRzVCLEtBQUgsR0FBV0EsS0FBWDtBQUNBNEIsU0FBRzNCLE1BQUgsR0FBWUEsTUFBWjtBQUNBMkIsU0FBR3lTLFdBQUgsR0FBaUJwVSxTQUFTRCxRQUFRQyxNQUFqQixHQUEwQixJQUEzQztBQUNBMkIsU0FBR2xCLE9BQUgsR0FBYTlDLE9BQU84QyxPQUFwQjtBQUNBa0IsU0FBRzBTLGVBQUgsR0FBcUIsS0FBckI7O0FBRUE7Ozs7Ozs7O0FBUUExUyxTQUFHWSxLQUFILEdBQVdaLEVBQVg7QUFDQUEsU0FBRzZELFVBQUgsR0FBZ0I3RCxFQUFoQixDQTdCaUMsQ0E2QmI7O0FBRXBCO0FBQ0EvZCxZQUFNMnZCLFNBQU4sQ0FBZ0I1UixHQUFHOEQsRUFBbkIsSUFBeUI5RCxFQUF6Qjs7QUFFQTtBQUNBZ1EsYUFBT0MsY0FBUCxDQUFzQmpRLEVBQXRCLEVBQTBCLE1BQTFCLEVBQWtDO0FBQ2pDa1EsWUFBSyxlQUFXO0FBQ2YsZUFBT2xRLEdBQUdoRSxNQUFILENBQVV5QixJQUFqQjtBQUNBLFFBSGdDO0FBSWpDMFMsWUFBSyxhQUFTcnBCLEtBQVQsRUFBZ0I7QUFDcEJrWixXQUFHaEUsTUFBSCxDQUFVeUIsSUFBVixHQUFpQjNXLEtBQWpCO0FBQ0E7QUFOZ0MsT0FBbEM7O0FBU0EsVUFBSSxDQUFDaVYsT0FBRCxJQUFZLENBQUNILE1BQWpCLEVBQXlCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EzUSxlQUFRQyxLQUFSLENBQWMsbUVBQWQ7QUFDQTtBQUNBOztBQUVEOFUsU0FBRzlFLFVBQUg7QUFDQThFLFNBQUdNLE1BQUg7QUFDQSxNQTNEa0Q7O0FBNkRuRDs7O0FBR0FwRixpQkFBWSxzQkFBVztBQUN0QixVQUFJOEUsS0FBSyxJQUFUOztBQUVBO0FBQ0FwRixjQUFRK1gsTUFBUixDQUFlM1MsRUFBZixFQUFtQixZQUFuQjs7QUFFQTdGLGNBQVF5WSxXQUFSLENBQW9CNVMsRUFBcEIsRUFBd0JBLEdBQUdsQixPQUFILENBQVcrVCxnQkFBbkM7O0FBRUE3UyxTQUFHOFMsVUFBSDs7QUFFQSxVQUFJOVMsR0FBR2xCLE9BQUgsQ0FBV2lVLFVBQWYsRUFBMkI7QUFDMUI7QUFDQS9TLFVBQUdnVCxNQUFILENBQVUsSUFBVjtBQUNBOztBQUVEO0FBQ0FoVCxTQUFHa1MsbUJBQUg7QUFDQWxTLFNBQUdtUyxtQkFBSDtBQUNBblMsU0FBR2lULFdBQUg7O0FBRUE7QUFDQXJZLGNBQVErWCxNQUFSLENBQWUzUyxFQUFmLEVBQW1CLFdBQW5COztBQUVBLGFBQU9BLEVBQVA7QUFDQSxNQXhGa0Q7O0FBMEZuRGtULFlBQU8saUJBQVc7QUFDakIvWSxjQUFReUIsTUFBUixDQUFlc1gsS0FBZixDQUFxQixJQUFyQjtBQUNBLGFBQU8sSUFBUDtBQUNBLE1BN0ZrRDs7QUErRm5EQyxXQUFNLGdCQUFXO0FBQ2hCO0FBQ0EzQyxpQkFBV08sZUFBWCxDQUEyQixJQUEzQjtBQUNBLGFBQU8sSUFBUDtBQUNBLE1BbkdrRDs7QUFxR25EaUMsYUFBUSxnQkFBU0ksTUFBVCxFQUFpQjtBQUN4QixVQUFJcFQsS0FBSyxJQUFUO0FBQ0EsVUFBSWxCLFVBQVVrQixHQUFHbEIsT0FBakI7QUFDQSxVQUFJbEQsU0FBU29FLEdBQUdwRSxNQUFoQjtBQUNBLFVBQUk2VyxjQUFlM1QsUUFBUXVVLG1CQUFSLElBQStCclQsR0FBR3lTLFdBQW5DLElBQW1ELElBQXJFOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxVQUFJYSxXQUFXM3VCLEtBQUttQixHQUFMLENBQVMsQ0FBVCxFQUFZbkIsS0FBSytLLEtBQUwsQ0FBV3lLLFFBQVFvWixlQUFSLENBQXdCM1gsTUFBeEIsQ0FBWCxDQUFaLENBQWY7QUFDQSxVQUFJNFgsWUFBWTd1QixLQUFLbUIsR0FBTCxDQUFTLENBQVQsRUFBWW5CLEtBQUsrSyxLQUFMLENBQVcraUIsY0FBY2EsV0FBV2IsV0FBekIsR0FBdUN0WSxRQUFRc1osZ0JBQVIsQ0FBeUI3WCxNQUF6QixDQUFsRCxDQUFaLENBQWhCOztBQUVBLFVBQUlvRSxHQUFHNUIsS0FBSCxLQUFha1YsUUFBYixJQUF5QnRULEdBQUczQixNQUFILEtBQWNtVixTQUEzQyxFQUFzRDtBQUNyRDtBQUNBOztBQUVENVgsYUFBT3dDLEtBQVAsR0FBZTRCLEdBQUc1QixLQUFILEdBQVdrVixRQUExQjtBQUNBMVgsYUFBT3lDLE1BQVAsR0FBZ0IyQixHQUFHM0IsTUFBSCxHQUFZbVYsU0FBNUI7QUFDQTVYLGFBQU84WCxLQUFQLENBQWF0VixLQUFiLEdBQXFCa1YsV0FBVyxJQUFoQztBQUNBMVgsYUFBTzhYLEtBQVAsQ0FBYXJWLE1BQWIsR0FBc0JtVixZQUFZLElBQWxDOztBQUVBclosY0FBUXlZLFdBQVIsQ0FBb0I1UyxFQUFwQixFQUF3QmxCLFFBQVErVCxnQkFBaEM7O0FBRUEsVUFBSSxDQUFDTyxNQUFMLEVBQWE7QUFDWjtBQUNBLFdBQUlPLFVBQVUsRUFBQ3ZWLE9BQU9rVixRQUFSLEVBQWtCalYsUUFBUW1WLFNBQTFCLEVBQWQ7QUFDQTVZLGVBQVErWCxNQUFSLENBQWUzUyxFQUFmLEVBQW1CLFFBQW5CLEVBQTZCLENBQUMyVCxPQUFELENBQTdCOztBQUVBO0FBQ0EsV0FBSTNULEdBQUdsQixPQUFILENBQVc4VSxRQUFmLEVBQXlCO0FBQ3hCNVQsV0FBR2xCLE9BQUgsQ0FBVzhVLFFBQVgsQ0FBb0I1VCxFQUFwQixFQUF3QjJULE9BQXhCO0FBQ0E7O0FBRUQzVCxVQUFHbVQsSUFBSDtBQUNBblQsVUFBR00sTUFBSCxDQUFVO0FBQ1Q4UCxrQkFBVXBRLEdBQUdsQixPQUFILENBQVcrVTtBQURaLFFBQVY7QUFHQTtBQUNELE1BNUlrRDs7QUE4SW5EM0IsMEJBQXFCLCtCQUFXO0FBQy9CLFVBQUlwVCxVQUFVLEtBQUtBLE9BQW5CO0FBQ0EsVUFBSWdWLGdCQUFnQmhWLFFBQVFwQyxNQUFSLElBQWtCLEVBQXRDO0FBQ0EsVUFBSXFYLGVBQWVqVixRQUFRamEsS0FBM0I7O0FBRUFzVixjQUFRMkssSUFBUixDQUFhZ1AsY0FBY25YLEtBQTNCLEVBQWtDLFVBQVNxWCxZQUFULEVBQXVCbm9CLEtBQXZCLEVBQThCO0FBQy9EbW9CLG9CQUFhbFEsRUFBYixHQUFrQmtRLGFBQWFsUSxFQUFiLElBQW9CLFlBQVlqWSxLQUFsRDtBQUNBLE9BRkQ7O0FBSUFzTyxjQUFRMkssSUFBUixDQUFhZ1AsY0FBYzdXLEtBQTNCLEVBQWtDLFVBQVNnWCxZQUFULEVBQXVCcG9CLEtBQXZCLEVBQThCO0FBQy9Eb29CLG9CQUFhblEsRUFBYixHQUFrQm1RLGFBQWFuUSxFQUFiLElBQW9CLFlBQVlqWSxLQUFsRDtBQUNBLE9BRkQ7O0FBSUEsVUFBSWtvQixZQUFKLEVBQWtCO0FBQ2pCQSxvQkFBYWpRLEVBQWIsR0FBa0JpUSxhQUFhalEsRUFBYixJQUFtQixPQUFyQztBQUNBO0FBQ0QsTUE5SmtEOztBQWdLbkQ7OztBQUdBcU8sMEJBQXFCLCtCQUFXO0FBQy9CLFVBQUluUyxLQUFLLElBQVQ7QUFDQSxVQUFJbEIsVUFBVWtCLEdBQUdsQixPQUFqQjtBQUNBLFVBQUlwQyxTQUFTc0QsR0FBR3RELE1BQUgsSUFBYSxFQUExQjtBQUNBLFVBQUl3WCxRQUFRLEVBQVo7QUFDQSxVQUFJQyxVQUFVbkUsT0FBTzNKLElBQVAsQ0FBWTNKLE1BQVosRUFBb0IwWCxNQUFwQixDQUEyQixVQUFTL3RCLEdBQVQsRUFBY3lkLEVBQWQsRUFBa0I7QUFDMUR6ZCxXQUFJeWQsRUFBSixJQUFVLEtBQVY7QUFDQSxjQUFPemQsR0FBUDtBQUNBLE9BSGEsRUFHWCxFQUhXLENBQWQ7O0FBS0EsVUFBSXlZLFFBQVFwQyxNQUFaLEVBQW9CO0FBQ25Cd1gsZUFBUUEsTUFBTXpzQixNQUFOLENBQ1AsQ0FBQ3FYLFFBQVFwQyxNQUFSLENBQWVDLEtBQWYsSUFBd0IsRUFBekIsRUFBNkJrSyxHQUE3QixDQUFpQyxVQUFTbU4sWUFBVCxFQUF1QjtBQUN2RCxlQUFPLEVBQUNsVixTQUFTa1YsWUFBVixFQUF3QkssT0FBTyxVQUEvQixFQUEyQ0MsV0FBVyxRQUF0RCxFQUFQO0FBQ0EsUUFGRCxDQURPLEVBSVAsQ0FBQ3hWLFFBQVFwQyxNQUFSLENBQWVPLEtBQWYsSUFBd0IsRUFBekIsRUFBNkI0SixHQUE3QixDQUFpQyxVQUFTb04sWUFBVCxFQUF1QjtBQUN2RCxlQUFPLEVBQUNuVixTQUFTbVYsWUFBVixFQUF3QkksT0FBTyxRQUEvQixFQUF5Q0MsV0FBVyxNQUFwRCxFQUFQO0FBQ0EsUUFGRCxDQUpPLENBQVI7QUFRQTs7QUFFRCxVQUFJeFYsUUFBUWphLEtBQVosRUFBbUI7QUFDbEJxdkIsYUFBTTlRLElBQU4sQ0FBVztBQUNWdEUsaUJBQVNBLFFBQVFqYSxLQURQO0FBRVZ3dkIsZUFBTyxjQUZHO0FBR1ZFLG1CQUFXLElBSEQ7QUFJVkQsbUJBQVc7QUFKRCxRQUFYO0FBTUE7O0FBRURuYSxjQUFRMkssSUFBUixDQUFhb1AsS0FBYixFQUFvQixVQUFTMVcsSUFBVCxFQUFlO0FBQ2xDLFdBQUl1VyxlQUFldlcsS0FBS3NCLE9BQXhCO0FBQ0EsV0FBSWdGLEtBQUtpUSxhQUFhalEsRUFBdEI7QUFDQSxXQUFJMFEsWUFBWXJhLFFBQVE4SixjQUFSLENBQXVCOFAsYUFBYWpwQixJQUFwQyxFQUEwQzBTLEtBQUs2VyxLQUEvQyxDQUFoQjs7QUFFQSxXQUFJaEMscUJBQXFCMEIsYUFBYTVXLFFBQWxDLE1BQWdEa1YscUJBQXFCN1UsS0FBSzhXLFNBQTFCLENBQXBELEVBQTBGO0FBQ3pGUCxxQkFBYTVXLFFBQWIsR0FBd0JLLEtBQUs4VyxTQUE3QjtBQUNBOztBQUVESCxlQUFRclEsRUFBUixJQUFjLElBQWQ7QUFDQSxXQUFJamYsUUFBUSxJQUFaO0FBQ0EsV0FBSWlmLE1BQU1wSCxNQUFOLElBQWdCQSxPQUFPb0gsRUFBUCxFQUFXaFosSUFBWCxLQUFvQjBwQixTQUF4QyxFQUFtRDtBQUNsRDN2QixnQkFBUTZYLE9BQU9vSCxFQUFQLENBQVI7QUFDQWpmLGNBQU1pYSxPQUFOLEdBQWdCaVYsWUFBaEI7QUFDQWx2QixjQUFNeWYsR0FBTixHQUFZdEUsR0FBR3NFLEdBQWY7QUFDQXpmLGNBQU0rYixLQUFOLEdBQWNaLEVBQWQ7QUFDQSxRQUxELE1BS087QUFDTixZQUFJeVUsYUFBYTNaLGFBQWE0WixtQkFBYixDQUFpQ0YsU0FBakMsQ0FBakI7QUFDQSxZQUFJLENBQUNDLFVBQUwsRUFBaUI7QUFDaEI7QUFDQTtBQUNENXZCLGdCQUFRLElBQUk0dkIsVUFBSixDQUFlO0FBQ3RCM1EsYUFBSUEsRUFEa0I7QUFFdEJoWixlQUFNMHBCLFNBRmdCO0FBR3RCMVYsa0JBQVNpVixZQUhhO0FBSXRCelAsY0FBS3RFLEdBQUdzRSxHQUpjO0FBS3RCMUQsZ0JBQU9aO0FBTGUsU0FBZixDQUFSO0FBT0F0RCxlQUFPN1gsTUFBTWlmLEVBQWIsSUFBbUJqZixLQUFuQjtBQUNBOztBQUVEQSxhQUFNOHZCLGlCQUFOOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQUluWCxLQUFLK1csU0FBVCxFQUFvQjtBQUNuQnZVLFdBQUduYixLQUFILEdBQVdBLEtBQVg7QUFDQTtBQUNELE9BdkNEO0FBd0NBO0FBQ0FzVixjQUFRMkssSUFBUixDQUFhcVAsT0FBYixFQUFzQixVQUFTUyxVQUFULEVBQXFCOVEsRUFBckIsRUFBeUI7QUFDOUMsV0FBSSxDQUFDOFEsVUFBTCxFQUFpQjtBQUNoQixlQUFPbFksT0FBT29ILEVBQVAsQ0FBUDtBQUNBO0FBQ0QsT0FKRDs7QUFNQTlELFNBQUd0RCxNQUFILEdBQVlBLE1BQVo7O0FBRUE1QixtQkFBYStaLGlCQUFiLENBQStCLElBQS9CO0FBQ0EsTUFuUGtEOztBQXFQbkRDLCtCQUEwQixvQ0FBVztBQUNwQyxVQUFJOVUsS0FBSyxJQUFUO0FBQ0EsVUFBSTJSLFFBQVEsRUFBWjtBQUNBLFVBQUlvRCxpQkFBaUIsRUFBckI7O0FBRUE1YSxjQUFRMkssSUFBUixDQUFhOUUsR0FBR3ZDLElBQUgsQ0FBUUssUUFBckIsRUFBK0IsVUFBUytDLE9BQVQsRUFBa0I5QyxZQUFsQixFQUFnQztBQUM5RCxXQUFJa0MsT0FBT0QsR0FBR2lELGNBQUgsQ0FBa0JsRixZQUFsQixDQUFYO0FBQ0EsV0FBSWpULE9BQU8rVixRQUFRL1YsSUFBUixJQUFnQmtWLEdBQUdoRSxNQUFILENBQVVsUixJQUFyQzs7QUFFQSxXQUFJbVYsS0FBS25WLElBQUwsSUFBYW1WLEtBQUtuVixJQUFMLEtBQWNBLElBQS9CLEVBQXFDO0FBQ3BDa1YsV0FBR2dWLGtCQUFILENBQXNCalgsWUFBdEI7QUFDQWtDLGVBQU9ELEdBQUdpRCxjQUFILENBQWtCbEYsWUFBbEIsQ0FBUDtBQUNBO0FBQ0RrQyxZQUFLblYsSUFBTCxHQUFZQSxJQUFaOztBQUVBNm1CLGFBQU12TyxJQUFOLENBQVduRCxLQUFLblYsSUFBaEI7O0FBRUEsV0FBSW1WLEtBQUs0RCxVQUFULEVBQXFCO0FBQ3BCNUQsYUFBSzRELFVBQUwsQ0FBZ0JvUixXQUFoQixDQUE0QmxYLFlBQTVCO0FBQ0FrQyxhQUFLNEQsVUFBTCxDQUFnQnFFLFVBQWhCO0FBQ0EsUUFIRCxNQUdPO0FBQ04sWUFBSWdOLGtCQUFrQmp6QixNQUFNMGQsV0FBTixDQUFrQk0sS0FBS25WLElBQXZCLENBQXRCO0FBQ0EsWUFBSW9xQixvQkFBb0J4dkIsU0FBeEIsRUFBbUM7QUFDbEMsZUFBTSxJQUFJOUMsS0FBSixDQUFVLE1BQU1xZCxLQUFLblYsSUFBWCxHQUFrQix3QkFBNUIsQ0FBTjtBQUNBOztBQUVEbVYsYUFBSzRELFVBQUwsR0FBa0IsSUFBSXFSLGVBQUosQ0FBb0JsVixFQUFwQixFQUF3QmpDLFlBQXhCLENBQWxCO0FBQ0FnWCx1QkFBZTNSLElBQWYsQ0FBb0JuRCxLQUFLNEQsVUFBekI7QUFDQTtBQUNELE9BeEJELEVBd0JHN0QsRUF4Qkg7O0FBMEJBLGFBQU8rVSxjQUFQO0FBQ0EsTUFyUmtEOztBQXVSbkQ7Ozs7QUFJQUksb0JBQWUseUJBQVc7QUFDekIsVUFBSW5WLEtBQUssSUFBVDtBQUNBN0YsY0FBUTJLLElBQVIsQ0FBYTlFLEdBQUd2QyxJQUFILENBQVFLLFFBQXJCLEVBQStCLFVBQVMrQyxPQUFULEVBQWtCOUMsWUFBbEIsRUFBZ0M7QUFDOURpQyxVQUFHaUQsY0FBSCxDQUFrQmxGLFlBQWxCLEVBQWdDOEYsVUFBaEMsQ0FBMkN0RCxLQUEzQztBQUNBLE9BRkQsRUFFR1AsRUFGSDtBQUdBLE1BaFNrRDs7QUFrU25EOzs7QUFHQU8sWUFBTyxpQkFBVztBQUNqQixXQUFLNFUsYUFBTDtBQUNBLFdBQUsvQyxPQUFMLENBQWFsWCxVQUFiO0FBQ0EsTUF4U2tEOztBQTBTbkRvRixhQUFRLGdCQUFTdEUsTUFBVCxFQUFpQjtBQUN4QixVQUFJZ0UsS0FBSyxJQUFUOztBQUVBLFVBQUksQ0FBQ2hFLE1BQUQsSUFBVyxRQUFPQSxNQUFQLHlDQUFPQSxNQUFQLE9BQWtCLFFBQWpDLEVBQTJDO0FBQzFDO0FBQ0FBLGdCQUFTO0FBQ1JvVSxrQkFBVXBVLE1BREY7QUFFUjRVLGNBQU14cEIsVUFBVSxDQUFWO0FBRkUsUUFBVDtBQUlBOztBQUVEMnFCLG1CQUFhL1IsRUFBYjs7QUFFQTtBQUNBO0FBQ0FwRixjQUFRd2EsV0FBUixDQUFvQnBWLEVBQXBCOztBQUVBLFVBQUlwRixRQUFRK1gsTUFBUixDQUFlM1MsRUFBZixFQUFtQixjQUFuQixNQUF1QyxLQUEzQyxFQUFrRDtBQUNqRDtBQUNBOztBQUVEO0FBQ0FBLFNBQUdvUyxPQUFILENBQVdpRCxLQUFYLEdBQW1CclYsR0FBR3ZDLElBQXRCOztBQUVBO0FBQ0EsVUFBSXNYLGlCQUFpQi9VLEdBQUc4VSx3QkFBSCxFQUFyQjs7QUFFQTtBQUNBM2EsY0FBUTJLLElBQVIsQ0FBYTlFLEdBQUd2QyxJQUFILENBQVFLLFFBQXJCLEVBQStCLFVBQVMrQyxPQUFULEVBQWtCOUMsWUFBbEIsRUFBZ0M7QUFDOURpQyxVQUFHaUQsY0FBSCxDQUFrQmxGLFlBQWxCLEVBQWdDOEYsVUFBaEMsQ0FBMkN5UixxQkFBM0M7QUFDQSxPQUZELEVBRUd0VixFQUZIOztBQUlBQSxTQUFHdVYsWUFBSDs7QUFFQTtBQUNBLFVBQUl2VixHQUFHbEIsT0FBSCxDQUFXd0gsU0FBWCxJQUF3QnRHLEdBQUdsQixPQUFILENBQVd3SCxTQUFYLENBQXFCOEosUUFBakQsRUFBMkQ7QUFDMURqVyxlQUFRMkssSUFBUixDQUFhaVEsY0FBYixFQUE2QixVQUFTbFIsVUFBVCxFQUFxQjtBQUNqREEsbUJBQVd0RCxLQUFYO0FBQ0EsUUFGRDtBQUdBOztBQUVEUCxTQUFHd1YsY0FBSDs7QUFFQTtBQUNBO0FBQ0F4VixTQUFHb1MsT0FBSCxDQUFXbFgsVUFBWDs7QUFFQTtBQUNBO0FBQ0E4RSxTQUFHeVYsVUFBSCxHQUFnQixFQUFoQjs7QUFFQTtBQUNBN2EsY0FBUStYLE1BQVIsQ0FBZTNTLEVBQWYsRUFBbUIsYUFBbkI7O0FBRUEsVUFBSUEsR0FBRzBTLGVBQVAsRUFBd0I7QUFDdkIxUyxVQUFHMFYsZ0JBQUgsR0FBc0I7QUFDckJ0RixrQkFBVXBVLE9BQU9vVSxRQURJO0FBRXJCUixnQkFBUTVULE9BQU80VCxNQUZNO0FBR3JCZ0IsY0FBTTVVLE9BQU80VTtBQUhRLFFBQXRCO0FBS0EsT0FORCxNQU1PO0FBQ041USxVQUFHNlAsTUFBSCxDQUFVN1QsTUFBVjtBQUNBO0FBQ0QsTUF6V2tEOztBQTJXbkQ7Ozs7O0FBS0F1WixtQkFBYyx3QkFBVztBQUN4QixVQUFJdlYsS0FBSyxJQUFUOztBQUVBLFVBQUlwRixRQUFRK1gsTUFBUixDQUFlM1MsRUFBZixFQUFtQixjQUFuQixNQUF1QyxLQUEzQyxFQUFrRDtBQUNqRDtBQUNBOztBQUVEdEYsY0FBUTRGLE1BQVIsQ0FBZSxJQUFmLEVBQXFCLEtBQUtsQyxLQUExQixFQUFpQyxLQUFLQyxNQUF0Qzs7QUFFQTs7Ozs7OztBQU9BekQsY0FBUStYLE1BQVIsQ0FBZTNTLEVBQWYsRUFBbUIsa0JBQW5CO0FBQ0FwRixjQUFRK1gsTUFBUixDQUFlM1MsRUFBZixFQUFtQixhQUFuQjtBQUNBLE1BbFlrRDs7QUFvWW5EOzs7OztBQUtBd1YscUJBQWdCLDBCQUFXO0FBQzFCLFVBQUl4VixLQUFLLElBQVQ7O0FBRUEsVUFBSXBGLFFBQVErWCxNQUFSLENBQWUzUyxFQUFmLEVBQW1CLHNCQUFuQixNQUErQyxLQUFuRCxFQUEwRDtBQUN6RDtBQUNBOztBQUVELFdBQUssSUFBSXpkLElBQUksQ0FBUixFQUFXbWMsT0FBT3NCLEdBQUd2QyxJQUFILENBQVFLLFFBQVIsQ0FBaUI5YSxNQUF4QyxFQUFnRFQsSUFBSW1jLElBQXBELEVBQTBELEVBQUVuYyxDQUE1RCxFQUErRDtBQUM5RHlkLFVBQUcyVixhQUFILENBQWlCcHpCLENBQWpCO0FBQ0E7O0FBRURxWSxjQUFRK1gsTUFBUixDQUFlM1MsRUFBZixFQUFtQixxQkFBbkI7QUFDQSxNQXJaa0Q7O0FBdVpuRDs7Ozs7QUFLQTJWLG9CQUFlLHVCQUFTOXBCLEtBQVQsRUFBZ0I7QUFDOUIsVUFBSW1VLEtBQUssSUFBVDtBQUNBLFVBQUlDLE9BQU9ELEdBQUdpRCxjQUFILENBQWtCcFgsS0FBbEIsQ0FBWDtBQUNBLFVBQUlGLE9BQU87QUFDVnNVLGFBQU1BLElBREk7QUFFVnBVLGNBQU9BO0FBRkcsT0FBWDs7QUFLQSxVQUFJK08sUUFBUStYLE1BQVIsQ0FBZTNTLEVBQWYsRUFBbUIscUJBQW5CLEVBQTBDLENBQUNyVSxJQUFELENBQTFDLE1BQXNELEtBQTFELEVBQWlFO0FBQ2hFO0FBQ0E7O0FBRURzVSxXQUFLNEQsVUFBTCxDQUFnQnZELE1BQWhCOztBQUVBMUYsY0FBUStYLE1BQVIsQ0FBZTNTLEVBQWYsRUFBbUIsb0JBQW5CLEVBQXlDLENBQUNyVSxJQUFELENBQXpDO0FBQ0EsTUEzYWtEOztBQTZhbkRra0IsYUFBUSxnQkFBUzdULE1BQVQsRUFBaUI7QUFDeEIsVUFBSWdFLEtBQUssSUFBVDs7QUFFQSxVQUFJLENBQUNoRSxNQUFELElBQVcsUUFBT0EsTUFBUCx5Q0FBT0EsTUFBUCxPQUFrQixRQUFqQyxFQUEyQztBQUMxQztBQUNBQSxnQkFBUztBQUNSb1Usa0JBQVVwVSxNQURGO0FBRVI0VSxjQUFNeHBCLFVBQVUsQ0FBVjtBQUZFLFFBQVQ7QUFJQTs7QUFFRCxVQUFJZ3BCLFdBQVdwVSxPQUFPb1UsUUFBdEI7QUFDQSxVQUFJUSxPQUFPNVUsT0FBTzRVLElBQWxCOztBQUVBLFVBQUloVyxRQUFRK1gsTUFBUixDQUFlM1MsRUFBZixFQUFtQixjQUFuQixNQUF1QyxLQUEzQyxFQUFrRDtBQUNqRDtBQUNBOztBQUVELFVBQUk0VixtQkFBbUI1VixHQUFHbEIsT0FBSCxDQUFXd0gsU0FBbEM7QUFDQSxVQUFJZ0ssYUFBYSxTQUFiQSxVQUFhLENBQVNoSyxTQUFULEVBQW9CO0FBQ3BDMUwsZUFBUStYLE1BQVIsQ0FBZTNTLEVBQWYsRUFBbUIsYUFBbkI7QUFDQTdGLGVBQVF1WCxRQUFSLENBQWlCa0Usb0JBQW9CQSxpQkFBaUJ0RixVQUF0RCxFQUFrRSxDQUFDaEssU0FBRCxDQUFsRSxFQUErRXRHLEVBQS9FO0FBQ0EsT0FIRDs7QUFLQSxVQUFJNFYscUJBQXNCLE9BQU94RixRQUFQLEtBQW9CLFdBQXBCLElBQW1DQSxhQUFhLENBQWpELElBQXdELE9BQU9BLFFBQVAsS0FBb0IsV0FBcEIsSUFBbUN3RixpQkFBaUJ4RixRQUFqQixLQUE4QixDQUE5SSxDQUFKLEVBQXVKO0FBQ3RKLFdBQUk5SixZQUFZLElBQUlsTSxTQUFKLENBQWM7QUFDN0J1VixrQkFBVSxDQUFDUyxZQUFZd0YsaUJBQWlCeEYsUUFBOUIsSUFBMEMsS0FEdkIsRUFDOEI7QUFDM0RSLGdCQUFRNVQsT0FBTzRULE1BQVAsSUFBaUJnRyxpQkFBaUJoRyxNQUZiOztBQUk3QkMsZ0JBQVEsZ0JBQVNqUCxLQUFULEVBQWdCaVYsZUFBaEIsRUFBaUM7QUFDeEMsYUFBSUMsaUJBQWlCM2IsUUFBUXlWLE1BQVIsQ0FBZW1HLE9BQWYsQ0FBdUJGLGdCQUFnQmpHLE1BQXZDLENBQXJCO0FBQ0EsYUFBSUYsY0FBY21HLGdCQUFnQm5HLFdBQWxDO0FBQ0EsYUFBSXNHLGNBQWN0RyxjQUFjbUcsZ0JBQWdCbEcsUUFBaEQ7O0FBRUEvTyxlQUFNd0QsSUFBTixDQUFXMFIsZUFBZUUsV0FBZixDQUFYLEVBQXdDQSxXQUF4QyxFQUFxRHRHLFdBQXJEO0FBQ0EsU0FWNEI7O0FBWTdCSSw2QkFBcUI4RixpQkFBaUJ2RixVQVpUO0FBYTdCTiw2QkFBcUJPO0FBYlEsUUFBZCxDQUFoQjs7QUFnQkFFLGtCQUFXRyxZQUFYLENBQXdCM1EsRUFBeEIsRUFBNEJzRyxTQUE1QixFQUF1QzhKLFFBQXZDLEVBQWlEUSxJQUFqRDtBQUNBLE9BbEJELE1Ba0JPO0FBQ041USxVQUFHb0UsSUFBSDs7QUFFQTtBQUNBa00sa0JBQVcsSUFBSWxXLFNBQUosQ0FBYyxFQUFDdVYsVUFBVSxDQUFYLEVBQWMvTyxPQUFPWixFQUFyQixFQUFkLENBQVg7QUFDQTs7QUFFRCxhQUFPQSxFQUFQO0FBQ0EsTUEvZGtEOztBQWllbkRvRSxXQUFNLGNBQVM2UixXQUFULEVBQXNCO0FBQzNCLFVBQUlqVyxLQUFLLElBQVQ7O0FBRUFBLFNBQUdrVCxLQUFIOztBQUVBLFVBQUkvWSxRQUFRaUYsYUFBUixDQUFzQjZXLFdBQXRCLENBQUosRUFBd0M7QUFDdkNBLHFCQUFjLENBQWQ7QUFDQTs7QUFFRGpXLFNBQUdrVyxVQUFILENBQWNELFdBQWQ7O0FBRUEsVUFBSWpXLEdBQUc1QixLQUFILElBQVksQ0FBWixJQUFpQjRCLEdBQUczQixNQUFILElBQWEsQ0FBbEMsRUFBcUM7QUFDcEM7QUFDQTs7QUFFRCxVQUFJekQsUUFBUStYLE1BQVIsQ0FBZTNTLEVBQWYsRUFBbUIsWUFBbkIsRUFBaUMsQ0FBQ2lXLFdBQUQsQ0FBakMsTUFBb0QsS0FBeEQsRUFBK0Q7QUFDOUQ7QUFDQTs7QUFFRDtBQUNBOWIsY0FBUTJLLElBQVIsQ0FBYTlFLEdBQUdtVyxLQUFoQixFQUF1QixVQUFTQyxHQUFULEVBQWM7QUFDcENBLFdBQUloUyxJQUFKLENBQVNwRSxHQUFHdUUsU0FBWjtBQUNBLE9BRkQsRUFFR3ZFLEVBRkg7O0FBSUEsVUFBSUEsR0FBR25iLEtBQVAsRUFBYztBQUNibWIsVUFBR25iLEtBQUgsQ0FBU3VmLElBQVQ7QUFDQTs7QUFFRHBFLFNBQUdxVyxZQUFILENBQWdCSixXQUFoQjtBQUNBalcsU0FBR3NXLFlBQUgsQ0FBZ0JMLFdBQWhCOztBQUVBcmIsY0FBUStYLE1BQVIsQ0FBZTNTLEVBQWYsRUFBbUIsV0FBbkIsRUFBZ0MsQ0FBQ2lXLFdBQUQsQ0FBaEM7QUFDQSxNQWpnQmtEOztBQW1nQm5EOzs7QUFHQUMsaUJBQVksb0JBQVNELFdBQVQsRUFBc0I7QUFDakMsVUFBSWpXLEtBQUssSUFBVDs7QUFFQSxXQUFLLElBQUl6ZCxJQUFJLENBQVIsRUFBV21jLE9BQU8sQ0FBQ3NCLEdBQUd2QyxJQUFILENBQVFLLFFBQVIsSUFBb0IsRUFBckIsRUFBeUI5YSxNQUFoRCxFQUF3RFQsSUFBSW1jLElBQTVELEVBQWtFLEVBQUVuYyxDQUFwRSxFQUF1RTtBQUN0RSxXQUFJeWQsR0FBR2tELGdCQUFILENBQW9CM2dCLENBQXBCLENBQUosRUFBNEI7QUFDM0J5ZCxXQUFHaUQsY0FBSCxDQUFrQjFnQixDQUFsQixFQUFxQnNoQixVQUFyQixDQUFnQ3FTLFVBQWhDLENBQTJDRCxXQUEzQztBQUNBO0FBQ0Q7O0FBRURqVyxTQUFHb1MsT0FBSCxDQUFXOEQsVUFBWCxDQUFzQkQsV0FBdEI7QUFDQSxNQWhoQmtEOztBQWtoQm5EOzs7OztBQUtBSSxtQkFBYyxzQkFBU0osV0FBVCxFQUFzQjtBQUNuQyxVQUFJalcsS0FBSyxJQUFUOztBQUVBLFVBQUlwRixRQUFRK1gsTUFBUixDQUFlM1MsRUFBZixFQUFtQixvQkFBbkIsRUFBeUMsQ0FBQ2lXLFdBQUQsQ0FBekMsTUFBNEQsS0FBaEUsRUFBdUU7QUFDdEU7QUFDQTs7QUFFRDtBQUNBLFdBQUssSUFBSTF6QixJQUFJLENBQUN5ZCxHQUFHdkMsSUFBSCxDQUFRSyxRQUFSLElBQW9CLEVBQXJCLEVBQXlCOWEsTUFBekIsR0FBa0MsQ0FBL0MsRUFBa0RULEtBQUssQ0FBdkQsRUFBMEQsRUFBRUEsQ0FBNUQsRUFBK0Q7QUFDOUQsV0FBSXlkLEdBQUdrRCxnQkFBSCxDQUFvQjNnQixDQUFwQixDQUFKLEVBQTRCO0FBQzNCeWQsV0FBR3VXLFdBQUgsQ0FBZWgwQixDQUFmLEVBQWtCMHpCLFdBQWxCO0FBQ0E7QUFDRDs7QUFFRHJiLGNBQVErWCxNQUFSLENBQWUzUyxFQUFmLEVBQW1CLG1CQUFuQixFQUF3QyxDQUFDaVcsV0FBRCxDQUF4QztBQUNBLE1BdGlCa0Q7O0FBd2lCbkQ7Ozs7O0FBS0FNLGtCQUFhLHFCQUFTMXFCLEtBQVQsRUFBZ0JvcUIsV0FBaEIsRUFBNkI7QUFDekMsVUFBSWpXLEtBQUssSUFBVDtBQUNBLFVBQUlDLE9BQU9ELEdBQUdpRCxjQUFILENBQWtCcFgsS0FBbEIsQ0FBWDtBQUNBLFVBQUlGLE9BQU87QUFDVnNVLGFBQU1BLElBREk7QUFFVnBVLGNBQU9BLEtBRkc7QUFHVm9xQixvQkFBYUE7QUFISCxPQUFYOztBQU1BLFVBQUlyYixRQUFRK1gsTUFBUixDQUFlM1MsRUFBZixFQUFtQixtQkFBbkIsRUFBd0MsQ0FBQ3JVLElBQUQsQ0FBeEMsTUFBb0QsS0FBeEQsRUFBK0Q7QUFDOUQ7QUFDQTs7QUFFRHNVLFdBQUs0RCxVQUFMLENBQWdCTyxJQUFoQixDQUFxQjZSLFdBQXJCOztBQUVBcmIsY0FBUStYLE1BQVIsQ0FBZTNTLEVBQWYsRUFBbUIsa0JBQW5CLEVBQXVDLENBQUNyVSxJQUFELENBQXZDO0FBQ0EsTUE3akJrRDs7QUErakJuRDs7Ozs7QUFLQTJxQixtQkFBYyxzQkFBU0wsV0FBVCxFQUFzQjtBQUNuQyxVQUFJalcsS0FBSyxJQUFUO0FBQ0EsVUFBSW9TLFVBQVVwUyxHQUFHb1MsT0FBakI7QUFDQSxVQUFJem1CLE9BQU87QUFDVnltQixnQkFBU0EsT0FEQztBQUVWNkQsb0JBQWFBO0FBRkgsT0FBWDs7QUFLQSxVQUFJcmIsUUFBUStYLE1BQVIsQ0FBZTNTLEVBQWYsRUFBbUIsbUJBQW5CLEVBQXdDLENBQUNyVSxJQUFELENBQXhDLE1BQW9ELEtBQXhELEVBQStEO0FBQzlEO0FBQ0E7O0FBRUR5bUIsY0FBUWhPLElBQVI7O0FBRUF4SixjQUFRK1gsTUFBUixDQUFlM1MsRUFBZixFQUFtQixrQkFBbkIsRUFBdUMsQ0FBQ3JVLElBQUQsQ0FBdkM7QUFDQSxNQW5sQmtEOztBQXFsQm5EO0FBQ0E7QUFDQTZxQix3QkFBbUIsMkJBQVNyMEIsQ0FBVCxFQUFZO0FBQzlCLGFBQU9zWSxZQUFZZ2MsS0FBWixDQUFrQkMsTUFBbEIsQ0FBeUIsSUFBekIsRUFBK0J2MEIsQ0FBL0IsQ0FBUDtBQUNBLE1BemxCa0Q7O0FBMmxCbkR3MEIseUJBQW9CLDRCQUFTeDBCLENBQVQsRUFBWTtBQUMvQixhQUFPc1ksWUFBWWdjLEtBQVosQ0FBa0I3WSxLQUFsQixDQUF3QixJQUF4QixFQUE4QnpiLENBQTlCLEVBQWlDLEVBQUN5MEIsV0FBVyxJQUFaLEVBQWpDLENBQVA7QUFDQSxNQTdsQmtEOztBQStsQm5EQyx5QkFBb0IsNEJBQVMxMEIsQ0FBVCxFQUFZO0FBQy9CLGFBQU9zWSxZQUFZZ2MsS0FBWixDQUFrQixRQUFsQixFQUE0QixJQUE1QixFQUFrQ3QwQixDQUFsQyxFQUFxQyxFQUFDeTBCLFdBQVcsSUFBWixFQUFyQyxDQUFQO0FBQ0EsTUFqbUJrRDs7QUFtbUJuREUsZ0NBQTJCLG1DQUFTMzBCLENBQVQsRUFBWXNhLElBQVosRUFBa0JxQyxPQUFsQixFQUEyQjtBQUNyRCxVQUFJaVksU0FBU3RjLFlBQVlnYyxLQUFaLENBQWtCaGEsSUFBbEIsQ0FBYjtBQUNBLFVBQUksT0FBT3NhLE1BQVAsS0FBa0IsVUFBdEIsRUFBa0M7QUFDakMsY0FBT0EsT0FBTyxJQUFQLEVBQWE1MEIsQ0FBYixFQUFnQjJjLE9BQWhCLENBQVA7QUFDQTs7QUFFRCxhQUFPLEVBQVA7QUFDQSxNQTFtQmtEOztBQTRtQm5Ea1ksd0JBQW1CLDJCQUFTNzBCLENBQVQsRUFBWTtBQUM5QixhQUFPc1ksWUFBWWdjLEtBQVosQ0FBa0I1VixPQUFsQixDQUEwQixJQUExQixFQUFnQzFlLENBQWhDLEVBQW1DLEVBQUN5MEIsV0FBVyxJQUFaLEVBQW5DLENBQVA7QUFDQSxNQTltQmtEOztBQWduQm5EM1QscUJBQWdCLHdCQUFTbEYsWUFBVCxFQUF1QjtBQUN0QyxVQUFJaUMsS0FBSyxJQUFUO0FBQ0EsVUFBSWEsVUFBVWIsR0FBR3ZDLElBQUgsQ0FBUUssUUFBUixDQUFpQkMsWUFBakIsQ0FBZDtBQUNBLFVBQUksQ0FBQzhDLFFBQVFvVyxLQUFiLEVBQW9CO0FBQ25CcFcsZUFBUW9XLEtBQVIsR0FBZ0IsRUFBaEI7QUFDQTs7QUFFRCxVQUFJaFgsT0FBT1ksUUFBUW9XLEtBQVIsQ0FBY2pYLEdBQUc4RCxFQUFqQixDQUFYO0FBQ0EsVUFBSSxDQUFDN0QsSUFBTCxFQUFXO0FBQ1ZBLGNBQU9ZLFFBQVFvVyxLQUFSLENBQWNqWCxHQUFHOEQsRUFBakIsSUFBdUI7QUFDN0JoWixjQUFNLElBRHVCO0FBRTdCMlMsY0FBTSxFQUZ1QjtBQUc3Qm9ELGlCQUFTLElBSG9CO0FBSTdCZ0Qsb0JBQVksSUFKaUI7QUFLN0IwRCxnQkFBUSxJQUxxQixFQUtiO0FBQ2hCckcsaUJBQVMsSUFOb0I7QUFPN0JFLGlCQUFTO0FBUG9CLFFBQTlCO0FBU0E7O0FBRUQsYUFBT25CLElBQVA7QUFDQSxNQXJvQmtEOztBQXVvQm5EdUosNkJBQXdCLGtDQUFXO0FBQ2xDLFVBQUl2SyxRQUFRLENBQVo7QUFDQSxXQUFLLElBQUkxYyxJQUFJLENBQVIsRUFBV21jLE9BQU8sS0FBS2pCLElBQUwsQ0FBVUssUUFBVixDQUFtQjlhLE1BQTFDLEVBQWtEVCxJQUFJbWMsSUFBdEQsRUFBNEQsRUFBRW5jLENBQTlELEVBQWlFO0FBQ2hFLFdBQUksS0FBSzJnQixnQkFBTCxDQUFzQjNnQixDQUF0QixDQUFKLEVBQThCO0FBQzdCMGM7QUFDQTtBQUNEO0FBQ0QsYUFBT0EsS0FBUDtBQUNBLE1BL29Ca0Q7O0FBaXBCbkRpRSx1QkFBa0IsMEJBQVNuRixZQUFULEVBQXVCO0FBQ3hDLFVBQUlrQyxPQUFPLEtBQUtnRCxjQUFMLENBQW9CbEYsWUFBcEIsQ0FBWDs7QUFFQTtBQUNBO0FBQ0EsYUFBTyxPQUFPa0MsS0FBS3NILE1BQVosS0FBdUIsU0FBdkIsR0FBbUMsQ0FBQ3RILEtBQUtzSCxNQUF6QyxHQUFrRCxDQUFDLEtBQUs5SixJQUFMLENBQVVLLFFBQVYsQ0FBbUJDLFlBQW5CLEVBQWlDd0osTUFBM0Y7QUFDQSxNQXZwQmtEOztBQXlwQm5EMlAscUJBQWdCLDBCQUFXO0FBQzFCLGFBQU8sS0FBS3BZLE9BQUwsQ0FBYTJILGNBQWIsQ0FBNEIsSUFBNUIsQ0FBUDtBQUNBLE1BM3BCa0Q7O0FBNnBCbkQ7OztBQUdBdU8seUJBQW9CLDRCQUFTalgsWUFBVCxFQUF1QjtBQUMxQyxVQUFJK0YsS0FBSyxLQUFLQSxFQUFkO0FBQ0EsVUFBSWpELFVBQVUsS0FBS3BELElBQUwsQ0FBVUssUUFBVixDQUFtQkMsWUFBbkIsQ0FBZDtBQUNBLFVBQUlrQyxPQUFPWSxRQUFRb1csS0FBUixJQUFpQnBXLFFBQVFvVyxLQUFSLENBQWNuVCxFQUFkLENBQTVCOztBQUVBLFVBQUk3RCxJQUFKLEVBQVU7QUFDVEEsWUFBSzRELFVBQUwsQ0FBZ0JzVCxPQUFoQjtBQUNBLGNBQU90VyxRQUFRb1csS0FBUixDQUFjblQsRUFBZCxDQUFQO0FBQ0E7QUFDRCxNQXpxQmtEOztBQTJxQm5EcVQsY0FBUyxtQkFBVztBQUNuQixVQUFJblgsS0FBSyxJQUFUO0FBQ0EsVUFBSXBFLFNBQVNvRSxHQUFHcEUsTUFBaEI7QUFDQSxVQUFJclosQ0FBSixFQUFPbWMsSUFBUDs7QUFFQXNCLFNBQUdtVCxJQUFIOztBQUVBO0FBQ0EsV0FBSzV3QixJQUFJLENBQUosRUFBT21jLE9BQU9zQixHQUFHdkMsSUFBSCxDQUFRSyxRQUFSLENBQWlCOWEsTUFBcEMsRUFBNENULElBQUltYyxJQUFoRCxFQUFzRCxFQUFFbmMsQ0FBeEQsRUFBMkQ7QUFDMUR5ZCxVQUFHZ1Ysa0JBQUgsQ0FBc0J6eUIsQ0FBdEI7QUFDQTs7QUFFRCxVQUFJcVosTUFBSixFQUFZO0FBQ1hvRSxVQUFHb1gsWUFBSDtBQUNBamQsZUFBUXlCLE1BQVIsQ0FBZXNYLEtBQWYsQ0FBcUJsVCxFQUFyQjtBQUNBckYsZ0JBQVMwYyxjQUFULENBQXdCclgsR0FBR3NFLEdBQTNCO0FBQ0F0RSxVQUFHcEUsTUFBSCxHQUFZLElBQVo7QUFDQW9FLFVBQUdzRSxHQUFILEdBQVMsSUFBVDtBQUNBOztBQUVEMUosY0FBUStYLE1BQVIsQ0FBZTNTLEVBQWYsRUFBbUIsU0FBbkI7O0FBRUEsYUFBTy9kLE1BQU0ydkIsU0FBTixDQUFnQjVSLEdBQUc4RCxFQUFuQixDQUFQO0FBQ0EsTUFsc0JrRDs7QUFvc0JuRHdULG9CQUFlLHlCQUFXO0FBQ3pCLGFBQU8sS0FBSzFiLE1BQUwsQ0FBWTJiLFNBQVosQ0FBc0JyWCxLQUF0QixDQUE0QixLQUFLdEUsTUFBakMsRUFBeUN4VSxTQUF6QyxDQUFQO0FBQ0EsTUF0c0JrRDs7QUF3c0JuRDZyQixrQkFBYSx1QkFBVztBQUN2QixVQUFJalQsS0FBSyxJQUFUO0FBQ0FBLFNBQUdvUyxPQUFILEdBQWEsSUFBSXBYLE9BQUosQ0FBWTtBQUN4QnNQLGVBQVF0SyxFQURnQjtBQUV4QndYLHVCQUFnQnhYLEVBRlEsRUFFSjtBQUNwQnFWLGNBQU9yVixHQUFHdkMsSUFIYztBQUl4QjZILGlCQUFVdEYsR0FBR2xCLE9BQUgsQ0FBV3hCO0FBSkcsT0FBWixFQUtWMEMsRUFMVSxDQUFiO0FBTUEsTUFodEJrRDs7QUFrdEJuRDs7O0FBR0E4UyxpQkFBWSxzQkFBVztBQUN0QixVQUFJOVMsS0FBSyxJQUFUO0FBQ0EsVUFBSXlYLFlBQVl6WCxHQUFHMFgsVUFBSCxHQUFnQixFQUFoQztBQUNBLFVBQUlDLFdBQVcsb0JBQVc7QUFDekIzWCxVQUFHNFgsWUFBSCxDQUFnQjFYLEtBQWhCLENBQXNCRixFQUF0QixFQUEwQjVZLFNBQTFCO0FBQ0EsT0FGRDs7QUFJQStTLGNBQVEySyxJQUFSLENBQWE5RSxHQUFHbEIsT0FBSCxDQUFXK1ksTUFBeEIsRUFBZ0MsVUFBUy9zQixJQUFULEVBQWU7QUFDOUM2UCxnQkFBU21kLGdCQUFULENBQTBCOVgsRUFBMUIsRUFBOEJsVixJQUE5QixFQUFvQzZzQixRQUFwQztBQUNBRixpQkFBVTNzQixJQUFWLElBQWtCNnNCLFFBQWxCO0FBQ0EsT0FIRDs7QUFLQTtBQUNBO0FBQ0EsVUFBSTNYLEdBQUdsQixPQUFILENBQVdpVSxVQUFmLEVBQTJCO0FBQzFCNEUsa0JBQVcsb0JBQVc7QUFDckIzWCxXQUFHZ1QsTUFBSDtBQUNBLFFBRkQ7O0FBSUFyWSxnQkFBU21kLGdCQUFULENBQTBCOVgsRUFBMUIsRUFBOEIsUUFBOUIsRUFBd0MyWCxRQUF4QztBQUNBRixpQkFBVXpFLE1BQVYsR0FBbUIyRSxRQUFuQjtBQUNBO0FBQ0QsTUEzdUJrRDs7QUE2dUJuRDs7O0FBR0FQLG1CQUFjLHdCQUFXO0FBQ3hCLFVBQUlwWCxLQUFLLElBQVQ7QUFDQSxVQUFJeVgsWUFBWXpYLEdBQUcwWCxVQUFuQjtBQUNBLFVBQUksQ0FBQ0QsU0FBTCxFQUFnQjtBQUNmO0FBQ0E7O0FBRUQsYUFBT3pYLEdBQUcwWCxVQUFWO0FBQ0F2ZCxjQUFRMkssSUFBUixDQUFhMlMsU0FBYixFQUF3QixVQUFTRSxRQUFULEVBQW1CN3NCLElBQW5CLEVBQXlCO0FBQ2hENlAsZ0JBQVNvZCxtQkFBVCxDQUE2Qi9YLEVBQTdCLEVBQWlDbFYsSUFBakMsRUFBdUM2c0IsUUFBdkM7QUFDQSxPQUZEO0FBR0EsTUEzdkJrRDs7QUE2dkJuREssdUJBQWtCLDBCQUFTeGQsUUFBVCxFQUFtQmlDLElBQW5CLEVBQXlCd2IsT0FBekIsRUFBa0M7QUFDbkQsVUFBSWxCLFNBQVNrQixVQUFVLGVBQVYsR0FBNEIsa0JBQXpDO0FBQ0EsVUFBSS9OLE9BQUosRUFBYTNuQixDQUFiLEVBQWdCbWMsSUFBaEI7O0FBRUEsV0FBS25jLElBQUksQ0FBSixFQUFPbWMsT0FBT2xFLFNBQVN4WCxNQUE1QixFQUFvQ1QsSUFBSW1jLElBQXhDLEVBQThDLEVBQUVuYyxDQUFoRCxFQUFtRDtBQUNsRDJuQixpQkFBVTFQLFNBQVNqWSxDQUFULENBQVY7QUFDQSxXQUFJMm5CLE9BQUosRUFBYTtBQUNaLGFBQUtqSCxjQUFMLENBQW9CaUgsUUFBUTdJLGFBQTVCLEVBQTJDd0MsVUFBM0MsQ0FBc0RrVCxNQUF0RCxFQUE4RDdNLE9BQTlEO0FBQ0E7QUFDRDtBQUNELE1BdndCa0Q7O0FBeXdCbkQ7OztBQUdBME4sbUJBQWMsc0JBQVN6MUIsQ0FBVCxFQUFZO0FBQ3pCLFVBQUk2ZCxLQUFLLElBQVQ7QUFDQSxVQUFJb1MsVUFBVXBTLEdBQUdvUyxPQUFqQjs7QUFFQSxVQUFJeFgsUUFBUStYLE1BQVIsQ0FBZTNTLEVBQWYsRUFBbUIsYUFBbkIsRUFBa0MsQ0FBQzdkLENBQUQsQ0FBbEMsTUFBMkMsS0FBL0MsRUFBc0Q7QUFDckQ7QUFDQTs7QUFFRDtBQUNBNmQsU0FBRzBTLGVBQUgsR0FBcUIsSUFBckI7QUFDQTFTLFNBQUcwVixnQkFBSCxHQUFzQixJQUF0Qjs7QUFFQSxVQUFJd0MsVUFBVWxZLEdBQUdtWSxXQUFILENBQWVoMkIsQ0FBZixDQUFkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFJaXdCLE9BQUosRUFBYTtBQUNaOEYsaUJBQVU5RixRQUFRZ0csTUFBUixHQUNQaEcsUUFBUStGLFdBQVIsQ0FBb0JoMkIsQ0FBcEIsQ0FETyxHQUVQKzFCLFVBQVU5RixRQUFRK0YsV0FBUixDQUFvQmgyQixDQUFwQixDQUZiO0FBR0E7O0FBRUR5WSxjQUFRK1gsTUFBUixDQUFlM1MsRUFBZixFQUFtQixZQUFuQixFQUFpQyxDQUFDN2QsQ0FBRCxDQUFqQzs7QUFFQSxVQUFJazJCLGtCQUFrQnJZLEdBQUcwVixnQkFBekI7QUFDQSxVQUFJMkMsZUFBSixFQUFxQjtBQUNwQjtBQUNBclksVUFBRzZQLE1BQUgsQ0FBVXdJLGVBQVY7QUFDQSxPQUhELE1BR08sSUFBSUgsV0FBVyxDQUFDbFksR0FBRzZRLFNBQW5CLEVBQThCO0FBQ3BDO0FBQ0E3USxVQUFHbVQsSUFBSDs7QUFFQTtBQUNBO0FBQ0FuVCxVQUFHNlAsTUFBSCxDQUFVO0FBQ1RPLGtCQUFVcFEsR0FBR2xCLE9BQUgsQ0FBV3RDLEtBQVgsQ0FBaUI4YixpQkFEbEI7QUFFVDFILGNBQU07QUFGRyxRQUFWO0FBSUE7O0FBRUQ1USxTQUFHMFMsZUFBSCxHQUFxQixLQUFyQjtBQUNBMVMsU0FBRzBWLGdCQUFILEdBQXNCLElBQXRCOztBQUVBLGFBQU8xVixFQUFQO0FBQ0EsTUF6ekJrRDs7QUEyekJuRDs7Ozs7O0FBTUFtWSxrQkFBYSxxQkFBU2gyQixDQUFULEVBQVk7QUFDeEIsVUFBSTZkLEtBQUssSUFBVDtBQUNBLFVBQUlsQixVQUFVa0IsR0FBR2xCLE9BQUgsSUFBYyxFQUE1QjtBQUNBLFVBQUl5WixlQUFlelosUUFBUXRDLEtBQTNCO0FBQ0EsVUFBSTBiLFVBQVUsS0FBZDs7QUFFQWxZLFNBQUd5VixVQUFILEdBQWdCelYsR0FBR3lWLFVBQUgsSUFBaUIsRUFBakM7O0FBRUE7QUFDQSxVQUFJdHpCLEVBQUUySSxJQUFGLEtBQVcsVUFBZixFQUEyQjtBQUMxQmtWLFVBQUd3WSxNQUFILEdBQVksRUFBWjtBQUNBLE9BRkQsTUFFTztBQUNOeFksVUFBR3dZLE1BQUgsR0FBWXhZLEdBQUc4Vyx5QkFBSCxDQUE2QjMwQixDQUE3QixFQUFnQ28yQixhQUFhOWIsSUFBN0MsRUFBbUQ4YixZQUFuRCxDQUFaO0FBQ0E7O0FBRUQ7QUFDQTtBQUNBcGUsY0FBUXVYLFFBQVIsQ0FBaUI1UyxRQUFRMlosT0FBUixJQUFtQjNaLFFBQVF0QyxLQUFSLENBQWNpYyxPQUFsRCxFQUEyRCxDQUFDdDJCLEVBQUV1MkIsTUFBSCxFQUFXMVksR0FBR3dZLE1BQWQsQ0FBM0QsRUFBa0Z4WSxFQUFsRjs7QUFFQSxVQUFJN2QsRUFBRTJJLElBQUYsS0FBVyxTQUFYLElBQXdCM0ksRUFBRTJJLElBQUYsS0FBVyxPQUF2QyxFQUFnRDtBQUMvQyxXQUFJZ1UsUUFBUTBJLE9BQVosRUFBcUI7QUFDcEI7QUFDQTFJLGdCQUFRMEksT0FBUixDQUFnQnprQixJQUFoQixDQUFxQmlkLEVBQXJCLEVBQXlCN2QsRUFBRXUyQixNQUEzQixFQUFtQzFZLEdBQUd3WSxNQUF0QztBQUNBO0FBQ0Q7O0FBRUQ7QUFDQSxVQUFJeFksR0FBR3lWLFVBQUgsQ0FBY3p5QixNQUFsQixFQUEwQjtBQUN6QmdkLFVBQUdnWSxnQkFBSCxDQUFvQmhZLEdBQUd5VixVQUF2QixFQUFtQzhDLGFBQWE5YixJQUFoRCxFQUFzRCxLQUF0RDtBQUNBOztBQUVEO0FBQ0EsVUFBSXVELEdBQUd3WSxNQUFILENBQVV4MUIsTUFBVixJQUFvQnUxQixhQUFhOWIsSUFBckMsRUFBMkM7QUFDMUN1RCxVQUFHZ1ksZ0JBQUgsQ0FBb0JoWSxHQUFHd1ksTUFBdkIsRUFBK0JELGFBQWE5YixJQUE1QyxFQUFrRCxJQUFsRDtBQUNBOztBQUVEeWIsZ0JBQVUsQ0FBQy9kLFFBQVF3ZSxXQUFSLENBQW9CM1ksR0FBR3dZLE1BQXZCLEVBQStCeFksR0FBR3lWLFVBQWxDLENBQVg7O0FBRUE7QUFDQXpWLFNBQUd5VixVQUFILEdBQWdCelYsR0FBR3dZLE1BQW5COztBQUVBLGFBQU9OLE9BQVA7QUFDQTtBQTMyQmtELEtBQXBEOztBQTgyQkE7Ozs7Ozs7QUFPQWoyQixVQUFNMjJCLFVBQU4sR0FBbUIzMkIsS0FBbkI7QUFDQSxJQWw3QkQ7QUFvN0JDLEdBbDhCdUIsRUFrOEJ0QixFQUFDLE1BQUssRUFBTixFQUFTLE1BQUssRUFBZCxFQUFpQixNQUFLLEVBQXRCLEVBQXlCLE1BQUssRUFBOUIsRUFBaUMsTUFBSyxFQUF0QyxFQUF5QyxNQUFLLEVBQTlDLEVBQWlELE1BQUssRUFBdEQsRUFBeUQsTUFBSyxFQUE5RCxFQUFpRSxNQUFLLEVBQXRFLEVBQXlFLE1BQUssRUFBOUUsRUFsOEJzQixDQTV1SGl5QixFQThxSnB1QixJQUFHLENBQUMsVUFBU1EsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ3pIOztBQUVBLE9BQUl5WSxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7O0FBRUFkLFVBQU9ELE9BQVAsR0FBaUIsVUFBU08sS0FBVCxFQUFnQjs7QUFFaEMsUUFBSTQyQixjQUFjLENBQUMsTUFBRCxFQUFTLEtBQVQsRUFBZ0IsT0FBaEIsRUFBeUIsUUFBekIsRUFBbUMsU0FBbkMsQ0FBbEI7O0FBRUE7Ozs7O0FBS0EsYUFBU0MsaUJBQVQsQ0FBMkJDLEtBQTNCLEVBQWtDcEIsUUFBbEMsRUFBNEM7QUFDM0MsU0FBSW9CLE1BQU1DLFFBQVYsRUFBb0I7QUFDbkJELFlBQU1DLFFBQU4sQ0FBZXZCLFNBQWYsQ0FBeUJyVSxJQUF6QixDQUE4QnVVLFFBQTlCO0FBQ0E7QUFDQTs7QUFFRDNILFlBQU9DLGNBQVAsQ0FBc0I4SSxLQUF0QixFQUE2QixVQUE3QixFQUF5QztBQUN4Q0Usb0JBQWMsSUFEMEI7QUFFeENDLGtCQUFZLEtBRjRCO0FBR3hDcHlCLGFBQU87QUFDTjJ3QixrQkFBVyxDQUFDRSxRQUFEO0FBREw7QUFIaUMsTUFBekM7O0FBUUFrQixpQkFBWTNlLE9BQVosQ0FBb0IsVUFBU1osR0FBVCxFQUFjO0FBQ2pDLFVBQUl5ZCxTQUFTLFdBQVd6ZCxJQUFJL04sTUFBSixDQUFXLENBQVgsRUFBY3RGLFdBQWQsRUFBWCxHQUF5Q3FULElBQUk3VSxLQUFKLENBQVUsQ0FBVixDQUF0RDtBQUNBLFVBQUl3ZCxPQUFPOFcsTUFBTXpmLEdBQU4sQ0FBWDs7QUFFQTBXLGFBQU9DLGNBQVAsQ0FBc0I4SSxLQUF0QixFQUE2QnpmLEdBQTdCLEVBQWtDO0FBQ2pDMmYscUJBQWMsSUFEbUI7QUFFakNDLG1CQUFZLEtBRnFCO0FBR2pDcHlCLGNBQU8saUJBQVc7QUFDakIsWUFBSTZFLE9BQU9DLE1BQU0zRSxTQUFOLENBQWdCeEMsS0FBaEIsQ0FBc0IxQixJQUF0QixDQUEyQnFFLFNBQTNCLENBQVg7QUFDQSxZQUFJK3hCLE1BQU1sWCxLQUFLL0IsS0FBTCxDQUFXLElBQVgsRUFBaUJ2VSxJQUFqQixDQUFWOztBQUVBd08sZ0JBQVEySyxJQUFSLENBQWFpVSxNQUFNQyxRQUFOLENBQWV2QixTQUE1QixFQUF1QyxVQUFTMkIsTUFBVCxFQUFpQjtBQUN2RCxhQUFJLE9BQU9BLE9BQU9yQyxNQUFQLENBQVAsS0FBMEIsVUFBOUIsRUFBMEM7QUFDekNxQyxpQkFBT3JDLE1BQVAsRUFBZTdXLEtBQWYsQ0FBcUJrWixNQUFyQixFQUE2Qnp0QixJQUE3QjtBQUNBO0FBQ0QsU0FKRDs7QUFNQSxlQUFPd3RCLEdBQVA7QUFDQTtBQWRnQyxPQUFsQztBQWdCQSxNQXBCRDtBQXFCQTs7QUFFRDs7OztBQUlBLGFBQVNFLG1CQUFULENBQTZCTixLQUE3QixFQUFvQ3BCLFFBQXBDLEVBQThDO0FBQzdDLFNBQUkyQixPQUFPUCxNQUFNQyxRQUFqQjtBQUNBLFNBQUksQ0FBQ00sSUFBTCxFQUFXO0FBQ1Y7QUFDQTs7QUFFRCxTQUFJN0IsWUFBWTZCLEtBQUs3QixTQUFyQjtBQUNBLFNBQUk1ckIsUUFBUTRyQixVQUFVdFUsT0FBVixDQUFrQndVLFFBQWxCLENBQVo7QUFDQSxTQUFJOXJCLFVBQVUsQ0FBQyxDQUFmLEVBQWtCO0FBQ2pCNHJCLGdCQUFVeEcsTUFBVixDQUFpQnBsQixLQUFqQixFQUF3QixDQUF4QjtBQUNBOztBQUVELFNBQUk0ckIsVUFBVXowQixNQUFWLEdBQW1CLENBQXZCLEVBQTBCO0FBQ3pCO0FBQ0E7O0FBRUQ2MUIsaUJBQVkzZSxPQUFaLENBQW9CLFVBQVNaLEdBQVQsRUFBYztBQUNqQyxhQUFPeWYsTUFBTXpmLEdBQU4sQ0FBUDtBQUNBLE1BRkQ7O0FBSUEsWUFBT3lmLE1BQU1DLFFBQWI7QUFDQTs7QUFFRDtBQUNBLzJCLFVBQU00ZCxpQkFBTixHQUEwQixVQUFTZSxLQUFULEVBQWdCN0MsWUFBaEIsRUFBOEI7QUFDdkQsVUFBSzdDLFVBQUwsQ0FBZ0IwRixLQUFoQixFQUF1QjdDLFlBQXZCO0FBQ0EsS0FGRDs7QUFJQTVELFlBQVF1QixNQUFSLENBQWV6WixNQUFNNGQsaUJBQU4sQ0FBd0I1WSxTQUF2QyxFQUFrRDs7QUFFakQ7Ozs7QUFJQTJqQix5QkFBb0IsSUFONkI7O0FBUWpEOzs7O0FBSUE5SyxzQkFBaUIsSUFaZ0M7O0FBY2pENUUsaUJBQVksb0JBQVMwRixLQUFULEVBQWdCN0MsWUFBaEIsRUFBOEI7QUFDekMsVUFBSWlDLEtBQUssSUFBVDtBQUNBQSxTQUFHWSxLQUFILEdBQVdBLEtBQVg7QUFDQVosU0FBR25VLEtBQUgsR0FBV2tTLFlBQVg7QUFDQWlDLFNBQUdrSSxVQUFIO0FBQ0FsSSxTQUFHdVosV0FBSDtBQUNBLE1BcEJnRDs7QUFzQmpEdEUsa0JBQWEscUJBQVNsWCxZQUFULEVBQXVCO0FBQ25DLFdBQUtsUyxLQUFMLEdBQWFrUyxZQUFiO0FBQ0EsTUF4QmdEOztBQTBCakRtSyxpQkFBWSxzQkFBVztBQUN0QixVQUFJbEksS0FBSyxJQUFUO0FBQ0EsVUFBSUMsT0FBT0QsR0FBR0csT0FBSCxFQUFYO0FBQ0EsVUFBSVUsVUFBVWIsR0FBR0ssVUFBSCxFQUFkOztBQUVBLFVBQUlKLEtBQUtpQixPQUFMLEtBQWlCLElBQWpCLElBQXlCLEVBQUVqQixLQUFLaUIsT0FBTCxJQUFnQmxCLEdBQUdZLEtBQUgsQ0FBU2xFLE1BQTNCLENBQTdCLEVBQWlFO0FBQ2hFdUQsWUFBS2lCLE9BQUwsR0FBZUwsUUFBUUssT0FBUixJQUFtQmxCLEdBQUdZLEtBQUgsQ0FBUzlCLE9BQVQsQ0FBaUJwQyxNQUFqQixDQUF3QkMsS0FBeEIsQ0FBOEIsQ0FBOUIsRUFBaUNtSCxFQUFuRTtBQUNBO0FBQ0QsVUFBSTdELEtBQUttQixPQUFMLEtBQWlCLElBQWpCLElBQXlCLEVBQUVuQixLQUFLbUIsT0FBTCxJQUFnQnBCLEdBQUdZLEtBQUgsQ0FBU2xFLE1BQTNCLENBQTdCLEVBQWlFO0FBQ2hFdUQsWUFBS21CLE9BQUwsR0FBZVAsUUFBUU8sT0FBUixJQUFtQnBCLEdBQUdZLEtBQUgsQ0FBUzlCLE9BQVQsQ0FBaUJwQyxNQUFqQixDQUF3Qk8sS0FBeEIsQ0FBOEIsQ0FBOUIsRUFBaUM2RyxFQUFuRTtBQUNBO0FBQ0QsTUFyQ2dEOztBQXVDakR6RCxpQkFBWSxzQkFBVztBQUN0QixhQUFPLEtBQUtPLEtBQUwsQ0FBV25ELElBQVgsQ0FBZ0JLLFFBQWhCLENBQXlCLEtBQUtqUyxLQUE5QixDQUFQO0FBQ0EsTUF6Q2dEOztBQTJDakRzVSxjQUFTLG1CQUFXO0FBQ25CLGFBQU8sS0FBS1MsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixLQUFLcFgsS0FBL0IsQ0FBUDtBQUNBLE1BN0NnRDs7QUErQ2pEb1Ysb0JBQWUsdUJBQVN1WSxPQUFULEVBQWtCO0FBQ2hDLGFBQU8sS0FBSzVZLEtBQUwsQ0FBV2xFLE1BQVgsQ0FBa0I4YyxPQUFsQixDQUFQO0FBQ0EsTUFqRGdEOztBQW1EakRqWixZQUFPLGlCQUFXO0FBQ2pCLFdBQUtELE1BQUwsQ0FBWSxJQUFaO0FBQ0EsTUFyRGdEOztBQXVEakQ7OztBQUdBNlcsY0FBUyxtQkFBVztBQUNuQixVQUFJLEtBQUs5QixLQUFULEVBQWdCO0FBQ2ZnRSwyQkFBb0IsS0FBS2hFLEtBQXpCLEVBQWdDLElBQWhDO0FBQ0E7QUFDRCxNQTlEZ0Q7O0FBZ0VqRG9FLHdCQUFtQiw2QkFBVztBQUM3QixVQUFJelosS0FBSyxJQUFUO0FBQ0EsVUFBSWxWLE9BQU9rVixHQUFHNEssa0JBQWQ7QUFDQSxhQUFPOWYsUUFBUSxJQUFJQSxJQUFKLENBQVM7QUFDdkJ3ZixlQUFRdEssR0FBR1ksS0FEWTtBQUV2QlMsc0JBQWVyQixHQUFHblU7QUFGSyxPQUFULENBQWY7QUFJQSxNQXZFZ0Q7O0FBeUVqRDZ0QixxQkFBZ0Isd0JBQVM3dEIsS0FBVCxFQUFnQjtBQUMvQixVQUFJbVUsS0FBSyxJQUFUO0FBQ0EsVUFBSWxWLE9BQU9rVixHQUFHRixlQUFkO0FBQ0EsYUFBT2hWLFFBQVEsSUFBSUEsSUFBSixDQUFTO0FBQ3ZCd2YsZUFBUXRLLEdBQUdZLEtBRFk7QUFFdkJTLHNCQUFlckIsR0FBR25VLEtBRks7QUFHdkJ5VixlQUFRelY7QUFIZSxPQUFULENBQWY7QUFLQSxNQWpGZ0Q7O0FBbUZqRDB0QixrQkFBYSx1QkFBVztBQUN2QixVQUFJdlosS0FBSyxJQUFUO0FBQ0EsVUFBSUMsT0FBT0QsR0FBR0csT0FBSCxFQUFYO0FBQ0EsVUFBSTFDLE9BQU91QyxHQUFHSyxVQUFILEdBQWdCNUMsSUFBaEIsSUFBd0IsRUFBbkM7QUFDQSxVQUFJa2MsV0FBVzFaLEtBQUt4QyxJQUFwQjtBQUNBLFVBQUlsYixDQUFKLEVBQU9tYyxJQUFQOztBQUVBLFdBQUtuYyxJQUFJLENBQUosRUFBT21jLE9BQU9qQixLQUFLemEsTUFBeEIsRUFBZ0NULElBQUltYyxJQUFwQyxFQUEwQyxFQUFFbmMsQ0FBNUMsRUFBK0M7QUFDOUNvM0IsZ0JBQVNwM0IsQ0FBVCxJQUFjbzNCLFNBQVNwM0IsQ0FBVCxLQUFleWQsR0FBRzBaLGNBQUgsQ0FBa0JuM0IsQ0FBbEIsQ0FBN0I7QUFDQTs7QUFFRDBkLFdBQUtZLE9BQUwsR0FBZVosS0FBS1ksT0FBTCxJQUFnQmIsR0FBR3laLGlCQUFILEVBQS9CO0FBQ0EsTUEvRmdEOztBQWlHakRHLHlCQUFvQiw0QkFBUy90QixLQUFULEVBQWdCO0FBQ25DLFVBQUlxZSxVQUFVLEtBQUt3UCxjQUFMLENBQW9CN3RCLEtBQXBCLENBQWQ7QUFDQSxXQUFLc1UsT0FBTCxHQUFlMUMsSUFBZixDQUFvQndULE1BQXBCLENBQTJCcGxCLEtBQTNCLEVBQWtDLENBQWxDLEVBQXFDcWUsT0FBckM7QUFDQSxXQUFLdkosYUFBTCxDQUFtQnVKLE9BQW5CLEVBQTRCcmUsS0FBNUIsRUFBbUMsSUFBbkM7QUFDQSxNQXJHZ0Q7O0FBdUdqRHlwQiw0QkFBdUIsaUNBQVc7QUFDakMsVUFBSXRWLEtBQUssSUFBVDtBQUNBLFVBQUlhLFVBQVViLEdBQUdLLFVBQUgsRUFBZDtBQUNBLFVBQUk1QyxPQUFPb0QsUUFBUXBELElBQVIsS0FBaUJvRCxRQUFRcEQsSUFBUixHQUFlLEVBQWhDLENBQVg7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBSXVDLEdBQUdxVixLQUFILEtBQWE1WCxJQUFqQixFQUF1QjtBQUN0QixXQUFJdUMsR0FBR3FWLEtBQVAsRUFBYztBQUNiO0FBQ0FnRSw0QkFBb0JyWixHQUFHcVYsS0FBdkIsRUFBOEJyVixFQUE5QjtBQUNBOztBQUVEOFkseUJBQWtCcmIsSUFBbEIsRUFBd0J1QyxFQUF4QjtBQUNBQSxVQUFHcVYsS0FBSCxHQUFXNVgsSUFBWDtBQUNBOztBQUVEO0FBQ0E7QUFDQXVDLFNBQUc2WixjQUFIO0FBQ0EsTUE1SGdEOztBQThIakR2WixhQUFRbkcsUUFBUWdPLElBOUhpQzs7QUFnSWpEK04saUJBQVksb0JBQVNELFdBQVQsRUFBc0I7QUFDakMsVUFBSWhXLE9BQU8sS0FBS0UsT0FBTCxFQUFYO0FBQ0EsVUFBSTNGLFdBQVd5RixLQUFLeEMsSUFBTCxJQUFhLEVBQTVCO0FBQ0EsVUFBSWlCLE9BQU9sRSxTQUFTeFgsTUFBcEI7QUFDQSxVQUFJVCxJQUFJLENBQVI7O0FBRUEsYUFBT0EsSUFBSW1jLElBQVgsRUFBaUIsRUFBRW5jLENBQW5CLEVBQXNCO0FBQ3JCaVksZ0JBQVNqWSxDQUFULEVBQVkyekIsVUFBWixDQUF1QkQsV0FBdkI7QUFDQTs7QUFFRCxVQUFJaFcsS0FBS1ksT0FBVCxFQUFrQjtBQUNqQlosWUFBS1ksT0FBTCxDQUFhcVYsVUFBYixDQUF3QkQsV0FBeEI7QUFDQTtBQUNELE1BN0lnRDs7QUErSWpEN1IsV0FBTSxnQkFBVztBQUNoQixVQUFJbkUsT0FBTyxLQUFLRSxPQUFMLEVBQVg7QUFDQSxVQUFJM0YsV0FBV3lGLEtBQUt4QyxJQUFMLElBQWEsRUFBNUI7QUFDQSxVQUFJaUIsT0FBT2xFLFNBQVN4WCxNQUFwQjtBQUNBLFVBQUlULElBQUksQ0FBUjs7QUFFQSxVQUFJMGQsS0FBS1ksT0FBVCxFQUFrQjtBQUNqQlosWUFBS1ksT0FBTCxDQUFhdUQsSUFBYjtBQUNBOztBQUVELGFBQU83aEIsSUFBSW1jLElBQVgsRUFBaUIsRUFBRW5jLENBQW5CLEVBQXNCO0FBQ3JCaVksZ0JBQVNqWSxDQUFULEVBQVk2aEIsSUFBWjtBQUNBO0FBQ0QsTUE1SmdEOztBQThKakQwVix1QkFBa0IsMEJBQVM1UCxPQUFULEVBQWtCO0FBQ25DL1AsY0FBUTRmLEtBQVIsQ0FBYzdQLFFBQVEzSSxNQUF0QixFQUE4QjJJLFFBQVFyRSxjQUFSLElBQTBCLEVBQXhEO0FBQ0EsYUFBT3FFLFFBQVFyRSxjQUFmO0FBQ0EsTUFqS2dEOztBQW1LakRELG9CQUFlLHVCQUFTc0UsT0FBVCxFQUFrQjtBQUNoQyxVQUFJckosVUFBVSxLQUFLRCxLQUFMLENBQVduRCxJQUFYLENBQWdCSyxRQUFoQixDQUF5Qm9NLFFBQVE3SSxhQUFqQyxDQUFkO0FBQ0EsVUFBSXhWLFFBQVFxZSxRQUFRNUksTUFBcEI7QUFDQSxVQUFJUixTQUFTb0osUUFBUXBKLE1BQVIsSUFBa0IsRUFBL0I7QUFDQSxVQUFJbUQsaUJBQWlCOUosUUFBUXNILHFCQUE3QjtBQUNBLFVBQUlzRSxnQkFBZ0I1TCxRQUFRNEwsYUFBNUI7QUFDQSxVQUFJakUsUUFBUW9JLFFBQVEzSSxNQUFwQjs7QUFFQTJJLGNBQVFyRSxjQUFSLEdBQXlCO0FBQ3hCckUsd0JBQWlCTSxNQUFNTixlQURDO0FBRXhCRSxvQkFBYUksTUFBTUosV0FGSztBQUd4QkMsb0JBQWFHLE1BQU1IO0FBSEssT0FBekI7O0FBTUFHLFlBQU1OLGVBQU4sR0FBd0JWLE9BQU9nRixvQkFBUCxHQUE4QmhGLE9BQU9nRixvQkFBckMsR0FBNEQ3QixlQUFlcEQsUUFBUWlGLG9CQUF2QixFQUE2Q2phLEtBQTdDLEVBQW9Ea2EsY0FBY2pFLE1BQU1OLGVBQXBCLENBQXBELENBQXBGO0FBQ0FNLFlBQU1KLFdBQU4sR0FBb0JaLE9BQU9rRixnQkFBUCxHQUEwQmxGLE9BQU9rRixnQkFBakMsR0FBb0QvQixlQUFlcEQsUUFBUW1GLGdCQUF2QixFQUF5Q25hLEtBQXpDLEVBQWdEa2EsY0FBY2pFLE1BQU1KLFdBQXBCLENBQWhELENBQXhFO0FBQ0FJLFlBQU1ILFdBQU4sR0FBb0JiLE9BQU9tRixnQkFBUCxHQUEwQm5GLE9BQU9tRixnQkFBakMsR0FBb0RoQyxlQUFlcEQsUUFBUW9GLGdCQUF2QixFQUF5Q3BhLEtBQXpDLEVBQWdEaVcsTUFBTUgsV0FBdEQsQ0FBeEU7QUFDQSxNQXBMZ0Q7O0FBc0xqRDs7O0FBR0FrWSxxQkFBZ0IsMEJBQVc7QUFDMUIsVUFBSTdaLEtBQUssSUFBVDtBQUNBLFVBQUlDLE9BQU9ELEdBQUdHLE9BQUgsRUFBWDtBQUNBLFVBQUkxQyxPQUFPdUMsR0FBR0ssVUFBSCxHQUFnQjVDLElBQTNCO0FBQ0EsVUFBSXVjLFVBQVUvWixLQUFLeEMsSUFBTCxDQUFVemEsTUFBeEI7QUFDQSxVQUFJaTNCLFVBQVV4YyxLQUFLemEsTUFBbkI7O0FBRUEsVUFBSWkzQixVQUFVRCxPQUFkLEVBQXVCO0FBQ3RCL1osWUFBS3hDLElBQUwsQ0FBVXdULE1BQVYsQ0FBaUJnSixPQUFqQixFQUEwQkQsVUFBVUMsT0FBcEM7QUFDQSxPQUZELE1BRU8sSUFBSUEsVUFBVUQsT0FBZCxFQUF1QjtBQUM3QmhhLFVBQUdrYSxjQUFILENBQWtCRixPQUFsQixFQUEyQkMsVUFBVUQsT0FBckM7QUFDQTtBQUNELE1Bck1nRDs7QUF1TWpEOzs7QUFHQUUscUJBQWdCLHdCQUFTNWEsS0FBVCxFQUFnQkwsS0FBaEIsRUFBdUI7QUFDdEMsV0FBSyxJQUFJMWMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJMGMsS0FBcEIsRUFBMkIsRUFBRTFjLENBQTdCLEVBQWdDO0FBQy9CLFlBQUtxM0Isa0JBQUwsQ0FBd0J0YSxRQUFRL2MsQ0FBaEM7QUFDQTtBQUNELE1BOU1nRDs7QUFnTmpEOzs7QUFHQTQzQixpQkFBWSxzQkFBVztBQUN0QixXQUFLRCxjQUFMLENBQW9CLEtBQUs3WixVQUFMLEdBQWtCNUMsSUFBbEIsQ0FBdUJ6YSxNQUF2QixHQUFnQyxDQUFwRCxFQUF1RG9FLFVBQVVwRSxNQUFqRTtBQUNBLE1Bck5nRDs7QUF1TmpEOzs7QUFHQW8zQixnQkFBVyxxQkFBVztBQUNyQixXQUFLamEsT0FBTCxHQUFlMUMsSUFBZixDQUFvQjRjLEdBQXBCO0FBQ0EsTUE1TmdEOztBQThOakQ7OztBQUdBQyxrQkFBYSx1QkFBVztBQUN2QixXQUFLbmEsT0FBTCxHQUFlMUMsSUFBZixDQUFvQjhjLEtBQXBCO0FBQ0EsTUFuT2dEOztBQXFPakQ7OztBQUdBQyxtQkFBYyxzQkFBU2xiLEtBQVQsRUFBZ0JMLEtBQWhCLEVBQXVCO0FBQ3BDLFdBQUtrQixPQUFMLEdBQWUxQyxJQUFmLENBQW9Cd1QsTUFBcEIsQ0FBMkIzUixLQUEzQixFQUFrQ0wsS0FBbEM7QUFDQSxXQUFLaWIsY0FBTCxDQUFvQjVhLEtBQXBCLEVBQTJCbFksVUFBVXBFLE1BQVYsR0FBbUIsQ0FBOUM7QUFDQSxNQTNPZ0Q7O0FBNk9qRDs7O0FBR0F5M0Isb0JBQWUseUJBQVc7QUFDekIsV0FBS1AsY0FBTCxDQUFvQixDQUFwQixFQUF1Qjl5QixVQUFVcEUsTUFBakM7QUFDQTtBQWxQZ0QsS0FBbEQ7O0FBcVBBZixVQUFNNGQsaUJBQU4sQ0FBd0JuRSxNQUF4QixHQUFpQ3ZCLFFBQVF1Z0IsUUFBekM7QUFDQSxJQXBVRDtBQXNVQyxHQTNVdUYsRUEyVXRGLEVBQUMsTUFBSyxFQUFOLEVBM1VzRixDQTlxSml1QixFQXkvSjV5QixJQUFHLENBQUMsVUFBU2o0QixPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDakQ7O0FBRUEsT0FBSXlZLFVBQVUxWCxRQUFRLEVBQVIsQ0FBZDs7QUFFQWQsVUFBT0QsT0FBUCxHQUFpQjtBQUNoQjs7O0FBR0E2YSxVQUFNLGNBQVNvZSxLQUFULEVBQWdCcDBCLE1BQWhCLEVBQXdCO0FBQzdCLFlBQU80VCxRQUFRNGYsS0FBUixDQUFjLEtBQUtZLEtBQUwsTUFBZ0IsS0FBS0EsS0FBTCxJQUFjLEVBQTlCLENBQWQsRUFBaURwMEIsTUFBakQsQ0FBUDtBQUNBO0FBTmUsSUFBakI7QUFTQyxHQWRlLEVBY2QsRUFBQyxNQUFLLEVBQU4sRUFkYyxDQXovSnl5QixFQXVnSzV5QixJQUFHLENBQUMsVUFBUzlELE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRDs7QUFFQSxPQUFJazVCLFFBQVFuNEIsUUFBUSxDQUFSLENBQVo7QUFDQSxPQUFJMFgsVUFBVTFYLFFBQVEsRUFBUixDQUFkOztBQUVBLFlBQVNvNEIsV0FBVCxDQUFxQnZiLEtBQXJCLEVBQTRCd2IsSUFBNUIsRUFBa0NoWixLQUFsQyxFQUF5Q2laLElBQXpDLEVBQStDO0FBQzlDLFFBQUkxVSxPQUFPMkosT0FBTzNKLElBQVAsQ0FBWXZFLEtBQVosQ0FBWDtBQUNBLFFBQUl2ZixDQUFKLEVBQU9tYyxJQUFQLEVBQWFwRixHQUFiLEVBQWtCMGhCLE1BQWxCLEVBQTBCQyxNQUExQixFQUFrQ3B3QixNQUFsQyxFQUEwQ0MsSUFBMUMsRUFBZ0Rvd0IsRUFBaEQsRUFBb0RDLEVBQXBEOztBQUVBLFNBQUs1NEIsSUFBSSxDQUFKLEVBQU9tYyxPQUFPMkgsS0FBS3JqQixNQUF4QixFQUFnQ1QsSUFBSW1jLElBQXBDLEVBQTBDLEVBQUVuYyxDQUE1QyxFQUErQztBQUM5QytXLFdBQU0rTSxLQUFLOWpCLENBQUwsQ0FBTjs7QUFFQXNJLGNBQVNpWCxNQUFNeEksR0FBTixDQUFUOztBQUVBO0FBQ0E7QUFDQSxTQUFJLENBQUN3aEIsS0FBSzl2QixjQUFMLENBQW9Cc08sR0FBcEIsQ0FBTCxFQUErQjtBQUM5QndoQixXQUFLeGhCLEdBQUwsSUFBWXpPLE1BQVo7QUFDQTs7QUFFRG13QixjQUFTRixLQUFLeGhCLEdBQUwsQ0FBVDs7QUFFQSxTQUFJMGhCLFdBQVdud0IsTUFBWCxJQUFxQnlPLElBQUksQ0FBSixNQUFXLEdBQXBDLEVBQXlDO0FBQ3hDO0FBQ0E7O0FBRUQsU0FBSSxDQUFDZ0csTUFBTXRVLGNBQU4sQ0FBcUJzTyxHQUFyQixDQUFMLEVBQWdDO0FBQy9CZ0csWUFBTWhHLEdBQU4sSUFBYTBoQixNQUFiO0FBQ0E7O0FBRURDLGNBQVMzYixNQUFNaEcsR0FBTixDQUFUOztBQUVBeE8sbUJBQWNELE1BQWQseUNBQWNBLE1BQWQ7O0FBRUEsU0FBSUMsaUJBQWdCbXdCLE1BQWhCLHlDQUFnQkEsTUFBaEIsRUFBSixFQUE0QjtBQUMzQixVQUFJbndCLFNBQVMsUUFBYixFQUF1QjtBQUN0Qm93QixZQUFLTixNQUFNSyxNQUFOLENBQUw7QUFDQSxXQUFJQyxHQUFHNTBCLEtBQVAsRUFBYztBQUNiNjBCLGFBQUtQLE1BQU0vdkIsTUFBTixDQUFMO0FBQ0EsWUFBSXN3QixHQUFHNzBCLEtBQVAsRUFBYztBQUNidzBCLGNBQUt4aEIsR0FBTCxJQUFZNmhCLEdBQUdoeEIsR0FBSCxDQUFPK3dCLEVBQVAsRUFBV0gsSUFBWCxFQUFpQnQzQixTQUFqQixFQUFaO0FBQ0E7QUFDQTtBQUNEO0FBQ0QsT0FURCxNQVNPLElBQUlxSCxTQUFTLFFBQVQsSUFBcUJzd0IsU0FBU0gsTUFBVCxDQUFyQixJQUF5Q0csU0FBU3Z3QixNQUFULENBQTdDLEVBQStEO0FBQ3JFaXdCLFlBQUt4aEIsR0FBTCxJQUFZMmhCLFNBQVMsQ0FBQ3B3QixTQUFTb3dCLE1BQVYsSUFBb0JGLElBQXpDO0FBQ0E7QUFDQTtBQUNEOztBQUVERCxVQUFLeGhCLEdBQUwsSUFBWXpPLE1BQVo7QUFDQTtBQUNEOztBQUVELE9BQUkwUCxVQUFVLFNBQVZBLE9BQVUsQ0FBUzhnQixhQUFULEVBQXdCO0FBQ3JDbGhCLFlBQVF1QixNQUFSLENBQWUsSUFBZixFQUFxQjJmLGFBQXJCO0FBQ0EsU0FBS25nQixVQUFMLENBQWdCZ0YsS0FBaEIsQ0FBc0IsSUFBdEIsRUFBNEI5WSxTQUE1QjtBQUNBLElBSEQ7O0FBS0ErUyxXQUFRdUIsTUFBUixDQUFlbkIsUUFBUXRULFNBQXZCLEVBQWtDOztBQUVqQ2lVLGdCQUFZLHNCQUFXO0FBQ3RCLFVBQUtxTSxNQUFMLEdBQWMsS0FBZDtBQUNBLEtBSmdDOztBQU1qQzFGLFdBQU8saUJBQVc7QUFDakIsU0FBSTdCLEtBQUssSUFBVDtBQUNBLFNBQUksQ0FBQ0EsR0FBR3NiLEtBQVIsRUFBZTtBQUNkdGIsU0FBR3NiLEtBQUgsR0FBV25oQixRQUFRelAsS0FBUixDQUFjc1YsR0FBR3VCLE1BQWpCLENBQVg7QUFDQTtBQUNEdkIsUUFBR29ZLE1BQUgsR0FBWSxFQUFaO0FBQ0EsWUFBT3BZLEVBQVA7QUFDQSxLQWJnQzs7QUFlakNrVyxnQkFBWSxvQkFBUzZFLElBQVQsRUFBZTtBQUMxQixTQUFJL2EsS0FBSyxJQUFUO0FBQ0EsU0FBSThCLFFBQVE5QixHQUFHdUIsTUFBZjtBQUNBLFNBQUlqQyxRQUFRVSxHQUFHb1ksTUFBZjtBQUNBLFNBQUkwQyxPQUFPOWEsR0FBR3NiLEtBQWQ7O0FBRUE7QUFDQSxTQUFJLENBQUN4WixLQUFELElBQVVpWixTQUFTLENBQXZCLEVBQTBCO0FBQ3pCL2EsU0FBR3NiLEtBQUgsR0FBV3haLEtBQVg7QUFDQTlCLFNBQUdvWSxNQUFILEdBQVksSUFBWjtBQUNBLGFBQU9wWSxFQUFQO0FBQ0E7O0FBRUQsU0FBSSxDQUFDOGEsSUFBTCxFQUFXO0FBQ1ZBLGFBQU85YSxHQUFHc2IsS0FBSCxHQUFXLEVBQWxCO0FBQ0E7O0FBRUQsU0FBSSxDQUFDaGMsS0FBTCxFQUFZO0FBQ1hBLGNBQVFVLEdBQUdvWSxNQUFILEdBQVksRUFBcEI7QUFDQTs7QUFFRHlDLGlCQUFZdmIsS0FBWixFQUFtQndiLElBQW5CLEVBQXlCaFosS0FBekIsRUFBZ0NpWixJQUFoQzs7QUFFQSxZQUFPL2EsRUFBUDtBQUNBLEtBdkNnQzs7QUF5Q2pDdWIscUJBQWlCLDJCQUFXO0FBQzNCLFlBQU87QUFDTnJzQixTQUFHLEtBQUtxUyxNQUFMLENBQVlyUyxDQURUO0FBRU5MLFNBQUcsS0FBSzBTLE1BQUwsQ0FBWTFTO0FBRlQsTUFBUDtBQUlBLEtBOUNnQzs7QUFnRGpDMnNCLGNBQVUsb0JBQVc7QUFDcEIsWUFBT3JoQixRQUFRc2hCLFFBQVIsQ0FBaUIsS0FBS2xhLE1BQUwsQ0FBWXJTLENBQTdCLEtBQW1DaUwsUUFBUXNoQixRQUFSLENBQWlCLEtBQUtsYSxNQUFMLENBQVkxUyxDQUE3QixDQUExQztBQUNBO0FBbERnQyxJQUFsQzs7QUFxREEwTCxXQUFRbUIsTUFBUixHQUFpQnZCLFFBQVF1Z0IsUUFBekI7O0FBRUEvNEIsVUFBT0QsT0FBUCxHQUFpQjZZLE9BQWpCO0FBRUMsR0FySGUsRUFxSGQsRUFBQyxLQUFJLENBQUwsRUFBTyxNQUFLLEVBQVosRUFySGMsQ0F2Z0t5eUIsRUE0bkt0eUIsSUFBRyxDQUFDLFVBQVM5WCxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDdkQ7QUFDQTtBQUNBOztBQUVBLE9BQUlrNUIsUUFBUW40QixRQUFRLENBQVIsQ0FBWjtBQUNBLE9BQUk2WCxXQUFXN1gsUUFBUSxFQUFSLENBQWY7QUFDQSxPQUFJMFgsVUFBVTFYLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSXFZLGVBQWVyWSxRQUFRLEVBQVIsQ0FBbkI7O0FBRUFkLFVBQU9ELE9BQVAsR0FBaUIsWUFBVzs7QUFFM0I7O0FBRUF5WSxZQUFRMlgsV0FBUixHQUFzQixZQUFTLGlCQUFtQjtBQUNqRCxZQUFPM1gsUUFBUTRmLEtBQVIsQ0FBYzVmLFFBQVF6UCxLQUFSLENBQWN0RCxVQUFVLENBQVYsQ0FBZCxDQUFkLEVBQTJDLEdBQUczQyxLQUFILENBQVMxQixJQUFULENBQWNxRSxTQUFkLEVBQXlCLENBQXpCLENBQTNDLEVBQXdFO0FBQzlFczBCLGNBQVEsZ0JBQVNwaUIsR0FBVCxFQUFjek8sTUFBZCxFQUFzQkQsTUFBdEIsRUFBOEJrVSxPQUE5QixFQUF1QztBQUM5QyxXQUFJNmMsT0FBTzl3QixPQUFPeU8sR0FBUCxLQUFlLEVBQTFCO0FBQ0EsV0FBSXNpQixPQUFPaHhCLE9BQU8wTyxHQUFQLENBQVg7O0FBRUEsV0FBSUEsUUFBUSxRQUFaLEVBQXNCO0FBQ3JCO0FBQ0F6TyxlQUFPeU8sR0FBUCxJQUFjYSxRQUFRMGhCLFVBQVIsQ0FBbUJGLElBQW5CLEVBQXlCQyxJQUF6QixDQUFkO0FBQ0EsUUFIRCxNQUdPLElBQUl0aUIsUUFBUSxPQUFaLEVBQXFCO0FBQzNCO0FBQ0F6TyxlQUFPeU8sR0FBUCxJQUFjYSxRQUFRNGYsS0FBUixDQUFjNEIsSUFBZCxFQUFvQixDQUFDN2dCLGFBQWFnaEIsZ0JBQWIsQ0FBOEJGLEtBQUs5d0IsSUFBbkMsQ0FBRCxFQUEyQzh3QixJQUEzQyxDQUFwQixDQUFkO0FBQ0EsUUFITSxNQUdBO0FBQ056aEIsZ0JBQVE0aEIsT0FBUixDQUFnQnppQixHQUFoQixFQUFxQnpPLE1BQXJCLEVBQTZCRCxNQUE3QixFQUFxQ2tVLE9BQXJDO0FBQ0E7QUFDRDtBQWQ2RSxNQUF4RSxDQUFQO0FBZ0JBLEtBakJEOztBQW1CQTNFLFlBQVEwaEIsVUFBUixHQUFxQixZQUFTLGlCQUFtQjtBQUNoRCxZQUFPMWhCLFFBQVE0ZixLQUFSLENBQWM1ZixRQUFRelAsS0FBUixDQUFjdEQsVUFBVSxDQUFWLENBQWQsQ0FBZCxFQUEyQyxHQUFHM0MsS0FBSCxDQUFTMUIsSUFBVCxDQUFjcUUsU0FBZCxFQUF5QixDQUF6QixDQUEzQyxFQUF3RTtBQUM5RXMwQixjQUFRLGdCQUFTcGlCLEdBQVQsRUFBY3pPLE1BQWQsRUFBc0JELE1BQXRCLEVBQThCa1UsT0FBOUIsRUFBdUM7QUFDOUMsV0FBSXhGLFFBQVEsT0FBUixJQUFtQkEsUUFBUSxPQUEvQixFQUF3QztBQUN2QyxZQUFJMGlCLE9BQU9weEIsT0FBTzBPLEdBQVAsRUFBWXRXLE1BQXZCO0FBQ0EsWUFBSVQsQ0FBSixFQUFPdUksSUFBUCxFQUFhakcsS0FBYjs7QUFFQSxZQUFJLENBQUNnRyxPQUFPeU8sR0FBUCxDQUFMLEVBQWtCO0FBQ2pCek8sZ0JBQU95TyxHQUFQLElBQWMsRUFBZDtBQUNBOztBQUVELGFBQUsvVyxJQUFJLENBQVQsRUFBWUEsSUFBSXk1QixJQUFoQixFQUFzQixFQUFFejVCLENBQXhCLEVBQTJCO0FBQzFCc0MsaUJBQVErRixPQUFPME8sR0FBUCxFQUFZL1csQ0FBWixDQUFSO0FBQ0F1SSxnQkFBT3FQLFFBQVE4SixjQUFSLENBQXVCcGYsTUFBTWlHLElBQTdCLEVBQW1Dd08sUUFBUSxPQUFSLEdBQWtCLFVBQWxCLEdBQStCLFFBQWxFLENBQVA7O0FBRUEsYUFBSS9XLEtBQUtzSSxPQUFPeU8sR0FBUCxFQUFZdFcsTUFBckIsRUFBNkI7QUFDNUI2SCxpQkFBT3lPLEdBQVAsRUFBWThKLElBQVosQ0FBaUIsRUFBakI7QUFDQTs7QUFFRCxhQUFJLENBQUN2WSxPQUFPeU8sR0FBUCxFQUFZL1csQ0FBWixFQUFldUksSUFBaEIsSUFBeUJqRyxNQUFNaUcsSUFBTixJQUFjakcsTUFBTWlHLElBQU4sS0FBZUQsT0FBT3lPLEdBQVAsRUFBWS9XLENBQVosRUFBZXVJLElBQXpFLEVBQWdGO0FBQy9FO0FBQ0E7QUFDQXFQLGtCQUFRNGYsS0FBUixDQUFjbHZCLE9BQU95TyxHQUFQLEVBQVkvVyxDQUFaLENBQWQsRUFBOEIsQ0FBQ3VZLGFBQWFnaEIsZ0JBQWIsQ0FBOEJoeEIsSUFBOUIsQ0FBRCxFQUFzQ2pHLEtBQXRDLENBQTlCO0FBQ0EsVUFKRCxNQUlPO0FBQ047QUFDQXNWLGtCQUFRNGYsS0FBUixDQUFjbHZCLE9BQU95TyxHQUFQLEVBQVkvVyxDQUFaLENBQWQsRUFBOEJzQyxLQUE5QjtBQUNBO0FBQ0Q7QUFDRCxRQXpCRCxNQXlCTztBQUNOc1YsZ0JBQVE0aEIsT0FBUixDQUFnQnppQixHQUFoQixFQUFxQnpPLE1BQXJCLEVBQTZCRCxNQUE3QixFQUFxQ2tVLE9BQXJDO0FBQ0E7QUFDRDtBQTlCNkUsTUFBeEUsQ0FBUDtBQWdDQSxLQWpDRDs7QUFtQ0EzRSxZQUFROGhCLEtBQVIsR0FBZ0IsVUFBU0MsVUFBVCxFQUFxQkMsY0FBckIsRUFBcUM7QUFDcEQsU0FBSWhpQixRQUFRMk4sT0FBUixDQUFnQm9VLFVBQWhCLEtBQStCdHdCLE1BQU0zRSxTQUFOLENBQWdCNmxCLE1BQW5ELEVBQTJEO0FBQzFELGFBQU9vUCxXQUFXcFAsTUFBWCxDQUFrQnFQLGNBQWxCLENBQVA7QUFDQTtBQUNELFNBQUlDLFdBQVcsRUFBZjs7QUFFQWppQixhQUFRMkssSUFBUixDQUFhb1gsVUFBYixFQUF5QixVQUFTMWUsSUFBVCxFQUFlO0FBQ3ZDLFVBQUkyZSxlQUFlM2UsSUFBZixDQUFKLEVBQTBCO0FBQ3pCNGUsZ0JBQVNoWixJQUFULENBQWM1RixJQUFkO0FBQ0E7QUFDRCxNQUpEOztBQU1BLFlBQU80ZSxRQUFQO0FBQ0EsS0FiRDtBQWNBamlCLFlBQVE2VyxTQUFSLEdBQW9CcGxCLE1BQU0zRSxTQUFOLENBQWdCK3BCLFNBQWhCLEdBQ25CLFVBQVMrSCxLQUFULEVBQWdCckgsUUFBaEIsRUFBMEJpSixLQUExQixFQUFpQztBQUNoQyxZQUFPNUIsTUFBTS9ILFNBQU4sQ0FBZ0JVLFFBQWhCLEVBQTBCaUosS0FBMUIsQ0FBUDtBQUNBLEtBSGtCLEdBSW5CLFVBQVM1QixLQUFULEVBQWdCckgsUUFBaEIsRUFBMEJpSixLQUExQixFQUFpQztBQUNoQ0EsYUFBUUEsVUFBVWoxQixTQUFWLEdBQXNCcXpCLEtBQXRCLEdBQThCNEIsS0FBdEM7QUFDQSxVQUFLLElBQUlwNEIsSUFBSSxDQUFSLEVBQVdtYyxPQUFPcWEsTUFBTS8xQixNQUE3QixFQUFxQ1QsSUFBSW1jLElBQXpDLEVBQStDLEVBQUVuYyxDQUFqRCxFQUFvRDtBQUNuRCxVQUFJbXZCLFNBQVMzdUIsSUFBVCxDQUFjNDNCLEtBQWQsRUFBcUI1QixNQUFNeDJCLENBQU4sQ0FBckIsRUFBK0JBLENBQS9CLEVBQWtDdzJCLEtBQWxDLENBQUosRUFBOEM7QUFDN0MsY0FBT3gyQixDQUFQO0FBQ0E7QUFDRDtBQUNELFlBQU8sQ0FBQyxDQUFSO0FBQ0EsS0FaRjtBQWFBNFgsWUFBUWtpQixhQUFSLEdBQXdCLFVBQVNDLGFBQVQsRUFBd0JILGNBQXhCLEVBQXdDSSxVQUF4QyxFQUFvRDtBQUMzRTtBQUNBLFNBQUlwaUIsUUFBUWlGLGFBQVIsQ0FBc0JtZCxVQUF0QixDQUFKLEVBQXVDO0FBQ3RDQSxtQkFBYSxDQUFDLENBQWQ7QUFDQTtBQUNELFVBQUssSUFBSWg2QixJQUFJZzZCLGFBQWEsQ0FBMUIsRUFBNkJoNkIsSUFBSSs1QixjQUFjdDVCLE1BQS9DLEVBQXVEVCxHQUF2RCxFQUE0RDtBQUMzRCxVQUFJaTZCLGNBQWNGLGNBQWMvNUIsQ0FBZCxDQUFsQjtBQUNBLFVBQUk0NUIsZUFBZUssV0FBZixDQUFKLEVBQWlDO0FBQ2hDLGNBQU9BLFdBQVA7QUFDQTtBQUNEO0FBQ0QsS0FYRDtBQVlBcmlCLFlBQVFzaUIsaUJBQVIsR0FBNEIsVUFBU0gsYUFBVCxFQUF3QkgsY0FBeEIsRUFBd0NJLFVBQXhDLEVBQW9EO0FBQy9FO0FBQ0EsU0FBSXBpQixRQUFRaUYsYUFBUixDQUFzQm1kLFVBQXRCLENBQUosRUFBdUM7QUFDdENBLG1CQUFhRCxjQUFjdDVCLE1BQTNCO0FBQ0E7QUFDRCxVQUFLLElBQUlULElBQUlnNkIsYUFBYSxDQUExQixFQUE2Qmg2QixLQUFLLENBQWxDLEVBQXFDQSxHQUFyQyxFQUEwQztBQUN6QyxVQUFJaTZCLGNBQWNGLGNBQWMvNUIsQ0FBZCxDQUFsQjtBQUNBLFVBQUk0NUIsZUFBZUssV0FBZixDQUFKLEVBQWlDO0FBQ2hDLGNBQU9BLFdBQVA7QUFDQTtBQUNEO0FBQ0QsS0FYRDs7QUFhQTtBQUNBcmlCLFlBQVFzaEIsUUFBUixHQUFtQixVQUFTcjVCLENBQVQsRUFBWTtBQUM5QixZQUFPLENBQUMrQyxNQUFNVCxXQUFXdEMsQ0FBWCxDQUFOLENBQUQsSUFBeUJnNUIsU0FBU2g1QixDQUFULENBQWhDO0FBQ0EsS0FGRDtBQUdBK1gsWUFBUXVpQixZQUFSLEdBQXVCLFVBQVN4dEIsQ0FBVCxFQUFZTCxDQUFaLEVBQWU4dEIsT0FBZixFQUF3QjtBQUM5QyxZQUFPaDRCLEtBQUt3bEIsR0FBTCxDQUFTamIsSUFBSUwsQ0FBYixJQUFrQjh0QixPQUF6QjtBQUNBLEtBRkQ7QUFHQXhpQixZQUFReWlCLFdBQVIsR0FBc0IsVUFBUzF0QixDQUFULEVBQVl5dEIsT0FBWixFQUFxQjtBQUMxQyxTQUFJRSxVQUFVbDRCLEtBQUtDLEtBQUwsQ0FBV3NLLENBQVgsQ0FBZDtBQUNBLFlBQVUydEIsVUFBVUYsT0FBWCxHQUFzQnp0QixDQUF2QixJQUErQjJ0QixVQUFVRixPQUFYLEdBQXNCenRCLENBQTVEO0FBQ0EsS0FIRDtBQUlBaUwsWUFBUXJVLEdBQVIsR0FBYyxVQUFTaXpCLEtBQVQsRUFBZ0I7QUFDN0IsWUFBT0EsTUFBTTNFLE1BQU4sQ0FBYSxVQUFTdHVCLEdBQVQsRUFBY2dCLEtBQWQsRUFBcUI7QUFDeEMsVUFBSSxDQUFDM0IsTUFBTTJCLEtBQU4sQ0FBTCxFQUFtQjtBQUNsQixjQUFPbkMsS0FBS21CLEdBQUwsQ0FBU0EsR0FBVCxFQUFjZ0IsS0FBZCxDQUFQO0FBQ0E7QUFDRCxhQUFPaEIsR0FBUDtBQUNBLE1BTE0sRUFLSjRtQixPQUFPb1EsaUJBTEgsQ0FBUDtBQU1BLEtBUEQ7QUFRQTNpQixZQUFRdFUsR0FBUixHQUFjLFVBQVNrekIsS0FBVCxFQUFnQjtBQUM3QixZQUFPQSxNQUFNM0UsTUFBTixDQUFhLFVBQVN2dUIsR0FBVCxFQUFjaUIsS0FBZCxFQUFxQjtBQUN4QyxVQUFJLENBQUMzQixNQUFNMkIsS0FBTixDQUFMLEVBQW1CO0FBQ2xCLGNBQU9uQyxLQUFLa0IsR0FBTCxDQUFTQSxHQUFULEVBQWNpQixLQUFkLENBQVA7QUFDQTtBQUNELGFBQU9qQixHQUFQO0FBQ0EsTUFMTSxFQUtKNm1CLE9BQU9xUSxpQkFMSCxDQUFQO0FBTUEsS0FQRDtBQVFBNWlCLFlBQVE2aUIsSUFBUixHQUFlcjRCLEtBQUtxNEIsSUFBTCxHQUNkLFVBQVM5dEIsQ0FBVCxFQUFZO0FBQ1gsWUFBT3ZLLEtBQUtxNEIsSUFBTCxDQUFVOXRCLENBQVYsQ0FBUDtBQUNBLEtBSGEsR0FJZCxVQUFTQSxDQUFULEVBQVk7QUFDWEEsU0FBSSxDQUFDQSxDQUFMLENBRFcsQ0FDSDtBQUNSLFNBQUlBLE1BQU0sQ0FBTixJQUFXL0osTUFBTStKLENBQU4sQ0FBZixFQUF5QjtBQUN4QixhQUFPQSxDQUFQO0FBQ0E7QUFDRCxZQUFPQSxJQUFJLENBQUosR0FBUSxDQUFSLEdBQVksQ0FBQyxDQUFwQjtBQUNBLEtBVkY7QUFXQWlMLFlBQVE4aUIsS0FBUixHQUFnQnQ0QixLQUFLczRCLEtBQUwsR0FDZixVQUFTL3RCLENBQVQsRUFBWTtBQUNYLFlBQU92SyxLQUFLczRCLEtBQUwsQ0FBVy90QixDQUFYLENBQVA7QUFDQSxLQUhjLEdBSWYsVUFBU0EsQ0FBVCxFQUFZO0FBQ1gsU0FBSWd1QixXQUFXdjRCLEtBQUt3NEIsR0FBTCxDQUFTanVCLENBQVQsSUFBY3ZLLEtBQUt5NEIsTUFBbEMsQ0FEVyxDQUMrQjtBQUMxQztBQUNBO0FBQ0EsU0FBSUMsWUFBWTE0QixLQUFLQyxLQUFMLENBQVdzNEIsUUFBWCxDQUFoQjtBQUNBLFNBQUlJLGNBQWNwdUIsTUFBTXZLLEtBQUtpRSxHQUFMLENBQVMsRUFBVCxFQUFheTBCLFNBQWIsQ0FBeEI7O0FBRUEsWUFBT0MsY0FBY0QsU0FBZCxHQUEwQkgsUUFBakM7QUFDQSxLQVpGO0FBYUEvaUIsWUFBUW9qQixTQUFSLEdBQW9CLFVBQVNyekIsT0FBVCxFQUFrQjtBQUNyQyxZQUFPQSxXQUFXdkYsS0FBS3dMLEVBQUwsR0FBVSxHQUFyQixDQUFQO0FBQ0EsS0FGRDtBQUdBZ0ssWUFBUXFqQixTQUFSLEdBQW9CLFVBQVNDLE9BQVQsRUFBa0I7QUFDckMsWUFBT0EsV0FBVyxNQUFNOTRCLEtBQUt3TCxFQUF0QixDQUFQO0FBQ0EsS0FGRDtBQUdBO0FBQ0FnSyxZQUFRdWpCLGlCQUFSLEdBQTRCLFVBQVNDLFdBQVQsRUFBc0JDLFVBQXRCLEVBQWtDO0FBQzdELFNBQUlDLHNCQUFzQkQsV0FBVzF1QixDQUFYLEdBQWV5dUIsWUFBWXp1QixDQUFyRDtBQUNBLFNBQUk0dUIsc0JBQXNCRixXQUFXL3VCLENBQVgsR0FBZTh1QixZQUFZOXVCLENBQXJEO0FBQ0EsU0FBSWt2QiwyQkFBMkJwNUIsS0FBS3lMLElBQUwsQ0FBVXl0QixzQkFBc0JBLG1CQUF0QixHQUE0Q0Msc0JBQXNCQSxtQkFBNUUsQ0FBL0I7O0FBRUEsU0FBSXBQLFFBQVEvcEIsS0FBS3VMLEtBQUwsQ0FBVzR0QixtQkFBWCxFQUFnQ0QsbUJBQWhDLENBQVo7O0FBRUEsU0FBSW5QLFFBQVMsQ0FBQyxHQUFELEdBQU8vcEIsS0FBS3dMLEVBQXpCLEVBQThCO0FBQzdCdWUsZUFBUyxNQUFNL3BCLEtBQUt3TCxFQUFwQixDQUQ2QixDQUNMO0FBQ3hCOztBQUVELFlBQU87QUFDTnVlLGFBQU9BLEtBREQ7QUFFTk8sZ0JBQVU4TztBQUZKLE1BQVA7QUFJQSxLQWZEO0FBZ0JBNWpCLFlBQVE2akIscUJBQVIsR0FBZ0MsVUFBU0MsR0FBVCxFQUFjQyxHQUFkLEVBQW1CO0FBQ2xELFlBQU92NUIsS0FBS3lMLElBQUwsQ0FBVXpMLEtBQUtpRSxHQUFMLENBQVNzMUIsSUFBSWh2QixDQUFKLEdBQVErdUIsSUFBSS91QixDQUFyQixFQUF3QixDQUF4QixJQUE2QnZLLEtBQUtpRSxHQUFMLENBQVNzMUIsSUFBSXJ2QixDQUFKLEdBQVFvdkIsSUFBSXB2QixDQUFyQixFQUF3QixDQUF4QixDQUF2QyxDQUFQO0FBQ0EsS0FGRDtBQUdBc0wsWUFBUWdrQixVQUFSLEdBQXFCLFVBQVNDLFVBQVQsRUFBcUI7QUFDekMsWUFBUUEsYUFBYSxDQUFiLEtBQW1CLENBQXBCLEdBQXlCLENBQXpCLEdBQTZCLEdBQXBDO0FBQ0EsS0FGRDtBQUdBamtCLFlBQVErUyxXQUFSLEdBQXNCLFVBQVNtUixVQUFULEVBQXFCQyxXQUFyQixFQUFrQ0MsVUFBbEMsRUFBOENsOEIsQ0FBOUMsRUFBaUQ7QUFDdEU7QUFDQTs7QUFFQTs7QUFFQSxTQUFJaXJCLFdBQVcrUSxXQUFXMVksSUFBWCxHQUFrQjJZLFdBQWxCLEdBQWdDRCxVQUEvQztBQUNBLFNBQUlHLFVBQVVGLFdBQWQ7QUFDQSxTQUFJOWUsT0FBTytlLFdBQVc1WSxJQUFYLEdBQWtCMlksV0FBbEIsR0FBZ0NDLFVBQTNDOztBQUVBLFNBQUlFLE1BQU05NUIsS0FBS3lMLElBQUwsQ0FBVXpMLEtBQUtpRSxHQUFMLENBQVM0MUIsUUFBUXR2QixDQUFSLEdBQVlvZSxTQUFTcGUsQ0FBOUIsRUFBaUMsQ0FBakMsSUFBc0N2SyxLQUFLaUUsR0FBTCxDQUFTNDFCLFFBQVEzdkIsQ0FBUixHQUFZeWUsU0FBU3plLENBQTlCLEVBQWlDLENBQWpDLENBQWhELENBQVY7QUFDQSxTQUFJNnZCLE1BQU0vNUIsS0FBS3lMLElBQUwsQ0FBVXpMLEtBQUtpRSxHQUFMLENBQVM0VyxLQUFLdFEsQ0FBTCxHQUFTc3ZCLFFBQVF0dkIsQ0FBMUIsRUFBNkIsQ0FBN0IsSUFBa0N2SyxLQUFLaUUsR0FBTCxDQUFTNFcsS0FBSzNRLENBQUwsR0FBUzJ2QixRQUFRM3ZCLENBQTFCLEVBQTZCLENBQTdCLENBQTVDLENBQVY7O0FBRUEsU0FBSTh2QixNQUFNRixPQUFPQSxNQUFNQyxHQUFiLENBQVY7QUFDQSxTQUFJRSxNQUFNRixPQUFPRCxNQUFNQyxHQUFiLENBQVY7O0FBRUE7QUFDQUMsV0FBTXg1QixNQUFNdzVCLEdBQU4sSUFBYSxDQUFiLEdBQWlCQSxHQUF2QjtBQUNBQyxXQUFNejVCLE1BQU15NUIsR0FBTixJQUFhLENBQWIsR0FBaUJBLEdBQXZCOztBQUVBLFNBQUlDLEtBQUt4OEIsSUFBSXM4QixHQUFiLENBcEJzRSxDQW9CcEQ7QUFDbEIsU0FBSUcsS0FBS3o4QixJQUFJdThCLEdBQWI7O0FBRUEsWUFBTztBQUNOdFIsZ0JBQVU7QUFDVHBlLFVBQUdzdkIsUUFBUXR2QixDQUFSLEdBQVkydkIsTUFBTXJmLEtBQUt0USxDQUFMLEdBQVNvZSxTQUFTcGUsQ0FBeEIsQ0FETjtBQUVUTCxVQUFHMnZCLFFBQVEzdkIsQ0FBUixHQUFZZ3dCLE1BQU1yZixLQUFLM1EsQ0FBTCxHQUFTeWUsU0FBU3plLENBQXhCO0FBRk4sT0FESjtBQUtOMlEsWUFBTTtBQUNMdFEsVUFBR3N2QixRQUFRdHZCLENBQVIsR0FBWTR2QixNQUFNdGYsS0FBS3RRLENBQUwsR0FBU29lLFNBQVNwZSxDQUF4QixDQURWO0FBRUxMLFVBQUcydkIsUUFBUTN2QixDQUFSLEdBQVlpd0IsTUFBTXRmLEtBQUszUSxDQUFMLEdBQVN5ZSxTQUFTemUsQ0FBeEI7QUFGVjtBQUxBLE1BQVA7QUFVQSxLQWpDRDtBQWtDQXNMLFlBQVE0a0IsT0FBUixHQUFrQnJTLE9BQU9xUyxPQUFQLElBQWtCLEtBQXBDO0FBQ0E1a0IsWUFBUThTLG1CQUFSLEdBQThCLFVBQVNwSSxNQUFULEVBQWlCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQUltYSxxQkFBcUIsQ0FBQ25hLFVBQVUsRUFBWCxFQUFlZ0MsR0FBZixDQUFtQixVQUFTOUIsS0FBVCxFQUFnQjtBQUMzRCxhQUFPO0FBQ05qRCxjQUFPaUQsTUFBTXhELE1BRFA7QUFFTjBkLGVBQVEsQ0FGRjtBQUdOQyxXQUFJO0FBSEUsT0FBUDtBQUtBLE1BTndCLENBQXpCOztBQVFBO0FBQ0EsU0FBSUMsWUFBWUgsbUJBQW1CaDhCLE1BQW5DO0FBQ0EsU0FBSVQsQ0FBSixFQUFPNjhCLFdBQVAsRUFBb0JDLFlBQXBCLEVBQWtDQyxVQUFsQztBQUNBLFVBQUsvOEIsSUFBSSxDQUFULEVBQVlBLElBQUk0OEIsU0FBaEIsRUFBMkIsRUFBRTU4QixDQUE3QixFQUFnQztBQUMvQjg4QixxQkFBZUwsbUJBQW1CejhCLENBQW5CLENBQWY7QUFDQSxVQUFJODhCLGFBQWF2ZCxLQUFiLENBQW1CNkQsSUFBdkIsRUFBNkI7QUFDNUI7QUFDQTs7QUFFRHlaLG9CQUFjNzhCLElBQUksQ0FBSixHQUFReThCLG1CQUFtQno4QixJQUFJLENBQXZCLENBQVIsR0FBb0MsSUFBbEQ7QUFDQSs4QixtQkFBYS84QixJQUFJNDhCLFlBQVksQ0FBaEIsR0FBb0JILG1CQUFtQno4QixJQUFJLENBQXZCLENBQXBCLEdBQWdELElBQTdEO0FBQ0EsVUFBSSs4QixjQUFjLENBQUNBLFdBQVd4ZCxLQUFYLENBQWlCNkQsSUFBcEMsRUFBMEM7QUFDekMsV0FBSTRaLGNBQWVELFdBQVd4ZCxLQUFYLENBQWlCNVMsQ0FBakIsR0FBcUJtd0IsYUFBYXZkLEtBQWIsQ0FBbUI1UyxDQUEzRDs7QUFFQTtBQUNBbXdCLG9CQUFhSixNQUFiLEdBQXNCTSxnQkFBZ0IsQ0FBaEIsR0FBb0IsQ0FBQ0QsV0FBV3hkLEtBQVgsQ0FBaUJqVCxDQUFqQixHQUFxQnd3QixhQUFhdmQsS0FBYixDQUFtQmpULENBQXpDLElBQThDMHdCLFdBQWxFLEdBQWdGLENBQXRHO0FBQ0E7O0FBRUQsVUFBSSxDQUFDSCxXQUFELElBQWdCQSxZQUFZdGQsS0FBWixDQUFrQjZELElBQXRDLEVBQTRDO0FBQzNDMFosb0JBQWFILEVBQWIsR0FBa0JHLGFBQWFKLE1BQS9CO0FBQ0EsT0FGRCxNQUVPLElBQUksQ0FBQ0ssVUFBRCxJQUFlQSxXQUFXeGQsS0FBWCxDQUFpQjZELElBQXBDLEVBQTBDO0FBQ2hEMFosb0JBQWFILEVBQWIsR0FBa0JFLFlBQVlILE1BQTlCO0FBQ0EsT0FGTSxNQUVBLElBQUksS0FBS2pDLElBQUwsQ0FBVW9DLFlBQVlILE1BQXRCLE1BQWtDLEtBQUtqQyxJQUFMLENBQVVxQyxhQUFhSixNQUF2QixDQUF0QyxFQUFzRTtBQUM1RUksb0JBQWFILEVBQWIsR0FBa0IsQ0FBbEI7QUFDQSxPQUZNLE1BRUE7QUFDTkcsb0JBQWFILEVBQWIsR0FBa0IsQ0FBQ0UsWUFBWUgsTUFBWixHQUFxQkksYUFBYUosTUFBbkMsSUFBNkMsQ0FBL0Q7QUFDQTtBQUNEOztBQUVEO0FBQ0EsU0FBSU8sTUFBSixFQUFZQyxLQUFaLEVBQW1CQyxJQUFuQixFQUF5QkMsZ0JBQXpCO0FBQ0EsVUFBS3A5QixJQUFJLENBQVQsRUFBWUEsSUFBSTQ4QixZQUFZLENBQTVCLEVBQStCLEVBQUU1OEIsQ0FBakMsRUFBb0M7QUFDbkM4OEIscUJBQWVMLG1CQUFtQno4QixDQUFuQixDQUFmO0FBQ0ErOEIsbUJBQWFOLG1CQUFtQno4QixJQUFJLENBQXZCLENBQWI7QUFDQSxVQUFJODhCLGFBQWF2ZCxLQUFiLENBQW1CNkQsSUFBbkIsSUFBMkIyWixXQUFXeGQsS0FBWCxDQUFpQjZELElBQWhELEVBQXNEO0FBQ3JEO0FBQ0E7O0FBRUQsVUFBSXhMLFFBQVF1aUIsWUFBUixDQUFxQjJDLGFBQWFKLE1BQWxDLEVBQTBDLENBQTFDLEVBQTZDLEtBQUtGLE9BQWxELENBQUosRUFBZ0U7QUFDL0RNLG9CQUFhSCxFQUFiLEdBQWtCSSxXQUFXSixFQUFYLEdBQWdCLENBQWxDO0FBQ0E7QUFDQTs7QUFFRE0sZUFBU0gsYUFBYUgsRUFBYixHQUFrQkcsYUFBYUosTUFBeEM7QUFDQVEsY0FBUUgsV0FBV0osRUFBWCxHQUFnQkcsYUFBYUosTUFBckM7QUFDQVUseUJBQW1CaDdCLEtBQUtpRSxHQUFMLENBQVM0MkIsTUFBVCxFQUFpQixDQUFqQixJQUFzQjc2QixLQUFLaUUsR0FBTCxDQUFTNjJCLEtBQVQsRUFBZ0IsQ0FBaEIsQ0FBekM7QUFDQSxVQUFJRSxvQkFBb0IsQ0FBeEIsRUFBMkI7QUFDMUI7QUFDQTs7QUFFREQsYUFBTyxJQUFJLzZCLEtBQUt5TCxJQUFMLENBQVV1dkIsZ0JBQVYsQ0FBWDtBQUNBTixtQkFBYUgsRUFBYixHQUFrQk0sU0FBU0UsSUFBVCxHQUFnQkwsYUFBYUosTUFBL0M7QUFDQUssaUJBQVdKLEVBQVgsR0FBZ0JPLFFBQVFDLElBQVIsR0FBZUwsYUFBYUosTUFBNUM7QUFDQTs7QUFFRDtBQUNBLFNBQUlXLE1BQUo7QUFDQSxVQUFLcjlCLElBQUksQ0FBVCxFQUFZQSxJQUFJNDhCLFNBQWhCLEVBQTJCLEVBQUU1OEIsQ0FBN0IsRUFBZ0M7QUFDL0I4OEIscUJBQWVMLG1CQUFtQno4QixDQUFuQixDQUFmO0FBQ0EsVUFBSTg4QixhQUFhdmQsS0FBYixDQUFtQjZELElBQXZCLEVBQTZCO0FBQzVCO0FBQ0E7O0FBRUR5WixvQkFBYzc4QixJQUFJLENBQUosR0FBUXk4QixtQkFBbUJ6OEIsSUFBSSxDQUF2QixDQUFSLEdBQW9DLElBQWxEO0FBQ0ErOEIsbUJBQWEvOEIsSUFBSTQ4QixZQUFZLENBQWhCLEdBQW9CSCxtQkFBbUJ6OEIsSUFBSSxDQUF2QixDQUFwQixHQUFnRCxJQUE3RDtBQUNBLFVBQUk2OEIsZUFBZSxDQUFDQSxZQUFZdGQsS0FBWixDQUFrQjZELElBQXRDLEVBQTRDO0FBQzNDaWEsZ0JBQVMsQ0FBQ1AsYUFBYXZkLEtBQWIsQ0FBbUI1UyxDQUFuQixHQUF1Qmt3QixZQUFZdGQsS0FBWixDQUFrQjVTLENBQTFDLElBQStDLENBQXhEO0FBQ0Ftd0Isb0JBQWF2ZCxLQUFiLENBQW1CdUwscUJBQW5CLEdBQTJDZ1MsYUFBYXZkLEtBQWIsQ0FBbUI1UyxDQUFuQixHQUF1QjB3QixNQUFsRTtBQUNBUCxvQkFBYXZkLEtBQWIsQ0FBbUJ5TCxxQkFBbkIsR0FBMkM4UixhQUFhdmQsS0FBYixDQUFtQmpULENBQW5CLEdBQXVCK3dCLFNBQVNQLGFBQWFILEVBQXhGO0FBQ0E7QUFDRCxVQUFJSSxjQUFjLENBQUNBLFdBQVd4ZCxLQUFYLENBQWlCNkQsSUFBcEMsRUFBMEM7QUFDekNpYSxnQkFBUyxDQUFDTixXQUFXeGQsS0FBWCxDQUFpQjVTLENBQWpCLEdBQXFCbXdCLGFBQWF2ZCxLQUFiLENBQW1CNVMsQ0FBekMsSUFBOEMsQ0FBdkQ7QUFDQW13QixvQkFBYXZkLEtBQWIsQ0FBbUIwTCxpQkFBbkIsR0FBdUM2UixhQUFhdmQsS0FBYixDQUFtQjVTLENBQW5CLEdBQXVCMHdCLE1BQTlEO0FBQ0FQLG9CQUFhdmQsS0FBYixDQUFtQjJMLGlCQUFuQixHQUF1QzRSLGFBQWF2ZCxLQUFiLENBQW1CalQsQ0FBbkIsR0FBdUIrd0IsU0FBU1AsYUFBYUgsRUFBcEY7QUFDQTtBQUNEO0FBQ0QsS0ExRkQ7QUEyRkEva0IsWUFBUWlULFFBQVIsR0FBbUIsVUFBUzhPLFVBQVQsRUFBcUJyd0IsS0FBckIsRUFBNEJnMEIsSUFBNUIsRUFBa0M7QUFDcEQsU0FBSUEsSUFBSixFQUFVO0FBQ1QsYUFBT2gwQixTQUFTcXdCLFdBQVdsNUIsTUFBWCxHQUFvQixDQUE3QixHQUFpQ2s1QixXQUFXLENBQVgsQ0FBakMsR0FBaURBLFdBQVdyd0IsUUFBUSxDQUFuQixDQUF4RDtBQUNBO0FBQ0QsWUFBT0EsU0FBU3F3QixXQUFXbDVCLE1BQVgsR0FBb0IsQ0FBN0IsR0FBaUNrNUIsV0FBV0EsV0FBV2w1QixNQUFYLEdBQW9CLENBQS9CLENBQWpDLEdBQXFFazVCLFdBQVdyd0IsUUFBUSxDQUFuQixDQUE1RTtBQUNBLEtBTEQ7QUFNQXNPLFlBQVFnVCxZQUFSLEdBQXVCLFVBQVMrTyxVQUFULEVBQXFCcndCLEtBQXJCLEVBQTRCZzBCLElBQTVCLEVBQWtDO0FBQ3hELFNBQUlBLElBQUosRUFBVTtBQUNULGFBQU9oMEIsU0FBUyxDQUFULEdBQWFxd0IsV0FBV0EsV0FBV2w1QixNQUFYLEdBQW9CLENBQS9CLENBQWIsR0FBaURrNUIsV0FBV3J3QixRQUFRLENBQW5CLENBQXhEO0FBQ0E7QUFDRCxZQUFPQSxTQUFTLENBQVQsR0FBYXF3QixXQUFXLENBQVgsQ0FBYixHQUE2QkEsV0FBV3J3QixRQUFRLENBQW5CLENBQXBDO0FBQ0EsS0FMRDtBQU1BO0FBQ0FzTyxZQUFRMmxCLE9BQVIsR0FBa0IsVUFBUy9iLEtBQVQsRUFBZ0JuZixLQUFoQixFQUF1QjtBQUN4QyxTQUFJczRCLFdBQVd2NEIsS0FBSytLLEtBQUwsQ0FBV3lLLFFBQVE4aUIsS0FBUixDQUFjbFosS0FBZCxDQUFYLENBQWY7QUFDQSxTQUFJZ2MsV0FBV2hjLFFBQVFwZixLQUFLaUUsR0FBTCxDQUFTLEVBQVQsRUFBYXMwQixRQUFiLENBQXZCO0FBQ0EsU0FBSThDLFlBQUo7O0FBRUEsU0FBSXA3QixLQUFKLEVBQVc7QUFDVixVQUFJbTdCLFdBQVcsR0FBZixFQUFvQjtBQUNuQkMsc0JBQWUsQ0FBZjtBQUNBLE9BRkQsTUFFTyxJQUFJRCxXQUFXLENBQWYsRUFBa0I7QUFDeEJDLHNCQUFlLENBQWY7QUFDQSxPQUZNLE1BRUEsSUFBSUQsV0FBVyxDQUFmLEVBQWtCO0FBQ3hCQyxzQkFBZSxDQUFmO0FBQ0EsT0FGTSxNQUVBO0FBQ05BLHNCQUFlLEVBQWY7QUFDQTtBQUNELE1BVkQsTUFVTyxJQUFJRCxZQUFZLEdBQWhCLEVBQXFCO0FBQzNCQyxxQkFBZSxDQUFmO0FBQ0EsTUFGTSxNQUVBLElBQUlELFlBQVksQ0FBaEIsRUFBbUI7QUFDekJDLHFCQUFlLENBQWY7QUFDQSxNQUZNLE1BRUEsSUFBSUQsWUFBWSxDQUFoQixFQUFtQjtBQUN6QkMscUJBQWUsQ0FBZjtBQUNBLE1BRk0sTUFFQTtBQUNOQSxxQkFBZSxFQUFmO0FBQ0E7O0FBRUQsWUFBT0EsZUFBZXI3QixLQUFLaUUsR0FBTCxDQUFTLEVBQVQsRUFBYXMwQixRQUFiLENBQXRCO0FBQ0EsS0ExQkQ7QUEyQkE7QUFDQS9pQixZQUFRK1csZ0JBQVIsR0FBNEIsWUFBVztBQUN0QyxTQUFJLE9BQU9wdkIsTUFBUCxLQUFrQixXQUF0QixFQUFtQztBQUNsQyxhQUFPLFVBQVM0dkIsUUFBVCxFQUFtQjtBQUN6QkE7QUFDQSxPQUZEO0FBR0E7QUFDRCxZQUFPNXZCLE9BQU9ndkIscUJBQVAsSUFDTmh2QixPQUFPbStCLDJCQURELElBRU5uK0IsT0FBT28rQix3QkFGRCxJQUdOcCtCLE9BQU9xK0Isc0JBSEQsSUFJTnIrQixPQUFPcytCLHVCQUpELElBS04sVUFBUzFPLFFBQVQsRUFBbUI7QUFDbEIsYUFBTzV2QixPQUFPdStCLFVBQVAsQ0FBa0IzTyxRQUFsQixFQUE0QixPQUFPLEVBQW5DLENBQVA7QUFDQSxNQVBGO0FBUUEsS0FkMkIsRUFBNUI7QUFlQTtBQUNBdlgsWUFBUW1tQixtQkFBUixHQUE4QixVQUFTQyxHQUFULEVBQWMzZixLQUFkLEVBQXFCO0FBQ2xELFNBQUk0ZixNQUFKLEVBQVlDLE1BQVo7QUFDQSxTQUFJdCtCLElBQUlvK0IsSUFBSUcsYUFBSixJQUFxQkgsR0FBN0I7QUFDQSxTQUFJM2tCLFNBQVMya0IsSUFBSTExQixNQUFKLElBQWMwMUIsSUFBSUksVUFBL0I7QUFDQSxTQUFJQyxlQUFlaGxCLE9BQU9pbEIscUJBQVAsRUFBbkI7O0FBRUEsU0FBSUMsVUFBVTMrQixFQUFFMitCLE9BQWhCO0FBQ0EsU0FBSUEsV0FBV0EsUUFBUTk5QixNQUFSLEdBQWlCLENBQWhDLEVBQW1DO0FBQ2xDdzlCLGVBQVNNLFFBQVEsQ0FBUixFQUFXQyxPQUFwQjtBQUNBTixlQUFTSyxRQUFRLENBQVIsRUFBV0UsT0FBcEI7QUFFQSxNQUpELE1BSU87QUFDTlIsZUFBU3IrQixFQUFFNCtCLE9BQVg7QUFDQU4sZUFBU3QrQixFQUFFNitCLE9BQVg7QUFDQTs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxTQUFJQyxjQUFjdjhCLFdBQVd5VixRQUFRK21CLFFBQVIsQ0FBaUJ0bEIsTUFBakIsRUFBeUIsY0FBekIsQ0FBWCxDQUFsQjtBQUNBLFNBQUl1bEIsYUFBYXo4QixXQUFXeVYsUUFBUSttQixRQUFSLENBQWlCdGxCLE1BQWpCLEVBQXlCLGFBQXpCLENBQVgsQ0FBakI7QUFDQSxTQUFJd2xCLGVBQWUxOEIsV0FBV3lWLFFBQVErbUIsUUFBUixDQUFpQnRsQixNQUFqQixFQUF5QixlQUF6QixDQUFYLENBQW5CO0FBQ0EsU0FBSXlsQixnQkFBZ0IzOEIsV0FBV3lWLFFBQVErbUIsUUFBUixDQUFpQnRsQixNQUFqQixFQUF5QixnQkFBekIsQ0FBWCxDQUFwQjtBQUNBLFNBQUl3QyxRQUFRd2lCLGFBQWFuWSxLQUFiLEdBQXFCbVksYUFBYXJkLElBQWxDLEdBQXlDMGQsV0FBekMsR0FBdURHLFlBQW5FO0FBQ0EsU0FBSS9pQixTQUFTdWlCLGFBQWFqWSxNQUFiLEdBQXNCaVksYUFBYXBkLEdBQW5DLEdBQXlDMmQsVUFBekMsR0FBc0RFLGFBQW5FOztBQUVBO0FBQ0E7QUFDQWIsY0FBUzc3QixLQUFLQyxLQUFMLENBQVcsQ0FBQzQ3QixTQUFTSSxhQUFhcmQsSUFBdEIsR0FBNkIwZCxXQUE5QixJQUE4QzdpQixLQUE5QyxHQUF1RHhDLE9BQU93QyxLQUE5RCxHQUFzRXdDLE1BQU0wZ0IsdUJBQXZGLENBQVQ7QUFDQWIsY0FBUzk3QixLQUFLQyxLQUFMLENBQVcsQ0FBQzY3QixTQUFTRyxhQUFhcGQsR0FBdEIsR0FBNEIyZCxVQUE3QixJQUE0QzlpQixNQUE1QyxHQUFzRHpDLE9BQU95QyxNQUE3RCxHQUFzRXVDLE1BQU0wZ0IsdUJBQXZGLENBQVQ7O0FBRUEsWUFBTztBQUNOcHlCLFNBQUdzeEIsTUFERztBQUVOM3hCLFNBQUc0eEI7QUFGRyxNQUFQO0FBS0EsS0FwQ0Q7O0FBc0NBO0FBQ0EsYUFBU2MsYUFBVCxDQUF1QkMsVUFBdkIsRUFBbUNDLElBQW5DLEVBQXlDQyxjQUF6QyxFQUF5RDtBQUN4RCxTQUFJQyxhQUFKO0FBQ0EsU0FBSSxPQUFPSCxVQUFQLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ25DRyxzQkFBZ0JuOUIsU0FBU2c5QixVQUFULEVBQXFCLEVBQXJCLENBQWhCOztBQUVBLFVBQUlBLFdBQVdyZSxPQUFYLENBQW1CLEdBQW5CLE1BQTRCLENBQUMsQ0FBakMsRUFBb0M7QUFDbkM7QUFDQXdlLHVCQUFnQkEsZ0JBQWdCLEdBQWhCLEdBQXNCRixLQUFLRyxVQUFMLENBQWdCRixjQUFoQixDQUF0QztBQUNBO0FBQ0QsTUFQRCxNQU9PO0FBQ05DLHNCQUFnQkgsVUFBaEI7QUFDQTs7QUFFRCxZQUFPRyxhQUFQO0FBQ0E7O0FBRUQ7Ozs7QUFJQSxhQUFTRSxrQkFBVCxDQUE0Qi82QixLQUE1QixFQUFtQztBQUNsQyxZQUFPQSxVQUFVcEIsU0FBVixJQUF1Qm9CLFVBQVUsSUFBakMsSUFBeUNBLFVBQVUsTUFBMUQ7QUFDQTs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBU2c3QixzQkFBVCxDQUFnQ0MsT0FBaEMsRUFBeUNDLFFBQXpDLEVBQW1EQyxrQkFBbkQsRUFBdUU7QUFDdEUsU0FBSW5ILE9BQU9vSCxTQUFTQyxXQUFwQjtBQUNBLFNBQUlQLGFBQWF6bkIsUUFBUWlvQixjQUFSLENBQXVCTCxPQUF2QixDQUFqQjtBQUNBLFNBQUlNLGtCQUFrQnZILEtBQUt3SCxnQkFBTCxDQUFzQlAsT0FBdEIsRUFBK0JDLFFBQS9CLENBQXRCO0FBQ0EsU0FBSU8sdUJBQXVCekgsS0FBS3dILGdCQUFMLENBQXNCVixVQUF0QixFQUFrQ0ksUUFBbEMsQ0FBM0I7QUFDQSxTQUFJUSxXQUFXWCxtQkFBbUJRLGVBQW5CLENBQWY7QUFDQSxTQUFJSSxnQkFBZ0JaLG1CQUFtQlUsb0JBQW5CLENBQXBCO0FBQ0EsU0FBSUcsV0FBV2hXLE9BQU9xUSxpQkFBdEI7O0FBRUEsU0FBSXlGLFlBQVlDLGFBQWhCLEVBQStCO0FBQzlCLGFBQU85OUIsS0FBS2tCLEdBQUwsQ0FDTjI4QixXQUFXakIsY0FBY2MsZUFBZCxFQUErQk4sT0FBL0IsRUFBd0NFLGtCQUF4QyxDQUFYLEdBQXlFUyxRQURuRSxFQUVORCxnQkFBZ0JsQixjQUFjZ0Isb0JBQWQsRUFBb0NYLFVBQXBDLEVBQWdESyxrQkFBaEQsQ0FBaEIsR0FBc0ZTLFFBRmhGLENBQVA7QUFHQTs7QUFFRCxZQUFPLE1BQVA7QUFDQTtBQUNEO0FBQ0F2b0IsWUFBUXdvQixrQkFBUixHQUE2QixVQUFTWixPQUFULEVBQWtCO0FBQzlDLFlBQU9ELHVCQUF1QkMsT0FBdkIsRUFBZ0MsV0FBaEMsRUFBNkMsYUFBN0MsQ0FBUDtBQUNBLEtBRkQ7QUFHQTtBQUNBNW5CLFlBQVF5b0IsbUJBQVIsR0FBOEIsVUFBU2IsT0FBVCxFQUFrQjtBQUMvQyxZQUFPRCx1QkFBdUJDLE9BQXZCLEVBQWdDLFlBQWhDLEVBQThDLGNBQTlDLENBQVA7QUFDQSxLQUZEO0FBR0E7OztBQUdBNW5CLFlBQVEwb0IsaUJBQVIsR0FBNEIsVUFBU0MsU0FBVCxFQUFvQkMsT0FBcEIsRUFBNkJDLGVBQTdCLEVBQThDO0FBQ3pFRCxlQUFVNW9CLFFBQVErbUIsUUFBUixDQUFpQjRCLFNBQWpCLEVBQTRCQyxPQUE1QixDQUFWOztBQUVBLFlBQU9BLFFBQVE1ZixPQUFSLENBQWdCLEdBQWhCLElBQXVCLENBQUMsQ0FBeEIsR0FBNEI2ZixrQkFBa0J4K0IsU0FBU3UrQixPQUFULEVBQWtCLEVBQWxCLENBQTlDLEdBQXNFditCLFNBQVN1K0IsT0FBVCxFQUFrQixFQUFsQixDQUE3RTtBQUNBLEtBSkQ7QUFLQTs7O0FBR0E1b0IsWUFBUWlvQixjQUFSLEdBQXlCLFVBQVNMLE9BQVQsRUFBa0I7QUFDMUMsU0FBSWtCLFNBQVNsQixRQUFRSCxVQUFyQjtBQUNBLFNBQUlxQixVQUFVQSxPQUFPQyxJQUFyQixFQUEyQjtBQUMxQkQsZUFBU0EsT0FBT0MsSUFBaEI7QUFDQTtBQUNELFlBQU9ELE1BQVA7QUFDQSxLQU5EO0FBT0E5b0IsWUFBUW9aLGVBQVIsR0FBMEIsVUFBU3dPLE9BQVQsRUFBa0I7QUFDM0MsU0FBSWUsWUFBWTNvQixRQUFRaW9CLGNBQVIsQ0FBdUJMLE9BQXZCLENBQWhCO0FBQ0EsU0FBSSxDQUFDZSxTQUFMLEVBQWdCO0FBQ2YsYUFBT2YsUUFBUW9CLFdBQWY7QUFDQTs7QUFFRCxTQUFJQSxjQUFjTCxVQUFVSyxXQUE1QjtBQUNBLFNBQUlsQyxjQUFjOW1CLFFBQVEwb0IsaUJBQVIsQ0FBMEJDLFNBQTFCLEVBQXFDLGNBQXJDLEVBQXFESyxXQUFyRCxDQUFsQjtBQUNBLFNBQUkvQixlQUFlam5CLFFBQVEwb0IsaUJBQVIsQ0FBMEJDLFNBQTFCLEVBQXFDLGVBQXJDLEVBQXNESyxXQUF0RCxDQUFuQjs7QUFFQSxTQUFJOTlCLElBQUk4OUIsY0FBY2xDLFdBQWQsR0FBNEJHLFlBQXBDO0FBQ0EsU0FBSWdDLEtBQUtqcEIsUUFBUXdvQixrQkFBUixDQUEyQlosT0FBM0IsQ0FBVDtBQUNBLFlBQU81OEIsTUFBTWkrQixFQUFOLElBQVkvOUIsQ0FBWixHQUFnQlYsS0FBS2tCLEdBQUwsQ0FBU1IsQ0FBVCxFQUFZKzlCLEVBQVosQ0FBdkI7QUFDQSxLQWJEO0FBY0FqcEIsWUFBUXNaLGdCQUFSLEdBQTJCLFVBQVNzTyxPQUFULEVBQWtCO0FBQzVDLFNBQUllLFlBQVkzb0IsUUFBUWlvQixjQUFSLENBQXVCTCxPQUF2QixDQUFoQjtBQUNBLFNBQUksQ0FBQ2UsU0FBTCxFQUFnQjtBQUNmLGFBQU9mLFFBQVFzQixZQUFmO0FBQ0E7O0FBRUQsU0FBSUEsZUFBZVAsVUFBVU8sWUFBN0I7QUFDQSxTQUFJbEMsYUFBYWhuQixRQUFRMG9CLGlCQUFSLENBQTBCQyxTQUExQixFQUFxQyxhQUFyQyxFQUFvRE8sWUFBcEQsQ0FBakI7QUFDQSxTQUFJaEMsZ0JBQWdCbG5CLFFBQVEwb0IsaUJBQVIsQ0FBMEJDLFNBQTFCLEVBQXFDLGdCQUFyQyxFQUF1RE8sWUFBdkQsQ0FBcEI7O0FBRUEsU0FBSXIrQixJQUFJcStCLGVBQWVsQyxVQUFmLEdBQTRCRSxhQUFwQztBQUNBLFNBQUlpQyxLQUFLbnBCLFFBQVF5b0IsbUJBQVIsQ0FBNEJiLE9BQTVCLENBQVQ7QUFDQSxZQUFPNThCLE1BQU1tK0IsRUFBTixJQUFZdCtCLENBQVosR0FBZ0JMLEtBQUtrQixHQUFMLENBQVNiLENBQVQsRUFBWXMrQixFQUFaLENBQXZCO0FBQ0EsS0FiRDtBQWNBbnBCLFlBQVErbUIsUUFBUixHQUFtQixVQUFTcUMsRUFBVCxFQUFhQyxRQUFiLEVBQXVCO0FBQ3pDLFlBQU9ELEdBQUdFLFlBQUgsR0FDTkYsR0FBR0UsWUFBSCxDQUFnQkQsUUFBaEIsQ0FETSxHQUVOdEIsU0FBU0MsV0FBVCxDQUFxQkcsZ0JBQXJCLENBQXNDaUIsRUFBdEMsRUFBMEMsSUFBMUMsRUFBZ0RHLGdCQUFoRCxDQUFpRUYsUUFBakUsQ0FGRDtBQUdBLEtBSkQ7QUFLQXJwQixZQUFReVksV0FBUixHQUFzQixVQUFTaFMsS0FBVCxFQUFnQitpQixVQUFoQixFQUE0QjtBQUNqRCxTQUFJQyxhQUFhaGpCLE1BQU0wZ0IsdUJBQU4sR0FBZ0NxQyxjQUFlLE9BQU83aEMsTUFBUCxLQUFrQixXQUFsQixJQUFpQ0EsT0FBTyt3QixnQkFBdkQsSUFBNEUsQ0FBN0g7QUFDQSxTQUFJK1EsZUFBZSxDQUFuQixFQUFzQjtBQUNyQjtBQUNBOztBQUVELFNBQUlob0IsU0FBU2dGLE1BQU1oRixNQUFuQjtBQUNBLFNBQUl5QyxTQUFTdUMsTUFBTXZDLE1BQW5CO0FBQ0EsU0FBSUQsUUFBUXdDLE1BQU14QyxLQUFsQjs7QUFFQXhDLFlBQU95QyxNQUFQLEdBQWdCQSxTQUFTdWxCLFVBQXpCO0FBQ0Fob0IsWUFBT3dDLEtBQVAsR0FBZUEsUUFBUXdsQixVQUF2QjtBQUNBaGpCLFdBQU0wRCxHQUFOLENBQVV6ZixLQUFWLENBQWdCKytCLFVBQWhCLEVBQTRCQSxVQUE1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFJLENBQUNob0IsT0FBTzhYLEtBQVAsQ0FBYXJWLE1BQWQsSUFBd0IsQ0FBQ3pDLE9BQU84WCxLQUFQLENBQWF0VixLQUExQyxFQUFpRDtBQUNoRHhDLGFBQU84WCxLQUFQLENBQWFyVixNQUFiLEdBQXNCQSxTQUFTLElBQS9CO0FBQ0F6QyxhQUFPOFgsS0FBUCxDQUFhdFYsS0FBYixHQUFxQkEsUUFBUSxJQUE3QjtBQUNBO0FBQ0QsS0FyQkQ7QUFzQkE7QUFDQWpFLFlBQVEwcEIsVUFBUixHQUFxQixVQUFTQyxTQUFULEVBQW9CQyxTQUFwQixFQUErQkMsVUFBL0IsRUFBMkM7QUFDL0QsWUFBT0QsWUFBWSxHQUFaLEdBQWtCRCxTQUFsQixHQUE4QixLQUE5QixHQUFzQ0UsVUFBN0M7QUFDQSxLQUZEO0FBR0E3cEIsWUFBUThwQixXQUFSLEdBQXNCLFVBQVMzZixHQUFULEVBQWM0ZixJQUFkLEVBQW9CQyxhQUFwQixFQUFtQ0MsS0FBbkMsRUFBMEM7QUFDL0RBLGFBQVFBLFNBQVMsRUFBakI7QUFDQSxTQUFJM21CLE9BQU8ybUIsTUFBTTNtQixJQUFOLEdBQWEybUIsTUFBTTNtQixJQUFOLElBQWMsRUFBdEM7QUFDQSxTQUFJNG1CLEtBQUtELE1BQU1FLGNBQU4sR0FBdUJGLE1BQU1FLGNBQU4sSUFBd0IsRUFBeEQ7O0FBRUEsU0FBSUYsTUFBTUYsSUFBTixLQUFlQSxJQUFuQixFQUF5QjtBQUN4QnptQixhQUFPMm1CLE1BQU0zbUIsSUFBTixHQUFhLEVBQXBCO0FBQ0E0bUIsV0FBS0QsTUFBTUUsY0FBTixHQUF1QixFQUE1QjtBQUNBRixZQUFNRixJQUFOLEdBQWFBLElBQWI7QUFDQTs7QUFFRDVmLFNBQUk0ZixJQUFKLEdBQVdBLElBQVg7QUFDQSxTQUFJSyxVQUFVLENBQWQ7QUFDQXBxQixhQUFRMkssSUFBUixDQUFhcWYsYUFBYixFQUE0QixVQUFTSyxLQUFULEVBQWdCO0FBQzNDO0FBQ0EsVUFBSUEsVUFBVTkrQixTQUFWLElBQXVCOCtCLFVBQVUsSUFBakMsSUFBeUNycUIsUUFBUTJOLE9BQVIsQ0FBZ0IwYyxLQUFoQixNQUEyQixJQUF4RSxFQUE4RTtBQUM3RUQsaUJBQVVwcUIsUUFBUXNxQixXQUFSLENBQW9CbmdCLEdBQXBCLEVBQXlCN0csSUFBekIsRUFBK0I0bUIsRUFBL0IsRUFBbUNFLE9BQW5DLEVBQTRDQyxLQUE1QyxDQUFWO0FBQ0EsT0FGRCxNQUVPLElBQUlycUIsUUFBUTJOLE9BQVIsQ0FBZ0IwYyxLQUFoQixDQUFKLEVBQTRCO0FBQ2xDO0FBQ0E7QUFDQXJxQixlQUFRMkssSUFBUixDQUFhMGYsS0FBYixFQUFvQixVQUFTRSxXQUFULEVBQXNCO0FBQ3pDO0FBQ0EsWUFBSUEsZ0JBQWdCaC9CLFNBQWhCLElBQTZCZy9CLGdCQUFnQixJQUE3QyxJQUFxRCxDQUFDdnFCLFFBQVEyTixPQUFSLENBQWdCNGMsV0FBaEIsQ0FBMUQsRUFBd0Y7QUFDdkZILG1CQUFVcHFCLFFBQVFzcUIsV0FBUixDQUFvQm5nQixHQUFwQixFQUF5QjdHLElBQXpCLEVBQStCNG1CLEVBQS9CLEVBQW1DRSxPQUFuQyxFQUE0Q0csV0FBNUMsQ0FBVjtBQUNBO0FBQ0QsUUFMRDtBQU1BO0FBQ0QsTUFkRDs7QUFnQkEsU0FBSUMsUUFBUU4sR0FBR3JoQyxNQUFILEdBQVksQ0FBeEI7QUFDQSxTQUFJMmhDLFFBQVFSLGNBQWNuaEMsTUFBMUIsRUFBa0M7QUFDakMsV0FBSyxJQUFJVCxJQUFJLENBQWIsRUFBZ0JBLElBQUlvaUMsS0FBcEIsRUFBMkJwaUMsR0FBM0IsRUFBZ0M7QUFDL0IsY0FBT2tiLEtBQUs0bUIsR0FBRzloQyxDQUFILENBQUwsQ0FBUDtBQUNBO0FBQ0Q4aEMsU0FBR3BULE1BQUgsQ0FBVSxDQUFWLEVBQWEwVCxLQUFiO0FBQ0E7QUFDRCxZQUFPSixPQUFQO0FBQ0EsS0FyQ0Q7QUFzQ0FwcUIsWUFBUXNxQixXQUFSLEdBQXNCLFVBQVNuZ0IsR0FBVCxFQUFjN0csSUFBZCxFQUFvQjRtQixFQUFwQixFQUF3QkUsT0FBeEIsRUFBaUN0Z0MsTUFBakMsRUFBeUM7QUFDOUQsU0FBSTJnQyxZQUFZbm5CLEtBQUt4WixNQUFMLENBQWhCO0FBQ0EsU0FBSSxDQUFDMmdDLFNBQUwsRUFBZ0I7QUFDZkEsa0JBQVlubkIsS0FBS3haLE1BQUwsSUFBZXFnQixJQUFJbWdCLFdBQUosQ0FBZ0J4Z0MsTUFBaEIsRUFBd0JtYSxLQUFuRDtBQUNBaW1CLFNBQUdqaEIsSUFBSCxDQUFRbmYsTUFBUjtBQUNBO0FBQ0QsU0FBSTJnQyxZQUFZTCxPQUFoQixFQUF5QjtBQUN4QkEsZ0JBQVVLLFNBQVY7QUFDQTtBQUNELFlBQU9MLE9BQVA7QUFDQSxLQVZEO0FBV0FwcUIsWUFBUTBxQixrQkFBUixHQUE2QixVQUFTVixhQUFULEVBQXdCO0FBQ3BELFNBQUlXLGdCQUFnQixDQUFwQjtBQUNBM3FCLGFBQVEySyxJQUFSLENBQWFxZixhQUFiLEVBQTRCLFVBQVNLLEtBQVQsRUFBZ0I7QUFDM0MsVUFBSXJxQixRQUFRMk4sT0FBUixDQUFnQjBjLEtBQWhCLENBQUosRUFBNEI7QUFDM0IsV0FBSUEsTUFBTXhoQyxNQUFOLEdBQWU4aEMsYUFBbkIsRUFBa0M7QUFDakNBLHdCQUFnQk4sTUFBTXhoQyxNQUF0QjtBQUNBO0FBQ0Q7QUFDRCxNQU5EO0FBT0EsWUFBTzhoQyxhQUFQO0FBQ0EsS0FWRDs7QUFZQTNxQixZQUFReWdCLEtBQVIsR0FBZ0IsQ0FBQ0EsS0FBRCxHQUNmLFVBQVM5ekIsS0FBVCxFQUFnQjtBQUNmbUUsYUFBUUMsS0FBUixDQUFjLHFCQUFkO0FBQ0EsWUFBT3BFLEtBQVA7QUFDQSxLQUpjLEdBS2YsVUFBU0EsS0FBVCxFQUFnQjtBQUNmO0FBQ0EsU0FBSUEsaUJBQWlCaStCLGNBQXJCLEVBQXFDO0FBQ3BDaitCLGNBQVF3VCxTQUFTdlksTUFBVCxDQUFnQmlqQyxZQUF4QjtBQUNBOztBQUVELFlBQU9wSyxNQUFNOXpCLEtBQU4sQ0FBUDtBQUNBLEtBWkY7O0FBY0FxVCxZQUFRNEwsYUFBUixHQUF3QixVQUFTa2YsVUFBVCxFQUFxQjtBQUM1QztBQUNBLFlBQVFBLHNCQUFzQkMsYUFBdkIsR0FDTkQsVUFETSxHQUVOOXFCLFFBQVF5Z0IsS0FBUixDQUFjcUssVUFBZCxFQUEwQnY3QixRQUExQixDQUFtQyxHQUFuQyxFQUF3Q0QsTUFBeEMsQ0FBK0MsR0FBL0MsRUFBb0RoRyxTQUFwRCxFQUZEO0FBR0EsS0FMRDtBQU1BLElBaG5CRDtBQWtuQkMsR0E1bkJxQixFQTRuQnBCLEVBQUMsTUFBSyxFQUFOLEVBQVMsS0FBSSxDQUFiLEVBQWUsTUFBSyxFQUFwQixFQUF1QixNQUFLLEVBQTVCLEVBNW5Cb0IsQ0E1bktteUIsRUF3dkx0eEIsSUFBRyxDQUFDLFVBQVNoQixPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDdkU7O0FBRUEsT0FBSXlZLFVBQVUxWCxRQUFRLEVBQVIsQ0FBZDs7QUFFQTs7Ozs7O0FBTUEsWUFBUzY5QixtQkFBVCxDQUE2Qm4rQixDQUE3QixFQUFnQ3llLEtBQWhDLEVBQXVDO0FBQ3RDLFFBQUl6ZSxFQUFFdTJCLE1BQU4sRUFBYztBQUNiLFlBQU87QUFDTnhwQixTQUFHL00sRUFBRStNLENBREM7QUFFTkwsU0FBRzFNLEVBQUUwTTtBQUZDLE1BQVA7QUFJQTs7QUFFRCxXQUFPc0wsUUFBUW1tQixtQkFBUixDQUE0Qm4rQixDQUE1QixFQUErQnllLEtBQS9CLENBQVA7QUFDQTs7QUFFRDs7Ozs7QUFLQSxZQUFTdWtCLGlCQUFULENBQTJCdmtCLEtBQTNCLEVBQWtDd2tCLE9BQWxDLEVBQTJDO0FBQzFDLFFBQUl0bkIsV0FBVzhDLE1BQU1uRCxJQUFOLENBQVdLLFFBQTFCO0FBQ0EsUUFBSW1DLElBQUosRUFBVTFkLENBQVYsRUFBYStsQixDQUFiLEVBQWdCNUosSUFBaEIsRUFBc0IybUIsSUFBdEI7O0FBRUEsU0FBSzlpQyxJQUFJLENBQUosRUFBT21jLE9BQU9aLFNBQVM5YSxNQUE1QixFQUFvQ1QsSUFBSW1jLElBQXhDLEVBQThDLEVBQUVuYyxDQUFoRCxFQUFtRDtBQUNsRCxTQUFJLENBQUNxZSxNQUFNc0MsZ0JBQU4sQ0FBdUIzZ0IsQ0FBdkIsQ0FBTCxFQUFnQztBQUMvQjtBQUNBOztBQUVEMGQsWUFBT1csTUFBTXFDLGNBQU4sQ0FBcUIxZ0IsQ0FBckIsQ0FBUDtBQUNBLFVBQUsrbEIsSUFBSSxDQUFKLEVBQU8rYyxPQUFPcGxCLEtBQUt4QyxJQUFMLENBQVV6YSxNQUE3QixFQUFxQ3NsQixJQUFJK2MsSUFBekMsRUFBK0MsRUFBRS9jLENBQWpELEVBQW9EO0FBQ25ELFVBQUk0QixVQUFVakssS0FBS3hDLElBQUwsQ0FBVTZLLENBQVYsQ0FBZDtBQUNBLFVBQUksQ0FBQzRCLFFBQVFvUixLQUFSLENBQWMzVixJQUFuQixFQUF5QjtBQUN4QnlmLGVBQVFsYixPQUFSO0FBQ0E7QUFDRDtBQUNEO0FBQ0Q7O0FBRUQ7Ozs7OztBQU1BLFlBQVNvYixpQkFBVCxDQUEyQjFrQixLQUEzQixFQUFrQ3pELFFBQWxDLEVBQTRDO0FBQzNDLFFBQUkzQyxXQUFXLEVBQWY7O0FBRUEycUIsc0JBQWtCdmtCLEtBQWxCLEVBQXlCLFVBQVNzSixPQUFULEVBQWtCO0FBQzFDLFNBQUlBLFFBQVFxYixPQUFSLENBQWdCcG9CLFNBQVNqTyxDQUF6QixFQUE0QmlPLFNBQVN0TyxDQUFyQyxDQUFKLEVBQTZDO0FBQzVDMkwsZUFBUzRJLElBQVQsQ0FBYzhHLE9BQWQ7QUFDQTtBQUNELEtBSkQ7O0FBTUEsV0FBTzFQLFFBQVA7QUFDQTs7QUFFRDs7Ozs7Ozs7QUFRQSxZQUFTZ3JCLGVBQVQsQ0FBeUI1a0IsS0FBekIsRUFBZ0N6RCxRQUFoQyxFQUEwQ3laLFNBQTFDLEVBQXFENk8sY0FBckQsRUFBcUU7QUFDcEUsUUFBSUMsY0FBY2haLE9BQU9xUSxpQkFBekI7QUFDQSxRQUFJNEksZUFBZSxFQUFuQjs7QUFFQVIsc0JBQWtCdmtCLEtBQWxCLEVBQXlCLFVBQVNzSixPQUFULEVBQWtCO0FBQzFDLFNBQUkwTSxhQUFhLENBQUMxTSxRQUFRcWIsT0FBUixDQUFnQnBvQixTQUFTak8sQ0FBekIsRUFBNEJpTyxTQUFTdE8sQ0FBckMsQ0FBbEIsRUFBMkQ7QUFDMUQ7QUFDQTs7QUFFRCxTQUFJNFQsU0FBU3lILFFBQVEwYixjQUFSLEVBQWI7QUFDQSxTQUFJM1csV0FBV3dXLGVBQWV0b0IsUUFBZixFQUF5QnNGLE1BQXpCLENBQWY7O0FBRUEsU0FBSXdNLFdBQVd5VyxXQUFmLEVBQTRCO0FBQzNCQyxxQkFBZSxDQUFDemIsT0FBRCxDQUFmO0FBQ0F3YixvQkFBY3pXLFFBQWQ7QUFDQSxNQUhELE1BR08sSUFBSUEsYUFBYXlXLFdBQWpCLEVBQThCO0FBQ3BDO0FBQ0FDLG1CQUFhdmlCLElBQWIsQ0FBa0I4RyxPQUFsQjtBQUNBO0FBQ0QsS0FmRDs7QUFpQkEsV0FBT3liLFlBQVA7QUFDQTs7QUFFRDs7Ozs7QUFLQSxZQUFTRSx3QkFBVCxDQUFrQzNvQixJQUFsQyxFQUF3QztBQUN2QyxRQUFJNG9CLE9BQU81b0IsS0FBS2lHLE9BQUwsQ0FBYSxHQUFiLE1BQXNCLENBQUMsQ0FBbEM7QUFDQSxRQUFJNGlCLE9BQU83b0IsS0FBS2lHLE9BQUwsQ0FBYSxHQUFiLE1BQXNCLENBQUMsQ0FBbEM7O0FBRUEsV0FBTyxVQUFTOGEsR0FBVCxFQUFjQyxHQUFkLEVBQW1CO0FBQ3pCLFNBQUkwQixTQUFTa0csT0FBT25oQyxLQUFLd2xCLEdBQUwsQ0FBUzhULElBQUkvdUIsQ0FBSixHQUFRZ3ZCLElBQUlodkIsQ0FBckIsQ0FBUCxHQUFpQyxDQUE5QztBQUNBLFNBQUk4MkIsU0FBU0QsT0FBT3BoQyxLQUFLd2xCLEdBQUwsQ0FBUzhULElBQUlwdkIsQ0FBSixHQUFRcXZCLElBQUlydkIsQ0FBckIsQ0FBUCxHQUFpQyxDQUE5QztBQUNBLFlBQU9sSyxLQUFLeUwsSUFBTCxDQUFVekwsS0FBS2lFLEdBQUwsQ0FBU2czQixNQUFULEVBQWlCLENBQWpCLElBQXNCajdCLEtBQUtpRSxHQUFMLENBQVNvOUIsTUFBVCxFQUFpQixDQUFqQixDQUFoQyxDQUFQO0FBQ0EsS0FKRDtBQUtBOztBQUVELFlBQVNDLFNBQVQsQ0FBbUJybEIsS0FBbkIsRUFBMEJ6ZSxDQUExQixFQUE2QjJjLE9BQTdCLEVBQXNDO0FBQ3JDLFFBQUkzQixXQUFXbWpCLG9CQUFvQm4rQixDQUFwQixFQUF1QnllLEtBQXZCLENBQWY7QUFDQTtBQUNBOUIsWUFBUTVCLElBQVIsR0FBZTRCLFFBQVE1QixJQUFSLElBQWdCLEdBQS9CO0FBQ0EsUUFBSXVvQixpQkFBaUJJLHlCQUF5Qi9tQixRQUFRNUIsSUFBakMsQ0FBckI7QUFDQSxRQUFJZ1gsUUFBUXBWLFFBQVE4WCxTQUFSLEdBQW9CME8sa0JBQWtCMWtCLEtBQWxCLEVBQXlCekQsUUFBekIsQ0FBcEIsR0FBeURxb0IsZ0JBQWdCNWtCLEtBQWhCLEVBQXVCekQsUUFBdkIsRUFBaUMsS0FBakMsRUFBd0Nzb0IsY0FBeEMsQ0FBckU7QUFDQSxRQUFJanJCLFdBQVcsRUFBZjs7QUFFQSxRQUFJLENBQUMwWixNQUFNbHhCLE1BQVgsRUFBbUI7QUFDbEIsWUFBTyxFQUFQO0FBQ0E7O0FBRUQ0ZCxVQUFNbkQsSUFBTixDQUFXSyxRQUFYLENBQW9CNUQsT0FBcEIsQ0FBNEIsVUFBUzJHLE9BQVQsRUFBa0I5QyxZQUFsQixFQUFnQztBQUMzRCxTQUFJNkMsTUFBTXNDLGdCQUFOLENBQXVCbkYsWUFBdkIsQ0FBSixFQUEwQztBQUN6QyxVQUFJa0MsT0FBT1csTUFBTXFDLGNBQU4sQ0FBcUJsRixZQUFyQixDQUFYO0FBQ0EsVUFBSW1NLFVBQVVqSyxLQUFLeEMsSUFBTCxDQUFVeVcsTUFBTSxDQUFOLEVBQVM1UyxNQUFuQixDQUFkOztBQUVBO0FBQ0EsVUFBSTRJLFdBQVcsQ0FBQ0EsUUFBUW9SLEtBQVIsQ0FBYzNWLElBQTlCLEVBQW9DO0FBQ25DbkwsZ0JBQVM0SSxJQUFULENBQWM4RyxPQUFkO0FBQ0E7QUFDRDtBQUNELEtBVkQ7O0FBWUEsV0FBTzFQLFFBQVA7QUFDQTs7QUFFRDs7O0FBR0E7Ozs7OztBQU1BOzs7O0FBSUE3WSxVQUFPRCxPQUFQLEdBQWlCO0FBQ2hCO0FBQ0ErMEIsV0FBTztBQUNOQyxhQUFRLGdCQUFTOVYsS0FBVCxFQUFnQnplLENBQWhCLEVBQW1CO0FBQzFCLFVBQUlnYixXQUFXbWpCLG9CQUFvQm4rQixDQUFwQixFQUF1QnllLEtBQXZCLENBQWY7QUFDQSxVQUFJcEcsV0FBVyxFQUFmOztBQUVBMnFCLHdCQUFrQnZrQixLQUFsQixFQUF5QixVQUFTc0osT0FBVCxFQUFrQjtBQUMxQyxXQUFJQSxRQUFRcWIsT0FBUixDQUFnQnBvQixTQUFTak8sQ0FBekIsRUFBNEJpTyxTQUFTdE8sQ0FBckMsQ0FBSixFQUE2QztBQUM1QzJMLGlCQUFTNEksSUFBVCxDQUFjOEcsT0FBZDtBQUNBLGVBQU8xUCxRQUFQO0FBQ0E7QUFDRCxPQUxEOztBQU9BLGFBQU9BLFNBQVMvVixLQUFULENBQWUsQ0FBZixFQUFrQixDQUFsQixDQUFQO0FBQ0EsTUFiSzs7QUFlTjs7Ozs7O0FBTUFtWixZQUFPcW9CLFNBckJEOztBQXVCTjs7Ozs7Ozs7OztBQVVBcDZCLFlBQU9vNkIsU0FqQ0Q7O0FBbUNOOzs7Ozs7Ozs7QUFTQXBsQixjQUFTLGlCQUFTRCxLQUFULEVBQWdCemUsQ0FBaEIsRUFBbUIyYyxPQUFuQixFQUE0QjtBQUNwQyxVQUFJM0IsV0FBV21qQixvQkFBb0JuK0IsQ0FBcEIsRUFBdUJ5ZSxLQUF2QixDQUFmO0FBQ0E5QixjQUFRNUIsSUFBUixHQUFlNEIsUUFBUTVCLElBQVIsSUFBZ0IsSUFBL0I7QUFDQSxVQUFJdW9CLGlCQUFpQkkseUJBQXlCL21CLFFBQVE1QixJQUFqQyxDQUFyQjtBQUNBLFVBQUlnWCxRQUFRcFYsUUFBUThYLFNBQVIsR0FBb0IwTyxrQkFBa0Ixa0IsS0FBbEIsRUFBeUJ6RCxRQUF6QixDQUFwQixHQUF5RHFvQixnQkFBZ0I1a0IsS0FBaEIsRUFBdUJ6RCxRQUF2QixFQUFpQyxLQUFqQyxFQUF3Q3NvQixjQUF4QyxDQUFyRTs7QUFFQSxVQUFJdlIsTUFBTWx4QixNQUFOLEdBQWUsQ0FBbkIsRUFBc0I7QUFDckJreEIsZUFBUXRULE1BQU1xQyxjQUFOLENBQXFCaVIsTUFBTSxDQUFOLEVBQVM3UyxhQUE5QixFQUE2QzVELElBQXJEO0FBQ0E7O0FBRUQsYUFBT3lXLEtBQVA7QUFDQSxNQXZESzs7QUF5RE47Ozs7OztBQU1BLGVBQVUsZUFBU3RULEtBQVQsRUFBZ0J6ZSxDQUFoQixFQUFtQjtBQUM1QixhQUFPOGpDLFVBQVVybEIsS0FBVixFQUFpQnplLENBQWpCLEVBQW9CLEVBQUN5MEIsV0FBVyxLQUFaLEVBQXBCLENBQVA7QUFDQSxNQWpFSzs7QUFtRU47Ozs7Ozs7O0FBUUE3UixZQUFPLGVBQVNuRSxLQUFULEVBQWdCemUsQ0FBaEIsRUFBbUI7QUFDekIsVUFBSWdiLFdBQVdtakIsb0JBQW9CbitCLENBQXBCLEVBQXVCeWUsS0FBdkIsQ0FBZjtBQUNBLGFBQU8wa0Isa0JBQWtCMWtCLEtBQWxCLEVBQXlCekQsUUFBekIsQ0FBUDtBQUNBLE1BOUVLOztBQWdGTjs7Ozs7Ozs7QUFRQStvQixjQUFTLGlCQUFTdGxCLEtBQVQsRUFBZ0J6ZSxDQUFoQixFQUFtQjJjLE9BQW5CLEVBQTRCO0FBQ3BDLFVBQUkzQixXQUFXbWpCLG9CQUFvQm4rQixDQUFwQixFQUF1QnllLEtBQXZCLENBQWY7QUFDQTlCLGNBQVE1QixJQUFSLEdBQWU0QixRQUFRNUIsSUFBUixJQUFnQixJQUEvQjtBQUNBLFVBQUl1b0IsaUJBQWlCSSx5QkFBeUIvbUIsUUFBUTVCLElBQWpDLENBQXJCO0FBQ0EsVUFBSXlvQixlQUFlSCxnQkFBZ0I1a0IsS0FBaEIsRUFBdUJ6RCxRQUF2QixFQUFpQzJCLFFBQVE4WCxTQUF6QyxFQUFvRDZPLGNBQXBELENBQW5COztBQUVBO0FBQ0EsVUFBSUUsYUFBYTNpQyxNQUFiLEdBQXNCLENBQTFCLEVBQTZCO0FBQzVCMmlDLG9CQUFhUSxJQUFiLENBQWtCLFVBQVN4akMsQ0FBVCxFQUFZMkMsQ0FBWixFQUFlO0FBQ2hDLFlBQUk4Z0MsUUFBUXpqQyxFQUFFMGpDLE9BQUYsRUFBWjtBQUNBLFlBQUlDLFFBQVFoaEMsRUFBRStnQyxPQUFGLEVBQVo7QUFDQSxZQUFJRSxNQUFNSCxRQUFRRSxLQUFsQjs7QUFFQSxZQUFJQyxRQUFRLENBQVosRUFBZTtBQUNkO0FBQ0FBLGVBQU01akMsRUFBRTBlLGFBQUYsR0FBa0IvYixFQUFFK2IsYUFBMUI7QUFDQTs7QUFFRCxlQUFPa2xCLEdBQVA7QUFDQSxRQVhEO0FBWUE7O0FBRUQ7QUFDQSxhQUFPWixhQUFhbGhDLEtBQWIsQ0FBbUIsQ0FBbkIsRUFBc0IsQ0FBdEIsQ0FBUDtBQUNBLE1BaEhLOztBQWtITjs7Ozs7Ozs7QUFRQXlLLFFBQUcsV0FBUzBSLEtBQVQsRUFBZ0J6ZSxDQUFoQixFQUFtQjJjLE9BQW5CLEVBQTRCO0FBQzlCLFVBQUkzQixXQUFXbWpCLG9CQUFvQm4rQixDQUFwQixFQUF1QnllLEtBQXZCLENBQWY7QUFDQSxVQUFJc1QsUUFBUSxFQUFaO0FBQ0EsVUFBSXNTLGlCQUFpQixLQUFyQjs7QUFFQXJCLHdCQUFrQnZrQixLQUFsQixFQUF5QixVQUFTc0osT0FBVCxFQUFrQjtBQUMxQyxXQUFJQSxRQUFRdWMsUUFBUixDQUFpQnRwQixTQUFTak8sQ0FBMUIsQ0FBSixFQUFrQztBQUNqQ2dsQixjQUFNOVEsSUFBTixDQUFXOEcsT0FBWDtBQUNBOztBQUVELFdBQUlBLFFBQVFxYixPQUFSLENBQWdCcG9CLFNBQVNqTyxDQUF6QixFQUE0QmlPLFNBQVN0TyxDQUFyQyxDQUFKLEVBQTZDO0FBQzVDMjNCLHlCQUFpQixJQUFqQjtBQUNBO0FBQ0QsT0FSRDs7QUFVQTtBQUNBO0FBQ0EsVUFBSTFuQixRQUFROFgsU0FBUixJQUFxQixDQUFDNFAsY0FBMUIsRUFBMEM7QUFDekN0UyxlQUFRLEVBQVI7QUFDQTtBQUNELGFBQU9BLEtBQVA7QUFDQSxNQS9JSzs7QUFpSk47Ozs7Ozs7O0FBUUFybEIsUUFBRyxXQUFTK1IsS0FBVCxFQUFnQnplLENBQWhCLEVBQW1CMmMsT0FBbkIsRUFBNEI7QUFDOUIsVUFBSTNCLFdBQVdtakIsb0JBQW9CbitCLENBQXBCLEVBQXVCeWUsS0FBdkIsQ0FBZjtBQUNBLFVBQUlzVCxRQUFRLEVBQVo7QUFDQSxVQUFJc1MsaUJBQWlCLEtBQXJCOztBQUVBckIsd0JBQWtCdmtCLEtBQWxCLEVBQXlCLFVBQVNzSixPQUFULEVBQWtCO0FBQzFDLFdBQUlBLFFBQVF3YyxRQUFSLENBQWlCdnBCLFNBQVN0TyxDQUExQixDQUFKLEVBQWtDO0FBQ2pDcWxCLGNBQU05USxJQUFOLENBQVc4RyxPQUFYO0FBQ0E7O0FBRUQsV0FBSUEsUUFBUXFiLE9BQVIsQ0FBZ0Jwb0IsU0FBU2pPLENBQXpCLEVBQTRCaU8sU0FBU3RPLENBQXJDLENBQUosRUFBNkM7QUFDNUMyM0IseUJBQWlCLElBQWpCO0FBQ0E7QUFDRCxPQVJEOztBQVVBO0FBQ0E7QUFDQSxVQUFJMW5CLFFBQVE4WCxTQUFSLElBQXFCLENBQUM0UCxjQUExQixFQUEwQztBQUN6Q3RTLGVBQVEsRUFBUjtBQUNBO0FBQ0QsYUFBT0EsS0FBUDtBQUNBO0FBOUtLO0FBRlMsSUFBakI7QUFvTEMsR0E1VXFDLEVBNFVwQyxFQUFDLE1BQUssRUFBTixFQTVVb0MsQ0F4dkxteEIsRUFva001eUIsSUFBRyxDQUFDLFVBQVN6eEIsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ2pEOztBQUVBLE9BQUk0WSxXQUFXN1gsUUFBUSxFQUFSLENBQWY7O0FBRUE2WCxZQUFTaUMsSUFBVCxDQUFjLFFBQWQsRUFBd0I7QUFDdkJ3VyxnQkFBWSxJQURXO0FBRXZCYyxpQ0FBNkIsQ0FGTjtBQUd2QlIseUJBQXFCLElBSEU7QUFJdkJ3RSxZQUFRLENBQUMsV0FBRCxFQUFjLFVBQWQsRUFBMEIsT0FBMUIsRUFBbUMsWUFBbkMsRUFBaUQsV0FBakQsQ0FKZTtBQUt2QnJiLFdBQU87QUFDTmljLGNBQVMsSUFESDtBQUVOaGMsV0FBTSxTQUZBO0FBR05tYSxnQkFBVyxJQUhMO0FBSU4wQix3QkFBbUI7QUFKYixLQUxnQjtBQVd2QjlRLGFBQVMsSUFYYztBQVl2QndkLGtCQUFjLGlCQVpTO0FBYXZCMkIsc0JBQWtCLE1BYks7QUFjdkJDLHVCQUFtQixvREFkSTtBQWV2QkMscUJBQWlCLEVBZk07QUFnQnZCQyxzQkFBa0IsUUFoQks7QUFpQnZCdmMsZUFBVyxJQWpCWTs7QUFtQnZCO0FBQ0EvUCxjQUFVLEVBcEJhOztBQXNCdkI7QUFDQXVzQixZQUFRO0FBQ1BoRSxjQUFTO0FBQ1J2ZixXQUFLLENBREc7QUFFUmlGLGFBQU8sQ0FGQztBQUdSRSxjQUFRLENBSEE7QUFJUnBGLFlBQU07QUFKRTtBQURGO0FBdkJlLElBQXhCOztBQWlDQTVoQixVQUFPRCxPQUFQLEdBQWlCLFlBQVc7O0FBRTNCO0FBQ0EsUUFBSU8sUUFBUSxTQUFSQSxLQUFRLENBQVN1YixJQUFULEVBQWV4QixNQUFmLEVBQXVCO0FBQ2xDLFVBQUtzVyxTQUFMLENBQWU5VSxJQUFmLEVBQXFCeEIsTUFBckI7QUFDQSxZQUFPLElBQVA7QUFDQSxLQUhEOztBQUtBL1osVUFBTUEsS0FBTixHQUFjQSxLQUFkOztBQUVBLFdBQU9BLEtBQVA7QUFDQSxJQVhEO0FBYUMsR0FuRGUsRUFtRGQsRUFBQyxNQUFLLEVBQU4sRUFuRGMsQ0Fwa015eUIsRUF1bk01eUIsSUFBRyxDQUFDLFVBQVNRLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRDs7QUFFQSxPQUFJeVksVUFBVTFYLFFBQVEsRUFBUixDQUFkOztBQUVBLFlBQVN1a0MsZ0JBQVQsQ0FBMEJqTyxLQUExQixFQUFpQzViLFFBQWpDLEVBQTJDO0FBQzFDLFdBQU9oRCxRQUFROGhCLEtBQVIsQ0FBY2xELEtBQWQsRUFBcUIsVUFBU2x5QixDQUFULEVBQVk7QUFDdkMsWUFBT0EsRUFBRXNXLFFBQUYsS0FBZUEsUUFBdEI7QUFDQSxLQUZNLENBQVA7QUFHQTs7QUFFRCxZQUFTOHBCLFlBQVQsQ0FBc0JsTyxLQUF0QixFQUE2Qm1PLE9BQTdCLEVBQXNDO0FBQ3JDbk8sVUFBTTdlLE9BQU4sQ0FBYyxVQUFTclQsQ0FBVCxFQUFZdEUsQ0FBWixFQUFlO0FBQzVCc0UsT0FBRXNnQyxVQUFGLEdBQWU1a0MsQ0FBZjtBQUNBLFlBQU9zRSxDQUFQO0FBQ0EsS0FIRDtBQUlBa3lCLFVBQU1vTixJQUFOLENBQVcsVUFBU3hqQyxDQUFULEVBQVkyQyxDQUFaLEVBQWU7QUFDekIsU0FBSThoQyxLQUFLRixVQUFVNWhDLENBQVYsR0FBYzNDLENBQXZCO0FBQ0EsU0FBSTBrQyxLQUFLSCxVQUFVdmtDLENBQVYsR0FBYzJDLENBQXZCO0FBQ0EsWUFBTzhoQyxHQUFHLzhCLE1BQUgsS0FBY2c5QixHQUFHaDlCLE1BQWpCLEdBQ04rOEIsR0FBR0QsVUFBSCxHQUFnQkUsR0FBR0YsVUFEYixHQUVOQyxHQUFHLzhCLE1BQUgsR0FBWWc5QixHQUFHaDlCLE1BRmhCO0FBR0EsS0FORDtBQU9BMHVCLFVBQU03ZSxPQUFOLENBQWMsVUFBU3JULENBQVQsRUFBWTtBQUN6QixZQUFPQSxFQUFFc2dDLFVBQVQ7QUFDQSxLQUZEO0FBR0E7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBO0FBQ0E7QUFDQTtBQUNBeGxDLFVBQU9ELE9BQVAsR0FBaUI7QUFDaEI0WSxjQUFVLEVBRE07O0FBR2hCOzs7Ozs7QUFNQWd0QixZQUFRLGdCQUFTMW1CLEtBQVQsRUFBZ0JwRCxJQUFoQixFQUFzQjtBQUM3QixTQUFJLENBQUNvRCxNQUFNdVYsS0FBWCxFQUFrQjtBQUNqQnZWLFlBQU11VixLQUFOLEdBQWMsRUFBZDtBQUNBOztBQUVEO0FBQ0EzWSxVQUFLK3BCLFNBQUwsR0FBaUIvcEIsS0FBSytwQixTQUFMLElBQWtCLEtBQW5DO0FBQ0EvcEIsVUFBS0wsUUFBTCxHQUFnQkssS0FBS0wsUUFBTCxJQUFpQixLQUFqQztBQUNBSyxVQUFLblQsTUFBTCxHQUFjbVQsS0FBS25ULE1BQUwsSUFBZSxDQUE3Qjs7QUFFQXVXLFdBQU11VixLQUFOLENBQVkvUyxJQUFaLENBQWlCNUYsSUFBakI7QUFDQSxLQXBCZTs7QUFzQmhCOzs7OztBQUtBeVUsZUFBVyxtQkFBU3JSLEtBQVQsRUFBZ0I0bUIsVUFBaEIsRUFBNEI7QUFDdEMsU0FBSTM3QixRQUFRK1UsTUFBTXVWLEtBQU4sR0FBY3ZWLE1BQU11VixLQUFOLENBQVloVCxPQUFaLENBQW9CcWtCLFVBQXBCLENBQWQsR0FBZ0QsQ0FBQyxDQUE3RDtBQUNBLFNBQUkzN0IsVUFBVSxDQUFDLENBQWYsRUFBa0I7QUFDakIrVSxZQUFNdVYsS0FBTixDQUFZbEYsTUFBWixDQUFtQnBsQixLQUFuQixFQUEwQixDQUExQjtBQUNBO0FBQ0QsS0FoQ2U7O0FBa0NoQjs7Ozs7O0FBTUE0N0IsZUFBVyxtQkFBUzdtQixLQUFULEVBQWdCcEQsSUFBaEIsRUFBc0JzQixPQUF0QixFQUErQjtBQUN6QyxTQUFJNG9CLFFBQVEsQ0FBQyxXQUFELEVBQWMsVUFBZCxFQUEwQixRQUExQixDQUFaO0FBQ0EsU0FBSWhwQixPQUFPZ3BCLE1BQU0xa0MsTUFBakI7QUFDQSxTQUFJVCxJQUFJLENBQVI7QUFDQSxTQUFJd0ksSUFBSjs7QUFFQSxZQUFPeEksSUFBSW1jLElBQVgsRUFBaUIsRUFBRW5jLENBQW5CLEVBQXNCO0FBQ3JCd0ksYUFBTzI4QixNQUFNbmxDLENBQU4sQ0FBUDtBQUNBLFVBQUl1YyxRQUFROVQsY0FBUixDQUF1QkQsSUFBdkIsQ0FBSixFQUFrQztBQUNqQ3lTLFlBQUt6UyxJQUFMLElBQWErVCxRQUFRL1QsSUFBUixDQUFiO0FBQ0E7QUFDRDtBQUNELEtBcERlOztBQXNEaEI7Ozs7Ozs7QUFPQXVWLFlBQVEsZ0JBQVNNLEtBQVQsRUFBZ0J4QyxLQUFoQixFQUF1QkMsTUFBdkIsRUFBK0I7QUFDdEMsU0FBSSxDQUFDdUMsS0FBTCxFQUFZO0FBQ1g7QUFDQTs7QUFFRCxTQUFJK21CLGdCQUFnQi9tQixNQUFNOUIsT0FBTixDQUFjaW9CLE1BQWQsSUFBd0IsRUFBNUM7QUFDQSxTQUFJaEUsVUFBVTVvQixRQUFRMkUsT0FBUixDQUFnQjhvQixTQUFoQixDQUEwQkQsY0FBYzVFLE9BQXhDLENBQWQ7QUFDQSxTQUFJOEUsY0FBYzlFLFFBQVF4ZixJQUExQjtBQUNBLFNBQUl1a0IsZUFBZS9FLFFBQVF0YSxLQUEzQjtBQUNBLFNBQUlzZixhQUFhaEYsUUFBUXZmLEdBQXpCO0FBQ0EsU0FBSXdrQixnQkFBZ0JqRixRQUFRcGEsTUFBNUI7O0FBRUEsU0FBSXNmLFlBQVlqQixpQkFBaUJwbUIsTUFBTXVWLEtBQXZCLEVBQThCLE1BQTlCLENBQWhCO0FBQ0EsU0FBSStSLGFBQWFsQixpQkFBaUJwbUIsTUFBTXVWLEtBQXZCLEVBQThCLE9BQTlCLENBQWpCO0FBQ0EsU0FBSWdTLFdBQVduQixpQkFBaUJwbUIsTUFBTXVWLEtBQXZCLEVBQThCLEtBQTlCLENBQWY7QUFDQSxTQUFJaVMsY0FBY3BCLGlCQUFpQnBtQixNQUFNdVYsS0FBdkIsRUFBOEIsUUFBOUIsQ0FBbEI7QUFDQSxTQUFJa1MsaUJBQWlCckIsaUJBQWlCcG1CLE1BQU11VixLQUF2QixFQUE4QixXQUE5QixDQUFyQjs7QUFFQTtBQUNBOFEsa0JBQWFnQixTQUFiLEVBQXdCLElBQXhCO0FBQ0FoQixrQkFBYWlCLFVBQWIsRUFBeUIsS0FBekI7QUFDQWpCLGtCQUFha0IsUUFBYixFQUF1QixJQUF2QjtBQUNBbEIsa0JBQWFtQixXQUFiLEVBQTBCLEtBQTFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQUlFLGFBQWFscUIsUUFBUXlwQixXQUFSLEdBQXNCQyxZQUF2QztBQUNBLFNBQUlTLGNBQWNscUIsU0FBUzBwQixVQUFULEdBQXNCQyxhQUF4QztBQUNBLFNBQUlRLGlCQUFpQkYsYUFBYSxDQUFsQyxDQWhFc0MsQ0FnRUQ7QUFDckMsU0FBSUcsa0JBQWtCRixjQUFjLENBQXBDLENBakVzQyxDQWlFQzs7QUFFdkM7QUFDQSxTQUFJRyxtQkFBbUIsQ0FBQ3RxQixRQUFRb3FCLGNBQVQsS0FBNEJQLFVBQVVqbEMsTUFBVixHQUFtQmtsQyxXQUFXbGxDLE1BQTFELENBQXZCOztBQUVBO0FBQ0EsU0FBSTJsQyxzQkFBc0IsQ0FBQ3RxQixTQUFTb3FCLGVBQVYsS0FBOEJOLFNBQVNubEMsTUFBVCxHQUFrQm9sQyxZQUFZcGxDLE1BQTVELENBQTFCOztBQUVBO0FBQ0EsU0FBSTRsQyxvQkFBb0JOLFVBQXhCO0FBQ0EsU0FBSU8scUJBQXFCTixXQUF6QjtBQUNBLFNBQUlPLGNBQWMsRUFBbEI7O0FBRUEsY0FBU0MsaUJBQVQsQ0FBMkIzUyxHQUEzQixFQUFnQztBQUMvQixVQUFJeE4sT0FBSjtBQUNBLFVBQUl6SyxlQUFlaVksSUFBSWpZLFlBQUosRUFBbkI7O0FBRUEsVUFBSUEsWUFBSixFQUFrQjtBQUNqQnlLLGlCQUFVd04sSUFBSTlWLE1BQUosQ0FBVzhWLElBQUltUixTQUFKLEdBQWdCZSxVQUFoQixHQUE2Qk0saUJBQXhDLEVBQTJERCxtQkFBM0QsQ0FBVjtBQUNBRSw2QkFBc0JqZ0IsUUFBUXZLLE1BQTlCO0FBQ0EsT0FIRCxNQUdPO0FBQ051SyxpQkFBVXdOLElBQUk5VixNQUFKLENBQVdvb0IsZ0JBQVgsRUFBNkJHLGtCQUE3QixDQUFWO0FBQ0FELDRCQUFxQmhnQixRQUFReEssS0FBN0I7QUFDQTs7QUFFRDBxQixrQkFBWTFsQixJQUFaLENBQWlCO0FBQ2hCakIsbUJBQVloRSxZQURJO0FBRWhCeUssZ0JBQVNBLE9BRk87QUFHaEJ3TixZQUFLQTtBQUhXLE9BQWpCO0FBS0E7O0FBRURqYyxhQUFRMkssSUFBUixDQUFhbWpCLFVBQVV4Z0MsTUFBVixDQUFpQnlnQyxVQUFqQixFQUE2QkMsUUFBN0IsRUFBdUNDLFdBQXZDLENBQWIsRUFBa0VXLGlCQUFsRTs7QUFFQTtBQUNBLFNBQUlDLDJCQUEyQixDQUEvQjtBQUNBLFNBQUlDLDRCQUE0QixDQUFoQztBQUNBLFNBQUlDLHdCQUF3QixDQUE1QjtBQUNBLFNBQUlDLDJCQUEyQixDQUEvQjs7QUFFQWh2QixhQUFRMkssSUFBUixDQUFhcWpCLFNBQVMxZ0MsTUFBVCxDQUFnQjJnQyxXQUFoQixDQUFiLEVBQTJDLFVBQVNnQixhQUFULEVBQXdCO0FBQ2xFLFVBQUlBLGNBQWNDLFVBQWxCLEVBQThCO0FBQzdCLFdBQUlDLGFBQWFGLGNBQWNDLFVBQWQsRUFBakI7QUFDQUwsa0NBQTJCcmtDLEtBQUttQixHQUFMLENBQVNrakMsd0JBQVQsRUFBbUNNLFdBQVcvbEIsSUFBOUMsQ0FBM0I7QUFDQTBsQixtQ0FBNEJ0a0MsS0FBS21CLEdBQUwsQ0FBU21qQyx5QkFBVCxFQUFvQ0ssV0FBVzdnQixLQUEvQyxDQUE1QjtBQUNBO0FBQ0QsTUFORDs7QUFRQXRPLGFBQVEySyxJQUFSLENBQWFtakIsVUFBVXhnQyxNQUFWLENBQWlCeWdDLFVBQWpCLENBQWIsRUFBMkMsVUFBU3FCLFdBQVQsRUFBc0I7QUFDaEUsVUFBSUEsWUFBWUYsVUFBaEIsRUFBNEI7QUFDM0IsV0FBSUMsYUFBYUMsWUFBWUYsVUFBWixFQUFqQjtBQUNBSCwrQkFBd0J2a0MsS0FBS21CLEdBQUwsQ0FBU29qQyxxQkFBVCxFQUFnQ0ksV0FBVzlsQixHQUEzQyxDQUF4QjtBQUNBMmxCLGtDQUEyQnhrQyxLQUFLbUIsR0FBTCxDQUFTcWpDLHdCQUFULEVBQW1DRyxXQUFXM2dCLE1BQTlDLENBQTNCO0FBQ0E7QUFDRCxNQU5EOztBQVFBO0FBQ0E7QUFDQTtBQUNBLFNBQUk2Z0Isc0JBQXNCM0IsV0FBMUI7QUFDQSxTQUFJNEIsdUJBQXVCM0IsWUFBM0I7QUFDQSxTQUFJNEIsc0JBQXNCM0IsVUFBMUI7QUFDQSxTQUFJNEIseUJBQXlCM0IsYUFBN0I7O0FBRUE7QUFDQSxjQUFTNEIsTUFBVCxDQUFnQnhULEdBQWhCLEVBQXFCO0FBQ3BCLFVBQUl5VCxhQUFhMXZCLFFBQVFraUIsYUFBUixDQUFzQnlNLFdBQXRCLEVBQW1DLFVBQVNnQixNQUFULEVBQWlCO0FBQ3BFLGNBQU9BLE9BQU8xVCxHQUFQLEtBQWVBLEdBQXRCO0FBQ0EsT0FGZ0IsQ0FBakI7O0FBSUEsVUFBSXlULFVBQUosRUFBZ0I7QUFDZixXQUFJelQsSUFBSWpZLFlBQUosRUFBSixFQUF3QjtBQUN2QixZQUFJNHJCLGNBQWM7QUFDakJ4bUIsZUFBTTVlLEtBQUttQixHQUFMLENBQVMwakMsbUJBQVQsRUFBOEJSLHdCQUE5QixDQURXO0FBRWpCdmdCLGdCQUFPOWpCLEtBQUttQixHQUFMLENBQVMyakMsb0JBQVQsRUFBK0JSLHlCQUEvQixDQUZVO0FBR2pCemxCLGNBQUssQ0FIWTtBQUlqQm1GLGlCQUFRO0FBSlMsU0FBbEI7O0FBT0E7QUFDQTtBQUNBeU4sWUFBSTlWLE1BQUosQ0FBVzhWLElBQUltUixTQUFKLEdBQWdCZSxVQUFoQixHQUE2Qk0saUJBQXhDLEVBQTJETCxjQUFjLENBQXpFLEVBQTRFd0IsV0FBNUU7QUFDQSxRQVhELE1BV087QUFDTjNULFlBQUk5VixNQUFKLENBQVd1cEIsV0FBV2poQixPQUFYLENBQW1CeEssS0FBOUIsRUFBcUN5cUIsa0JBQXJDO0FBQ0E7QUFDRDtBQUNEOztBQUVEO0FBQ0ExdUIsYUFBUTJLLElBQVIsQ0FBYW1qQixVQUFVeGdDLE1BQVYsQ0FBaUJ5Z0MsVUFBakIsQ0FBYixFQUEyQzBCLE1BQTNDOztBQUVBenZCLGFBQVEySyxJQUFSLENBQWFtakIsU0FBYixFQUF3QixVQUFTN1IsR0FBVCxFQUFjO0FBQ3JDb1QsNkJBQXVCcFQsSUFBSWhZLEtBQTNCO0FBQ0EsTUFGRDs7QUFJQWpFLGFBQVEySyxJQUFSLENBQWFvakIsVUFBYixFQUF5QixVQUFTOVIsR0FBVCxFQUFjO0FBQ3RDcVQsOEJBQXdCclQsSUFBSWhZLEtBQTVCO0FBQ0EsTUFGRDs7QUFJQTtBQUNBakUsYUFBUTJLLElBQVIsQ0FBYXFqQixTQUFTMWdDLE1BQVQsQ0FBZ0IyZ0MsV0FBaEIsQ0FBYixFQUEyQ3dCLE1BQTNDOztBQUVBO0FBQ0F6dkIsYUFBUTJLLElBQVIsQ0FBYXFqQixRQUFiLEVBQXVCLFVBQVMvUixHQUFULEVBQWM7QUFDcENzVCw2QkFBdUJ0VCxJQUFJL1gsTUFBM0I7QUFDQSxNQUZEOztBQUlBbEUsYUFBUTJLLElBQVIsQ0FBYXNqQixXQUFiLEVBQTBCLFVBQVNoUyxHQUFULEVBQWM7QUFDdkN1VCxnQ0FBMEJ2VCxJQUFJL1gsTUFBOUI7QUFDQSxNQUZEOztBQUlBLGNBQVMyckIsbUJBQVQsQ0FBNkI1VCxHQUE3QixFQUFrQztBQUNqQyxVQUFJeVQsYUFBYTF2QixRQUFRa2lCLGFBQVIsQ0FBc0J5TSxXQUF0QixFQUFtQyxVQUFTbGdCLE9BQVQsRUFBa0I7QUFDckUsY0FBT0EsUUFBUXdOLEdBQVIsS0FBZ0JBLEdBQXZCO0FBQ0EsT0FGZ0IsQ0FBakI7O0FBSUEsVUFBSTJULGNBQWM7QUFDakJ4bUIsYUFBTSxDQURXO0FBRWpCa0YsY0FBTyxDQUZVO0FBR2pCakYsWUFBS2ttQixtQkFIWTtBQUlqQi9nQixlQUFRZ2hCO0FBSlMsT0FBbEI7O0FBT0EsVUFBSUUsVUFBSixFQUFnQjtBQUNmelQsV0FBSTlWLE1BQUosQ0FBV3VwQixXQUFXamhCLE9BQVgsQ0FBbUJ4SyxLQUE5QixFQUFxQ3lxQixrQkFBckMsRUFBeURrQixXQUF6RDtBQUNBO0FBQ0Q7O0FBRUQ7QUFDQTV2QixhQUFRMkssSUFBUixDQUFhbWpCLFVBQVV4Z0MsTUFBVixDQUFpQnlnQyxVQUFqQixDQUFiLEVBQTJDOEIsbUJBQTNDOztBQUVBO0FBQ0FSLDJCQUFzQjNCLFdBQXRCO0FBQ0E0Qiw0QkFBdUIzQixZQUF2QjtBQUNBNEIsMkJBQXNCM0IsVUFBdEI7QUFDQTRCLDhCQUF5QjNCLGFBQXpCOztBQUVBN3RCLGFBQVEySyxJQUFSLENBQWFtakIsU0FBYixFQUF3QixVQUFTN1IsR0FBVCxFQUFjO0FBQ3JDb1QsNkJBQXVCcFQsSUFBSWhZLEtBQTNCO0FBQ0EsTUFGRDs7QUFJQWpFLGFBQVEySyxJQUFSLENBQWFvakIsVUFBYixFQUF5QixVQUFTOVIsR0FBVCxFQUFjO0FBQ3RDcVQsOEJBQXdCclQsSUFBSWhZLEtBQTVCO0FBQ0EsTUFGRDs7QUFJQWpFLGFBQVEySyxJQUFSLENBQWFxakIsUUFBYixFQUF1QixVQUFTL1IsR0FBVCxFQUFjO0FBQ3BDc1QsNkJBQXVCdFQsSUFBSS9YLE1BQTNCO0FBQ0EsTUFGRDtBQUdBbEUsYUFBUTJLLElBQVIsQ0FBYXNqQixXQUFiLEVBQTBCLFVBQVNoUyxHQUFULEVBQWM7QUFDdkN1VCxnQ0FBMEJ2VCxJQUFJL1gsTUFBOUI7QUFDQSxNQUZEOztBQUlBO0FBQ0EsU0FBSTRyQixzQkFBc0J0bEMsS0FBS21CLEdBQUwsQ0FBU2tqQywyQkFBMkJRLG1CQUFwQyxFQUF5RCxDQUF6RCxDQUExQjtBQUNBQSw0QkFBdUJTLG1CQUF2QjtBQUNBUiw2QkFBd0I5a0MsS0FBS21CLEdBQUwsQ0FBU21qQyw0QkFBNEJRLG9CQUFyQyxFQUEyRCxDQUEzRCxDQUF4Qjs7QUFFQSxTQUFJUyxxQkFBcUJ2bEMsS0FBS21CLEdBQUwsQ0FBU29qQyx3QkFBd0JRLG1CQUFqQyxFQUFzRCxDQUF0RCxDQUF6QjtBQUNBQSw0QkFBdUJRLGtCQUF2QjtBQUNBUCwrQkFBMEJobEMsS0FBS21CLEdBQUwsQ0FBU3FqQywyQkFBMkJRLHNCQUFwQyxFQUE0RCxDQUE1RCxDQUExQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFJUSx3QkFBd0I5ckIsU0FBU3FyQixtQkFBVCxHQUErQkMsc0JBQTNEO0FBQ0EsU0FBSVMsdUJBQXVCaHNCLFFBQVFvckIsbUJBQVIsR0FBOEJDLG9CQUF6RDs7QUFFQSxTQUFJVyx5QkFBeUJ4QixpQkFBekIsSUFBOEN1QiwwQkFBMEJ0QixrQkFBNUUsRUFBZ0c7QUFDL0YxdUIsY0FBUTJLLElBQVIsQ0FBYW1qQixTQUFiLEVBQXdCLFVBQVM3UixHQUFULEVBQWM7QUFDckNBLFdBQUkvWCxNQUFKLEdBQWE4ckIscUJBQWI7QUFDQSxPQUZEOztBQUlBaHdCLGNBQVEySyxJQUFSLENBQWFvakIsVUFBYixFQUF5QixVQUFTOVIsR0FBVCxFQUFjO0FBQ3RDQSxXQUFJL1gsTUFBSixHQUFhOHJCLHFCQUFiO0FBQ0EsT0FGRDs7QUFJQWh3QixjQUFRMkssSUFBUixDQUFhcWpCLFFBQWIsRUFBdUIsVUFBUy9SLEdBQVQsRUFBYztBQUNwQyxXQUFJLENBQUNBLElBQUltUixTQUFULEVBQW9CO0FBQ25CblIsWUFBSWhZLEtBQUosR0FBWWdzQixvQkFBWjtBQUNBO0FBQ0QsT0FKRDs7QUFNQWp3QixjQUFRMkssSUFBUixDQUFhc2pCLFdBQWIsRUFBMEIsVUFBU2hTLEdBQVQsRUFBYztBQUN2QyxXQUFJLENBQUNBLElBQUltUixTQUFULEVBQW9CO0FBQ25CblIsWUFBSWhZLEtBQUosR0FBWWdzQixvQkFBWjtBQUNBO0FBQ0QsT0FKRDs7QUFNQXZCLDJCQUFxQnNCLHFCQUFyQjtBQUNBdkIsMEJBQW9Cd0Isb0JBQXBCO0FBQ0E7O0FBRUQ7QUFDQSxTQUFJN21CLE9BQU9za0IsY0FBY29DLG1CQUF6QjtBQUNBLFNBQUl6bUIsTUFBTXVrQixhQUFhbUMsa0JBQXZCOztBQUVBLGNBQVNHLFFBQVQsQ0FBa0JqVSxHQUFsQixFQUF1QjtBQUN0QixVQUFJQSxJQUFJalksWUFBSixFQUFKLEVBQXdCO0FBQ3ZCaVksV0FBSTdTLElBQUosR0FBVzZTLElBQUltUixTQUFKLEdBQWdCTSxXQUFoQixHQUE4QjJCLG1CQUF6QztBQUNBcFQsV0FBSTNOLEtBQUosR0FBWTJOLElBQUltUixTQUFKLEdBQWdCbnBCLFFBQVEwcEIsWUFBeEIsR0FBdUMwQixzQkFBc0JaLGlCQUF6RTtBQUNBeFMsV0FBSTVTLEdBQUosR0FBVUEsR0FBVjtBQUNBNFMsV0FBSXpOLE1BQUosR0FBYW5GLE1BQU00UyxJQUFJL1gsTUFBdkI7O0FBRUE7QUFDQW1GLGFBQU00UyxJQUFJek4sTUFBVjtBQUVBLE9BVEQsTUFTTzs7QUFFTnlOLFdBQUk3UyxJQUFKLEdBQVdBLElBQVg7QUFDQTZTLFdBQUkzTixLQUFKLEdBQVlsRixPQUFPNlMsSUFBSWhZLEtBQXZCO0FBQ0FnWSxXQUFJNVMsR0FBSixHQUFVa21CLG1CQUFWO0FBQ0F0VCxXQUFJek4sTUFBSixHQUFhK2dCLHNCQUFzQmIsa0JBQW5DOztBQUVBO0FBQ0F0bEIsY0FBTzZTLElBQUkzTixLQUFYO0FBQ0E7QUFDRDs7QUFFRHRPLGFBQVEySyxJQUFSLENBQWFtakIsVUFBVXhnQyxNQUFWLENBQWlCMGdDLFFBQWpCLENBQWIsRUFBeUNrQyxRQUF6Qzs7QUFFQTtBQUNBOW1CLGFBQVFxbEIsaUJBQVI7QUFDQXBsQixZQUFPcWxCLGtCQUFQOztBQUVBMXVCLGFBQVEySyxJQUFSLENBQWFvakIsVUFBYixFQUF5Qm1DLFFBQXpCO0FBQ0Fsd0IsYUFBUTJLLElBQVIsQ0FBYXNqQixXQUFiLEVBQTBCaUMsUUFBMUI7O0FBRUE7QUFDQXpwQixXQUFNMkQsU0FBTixHQUFrQjtBQUNqQmhCLFlBQU1pbUIsbUJBRFc7QUFFakJobUIsV0FBS2ttQixtQkFGWTtBQUdqQmpoQixhQUFPK2dCLHNCQUFzQlosaUJBSFo7QUFJakJqZ0IsY0FBUStnQixzQkFBc0JiO0FBSmIsTUFBbEI7O0FBT0E7QUFDQTF1QixhQUFRMkssSUFBUixDQUFhdWpCLGNBQWIsRUFBNkIsVUFBU2pTLEdBQVQsRUFBYztBQUMxQ0EsVUFBSTdTLElBQUosR0FBVzNDLE1BQU0yRCxTQUFOLENBQWdCaEIsSUFBM0I7QUFDQTZTLFVBQUk1UyxHQUFKLEdBQVU1QyxNQUFNMkQsU0FBTixDQUFnQmYsR0FBMUI7QUFDQTRTLFVBQUkzTixLQUFKLEdBQVk3SCxNQUFNMkQsU0FBTixDQUFnQmtFLEtBQTVCO0FBQ0EyTixVQUFJek4sTUFBSixHQUFhL0gsTUFBTTJELFNBQU4sQ0FBZ0JvRSxNQUE3Qjs7QUFFQXlOLFVBQUk5VixNQUFKLENBQVdzb0IsaUJBQVgsRUFBOEJDLGtCQUE5QjtBQUNBLE1BUEQ7QUFRQTtBQWxYZSxJQUFqQjtBQXFYQyxHQXJhZSxFQXFhZCxFQUFDLE1BQUssRUFBTixFQXJhYyxDQXZuTXl5QixFQTRoTjV5QixJQUFHLENBQUMsVUFBU3BtQyxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDakQ7O0FBRUEsT0FBSTRZLFdBQVc3WCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUkwWCxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7O0FBRUE2WCxZQUFTaUMsSUFBVCxDQUFjLFFBQWQsRUFBd0I7QUFDdkIzQixhQUFTO0FBRGMsSUFBeEI7O0FBSUE7Ozs7O0FBS0FqWixVQUFPRCxPQUFQLEdBQWlCO0FBQ2hCOzs7O0FBSUE0b0MsY0FBVSxFQUxNOztBQU9oQjs7Ozs7O0FBTUFDLGNBQVUsQ0FiTTs7QUFlaEI7Ozs7QUFJQXR2QixjQUFVLGtCQUFTTCxPQUFULEVBQWtCO0FBQzNCLFNBQUk5WCxJQUFJLEtBQUt3bkMsUUFBYjtBQUNDLE9BQUQsQ0FBSzdpQyxNQUFMLENBQVltVCxPQUFaLEVBQXFCVixPQUFyQixDQUE2QixVQUFTc3dCLE1BQVQsRUFBaUI7QUFDN0MsVUFBSTFuQyxFQUFFcWdCLE9BQUYsQ0FBVXFuQixNQUFWLE1BQXNCLENBQUMsQ0FBM0IsRUFBOEI7QUFDN0IxbkMsU0FBRXNnQixJQUFGLENBQU9vbkIsTUFBUDtBQUNBO0FBQ0QsTUFKRDs7QUFNQSxVQUFLRCxRQUFMO0FBQ0EsS0E1QmU7O0FBOEJoQjs7OztBQUlBRSxnQkFBWSxvQkFBUzd2QixPQUFULEVBQWtCO0FBQzdCLFNBQUk5WCxJQUFJLEtBQUt3bkMsUUFBYjtBQUNDLE9BQUQsQ0FBSzdpQyxNQUFMLENBQVltVCxPQUFaLEVBQXFCVixPQUFyQixDQUE2QixVQUFTc3dCLE1BQVQsRUFBaUI7QUFDN0MsVUFBSUUsTUFBTTVuQyxFQUFFcWdCLE9BQUYsQ0FBVXFuQixNQUFWLENBQVY7QUFDQSxVQUFJRSxRQUFRLENBQUMsQ0FBYixFQUFnQjtBQUNmNW5DLFNBQUVtdUIsTUFBRixDQUFTeVosR0FBVCxFQUFjLENBQWQ7QUFDQTtBQUNELE1BTEQ7O0FBT0EsVUFBS0gsUUFBTDtBQUNBLEtBNUNlOztBQThDaEI7Ozs7QUFJQXJYLFdBQU8saUJBQVc7QUFDakIsVUFBS29YLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxVQUFLQyxRQUFMO0FBQ0EsS0FyRGU7O0FBdURoQjs7Ozs7QUFLQXRyQixXQUFPLGlCQUFXO0FBQ2pCLFlBQU8sS0FBS3FyQixRQUFMLENBQWN0bkMsTUFBckI7QUFDQSxLQTlEZTs7QUFnRWhCOzs7OztBQUtBMm5DLFlBQVEsa0JBQVc7QUFDbEIsWUFBTyxLQUFLTCxRQUFaO0FBQ0EsS0F2RWU7O0FBeUVoQjs7Ozs7Ozs7O0FBU0EzWCxZQUFRLGdCQUFTL1IsS0FBVCxFQUFnQmdxQixJQUFoQixFQUFzQmovQixJQUF0QixFQUE0QjtBQUNuQyxTQUFJay9CLGNBQWMsS0FBS0EsV0FBTCxDQUFpQmpxQixLQUFqQixDQUFsQjtBQUNBLFNBQUlsQyxPQUFPbXNCLFlBQVk3bkMsTUFBdkI7QUFDQSxTQUFJVCxDQUFKLEVBQU91b0MsVUFBUCxFQUFtQk4sTUFBbkIsRUFBMkJPLE1BQTNCLEVBQW1DaFUsTUFBbkM7O0FBRUEsVUFBS3gwQixJQUFJLENBQVQsRUFBWUEsSUFBSW1jLElBQWhCLEVBQXNCLEVBQUVuYyxDQUF4QixFQUEyQjtBQUMxQnVvQyxtQkFBYUQsWUFBWXRvQyxDQUFaLENBQWI7QUFDQWlvQyxlQUFTTSxXQUFXTixNQUFwQjtBQUNBelQsZUFBU3lULE9BQU9JLElBQVAsQ0FBVDtBQUNBLFVBQUksT0FBTzdULE1BQVAsS0FBa0IsVUFBdEIsRUFBa0M7QUFDakNnVSxnQkFBUyxDQUFDbnFCLEtBQUQsRUFBUW5aLE1BQVIsQ0FBZWtFLFFBQVEsRUFBdkIsQ0FBVDtBQUNBby9CLGNBQU8zbkIsSUFBUCxDQUFZMG5CLFdBQVdoc0IsT0FBdkI7QUFDQSxXQUFJaVksT0FBTzdXLEtBQVAsQ0FBYXNxQixNQUFiLEVBQXFCTyxNQUFyQixNQUFpQyxLQUFyQyxFQUE0QztBQUMzQyxlQUFPLEtBQVA7QUFDQTtBQUNEO0FBQ0Q7O0FBRUQsWUFBTyxJQUFQO0FBQ0EsS0FyR2U7O0FBdUdoQjs7Ozs7QUFLQUYsaUJBQWEscUJBQVNqcUIsS0FBVCxFQUFnQjtBQUM1QixTQUFJd2pCLFFBQVF4akIsTUFBTW9xQixRQUFOLEtBQW1CcHFCLE1BQU1vcUIsUUFBTixHQUFpQixFQUFwQyxDQUFaO0FBQ0EsU0FBSTVHLE1BQU10Z0IsRUFBTixLQUFhLEtBQUt5bUIsUUFBdEIsRUFBZ0M7QUFDL0IsYUFBT25HLE1BQU15RyxXQUFiO0FBQ0E7O0FBRUQsU0FBSWp3QixVQUFVLEVBQWQ7QUFDQSxTQUFJaXdCLGNBQWMsRUFBbEI7QUFDQSxTQUFJN3VCLFNBQVU0RSxTQUFTQSxNQUFNNUUsTUFBaEIsSUFBMkIsRUFBeEM7QUFDQSxTQUFJOEMsVUFBVzlDLE9BQU84QyxPQUFQLElBQWtCOUMsT0FBTzhDLE9BQVAsQ0FBZWxFLE9BQWxDLElBQThDLEVBQTVEOztBQUVBLFVBQUswdkIsUUFBTCxDQUFjN2lDLE1BQWQsQ0FBcUJ1VSxPQUFPcEIsT0FBUCxJQUFrQixFQUF2QyxFQUEyQ1YsT0FBM0MsQ0FBbUQsVUFBU3N3QixNQUFULEVBQWlCO0FBQ25FLFVBQUlFLE1BQU05dkIsUUFBUXVJLE9BQVIsQ0FBZ0JxbkIsTUFBaEIsQ0FBVjtBQUNBLFVBQUlFLFFBQVEsQ0FBQyxDQUFiLEVBQWdCO0FBQ2Y7QUFDQTs7QUFFRCxVQUFJNW1CLEtBQUswbUIsT0FBTzFtQixFQUFoQjtBQUNBLFVBQUl5RSxPQUFPekosUUFBUWdGLEVBQVIsQ0FBWDtBQUNBLFVBQUl5RSxTQUFTLEtBQWIsRUFBb0I7QUFDbkI7QUFDQTs7QUFFRCxVQUFJQSxTQUFTLElBQWIsRUFBbUI7QUFDbEJBLGNBQU9wTyxRQUFRelAsS0FBUixDQUFjNFAsU0FBU3ZZLE1BQVQsQ0FBZ0I2WSxPQUFoQixDQUF3QmtKLEVBQXhCLENBQWQsQ0FBUDtBQUNBOztBQUVEbEosY0FBUXdJLElBQVIsQ0FBYW9uQixNQUFiO0FBQ0FLLGtCQUFZem5CLElBQVosQ0FBaUI7QUFDaEJvbkIsZUFBUUEsTUFEUTtBQUVoQjFyQixnQkFBU3lKLFFBQVE7QUFGRCxPQUFqQjtBQUlBLE1BckJEOztBQXVCQTZiLFdBQU15RyxXQUFOLEdBQW9CQSxXQUFwQjtBQUNBekcsV0FBTXRnQixFQUFOLEdBQVcsS0FBS3ltQixRQUFoQjtBQUNBLFlBQU9NLFdBQVA7QUFDQSxLQWpKZTs7QUFtSmhCOzs7Ozs7QUFNQXpWLGlCQUFhLHFCQUFTeFUsS0FBVCxFQUFnQjtBQUM1QixZQUFPQSxNQUFNb3FCLFFBQWI7QUFDQTtBQTNKZSxJQUFqQjs7QUE4SkE7Ozs7O0FBS0E7Ozs7OztBQU1BOzs7Ozs7QUFNQTs7Ozs7Ozs7QUFRQTs7Ozs7OztBQU9BOzs7Ozs7Ozs7QUFTQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7Ozs7QUFXQTs7Ozs7Ozs7OztBQVVBOzs7Ozs7OztBQVFBOzs7Ozs7O0FBT0E7Ozs7Ozs7O0FBUUE7Ozs7Ozs7QUFPQTs7Ozs7Ozs7OztBQVVBOzs7Ozs7OztBQVFBOzs7Ozs7Ozs7QUFTQTs7Ozs7Ozs7QUFRQTs7Ozs7Ozs7Ozs7OztBQWFBOzs7Ozs7Ozs7Ozs7QUFZQTs7Ozs7Ozs7Ozs7QUFXQTs7Ozs7Ozs7OztBQVVBOzs7Ozs7OztBQVFBOzs7Ozs7OztBQVFBOzs7Ozs7O0FBT0E7Ozs7OztBQU9DLEdBaFllLEVBZ1lkLEVBQUMsTUFBSyxFQUFOLEVBQVMsTUFBSyxFQUFkLEVBaFljLENBNWhOeXlCLEVBNDVOcHlCLElBQUcsQ0FBQyxVQUFTdm9DLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUN6RDs7QUFFQSxPQUFJNFksV0FBVzdYLFFBQVEsRUFBUixDQUFmO0FBQ0EsT0FBSThYLFVBQVU5WCxRQUFRLEVBQVIsQ0FBZDtBQUNBLE9BQUkwWCxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7QUFDQSxPQUFJc1ksUUFBUXRZLFFBQVEsRUFBUixDQUFaOztBQUVBNlgsWUFBU2lDLElBQVQsQ0FBYyxPQUFkLEVBQXVCO0FBQ3RCMFIsYUFBUyxJQURhO0FBRXRCOVEsY0FBVSxNQUZZO0FBR3RCTCxZQUFRLEtBSGM7O0FBS3RCO0FBQ0FDLGVBQVc7QUFDVmtSLGNBQVMsSUFEQztBQUVWMk0sWUFBTyxvQkFGRztBQUdWdFQsZ0JBQVcsQ0FIRDtBQUlWMmpCLGlCQUFZLElBSkY7QUFLVkMsc0JBQWlCLElBTFA7QUFNVkMsZ0JBQVcsSUFORDtBQU9WQyxxQkFBZ0IsRUFQTjtBQVFWQyxvQkFBZSxDQVJMO0FBU1ZDLG9CQUFlLGtCQVRMO0FBVVZDLHlCQUFvQixFQVZWO0FBV1ZDLCtCQUEwQixHQVhoQjtBQVlWeHVCLHNCQUFpQixLQVpQO0FBYVZtTyxpQkFBWSxFQWJGO0FBY1ZDLHVCQUFrQjtBQWRSLEtBTlc7O0FBdUJ0QjtBQUNBcWdCLGdCQUFZO0FBQ1g7QUFDQXhkLGNBQVMsS0FGRTs7QUFJWDtBQUNBeWQsa0JBQWEsRUFMRjs7QUFPWDtBQUNBQyxpQkFBWSxHQVJEOztBQVVYO0FBQ0E1SSxjQUFTO0FBQ1J2ZixXQUFLLENBREc7QUFFUm1GLGNBQVE7QUFGQTtBQVhFLEtBeEJVOztBQXlDdEI7QUFDQXJLLFdBQU87QUFDTjhQLGtCQUFhLEtBRFA7QUFFTndkLGtCQUFhLENBRlA7QUFHTkMsa0JBQWEsRUFIUDtBQUlOQyxhQUFRLEtBSkY7QUFLTi9JLGNBQVMsQ0FMSDtBQU1ObUUsY0FBUyxLQU5IO0FBT05qWixjQUFTLElBUEg7QUFRTjhkLGVBQVUsSUFSSjtBQVNOQyxzQkFBaUIsQ0FUWDtBQVVOQyxrQkFBYSxDQVZQO0FBV047QUFDQXZhLGVBQVUzVyxNQUFNbXhCLFVBQU4sQ0FBaUIzbEMsTUFackI7QUFhTjRsQyxZQUFPLEVBYkQ7QUFjTkMsWUFBTztBQWREO0FBMUNlLElBQXZCOztBQTREQSxZQUFTQyxlQUFULENBQXlCL3RCLEtBQXpCLEVBQWdDO0FBQy9CLFFBQUlYLFNBQVMsRUFBYjtBQUNBLFFBQUlwYixDQUFKLEVBQU9tYyxJQUFQOztBQUVBLFNBQUtuYyxJQUFJLENBQUosRUFBT21jLE9BQU9KLE1BQU10YixNQUF6QixFQUFpQ1QsSUFBSW1jLElBQXJDLEVBQTJDLEVBQUVuYyxDQUE3QyxFQUFnRDtBQUMvQ29iLFlBQU95RixJQUFQLENBQVk5RSxNQUFNL2IsQ0FBTixFQUFTcWIsS0FBckI7QUFDQTs7QUFFRCxXQUFPRCxNQUFQO0FBQ0E7O0FBRUQsWUFBUzJ1QixZQUFULENBQXNCem5DLEtBQXRCLEVBQTZCZ0gsS0FBN0IsRUFBb0NtUixlQUFwQyxFQUFxRDtBQUNwRCxRQUFJdXZCLFlBQVkxbkMsTUFBTThaLGVBQU4sQ0FBc0I5UyxLQUF0QixDQUFoQjs7QUFFQSxRQUFJbVIsZUFBSixFQUFxQjtBQUNwQixTQUFJblIsVUFBVSxDQUFkLEVBQWlCO0FBQ2hCMGdDLG1CQUFhLENBQUMxbkMsTUFBTThaLGVBQU4sQ0FBc0IsQ0FBdEIsSUFBMkI0dEIsU0FBNUIsSUFBeUMsQ0FBdEQ7QUFDQSxNQUZELE1BRU87QUFDTkEsbUJBQWEsQ0FBQ0EsWUFBWTFuQyxNQUFNOFosZUFBTixDQUFzQjlTLFFBQVEsQ0FBOUIsQ0FBYixJQUFpRCxDQUE5RDtBQUNBO0FBQ0Q7QUFDRCxXQUFPMGdDLFNBQVA7QUFDQTs7QUFFRCxZQUFTQyxlQUFULENBQXlCendCLE9BQXpCLEVBQWtDMHdCLElBQWxDLEVBQXdDdkksSUFBeEMsRUFBOEM7QUFDN0MsV0FBTy9wQixRQUFRMk4sT0FBUixDQUFnQjJrQixJQUFoQixJQUNOdHlCLFFBQVE4cEIsV0FBUixDQUFvQmxvQixPQUFwQixFQUE2Qm1vQixJQUE3QixFQUFtQ3VJLElBQW5DLENBRE0sR0FFTjF3QixRQUFRMG9CLFdBQVIsQ0FBb0JnSSxJQUFwQixFQUEwQnJ1QixLQUYzQjtBQUdBOztBQUVELFlBQVNzdUIsZ0JBQVQsQ0FBMEI1dEIsT0FBMUIsRUFBbUM7QUFDbEMsUUFBSW1GLGlCQUFpQjlKLFFBQVE4SixjQUE3QjtBQUNBLFFBQUkwb0IsaUJBQWlCcnlCLFNBQVN2WSxNQUE5QjtBQUNBLFFBQUlvZCxPQUFPOEUsZUFBZW5GLFFBQVE4dEIsUUFBdkIsRUFBaUNELGVBQWU5RixlQUFoRCxDQUFYO0FBQ0EsUUFBSW5ULFFBQVF6UCxlQUFlbkYsUUFBUWlsQixTQUF2QixFQUFrQzRJLGVBQWU3RixnQkFBakQsQ0FBWjtBQUNBLFFBQUkrRixTQUFTNW9CLGVBQWVuRixRQUFRa2xCLFVBQXZCLEVBQW1DMkksZUFBZS9GLGlCQUFsRCxDQUFiOztBQUVBLFdBQU87QUFDTnpuQixXQUFNQSxJQURBO0FBRU51VSxZQUFPQSxLQUZEO0FBR05tWixhQUFRQSxNQUhGO0FBSU4zSSxXQUFNL3BCLFFBQVEwcEIsVUFBUixDQUFtQjFrQixJQUFuQixFQUF5QnVVLEtBQXpCLEVBQWdDbVosTUFBaEM7QUFKQSxLQUFQO0FBTUE7O0FBRUQsWUFBU0MsZUFBVCxDQUF5Qmh1QixPQUF6QixFQUFrQztBQUNqQyxXQUFPM0UsUUFBUTJFLE9BQVIsQ0FBZ0JpdUIsWUFBaEIsQ0FDTjV5QixRQUFROEosY0FBUixDQUF1Qm5GLFFBQVE2c0IsVUFBL0IsRUFBMkMsR0FBM0MsQ0FETSxFQUVOeHhCLFFBQVE4SixjQUFSLENBQXVCbkYsUUFBUTh0QixRQUEvQixFQUF5Q3R5QixTQUFTdlksTUFBVCxDQUFnQjhrQyxlQUF6RCxDQUZNLENBQVA7QUFHQTs7QUFFRGxsQyxVQUFPRCxPQUFQLEdBQWlCNlksUUFBUW1CLE1BQVIsQ0FBZTtBQUMvQjs7Ozs7O0FBTUEydEIsZ0JBQVksc0JBQVc7QUFDdEIsU0FBSXJwQixLQUFLLElBQVQ7QUFDQSxZQUFPO0FBQ051RCxZQUFNdkQsR0FBR2loQixXQUFILElBQWtCLENBRGxCO0FBRU56ZCxXQUFLeEQsR0FBR21oQixVQUFILElBQWlCLENBRmhCO0FBR04xWSxhQUFPekksR0FBR29oQixZQUFILElBQW1CLENBSHBCO0FBSU56WSxjQUFRM0ksR0FBR3FoQixhQUFILElBQW9CO0FBSnRCLE1BQVA7QUFNQSxLQWY4Qjs7QUFpQi9COzs7O0FBSUE5aUIsY0FBVSxvQkFBVztBQUNwQixZQUFPLEtBQUt5dUIsTUFBWjtBQUNBLEtBdkI4Qjs7QUF5Qi9CO0FBQ0E7QUFDQTs7QUFFQXJZLHVCQUFtQiw2QkFBVztBQUM3QixTQUFJclcsUUFBUSxLQUFLUSxPQUFMLENBQWFSLEtBQXpCO0FBQ0EsU0FBSUEsTUFBTTZ0QixLQUFOLEtBQWdCLEtBQXBCLEVBQTJCO0FBQzFCN3RCLFlBQU02dEIsS0FBTixHQUFjO0FBQ2JsZSxnQkFBUztBQURJLE9BQWQ7QUFHQTtBQUNELFNBQUkzUCxNQUFNOHRCLEtBQU4sS0FBZ0IsS0FBcEIsRUFBMkI7QUFDMUI5dEIsWUFBTTh0QixLQUFOLEdBQWM7QUFDYm5lLGdCQUFTO0FBREksT0FBZDtBQUdBO0FBQ0QsVUFBSyxJQUFJM1UsR0FBVCxJQUFnQmdGLEtBQWhCLEVBQXVCO0FBQ3RCLFVBQUloRixRQUFRLE9BQVIsSUFBbUJBLFFBQVEsT0FBL0IsRUFBd0M7QUFDdkMsV0FBSSxPQUFPZ0YsTUFBTTZ0QixLQUFOLENBQVk3eUIsR0FBWixDQUFQLEtBQTRCLFdBQWhDLEVBQTZDO0FBQzVDZ0YsY0FBTTZ0QixLQUFOLENBQVk3eUIsR0FBWixJQUFtQmdGLE1BQU1oRixHQUFOLENBQW5CO0FBQ0E7QUFDRCxXQUFJLE9BQU9nRixNQUFNOHRCLEtBQU4sQ0FBWTl5QixHQUFaLENBQVAsS0FBNEIsV0FBaEMsRUFBNkM7QUFDNUNnRixjQUFNOHRCLEtBQU4sQ0FBWTl5QixHQUFaLElBQW1CZ0YsTUFBTWhGLEdBQU4sQ0FBbkI7QUFDQTtBQUNEO0FBQ0Q7QUFDRCxLQW5EOEI7QUFvRC9CMnpCLGtCQUFjLHdCQUFXO0FBQ3hCOXlCLGFBQVF1WCxRQUFSLENBQWlCLEtBQUs1UyxPQUFMLENBQWFtdUIsWUFBOUIsRUFBNEMsQ0FBQyxJQUFELENBQTVDO0FBQ0EsS0F0RDhCOztBQXdEL0Izc0IsWUFBUSxnQkFBUzRzQixRQUFULEVBQW1CQyxTQUFuQixFQUE4QkMsT0FBOUIsRUFBdUM7QUFDOUMsU0FBSXB0QixLQUFLLElBQVQ7QUFDQSxTQUFJemQsQ0FBSixFQUFPbWMsSUFBUCxFQUFhZixNQUFiLEVBQXFCQyxLQUFyQixFQUE0QlUsS0FBNUIsRUFBbUNtdUIsSUFBbkM7O0FBRUE7QUFDQXpzQixRQUFHaXRCLFlBQUg7O0FBRUE7QUFDQWp0QixRQUFHa3RCLFFBQUgsR0FBY0EsUUFBZDtBQUNBbHRCLFFBQUdtdEIsU0FBSCxHQUFlQSxTQUFmO0FBQ0FudEIsUUFBR290QixPQUFILEdBQWFqekIsUUFBUXVCLE1BQVIsQ0FBZTtBQUMzQjZILFlBQU0sQ0FEcUI7QUFFM0JrRixhQUFPLENBRm9CO0FBRzNCakYsV0FBSyxDQUhzQjtBQUkzQm1GLGNBQVE7QUFKbUIsTUFBZixFQUtWeWtCLE9BTFUsQ0FBYjtBQU1BcHRCLFFBQUdxdEIsZ0JBQUgsR0FBc0JydEIsR0FBR3F0QixnQkFBSCxJQUF1QixFQUE3Qzs7QUFFQTtBQUNBcnRCLFFBQUdzdEIsbUJBQUg7QUFDQXR0QixRQUFHdXRCLGFBQUg7QUFDQXZ0QixRQUFHd3RCLGtCQUFIOztBQUVBO0FBQ0F4dEIsUUFBR3l0QixnQkFBSDtBQUNBenRCLFFBQUcwdEIsbUJBQUg7QUFDQTF0QixRQUFHMnRCLGVBQUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBM3RCLFFBQUc0dEIsZ0JBQUg7O0FBRUE7QUFDQTtBQUNBdHZCLGFBQVEwQixHQUFHNnRCLFVBQUgsTUFBbUIsRUFBM0I7O0FBRUE3dEIsUUFBRzh0QixlQUFIOztBQUVBOXRCLFFBQUcrdEIsMkJBQUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0Fwd0IsY0FBU3FDLEdBQUdndUIsb0JBQUgsQ0FBd0IxdkIsS0FBeEIsS0FBa0MwQixHQUFHMUIsS0FBOUM7O0FBRUEwQixRQUFHaXVCLDBCQUFIOztBQUVBanVCLFFBQUcxQixLQUFILEdBQVdYLE1BQVgsQ0FwRDhDLENBb0R6Qjs7QUFFckI7O0FBRUE7QUFDQSxVQUFLcGIsSUFBSSxDQUFKLEVBQU9tYyxPQUFPZixPQUFPM2EsTUFBMUIsRUFBa0NULElBQUltYyxJQUF0QyxFQUE0QyxFQUFFbmMsQ0FBOUMsRUFBaUQ7QUFDaERxYixjQUFRRCxPQUFPcGIsQ0FBUCxDQUFSO0FBQ0FrcUMsYUFBT251QixNQUFNL2IsQ0FBTixDQUFQO0FBQ0EsVUFBSSxDQUFDa3FDLElBQUwsRUFBVztBQUNWbnVCLGFBQU04RSxJQUFOLENBQVdxcEIsT0FBTztBQUNqQjd1QixlQUFPQSxLQURVO0FBRWpCd3VCLGVBQU87QUFGVSxRQUFsQjtBQUlBLE9BTEQsTUFLTztBQUNOSyxZQUFLN3VCLEtBQUwsR0FBYUEsS0FBYjtBQUNBO0FBQ0Q7O0FBRURvQyxRQUFHZ3RCLE1BQUgsR0FBWTF1QixLQUFaOztBQUVBO0FBQ0EwQixRQUFHa3VCLDJCQUFIO0FBQ0FsdUIsUUFBR211QixxQkFBSDtBQUNBbnVCLFFBQUdvdUIsMEJBQUg7QUFDQTtBQUNBcHVCLFFBQUdxdUIsU0FBSDtBQUNBcnVCLFFBQUdzdUIsR0FBSDtBQUNBdHVCLFFBQUd1dUIsUUFBSDtBQUNBO0FBQ0F2dUIsUUFBR3d1QixXQUFIOztBQUVBLFlBQU94dUIsR0FBRzRJLE9BQVY7QUFFQSxLQTdJOEI7QUE4SS9CNGxCLGlCQUFhLHVCQUFXO0FBQ3ZCcjBCLGFBQVF1WCxRQUFSLENBQWlCLEtBQUs1UyxPQUFMLENBQWEwdkIsV0FBOUIsRUFBMkMsQ0FBQyxJQUFELENBQTNDO0FBQ0EsS0FoSjhCOztBQWtKL0I7O0FBRUFsQix5QkFBcUIsK0JBQVc7QUFDL0JuekIsYUFBUXVYLFFBQVIsQ0FBaUIsS0FBSzVTLE9BQUwsQ0FBYXd1QixtQkFBOUIsRUFBbUQsQ0FBQyxJQUFELENBQW5EO0FBQ0EsS0F0SjhCO0FBdUovQkMsbUJBQWUseUJBQVc7QUFDekIsU0FBSXZ0QixLQUFLLElBQVQ7QUFDQTtBQUNBLFNBQUlBLEdBQUc3QixZQUFILEVBQUosRUFBdUI7QUFDdEI7QUFDQTZCLFNBQUc1QixLQUFILEdBQVc0QixHQUFHa3RCLFFBQWQ7QUFDQWx0QixTQUFHdUQsSUFBSCxHQUFVLENBQVY7QUFDQXZELFNBQUd5SSxLQUFILEdBQVd6SSxHQUFHNUIsS0FBZDtBQUNBLE1BTEQsTUFLTztBQUNONEIsU0FBRzNCLE1BQUgsR0FBWTJCLEdBQUdtdEIsU0FBZjs7QUFFQTtBQUNBbnRCLFNBQUd3RCxHQUFILEdBQVMsQ0FBVDtBQUNBeEQsU0FBRzJJLE1BQUgsR0FBWTNJLEdBQUczQixNQUFmO0FBQ0E7O0FBRUQ7QUFDQTJCLFFBQUdpaEIsV0FBSCxHQUFpQixDQUFqQjtBQUNBamhCLFFBQUdtaEIsVUFBSCxHQUFnQixDQUFoQjtBQUNBbmhCLFFBQUdvaEIsWUFBSCxHQUFrQixDQUFsQjtBQUNBcGhCLFFBQUdxaEIsYUFBSCxHQUFtQixDQUFuQjtBQUNBLEtBNUs4QjtBQTZLL0JtTSx3QkFBb0IsOEJBQVc7QUFDOUJyekIsYUFBUXVYLFFBQVIsQ0FBaUIsS0FBSzVTLE9BQUwsQ0FBYTB1QixrQkFBOUIsRUFBa0QsQ0FBQyxJQUFELENBQWxEO0FBQ0EsS0EvSzhCOztBQWlML0I7QUFDQUMsc0JBQWtCLDRCQUFXO0FBQzVCdHpCLGFBQVF1WCxRQUFSLENBQWlCLEtBQUs1UyxPQUFMLENBQWEydUIsZ0JBQTlCLEVBQWdELENBQUMsSUFBRCxDQUFoRDtBQUNBLEtBcEw4QjtBQXFML0JDLHlCQUFxQnZ6QixRQUFRZ08sSUFyTEU7QUFzTC9Cd2xCLHFCQUFpQiwyQkFBVztBQUMzQnh6QixhQUFRdVgsUUFBUixDQUFpQixLQUFLNVMsT0FBTCxDQUFhNnVCLGVBQTlCLEVBQStDLENBQUMsSUFBRCxDQUEvQztBQUNBLEtBeEw4Qjs7QUEwTC9CO0FBQ0FDLHNCQUFrQiw0QkFBVztBQUM1Qnp6QixhQUFRdVgsUUFBUixDQUFpQixLQUFLNVMsT0FBTCxDQUFhOHVCLGdCQUE5QixFQUFnRCxDQUFDLElBQUQsQ0FBaEQ7QUFDQSxLQTdMOEI7QUE4TC9CQyxnQkFBWTF6QixRQUFRZ08sSUE5TFc7QUErTC9CMmxCLHFCQUFpQiwyQkFBVztBQUMzQjN6QixhQUFRdVgsUUFBUixDQUFpQixLQUFLNVMsT0FBTCxDQUFhZ3ZCLGVBQTlCLEVBQStDLENBQUMsSUFBRCxDQUEvQztBQUNBLEtBak04Qjs7QUFtTS9CQyxpQ0FBNkIsdUNBQVc7QUFDdkM1ekIsYUFBUXVYLFFBQVIsQ0FBaUIsS0FBSzVTLE9BQUwsQ0FBYWl2QiwyQkFBOUIsRUFBMkQsQ0FBQyxJQUFELENBQTNEO0FBQ0EsS0FyTThCO0FBc00vQkMsMEJBQXNCLGdDQUFXO0FBQ2hDLFNBQUlodUIsS0FBSyxJQUFUO0FBQ0E7QUFDQSxTQUFJeXVCLFdBQVd6dUIsR0FBR2xCLE9BQUgsQ0FBV1IsS0FBMUI7QUFDQTBCLFFBQUcxQixLQUFILEdBQVcwQixHQUFHMUIsS0FBSCxDQUFTdUksR0FBVCxDQUFhNG5CLFNBQVNDLFlBQVQsSUFBeUJELFNBQVMvYyxRQUEvQyxFQUF5RCxJQUF6RCxDQUFYO0FBQ0EsS0EzTThCO0FBNE0vQnVjLGdDQUE0QixzQ0FBVztBQUN0Qzl6QixhQUFRdVgsUUFBUixDQUFpQixLQUFLNVMsT0FBTCxDQUFhbXZCLDBCQUE5QixFQUEwRCxDQUFDLElBQUQsQ0FBMUQ7QUFDQSxLQTlNOEI7O0FBZ04vQjs7QUFFQUMsaUNBQTZCLHVDQUFXO0FBQ3ZDL3pCLGFBQVF1WCxRQUFSLENBQWlCLEtBQUs1UyxPQUFMLENBQWFvdkIsMkJBQTlCLEVBQTJELENBQUMsSUFBRCxDQUEzRDtBQUNBLEtBcE44QjtBQXFOL0JDLDJCQUF1QixpQ0FBVztBQUNqQyxTQUFJbnVCLEtBQUssSUFBVDtBQUNBLFNBQUlqRSxVQUFVaUUsR0FBR3NFLEdBQWpCO0FBQ0EsU0FBSW1xQixXQUFXenVCLEdBQUdsQixPQUFILENBQVdSLEtBQTFCO0FBQ0EsU0FBSVgsU0FBUzB1QixnQkFBZ0Jyc0IsR0FBR2d0QixNQUFuQixDQUFiOztBQUVBO0FBQ0E7QUFDQSxTQUFJMkIsV0FBV2pDLGlCQUFpQitCLFFBQWpCLENBQWY7QUFDQTF5QixhQUFRbW9CLElBQVIsR0FBZXlLLFNBQVN6SyxJQUF4Qjs7QUFFQSxTQUFJMEssZ0JBQWdCSCxTQUFTN0MsV0FBVCxJQUF3QixDQUE1Qzs7QUFFQSxTQUFJanVCLE9BQU8zYSxNQUFQLElBQWlCZ2QsR0FBR2xCLE9BQUgsQ0FBV21QLE9BQTVCLElBQXVDak8sR0FBRzdCLFlBQUgsRUFBM0MsRUFBOEQ7QUFDN0QsVUFBSTB3QixxQkFBcUIxMEIsUUFBUThwQixXQUFSLENBQW9CbG9CLE9BQXBCLEVBQTZCNHlCLFNBQVN6SyxJQUF0QyxFQUE0Q3ZtQixNQUE1QyxFQUFvRHFDLEdBQUdxdEIsZ0JBQXZELENBQXpCO0FBQ0EsVUFBSXlCLGFBQWFELGtCQUFqQjtBQUNBLFVBQUlFLFdBQUosRUFBaUJDLFdBQWpCOztBQUVBO0FBQ0EsVUFBSUMsWUFBWWp2QixHQUFHckIsZUFBSCxDQUFtQixDQUFuQixJQUF3QnFCLEdBQUdyQixlQUFILENBQW1CLENBQW5CLENBQXhCLEdBQWdELENBQWhFOztBQUVBO0FBQ0EsYUFBT213QixhQUFhRyxTQUFiLElBQTBCTCxnQkFBZ0JILFNBQVM1QyxXQUExRCxFQUF1RTtBQUN0RSxXQUFJcUQsZUFBZS8wQixRQUFRb2pCLFNBQVIsQ0FBa0JxUixhQUFsQixDQUFuQjtBQUNBRyxxQkFBY3BxQyxLQUFLMkwsR0FBTCxDQUFTNCtCLFlBQVQsQ0FBZDtBQUNBRixxQkFBY3JxQyxLQUFLNEwsR0FBTCxDQUFTMitCLFlBQVQsQ0FBZDs7QUFFQSxXQUFJRixjQUFjSCxrQkFBZCxHQUFtQzd1QixHQUFHbXRCLFNBQTFDLEVBQXFEO0FBQ3BEO0FBQ0F5QjtBQUNBO0FBQ0E7O0FBRURBO0FBQ0FFLG9CQUFhQyxjQUFjRixrQkFBM0I7QUFDQTtBQUNEOztBQUVEN3VCLFFBQUc0dUIsYUFBSCxHQUFtQkEsYUFBbkI7QUFDQSxLQTVQOEI7QUE2UC9CUixnQ0FBNEIsc0NBQVc7QUFDdENqMEIsYUFBUXVYLFFBQVIsQ0FBaUIsS0FBSzVTLE9BQUwsQ0FBYXN2QiwwQkFBOUIsRUFBMEQsQ0FBQyxJQUFELENBQTFEO0FBQ0EsS0EvUDhCOztBQWlRL0I7O0FBRUFDLGVBQVcscUJBQVc7QUFDckJsMEIsYUFBUXVYLFFBQVIsQ0FBaUIsS0FBSzVTLE9BQUwsQ0FBYXV2QixTQUE5QixFQUF5QyxDQUFDLElBQUQsQ0FBekM7QUFDQSxLQXJROEI7QUFzUS9CQyxTQUFLLGVBQVc7QUFDZixTQUFJdHVCLEtBQUssSUFBVDtBQUNBO0FBQ0EsU0FBSTRJLFVBQVU1SSxHQUFHNEksT0FBSCxHQUFhO0FBQzFCeEssYUFBTyxDQURtQjtBQUUxQkMsY0FBUTtBQUZrQixNQUEzQjs7QUFLQSxTQUFJVixTQUFTMHVCLGdCQUFnQnJzQixHQUFHZ3RCLE1BQW5CLENBQWI7O0FBRUEsU0FBSXprQixPQUFPdkksR0FBR2xCLE9BQWQ7QUFDQSxTQUFJMnZCLFdBQVdsbUIsS0FBS2pLLEtBQXBCO0FBQ0EsU0FBSTZ3QixpQkFBaUI1bUIsS0FBS2tqQixVQUExQjtBQUNBLFNBQUkyRCxlQUFlN21CLEtBQUt4TCxTQUF4QjtBQUNBLFNBQUlrUixVQUFVMUYsS0FBSzBGLE9BQW5CO0FBQ0EsU0FBSTlQLGVBQWU2QixHQUFHN0IsWUFBSCxFQUFuQjs7QUFFQSxTQUFJd3dCLFdBQVdqQyxpQkFBaUIrQixRQUFqQixDQUFmO0FBQ0EsU0FBSXJELGlCQUFpQjdpQixLQUFLeEwsU0FBTCxDQUFlcXVCLGNBQXBDOztBQUVBO0FBQ0EsU0FBSWp0QixZQUFKLEVBQWtCO0FBQ2pCO0FBQ0F5SyxjQUFReEssS0FBUixHQUFnQjRCLEdBQUdxdkIsV0FBSCxLQUFtQnJ2QixHQUFHa3RCLFFBQUgsR0FBY2x0QixHQUFHb3RCLE9BQUgsQ0FBVzdwQixJQUF6QixHQUFnQ3ZELEdBQUdvdEIsT0FBSCxDQUFXM2tCLEtBQTlELEdBQXNFekksR0FBR2t0QixRQUF6RjtBQUNBLE1BSEQsTUFHTztBQUNOdGtCLGNBQVF4SyxLQUFSLEdBQWdCNlAsV0FBV21oQixhQUFhakUsU0FBeEIsR0FBb0NDLGNBQXBDLEdBQXFELENBQXJFO0FBQ0E7O0FBRUQ7QUFDQSxTQUFJanRCLFlBQUosRUFBa0I7QUFDakJ5SyxjQUFRdkssTUFBUixHQUFpQjRQLFdBQVdtaEIsYUFBYWpFLFNBQXhCLEdBQW9DQyxjQUFwQyxHQUFxRCxDQUF0RTtBQUNBLE1BRkQsTUFFTztBQUNOeGlCLGNBQVF2SyxNQUFSLEdBQWlCMkIsR0FBR210QixTQUFwQixDQURNLENBQ3lCO0FBQy9COztBQUVEO0FBQ0EsU0FBSWdDLGVBQWVsaEIsT0FBZixJQUEwQkEsT0FBOUIsRUFBdUM7QUFDdEMsVUFBSXFoQix1QkFBdUJ4QyxnQkFBZ0JxQyxjQUFoQixDQUEzQjtBQUNBLFVBQUlJLG9CQUFvQnAxQixRQUFRMkUsT0FBUixDQUFnQjhvQixTQUFoQixDQUEwQnVILGVBQWVwTSxPQUF6QyxDQUF4QjtBQUNBLFVBQUl5TSxjQUFjRix1QkFBdUJDLGtCQUFrQmx4QixNQUEzRDs7QUFFQSxVQUFJRixZQUFKLEVBQWtCO0FBQ2pCeUssZUFBUXZLLE1BQVIsSUFBa0JteEIsV0FBbEI7QUFDQSxPQUZELE1BRU87QUFDTjVtQixlQUFReEssS0FBUixJQUFpQm94QixXQUFqQjtBQUNBO0FBQ0Q7O0FBRUQ7QUFDQSxTQUFJZixTQUFTeGdCLE9BQVQsSUFBb0JBLE9BQXhCLEVBQWlDO0FBQ2hDLFVBQUl3aEIsbUJBQW1CdDFCLFFBQVE4cEIsV0FBUixDQUFvQmprQixHQUFHc0UsR0FBdkIsRUFBNEJxcUIsU0FBU3pLLElBQXJDLEVBQTJDdm1CLE1BQTNDLEVBQW1EcUMsR0FBR3F0QixnQkFBdEQsQ0FBdkI7QUFDQSxVQUFJcUMsNEJBQTRCdjFCLFFBQVEwcUIsa0JBQVIsQ0FBMkJsbkIsTUFBM0IsQ0FBaEM7QUFDQSxVQUFJZ3lCLFlBQVloQixTQUFTeHZCLElBQVQsR0FBZ0IsR0FBaEM7QUFDQSxVQUFJeXdCLGNBQWM1dkIsR0FBR2xCLE9BQUgsQ0FBV1IsS0FBWCxDQUFpQnlrQixPQUFuQzs7QUFFQSxVQUFJNWtCLFlBQUosRUFBa0I7QUFDakI7QUFDQTZCLFVBQUc2dkIsaUJBQUgsR0FBdUJKLGdCQUF2Qjs7QUFFQSxXQUFJUCxlQUFlLzBCLFFBQVFvakIsU0FBUixDQUFrQnZkLEdBQUc0dUIsYUFBckIsQ0FBbkI7QUFDQSxXQUFJRyxjQUFjcHFDLEtBQUsyTCxHQUFMLENBQVM0K0IsWUFBVCxDQUFsQjtBQUNBLFdBQUlGLGNBQWNycUMsS0FBSzRMLEdBQUwsQ0FBUzIrQixZQUFULENBQWxCOztBQUVBO0FBQ0EsV0FBSVksY0FBZWQsY0FBY1MsZ0JBQWYsR0FDZGQsU0FBU3h2QixJQUFULEdBQWdCdXdCLHlCQURGLEdBRWRDLGFBQWFELDRCQUE0QixDQUF6QyxDQUZjLEdBR2ZDLFNBSEgsQ0FUaUIsQ0FZSDs7QUFFZC9tQixlQUFRdkssTUFBUixHQUFpQjFaLEtBQUtrQixHQUFMLENBQVNtYSxHQUFHbXRCLFNBQVosRUFBdUJ2a0IsUUFBUXZLLE1BQVIsR0FBaUJ5eEIsV0FBakIsR0FBK0JGLFdBQXRELENBQWpCOztBQUVBNXZCLFVBQUdzRSxHQUFILENBQU80ZixJQUFQLEdBQWN5SyxTQUFTekssSUFBdkI7QUFDQSxXQUFJNkwsa0JBQWtCdkQsZ0JBQWdCeHNCLEdBQUdzRSxHQUFuQixFQUF3QjNHLE9BQU8sQ0FBUCxDQUF4QixFQUFtQ2d4QixTQUFTekssSUFBNUMsQ0FBdEI7QUFDQSxXQUFJOEwsaUJBQWlCeEQsZ0JBQWdCeHNCLEdBQUdzRSxHQUFuQixFQUF3QjNHLE9BQU9BLE9BQU8zYSxNQUFQLEdBQWdCLENBQXZCLENBQXhCLEVBQW1EMnJDLFNBQVN6SyxJQUE1RCxDQUFyQjs7QUFFQTtBQUNBO0FBQ0EsV0FBSWxrQixHQUFHNHVCLGFBQUgsS0FBcUIsQ0FBekIsRUFBNEI7QUFDM0I1dUIsV0FBR2loQixXQUFILEdBQWlCMVksS0FBS3BMLFFBQUwsS0FBa0IsUUFBbEIsR0FBOEI0eEIsY0FBY2dCLGVBQWYsR0FBa0MsQ0FBL0QsR0FBb0VoQixjQUFjWSxTQUFmLEdBQTRCLENBQWhILENBRDJCLENBQ3dGO0FBQ25IM3ZCLFdBQUdvaEIsWUFBSCxHQUFrQjdZLEtBQUtwTCxRQUFMLEtBQWtCLFFBQWxCLEdBQThCNHhCLGNBQWNZLFNBQWYsR0FBNEIsQ0FBekQsR0FBOERaLGNBQWNpQixjQUFmLEdBQWlDLENBQWhIO0FBQ0EsUUFIRCxNQUdPO0FBQ05od0IsV0FBR2loQixXQUFILEdBQWlCOE8sa0JBQWtCLENBQWxCLEdBQXNCLENBQXZDLENBRE0sQ0FDb0M7QUFDMUMvdkIsV0FBR29oQixZQUFILEdBQWtCNE8saUJBQWlCLENBQWpCLEdBQXFCLENBQXZDO0FBQ0E7QUFDRCxPQTdCRCxNQTZCTztBQUNOO0FBQ0E7QUFDQSxXQUFJdkIsU0FBUzNDLE1BQWIsRUFBcUI7QUFDcEIyRCwyQkFBbUIsQ0FBbkI7QUFDQSxRQUZELE1BRU87QUFDTjtBQUNBO0FBQ0FBLDRCQUFvQkcsY0FBY0QsU0FBbEM7QUFDQTs7QUFFRC9tQixlQUFReEssS0FBUixHQUFnQnpaLEtBQUtrQixHQUFMLENBQVNtYSxHQUFHa3RCLFFBQVosRUFBc0J0a0IsUUFBUXhLLEtBQVIsR0FBZ0JxeEIsZ0JBQXRDLENBQWhCOztBQUVBenZCLFVBQUdtaEIsVUFBSCxHQUFnQndOLFNBQVN4dkIsSUFBVCxHQUFnQixDQUFoQztBQUNBYSxVQUFHcWhCLGFBQUgsR0FBbUJzTixTQUFTeHZCLElBQVQsR0FBZ0IsQ0FBbkM7QUFDQTtBQUNEOztBQUVEYSxRQUFHaXdCLGFBQUg7O0FBRUFqd0IsUUFBRzVCLEtBQUgsR0FBV3dLLFFBQVF4SyxLQUFuQjtBQUNBNEIsUUFBRzNCLE1BQUgsR0FBWXVLLFFBQVF2SyxNQUFwQjtBQUNBLEtBaFg4Qjs7QUFrWC9COzs7O0FBSUE0eEIsbUJBQWUseUJBQVc7QUFDekIsU0FBSWp3QixLQUFLLElBQVQ7QUFDQSxTQUFJQSxHQUFHb3RCLE9BQVAsRUFBZ0I7QUFDZnB0QixTQUFHaWhCLFdBQUgsR0FBaUJ0OEIsS0FBS21CLEdBQUwsQ0FBU2thLEdBQUdpaEIsV0FBSCxHQUFpQmpoQixHQUFHb3RCLE9BQUgsQ0FBVzdwQixJQUFyQyxFQUEyQyxDQUEzQyxDQUFqQjtBQUNBdkQsU0FBR21oQixVQUFILEdBQWdCeDhCLEtBQUttQixHQUFMLENBQVNrYSxHQUFHbWhCLFVBQUgsR0FBZ0JuaEIsR0FBR290QixPQUFILENBQVc1cEIsR0FBcEMsRUFBeUMsQ0FBekMsQ0FBaEI7QUFDQXhELFNBQUdvaEIsWUFBSCxHQUFrQno4QixLQUFLbUIsR0FBTCxDQUFTa2EsR0FBR29oQixZQUFILEdBQWtCcGhCLEdBQUdvdEIsT0FBSCxDQUFXM2tCLEtBQXRDLEVBQTZDLENBQTdDLENBQWxCO0FBQ0F6SSxTQUFHcWhCLGFBQUgsR0FBbUIxOEIsS0FBS21CLEdBQUwsQ0FBU2thLEdBQUdxaEIsYUFBSCxHQUFtQnJoQixHQUFHb3RCLE9BQUgsQ0FBV3prQixNQUF2QyxFQUErQyxDQUEvQyxDQUFuQjtBQUNBO0FBQ0QsS0E5WDhCOztBQWdZL0I0bEIsY0FBVSxvQkFBVztBQUNwQnAwQixhQUFRdVgsUUFBUixDQUFpQixLQUFLNVMsT0FBTCxDQUFheXZCLFFBQTlCLEVBQXdDLENBQUMsSUFBRCxDQUF4QztBQUNBLEtBbFk4Qjs7QUFvWS9CO0FBQ0Fwd0Isa0JBQWMsd0JBQVc7QUFDeEIsWUFBTyxLQUFLVyxPQUFMLENBQWEzQixRQUFiLEtBQTBCLEtBQTFCLElBQW1DLEtBQUsyQixPQUFMLENBQWEzQixRQUFiLEtBQTBCLFFBQXBFO0FBQ0EsS0F2WThCO0FBd1kvQmt5QixpQkFBYSx1QkFBVztBQUN2QixZQUFRLEtBQUt2d0IsT0FBTCxDQUFheW9CLFNBQXJCO0FBQ0EsS0ExWThCOztBQTRZL0I7QUFDQTdqQixtQkFBZSx1QkFBU3dzQixRQUFULEVBQW1CO0FBQ2pDO0FBQ0EsU0FBSS8xQixRQUFRaUYsYUFBUixDQUFzQjh3QixRQUF0QixDQUFKLEVBQXFDO0FBQ3BDLGFBQU83cUIsR0FBUDtBQUNBO0FBQ0Q7QUFDQSxTQUFJLE9BQU82cUIsUUFBUCxLQUFvQixRQUFwQixJQUFnQyxDQUFDOVUsU0FBUzhVLFFBQVQsQ0FBckMsRUFBeUQ7QUFDeEQsYUFBTzdxQixHQUFQO0FBQ0E7QUFDRDtBQUNBLFNBQUk2cUIsUUFBSixFQUFjO0FBQ2IsVUFBSSxLQUFLL3hCLFlBQUwsRUFBSixFQUF5QjtBQUN4QixXQUFJK3hCLFNBQVNoaEMsQ0FBVCxLQUFleEosU0FBbkIsRUFBOEI7QUFDN0IsZUFBTyxLQUFLZ2UsYUFBTCxDQUFtQndzQixTQUFTaGhDLENBQTVCLENBQVA7QUFDQTtBQUNELE9BSkQsTUFJTyxJQUFJZ2hDLFNBQVNyaEMsQ0FBVCxLQUFlbkosU0FBbkIsRUFBOEI7QUFDcEMsY0FBTyxLQUFLZ2UsYUFBTCxDQUFtQndzQixTQUFTcmhDLENBQTVCLENBQVA7QUFDQTtBQUNEOztBQUVEO0FBQ0EsWUFBT3FoQyxRQUFQO0FBQ0EsS0FuYThCOztBQXFhL0I7Ozs7O0FBS0FDLHNCQUFrQmgyQixRQUFRZ08sSUExYUs7O0FBNGEvQjs7Ozs7OztBQU9BMUUsc0JBQWtCdEosUUFBUWdPLElBbmJLOztBQXFiL0I7Ozs7O0FBS0Fpb0Isc0JBQWtCajJCLFFBQVFnTyxJQTFiSzs7QUE0Yi9COzs7O0FBSUF4SixxQkFBaUIseUJBQVM5UyxLQUFULEVBQWdCO0FBQ2hDLFNBQUltVSxLQUFLLElBQVQ7QUFDQSxTQUFJbEQsU0FBU2tELEdBQUdsQixPQUFILENBQVdoQyxNQUF4QjtBQUNBLFNBQUlrRCxHQUFHN0IsWUFBSCxFQUFKLEVBQXVCO0FBQ3RCLFVBQUlreUIsYUFBYXJ3QixHQUFHNUIsS0FBSCxJQUFZNEIsR0FBR2loQixXQUFILEdBQWlCamhCLEdBQUdvaEIsWUFBaEMsQ0FBakI7QUFDQSxVQUFJNk4sWUFBWW9CLGFBQWExckMsS0FBS21CLEdBQUwsQ0FBVWthLEdBQUdndEIsTUFBSCxDQUFVaHFDLE1BQVYsSUFBb0I4WixTQUFTLENBQVQsR0FBYSxDQUFqQyxDQUFWLEVBQWdELENBQWhELENBQTdCO0FBQ0EsVUFBSXd6QixRQUFTckIsWUFBWXBqQyxLQUFiLEdBQXNCbVUsR0FBR2loQixXQUFyQzs7QUFFQSxVQUFJbmtCLE1BQUosRUFBWTtBQUNYd3pCLGdCQUFTckIsWUFBWSxDQUFyQjtBQUNBOztBQUVELFVBQUlzQixXQUFXdndCLEdBQUd1RCxJQUFILEdBQVU1ZSxLQUFLQyxLQUFMLENBQVcwckMsS0FBWCxDQUF6QjtBQUNBQyxrQkFBWXZ3QixHQUFHcXZCLFdBQUgsS0FBbUJydkIsR0FBR290QixPQUFILENBQVc3cEIsSUFBOUIsR0FBcUMsQ0FBakQ7QUFDQSxhQUFPZ3RCLFFBQVA7QUFDQTtBQUNELFNBQUlDLGNBQWN4d0IsR0FBRzNCLE1BQUgsSUFBYTJCLEdBQUdtaEIsVUFBSCxHQUFnQm5oQixHQUFHcWhCLGFBQWhDLENBQWxCO0FBQ0EsWUFBT3JoQixHQUFHd0QsR0FBSCxHQUFVM1gsU0FBUzJrQyxlQUFleHdCLEdBQUdndEIsTUFBSCxDQUFVaHFDLE1BQVYsR0FBbUIsQ0FBbEMsQ0FBVCxDQUFqQjtBQUNBLEtBbGQ4Qjs7QUFvZC9COzs7O0FBSUFvaUIsd0JBQW9CLDRCQUFTcXJCLE9BQVQsRUFBa0I7QUFDckMsU0FBSXp3QixLQUFLLElBQVQ7QUFDQSxTQUFJQSxHQUFHN0IsWUFBSCxFQUFKLEVBQXVCO0FBQ3RCLFVBQUlreUIsYUFBYXJ3QixHQUFHNUIsS0FBSCxJQUFZNEIsR0FBR2loQixXQUFILEdBQWlCamhCLEdBQUdvaEIsWUFBaEMsQ0FBakI7QUFDQSxVQUFJc1AsY0FBZUwsYUFBYUksT0FBZCxHQUF5Qnp3QixHQUFHaWhCLFdBQTlDOztBQUVBLFVBQUlzUCxXQUFXdndCLEdBQUd1RCxJQUFILEdBQVU1ZSxLQUFLQyxLQUFMLENBQVc4ckMsV0FBWCxDQUF6QjtBQUNBSCxrQkFBWXZ3QixHQUFHcXZCLFdBQUgsS0FBbUJydkIsR0FBR290QixPQUFILENBQVc3cEIsSUFBOUIsR0FBcUMsQ0FBakQ7QUFDQSxhQUFPZ3RCLFFBQVA7QUFDQTtBQUNELFlBQU92d0IsR0FBR3dELEdBQUgsR0FBVWl0QixVQUFVendCLEdBQUczQixNQUE5QjtBQUNBLEtBbmU4Qjs7QUFxZS9COzs7O0FBSUE2RCxrQkFBYyx3QkFBVztBQUN4QixZQUFPLEtBQUt1QixnQkFBTCxDQUFzQixLQUFLa3RCLFlBQUwsRUFBdEIsQ0FBUDtBQUNBLEtBM2U4Qjs7QUE2ZS9CQSxrQkFBYyx3QkFBVztBQUN4QixTQUFJM3dCLEtBQUssSUFBVDtBQUNBLFNBQUluYSxNQUFNbWEsR0FBR25hLEdBQWI7QUFDQSxTQUFJQyxNQUFNa2EsR0FBR2xhLEdBQWI7O0FBRUEsWUFBT2thLEdBQUdvTyxXQUFILEdBQWlCLENBQWpCLEdBQ052b0IsTUFBTSxDQUFOLElBQVdDLE1BQU0sQ0FBakIsR0FBcUJBLEdBQXJCLEdBQ0FELE1BQU0sQ0FBTixJQUFXQyxNQUFNLENBQWpCLEdBQXFCRCxHQUFyQixHQUNBLENBSEQ7QUFJQSxLQXRmOEI7O0FBd2YvQjs7OztBQUlBK3FDLGVBQVcsbUJBQVN0eUIsS0FBVCxFQUFnQjtBQUMxQixTQUFJdXlCLFNBQUo7QUFDQSxTQUFJN3dCLEtBQUssSUFBVDtBQUNBLFNBQUk3QixlQUFlNkIsR0FBRzdCLFlBQUgsRUFBbkI7QUFDQSxTQUFJMnlCLGNBQWM5d0IsR0FBR2xCLE9BQUgsQ0FBV1IsS0FBWCxDQUFpQjZ0QixLQUFuQztBQUNBLFNBQUk0RSxZQUFZenlCLE1BQU10YixNQUF0QjtBQUNBLFNBQUlndUMsdUJBQXVCNzJCLFFBQVFvakIsU0FBUixDQUFrQnZkLEdBQUc0dUIsYUFBckIsQ0FBM0I7QUFDQSxTQUFJRyxjQUFjcHFDLEtBQUsyTCxHQUFMLENBQVMwZ0Msb0JBQVQsQ0FBbEI7QUFDQSxTQUFJQyxzQkFBc0JqeEIsR0FBRzZ2QixpQkFBSCxHQUF1QmQsV0FBakQ7QUFDQSxTQUFJcGtDLFNBQVMsRUFBYjtBQUNBLFNBQUlwSSxDQUFKLEVBQU9rcUMsSUFBUCxFQUFheUUsVUFBYjs7QUFFQTtBQUNBLFNBQUlDLFFBQUo7QUFDQSxTQUFJTCxZQUFZTSxhQUFoQixFQUErQjtBQUM5QkQsaUJBQVdMLFlBQVlNLGFBQXZCO0FBQ0E7O0FBRUQsU0FBSWp6QixZQUFKLEVBQWtCO0FBQ2pCMHlCLGtCQUFZLEtBQVo7O0FBRUEsVUFBSSxDQUFDSSxzQkFBc0JILFlBQVk5RSxlQUFuQyxJQUFzRCtFLFNBQXRELEdBQW1FL3dCLEdBQUc1QixLQUFILElBQVk0QixHQUFHaWhCLFdBQUgsR0FBaUJqaEIsR0FBR29oQixZQUFoQyxDQUF2RSxFQUF1SDtBQUN0SHlQLG1CQUFZLElBQUlsc0MsS0FBSytLLEtBQUwsQ0FBWSxDQUFDdWhDLHNCQUFzQkgsWUFBWTlFLGVBQW5DLElBQXNEK0UsU0FBdkQsSUFBcUUvd0IsR0FBRzVCLEtBQUgsSUFBWTRCLEdBQUdpaEIsV0FBSCxHQUFpQmpoQixHQUFHb2hCLFlBQWhDLENBQXJFLENBQVgsQ0FBaEI7QUFDQTs7QUFFRDtBQUNBO0FBQ0EsVUFBSStQLFlBQVlKLFlBQVlJLFFBQTVCLEVBQXNDO0FBQ3JDTixtQkFBWWxzQyxLQUFLbUIsR0FBTCxDQUFTK3FDLFNBQVQsRUFBb0Jsc0MsS0FBSytLLEtBQUwsQ0FBV3FoQyxZQUFZSSxRQUF2QixDQUFwQixDQUFaO0FBQ0E7QUFDRDs7QUFFRCxVQUFLNXVDLElBQUksQ0FBVCxFQUFZQSxJQUFJd3VDLFNBQWhCLEVBQTJCeHVDLEdBQTNCLEVBQWdDO0FBQy9Ca3FDLGFBQU9udUIsTUFBTS9iLENBQU4sQ0FBUDs7QUFFQTtBQUNBMnVDLG1CQUFjTCxZQUFZLENBQVosSUFBaUJ0dUMsSUFBSXN1QyxTQUFKLEdBQWdCLENBQWxDLElBQXlDdHVDLElBQUlzdUMsU0FBSixLQUFrQixDQUFsQixJQUF1QnR1QyxJQUFJc3VDLFNBQUosSUFBaUJFLFNBQTlGO0FBQ0EsVUFBSUcsY0FBYzN1QyxNQUFNd3VDLFlBQVksQ0FBcEMsRUFBdUM7QUFDdEM7QUFDQSxjQUFPdEUsS0FBSzd1QixLQUFaO0FBQ0E7QUFDRGpULGFBQU95WSxJQUFQLENBQVlxcEIsSUFBWjtBQUNBO0FBQ0QsWUFBTzloQyxNQUFQO0FBQ0EsS0F4aUI4Qjs7QUEwaUIvQjtBQUNBO0FBQ0F5WixVQUFNLGNBQVNHLFNBQVQsRUFBb0I7QUFDekIsU0FBSXZFLEtBQUssSUFBVDtBQUNBLFNBQUlsQixVQUFVa0IsR0FBR2xCLE9BQWpCO0FBQ0EsU0FBSSxDQUFDQSxRQUFRbVAsT0FBYixFQUFzQjtBQUNyQjtBQUNBOztBQUVELFNBQUlsUyxVQUFVaUUsR0FBR3NFLEdBQWpCO0FBQ0EsU0FBSXFvQixpQkFBaUJyeUIsU0FBU3ZZLE1BQTlCO0FBQ0EsU0FBSSt1QyxjQUFjaHlCLFFBQVFSLEtBQVIsQ0FBYzZ0QixLQUFoQztBQUNBLFNBQUlrRixtQkFBbUJ2eUIsUUFBUVIsS0FBUixDQUFjOHRCLEtBQWQsSUFBdUIwRSxXQUE5QztBQUNBLFNBQUkvekIsWUFBWStCLFFBQVEvQixTQUF4QjtBQUNBLFNBQUkwdUIsYUFBYTNzQixRQUFRMnNCLFVBQXpCOztBQUVBLFNBQUk2RixZQUFZdHhCLEdBQUc0dUIsYUFBSCxLQUFxQixDQUFyQztBQUNBLFNBQUl6d0IsZUFBZTZCLEdBQUc3QixZQUFILEVBQW5COztBQUVBLFNBQUlHLFFBQVF3eUIsWUFBWS9FLFFBQVosR0FBdUIvckIsR0FBRzR3QixTQUFILENBQWE1d0IsR0FBR3pCLFFBQUgsRUFBYixDQUF2QixHQUFxRHlCLEdBQUd6QixRQUFILEVBQWpFO0FBQ0EsU0FBSWd6QixnQkFBZ0JwM0IsUUFBUThKLGNBQVIsQ0FBdUI2c0IsWUFBWVUsU0FBbkMsRUFBOEM3RSxlQUFlaEcsZ0JBQTdELENBQXBCO0FBQ0EsU0FBSWdJLFdBQVdqQyxpQkFBaUJvRSxXQUFqQixDQUFmO0FBQ0EsU0FBSVcscUJBQXFCdDNCLFFBQVE4SixjQUFSLENBQXVCb3RCLGlCQUFpQkcsU0FBeEMsRUFBbUQ3RSxlQUFlaEcsZ0JBQWxFLENBQXpCO0FBQ0EsU0FBSStLLGdCQUFnQmhGLGlCQUFpQjJFLGdCQUFqQixDQUFwQjs7QUFFQSxTQUFJTSxLQUFLNTBCLFVBQVVvdUIsU0FBVixHQUFzQnB1QixVQUFVcXVCLGNBQWhDLEdBQWlELENBQTFEOztBQUVBLFNBQUl3RyxzQkFBc0J6M0IsUUFBUThKLGNBQVIsQ0FBdUJ3bkIsV0FBVytGLFNBQWxDLEVBQTZDN0UsZUFBZWhHLGdCQUE1RCxDQUExQjtBQUNBLFNBQUlrTCxpQkFBaUJuRixpQkFBaUJqQixVQUFqQixDQUFyQjtBQUNBLFNBQUk4RCxvQkFBb0JwMUIsUUFBUTJFLE9BQVIsQ0FBZ0I4b0IsU0FBaEIsQ0FBMEI2RCxXQUFXMUksT0FBckMsQ0FBeEI7QUFDQSxTQUFJaU8sdUJBQXVCNzJCLFFBQVFvakIsU0FBUixDQUFrQnZkLEdBQUc0dUIsYUFBckIsQ0FBM0I7O0FBRUEsU0FBSWtELGNBQWMsRUFBbEI7O0FBRUEsU0FBSUMsWUFBWS94QixHQUFHbEIsT0FBSCxDQUFXL0IsU0FBWCxDQUFxQnVLLFNBQXJDO0FBQ0EsU0FBSTBxQixhQUFhbHpCLFFBQVEzQixRQUFSLEtBQXFCLE9BQXJCLEdBQStCNkMsR0FBR3VELElBQWxDLEdBQXlDdkQsR0FBR3lJLEtBQUgsR0FBV3NwQixTQUFYLEdBQXVCSixFQUFqRjtBQUNBLFNBQUlNLFdBQVduekIsUUFBUTNCLFFBQVIsS0FBcUIsT0FBckIsR0FBK0I2QyxHQUFHdUQsSUFBSCxHQUFVb3VCLEVBQXpDLEdBQThDM3hCLEdBQUd5SSxLQUFoRTtBQUNBLFNBQUl5cEIsYUFBYXB6QixRQUFRM0IsUUFBUixLQUFxQixRQUFyQixHQUFnQzZDLEdBQUd3RCxHQUFILEdBQVN1dUIsU0FBekMsR0FBcUQveEIsR0FBRzJJLE1BQUgsR0FBWWdwQixFQUFaLEdBQWlCSSxTQUF2RjtBQUNBLFNBQUlJLFdBQVdyekIsUUFBUTNCLFFBQVIsS0FBcUIsUUFBckIsR0FBZ0M2QyxHQUFHd0QsR0FBSCxHQUFTdXVCLFNBQVQsR0FBcUJKLEVBQXJELEdBQTBEM3hCLEdBQUcySSxNQUFILEdBQVlvcEIsU0FBckY7O0FBRUE1M0IsYUFBUTJLLElBQVIsQ0FBYXhHLEtBQWIsRUFBb0IsVUFBU211QixJQUFULEVBQWU1Z0MsS0FBZixFQUFzQjtBQUN6QztBQUNBLFVBQUlzTyxRQUFRaUYsYUFBUixDQUFzQnF0QixLQUFLN3VCLEtBQTNCLENBQUosRUFBdUM7QUFDdEM7QUFDQTs7QUFFRCxVQUFJQSxRQUFRNnVCLEtBQUs3dUIsS0FBakI7QUFDQSxVQUFJMEosU0FBSixFQUFlOHFCLFNBQWYsRUFBMEJqbkIsVUFBMUIsRUFBc0NDLGdCQUF0QztBQUNBLFVBQUl2ZixVQUFVbVUsR0FBR3F5QixhQUFiLElBQThCdnpCLFFBQVFoQyxNQUFSLEtBQW1CQyxVQUFVQyxlQUEvRCxFQUFnRjtBQUMvRTtBQUNBc0ssbUJBQVl2SyxVQUFVc3VCLGFBQXRCO0FBQ0ErRyxtQkFBWXIxQixVQUFVdXVCLGFBQXRCO0FBQ0FuZ0Isb0JBQWFwTyxVQUFVd3VCLGtCQUF2QjtBQUNBbmdCLDBCQUFtQnJPLFVBQVV5dUIsd0JBQTdCO0FBQ0EsT0FORCxNQU1PO0FBQ05sa0IsbUJBQVluTixRQUFRc0gscUJBQVIsQ0FBOEIxRSxVQUFVdUssU0FBeEMsRUFBbUR6YixLQUFuRCxDQUFaO0FBQ0F1bUMsbUJBQVlqNEIsUUFBUXNILHFCQUFSLENBQThCMUUsVUFBVTZkLEtBQXhDLEVBQStDL3VCLEtBQS9DLENBQVo7QUFDQXNmLG9CQUFhaFIsUUFBUThKLGNBQVIsQ0FBdUJsSCxVQUFVb08sVUFBakMsRUFBNkN3aEIsZUFBZXhoQixVQUE1RCxDQUFiO0FBQ0FDLDBCQUFtQmpSLFFBQVE4SixjQUFSLENBQXVCbEgsVUFBVXFPLGdCQUFqQyxFQUFtRHVoQixlQUFldmhCLGdCQUFsRSxDQUFuQjtBQUNBOztBQUVEO0FBQ0EsVUFBSWtuQixHQUFKLEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxFQUFtQkMsR0FBbkIsRUFBd0JDLEVBQXhCLEVBQTRCQyxFQUE1QixFQUFnQ0MsRUFBaEMsRUFBb0M1aUMsRUFBcEMsRUFBd0M2aUMsTUFBeEMsRUFBZ0RDLE1BQWhEO0FBQ0EsVUFBSUMsWUFBWSxRQUFoQjtBQUNBLFVBQUlDLGVBQWUsUUFBbkI7QUFDQSxVQUFJcEQsY0FBY2tCLFlBQVkvTixPQUE5Qjs7QUFFQSxVQUFJNWtCLFlBQUosRUFBa0I7QUFDakIsV0FBSTgwQixlQUFldEIsS0FBSy9CLFdBQXhCOztBQUVBLFdBQUk5d0IsUUFBUTNCLFFBQVIsS0FBcUIsUUFBekIsRUFBbUM7QUFDbEM7QUFDQTYxQix1QkFBZSxDQUFDMUIsU0FBRCxHQUFhLEtBQWIsR0FBcUIsUUFBcEM7QUFDQXlCLG9CQUFZLENBQUN6QixTQUFELEdBQWEsUUFBYixHQUF3QixPQUFwQztBQUNBd0IsaUJBQVM5eUIsR0FBR3dELEdBQUgsR0FBU3l2QixZQUFsQjtBQUNBLFFBTEQsTUFLTztBQUNOO0FBQ0FELHVCQUFlLENBQUMxQixTQUFELEdBQWEsUUFBYixHQUF3QixRQUF2QztBQUNBeUIsb0JBQVksQ0FBQ3pCLFNBQUQsR0FBYSxRQUFiLEdBQXdCLE1BQXBDO0FBQ0F3QixpQkFBUzl5QixHQUFHMkksTUFBSCxHQUFZc3FCLFlBQXJCO0FBQ0E7O0FBRUQsV0FBSUMsYUFBYTVHLGFBQWF0c0IsRUFBYixFQUFpQm5VLEtBQWpCLEVBQXdCa1IsVUFBVUMsZUFBVixJQUE2QnNCLE1BQU10YixNQUFOLEdBQWUsQ0FBcEUsQ0FBakI7QUFDQSxXQUFJa3dDLGFBQWFsekIsR0FBR3VELElBQXBCLEVBQTBCO0FBQ3pCNnVCLG9CQUFZLGVBQVo7QUFDQTtBQUNEYyxxQkFBYy80QixRQUFRZ2tCLFVBQVIsQ0FBbUI3VyxTQUFuQixDQUFkOztBQUVBdXJCLGdCQUFTN3lCLEdBQUdyQixlQUFILENBQW1COVMsS0FBbkIsSUFBNEJpbEMsWUFBWTdFLFdBQWpELENBckJpQixDQXFCNkM7O0FBRTlEcUcsYUFBTUUsTUFBTUUsS0FBS0UsS0FBS00sVUFBdEI7QUFDQVgsYUFBTUwsVUFBTjtBQUNBTyxhQUFNTixRQUFOO0FBQ0FRLFlBQUtwdUIsVUFBVWYsR0FBZjtBQUNBeFQsWUFBS3VVLFVBQVVvRSxNQUFWLEdBQW1Cb3BCLFNBQXhCO0FBQ0EsT0E1QkQsTUE0Qk87QUFDTixXQUFJb0IsU0FBU3IwQixRQUFRM0IsUUFBUixLQUFxQixNQUFsQztBQUNBLFdBQUlpMkIsWUFBSjs7QUFFQSxXQUFJdEMsWUFBWWhGLE1BQWhCLEVBQXdCO0FBQ3ZCaUgsb0JBQVlJLFNBQVMsTUFBVCxHQUFrQixPQUE5QjtBQUNBQyx1QkFBZXhELFdBQWY7QUFDQSxRQUhELE1BR087QUFDTm1ELG9CQUFZSSxTQUFTLE9BQVQsR0FBbUIsTUFBL0I7QUFDQUMsdUJBQWV6QixLQUFLL0IsV0FBcEI7QUFDQTs7QUFFRGlELGdCQUFTTSxTQUFTbnpCLEdBQUd5SSxLQUFILEdBQVcycUIsWUFBcEIsR0FBbUNwekIsR0FBR3VELElBQUgsR0FBVTZ2QixZQUF0RDs7QUFFQSxXQUFJQyxhQUFhL0csYUFBYXRzQixFQUFiLEVBQWlCblUsS0FBakIsRUFBd0JrUixVQUFVQyxlQUFWLElBQTZCc0IsTUFBTXRiLE1BQU4sR0FBZSxDQUFwRSxDQUFqQjtBQUNBLFdBQUlxd0MsYUFBYXJ6QixHQUFHd0QsR0FBcEIsRUFBeUI7QUFDeEI0dUIsb0JBQVksZUFBWjtBQUNBO0FBQ0RpQixxQkFBY2w1QixRQUFRZ2tCLFVBQVIsQ0FBbUI3VyxTQUFuQixDQUFkOztBQUVBd3JCLGdCQUFTOXlCLEdBQUdyQixlQUFILENBQW1COVMsS0FBbkIsSUFBNEJpbEMsWUFBWTdFLFdBQWpEOztBQUVBcUcsYUFBTU4sVUFBTjtBQUNBUSxhQUFNUCxRQUFOO0FBQ0FTLFlBQUtudUIsVUFBVWhCLElBQWY7QUFDQXF2QixZQUFLcnVCLFVBQVVrRSxLQUFWLEdBQWtCc3BCLFNBQXZCO0FBQ0FRLGFBQU1FLE1BQU1FLEtBQUszaUMsS0FBS3FqQyxVQUF0QjtBQUNBOztBQUVEdkIsa0JBQVkxdUIsSUFBWixDQUFpQjtBQUNoQmt2QixZQUFLQSxHQURXO0FBRWhCQyxZQUFLQSxHQUZXO0FBR2hCQyxZQUFLQSxHQUhXO0FBSWhCQyxZQUFLQSxHQUpXO0FBS2hCQyxXQUFJQSxFQUxZO0FBTWhCQyxXQUFJQSxFQU5ZO0FBT2hCQyxXQUFJQSxFQVBZO0FBUWhCNWlDLFdBQUlBLEVBUlk7QUFTaEI2aUMsZUFBUUEsTUFUUTtBQVVoQkMsZUFBUUEsTUFWUTtBQVdoQlEsZ0JBQVNoc0IsU0FYTztBQVloQmlzQixnQkFBU25CLFNBWk87QUFhaEJvQixxQkFBY3JvQixVQWJFO0FBY2hCc29CLDJCQUFvQnJvQixnQkFkSjtBQWVoQjNGLGlCQUFVLENBQUMsQ0FBRCxHQUFLdXJCLG9CQWZDO0FBZ0JoQnB6QixjQUFPQSxLQWhCUztBQWlCaEJ3dUIsY0FBT0ssS0FBS0wsS0FqQkk7QUFrQmhCNEcscUJBQWNBLFlBbEJFO0FBbUJoQkQsa0JBQVdBO0FBbkJLLE9BQWpCO0FBcUJBLE1BekdEOztBQTJHQTtBQUNBNTRCLGFBQVEySyxJQUFSLENBQWFndEIsV0FBYixFQUEwQixVQUFTNEIsVUFBVCxFQUFxQjtBQUM5QyxVQUFJMzJCLFVBQVVrUixPQUFkLEVBQXVCO0FBQ3RCbFMsZUFBUTQzQixJQUFSO0FBQ0E1M0IsZUFBUXVMLFNBQVIsR0FBb0Jvc0IsV0FBV0osT0FBL0I7QUFDQXYzQixlQUFRc0wsV0FBUixHQUFzQnFzQixXQUFXSCxPQUFqQztBQUNBLFdBQUl4M0IsUUFBUTYzQixXQUFaLEVBQXlCO0FBQ3hCNzNCLGdCQUFRNjNCLFdBQVIsQ0FBb0JGLFdBQVdGLFlBQS9CO0FBQ0F6M0IsZ0JBQVE4M0IsY0FBUixHQUF5QkgsV0FBV0Qsa0JBQXBDO0FBQ0E7O0FBRUQxM0IsZUFBUSszQixTQUFSOztBQUVBLFdBQUkvMkIsVUFBVW91QixTQUFkLEVBQXlCO0FBQ3hCcHZCLGdCQUFRZzRCLE1BQVIsQ0FBZUwsV0FBV3BCLEdBQTFCLEVBQStCb0IsV0FBV25CLEdBQTFDO0FBQ0F4MkIsZ0JBQVFpNEIsTUFBUixDQUFlTixXQUFXbEIsR0FBMUIsRUFBK0JrQixXQUFXakIsR0FBMUM7QUFDQTs7QUFFRCxXQUFJMTFCLFVBQVVtdUIsZUFBZCxFQUErQjtBQUM5Qm52QixnQkFBUWc0QixNQUFSLENBQWVMLFdBQVdoQixFQUExQixFQUE4QmdCLFdBQVdmLEVBQXpDO0FBQ0E1MkIsZ0JBQVFpNEIsTUFBUixDQUFlTixXQUFXZCxFQUExQixFQUE4QmMsV0FBVzFqQyxFQUF6QztBQUNBOztBQUVEK0wsZUFBUW1MLE1BQVI7QUFDQW5MLGVBQVFrNEIsT0FBUjtBQUNBOztBQUVELFVBQUluRCxZQUFZN2lCLE9BQWhCLEVBQXlCO0FBQ3hCO0FBQ0FsUyxlQUFRNDNCLElBQVI7QUFDQTUzQixlQUFRbTRCLFNBQVIsQ0FBa0JSLFdBQVdiLE1BQTdCLEVBQXFDYSxXQUFXWixNQUFoRDtBQUNBLzJCLGVBQVE5UixNQUFSLENBQWV5cEMsV0FBV2p1QixRQUExQjtBQUNBMUosZUFBUW1vQixJQUFSLEdBQWV3UCxXQUFXdEgsS0FBWCxHQUFtQnNGLGNBQWN4TixJQUFqQyxHQUF3Q3lLLFNBQVN6SyxJQUFoRTtBQUNBbm9CLGVBQVFxTCxTQUFSLEdBQW9Cc3NCLFdBQVd0SCxLQUFYLEdBQW1CcUYsa0JBQW5CLEdBQXdDRixhQUE1RDtBQUNBeDFCLGVBQVFpM0IsWUFBUixHQUF1QlUsV0FBV1YsWUFBbEM7QUFDQWozQixlQUFRZzNCLFNBQVIsR0FBb0JXLFdBQVdYLFNBQS9COztBQUVBLFdBQUluMUIsUUFBUTgxQixXQUFXOTFCLEtBQXZCO0FBQ0EsV0FBSXpELFFBQVEyTixPQUFSLENBQWdCbEssS0FBaEIsQ0FBSixFQUE0QjtBQUMzQixZQUFJdTJCLFlBQVl2MkIsTUFBTTVhLE1BQXRCO0FBQ0EsWUFBSTJvQyxhQUFhZ0QsU0FBU3h2QixJQUFULEdBQWdCLEdBQWpDO0FBQ0EsWUFBSXRRLElBQUltUixHQUFHN0IsWUFBSCxLQUFvQixDQUFwQixHQUF3QixDQUFDd3RCLFVBQUQsSUFBZXdJLFlBQVksQ0FBM0IsSUFBZ0MsQ0FBaEU7O0FBRUEsYUFBSyxJQUFJNXhDLElBQUksQ0FBYixFQUFnQkEsSUFBSTR4QyxTQUFwQixFQUErQixFQUFFNXhDLENBQWpDLEVBQW9DO0FBQ25DO0FBQ0F3WixpQkFBUXE0QixRQUFSLENBQWlCLEtBQUt4MkIsTUFBTXJiLENBQU4sQ0FBdEIsRUFBZ0MsQ0FBaEMsRUFBbUNzTSxDQUFuQztBQUNBO0FBQ0FBLGNBQUs4OEIsVUFBTDtBQUNBO0FBQ0QsUUFYRCxNQVdPO0FBQ041dkIsZ0JBQVFxNEIsUUFBUixDQUFpQngyQixLQUFqQixFQUF3QixDQUF4QixFQUEyQixDQUEzQjtBQUNBO0FBQ0Q3QixlQUFRazRCLE9BQVI7QUFDQTtBQUNELE1BckREOztBQXVEQSxTQUFJeEksV0FBV3hkLE9BQWYsRUFBd0I7QUFDdkI7QUFDQSxVQUFJb21CLFdBQUo7QUFDQSxVQUFJQyxXQUFKO0FBQ0EsVUFBSTd1QixXQUFXLENBQWY7QUFDQSxVQUFJOHVCLGlCQUFpQnpILGdCQUFnQnJCLFVBQWhCLElBQThCLENBQW5EOztBQUVBLFVBQUl0dEIsWUFBSixFQUFrQjtBQUNqQmsyQixxQkFBY3IwQixHQUFHdUQsSUFBSCxHQUFXLENBQUN2RCxHQUFHeUksS0FBSCxHQUFXekksR0FBR3VELElBQWYsSUFBdUIsQ0FBaEQsQ0FEaUIsQ0FDbUM7QUFDcEQrd0IscUJBQWN4MUIsUUFBUTNCLFFBQVIsS0FBcUIsUUFBckIsR0FDWDZDLEdBQUcySSxNQUFILEdBQVk0ckIsY0FBWixHQUE2QmhGLGtCQUFrQjVtQixNQURwQyxHQUVYM0ksR0FBR3dELEdBQUgsR0FBUyt3QixjQUFULEdBQTBCaEYsa0JBQWtCL3JCLEdBRi9DO0FBR0EsT0FMRCxNQUtPO0FBQ04sV0FBSTJ2QixTQUFTcjBCLFFBQVEzQixRQUFSLEtBQXFCLE1BQWxDO0FBQ0FrM0IscUJBQWNsQixTQUNYbnpCLEdBQUd1RCxJQUFILEdBQVVneEIsY0FBVixHQUEyQmhGLGtCQUFrQi9yQixHQURsQyxHQUVYeEQsR0FBR3lJLEtBQUgsR0FBVzhyQixjQUFYLEdBQTRCaEYsa0JBQWtCL3JCLEdBRmpEO0FBR0E4d0IscUJBQWN0MEIsR0FBR3dELEdBQUgsR0FBVSxDQUFDeEQsR0FBRzJJLE1BQUgsR0FBWTNJLEdBQUd3RCxHQUFoQixJQUF1QixDQUEvQztBQUNBaUMsa0JBQVcwdEIsU0FBUyxDQUFDLEdBQUQsR0FBT3h1QyxLQUFLd0wsRUFBckIsR0FBMEIsTUFBTXhMLEtBQUt3TCxFQUFoRDtBQUNBOztBQUVENEwsY0FBUTQzQixJQUFSO0FBQ0E1M0IsY0FBUW00QixTQUFSLENBQWtCRyxXQUFsQixFQUErQkMsV0FBL0I7QUFDQXY0QixjQUFROVIsTUFBUixDQUFld2IsUUFBZjtBQUNBMUosY0FBUWczQixTQUFSLEdBQW9CLFFBQXBCO0FBQ0FoM0IsY0FBUWkzQixZQUFSLEdBQXVCLFFBQXZCO0FBQ0FqM0IsY0FBUXFMLFNBQVIsR0FBb0J3cUIsbUJBQXBCLENBMUJ1QixDQTBCa0I7QUFDekM3MUIsY0FBUW1vQixJQUFSLEdBQWUyTixlQUFlM04sSUFBOUI7QUFDQW5vQixjQUFRcTRCLFFBQVIsQ0FBaUIzSSxXQUFXQyxXQUE1QixFQUF5QyxDQUF6QyxFQUE0QyxDQUE1QztBQUNBM3ZCLGNBQVFrNEIsT0FBUjtBQUNBOztBQUVELFNBQUlsM0IsVUFBVWt1QixVQUFkLEVBQTBCO0FBQ3pCO0FBQ0FsdkIsY0FBUXVMLFNBQVIsR0FBb0JuTixRQUFRc0gscUJBQVIsQ0FBOEIxRSxVQUFVdUssU0FBeEMsRUFBbUQsQ0FBbkQsQ0FBcEI7QUFDQXZMLGNBQVFzTCxXQUFSLEdBQXNCbE4sUUFBUXNILHFCQUFSLENBQThCMUUsVUFBVTZkLEtBQXhDLEVBQStDLENBQS9DLENBQXRCO0FBQ0EsVUFBSThYLEtBQUsxeUIsR0FBR3VELElBQVo7QUFDQSxVQUFJcXZCLEtBQUs1eUIsR0FBR3lJLEtBQUgsR0FBV3NwQixTQUFwQjtBQUNBLFVBQUlZLEtBQUszeUIsR0FBR3dELEdBQVo7QUFDQSxVQUFJeFQsS0FBS2dRLEdBQUcySSxNQUFILEdBQVlvcEIsU0FBckI7O0FBRUEsVUFBSTVULGFBQWFoa0IsUUFBUWdrQixVQUFSLENBQW1CcGlCLFFBQVF1TCxTQUEzQixDQUFqQjtBQUNBLFVBQUluSixZQUFKLEVBQWtCO0FBQ2pCdzBCLFlBQUszaUMsS0FBSzhPLFFBQVEzQixRQUFSLEtBQXFCLEtBQXJCLEdBQTZCNkMsR0FBRzJJLE1BQWhDLEdBQXlDM0ksR0FBR3dELEdBQXREO0FBQ0FtdkIsYUFBTXhVLFVBQU47QUFDQW51QixhQUFNbXVCLFVBQU47QUFDQSxPQUpELE1BSU87QUFDTnVVLFlBQUtFLEtBQUs5ekIsUUFBUTNCLFFBQVIsS0FBcUIsTUFBckIsR0FBOEI2QyxHQUFHeUksS0FBakMsR0FBeUN6SSxHQUFHdUQsSUFBdEQ7QUFDQW12QixhQUFNdlUsVUFBTjtBQUNBeVUsYUFBTXpVLFVBQU47QUFDQTs7QUFFRHBpQixjQUFRKzNCLFNBQVI7QUFDQS8zQixjQUFRZzRCLE1BQVIsQ0FBZXJCLEVBQWYsRUFBbUJDLEVBQW5CO0FBQ0E1MkIsY0FBUWk0QixNQUFSLENBQWVwQixFQUFmLEVBQW1CNWlDLEVBQW5CO0FBQ0ErTCxjQUFRbUwsTUFBUjtBQUNBO0FBQ0Q7QUE5eUI4QixJQUFmLENBQWpCO0FBaXpCQyxHQXg2QnVCLEVBdzZCdEIsRUFBQyxNQUFLLEVBQU4sRUFBUyxNQUFLLEVBQWQsRUFBaUIsTUFBSyxFQUF0QixFQUF5QixNQUFLLEVBQTlCLEVBeDZCc0IsQ0E1NU5peUIsRUFvMFBweEIsSUFBRyxDQUFDLFVBQVN6a0IsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ3pFOztBQUVBLE9BQUk0WSxXQUFXN1gsUUFBUSxFQUFSLENBQWY7QUFDQSxPQUFJMFgsVUFBVTFYLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSWlZLFVBQVVqWSxRQUFRLEVBQVIsQ0FBZDs7QUFFQWQsVUFBT0QsT0FBUCxHQUFpQjtBQUNoQjtBQUNBO0FBQ0E4eUMsa0JBQWMsRUFIRTtBQUloQjtBQUNBOztBQUVBO0FBQ0FsNkIsY0FBVSxFQVJNO0FBU2hCbTZCLHVCQUFtQiwyQkFBUzNwQyxJQUFULEVBQWU0cEMsZ0JBQWYsRUFBaUNDLGFBQWpDLEVBQWdEO0FBQ2xFLFVBQUtILFlBQUwsQ0FBa0IxcEMsSUFBbEIsSUFBMEI0cEMsZ0JBQTFCO0FBQ0EsVUFBS3A2QixRQUFMLENBQWN4UCxJQUFkLElBQXNCcVAsUUFBUXpQLEtBQVIsQ0FBY2lxQyxhQUFkLENBQXRCO0FBQ0EsS0FaZTtBQWFoQmpnQix5QkFBcUIsNkJBQVM1cEIsSUFBVCxFQUFlO0FBQ25DLFlBQU8sS0FBSzBwQyxZQUFMLENBQWtCeHBDLGNBQWxCLENBQWlDRixJQUFqQyxJQUF5QyxLQUFLMHBDLFlBQUwsQ0FBa0IxcEMsSUFBbEIsQ0FBekMsR0FBbUVwRixTQUExRTtBQUNBLEtBZmU7QUFnQmhCbzJCLHNCQUFrQiwwQkFBU2h4QixJQUFULEVBQWU7QUFDaEM7QUFDQSxZQUFPLEtBQUt3UCxRQUFMLENBQWN0UCxjQUFkLENBQTZCRixJQUE3QixJQUFxQ3FQLFFBQVE0ZixLQUFSLENBQWMsRUFBZCxFQUFrQixDQUFDemYsU0FBU3pWLEtBQVYsRUFBaUIsS0FBS3lWLFFBQUwsQ0FBY3hQLElBQWQsQ0FBakIsQ0FBbEIsQ0FBckMsR0FBZ0csRUFBdkc7QUFDQSxLQW5CZTtBQW9CaEI4cEMseUJBQXFCLDZCQUFTOXBDLElBQVQsRUFBZStwQyxTQUFmLEVBQTBCO0FBQzlDLFNBQUk3MEIsS0FBSyxJQUFUO0FBQ0EsU0FBSUEsR0FBRzFGLFFBQUgsQ0FBWXRQLGNBQVosQ0FBMkJGLElBQTNCLENBQUosRUFBc0M7QUFDckNrVixTQUFHMUYsUUFBSCxDQUFZeFAsSUFBWixJQUFvQnFQLFFBQVF1QixNQUFSLENBQWVzRSxHQUFHMUYsUUFBSCxDQUFZeFAsSUFBWixDQUFmLEVBQWtDK3BDLFNBQWxDLENBQXBCO0FBQ0E7QUFDRCxLQXpCZTtBQTBCaEJoZ0IsdUJBQW1CLDJCQUFTalUsS0FBVCxFQUFnQjtBQUNsQztBQUNBekcsYUFBUTJLLElBQVIsQ0FBYWxFLE1BQU1sRSxNQUFuQixFQUEyQixVQUFTN1gsS0FBVCxFQUFnQjtBQUMxQztBQUNBQSxZQUFNMGlDLFNBQU4sR0FBa0IxaUMsTUFBTWlhLE9BQU4sQ0FBY3lvQixTQUFoQztBQUNBMWlDLFlBQU1zWSxRQUFOLEdBQWlCdFksTUFBTWlhLE9BQU4sQ0FBYzNCLFFBQS9CO0FBQ0F0WSxZQUFNd0YsTUFBTixHQUFleEYsTUFBTWlhLE9BQU4sQ0FBY3pVLE1BQTdCO0FBQ0FxUSxjQUFRNHNCLE1BQVIsQ0FBZTFtQixLQUFmLEVBQXNCL2IsS0FBdEI7QUFDQSxNQU5EO0FBT0E7QUFuQ2UsSUFBakI7QUFzQ0MsR0E3Q3VDLEVBNkN0QyxFQUFDLE1BQUssRUFBTixFQUFTLE1BQUssRUFBZCxFQUFpQixNQUFLLEVBQXRCLEVBN0NzQyxDQXAwUGl4QixFQWkzUDV4QixJQUFHLENBQUMsVUFBU3BDLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRTs7QUFFQSxPQUFJeVksVUFBVTFYLFFBQVEsRUFBUixDQUFkOztBQUVBOzs7O0FBSUFkLFVBQU9ELE9BQVAsR0FBaUI7QUFDaEI7Ozs7QUFJQXdxQyxnQkFBWTtBQUNYOzs7Ozs7QUFNQTNsQyxhQUFRLGdCQUFTTyxLQUFULEVBQWdCO0FBQ3ZCLGFBQU9xVCxRQUFRMk4sT0FBUixDQUFnQmhoQixLQUFoQixJQUF5QkEsS0FBekIsR0FBaUMsS0FBS0EsS0FBN0M7QUFDQSxNQVRVOztBQVdYOzs7Ozs7OztBQVFBZ3VDLGFBQVEsZ0JBQVNDLFNBQVQsRUFBb0JscEMsS0FBcEIsRUFBMkJ5UyxLQUEzQixFQUFrQztBQUN6QztBQUNBLFVBQUkzUCxRQUFRMlAsTUFBTXRiLE1BQU4sR0FBZSxDQUFmLEdBQW1Cc2IsTUFBTSxDQUFOLElBQVdBLE1BQU0sQ0FBTixDQUE5QixHQUF5Q0EsTUFBTSxDQUFOLElBQVdBLE1BQU0sQ0FBTixDQUFoRTs7QUFFQTtBQUNBLFVBQUkzWixLQUFLd2xCLEdBQUwsQ0FBU3hiLEtBQVQsSUFBa0IsQ0FBdEIsRUFBeUI7QUFDeEIsV0FBSW9tQyxjQUFjcHdDLEtBQUsrSyxLQUFMLENBQVdxbEMsU0FBWCxDQUFsQixFQUF5QztBQUN4QztBQUNBcG1DLGdCQUFRb21DLFlBQVlwd0MsS0FBSytLLEtBQUwsQ0FBV3FsQyxTQUFYLENBQXBCO0FBQ0E7QUFDRDs7QUFFRCxVQUFJQyxXQUFXNzZCLFFBQVE4aUIsS0FBUixDQUFjdDRCLEtBQUt3bEIsR0FBTCxDQUFTeGIsS0FBVCxDQUFkLENBQWY7QUFDQSxVQUFJc21DLGFBQWEsRUFBakI7O0FBRUEsVUFBSUYsY0FBYyxDQUFsQixFQUFxQjtBQUNwQixXQUFJRyxVQUFVdndDLEtBQUttQixHQUFMLENBQVNuQixLQUFLd2xCLEdBQUwsQ0FBUzdMLE1BQU0sQ0FBTixDQUFULENBQVQsRUFBNkIzWixLQUFLd2xCLEdBQUwsQ0FBUzdMLE1BQU1BLE1BQU10YixNQUFOLEdBQWUsQ0FBckIsQ0FBVCxDQUE3QixDQUFkO0FBQ0EsV0FBSWt5QyxVQUFVLElBQWQsRUFBb0I7QUFBRTtBQUNyQixZQUFJQyxVQUFVaDdCLFFBQVE4aUIsS0FBUixDQUFjdDRCLEtBQUt3bEIsR0FBTCxDQUFTNHFCLFNBQVQsQ0FBZCxDQUFkO0FBQ0FFLHFCQUFhRixVQUFVSyxhQUFWLENBQXdCendDLEtBQUsrSyxLQUFMLENBQVd5bEMsT0FBWCxJQUFzQnh3QyxLQUFLK0ssS0FBTCxDQUFXc2xDLFFBQVgsQ0FBOUMsQ0FBYjtBQUNBLFFBSEQsTUFHTztBQUNOLFlBQUlLLGFBQWEsQ0FBQyxDQUFELEdBQUsxd0MsS0FBSytLLEtBQUwsQ0FBV3NsQyxRQUFYLENBQXRCO0FBQ0FLLHFCQUFhMXdDLEtBQUttQixHQUFMLENBQVNuQixLQUFLa0IsR0FBTCxDQUFTd3ZDLFVBQVQsRUFBcUIsRUFBckIsQ0FBVCxFQUFtQyxDQUFuQyxDQUFiLENBRk0sQ0FFOEM7QUFDcERKLHFCQUFhRixVQUFVTyxPQUFWLENBQWtCRCxVQUFsQixDQUFiO0FBQ0E7QUFDRCxPQVZELE1BVU87QUFDTkosb0JBQWEsR0FBYixDQURNLENBQ1k7QUFDbEI7O0FBRUQsYUFBT0EsVUFBUDtBQUNBLE1BakRVOztBQW1EWE0sa0JBQWEscUJBQVNSLFNBQVQsRUFBb0JscEMsS0FBcEIsRUFBMkJ5UyxLQUEzQixFQUFrQztBQUM5QyxVQUFJazNCLFNBQVNULFlBQWFwd0MsS0FBS2lFLEdBQUwsQ0FBUyxFQUFULEVBQWFqRSxLQUFLK0ssS0FBTCxDQUFXeUssUUFBUThpQixLQUFSLENBQWM4WCxTQUFkLENBQVgsQ0FBYixDQUExQjs7QUFFQSxVQUFJQSxjQUFjLENBQWxCLEVBQXFCO0FBQ3BCLGNBQU8sR0FBUDtBQUNBLE9BRkQsTUFFTyxJQUFJUyxXQUFXLENBQVgsSUFBZ0JBLFdBQVcsQ0FBM0IsSUFBZ0NBLFdBQVcsQ0FBM0MsSUFBZ0QzcEMsVUFBVSxDQUExRCxJQUErREEsVUFBVXlTLE1BQU10YixNQUFOLEdBQWUsQ0FBNUYsRUFBK0Y7QUFDckcsY0FBTyt4QyxVQUFVSyxhQUFWLEVBQVA7QUFDQTtBQUNELGFBQU8sRUFBUDtBQUNBO0FBNURVO0FBTEksSUFBakI7QUFxRUMsR0E5RStCLEVBOEU5QixFQUFDLE1BQUssRUFBTixFQTlFOEIsQ0FqM1B5eEIsRUErN1A1eUIsSUFBRyxDQUFDLFVBQVMzeUMsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ2pEOztBQUVBLE9BQUk0WSxXQUFXN1gsUUFBUSxFQUFSLENBQWY7QUFDQSxPQUFJOFgsVUFBVTlYLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSTBYLFVBQVUxWCxRQUFRLEVBQVIsQ0FBZDs7QUFFQTZYLFlBQVNpQyxJQUFULENBQWMsUUFBZCxFQUF3QjtBQUN2QmUsY0FBVTtBQUNUMmEsY0FBUyxJQURBO0FBRVRuWCxhQUFRLElBRkM7QUFHVHJFLFdBQU0sU0FIRztBQUlUVSxlQUFVLFNBSkQ7QUFLVHlaLGdCQUFXLElBTEY7QUFNVHBWLHNCQUFpQixpQkFOUjtBQU9UaTBCLHFCQUFnQixNQVBQO0FBUVRDLG1CQUFjLENBUkw7QUFTVEMsd0JBQW1CLENBVFY7QUFVVEMscUJBQWdCLE1BVlA7QUFXVEMsaUJBQVksTUFYSDtBQVlUQyxrQkFBYSxDQVpKO0FBYVRDLG9CQUFlLE1BYk47QUFjVEMsZ0JBQVcsTUFkRjtBQWVUQyxzQkFBaUIsTUFmUjtBQWdCVEMsb0JBQWUsQ0FoQk47QUFpQlRDLHNCQUFpQixDQWpCUjtBQWtCVEMsc0JBQWlCLE1BbEJSO0FBbUJUQyxrQkFBYSxNQW5CSjtBQW9CVEMsZUFBVSxDQXBCRDtBQXFCVEMsZUFBVSxDQXJCRDtBQXNCVEMsbUJBQWMsQ0F0Qkw7QUF1QlRDLGdCQUFXLENBdkJGO0FBd0JUQyxtQkFBYyxDQXhCTDtBQXlCVEMseUJBQW9CLE1BekJYO0FBMEJUQyxvQkFBZSxJQTFCTjtBQTJCVGwxQixrQkFBYSxlQTNCSjtBQTRCVEMsa0JBQWEsQ0E1Qko7QUE2QlRwRSxnQkFBVztBQUNWO0FBQ0FzNUIsbUJBQWExOEIsUUFBUWdPLElBRlg7QUFHVjVNLGFBQU8sZUFBU3U3QixZQUFULEVBQXVCcjVCLElBQXZCLEVBQTZCO0FBQ25DO0FBQ0EsV0FBSWxDLFFBQVEsRUFBWjtBQUNBLFdBQUlvQyxTQUFTRixLQUFLRSxNQUFsQjtBQUNBLFdBQUlvNUIsYUFBYXA1QixTQUFTQSxPQUFPM2EsTUFBaEIsR0FBeUIsQ0FBMUM7O0FBRUEsV0FBSTh6QyxhQUFhOXpDLE1BQWIsR0FBc0IsQ0FBMUIsRUFBNkI7QUFDNUIsWUFBSXdhLE9BQU9zNUIsYUFBYSxDQUFiLENBQVg7O0FBRUEsWUFBSXQ1QixLQUFLUSxNQUFULEVBQWlCO0FBQ2hCekMsaUJBQVFpQyxLQUFLUSxNQUFiO0FBQ0EsU0FGRCxNQUVPLElBQUkrNEIsYUFBYSxDQUFiLElBQWtCdjVCLEtBQUszUixLQUFMLEdBQWFrckMsVUFBbkMsRUFBK0M7QUFDckR4N0IsaUJBQVFvQyxPQUFPSCxLQUFLM1IsS0FBWixDQUFSO0FBQ0E7QUFDRDs7QUFFRCxjQUFPMFAsS0FBUDtBQUNBLE9BcEJTO0FBcUJWeTdCLGtCQUFZNzhCLFFBQVFnTyxJQXJCVjs7QUF1QlY7QUFDQTh1QixrQkFBWTk4QixRQUFRZ08sSUF4QlY7O0FBMEJWO0FBQ0ErdUIsbUJBQWEvOEIsUUFBUWdPLElBM0JYO0FBNEJWdkssYUFBTyxlQUFTZ0ssV0FBVCxFQUFzQm5LLElBQXRCLEVBQTRCO0FBQ2xDLFdBQUlHLFFBQVFILEtBQUtLLFFBQUwsQ0FBYzhKLFlBQVk3SixZQUExQixFQUF3Q0gsS0FBeEMsSUFBaUQsRUFBN0Q7O0FBRUEsV0FBSUEsS0FBSixFQUFXO0FBQ1ZBLGlCQUFTLElBQVQ7QUFDQTtBQUNEQSxnQkFBU2dLLFlBQVlsSyxNQUFyQjtBQUNBLGNBQU9FLEtBQVA7QUFDQSxPQXBDUztBQXFDVnU1QixrQkFBWSxvQkFBU3Z2QixXQUFULEVBQXNCaEgsS0FBdEIsRUFBNkI7QUFDeEMsV0FBSVgsT0FBT1csTUFBTXFDLGNBQU4sQ0FBcUIyRSxZQUFZN0osWUFBakMsQ0FBWDtBQUNBLFdBQUlxNUIsZ0JBQWdCbjNCLEtBQUt4QyxJQUFMLENBQVVtSyxZQUFZL2IsS0FBdEIsQ0FBcEI7QUFDQSxXQUFJaXZCLE9BQU9zYyxjQUFjOWIsS0FBekI7QUFDQSxjQUFPO0FBQ041WixxQkFBYW9aLEtBQUtwWixXQURaO0FBRU5GLHlCQUFpQnNaLEtBQUt0WjtBQUZoQixRQUFQO0FBSUEsT0E3Q1M7QUE4Q1Y2MUIsc0JBQWdCLDBCQUFXO0FBQzFCLGNBQU8sS0FBSy94QixRQUFMLENBQWN5d0IsYUFBckI7QUFDQSxPQWhEUztBQWlEVnVCLGtCQUFZbjlCLFFBQVFnTyxJQWpEVjs7QUFtRFY7QUFDQW92QixpQkFBV3A5QixRQUFRZ08sSUFwRFQ7O0FBc0RWO0FBQ0FxdkIsb0JBQWNyOUIsUUFBUWdPLElBdkRaO0FBd0RWc3ZCLGNBQVF0OUIsUUFBUWdPLElBeEROO0FBeURWdXZCLG1CQUFhdjlCLFFBQVFnTztBQXpEWDtBQTdCRjtBQURhLElBQXhCOztBQTRGQSxPQUFJd3ZCLGNBQWM7QUFDakI7Ozs7OztBQU1BQyxhQUFTLGlCQUFTcDlCLFFBQVQsRUFBbUI7QUFDM0IsU0FBSSxDQUFDQSxTQUFTeFgsTUFBZCxFQUFzQjtBQUNyQixhQUFPLEtBQVA7QUFDQTs7QUFFRCxTQUFJVCxDQUFKLEVBQU9zMUMsR0FBUDtBQUNBLFNBQUkzb0MsSUFBSSxDQUFSO0FBQ0EsU0FBSUwsSUFBSSxDQUFSO0FBQ0EsU0FBSW9RLFFBQVEsQ0FBWjs7QUFFQSxVQUFLMWMsSUFBSSxDQUFKLEVBQU9zMUMsTUFBTXI5QixTQUFTeFgsTUFBM0IsRUFBbUNULElBQUlzMUMsR0FBdkMsRUFBNEMsRUFBRXQxQyxDQUE5QyxFQUFpRDtBQUNoRCxVQUFJZ2hDLEtBQUsvb0IsU0FBU2pZLENBQVQsQ0FBVDtBQUNBLFVBQUlnaEMsTUFBTUEsR0FBRy9ILFFBQUgsRUFBVixFQUF5QjtBQUN4QixXQUFJc2MsTUFBTXZVLEdBQUdoSSxlQUFILEVBQVY7QUFDQXJzQixZQUFLNG9DLElBQUk1b0MsQ0FBVDtBQUNBTCxZQUFLaXBDLElBQUlqcEMsQ0FBVDtBQUNBLFNBQUVvUSxLQUFGO0FBQ0E7QUFDRDs7QUFFRCxZQUFPO0FBQ04vUCxTQUFHdkssS0FBS0MsS0FBTCxDQUFXc0ssSUFBSStQLEtBQWYsQ0FERztBQUVOcFEsU0FBR2xLLEtBQUtDLEtBQUwsQ0FBV2lLLElBQUlvUSxLQUFmO0FBRkcsTUFBUDtBQUlBLEtBL0JnQjs7QUFpQ2pCOzs7Ozs7O0FBT0FpbkIsYUFBUyxpQkFBUzFyQixRQUFULEVBQW1CdTlCLGFBQW5CLEVBQWtDO0FBQzFDLFNBQUk3b0MsSUFBSTZvQyxjQUFjN29DLENBQXRCO0FBQ0EsU0FBSUwsSUFBSWtwQyxjQUFjbHBDLENBQXRCO0FBQ0EsU0FBSTYyQixjQUFjaFosT0FBT3FRLGlCQUF6QjtBQUNBLFNBQUl4NkIsQ0FBSixFQUFPczFDLEdBQVAsRUFBWUcsY0FBWjs7QUFFQSxVQUFLejFDLElBQUksQ0FBSixFQUFPczFDLE1BQU1yOUIsU0FBU3hYLE1BQTNCLEVBQW1DVCxJQUFJczFDLEdBQXZDLEVBQTRDLEVBQUV0MUMsQ0FBOUMsRUFBaUQ7QUFDaEQsVUFBSWdoQyxLQUFLL29CLFNBQVNqWSxDQUFULENBQVQ7QUFDQSxVQUFJZ2hDLE1BQU1BLEdBQUcvSCxRQUFILEVBQVYsRUFBeUI7QUFDeEIsV0FBSS9ZLFNBQVM4Z0IsR0FBR3FDLGNBQUgsRUFBYjtBQUNBLFdBQUlxUyxJQUFJOTlCLFFBQVE2akIscUJBQVIsQ0FBOEIrWixhQUE5QixFQUE2Q3QxQixNQUE3QyxDQUFSOztBQUVBLFdBQUl3MUIsSUFBSXZTLFdBQVIsRUFBcUI7QUFDcEJBLHNCQUFjdVMsQ0FBZDtBQUNBRCx5QkFBaUJ6VSxFQUFqQjtBQUNBO0FBQ0Q7QUFDRDs7QUFFRCxTQUFJeVUsY0FBSixFQUFvQjtBQUNuQixVQUFJRSxLQUFLRixlQUFlemMsZUFBZixFQUFUO0FBQ0Fyc0IsVUFBSWdwQyxHQUFHaHBDLENBQVA7QUFDQUwsVUFBSXFwQyxHQUFHcnBDLENBQVA7QUFDQTs7QUFFRCxZQUFPO0FBQ05LLFNBQUdBLENBREc7QUFFTkwsU0FBR0E7QUFGRyxNQUFQO0FBSUE7QUFyRWdCLElBQWxCOztBQXdFQTs7O0FBR0EsWUFBU3NwQyxZQUFULENBQXNCQyxXQUF0QixFQUFtQ0MsT0FBbkMsRUFBNEM7QUFDM0MsUUFBSXpkLFFBQVF6Z0IsUUFBUXlnQixLQUFSLENBQWN3ZCxXQUFkLENBQVo7QUFDQSxXQUFPeGQsTUFBTTcxQixLQUFOLENBQVlzekMsVUFBVXpkLE1BQU03MUIsS0FBTixFQUF0QixFQUFxQ3JCLFVBQXJDLEVBQVA7QUFDQTs7QUFFRDtBQUNBLFlBQVM0MEMsWUFBVCxDQUFzQnIyQixJQUF0QixFQUE0QnMyQixNQUE1QixFQUFvQztBQUNuQyxRQUFJQSxNQUFKLEVBQVk7QUFDWCxTQUFJcCtCLFFBQVEyTixPQUFSLENBQWdCeXdCLE1BQWhCLENBQUosRUFBNkI7QUFDNUI7QUFDQTNzQyxZQUFNM0UsU0FBTixDQUFnQm1jLElBQWhCLENBQXFCbEQsS0FBckIsQ0FBMkIrQixJQUEzQixFQUFpQ3MyQixNQUFqQztBQUNBLE1BSEQsTUFHTztBQUNOdDJCLFdBQUttQixJQUFMLENBQVVtMUIsTUFBVjtBQUNBO0FBQ0Q7O0FBRUQsV0FBT3QyQixJQUFQO0FBQ0E7O0FBRUQ7Ozs7OztBQU1BLFlBQVN1MkIsYUFBVCxDQUF1Qnp5QyxHQUF2QixFQUE0QjtBQUMzQixRQUFJLENBQUMsT0FBT0EsR0FBUCxLQUFlLFFBQWYsSUFBMkJBLGVBQWUweUMsTUFBM0MsS0FBc0QxeUMsSUFBSW9kLE9BQUosQ0FBWSxJQUFaLElBQW9CLENBQUMsQ0FBL0UsRUFBa0Y7QUFDakYsWUFBT3BkLElBQUkyeUMsS0FBSixDQUFVLElBQVYsQ0FBUDtBQUNBO0FBQ0QsV0FBTzN5QyxHQUFQO0FBQ0E7O0FBR0Q7QUFDQTtBQUNBO0FBQ0EsWUFBUzR5QyxpQkFBVCxDQUEyQnp1QixPQUEzQixFQUFvQztBQUNuQyxRQUFJbEYsU0FBU2tGLFFBQVFsSixPQUFyQjtBQUNBLFFBQUlpRSxTQUFTaUYsUUFBUS9JLE9BQVIsSUFBbUIrSSxRQUFRYyxNQUF4QyxDQUZtQyxDQUVhO0FBQ2hELFFBQUluZixRQUFRcWUsUUFBUTVJLE1BQXBCO0FBQ0EsUUFBSXZELGVBQWVtTSxRQUFRN0ksYUFBM0I7O0FBRUEsV0FBTztBQUNOckQsYUFBUWdILFNBQVNBLE9BQU9tckIsZ0JBQVAsQ0FBd0J0a0MsS0FBeEIsRUFBK0JrUyxZQUEvQixDQUFULEdBQXdELEVBRDFEO0FBRU5MLGFBQVF1SCxTQUFTQSxPQUFPa3JCLGdCQUFQLENBQXdCdGtDLEtBQXhCLEVBQStCa1MsWUFBL0IsQ0FBVCxHQUF3RCxFQUYxRDtBQUdObFMsWUFBT0EsS0FIRDtBQUlOa1MsbUJBQWNBLFlBSlI7QUFLTjdPLFFBQUdnYixRQUFRM0ksTUFBUixDQUFlclMsQ0FMWjtBQU1OTCxRQUFHcWIsUUFBUTNJLE1BQVIsQ0FBZTFTO0FBTlosS0FBUDtBQVFBOztBQUVEOzs7O0FBSUEsWUFBUytwQyxZQUFULENBQXNCQyxXQUF0QixFQUFtQztBQUNsQyxRQUFJbE0saUJBQWlCcnlCLFNBQVN2WSxNQUE5QjtBQUNBLFFBQUlraUIsaUJBQWlCOUosUUFBUThKLGNBQTdCOztBQUVBLFdBQU87QUFDTjtBQUNBc3lCLGVBQVVzQyxZQUFZdEMsUUFGaEI7QUFHTkQsZUFBVXVDLFlBQVl2QyxRQUhoQjtBQUlOd0MsYUFBUUQsWUFBWUMsTUFKZDtBQUtOQyxhQUFRRixZQUFZRSxNQUxkOztBQU9OO0FBQ0FoRCxvQkFBZThDLFlBQVk5QyxhQVJyQjtBQVNOaUQsc0JBQWlCLzBCLGVBQWU0MEIsWUFBWUksY0FBM0IsRUFBMkN0TSxlQUFlL0YsaUJBQTFELENBVFg7QUFVTnNTLHFCQUFnQmoxQixlQUFlNDBCLFlBQVlNLGFBQTNCLEVBQTBDeE0sZUFBZTdGLGdCQUF6RCxDQVZWO0FBV05zUyxpQkFBWVAsWUFBWTdDLFNBWGxCO0FBWU5xRCxtQkFBY3AxQixlQUFlNDBCLFlBQVlRLFlBQTNCLEVBQXlDMU0sZUFBZTlGLGVBQXhELENBWlI7QUFhTmlQLGtCQUFhK0MsWUFBWS9DLFdBYm5COztBQWVOO0FBQ0FGLHFCQUFnQmlELFlBQVlqRCxjQWhCdEI7QUFpQk4wRCx1QkFBa0JyMUIsZUFBZTQwQixZQUFZVSxlQUEzQixFQUE0QzVNLGVBQWUvRixpQkFBM0QsQ0FqQlo7QUFrQk40UyxzQkFBaUJ2MUIsZUFBZTQwQixZQUFZcEQsY0FBM0IsRUFBMkM5SSxlQUFlN0YsZ0JBQTFELENBbEJYO0FBbUJOMlMsb0JBQWV4MUIsZUFBZTQwQixZQUFZWSxhQUEzQixFQUEwQzlNLGVBQWU5RixlQUF6RCxDQW5CVDtBQW9CTjZTLGtCQUFhYixZQUFZaEQsVUFwQm5CO0FBcUJOSCxtQkFBY21ELFlBQVluRCxZQXJCcEI7QUFzQk5DLHdCQUFtQmtELFlBQVlsRCxpQkF0QnpCOztBQXdCTjtBQUNBUyxzQkFBaUJ5QyxZQUFZekMsZUF6QnZCO0FBMEJOdUQsd0JBQW1CMTFCLGVBQWU0MEIsWUFBWWUsZ0JBQTNCLEVBQTZDak4sZUFBZS9GLGlCQUE1RCxDQTFCYjtBQTJCTmlULHVCQUFrQjUxQixlQUFlNDBCLFlBQVk1QyxlQUEzQixFQUE0Q3RKLGVBQWU3RixnQkFBM0QsQ0EzQlo7QUE0Qk5nVCxxQkFBZ0I3MUIsZUFBZTQwQixZQUFZaUIsY0FBM0IsRUFBMkNuTixlQUFlOUYsZUFBMUQsQ0E1QlY7QUE2Qk5rVCxtQkFBY2xCLFlBQVl4QyxXQTdCcEI7QUE4Qk5ILG9CQUFlMkMsWUFBWTNDLGFBOUJyQjtBQStCTkMsc0JBQWlCMEMsWUFBWTFDLGVBL0J2Qjs7QUFpQ047QUFDQU0sZ0JBQVdvQyxZQUFZcEMsU0FsQ2pCO0FBbUNOQyxtQkFBY21DLFlBQVluQyxZQW5DcEI7QUFvQ05sMUIsc0JBQWlCcTNCLFlBQVlyM0IsZUFwQ3ZCO0FBcUNONjJCLGNBQVMsQ0FyQ0g7QUFzQ04yQiw0QkFBdUJuQixZQUFZbEMsa0JBdEM3QjtBQXVDTkMsb0JBQWVpQyxZQUFZakMsYUF2Q3JCO0FBd0NObDFCLGtCQUFhbTNCLFlBQVluM0IsV0F4Q25CO0FBeUNOQyxrQkFBYWszQixZQUFZbDNCO0FBekNuQixLQUFQO0FBMkNBOztBQUVEOzs7QUFHQSxZQUFTczRCLGNBQVQsQ0FBd0I3bkIsT0FBeEIsRUFBaUN0USxLQUFqQyxFQUF3QztBQUN2QyxRQUFJd0MsTUFBTThOLFFBQVE5SCxNQUFSLENBQWVoRyxHQUF6Qjs7QUFFQSxRQUFJakcsU0FBU3lELE1BQU13MEIsUUFBTixHQUFpQixDQUE5QixDQUh1QyxDQUdOO0FBQ2pDLFFBQUlsNEIsUUFBUSxDQUFaOztBQUVBO0FBQ0EsUUFBSTg3QixPQUFPcDRCLE1BQU1vNEIsSUFBakI7QUFDQSxRQUFJQyxxQkFBcUJELEtBQUs5bEIsTUFBTCxDQUFZLFVBQVNuVixLQUFULEVBQWdCbTdCLFFBQWhCLEVBQTBCO0FBQzlELFlBQU9uN0IsUUFBUW03QixTQUFTQyxNQUFULENBQWdCcjNDLE1BQXhCLEdBQWlDbzNDLFNBQVNFLEtBQVQsQ0FBZXQzQyxNQUFoRCxHQUF5RG8zQyxTQUFTRyxLQUFULENBQWV2M0MsTUFBL0U7QUFDQSxLQUZ3QixFQUV0QixDQUZzQixDQUF6QjtBQUdBbTNDLDBCQUFzQnI0QixNQUFNbTFCLFVBQU4sQ0FBaUJqMEMsTUFBakIsR0FBMEI4ZSxNQUFNeTFCLFNBQU4sQ0FBZ0J2MEMsTUFBaEU7O0FBRUEsUUFBSXczQyxpQkFBaUIxNEIsTUFBTXZHLEtBQU4sQ0FBWXZZLE1BQWpDO0FBQ0EsUUFBSXkzQyxrQkFBa0IzNEIsTUFBTTIxQixNQUFOLENBQWF6MEMsTUFBbkM7QUFDQSxRQUFJeTJDLGdCQUFnQjMzQixNQUFNMjNCLGFBQTFCO0FBQ0EsUUFBSUosZUFBZXYzQixNQUFNdTNCLFlBQXpCO0FBQ0EsUUFBSVMsaUJBQWlCaDRCLE1BQU1nNEIsY0FBM0I7O0FBRUF6N0IsY0FBVW04QixpQkFBaUJmLGFBQTNCLENBbkJ1QyxDQW1CRztBQUMxQ3A3QixjQUFVbThCLGlCQUFpQixDQUFDQSxpQkFBaUIsQ0FBbEIsSUFBdUIxNEIsTUFBTTR6QixZQUE5QyxHQUE2RCxDQUF2RSxDQXBCdUMsQ0FvQm1DO0FBQzFFcjNCLGNBQVVtOEIsaUJBQWlCMTRCLE1BQU02ekIsaUJBQXZCLEdBQTJDLENBQXJELENBckJ1QyxDQXFCaUI7QUFDeER0M0IsY0FBVTg3QixxQkFBcUJkLFlBQS9CLENBdEJ1QyxDQXNCTTtBQUM3Q2g3QixjQUFVODdCLHFCQUFxQixDQUFDQSxxQkFBcUIsQ0FBdEIsSUFBMkJyNEIsTUFBTWcwQixXQUF0RCxHQUFvRSxDQUE5RSxDQXZCdUMsQ0F1QjBDO0FBQ2pGejNCLGNBQVVvOEIsa0JBQWtCMzRCLE1BQU1xMEIsZUFBeEIsR0FBMEMsQ0FBcEQsQ0F4QnVDLENBd0JnQjtBQUN2RDkzQixjQUFVbzhCLGtCQUFtQlgsY0FBN0IsQ0F6QnVDLENBeUJPO0FBQzlDejdCLGNBQVVvOEIsa0JBQWtCLENBQUNBLGtCQUFrQixDQUFuQixJQUF3QjM0QixNQUFNbzBCLGFBQWhELEdBQWdFLENBQTFFLENBMUJ1QyxDQTBCc0M7O0FBRTdFO0FBQ0EsUUFBSXdFLGVBQWUsQ0FBbkI7QUFDQSxRQUFJQyxlQUFlLFNBQWZBLFlBQWUsQ0FBU2h3QixJQUFULEVBQWU7QUFDakN2TSxhQUFRelosS0FBS21CLEdBQUwsQ0FBU3NZLEtBQVQsRUFBZ0JrRyxJQUFJbWdCLFdBQUosQ0FBZ0I5WixJQUFoQixFQUFzQnZNLEtBQXRCLEdBQThCczhCLFlBQTlDLENBQVI7QUFDQSxLQUZEOztBQUlBcDJCLFFBQUk0ZixJQUFKLEdBQVcvcEIsUUFBUTBwQixVQUFSLENBQW1CNFYsYUFBbkIsRUFBa0MzM0IsTUFBTTAzQixlQUF4QyxFQUF5RDEzQixNQUFNdzNCLGdCQUEvRCxDQUFYO0FBQ0FuL0IsWUFBUTJLLElBQVIsQ0FBYWhELE1BQU12RyxLQUFuQixFQUEwQm8vQixZQUExQjs7QUFFQTtBQUNBcjJCLFFBQUk0ZixJQUFKLEdBQVcvcEIsUUFBUTBwQixVQUFSLENBQW1Cd1YsWUFBbkIsRUFBaUN2M0IsTUFBTW8zQixjQUF2QyxFQUF1RHAzQixNQUFNazNCLGVBQTdELENBQVg7QUFDQTcrQixZQUFRMkssSUFBUixDQUFhaEQsTUFBTW0xQixVQUFOLENBQWlCeHZDLE1BQWpCLENBQXdCcWEsTUFBTXkxQixTQUE5QixDQUFiLEVBQXVEb0QsWUFBdkQ7O0FBRUE7QUFDQUQsbUJBQWU1NEIsTUFBTTgwQixhQUFOLEdBQXVCeUMsZUFBZSxDQUF0QyxHQUEyQyxDQUExRDtBQUNBbC9CLFlBQVEySyxJQUFSLENBQWFvMUIsSUFBYixFQUFtQixVQUFTRSxRQUFULEVBQW1CO0FBQ3JDamdDLGFBQVEySyxJQUFSLENBQWFzMUIsU0FBU0MsTUFBdEIsRUFBOEJNLFlBQTlCO0FBQ0F4Z0MsYUFBUTJLLElBQVIsQ0FBYXMxQixTQUFTRSxLQUF0QixFQUE2QkssWUFBN0I7QUFDQXhnQyxhQUFRMkssSUFBUixDQUFhczFCLFNBQVNHLEtBQXRCLEVBQTZCSSxZQUE3QjtBQUNBLEtBSkQ7O0FBTUE7QUFDQUQsbUJBQWUsQ0FBZjs7QUFFQTtBQUNBcDJCLFFBQUk0ZixJQUFKLEdBQVcvcEIsUUFBUTBwQixVQUFSLENBQW1CaVcsY0FBbkIsRUFBbUNoNEIsTUFBTSszQixnQkFBekMsRUFBMkQvM0IsTUFBTTYzQixpQkFBakUsQ0FBWDtBQUNBeC9CLFlBQVEySyxJQUFSLENBQWFoRCxNQUFNMjFCLE1BQW5CLEVBQTJCa0QsWUFBM0I7O0FBRUE7QUFDQXY4QixhQUFTLElBQUkwRCxNQUFNeTBCLFFBQW5COztBQUVBLFdBQU87QUFDTm40QixZQUFPQSxLQUREO0FBRU5DLGFBQVFBO0FBRkYsS0FBUDtBQUlBOztBQUVEOzs7QUFHQSxZQUFTdThCLGtCQUFULENBQTRCeG9CLE9BQTVCLEVBQXFDalQsSUFBckMsRUFBMkM7QUFDMUMsUUFBSTJDLFFBQVFzUSxRQUFRN1EsTUFBcEI7QUFDQSxRQUFJWCxRQUFRd1IsUUFBUTlILE1BQXBCO0FBQ0EsUUFBSS9GLFlBQVk2TixRQUFROUgsTUFBUixDQUFlL0YsU0FBL0I7QUFDQSxRQUFJdTBCLFNBQVMsUUFBYjtBQUNBLFFBQUlDLFNBQVMsUUFBYjs7QUFFQSxRQUFJajNCLE1BQU1qVCxDQUFOLEdBQVVzUSxLQUFLZCxNQUFuQixFQUEyQjtBQUMxQjA2QixjQUFTLEtBQVQ7QUFDQSxLQUZELE1BRU8sSUFBSWozQixNQUFNalQsQ0FBTixHQUFXK1IsTUFBTXZDLE1BQU4sR0FBZWMsS0FBS2QsTUFBbkMsRUFBNEM7QUFDbEQwNkIsY0FBUyxRQUFUO0FBQ0E7O0FBRUQsUUFBSThCLEVBQUosRUFBUUMsRUFBUixDQWIwQyxDQWE5QjtBQUNaLFFBQUlDLEdBQUosRUFBU0MsR0FBVCxDQWQwQyxDQWM1QjtBQUNkLFFBQUlDLEVBQUosQ0FmMEMsQ0FlbEM7QUFDUixRQUFJQyxPQUFPLENBQUMzMkIsVUFBVWhCLElBQVYsR0FBaUJnQixVQUFVa0UsS0FBNUIsSUFBcUMsQ0FBaEQ7QUFDQSxRQUFJMHlCLE9BQU8sQ0FBQzUyQixVQUFVZixHQUFWLEdBQWdCZSxVQUFVb0UsTUFBM0IsSUFBcUMsQ0FBaEQ7O0FBRUEsUUFBSW93QixXQUFXLFFBQWYsRUFBeUI7QUFDeEI4QixVQUFLLFlBQVMzckMsQ0FBVCxFQUFZO0FBQ2hCLGFBQU9BLEtBQUtnc0MsSUFBWjtBQUNBLE1BRkQ7QUFHQUosVUFBSyxZQUFTNXJDLENBQVQsRUFBWTtBQUNoQixhQUFPQSxJQUFJZ3NDLElBQVg7QUFDQSxNQUZEO0FBR0EsS0FQRCxNQU9PO0FBQ05MLFVBQUssWUFBUzNyQyxDQUFULEVBQVk7QUFDaEIsYUFBT0EsS0FBTWlRLEtBQUtmLEtBQUwsR0FBYSxDQUExQjtBQUNBLE1BRkQ7QUFHQTA4QixVQUFLLFlBQVM1ckMsQ0FBVCxFQUFZO0FBQ2hCLGFBQU9BLEtBQU0wUixNQUFNeEMsS0FBTixHQUFlZSxLQUFLZixLQUFMLEdBQWEsQ0FBekM7QUFDQSxNQUZEO0FBR0E7O0FBRUQyOEIsVUFBTSxhQUFTN3JDLENBQVQsRUFBWTtBQUNqQixZQUFPQSxJQUFJaVEsS0FBS2YsS0FBVCxHQUFpQjBELE1BQU0yMEIsU0FBdkIsR0FBbUMzMEIsTUFBTTAwQixZQUF6QyxHQUF3RDUxQixNQUFNeEMsS0FBckU7QUFDQSxLQUZEO0FBR0E0OEIsVUFBTSxhQUFTOXJDLENBQVQsRUFBWTtBQUNqQixZQUFPQSxJQUFJaVEsS0FBS2YsS0FBVCxHQUFpQjBELE1BQU0yMEIsU0FBdkIsR0FBbUMzMEIsTUFBTTAwQixZQUF6QyxHQUF3RCxDQUEvRDtBQUNBLEtBRkQ7QUFHQXlFLFNBQUssWUFBU3BzQyxDQUFULEVBQVk7QUFDaEIsWUFBT0EsS0FBS3NzQyxJQUFMLEdBQVksS0FBWixHQUFvQixRQUEzQjtBQUNBLEtBRkQ7O0FBSUEsUUFBSU4sR0FBRy80QixNQUFNNVMsQ0FBVCxDQUFKLEVBQWlCO0FBQ2hCNHBDLGNBQVMsTUFBVDs7QUFFQTtBQUNBLFNBQUlpQyxJQUFJajVCLE1BQU01UyxDQUFWLENBQUosRUFBa0I7QUFDakI0cEMsZUFBUyxRQUFUO0FBQ0FDLGVBQVNrQyxHQUFHbjVCLE1BQU1qVCxDQUFULENBQVQ7QUFDQTtBQUNELEtBUkQsTUFRTyxJQUFJaXNDLEdBQUdoNUIsTUFBTTVTLENBQVQsQ0FBSixFQUFpQjtBQUN2QjRwQyxjQUFTLE9BQVQ7O0FBRUE7QUFDQSxTQUFJa0MsSUFBSWw1QixNQUFNNVMsQ0FBVixDQUFKLEVBQWtCO0FBQ2pCNHBDLGVBQVMsUUFBVDtBQUNBQyxlQUFTa0MsR0FBR241QixNQUFNalQsQ0FBVCxDQUFUO0FBQ0E7QUFDRDs7QUFFRCxRQUFJMFosT0FBTzZKLFFBQVE5TSxRQUFuQjtBQUNBLFdBQU87QUFDTnd6QixhQUFRdndCLEtBQUt1d0IsTUFBTCxHQUFjdndCLEtBQUt1d0IsTUFBbkIsR0FBNEJBLE1BRDlCO0FBRU5DLGFBQVF4d0IsS0FBS3d3QixNQUFMLEdBQWN4d0IsS0FBS3d3QixNQUFuQixHQUE0QkE7QUFGOUIsS0FBUDtBQUlBOztBQUVEOzs7QUFHQSxZQUFTcUMsa0JBQVQsQ0FBNEJDLEVBQTVCLEVBQWdDbDhCLElBQWhDLEVBQXNDbThCLFNBQXRDLEVBQWlEMTZCLEtBQWpELEVBQXdEO0FBQ3ZEO0FBQ0EsUUFBSTFSLElBQUltc0MsR0FBR25zQyxDQUFYO0FBQ0EsUUFBSUwsSUFBSXdzQyxHQUFHeHNDLENBQVg7O0FBRUEsUUFBSTRuQyxZQUFZNEUsR0FBRzVFLFNBQW5CO0FBQ0EsUUFBSUQsZUFBZTZFLEdBQUc3RSxZQUF0QjtBQUNBLFFBQUlFLGVBQWUyRSxHQUFHM0UsWUFBdEI7QUFDQSxRQUFJb0MsU0FBU3dDLFVBQVV4QyxNQUF2QjtBQUNBLFFBQUlDLFNBQVN1QyxVQUFVdkMsTUFBdkI7QUFDQSxRQUFJd0MsaUJBQWlCOUUsWUFBWUQsWUFBakM7QUFDQSxRQUFJZ0YsbUJBQW1COUUsZUFBZUYsWUFBdEM7O0FBRUEsUUFBSXNDLFdBQVcsT0FBZixFQUF3QjtBQUN2QjVwQyxVQUFLaVEsS0FBS2YsS0FBVjtBQUNBLEtBRkQsTUFFTyxJQUFJMDZCLFdBQVcsUUFBZixFQUF5QjtBQUMvQjVwQyxVQUFNaVEsS0FBS2YsS0FBTCxHQUFhLENBQW5CO0FBQ0EsU0FBSWxQLElBQUlpUSxLQUFLZixLQUFULEdBQWlCd0MsTUFBTXhDLEtBQTNCLEVBQWtDO0FBQ2pDbFAsVUFBSTBSLE1BQU14QyxLQUFOLEdBQWNlLEtBQUtmLEtBQXZCO0FBQ0E7QUFDRCxTQUFJbFAsSUFBSSxDQUFSLEVBQVc7QUFDVkEsVUFBSSxDQUFKO0FBQ0E7QUFDRDs7QUFFRCxRQUFJNnBDLFdBQVcsS0FBZixFQUFzQjtBQUNyQmxxQyxVQUFLMHNDLGNBQUw7QUFDQSxLQUZELE1BRU8sSUFBSXhDLFdBQVcsUUFBZixFQUF5QjtBQUMvQmxxQyxVQUFLc1EsS0FBS2QsTUFBTCxHQUFjazlCLGNBQW5CO0FBQ0EsS0FGTSxNQUVBO0FBQ04xc0MsVUFBTXNRLEtBQUtkLE1BQUwsR0FBYyxDQUFwQjtBQUNBOztBQUVELFFBQUkwNkIsV0FBVyxRQUFmLEVBQXlCO0FBQ3hCLFNBQUlELFdBQVcsTUFBZixFQUF1QjtBQUN0QjVwQyxXQUFLcXNDLGNBQUw7QUFDQSxNQUZELE1BRU8sSUFBSXpDLFdBQVcsT0FBZixFQUF3QjtBQUM5QjVwQyxXQUFLcXNDLGNBQUw7QUFDQTtBQUNELEtBTkQsTUFNTyxJQUFJekMsV0FBVyxNQUFmLEVBQXVCO0FBQzdCNXBDLFVBQUtzc0MsZ0JBQUw7QUFDQSxLQUZNLE1BRUEsSUFBSTFDLFdBQVcsT0FBZixFQUF3QjtBQUM5QjVwQyxVQUFLc3NDLGdCQUFMO0FBQ0E7O0FBRUQsV0FBTztBQUNOdHNDLFFBQUdBLENBREc7QUFFTkwsUUFBR0E7QUFGRyxLQUFQO0FBSUE7O0FBRUQ7OztBQUdBLFlBQVM0c0MsdUJBQVQsQ0FBaUMvcEIsUUFBakMsRUFBMkM7QUFDMUMsV0FBTzRtQixhQUFhLEVBQWIsRUFBaUJFLGNBQWM5bUIsUUFBZCxDQUFqQixDQUFQO0FBQ0E7O0FBRUQsT0FBSWh3QixVQUFVQyxPQUFPRCxPQUFQLEdBQWlCNlksUUFBUW1CLE1BQVIsQ0FBZTtBQUM3Q1IsZ0JBQVksc0JBQVc7QUFDdEIsVUFBS3FHLE1BQUwsR0FBY3EzQixhQUFhLEtBQUt0ekIsUUFBbEIsQ0FBZDtBQUNBLFVBQUtvMkIsV0FBTCxHQUFtQixFQUFuQjtBQUNBLEtBSjRDOztBQU03QztBQUNBO0FBQ0FDLGNBQVUsb0JBQVc7QUFDcEIsU0FBSTM3QixLQUFLLElBQVQ7QUFDQSxTQUFJdUksT0FBT3ZJLEdBQUdzRixRQUFkO0FBQ0EsU0FBSS9ILFlBQVlnTCxLQUFLaEwsU0FBckI7O0FBRUEsU0FBSXM1QixjQUFjdDVCLFVBQVVzNUIsV0FBVixDQUFzQjMyQixLQUF0QixDQUE0QkYsRUFBNUIsRUFBZ0M1WSxTQUFoQyxDQUFsQjtBQUNBLFNBQUltVSxRQUFRZ0MsVUFBVWhDLEtBQVYsQ0FBZ0IyRSxLQUFoQixDQUFzQkYsRUFBdEIsRUFBMEI1WSxTQUExQixDQUFaO0FBQ0EsU0FBSTR2QyxhQUFhejVCLFVBQVV5NUIsVUFBVixDQUFxQjkyQixLQUFyQixDQUEyQkYsRUFBM0IsRUFBK0I1WSxTQUEvQixDQUFqQjs7QUFFQSxTQUFJa3pDLFFBQVEsRUFBWjtBQUNBQSxhQUFRaEMsYUFBYWdDLEtBQWIsRUFBb0I5QixjQUFjM0IsV0FBZCxDQUFwQixDQUFSO0FBQ0F5RCxhQUFRaEMsYUFBYWdDLEtBQWIsRUFBb0I5QixjQUFjajlCLEtBQWQsQ0FBcEIsQ0FBUjtBQUNBKytCLGFBQVFoQyxhQUFhZ0MsS0FBYixFQUFvQjlCLGNBQWN4QixVQUFkLENBQXBCLENBQVI7O0FBRUEsWUFBT3NELEtBQVA7QUFDQSxLQXZCNEM7O0FBeUI3QztBQUNBc0IsbUJBQWUseUJBQVc7QUFDekIsWUFBT0gsd0JBQXdCLEtBQUtuMkIsUUFBTCxDQUFjL0gsU0FBZCxDQUF3QjA1QixVQUF4QixDQUFtQy8yQixLQUFuQyxDQUF5QyxJQUF6QyxFQUErQzlZLFNBQS9DLENBQXhCLENBQVA7QUFDQSxLQTVCNEM7O0FBOEI3QztBQUNBeTBDLGFBQVMsaUJBQVMvRSxZQUFULEVBQXVCcjVCLElBQXZCLEVBQTZCO0FBQ3JDLFNBQUl1QyxLQUFLLElBQVQ7QUFDQSxTQUFJekMsWUFBWXlDLEdBQUdzRixRQUFILENBQVkvSCxTQUE1QjtBQUNBLFNBQUl1K0IsWUFBWSxFQUFoQjs7QUFFQTNoQyxhQUFRMkssSUFBUixDQUFhZ3lCLFlBQWIsRUFBMkIsVUFBU2x2QixXQUFULEVBQXNCO0FBQ2hELFVBQUl3eUIsV0FBVztBQUNkQyxlQUFRLEVBRE07QUFFZEMsY0FBTyxFQUZPO0FBR2RDLGNBQU87QUFITyxPQUFmO0FBS0FqQyxtQkFBYThCLFNBQVNDLE1BQXRCLEVBQThCN0IsY0FBY2o3QixVQUFVMjVCLFdBQVYsQ0FBc0JuMEMsSUFBdEIsQ0FBMkJpZCxFQUEzQixFQUErQjRILFdBQS9CLEVBQTRDbkssSUFBNUMsQ0FBZCxDQUE5QjtBQUNBNjZCLG1CQUFhOEIsU0FBU0UsS0FBdEIsRUFBNkIvOEIsVUFBVUssS0FBVixDQUFnQjdhLElBQWhCLENBQXFCaWQsRUFBckIsRUFBeUI0SCxXQUF6QixFQUFzQ25LLElBQXRDLENBQTdCO0FBQ0E2NkIsbUJBQWE4QixTQUFTRyxLQUF0QixFQUE2Qi9CLGNBQWNqN0IsVUFBVSs1QixVQUFWLENBQXFCdjBDLElBQXJCLENBQTBCaWQsRUFBMUIsRUFBOEI0SCxXQUE5QixFQUEyQ25LLElBQTNDLENBQWQsQ0FBN0I7O0FBRUFxK0IsZ0JBQVUxNEIsSUFBVixDQUFlZzNCLFFBQWY7QUFDQSxNQVhEOztBQWFBLFlBQU8wQixTQUFQO0FBQ0EsS0FsRDRDOztBQW9EN0M7QUFDQUMsa0JBQWMsd0JBQVc7QUFDeEIsWUFBT04sd0JBQXdCLEtBQUtuMkIsUUFBTCxDQUFjL0gsU0FBZCxDQUF3Qmc2QixTQUF4QixDQUFrQ3IzQixLQUFsQyxDQUF3QyxJQUF4QyxFQUE4QzlZLFNBQTlDLENBQXhCLENBQVA7QUFDQSxLQXZENEM7O0FBeUQ3QztBQUNBO0FBQ0E0MEMsZUFBVyxxQkFBVztBQUNyQixTQUFJaDhCLEtBQUssSUFBVDtBQUNBLFNBQUl6QyxZQUFZeUMsR0FBR3NGLFFBQUgsQ0FBWS9ILFNBQTVCOztBQUVBLFNBQUlpNkIsZUFBZWo2QixVQUFVaTZCLFlBQVYsQ0FBdUJ0M0IsS0FBdkIsQ0FBNkJGLEVBQTdCLEVBQWlDNVksU0FBakMsQ0FBbkI7QUFDQSxTQUFJcXdDLFNBQVNsNkIsVUFBVWs2QixNQUFWLENBQWlCdjNCLEtBQWpCLENBQXVCRixFQUF2QixFQUEyQjVZLFNBQTNCLENBQWI7QUFDQSxTQUFJc3dDLGNBQWNuNkIsVUFBVW02QixXQUFWLENBQXNCeDNCLEtBQXRCLENBQTRCRixFQUE1QixFQUFnQzVZLFNBQWhDLENBQWxCOztBQUVBLFNBQUlrekMsUUFBUSxFQUFaO0FBQ0FBLGFBQVFoQyxhQUFhZ0MsS0FBYixFQUFvQjlCLGNBQWNoQixZQUFkLENBQXBCLENBQVI7QUFDQThDLGFBQVFoQyxhQUFhZ0MsS0FBYixFQUFvQjlCLGNBQWNmLE1BQWQsQ0FBcEIsQ0FBUjtBQUNBNkMsYUFBUWhDLGFBQWFnQyxLQUFiLEVBQW9COUIsY0FBY2QsV0FBZCxDQUFwQixDQUFSOztBQUVBLFlBQU80QyxLQUFQO0FBQ0EsS0F6RTRDOztBQTJFN0NoNkIsWUFBUSxnQkFBUzRYLE9BQVQsRUFBa0I7QUFDekIsU0FBSWxZLEtBQUssSUFBVDtBQUNBLFNBQUl1SSxPQUFPdkksR0FBR3NGLFFBQWQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBSTIyQixnQkFBZ0JqOEIsR0FBR3VCLE1BQXZCO0FBQ0EsU0FBSU8sUUFBUTlCLEdBQUd1QixNQUFILEdBQVlxM0IsYUFBYXJ3QixJQUFiLENBQXhCO0FBQ0EsU0FBSWlRLFNBQVN4WSxHQUFHazhCLE9BQWhCOztBQUVBLFNBQUl6K0IsT0FBT3VDLEdBQUdxVixLQUFkOztBQUVBO0FBQ0EsU0FBSWltQixZQUFZO0FBQ2Z4QyxjQUFRbUQsY0FBY25ELE1BRFA7QUFFZkMsY0FBUWtELGNBQWNsRDtBQUZQLE1BQWhCO0FBSUEsU0FBSW9ELGtCQUFrQjtBQUNyQmp0QyxTQUFHK3NDLGNBQWMvc0MsQ0FESTtBQUVyQkwsU0FBR290QyxjQUFjcHRDO0FBRkksTUFBdEI7QUFJQSxTQUFJdXRDLGNBQWM7QUFDakJoK0IsYUFBTzY5QixjQUFjNzlCLEtBREo7QUFFakJDLGNBQVE0OUIsY0FBYzU5QjtBQUZMLE1BQWxCO0FBSUEsU0FBSWtkLGtCQUFrQjtBQUNyQnJzQixTQUFHK3NDLGNBQWNJLE1BREk7QUFFckJ4dEMsU0FBR290QyxjQUFjSztBQUZJLE1BQXRCOztBQUtBLFNBQUkvNUMsQ0FBSixFQUFPczFDLEdBQVA7O0FBRUEsU0FBSXJmLE9BQU94MUIsTUFBWCxFQUFtQjtBQUNsQjhlLFlBQU11MkIsT0FBTixHQUFnQixDQUFoQjs7QUFFQSxVQUFJa0UsY0FBYyxFQUFsQjtBQUNBLFVBQUlDLGtCQUFrQixFQUF0QjtBQUNBamhCLHdCQUFrQm9jLFlBQVlwdkIsS0FBS3BMLFFBQWpCLEVBQTJCcGEsSUFBM0IsQ0FBZ0NpZCxFQUFoQyxFQUFvQ3dZLE1BQXBDLEVBQTRDeFksR0FBR3k4QixjQUEvQyxDQUFsQjs7QUFFQSxVQUFJM0YsZUFBZSxFQUFuQjtBQUNBLFdBQUt2MEMsSUFBSSxDQUFKLEVBQU9zMUMsTUFBTXJmLE9BQU94MUIsTUFBekIsRUFBaUNULElBQUlzMUMsR0FBckMsRUFBMEMsRUFBRXQxQyxDQUE1QyxFQUErQztBQUM5Q3UwQyxvQkFBYTF6QixJQUFiLENBQWtCdTFCLGtCQUFrQm5nQixPQUFPajJCLENBQVAsQ0FBbEIsQ0FBbEI7QUFDQTs7QUFFRDtBQUNBLFVBQUlnbUIsS0FBS3VFLE1BQVQsRUFBaUI7QUFDaEJncUIsc0JBQWVBLGFBQWFocUIsTUFBYixDQUFvQixVQUFTbnFCLENBQVQsRUFBWTtBQUM5QyxlQUFPNGxCLEtBQUt1RSxNQUFMLENBQVlucUIsQ0FBWixFQUFlOGEsSUFBZixDQUFQO0FBQ0EsUUFGYyxDQUFmO0FBR0E7O0FBRUQ7QUFDQSxVQUFJOEssS0FBS20wQixRQUFULEVBQW1CO0FBQ2xCNUYsc0JBQWVBLGFBQWEzUSxJQUFiLENBQWtCLFVBQVN4akMsQ0FBVCxFQUFZMkMsQ0FBWixFQUFlO0FBQy9DLGVBQU9pakIsS0FBS20wQixRQUFMLENBQWMvNUMsQ0FBZCxFQUFpQjJDLENBQWpCLEVBQW9CbVksSUFBcEIsQ0FBUDtBQUNBLFFBRmMsQ0FBZjtBQUdBOztBQUVEO0FBQ0F0RCxjQUFRMkssSUFBUixDQUFhZ3lCLFlBQWIsRUFBMkIsVUFBU2x2QixXQUFULEVBQXNCO0FBQ2hEMjBCLG1CQUFZbjVCLElBQVosQ0FBaUJtRixLQUFLaEwsU0FBTCxDQUFlNDVCLFVBQWYsQ0FBMEJwMEMsSUFBMUIsQ0FBK0JpZCxFQUEvQixFQUFtQzRILFdBQW5DLEVBQWdENUgsR0FBR3NLLE1BQW5ELENBQWpCO0FBQ0FreUIsdUJBQWdCcDVCLElBQWhCLENBQXFCbUYsS0FBS2hMLFNBQUwsQ0FBZTg1QixjQUFmLENBQThCdDBDLElBQTlCLENBQW1DaWQsRUFBbkMsRUFBdUM0SCxXQUF2QyxFQUFvRDVILEdBQUdzSyxNQUF2RCxDQUFyQjtBQUNBLE9BSEQ7O0FBTUE7QUFDQXhJLFlBQU12RyxLQUFOLEdBQWN5RSxHQUFHMjdCLFFBQUgsQ0FBWTdFLFlBQVosRUFBMEJyNUIsSUFBMUIsQ0FBZDtBQUNBcUUsWUFBTW0xQixVQUFOLEdBQW1CajNCLEdBQUc0N0IsYUFBSCxDQUFpQjlFLFlBQWpCLEVBQStCcjVCLElBQS9CLENBQW5CO0FBQ0FxRSxZQUFNbzRCLElBQU4sR0FBYWw2QixHQUFHNjdCLE9BQUgsQ0FBVy9FLFlBQVgsRUFBeUJyNUIsSUFBekIsQ0FBYjtBQUNBcUUsWUFBTXkxQixTQUFOLEdBQWtCdjNCLEdBQUcrN0IsWUFBSCxDQUFnQmpGLFlBQWhCLEVBQThCcjVCLElBQTlCLENBQWxCO0FBQ0FxRSxZQUFNMjFCLE1BQU4sR0FBZXozQixHQUFHZzhCLFNBQUgsQ0FBYWxGLFlBQWIsRUFBMkJyNUIsSUFBM0IsQ0FBZjs7QUFFQTtBQUNBcUUsWUFBTTVTLENBQU4sR0FBVXZLLEtBQUtDLEtBQUwsQ0FBVzIyQixnQkFBZ0Jyc0IsQ0FBM0IsQ0FBVjtBQUNBNFMsWUFBTWpULENBQU4sR0FBVWxLLEtBQUtDLEtBQUwsQ0FBVzIyQixnQkFBZ0Ixc0IsQ0FBM0IsQ0FBVjtBQUNBaVQsWUFBTTAwQixZQUFOLEdBQXFCanVCLEtBQUtpdUIsWUFBMUI7QUFDQTEwQixZQUFNeTZCLFdBQU4sR0FBb0JBLFdBQXBCO0FBQ0F6NkIsWUFBTTA2QixlQUFOLEdBQXdCQSxlQUF4Qjs7QUFFQTtBQUNBMTZCLFlBQU02NkIsVUFBTixHQUFtQjdGLFlBQW5COztBQUVBO0FBQ0FzRixvQkFBY25DLGVBQWUsSUFBZixFQUFxQm40QixLQUFyQixDQUFkO0FBQ0F3NUIsa0JBQVlWLG1CQUFtQixJQUFuQixFQUF5QndCLFdBQXpCLENBQVo7QUFDQTtBQUNBRCx3QkFBa0JmLG1CQUFtQnQ1QixLQUFuQixFQUEwQnM2QixXQUExQixFQUF1Q2QsU0FBdkMsRUFBa0R0N0IsR0FBR3NLLE1BQXJELENBQWxCO0FBQ0EsTUF2REQsTUF1RE87QUFDTnhJLFlBQU11MkIsT0FBTixHQUFnQixDQUFoQjtBQUNBOztBQUVEdjJCLFdBQU1nM0IsTUFBTixHQUFld0MsVUFBVXhDLE1BQXpCO0FBQ0FoM0IsV0FBTWkzQixNQUFOLEdBQWV1QyxVQUFVdkMsTUFBekI7QUFDQWozQixXQUFNNVMsQ0FBTixHQUFVaXRDLGdCQUFnQmp0QyxDQUExQjtBQUNBNFMsV0FBTWpULENBQU4sR0FBVXN0QyxnQkFBZ0J0dEMsQ0FBMUI7QUFDQWlULFdBQU0xRCxLQUFOLEdBQWNnK0IsWUFBWWgrQixLQUExQjtBQUNBMEQsV0FBTXpELE1BQU4sR0FBZSs5QixZQUFZLzlCLE1BQTNCOztBQUVBO0FBQ0F5RCxXQUFNdTZCLE1BQU4sR0FBZTlnQixnQkFBZ0Jyc0IsQ0FBL0I7QUFDQTRTLFdBQU13NkIsTUFBTixHQUFlL2dCLGdCQUFnQjFzQixDQUEvQjs7QUFFQW1SLFFBQUd1QixNQUFILEdBQVlPLEtBQVo7O0FBRUEsU0FBSW9XLFdBQVczUCxLQUFLekgsTUFBcEIsRUFBNEI7QUFDM0J5SCxXQUFLekgsTUFBTCxDQUFZL2QsSUFBWixDQUFpQmlkLEVBQWpCLEVBQXFCOEIsS0FBckI7QUFDQTs7QUFFRCxZQUFPOUIsRUFBUDtBQUNBLEtBekw0Qzs7QUEyTDdDNDhCLGVBQVcsbUJBQVNDLFlBQVQsRUFBdUIxOUIsSUFBdkIsRUFBNkI7QUFDdkMsU0FBSW1GLE1BQU0sS0FBS2dHLE1BQUwsQ0FBWWhHLEdBQXRCO0FBQ0EsU0FBSSsyQixLQUFLLEtBQUsvZixLQUFkO0FBQ0EsU0FBSXdoQixnQkFBZ0IsS0FBS0MsZ0JBQUwsQ0FBc0JGLFlBQXRCLEVBQW9DMTlCLElBQXBDLEVBQTBDazhCLEVBQTFDLENBQXBCOztBQUVBLzJCLFNBQUkwdkIsTUFBSixDQUFXOEksY0FBY3BLLEVBQXpCLEVBQTZCb0ssY0FBY25LLEVBQTNDO0FBQ0FydUIsU0FBSTB2QixNQUFKLENBQVc4SSxjQUFjbEssRUFBekIsRUFBNkJrSyxjQUFjOXNDLEVBQTNDO0FBQ0FzVSxTQUFJMHZCLE1BQUosQ0FBVzhJLGNBQWNFLEVBQXpCLEVBQTZCRixjQUFjRyxFQUEzQztBQUNBLEtBbk00QztBQW9NN0NGLHNCQUFrQiwwQkFBU0YsWUFBVCxFQUF1QjE5QixJQUF2QixFQUE2Qms4QixFQUE3QixFQUFpQztBQUNsRCxTQUFJM0ksRUFBSixFQUFRRSxFQUFSLEVBQVlvSyxFQUFaLEVBQWdCckssRUFBaEIsRUFBb0IzaUMsRUFBcEIsRUFBd0JpdEMsRUFBeEI7QUFDQSxTQUFJeEcsWUFBWTRFLEdBQUc1RSxTQUFuQjtBQUNBLFNBQUlDLGVBQWUyRSxHQUFHM0UsWUFBdEI7QUFDQSxTQUFJb0MsU0FBU3VDLEdBQUd2QyxNQUFoQjtBQUNBLFNBQUlDLFNBQVNzQyxHQUFHdEMsTUFBaEI7QUFDQSxTQUFJbUUsTUFBTUwsYUFBYTN0QyxDQUF2QjtBQUNBLFNBQUlpdUMsTUFBTU4sYUFBYWh1QyxDQUF2QjtBQUNBLFNBQUl1UCxRQUFRZSxLQUFLZixLQUFqQjtBQUNBLFNBQUlDLFNBQVNjLEtBQUtkLE1BQWxCOztBQUVBLFNBQUkwNkIsV0FBVyxRQUFmLEVBQXlCO0FBQ3hCL29DLFdBQUttdEMsTUFBTzkrQixTQUFTLENBQXJCOztBQUVBLFVBQUl5NkIsV0FBVyxNQUFmLEVBQXVCO0FBQ3RCcEcsWUFBS3dLLEdBQUw7QUFDQXRLLFlBQUtGLEtBQUsrRCxTQUFWO0FBQ0F1RyxZQUFLdEssRUFBTDs7QUFFQUMsWUFBSzNpQyxLQUFLeW1DLFNBQVY7QUFDQXdHLFlBQUtqdEMsS0FBS3ltQyxTQUFWO0FBQ0EsT0FQRCxNQU9PO0FBQ04vRCxZQUFLd0ssTUFBTTkrQixLQUFYO0FBQ0F3MEIsWUFBS0YsS0FBSytELFNBQVY7QUFDQXVHLFlBQUt0SyxFQUFMOztBQUVBQyxZQUFLM2lDLEtBQUt5bUMsU0FBVjtBQUNBd0csWUFBS2p0QyxLQUFLeW1DLFNBQVY7QUFDQTtBQUNELE1BbEJELE1Ba0JPO0FBQ04sVUFBSXFDLFdBQVcsTUFBZixFQUF1QjtBQUN0QmxHLFlBQUtzSyxNQUFNeEcsWUFBTixHQUFzQkQsU0FBM0I7QUFDQS9ELFlBQUtFLEtBQUs2RCxTQUFWO0FBQ0F1RyxZQUFLcEssS0FBSzZELFNBQVY7QUFDQSxPQUpELE1BSU8sSUFBSXFDLFdBQVcsT0FBZixFQUF3QjtBQUM5QmxHLFlBQUtzSyxNQUFNOStCLEtBQU4sR0FBY3M0QixZQUFkLEdBQTZCRCxTQUFsQztBQUNBL0QsWUFBS0UsS0FBSzZELFNBQVY7QUFDQXVHLFlBQUtwSyxLQUFLNkQsU0FBVjtBQUNBLE9BSk0sTUFJQTtBQUNON0QsWUFBS3lJLEdBQUdnQixNQUFSO0FBQ0EzSixZQUFLRSxLQUFLNkQsU0FBVjtBQUNBdUcsWUFBS3BLLEtBQUs2RCxTQUFWO0FBQ0E7QUFDRCxVQUFJc0MsV0FBVyxLQUFmLEVBQXNCO0FBQ3JCcEcsWUFBS3dLLEdBQUw7QUFDQW50QyxZQUFLMmlDLEtBQUs4RCxTQUFWO0FBQ0F3RyxZQUFLdEssRUFBTDtBQUNBLE9BSkQsTUFJTztBQUNOQSxZQUFLd0ssTUFBTTkrQixNQUFYO0FBQ0FyTyxZQUFLMmlDLEtBQUs4RCxTQUFWO0FBQ0F3RyxZQUFLdEssRUFBTDtBQUNBO0FBQ0EsV0FBSXlLLE1BQU1KLEVBQVY7QUFDQUEsWUFBS3RLLEVBQUw7QUFDQUEsWUFBSzBLLEdBQUw7QUFDQTtBQUNEO0FBQ0QsWUFBTyxFQUFDMUssSUFBSUEsRUFBTCxFQUFTRSxJQUFJQSxFQUFiLEVBQWlCb0ssSUFBSUEsRUFBckIsRUFBeUJySyxJQUFJQSxFQUE3QixFQUFpQzNpQyxJQUFJQSxFQUFyQyxFQUF5Q2l0QyxJQUFJQSxFQUE3QyxFQUFQO0FBQ0EsS0E5UDRDOztBQWdRN0NJLGVBQVcsbUJBQVN0d0IsRUFBVCxFQUFhc3VCLEVBQWIsRUFBaUIvMkIsR0FBakIsRUFBc0IrekIsT0FBdEIsRUFBK0I7QUFDekMsU0FBSTk4QixRQUFROC9CLEdBQUc5L0IsS0FBZjs7QUFFQSxTQUFJQSxNQUFNdlksTUFBVixFQUFrQjtBQUNqQnNoQixVQUFJeXVCLFNBQUosR0FBZ0JzSSxHQUFHM0IsV0FBbkI7QUFDQXAxQixVQUFJMHVCLFlBQUosR0FBbUIsS0FBbkI7O0FBRUEsVUFBSXlHLGdCQUFnQjRCLEdBQUc1QixhQUF2QjtBQUNBLFVBQUkvRCxlQUFlMkYsR0FBRzNGLFlBQXRCOztBQUVBcHhCLFVBQUk4QyxTQUFKLEdBQWdCK3dCLGFBQWFrRCxHQUFHekYsY0FBaEIsRUFBZ0N5QyxPQUFoQyxDQUFoQjtBQUNBL3pCLFVBQUk0ZixJQUFKLEdBQVcvcEIsUUFBUTBwQixVQUFSLENBQW1CNFYsYUFBbkIsRUFBa0M0QixHQUFHN0IsZUFBckMsRUFBc0Q2QixHQUFHL0IsZ0JBQXpELENBQVg7O0FBRUEsVUFBSS8yQyxDQUFKLEVBQU9zMUMsR0FBUDtBQUNBLFdBQUt0MUMsSUFBSSxDQUFKLEVBQU9zMUMsTUFBTXQ4QixNQUFNdlksTUFBeEIsRUFBZ0NULElBQUlzMUMsR0FBcEMsRUFBeUMsRUFBRXQxQyxDQUEzQyxFQUE4QztBQUM3QytoQixXQUFJOHZCLFFBQUosQ0FBYTc0QixNQUFNaFosQ0FBTixDQUFiLEVBQXVCd3FCLEdBQUc3ZCxDQUExQixFQUE2QjZkLEdBQUdsZSxDQUFoQztBQUNBa2UsVUFBR2xlLENBQUgsSUFBUTRxQyxnQkFBZ0IvRCxZQUF4QixDQUY2QyxDQUVQOztBQUV0QyxXQUFJbnpDLElBQUksQ0FBSixLQUFVZ1osTUFBTXZZLE1BQXBCLEVBQTRCO0FBQzNCK3BCLFdBQUdsZSxDQUFILElBQVF3c0MsR0FBRzFGLGlCQUFILEdBQXVCRCxZQUEvQixDQUQyQixDQUNrQjtBQUM3QztBQUNEO0FBQ0Q7QUFDRCxLQXZSNEM7O0FBeVI3QzRILGNBQVUsa0JBQVN2d0IsRUFBVCxFQUFhc3VCLEVBQWIsRUFBaUIvMkIsR0FBakIsRUFBc0IrekIsT0FBdEIsRUFBK0I7QUFDeEMsU0FBSWdCLGVBQWVnQyxHQUFHaEMsWUFBdEI7QUFDQSxTQUFJdkQsY0FBY3VGLEdBQUd2RixXQUFyQjtBQUNBLFNBQUlvRSxPQUFPbUIsR0FBR25CLElBQWQ7O0FBRUE1MUIsU0FBSXl1QixTQUFKLEdBQWdCc0ksR0FBR2pDLFVBQW5CO0FBQ0E5MEIsU0FBSTB1QixZQUFKLEdBQW1CLEtBQW5CO0FBQ0ExdUIsU0FBSTRmLElBQUosR0FBVy9wQixRQUFRMHBCLFVBQVIsQ0FBbUJ3VixZQUFuQixFQUFpQ2dDLEdBQUduQyxjQUFwQyxFQUFvRG1DLEdBQUdyQyxlQUF2RCxDQUFYOztBQUVBO0FBQ0EsU0FBSXVFLGVBQWUsQ0FBbkI7QUFDQSxTQUFJQyxpQkFBaUIsU0FBakJBLGNBQWlCLENBQVM3eUIsSUFBVCxFQUFlO0FBQ25DckcsVUFBSTh2QixRQUFKLENBQWF6cEIsSUFBYixFQUFtQm9DLEdBQUc3ZCxDQUFILEdBQU9xdUMsWUFBMUIsRUFBd0N4d0IsR0FBR2xlLENBQTNDO0FBQ0FrZSxTQUFHbGUsQ0FBSCxJQUFRd3FDLGVBQWV2RCxXQUF2QjtBQUNBLE1BSEQ7O0FBS0E7QUFDQXh4QixTQUFJOEMsU0FBSixHQUFnQit3QixhQUFha0QsR0FBR3RGLGFBQWhCLEVBQStCc0MsT0FBL0IsQ0FBaEI7QUFDQWwrQixhQUFRMkssSUFBUixDQUFhdTJCLEdBQUdwRSxVQUFoQixFQUE0QnVHLGNBQTVCOztBQUVBLFNBQUlDLGlCQUFpQnBDLEdBQUd6RSxhQUF4QjtBQUNBMkcsb0JBQWVFLGlCQUFrQnBFLGVBQWUsQ0FBakMsR0FBc0MsQ0FBckQ7O0FBRUE7QUFDQWwvQixhQUFRMkssSUFBUixDQUFhbzFCLElBQWIsRUFBbUIsVUFBU0UsUUFBVCxFQUFtQjczQyxDQUFuQixFQUFzQjtBQUN4QyxVQUFJbTdDLFlBQVl2RixhQUFha0QsR0FBR21CLGVBQUgsQ0FBbUJqNkMsQ0FBbkIsQ0FBYixFQUFvQzgxQyxPQUFwQyxDQUFoQjtBQUNBL3pCLFVBQUk4QyxTQUFKLEdBQWdCczJCLFNBQWhCO0FBQ0F2akMsY0FBUTJLLElBQVIsQ0FBYXMxQixTQUFTQyxNQUF0QixFQUE4Qm1ELGNBQTlCOztBQUVBcmpDLGNBQVEySyxJQUFSLENBQWFzMUIsU0FBU0UsS0FBdEIsRUFBNkIsVUFBUzN2QixJQUFULEVBQWU7QUFDM0M7QUFDQSxXQUFJOHlCLGNBQUosRUFBb0I7QUFDbkI7QUFDQW41QixZQUFJOEMsU0FBSixHQUFnQit3QixhQUFha0QsR0FBR3JCLHFCQUFoQixFQUF1QzNCLE9BQXZDLENBQWhCO0FBQ0EvekIsWUFBSXE1QixRQUFKLENBQWE1d0IsR0FBRzdkLENBQWhCLEVBQW1CNmQsR0FBR2xlLENBQXRCLEVBQXlCd3FDLFlBQXpCLEVBQXVDQSxZQUF2Qzs7QUFFQTtBQUNBLzBCLFlBQUlnRCxTQUFKLEdBQWdCLENBQWhCO0FBQ0FoRCxZQUFJK0MsV0FBSixHQUFrQjh3QixhQUFha0QsR0FBR2tCLFdBQUgsQ0FBZWg2QyxDQUFmLEVBQWtCbWYsV0FBL0IsRUFBNEMyMkIsT0FBNUMsQ0FBbEI7QUFDQS96QixZQUFJczVCLFVBQUosQ0FBZTd3QixHQUFHN2QsQ0FBbEIsRUFBcUI2ZCxHQUFHbGUsQ0FBeEIsRUFBMkJ3cUMsWUFBM0IsRUFBeUNBLFlBQXpDOztBQUVBO0FBQ0EvMEIsWUFBSThDLFNBQUosR0FBZ0Ird0IsYUFBYWtELEdBQUdrQixXQUFILENBQWVoNkMsQ0FBZixFQUFrQmlmLGVBQS9CLEVBQWdENjJCLE9BQWhELENBQWhCO0FBQ0EvekIsWUFBSXE1QixRQUFKLENBQWE1d0IsR0FBRzdkLENBQUgsR0FBTyxDQUFwQixFQUF1QjZkLEdBQUdsZSxDQUFILEdBQU8sQ0FBOUIsRUFBaUN3cUMsZUFBZSxDQUFoRCxFQUFtREEsZUFBZSxDQUFsRTtBQUNBLzBCLFlBQUk4QyxTQUFKLEdBQWdCczJCLFNBQWhCO0FBQ0E7O0FBRURGLHNCQUFlN3lCLElBQWY7QUFDQSxPQW5CRDs7QUFxQkF4USxjQUFRMkssSUFBUixDQUFhczFCLFNBQVNHLEtBQXRCLEVBQTZCaUQsY0FBN0I7QUFDQSxNQTNCRDs7QUE2QkE7QUFDQUQsb0JBQWUsQ0FBZjs7QUFFQTtBQUNBcGpDLGFBQVEySyxJQUFSLENBQWF1MkIsR0FBRzlELFNBQWhCLEVBQTJCaUcsY0FBM0I7QUFDQXp3QixRQUFHbGUsQ0FBSCxJQUFRaW5DLFdBQVIsQ0ExRHdDLENBMERuQjtBQUNyQixLQXBWNEM7O0FBc1Y3QytILGdCQUFZLG9CQUFTOXdCLEVBQVQsRUFBYXN1QixFQUFiLEVBQWlCLzJCLEdBQWpCLEVBQXNCK3pCLE9BQXRCLEVBQStCO0FBQzFDLFNBQUlaLFNBQVM0RCxHQUFHNUQsTUFBaEI7O0FBRUEsU0FBSUEsT0FBT3owQyxNQUFYLEVBQW1CO0FBQ2xCK3BCLFNBQUdsZSxDQUFILElBQVF3c0MsR0FBR2xGLGVBQVg7O0FBRUE3eEIsVUFBSXl1QixTQUFKLEdBQWdCc0ksR0FBR3RCLFlBQW5CO0FBQ0F6MUIsVUFBSTB1QixZQUFKLEdBQW1CLEtBQW5COztBQUVBMXVCLFVBQUk4QyxTQUFKLEdBQWdCK3dCLGFBQWFrRCxHQUFHakYsZUFBaEIsRUFBaUNpQyxPQUFqQyxDQUFoQjtBQUNBL3pCLFVBQUk0ZixJQUFKLEdBQVcvcEIsUUFBUTBwQixVQUFSLENBQW1Cd1gsR0FBR3ZCLGNBQXRCLEVBQXNDdUIsR0FBR3hCLGdCQUF6QyxFQUEyRHdCLEdBQUcxQixpQkFBOUQsQ0FBWDs7QUFFQXgvQixjQUFRMkssSUFBUixDQUFhMnlCLE1BQWIsRUFBcUIsVUFBUzlzQixJQUFULEVBQWU7QUFDbkNyRyxXQUFJOHZCLFFBQUosQ0FBYXpwQixJQUFiLEVBQW1Cb0MsR0FBRzdkLENBQXRCLEVBQXlCNmQsR0FBR2xlLENBQTVCO0FBQ0FrZSxVQUFHbGUsQ0FBSCxJQUFRd3NDLEdBQUd2QixjQUFILEdBQW9CdUIsR0FBR25GLGFBQS9CO0FBQ0EsT0FIRDtBQUlBO0FBQ0QsS0F2VzRDOztBQXlXN0M0SCxvQkFBZ0Isd0JBQVMvd0IsRUFBVCxFQUFhc3VCLEVBQWIsRUFBaUIvMkIsR0FBakIsRUFBc0I4M0IsV0FBdEIsRUFBbUMvRCxPQUFuQyxFQUE0QztBQUMzRC96QixTQUFJOEMsU0FBSixHQUFnQit3QixhQUFha0QsR0FBRzc1QixlQUFoQixFQUFpQzYyQixPQUFqQyxDQUFoQjtBQUNBL3pCLFNBQUkrQyxXQUFKLEdBQWtCOHdCLGFBQWFrRCxHQUFHMzVCLFdBQWhCLEVBQTZCMjJCLE9BQTdCLENBQWxCO0FBQ0EvekIsU0FBSWdELFNBQUosR0FBZ0IrekIsR0FBRzE1QixXQUFuQjtBQUNBLFNBQUltM0IsU0FBU3VDLEdBQUd2QyxNQUFoQjtBQUNBLFNBQUlDLFNBQVNzQyxHQUFHdEMsTUFBaEI7QUFDQSxTQUFJN3BDLElBQUk2ZCxHQUFHN2QsQ0FBWDtBQUNBLFNBQUlMLElBQUlrZSxHQUFHbGUsQ0FBWDtBQUNBLFNBQUl1UCxRQUFRZytCLFlBQVloK0IsS0FBeEI7QUFDQSxTQUFJQyxTQUFTKzlCLFlBQVkvOUIsTUFBekI7QUFDQSxTQUFJcUgsU0FBUzIxQixHQUFHM0UsWUFBaEI7O0FBRUFweUIsU0FBSXd2QixTQUFKO0FBQ0F4dkIsU0FBSXl2QixNQUFKLENBQVc3a0MsSUFBSXdXLE1BQWYsRUFBdUI3VyxDQUF2QjtBQUNBLFNBQUlrcUMsV0FBVyxLQUFmLEVBQXNCO0FBQ3JCLFdBQUs2RCxTQUFMLENBQWU3dkIsRUFBZixFQUFtQnF2QixXQUFuQjtBQUNBO0FBQ0Q5M0IsU0FBSTB2QixNQUFKLENBQVc5a0MsSUFBSWtQLEtBQUosR0FBWXNILE1BQXZCLEVBQStCN1csQ0FBL0I7QUFDQXlWLFNBQUl5NUIsZ0JBQUosQ0FBcUI3dUMsSUFBSWtQLEtBQXpCLEVBQWdDdlAsQ0FBaEMsRUFBbUNLLElBQUlrUCxLQUF2QyxFQUE4Q3ZQLElBQUk2VyxNQUFsRDtBQUNBLFNBQUlxekIsV0FBVyxRQUFYLElBQXVCRCxXQUFXLE9BQXRDLEVBQStDO0FBQzlDLFdBQUs4RCxTQUFMLENBQWU3dkIsRUFBZixFQUFtQnF2QixXQUFuQjtBQUNBO0FBQ0Q5M0IsU0FBSTB2QixNQUFKLENBQVc5a0MsSUFBSWtQLEtBQWYsRUFBc0J2UCxJQUFJd1AsTUFBSixHQUFhcUgsTUFBbkM7QUFDQXBCLFNBQUl5NUIsZ0JBQUosQ0FBcUI3dUMsSUFBSWtQLEtBQXpCLEVBQWdDdlAsSUFBSXdQLE1BQXBDLEVBQTRDblAsSUFBSWtQLEtBQUosR0FBWXNILE1BQXhELEVBQWdFN1csSUFBSXdQLE1BQXBFO0FBQ0EsU0FBSTA2QixXQUFXLFFBQWYsRUFBeUI7QUFDeEIsV0FBSzZELFNBQUwsQ0FBZTd2QixFQUFmLEVBQW1CcXZCLFdBQW5CO0FBQ0E7QUFDRDkzQixTQUFJMHZCLE1BQUosQ0FBVzlrQyxJQUFJd1csTUFBZixFQUF1QjdXLElBQUl3UCxNQUEzQjtBQUNBaUcsU0FBSXk1QixnQkFBSixDQUFxQjd1QyxDQUFyQixFQUF3QkwsSUFBSXdQLE1BQTVCLEVBQW9DblAsQ0FBcEMsRUFBdUNMLElBQUl3UCxNQUFKLEdBQWFxSCxNQUFwRDtBQUNBLFNBQUlxekIsV0FBVyxRQUFYLElBQXVCRCxXQUFXLE1BQXRDLEVBQThDO0FBQzdDLFdBQUs4RCxTQUFMLENBQWU3dkIsRUFBZixFQUFtQnF2QixXQUFuQjtBQUNBO0FBQ0Q5M0IsU0FBSTB2QixNQUFKLENBQVc5a0MsQ0FBWCxFQUFjTCxJQUFJNlcsTUFBbEI7QUFDQXBCLFNBQUl5NUIsZ0JBQUosQ0FBcUI3dUMsQ0FBckIsRUFBd0JMLENBQXhCLEVBQTJCSyxJQUFJd1csTUFBL0IsRUFBdUM3VyxDQUF2QztBQUNBeVYsU0FBSTA1QixTQUFKOztBQUVBMTVCLFNBQUkyQyxJQUFKOztBQUVBLFNBQUlvMEIsR0FBRzE1QixXQUFILEdBQWlCLENBQXJCLEVBQXdCO0FBQ3ZCMkMsVUFBSTRDLE1BQUo7QUFDQTtBQUNELEtBbFo0Qzs7QUFvWjdDOUMsVUFBTSxnQkFBVztBQUNoQixTQUFJRSxNQUFNLEtBQUtnRyxNQUFMLENBQVloRyxHQUF0QjtBQUNBLFNBQUkrMkIsS0FBSyxLQUFLL2YsS0FBZDs7QUFFQSxTQUFJK2YsR0FBR2hELE9BQUgsS0FBZSxDQUFuQixFQUFzQjtBQUNyQjtBQUNBOztBQUVELFNBQUkrRCxjQUFjO0FBQ2pCaCtCLGFBQU9pOUIsR0FBR2o5QixLQURPO0FBRWpCQyxjQUFRZzlCLEdBQUdoOUI7QUFGTSxNQUFsQjtBQUlBLFNBQUkwTyxLQUFLO0FBQ1I3ZCxTQUFHbXNDLEdBQUduc0MsQ0FERTtBQUVSTCxTQUFHd3NDLEdBQUd4c0M7QUFGRSxNQUFUOztBQUtBO0FBQ0EsU0FBSXdwQyxVQUFVMXpDLEtBQUt3bEIsR0FBTCxDQUFTa3hCLEdBQUdoRCxPQUFILEdBQWEsSUFBdEIsSUFBOEIsQ0FBOUIsR0FBa0NnRCxHQUFHaEQsT0FBbkQ7O0FBRUE7QUFDQSxTQUFJNEYsb0JBQW9CNUMsR0FBRzkvQixLQUFILENBQVN2WSxNQUFULElBQW1CcTRDLEdBQUdwRSxVQUFILENBQWNqMEMsTUFBakMsSUFBMkNxNEMsR0FBR25CLElBQUgsQ0FBUWwzQyxNQUFuRCxJQUE2RHE0QyxHQUFHOUQsU0FBSCxDQUFhdjBDLE1BQTFFLElBQW9GcTRDLEdBQUc1RCxNQUFILENBQVV6MEMsTUFBdEg7O0FBRUEsU0FBSSxLQUFLc2lCLFFBQUwsQ0FBYzJTLE9BQWQsSUFBeUJnbUIsaUJBQTdCLEVBQWdEO0FBQy9DO0FBQ0EsV0FBS0gsY0FBTCxDQUFvQi93QixFQUFwQixFQUF3QnN1QixFQUF4QixFQUE0Qi8yQixHQUE1QixFQUFpQzgzQixXQUFqQyxFQUE4Qy9ELE9BQTlDOztBQUVBO0FBQ0F0ckIsU0FBRzdkLENBQUgsSUFBUW1zQyxHQUFHOUUsUUFBWDtBQUNBeHBCLFNBQUdsZSxDQUFILElBQVF3c0MsR0FBRy9FLFFBQVg7O0FBRUE7QUFDQSxXQUFLK0csU0FBTCxDQUFldHdCLEVBQWYsRUFBbUJzdUIsRUFBbkIsRUFBdUIvMkIsR0FBdkIsRUFBNEIrekIsT0FBNUI7O0FBRUE7QUFDQSxXQUFLaUYsUUFBTCxDQUFjdndCLEVBQWQsRUFBa0JzdUIsRUFBbEIsRUFBc0IvMkIsR0FBdEIsRUFBMkIrekIsT0FBM0I7O0FBRUE7QUFDQSxXQUFLd0YsVUFBTCxDQUFnQjl3QixFQUFoQixFQUFvQnN1QixFQUFwQixFQUF3Qi8yQixHQUF4QixFQUE2Qit6QixPQUE3QjtBQUNBO0FBQ0QsS0E1YjRDOztBQThiN0M7Ozs7OztBQU1BbGdCLGlCQUFhLHFCQUFTaDJCLENBQVQsRUFBWTtBQUN4QixTQUFJNmQsS0FBSyxJQUFUO0FBQ0EsU0FBSWxCLFVBQVVrQixHQUFHc0YsUUFBakI7QUFDQSxTQUFJNFMsVUFBVSxLQUFkOztBQUVBbFksUUFBRzA3QixXQUFILEdBQWlCMTdCLEdBQUcwN0IsV0FBSCxJQUFrQixFQUFuQzs7QUFFQTtBQUNBLFNBQUl2NUMsRUFBRTJJLElBQUYsS0FBVyxVQUFmLEVBQTJCO0FBQzFCa1YsU0FBR2s4QixPQUFILEdBQWEsRUFBYjtBQUNBLE1BRkQsTUFFTztBQUNObDhCLFNBQUdrOEIsT0FBSCxHQUFhbDhCLEdBQUdzSyxNQUFILENBQVV3TSx5QkFBVixDQUFvQzMwQixDQUFwQyxFQUF1QzJjLFFBQVFyQyxJQUEvQyxFQUFxRHFDLE9BQXJELENBQWI7QUFDQTs7QUFFRDtBQUNBb1osZUFBVSxDQUFDL2QsUUFBUXdlLFdBQVIsQ0FBb0IzWSxHQUFHazhCLE9BQXZCLEVBQWdDbDhCLEdBQUcwN0IsV0FBbkMsQ0FBWDs7QUFFQTtBQUNBLFNBQUl4akIsT0FBSixFQUFhO0FBQ1psWSxTQUFHMDdCLFdBQUgsR0FBaUIxN0IsR0FBR2s4QixPQUFwQjs7QUFFQSxVQUFJcDlCLFFBQVFtWixPQUFSLElBQW1CblosUUFBUWdDLE1BQS9CLEVBQXVDO0FBQ3RDZCxVQUFHeThCLGNBQUgsR0FBb0I7QUFDbkJ2dEMsV0FBRy9NLEVBQUUrTSxDQURjO0FBRW5CTCxXQUFHMU0sRUFBRTBNO0FBRmMsUUFBcEI7O0FBS0FtUixVQUFHTSxNQUFILENBQVUsSUFBVjtBQUNBTixVQUFHNkIsS0FBSDtBQUNBO0FBQ0Q7O0FBRUQsWUFBT3FXLE9BQVA7QUFDQTtBQXJlNEMsSUFBZixDQUEvQjs7QUF3ZUE7OztBQUdBeDJCLFdBQVFpMkMsV0FBUixHQUFzQkEsV0FBdEI7QUFHQyxHQS84QmUsRUErOEJkLEVBQUMsTUFBSyxFQUFOLEVBQVMsTUFBSyxFQUFkLEVBQWlCLE1BQUssRUFBdEIsRUEvOEJjLENBLzdQeXlCLEVBODRSNXhCLElBQUcsQ0FBQyxVQUFTbDFDLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRTs7QUFFQSxPQUFJNFksV0FBVzdYLFFBQVEsRUFBUixDQUFmO0FBQ0EsT0FBSThYLFVBQVU5WCxRQUFRLEVBQVIsQ0FBZDtBQUNBLE9BQUkwWCxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7O0FBRUE2WCxZQUFTaUMsSUFBVCxDQUFjLFFBQWQsRUFBd0I7QUFDdkIvQixjQUFVO0FBQ1R1TSxVQUFLO0FBQ0p2Rix1QkFBaUJsSCxTQUFTdlksTUFBVCxDQUFnQmlqQyxZQUQ3QjtBQUVKdGpCLG1CQUFhLE1BRlQ7QUFHSkMsbUJBQWE7QUFIVDtBQURJO0FBRGEsSUFBeEI7O0FBVUFoZ0IsVUFBT0QsT0FBUCxHQUFpQjZZLFFBQVFtQixNQUFSLENBQWU7QUFDL0J3aUMsa0JBQWMsc0JBQVMxZCxNQUFULEVBQWlCO0FBQzlCLFNBQUk2YSxLQUFLLEtBQUsvZixLQUFkOztBQUVBLFNBQUkrZixFQUFKLEVBQVE7QUFDUCxhQUFRMTJDLEtBQUtpRSxHQUFMLENBQVM0M0IsU0FBUzZhLEdBQUduc0MsQ0FBckIsRUFBd0IsQ0FBeEIsSUFBNkJ2SyxLQUFLaUUsR0FBTCxDQUFTeXlDLEdBQUczMUIsTUFBSCxHQUFZMjFCLEdBQUduMUIsV0FBeEIsRUFBcUMsQ0FBckMsQ0FBckM7QUFDQTtBQUNELFlBQU8sS0FBUDtBQUNBLEtBUjhCOztBQVUvQnFmLGFBQVMsaUJBQVM0WSxNQUFULEVBQWlCQyxNQUFqQixFQUF5QjtBQUNqQyxTQUFJL0MsS0FBSyxLQUFLL2YsS0FBZDs7QUFFQSxTQUFJK2YsRUFBSixFQUFRO0FBQ1AsVUFBSWdELHdCQUF3QmxrQyxRQUFRdWpCLGlCQUFSLENBQTBCMmQsRUFBMUIsRUFBOEIsRUFBQ25zQyxHQUFHaXZDLE1BQUosRUFBWXR2QyxHQUFHdXZDLE1BQWYsRUFBOUIsQ0FBNUI7QUFDQSxVQUFJMXZCLFFBQVEydkIsc0JBQXNCM3ZCLEtBQWxDO0FBQ0EsVUFBSU8sV0FBV292QixzQkFBc0JwdkIsUUFBckM7O0FBRUE7QUFDQSxVQUFJcEcsYUFBYXd5QixHQUFHeHlCLFVBQXBCO0FBQ0EsVUFBSUMsV0FBV3V5QixHQUFHdnlCLFFBQWxCO0FBQ0EsYUFBT0EsV0FBV0QsVUFBbEIsRUFBOEI7QUFDN0JDLG1CQUFZLE1BQU1ua0IsS0FBS3dMLEVBQXZCO0FBQ0E7QUFDRCxhQUFPdWUsUUFBUTVGLFFBQWYsRUFBeUI7QUFDeEI0RixnQkFBUyxNQUFNL3BCLEtBQUt3TCxFQUFwQjtBQUNBO0FBQ0QsYUFBT3VlLFFBQVE3RixVQUFmLEVBQTJCO0FBQzFCNkYsZ0JBQVMsTUFBTS9wQixLQUFLd0wsRUFBcEI7QUFDQTs7QUFFRDtBQUNBLFVBQUltdUMsZ0JBQWlCNXZCLFNBQVM3RixVQUFULElBQXVCNkYsU0FBUzVGLFFBQXJEO0FBQ0EsVUFBSXkxQixlQUFnQnR2QixZQUFZb3NCLEdBQUcveEIsV0FBZixJQUE4QjJGLFlBQVlvc0IsR0FBR2h5QixXQUFqRTs7QUFFQSxhQUFRaTFCLGlCQUFpQkMsWUFBekI7QUFDQTtBQUNELFlBQU8sS0FBUDtBQUNBLEtBdEM4Qjs7QUF3Qy9CM1ksb0JBQWdCLDBCQUFXO0FBQzFCLFNBQUl5VixLQUFLLEtBQUsvZixLQUFkO0FBQ0EsU0FBSWtqQixZQUFZLENBQUNuRCxHQUFHeHlCLFVBQUgsR0FBZ0J3eUIsR0FBR3Z5QixRQUFwQixJQUFnQyxDQUFoRDtBQUNBLFNBQUkyMUIsYUFBYSxDQUFDcEQsR0FBRy94QixXQUFILEdBQWlCK3hCLEdBQUdoeUIsV0FBckIsSUFBb0MsQ0FBckQ7QUFDQSxZQUFPO0FBQ05uYSxTQUFHbXNDLEdBQUduc0MsQ0FBSCxHQUFPdkssS0FBSzJMLEdBQUwsQ0FBU2t1QyxTQUFULElBQXNCQyxVQUQxQjtBQUVONXZDLFNBQUd3c0MsR0FBR3hzQyxDQUFILEdBQU9sSyxLQUFLNEwsR0FBTCxDQUFTaXVDLFNBQVQsSUFBc0JDO0FBRjFCLE1BQVA7QUFJQSxLQWhEOEI7O0FBa0QvQnBZLGFBQVMsbUJBQVc7QUFDbkIsU0FBSWdWLEtBQUssS0FBSy9mLEtBQWQ7QUFDQSxZQUFPMzJCLEtBQUt3TCxFQUFMLElBQVcsQ0FBQ2tyQyxHQUFHdnlCLFFBQUgsR0FBY3V5QixHQUFHeHlCLFVBQWxCLEtBQWlDLElBQUlsa0IsS0FBS3dMLEVBQTFDLENBQVgsS0FBNkR4TCxLQUFLaUUsR0FBTCxDQUFTeXlDLEdBQUdoeUIsV0FBWixFQUF5QixDQUF6QixJQUE4QjFrQixLQUFLaUUsR0FBTCxDQUFTeXlDLEdBQUcveEIsV0FBWixFQUF5QixDQUF6QixDQUEzRixDQUFQO0FBQ0EsS0FyRDhCOztBQXVEL0JpUyxxQkFBaUIsMkJBQVc7QUFDM0IsU0FBSThmLEtBQUssS0FBSy9mLEtBQWQ7QUFDQSxTQUFJb2pCLGNBQWNyRCxHQUFHeHlCLFVBQUgsR0FBaUIsQ0FBQ3d5QixHQUFHdnlCLFFBQUgsR0FBY3V5QixHQUFHeHlCLFVBQWxCLElBQWdDLENBQW5FO0FBQ0EsU0FBSTgxQixrQkFBa0IsQ0FBQ3RELEdBQUdoeUIsV0FBSCxHQUFpQmd5QixHQUFHL3hCLFdBQXJCLElBQW9DLENBQXBDLEdBQXdDK3hCLEdBQUcveEIsV0FBakU7O0FBRUEsWUFBTztBQUNOcGEsU0FBR21zQyxHQUFHbnNDLENBQUgsR0FBUXZLLEtBQUsyTCxHQUFMLENBQVNvdUMsV0FBVCxJQUF3QkMsZUFEN0I7QUFFTjl2QyxTQUFHd3NDLEdBQUd4c0MsQ0FBSCxHQUFRbEssS0FBSzRMLEdBQUwsQ0FBU211QyxXQUFULElBQXdCQztBQUY3QixNQUFQO0FBSUEsS0FoRThCOztBQWtFL0J2NkIsVUFBTSxnQkFBVztBQUNoQixTQUFJRSxNQUFNLEtBQUtnRyxNQUFMLENBQVloRyxHQUF0QjtBQUNBLFNBQUkrMkIsS0FBSyxLQUFLL2YsS0FBZDtBQUNBLFNBQUlzakIsS0FBS3ZELEdBQUd4eUIsVUFBWjtBQUNBLFNBQUlnMkIsS0FBS3hELEdBQUd2eUIsUUFBWjs7QUFFQXhFLFNBQUl3dkIsU0FBSjs7QUFFQXh2QixTQUFJeUMsR0FBSixDQUFRczBCLEdBQUduc0MsQ0FBWCxFQUFjbXNDLEdBQUd4c0MsQ0FBakIsRUFBb0J3c0MsR0FBR2h5QixXQUF2QixFQUFvQ3UxQixFQUFwQyxFQUF3Q0MsRUFBeEM7QUFDQXY2QixTQUFJeUMsR0FBSixDQUFRczBCLEdBQUduc0MsQ0FBWCxFQUFjbXNDLEdBQUd4c0MsQ0FBakIsRUFBb0J3c0MsR0FBRy94QixXQUF2QixFQUFvQ3UxQixFQUFwQyxFQUF3Q0QsRUFBeEMsRUFBNEMsSUFBNUM7O0FBRUF0NkIsU0FBSTA1QixTQUFKO0FBQ0ExNUIsU0FBSStDLFdBQUosR0FBa0JnMEIsR0FBRzM1QixXQUFyQjtBQUNBNEMsU0FBSWdELFNBQUosR0FBZ0IrekIsR0FBRzE1QixXQUFuQjs7QUFFQTJDLFNBQUk4QyxTQUFKLEdBQWdCaTBCLEdBQUc3NUIsZUFBbkI7O0FBRUE4QyxTQUFJMkMsSUFBSjtBQUNBM0MsU0FBSXc2QixRQUFKLEdBQWUsT0FBZjs7QUFFQSxTQUFJekQsR0FBRzE1QixXQUFQLEVBQW9CO0FBQ25CMkMsVUFBSTRDLE1BQUo7QUFDQTtBQUNEO0FBekY4QixJQUFmLENBQWpCO0FBNEZDLEdBN0crQixFQTZHOUIsRUFBQyxNQUFLLEVBQU4sRUFBUyxNQUFLLEVBQWQsRUFBaUIsTUFBSyxFQUF0QixFQTdHOEIsQ0E5NFJ5eEIsRUEyL1I1eEIsSUFBRyxDQUFDLFVBQVN6a0IsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ2pFOztBQUVBLE9BQUk0WSxXQUFXN1gsUUFBUSxFQUFSLENBQWY7QUFDQSxPQUFJOFgsVUFBVTlYLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSTBYLFVBQVUxWCxRQUFRLEVBQVIsQ0FBZDs7QUFFQSxPQUFJa3FDLGlCQUFpQnJ5QixTQUFTdlksTUFBOUI7O0FBRUF1WSxZQUFTaUMsSUFBVCxDQUFjLFFBQWQsRUFBd0I7QUFDdkIvQixjQUFVO0FBQ1RtUSxXQUFNO0FBQ0xHLGVBQVMsR0FESjtBQUVMdEosdUJBQWlCbXJCLGVBQWUzSCxZQUYzQjtBQUdMcmpCLG1CQUFhLENBSFI7QUFJTEQsbUJBQWFpckIsZUFBZTNILFlBSnZCO0FBS0w5WixzQkFBZ0IsTUFMWDtBQU1MQyxrQkFBWSxFQU5QO0FBT0xDLHdCQUFrQixHQVBiO0FBUUxDLHVCQUFpQixPQVJaO0FBU0xxQyx1QkFBaUIsSUFUWjtBQVVMekcsWUFBTSxJQVZELENBVU87QUFWUDtBQURHO0FBRGEsSUFBeEI7O0FBaUJBdGxCLFVBQU9ELE9BQVAsR0FBaUI2WSxRQUFRbUIsTUFBUixDQUFlO0FBQy9CMEksVUFBTSxnQkFBVztBQUNoQixTQUFJcEUsS0FBSyxJQUFUO0FBQ0EsU0FBSXE3QixLQUFLcjdCLEdBQUdzYixLQUFaO0FBQ0EsU0FBSWhYLE1BQU10RSxHQUFHc0ssTUFBSCxDQUFVaEcsR0FBcEI7QUFDQSxTQUFJa0csV0FBVzZ3QixHQUFHN3dCLFFBQWxCO0FBQ0EsU0FBSTNGLFNBQVM3RSxHQUFHaUwsU0FBSCxDQUFheG1CLEtBQWIsRUFBYixDQUxnQixDQUttQjtBQUNuQyxTQUFJczZDLDJCQUEyQnBTLGVBQWVueUIsUUFBZixDQUF3Qm1RLElBQXZEO0FBQ0EsU0FBSXEwQixpQkFBaUIsQ0FBQyxDQUF0QjtBQUNBLFNBQUluekMsS0FBSixFQUFXMnlCLE9BQVgsRUFBb0JsUixRQUFwQixFQUE4QjJ4QixTQUE5Qjs7QUFFQTtBQUNBLFNBQUlqL0IsR0FBR3FQLEtBQUgsSUFBWXhLLE9BQU83aEIsTUFBdkIsRUFBK0I7QUFDOUI2aEIsYUFBT3pCLElBQVAsQ0FBWXlCLE9BQU8sQ0FBUCxDQUFaO0FBQ0E7O0FBRURQLFNBQUlxdkIsSUFBSjs7QUFFQTtBQUNBcnZCLFNBQUk0NkIsT0FBSixHQUFjN0QsR0FBR253QixjQUFILElBQXFCNnpCLHlCQUF5Qjd6QixjQUE1RDs7QUFFQTtBQUNBLFNBQUk1RyxJQUFJc3ZCLFdBQVIsRUFBcUI7QUFDcEJ0dkIsVUFBSXN2QixXQUFKLENBQWdCeUgsR0FBR2x3QixVQUFILElBQWlCNHpCLHlCQUF5QjV6QixVQUExRDtBQUNBOztBQUVEN0csU0FBSXV2QixjQUFKLEdBQXFCd0gsR0FBR2p3QixnQkFBSCxJQUF1QjJ6Qix5QkFBeUIzekIsZ0JBQXJFO0FBQ0E5RyxTQUFJdzZCLFFBQUosR0FBZXpELEdBQUdod0IsZUFBSCxJQUFzQjB6Qix5QkFBeUIxekIsZUFBOUQ7QUFDQS9HLFNBQUlnRCxTQUFKLEdBQWdCK3pCLEdBQUcxNUIsV0FBSCxJQUFrQm85Qix5QkFBeUJwOUIsV0FBM0Q7QUFDQTJDLFNBQUkrQyxXQUFKLEdBQWtCZzBCLEdBQUczNUIsV0FBSCxJQUFrQmlyQixlQUFlM0gsWUFBbkQ7O0FBRUE7QUFDQTFnQixTQUFJd3ZCLFNBQUo7QUFDQWtMLHNCQUFpQixDQUFDLENBQWxCOztBQUVBLFVBQUtuekMsUUFBUSxDQUFiLEVBQWdCQSxRQUFRZ1osT0FBTzdoQixNQUEvQixFQUF1QyxFQUFFNkksS0FBekMsRUFBZ0Q7QUFDL0MyeUIsZ0JBQVUzWixPQUFPaFosS0FBUCxDQUFWO0FBQ0F5aEIsaUJBQVduVCxRQUFRZ1QsWUFBUixDQUFxQnRJLE1BQXJCLEVBQTZCaFosS0FBN0IsQ0FBWDtBQUNBb3pDLGtCQUFZemdCLFFBQVFsRCxLQUFwQjs7QUFFQTtBQUNBLFVBQUl6dkIsVUFBVSxDQUFkLEVBQWlCO0FBQ2hCLFdBQUksQ0FBQ296QyxVQUFVdDVCLElBQWYsRUFBcUI7QUFDcEJyQixZQUFJeXZCLE1BQUosQ0FBV2tMLFVBQVUvdkMsQ0FBckIsRUFBd0IrdkMsVUFBVXB3QyxDQUFsQztBQUNBbXdDLHlCQUFpQm56QyxLQUFqQjtBQUNBO0FBQ0QsT0FMRCxNQUtPO0FBQ055aEIsa0JBQVcweEIsbUJBQW1CLENBQUMsQ0FBcEIsR0FBd0IxeEIsUUFBeEIsR0FBbUN6SSxPQUFPbTZCLGNBQVAsQ0FBOUM7O0FBRUEsV0FBSSxDQUFDQyxVQUFVdDVCLElBQWYsRUFBcUI7QUFDcEIsWUFBS3E1QixtQkFBb0JuekMsUUFBUSxDQUE1QixJQUFrQyxDQUFDMmUsUUFBcEMsSUFBaUR3MEIsbUJBQW1CLENBQUMsQ0FBekUsRUFBNEU7QUFDM0U7QUFDQTE2QixhQUFJeXZCLE1BQUosQ0FBV2tMLFVBQVUvdkMsQ0FBckIsRUFBd0IrdkMsVUFBVXB3QyxDQUFsQztBQUNBLFNBSEQsTUFHTztBQUNOO0FBQ0FzTCxpQkFBUXlCLE1BQVIsQ0FBZW80QixNQUFmLENBQXNCMXZCLEdBQXRCLEVBQTJCZ0osU0FBU2dPLEtBQXBDLEVBQTJDa0QsUUFBUWxELEtBQW5EO0FBQ0E7QUFDRDBqQix5QkFBaUJuekMsS0FBakI7QUFDQTtBQUNEO0FBQ0Q7O0FBRUR5WSxTQUFJNEMsTUFBSjtBQUNBNUMsU0FBSTJ2QixPQUFKO0FBQ0E7QUFoRThCLElBQWYsQ0FBakI7QUFtRUMsR0E3RitCLEVBNkY5QixFQUFDLE1BQUssRUFBTixFQUFTLE1BQUssRUFBZCxFQUFpQixNQUFLLEVBQXRCLEVBN0Y4QixDQTMvUnl4QixFQXdsUzV4QixJQUFHLENBQUMsVUFBU3h4QyxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDakU7O0FBRUEsT0FBSTRZLFdBQVc3WCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUk4WCxVQUFVOVgsUUFBUSxFQUFSLENBQWQ7QUFDQSxPQUFJMFgsVUFBVTFYLFFBQVEsRUFBUixDQUFkOztBQUVBLE9BQUl1aUMsZUFBZTFxQixTQUFTdlksTUFBVCxDQUFnQmlqQyxZQUFuQzs7QUFFQTFxQixZQUFTaUMsSUFBVCxDQUFjLFFBQWQsRUFBd0I7QUFDdkIvQixjQUFVO0FBQ1R1SyxZQUFPO0FBQ05XLGNBQVEsQ0FERjtBQUVORixrQkFBWSxRQUZOO0FBR05oRSx1QkFBaUJ3akIsWUFIWDtBQUlOdGpCLG1CQUFhc2pCLFlBSlA7QUFLTnJqQixtQkFBYSxDQUxQO0FBTU47QUFDQTRELGlCQUFXLENBUEw7QUFRTlcsbUJBQWEsQ0FSUDtBQVNORCx3QkFBa0I7QUFUWjtBQURFO0FBRGEsSUFBeEI7O0FBZ0JBLFlBQVNrNUIsTUFBVCxDQUFnQjNlLE1BQWhCLEVBQXdCO0FBQ3ZCLFFBQUk2YSxLQUFLLEtBQUsvZixLQUFkO0FBQ0EsV0FBTytmLEtBQU0xMkMsS0FBS3dsQixHQUFMLENBQVNxVyxTQUFTNmEsR0FBR25zQyxDQUFyQixJQUEwQm1zQyxHQUFHMzFCLE1BQUgsR0FBWTIxQixHQUFHOTFCLFNBQS9DLEdBQTRELEtBQW5FO0FBQ0E7O0FBRUQsWUFBUzY1QixNQUFULENBQWdCM2UsTUFBaEIsRUFBd0I7QUFDdkIsUUFBSTRhLEtBQUssS0FBSy9mLEtBQWQ7QUFDQSxXQUFPK2YsS0FBTTEyQyxLQUFLd2xCLEdBQUwsQ0FBU3NXLFNBQVM0YSxHQUFHeHNDLENBQXJCLElBQTBCd3NDLEdBQUczMUIsTUFBSCxHQUFZMjFCLEdBQUc5MUIsU0FBL0MsR0FBNEQsS0FBbkU7QUFDQTs7QUFFRDVqQixVQUFPRCxPQUFQLEdBQWlCNlksUUFBUW1CLE1BQVIsQ0FBZTtBQUMvQjZwQixhQUFTLGlCQUFTL0UsTUFBVCxFQUFpQkMsTUFBakIsRUFBeUI7QUFDakMsU0FBSTRhLEtBQUssS0FBSy9mLEtBQWQ7QUFDQSxZQUFPK2YsS0FBTzEyQyxLQUFLaUUsR0FBTCxDQUFTNDNCLFNBQVM2YSxHQUFHbnNDLENBQXJCLEVBQXdCLENBQXhCLElBQTZCdkssS0FBS2lFLEdBQUwsQ0FBUzYzQixTQUFTNGEsR0FBR3hzQyxDQUFyQixFQUF3QixDQUF4QixDQUE5QixHQUE0RGxLLEtBQUtpRSxHQUFMLENBQVN5eUMsR0FBRzkxQixTQUFILEdBQWU4MUIsR0FBRzMxQixNQUEzQixFQUFtQyxDQUFuQyxDQUFsRSxHQUEyRyxLQUFsSDtBQUNBLEtBSjhCOztBQU0vQnc0QixrQkFBY2lCLE1BTmlCO0FBTy9CMVksY0FBVTBZLE1BUHFCO0FBUS9CelksY0FBVTBZLE1BUnFCOztBQVUvQnhaLG9CQUFnQiwwQkFBVztBQUMxQixTQUFJeVYsS0FBSyxLQUFLL2YsS0FBZDtBQUNBLFlBQU87QUFDTnBzQixTQUFHbXNDLEdBQUduc0MsQ0FEQTtBQUVOTCxTQUFHd3NDLEdBQUd4c0M7QUFGQSxNQUFQO0FBSUEsS0FoQjhCOztBQWtCL0J3M0IsYUFBUyxtQkFBVztBQUNuQixZQUFPMWhDLEtBQUt3TCxFQUFMLEdBQVV4TCxLQUFLaUUsR0FBTCxDQUFTLEtBQUsweUIsS0FBTCxDQUFXNVYsTUFBcEIsRUFBNEIsQ0FBNUIsQ0FBakI7QUFDQSxLQXBCOEI7O0FBc0IvQjZWLHFCQUFpQiwyQkFBVztBQUMzQixTQUFJOGYsS0FBSyxLQUFLL2YsS0FBZDtBQUNBLFlBQU87QUFDTnBzQixTQUFHbXNDLEdBQUduc0MsQ0FEQTtBQUVOTCxTQUFHd3NDLEdBQUd4c0MsQ0FGQTtBQUdOazBCLGVBQVNzWSxHQUFHMzFCLE1BQUgsR0FBWTIxQixHQUFHMTVCO0FBSGxCLE1BQVA7QUFLQSxLQTdCOEI7O0FBK0IvQnlDLFVBQU0sY0FBU0csU0FBVCxFQUFvQjtBQUN6QixTQUFJODJCLEtBQUssS0FBSy9mLEtBQWQ7QUFDQSxTQUFJeFosUUFBUSxLQUFLUCxNQUFqQjtBQUNBLFNBQUkrQyxNQUFNLEtBQUtnRyxNQUFMLENBQVloRyxHQUF0QjtBQUNBLFNBQUlrQixhQUFhNjFCLEdBQUc3MUIsVUFBcEI7QUFDQSxTQUFJQyxXQUFXNDFCLEdBQUc1MUIsUUFBbEI7QUFDQSxTQUFJQyxTQUFTMjFCLEdBQUczMUIsTUFBaEI7QUFDQSxTQUFJeFcsSUFBSW1zQyxHQUFHbnNDLENBQVg7QUFDQSxTQUFJTCxJQUFJd3NDLEdBQUd4c0MsQ0FBWDtBQUNBLFNBQUl3d0MsWUFBWSxJQUFoQixDQVR5QixDQVNIOztBQUV0QixTQUFJaEUsR0FBRzExQixJQUFQLEVBQWE7QUFDWjtBQUNBOztBQUVEO0FBQ0EsU0FBSXBCLGNBQWM3ZSxTQUFkLElBQTRCb2MsTUFBTTVTLENBQU4sSUFBV3FWLFVBQVVoQixJQUFyQixJQUE2QmdCLFVBQVVrRSxLQUFWLEdBQWtCNDJCLFNBQWxCLElBQStCdjlCLE1BQU01UyxDQUFsRSxJQUF1RTRTLE1BQU1qVCxDQUFOLElBQVcwVixVQUFVZixHQUE1RixJQUFtR2UsVUFBVW9FLE1BQVYsR0FBbUIwMkIsU0FBbkIsSUFBZ0N2OUIsTUFBTWpULENBQXpLLEVBQTZLO0FBQzVLeVYsVUFBSStDLFdBQUosR0FBa0JnMEIsR0FBRzM1QixXQUFILElBQWtCc2pCLFlBQXBDO0FBQ0ExZ0IsVUFBSWdELFNBQUosR0FBZ0JuTixRQUFROEosY0FBUixDQUF1Qm8zQixHQUFHMTVCLFdBQTFCLEVBQXVDckgsU0FBU3ZZLE1BQVQsQ0FBZ0J5WSxRQUFoQixDQUF5QnVLLEtBQXpCLENBQStCcEQsV0FBdEUsQ0FBaEI7QUFDQTJDLFVBQUk4QyxTQUFKLEdBQWdCaTBCLEdBQUc3NUIsZUFBSCxJQUFzQndqQixZQUF0QztBQUNBN3FCLGNBQVF5QixNQUFSLENBQWUwakMsU0FBZixDQUF5Qmg3QixHQUF6QixFQUE4QmtCLFVBQTlCLEVBQTBDRSxNQUExQyxFQUFrRHhXLENBQWxELEVBQXFETCxDQUFyRCxFQUF3RDRXLFFBQXhEO0FBQ0E7QUFDRDtBQXJEOEIsSUFBZixDQUFqQjtBQXdEQyxHQTNGK0IsRUEyRjlCLEVBQUMsTUFBSyxFQUFOLEVBQVMsTUFBSyxFQUFkLEVBQWlCLE1BQUssRUFBdEIsRUEzRjhCLENBeGxTeXhCLEVBbXJTNXhCLElBQUcsQ0FBQyxVQUFTaGpCLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRTs7QUFFQSxPQUFJNFksV0FBVzdYLFFBQVEsRUFBUixDQUFmO0FBQ0EsT0FBSThYLFVBQVU5WCxRQUFRLEVBQVIsQ0FBZDs7QUFFQTZYLFlBQVNpQyxJQUFULENBQWMsUUFBZCxFQUF3QjtBQUN2Qi9CLGNBQVU7QUFDVDRDLGdCQUFXO0FBQ1ZvRSx1QkFBaUJsSCxTQUFTdlksTUFBVCxDQUFnQmlqQyxZQUR2QjtBQUVWdGpCLG1CQUFhcEgsU0FBU3ZZLE1BQVQsQ0FBZ0JpakMsWUFGbkI7QUFHVjNuQixxQkFBZSxRQUhMO0FBSVZzRSxtQkFBYTtBQUpIO0FBREY7QUFEYSxJQUF4Qjs7QUFXQSxZQUFTNDlCLFVBQVQsQ0FBb0IzL0IsR0FBcEIsRUFBeUI7QUFDeEIsV0FBT0EsSUFBSTBiLEtBQUosQ0FBVWxkLEtBQVYsS0FBb0IxWSxTQUEzQjtBQUNBOztBQUVEOzs7Ozs7QUFNQSxZQUFTODVDLFlBQVQsQ0FBc0I1L0IsR0FBdEIsRUFBMkI7QUFDMUIsUUFBSXk3QixLQUFLejdCLElBQUkwYixLQUFiO0FBQ0EsUUFBSW9YLEVBQUosRUFBUUUsRUFBUixFQUFZRCxFQUFaLEVBQWdCM2lDLEVBQWhCOztBQUVBLFFBQUl1dkMsV0FBVzMvQixHQUFYLENBQUosRUFBcUI7QUFDcEI7QUFDQSxTQUFJNi9CLFlBQVlwRSxHQUFHajlCLEtBQUgsR0FBVyxDQUEzQjtBQUNBczBCLFVBQUsySSxHQUFHbnNDLENBQUgsR0FBT3V3QyxTQUFaO0FBQ0E3TSxVQUFLeUksR0FBR25zQyxDQUFILEdBQU91d0MsU0FBWjtBQUNBOU0sVUFBS2h1QyxLQUFLa0IsR0FBTCxDQUFTdzFDLEdBQUd4c0MsQ0FBWixFQUFld3NDLEdBQUdwNUIsSUFBbEIsQ0FBTDtBQUNBalMsVUFBS3JMLEtBQUttQixHQUFMLENBQVN1MUMsR0FBR3hzQyxDQUFaLEVBQWV3c0MsR0FBR3A1QixJQUFsQixDQUFMO0FBQ0EsS0FQRCxNQU9PO0FBQ047QUFDQSxTQUFJeTlCLGFBQWFyRSxHQUFHaDlCLE1BQUgsR0FBWSxDQUE3QjtBQUNBcTBCLFVBQUsvdEMsS0FBS2tCLEdBQUwsQ0FBU3cxQyxHQUFHbnNDLENBQVosRUFBZW1zQyxHQUFHcDVCLElBQWxCLENBQUw7QUFDQTJ3QixVQUFLanVDLEtBQUttQixHQUFMLENBQVN1MUMsR0FBR25zQyxDQUFaLEVBQWVtc0MsR0FBR3A1QixJQUFsQixDQUFMO0FBQ0Ewd0IsVUFBSzBJLEdBQUd4c0MsQ0FBSCxHQUFPNndDLFVBQVo7QUFDQTF2QyxVQUFLcXJDLEdBQUd4c0MsQ0FBSCxHQUFPNndDLFVBQVo7QUFDQTs7QUFFRCxXQUFPO0FBQ05uOEIsV0FBTW12QixFQURBO0FBRU5sdkIsVUFBS212QixFQUZDO0FBR05scUIsWUFBT21xQixFQUhEO0FBSU5qcUIsYUFBUTNZO0FBSkYsS0FBUDtBQU1BOztBQUVEck8sVUFBT0QsT0FBUCxHQUFpQjZZLFFBQVFtQixNQUFSLENBQWU7QUFDL0IwSSxVQUFNLGdCQUFXO0FBQ2hCLFNBQUlFLE1BQU0sS0FBS2dHLE1BQUwsQ0FBWWhHLEdBQXRCO0FBQ0EsU0FBSSsyQixLQUFLLEtBQUsvZixLQUFkO0FBQ0EsU0FBSS9YLElBQUosRUFBVWtGLEtBQVYsRUFBaUJqRixHQUFqQixFQUFzQm1GLE1BQXRCLEVBQThCZzNCLEtBQTlCLEVBQXFDQyxLQUFyQyxFQUE0Q3ZpQyxhQUE1QztBQUNBLFNBQUlzRSxjQUFjMDVCLEdBQUcxNUIsV0FBckI7O0FBRUEsU0FBSSxDQUFDMDVCLEdBQUdsNUIsVUFBUixFQUFvQjtBQUNuQjtBQUNBb0IsYUFBTzgzQixHQUFHbnNDLENBQUgsR0FBT21zQyxHQUFHajlCLEtBQUgsR0FBVyxDQUF6QjtBQUNBcUssY0FBUTR5QixHQUFHbnNDLENBQUgsR0FBT21zQyxHQUFHajlCLEtBQUgsR0FBVyxDQUExQjtBQUNBb0YsWUFBTTYzQixHQUFHeHNDLENBQVQ7QUFDQThaLGVBQVMweUIsR0FBR3A1QixJQUFaO0FBQ0EwOUIsY0FBUSxDQUFSO0FBQ0FDLGNBQVFqM0IsU0FBU25GLEdBQVQsR0FBZSxDQUFmLEdBQW1CLENBQUMsQ0FBNUI7QUFDQW5HLHNCQUFnQmcrQixHQUFHaCtCLGFBQUgsSUFBb0IsUUFBcEM7QUFDQSxNQVRELE1BU087QUFDTjtBQUNBa0csYUFBTzgzQixHQUFHcDVCLElBQVY7QUFDQXdHLGNBQVE0eUIsR0FBR25zQyxDQUFYO0FBQ0FzVSxZQUFNNjNCLEdBQUd4c0MsQ0FBSCxHQUFPd3NDLEdBQUdoOUIsTUFBSCxHQUFZLENBQXpCO0FBQ0FzSyxlQUFTMHlCLEdBQUd4c0MsQ0FBSCxHQUFPd3NDLEdBQUdoOUIsTUFBSCxHQUFZLENBQTVCO0FBQ0FzaEMsY0FBUWwzQixRQUFRbEYsSUFBUixHQUFlLENBQWYsR0FBbUIsQ0FBQyxDQUE1QjtBQUNBcThCLGNBQVEsQ0FBUjtBQUNBdmlDLHNCQUFnQmcrQixHQUFHaCtCLGFBQUgsSUFBb0IsTUFBcEM7QUFDQTs7QUFFRDtBQUNBO0FBQ0EsU0FBSXNFLFdBQUosRUFBaUI7QUFDaEI7QUFDQSxVQUFJaytCLFVBQVVsN0MsS0FBS2tCLEdBQUwsQ0FBU2xCLEtBQUt3bEIsR0FBTCxDQUFTNUcsT0FBT2tGLEtBQWhCLENBQVQsRUFBaUM5akIsS0FBS3dsQixHQUFMLENBQVMzRyxNQUFNbUYsTUFBZixDQUFqQyxDQUFkO0FBQ0FoSCxvQkFBY0EsY0FBY2srQixPQUFkLEdBQXdCQSxPQUF4QixHQUFrQ2wrQixXQUFoRDtBQUNBLFVBQUltK0IsYUFBYW4rQixjQUFjLENBQS9CO0FBQ0E7QUFDQSxVQUFJbytCLGFBQWF4OEIsUUFBUWxHLGtCQUFrQixNQUFsQixHQUEyQnlpQyxhQUFhSCxLQUF4QyxHQUFnRCxDQUF4RCxDQUFqQjtBQUNBLFVBQUlLLGNBQWN2M0IsU0FBU3BMLGtCQUFrQixPQUFsQixHQUE0QixDQUFDeWlDLFVBQUQsR0FBY0gsS0FBMUMsR0FBa0QsQ0FBM0QsQ0FBbEI7QUFDQSxVQUFJTSxZQUFZejhCLE9BQU9uRyxrQkFBa0IsS0FBbEIsR0FBMEJ5aUMsYUFBYUYsS0FBdkMsR0FBK0MsQ0FBdEQsQ0FBaEI7QUFDQSxVQUFJTSxlQUFldjNCLFVBQVV0TCxrQkFBa0IsUUFBbEIsR0FBNkIsQ0FBQ3lpQyxVQUFELEdBQWNGLEtBQTNDLEdBQW1ELENBQTdELENBQW5CO0FBQ0E7QUFDQSxVQUFJRyxlQUFlQyxXQUFuQixFQUFnQztBQUMvQng4QixhQUFNeThCLFNBQU47QUFDQXQzQixnQkFBU3UzQixZQUFUO0FBQ0E7QUFDRDtBQUNBLFVBQUlELGNBQWNDLFlBQWxCLEVBQWdDO0FBQy9CMzhCLGNBQU93OEIsVUFBUDtBQUNBdDNCLGVBQVF1M0IsV0FBUjtBQUNBO0FBQ0Q7O0FBRUQxN0IsU0FBSXd2QixTQUFKO0FBQ0F4dkIsU0FBSThDLFNBQUosR0FBZ0JpMEIsR0FBRzc1QixlQUFuQjtBQUNBOEMsU0FBSStDLFdBQUosR0FBa0JnMEIsR0FBRzM1QixXQUFyQjtBQUNBNEMsU0FBSWdELFNBQUosR0FBZ0IzRixXQUFoQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFJdytCLFVBQVUsQ0FDYixDQUFDNThCLElBQUQsRUFBT29GLE1BQVAsQ0FEYSxFQUViLENBQUNwRixJQUFELEVBQU9DLEdBQVAsQ0FGYSxFQUdiLENBQUNpRixLQUFELEVBQVFqRixHQUFSLENBSGEsRUFJYixDQUFDaUYsS0FBRCxFQUFRRSxNQUFSLENBSmEsQ0FBZDs7QUFPQTtBQUNBLFNBQUl5M0IsVUFBVSxDQUFDLFFBQUQsRUFBVyxNQUFYLEVBQW1CLEtBQW5CLEVBQTBCLE9BQTFCLENBQWQ7QUFDQSxTQUFJQyxjQUFjRCxRQUFRajlCLE9BQVIsQ0FBZ0I5RixhQUFoQixFQUErQixDQUEvQixDQUFsQjtBQUNBLFNBQUlnakMsZ0JBQWdCLENBQUMsQ0FBckIsRUFBd0I7QUFDdkJBLG9CQUFjLENBQWQ7QUFDQTs7QUFFRCxjQUFTQyxRQUFULENBQWtCejBDLEtBQWxCLEVBQXlCO0FBQ3hCLGFBQU9zMEMsUUFBUSxDQUFDRSxjQUFjeDBDLEtBQWYsSUFBd0IsQ0FBaEMsQ0FBUDtBQUNBOztBQUVEO0FBQ0EsU0FBSTAwQyxTQUFTRCxTQUFTLENBQVQsQ0FBYjtBQUNBaDhCLFNBQUl5dkIsTUFBSixDQUFXd00sT0FBTyxDQUFQLENBQVgsRUFBc0JBLE9BQU8sQ0FBUCxDQUF0Qjs7QUFFQSxVQUFLLElBQUloK0MsSUFBSSxDQUFiLEVBQWdCQSxJQUFJLENBQXBCLEVBQXVCQSxHQUF2QixFQUE0QjtBQUMzQmcrQyxlQUFTRCxTQUFTLzlDLENBQVQsQ0FBVDtBQUNBK2hCLFVBQUkwdkIsTUFBSixDQUFXdU0sT0FBTyxDQUFQLENBQVgsRUFBc0JBLE9BQU8sQ0FBUCxDQUF0QjtBQUNBOztBQUVEajhCLFNBQUkyQyxJQUFKO0FBQ0EsU0FBSXRGLFdBQUosRUFBaUI7QUFDaEIyQyxVQUFJNEMsTUFBSjtBQUNBO0FBQ0QsS0ExRjhCOztBQTRGL0I3SSxZQUFRLGtCQUFXO0FBQ2xCLFNBQUlnOUIsS0FBSyxLQUFLL2YsS0FBZDtBQUNBLFlBQU8rZixHQUFHcDVCLElBQUgsR0FBVW81QixHQUFHeHNDLENBQXBCO0FBQ0EsS0EvRjhCOztBQWlHL0IwMkIsYUFBUyxpQkFBUy9FLE1BQVQsRUFBaUJDLE1BQWpCLEVBQXlCO0FBQ2pDLFNBQUk4RSxVQUFVLEtBQWQ7O0FBRUEsU0FBSSxLQUFLakssS0FBVCxFQUFnQjtBQUNmLFVBQUlrbEIsU0FBU2hCLGFBQWEsSUFBYixDQUFiO0FBQ0FqYSxnQkFBVS9FLFVBQVVnZ0IsT0FBT2o5QixJQUFqQixJQUF5QmlkLFVBQVVnZ0IsT0FBTy8zQixLQUExQyxJQUFtRGdZLFVBQVUrZixPQUFPaDlCLEdBQXBFLElBQTJFaWQsVUFBVStmLE9BQU83M0IsTUFBdEc7QUFDQTs7QUFFRCxZQUFPNGMsT0FBUDtBQUNBLEtBMUc4Qjs7QUE0Ry9CMlksa0JBQWMsc0JBQVMxZCxNQUFULEVBQWlCQyxNQUFqQixFQUF5QjtBQUN0QyxTQUFJemdCLEtBQUssSUFBVDtBQUNBLFNBQUksQ0FBQ0EsR0FBR3NiLEtBQVIsRUFBZTtBQUNkLGFBQU8sS0FBUDtBQUNBOztBQUVELFNBQUlpSyxVQUFVLEtBQWQ7QUFDQSxTQUFJaWIsU0FBU2hCLGFBQWF4L0IsRUFBYixDQUFiOztBQUVBLFNBQUl1L0IsV0FBV3YvQixFQUFYLENBQUosRUFBb0I7QUFDbkJ1bEIsZ0JBQVUvRSxVQUFVZ2dCLE9BQU9qOUIsSUFBakIsSUFBeUJpZCxVQUFVZ2dCLE9BQU8vM0IsS0FBcEQ7QUFDQSxNQUZELE1BRU87QUFDTjhjLGdCQUFVOUUsVUFBVStmLE9BQU9oOUIsR0FBakIsSUFBd0JpZCxVQUFVK2YsT0FBTzczQixNQUFuRDtBQUNBOztBQUVELFlBQU80YyxPQUFQO0FBQ0EsS0E1SDhCOztBQThIL0JrQixjQUFVLGtCQUFTakcsTUFBVCxFQUFpQjtBQUMxQixTQUFJZ2dCLFNBQVNoQixhQUFhLElBQWIsQ0FBYjtBQUNBLFlBQU9oZixVQUFVZ2dCLE9BQU9qOUIsSUFBakIsSUFBeUJpZCxVQUFVZ2dCLE9BQU8vM0IsS0FBakQ7QUFDQSxLQWpJOEI7O0FBbUkvQmllLGNBQVUsa0JBQVNqRyxNQUFULEVBQWlCO0FBQzFCLFNBQUkrZixTQUFTaEIsYUFBYSxJQUFiLENBQWI7QUFDQSxZQUFPL2UsVUFBVStmLE9BQU9oOUIsR0FBakIsSUFBd0JpZCxVQUFVK2YsT0FBTzczQixNQUFoRDtBQUNBLEtBdEk4Qjs7QUF3SS9CaWQsb0JBQWdCLDBCQUFXO0FBQzFCLFNBQUl5VixLQUFLLEtBQUsvZixLQUFkO0FBQ0EsU0FBSXBzQixDQUFKLEVBQU9MLENBQVA7QUFDQSxTQUFJMHdDLFdBQVcsSUFBWCxDQUFKLEVBQXNCO0FBQ3JCcndDLFVBQUltc0MsR0FBR25zQyxDQUFQO0FBQ0FMLFVBQUksQ0FBQ3dzQyxHQUFHeHNDLENBQUgsR0FBT3dzQyxHQUFHcDVCLElBQVgsSUFBbUIsQ0FBdkI7QUFDQSxNQUhELE1BR087QUFDTi9TLFVBQUksQ0FBQ21zQyxHQUFHbnNDLENBQUgsR0FBT21zQyxHQUFHcDVCLElBQVgsSUFBbUIsQ0FBdkI7QUFDQXBULFVBQUl3c0MsR0FBR3hzQyxDQUFQO0FBQ0E7O0FBRUQsWUFBTyxFQUFDSyxHQUFHQSxDQUFKLEVBQU9MLEdBQUdBLENBQVYsRUFBUDtBQUNBLEtBcEo4Qjs7QUFzSi9CdzNCLGFBQVMsbUJBQVc7QUFDbkIsU0FBSWdWLEtBQUssS0FBSy9mLEtBQWQ7QUFDQSxZQUFPK2YsR0FBR2o5QixLQUFILEdBQVd6WixLQUFLd2xCLEdBQUwsQ0FBU2t4QixHQUFHeHNDLENBQUgsR0FBT3dzQyxHQUFHcDVCLElBQW5CLENBQWxCO0FBQ0EsS0F6SjhCOztBQTJKL0JzWixxQkFBaUIsMkJBQVc7QUFDM0IsU0FBSThmLEtBQUssS0FBSy9mLEtBQWQ7QUFDQSxZQUFPO0FBQ05wc0IsU0FBR21zQyxHQUFHbnNDLENBREE7QUFFTkwsU0FBR3dzQyxHQUFHeHNDO0FBRkEsTUFBUDtBQUlBO0FBaks4QixJQUFmLENBQWpCO0FBb0tDLEdBM04rQixFQTJOOUIsRUFBQyxNQUFLLEVBQU4sRUFBUyxNQUFLLEVBQWQsRUEzTjhCLENBbnJTeXhCLEVBODRTcHlCLElBQUcsQ0FBQyxVQUFTcE0sT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ3pEOztBQUVBQyxVQUFPRCxPQUFQLEdBQWlCLEVBQWpCO0FBQ0FDLFVBQU9ELE9BQVAsQ0FBZXVtQixHQUFmLEdBQXFCeGxCLFFBQVEsRUFBUixDQUFyQjtBQUNBZCxVQUFPRCxPQUFQLENBQWV5YSxJQUFmLEdBQXNCMVosUUFBUSxFQUFSLENBQXRCO0FBQ0FkLFVBQU9ELE9BQVAsQ0FBZWtqQixLQUFmLEdBQXVCbmlCLFFBQVEsRUFBUixDQUF2QjtBQUNBZCxVQUFPRCxPQUFQLENBQWVxZSxTQUFmLEdBQTJCdGQsUUFBUSxFQUFSLENBQTNCO0FBRUMsR0FUdUIsRUFTdEIsRUFBQyxNQUFLLEVBQU4sRUFBUyxNQUFLLEVBQWQsRUFBaUIsTUFBSyxFQUF0QixFQUF5QixNQUFLLEVBQTlCLEVBVHNCLENBOTRTaXlCLEVBdTVTcHhCLElBQUcsQ0FBQyxVQUFTQSxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDekU7O0FBRUEsT0FBSXlZLFVBQVUxWCxRQUFRLEVBQVIsQ0FBZDs7QUFFQTs7O0FBR0EsT0FBSWYsVUFBVUMsT0FBT0QsT0FBUCxHQUFpQjtBQUM5Qjs7OztBQUlBd3hCLFdBQU8sZUFBU3RTLEtBQVQsRUFBZ0I7QUFDdEJBLFdBQU0wRCxHQUFOLENBQVVtOEIsU0FBVixDQUFvQixDQUFwQixFQUF1QixDQUF2QixFQUEwQjcvQixNQUFNeEMsS0FBaEMsRUFBdUN3QyxNQUFNdkMsTUFBN0M7QUFDQSxLQVA2Qjs7QUFTOUI7Ozs7Ozs7Ozs7O0FBV0FxaUMsaUJBQWEscUJBQVNwOEIsR0FBVCxFQUFjcFYsQ0FBZCxFQUFpQkwsQ0FBakIsRUFBb0J1UCxLQUFwQixFQUEyQkMsTUFBM0IsRUFBbUNxSCxNQUFuQyxFQUEyQztBQUN2RCxTQUFJQSxNQUFKLEVBQVk7QUFDWDtBQUNBO0FBQ0EsVUFBSWlYLFVBQVUsU0FBZDtBQUNBLFVBQUl6NkIsSUFBSXlDLEtBQUtrQixHQUFMLENBQVM2ZixNQUFULEVBQWtCckgsU0FBUyxDQUFWLEdBQWVzZSxPQUFoQyxFQUEwQ3ZlLFFBQVEsQ0FBVCxHQUFjdWUsT0FBdkQsQ0FBUjs7QUFFQXJZLFVBQUl5dkIsTUFBSixDQUFXN2tDLElBQUloTixDQUFmLEVBQWtCMk0sQ0FBbEI7QUFDQXlWLFVBQUkwdkIsTUFBSixDQUFXOWtDLElBQUlrUCxLQUFKLEdBQVlsYyxDQUF2QixFQUEwQjJNLENBQTFCO0FBQ0F5VixVQUFJcThCLEtBQUosQ0FBVXp4QyxJQUFJa1AsS0FBZCxFQUFxQnZQLENBQXJCLEVBQXdCSyxJQUFJa1AsS0FBNUIsRUFBbUN2UCxJQUFJM00sQ0FBdkMsRUFBMENBLENBQTFDO0FBQ0FvaUIsVUFBSTB2QixNQUFKLENBQVc5a0MsSUFBSWtQLEtBQWYsRUFBc0J2UCxJQUFJd1AsTUFBSixHQUFhbmMsQ0FBbkM7QUFDQW9pQixVQUFJcThCLEtBQUosQ0FBVXp4QyxJQUFJa1AsS0FBZCxFQUFxQnZQLElBQUl3UCxNQUF6QixFQUFpQ25QLElBQUlrUCxLQUFKLEdBQVlsYyxDQUE3QyxFQUFnRDJNLElBQUl3UCxNQUFwRCxFQUE0RG5jLENBQTVEO0FBQ0FvaUIsVUFBSTB2QixNQUFKLENBQVc5a0MsSUFBSWhOLENBQWYsRUFBa0IyTSxJQUFJd1AsTUFBdEI7QUFDQWlHLFVBQUlxOEIsS0FBSixDQUFVenhDLENBQVYsRUFBYUwsSUFBSXdQLE1BQWpCLEVBQXlCblAsQ0FBekIsRUFBNEJMLElBQUl3UCxNQUFKLEdBQWFuYyxDQUF6QyxFQUE0Q0EsQ0FBNUM7QUFDQW9pQixVQUFJMHZCLE1BQUosQ0FBVzlrQyxDQUFYLEVBQWNMLElBQUkzTSxDQUFsQjtBQUNBb2lCLFVBQUlxOEIsS0FBSixDQUFVenhDLENBQVYsRUFBYUwsQ0FBYixFQUFnQkssSUFBSWhOLENBQXBCLEVBQXVCMk0sQ0FBdkIsRUFBMEIzTSxDQUExQjtBQUNBb2lCLFVBQUkwNUIsU0FBSjtBQUNBMTVCLFVBQUl5dkIsTUFBSixDQUFXN2tDLENBQVgsRUFBY0wsQ0FBZDtBQUNBLE1BakJELE1BaUJPO0FBQ055VixVQUFJczhCLElBQUosQ0FBUzF4QyxDQUFULEVBQVlMLENBQVosRUFBZXVQLEtBQWYsRUFBc0JDLE1BQXRCO0FBQ0E7QUFDRCxLQXpDNkI7O0FBMkM5QmloQyxlQUFXLG1CQUFTaDdCLEdBQVQsRUFBY29QLEtBQWQsRUFBcUJoTyxNQUFyQixFQUE2QnhXLENBQTdCLEVBQWdDTCxDQUFoQyxFQUFtQzRXLFFBQW5DLEVBQTZDO0FBQ3ZELFNBQUkzYSxJQUFKLEVBQVUrMUMsVUFBVixFQUFzQkMsT0FBdEIsRUFBK0JDLE9BQS9CLEVBQXdDMWlDLE1BQXhDLEVBQWdEYyxJQUFoRDtBQUNBc0csZ0JBQVdBLFlBQVksQ0FBdkI7O0FBRUEsU0FBSWlPLFNBQVMsUUFBT0EsS0FBUCx5Q0FBT0EsS0FBUCxPQUFpQixRQUE5QixFQUF3QztBQUN2QzVvQixhQUFPNG9CLE1BQU0xdEIsUUFBTixFQUFQO0FBQ0EsVUFBSThFLFNBQVMsMkJBQVQsSUFBd0NBLFNBQVMsNEJBQXJELEVBQW1GO0FBQ2xGd1osV0FBSTA4QixTQUFKLENBQWN0dEIsS0FBZCxFQUFxQnhrQixJQUFJd2tCLE1BQU10VixLQUFOLEdBQWMsQ0FBdkMsRUFBMEN2UCxJQUFJNmtCLE1BQU1yVixNQUFOLEdBQWUsQ0FBN0QsRUFBZ0VxVixNQUFNdFYsS0FBdEUsRUFBNkVzVixNQUFNclYsTUFBbkY7QUFDQTtBQUNBO0FBQ0Q7O0FBRUQsU0FBSWxaLE1BQU11Z0IsTUFBTixLQUFpQkEsVUFBVSxDQUEvQixFQUFrQztBQUNqQztBQUNBOztBQUVEcEIsU0FBSXF2QixJQUFKO0FBQ0FydkIsU0FBSTR2QixTQUFKLENBQWNobEMsQ0FBZCxFQUFpQkwsQ0FBakI7QUFDQXlWLFNBQUlyYSxNQUFKLENBQVd3YixXQUFXOWdCLEtBQUt3TCxFQUFoQixHQUFxQixHQUFoQztBQUNBbVUsU0FBSXd2QixTQUFKOztBQUVBLGFBQVFwZ0IsS0FBUjtBQUNBO0FBQ0E7QUFDQ3BQLFdBQUl5QyxHQUFKLENBQVEsQ0FBUixFQUFXLENBQVgsRUFBY3JCLE1BQWQsRUFBc0IsQ0FBdEIsRUFBeUIvZ0IsS0FBS3dMLEVBQUwsR0FBVSxDQUFuQztBQUNBbVUsV0FBSTA1QixTQUFKO0FBQ0E7QUFDRCxXQUFLLFVBQUw7QUFDQzZDLG9CQUFhLElBQUluN0IsTUFBSixHQUFhL2dCLEtBQUt5TCxJQUFMLENBQVUsQ0FBVixDQUExQjtBQUNBaU8sZ0JBQVN3aUMsYUFBYWw4QyxLQUFLeUwsSUFBTCxDQUFVLENBQVYsQ0FBYixHQUE0QixDQUFyQztBQUNBa1UsV0FBSXl2QixNQUFKLENBQVcsQ0FBQzhNLFVBQUQsR0FBYyxDQUF6QixFQUE0QnhpQyxTQUFTLENBQXJDO0FBQ0FpRyxXQUFJMHZCLE1BQUosQ0FBVzZNLGFBQWEsQ0FBeEIsRUFBMkJ4aUMsU0FBUyxDQUFwQztBQUNBaUcsV0FBSTB2QixNQUFKLENBQVcsQ0FBWCxFQUFjLENBQUMsQ0FBRCxHQUFLMzFCLE1BQUwsR0FBYyxDQUE1QjtBQUNBaUcsV0FBSTA1QixTQUFKO0FBQ0E7QUFDRCxXQUFLLE1BQUw7QUFDQzcrQixjQUFPLElBQUl4YSxLQUFLczhDLEtBQVQsR0FBaUJ2N0IsTUFBeEI7QUFDQXBCLFdBQUlzOEIsSUFBSixDQUFTLENBQUN6aEMsSUFBVixFQUFnQixDQUFDQSxJQUFqQixFQUF1QixJQUFJQSxJQUEzQixFQUFpQyxJQUFJQSxJQUFyQztBQUNBO0FBQ0QsV0FBSyxhQUFMO0FBQ0MsV0FBSXJDLFNBQVM0SSxTQUFTL2dCLEtBQUtzOEMsS0FBM0I7QUFDQSxXQUFJQyxRQUFRLENBQUNwa0MsTUFBYjtBQUNBLFdBQUlxa0MsT0FBTyxDQUFDcmtDLE1BQVo7QUFDQSxXQUFJc2tDLFdBQVd6OEMsS0FBS3M4QyxLQUFMLEdBQWF2N0IsTUFBNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFLZzdCLFdBQUwsQ0FBaUJwOEIsR0FBakIsRUFBc0I0OEIsS0FBdEIsRUFBNkJDLElBQTdCLEVBQW1DQyxRQUFuQyxFQUE2Q0EsUUFBN0MsRUFBdUQxN0IsU0FBUyxLQUFoRTtBQUNBO0FBQ0QsV0FBSyxTQUFMO0FBQ0N2RyxjQUFPLElBQUl4YSxLQUFLczhDLEtBQVQsR0FBaUJ2N0IsTUFBeEI7QUFDQXBCLFdBQUl5dkIsTUFBSixDQUFXLENBQUM1MEIsSUFBWixFQUFrQixDQUFsQjtBQUNBbUYsV0FBSTB2QixNQUFKLENBQVcsQ0FBWCxFQUFjNzBCLElBQWQ7QUFDQW1GLFdBQUkwdkIsTUFBSixDQUFXNzBCLElBQVgsRUFBaUIsQ0FBakI7QUFDQW1GLFdBQUkwdkIsTUFBSixDQUFXLENBQVgsRUFBYyxDQUFDNzBCLElBQWY7QUFDQW1GLFdBQUkwNUIsU0FBSjtBQUNBO0FBQ0QsV0FBSyxPQUFMO0FBQ0MxNUIsV0FBSXl2QixNQUFKLENBQVcsQ0FBWCxFQUFjcnVCLE1BQWQ7QUFDQXBCLFdBQUkwdkIsTUFBSixDQUFXLENBQVgsRUFBYyxDQUFDdHVCLE1BQWY7QUFDQXBCLFdBQUl5dkIsTUFBSixDQUFXLENBQUNydUIsTUFBWixFQUFvQixDQUFwQjtBQUNBcEIsV0FBSTB2QixNQUFKLENBQVd0dUIsTUFBWCxFQUFtQixDQUFuQjtBQUNBO0FBQ0QsV0FBSyxVQUFMO0FBQ0NvN0IsaUJBQVVuOEMsS0FBSzJMLEdBQUwsQ0FBUzNMLEtBQUt3TCxFQUFMLEdBQVUsQ0FBbkIsSUFBd0J1VixNQUFsQztBQUNBcTdCLGlCQUFVcDhDLEtBQUs0TCxHQUFMLENBQVM1TCxLQUFLd0wsRUFBTCxHQUFVLENBQW5CLElBQXdCdVYsTUFBbEM7QUFDQXBCLFdBQUl5dkIsTUFBSixDQUFXLENBQUMrTSxPQUFaLEVBQXFCLENBQUNDLE9BQXRCO0FBQ0F6OEIsV0FBSTB2QixNQUFKLENBQVc4TSxPQUFYLEVBQW9CQyxPQUFwQjtBQUNBejhCLFdBQUl5dkIsTUFBSixDQUFXLENBQUMrTSxPQUFaLEVBQXFCQyxPQUFyQjtBQUNBejhCLFdBQUkwdkIsTUFBSixDQUFXOE0sT0FBWCxFQUFvQixDQUFDQyxPQUFyQjtBQUNBO0FBQ0QsV0FBSyxNQUFMO0FBQ0N6OEIsV0FBSXl2QixNQUFKLENBQVcsQ0FBWCxFQUFjcnVCLE1BQWQ7QUFDQXBCLFdBQUkwdkIsTUFBSixDQUFXLENBQVgsRUFBYyxDQUFDdHVCLE1BQWY7QUFDQXBCLFdBQUl5dkIsTUFBSixDQUFXLENBQUNydUIsTUFBWixFQUFvQixDQUFwQjtBQUNBcEIsV0FBSTB2QixNQUFKLENBQVd0dUIsTUFBWCxFQUFtQixDQUFuQjtBQUNBbzdCLGlCQUFVbjhDLEtBQUsyTCxHQUFMLENBQVMzTCxLQUFLd0wsRUFBTCxHQUFVLENBQW5CLElBQXdCdVYsTUFBbEM7QUFDQXE3QixpQkFBVXA4QyxLQUFLNEwsR0FBTCxDQUFTNUwsS0FBS3dMLEVBQUwsR0FBVSxDQUFuQixJQUF3QnVWLE1BQWxDO0FBQ0FwQixXQUFJeXZCLE1BQUosQ0FBVyxDQUFDK00sT0FBWixFQUFxQixDQUFDQyxPQUF0QjtBQUNBejhCLFdBQUkwdkIsTUFBSixDQUFXOE0sT0FBWCxFQUFvQkMsT0FBcEI7QUFDQXo4QixXQUFJeXZCLE1BQUosQ0FBVyxDQUFDK00sT0FBWixFQUFxQkMsT0FBckI7QUFDQXo4QixXQUFJMHZCLE1BQUosQ0FBVzhNLE9BQVgsRUFBb0IsQ0FBQ0MsT0FBckI7QUFDQTtBQUNELFdBQUssTUFBTDtBQUNDejhCLFdBQUl5dkIsTUFBSixDQUFXLENBQUNydUIsTUFBWixFQUFvQixDQUFwQjtBQUNBcEIsV0FBSTB2QixNQUFKLENBQVd0dUIsTUFBWCxFQUFtQixDQUFuQjtBQUNBO0FBQ0QsV0FBSyxNQUFMO0FBQ0NwQixXQUFJeXZCLE1BQUosQ0FBVyxDQUFYLEVBQWMsQ0FBZDtBQUNBenZCLFdBQUkwdkIsTUFBSixDQUFXdHVCLE1BQVgsRUFBbUIsQ0FBbkI7QUFDQTtBQXZFRDs7QUEwRUFwQixTQUFJMkMsSUFBSjtBQUNBM0MsU0FBSTRDLE1BQUo7QUFDQTVDLFNBQUkydkIsT0FBSjtBQUNBLEtBN0k2Qjs7QUErSTlCNXZCLGNBQVUsa0JBQVNDLEdBQVQsRUFBY3NJLElBQWQsRUFBb0I7QUFDN0J0SSxTQUFJcXZCLElBQUo7QUFDQXJ2QixTQUFJd3ZCLFNBQUo7QUFDQXh2QixTQUFJczhCLElBQUosQ0FBU2gwQixLQUFLckosSUFBZCxFQUFvQnFKLEtBQUtwSixHQUF6QixFQUE4Qm9KLEtBQUtuRSxLQUFMLEdBQWFtRSxLQUFLckosSUFBaEQsRUFBc0RxSixLQUFLakUsTUFBTCxHQUFjaUUsS0FBS3BKLEdBQXpFO0FBQ0FjLFNBQUkrOEIsSUFBSjtBQUNBLEtBcEo2Qjs7QUFzSjlCNzhCLGdCQUFZLG9CQUFTRixHQUFULEVBQWM7QUFDekJBLFNBQUkydkIsT0FBSjtBQUNBLEtBeEo2Qjs7QUEwSjlCRCxZQUFRLGdCQUFTMXZCLEdBQVQsRUFBY2dKLFFBQWQsRUFBd0J6aUIsTUFBeEIsRUFBZ0N5MkMsSUFBaEMsRUFBc0M7QUFDN0MsU0FBSXoyQyxPQUFPeWdCLFdBQVgsRUFBd0I7QUFDdkIsVUFBS3pnQixPQUFPeWdCLFdBQVAsS0FBdUIsT0FBdkIsSUFBa0MsQ0FBQ2cyQixJQUFwQyxJQUE4Q3oyQyxPQUFPeWdCLFdBQVAsS0FBdUIsT0FBdkIsSUFBa0NnMkIsSUFBcEYsRUFBMkY7QUFDMUZoOUIsV0FBSTB2QixNQUFKLENBQVcxbUIsU0FBU3BlLENBQXBCLEVBQXVCckUsT0FBT2dFLENBQTlCO0FBQ0EsT0FGRCxNQUVPO0FBQ055VixXQUFJMHZCLE1BQUosQ0FBV25wQyxPQUFPcUUsQ0FBbEIsRUFBcUJvZSxTQUFTemUsQ0FBOUI7QUFDQTtBQUNEeVYsVUFBSTB2QixNQUFKLENBQVducEMsT0FBT3FFLENBQWxCLEVBQXFCckUsT0FBT2dFLENBQTVCO0FBQ0E7QUFDQTs7QUFFRCxTQUFJLENBQUNoRSxPQUFPaWdCLE9BQVosRUFBcUI7QUFDcEJ4RyxVQUFJMHZCLE1BQUosQ0FBV25wQyxPQUFPcUUsQ0FBbEIsRUFBcUJyRSxPQUFPZ0UsQ0FBNUI7QUFDQTtBQUNBOztBQUVEeVYsU0FBSWk5QixhQUFKLENBQ0NELE9BQU9oMEIsU0FBU0QscUJBQWhCLEdBQXdDQyxTQUFTRSxpQkFEbEQsRUFFQzh6QixPQUFPaDBCLFNBQVNDLHFCQUFoQixHQUF3Q0QsU0FBU0csaUJBRmxELEVBR0M2ekIsT0FBT3oyQyxPQUFPMmlCLGlCQUFkLEdBQWtDM2lCLE9BQU93aUIscUJBSDFDLEVBSUNpMEIsT0FBT3oyQyxPQUFPNGlCLGlCQUFkLEdBQWtDNWlCLE9BQU8waUIscUJBSjFDLEVBS0MxaUIsT0FBT3FFLENBTFIsRUFNQ3JFLE9BQU9nRSxDQU5SO0FBT0E7QUFqTDZCLElBQS9COztBQW9MQTs7QUFFQTs7Ozs7OztBQU9Bc0wsV0FBUStZLEtBQVIsR0FBZ0J4eEIsUUFBUXd4QixLQUF4Qjs7QUFFQTs7Ozs7OztBQU9BL1ksV0FBUXFuQyxvQkFBUixHQUErQixVQUFTbDlCLEdBQVQsRUFBYztBQUM1Q0EsUUFBSXd2QixTQUFKO0FBQ0FweUMsWUFBUWcvQyxXQUFSLENBQW9CeGdDLEtBQXBCLENBQTBCeGUsT0FBMUIsRUFBbUMwRixTQUFuQztBQUNBLElBSEQ7QUFLQyxHQW5OdUMsRUFtTnRDLEVBQUMsTUFBSyxFQUFOLEVBbk5zQyxDQXY1U2l4QixFQTBtVDV5QixJQUFHLENBQUMsVUFBUzNFLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRDs7QUFFQTs7OztBQUdBLE9BQUl5WSxVQUFVO0FBQ2I7OztBQUdBZ08sVUFBTSxnQkFBVyxDQUFFLENBSk47O0FBTWI7Ozs7O0FBS0FxSyxTQUFNLFlBQVc7QUFDaEIsU0FBSTFPLEtBQUssQ0FBVDtBQUNBLFlBQU8sWUFBVztBQUNqQixhQUFPQSxJQUFQO0FBQ0EsTUFGRDtBQUdBLEtBTEssRUFYTzs7QUFrQmI7Ozs7OztBQU1BMUUsbUJBQWUsdUJBQVN0WSxLQUFULEVBQWdCO0FBQzlCLFlBQU9BLFVBQVUsSUFBVixJQUFrQixPQUFPQSxLQUFQLEtBQWlCLFdBQTFDO0FBQ0EsS0ExQlk7O0FBNEJiOzs7Ozs7QUFNQWdoQixhQUFTbGMsTUFBTWtjLE9BQU4sR0FBZ0JsYyxNQUFNa2MsT0FBdEIsR0FBZ0MsVUFBU2hoQixLQUFULEVBQWdCO0FBQ3hELFlBQU9rcEIsT0FBTy9vQixTQUFQLENBQWlCakIsUUFBakIsQ0FBMEJqRCxJQUExQixDQUErQitELEtBQS9CLE1BQTBDLGdCQUFqRDtBQUNBLEtBcENZOztBQXNDYjs7Ozs7O0FBTUEyNkMsY0FBVSxrQkFBUzM2QyxLQUFULEVBQWdCO0FBQ3pCLFlBQU9BLFVBQVUsSUFBVixJQUFrQmtwQixPQUFPL29CLFNBQVAsQ0FBaUJqQixRQUFqQixDQUEwQmpELElBQTFCLENBQStCK0QsS0FBL0IsTUFBMEMsaUJBQW5FO0FBQ0EsS0E5Q1k7O0FBZ0RiOzs7Ozs7QUFNQW1kLG9CQUFnQix3QkFBU25kLEtBQVQsRUFBZ0I0NkMsWUFBaEIsRUFBOEI7QUFDN0MsWUFBTyxPQUFPNTZDLEtBQVAsS0FBaUIsV0FBakIsR0FBK0I0NkMsWUFBL0IsR0FBOEM1NkMsS0FBckQ7QUFDQSxLQXhEWTs7QUEwRGI7Ozs7Ozs7QUFPQTJhLDJCQUF1QiwrQkFBUzNhLEtBQVQsRUFBZ0IrRSxLQUFoQixFQUF1QjYxQyxZQUF2QixFQUFxQztBQUMzRCxZQUFPdm5DLFFBQVE4SixjQUFSLENBQXVCOUosUUFBUTJOLE9BQVIsQ0FBZ0JoaEIsS0FBaEIsSUFBeUJBLE1BQU0rRSxLQUFOLENBQXpCLEdBQXdDL0UsS0FBL0QsRUFBc0U0NkMsWUFBdEUsQ0FBUDtBQUNBLEtBbkVZOztBQXFFYjs7Ozs7Ozs7QUFRQWh3QixjQUFVLGtCQUFTaXdCLEVBQVQsRUFBYWgyQyxJQUFiLEVBQW1CaTJDLE9BQW5CLEVBQTRCO0FBQ3JDLFNBQUlELE1BQU0sT0FBT0EsR0FBRzUrQyxJQUFWLEtBQW1CLFVBQTdCLEVBQXlDO0FBQ3hDLGFBQU80K0MsR0FBR3poQyxLQUFILENBQVMwaEMsT0FBVCxFQUFrQmoyQyxJQUFsQixDQUFQO0FBQ0E7QUFDRCxLQWpGWTs7QUFtRmI7Ozs7Ozs7OztBQVNBbVosVUFBTSxjQUFTKzhCLFFBQVQsRUFBbUJGLEVBQW5CLEVBQXVCQyxPQUF2QixFQUFnQzFhLE9BQWhDLEVBQXlDO0FBQzlDLFNBQUkza0MsQ0FBSixFQUFPczFDLEdBQVAsRUFBWXh4QixJQUFaO0FBQ0EsU0FBSWxNLFFBQVEyTixPQUFSLENBQWdCKzVCLFFBQWhCLENBQUosRUFBK0I7QUFDOUJoSyxZQUFNZ0ssU0FBUzcrQyxNQUFmO0FBQ0EsVUFBSWtrQyxPQUFKLEVBQWE7QUFDWixZQUFLM2tDLElBQUlzMUMsTUFBTSxDQUFmLEVBQWtCdDFDLEtBQUssQ0FBdkIsRUFBMEJBLEdBQTFCLEVBQStCO0FBQzlCby9DLFdBQUc1K0MsSUFBSCxDQUFRNitDLE9BQVIsRUFBaUJDLFNBQVN0L0MsQ0FBVCxDQUFqQixFQUE4QkEsQ0FBOUI7QUFDQTtBQUNELE9BSkQsTUFJTztBQUNOLFlBQUtBLElBQUksQ0FBVCxFQUFZQSxJQUFJczFDLEdBQWhCLEVBQXFCdDFDLEdBQXJCLEVBQTBCO0FBQ3pCby9DLFdBQUc1K0MsSUFBSCxDQUFRNitDLE9BQVIsRUFBaUJDLFNBQVN0L0MsQ0FBVCxDQUFqQixFQUE4QkEsQ0FBOUI7QUFDQTtBQUNEO0FBQ0QsTUFYRCxNQVdPLElBQUk0WCxRQUFRc25DLFFBQVIsQ0FBaUJJLFFBQWpCLENBQUosRUFBZ0M7QUFDdEN4N0IsYUFBTzJKLE9BQU8zSixJQUFQLENBQVl3N0IsUUFBWixDQUFQO0FBQ0FoSyxZQUFNeHhCLEtBQUtyakIsTUFBWDtBQUNBLFdBQUtULElBQUksQ0FBVCxFQUFZQSxJQUFJczFDLEdBQWhCLEVBQXFCdDFDLEdBQXJCLEVBQTBCO0FBQ3pCby9DLFVBQUc1K0MsSUFBSCxDQUFRNitDLE9BQVIsRUFBaUJDLFNBQVN4N0IsS0FBSzlqQixDQUFMLENBQVQsQ0FBakIsRUFBb0M4akIsS0FBSzlqQixDQUFMLENBQXBDO0FBQ0E7QUFDRDtBQUNELEtBaEhZOztBQWtIYjs7Ozs7OztBQU9BbzJCLGlCQUFhLHFCQUFTbXBCLEVBQVQsRUFBYUMsRUFBYixFQUFpQjtBQUM3QixTQUFJeC9DLENBQUosRUFBT21jLElBQVAsRUFBYTBvQixFQUFiLEVBQWlCQyxFQUFqQjs7QUFFQSxTQUFJLENBQUN5YSxFQUFELElBQU8sQ0FBQ0MsRUFBUixJQUFjRCxHQUFHOStDLE1BQUgsS0FBYysrQyxHQUFHLytDLE1BQW5DLEVBQTJDO0FBQzFDLGFBQU8sS0FBUDtBQUNBOztBQUVELFVBQUtULElBQUksQ0FBSixFQUFPbWMsT0FBT29qQyxHQUFHOStDLE1BQXRCLEVBQThCVCxJQUFJbWMsSUFBbEMsRUFBd0MsRUFBRW5jLENBQTFDLEVBQTZDO0FBQzVDNmtDLFdBQUswYSxHQUFHdi9DLENBQUgsQ0FBTDtBQUNBOGtDLFdBQUswYSxHQUFHeC9DLENBQUgsQ0FBTDs7QUFFQSxVQUFJNmtDLGNBQWN4N0IsS0FBZCxJQUF1Qnk3QixjQUFjejdCLEtBQXpDLEVBQWdEO0FBQy9DLFdBQUksQ0FBQ3VPLFFBQVF3ZSxXQUFSLENBQW9CeU8sRUFBcEIsRUFBd0JDLEVBQXhCLENBQUwsRUFBa0M7QUFDakMsZUFBTyxLQUFQO0FBQ0E7QUFDRCxPQUpELE1BSU8sSUFBSUQsT0FBT0MsRUFBWCxFQUFlO0FBQ3JCO0FBQ0EsY0FBTyxLQUFQO0FBQ0E7QUFDRDs7QUFFRCxZQUFPLElBQVA7QUFDQSxLQS9JWTs7QUFpSmI7Ozs7O0FBS0EzOEIsV0FBTyxlQUFTRSxNQUFULEVBQWlCO0FBQ3ZCLFNBQUl1UCxRQUFRMk4sT0FBUixDQUFnQmxkLE1BQWhCLENBQUosRUFBNkI7QUFDNUIsYUFBT0EsT0FBT2ljLEdBQVAsQ0FBVzFNLFFBQVF6UCxLQUFuQixDQUFQO0FBQ0E7O0FBRUQsU0FBSXlQLFFBQVFzbkMsUUFBUixDQUFpQjcyQyxNQUFqQixDQUFKLEVBQThCO0FBQzdCLFVBQUlDLFNBQVMsRUFBYjtBQUNBLFVBQUl3YixPQUFPMkosT0FBTzNKLElBQVAsQ0FBWXpiLE1BQVosQ0FBWDtBQUNBLFVBQUlvM0MsT0FBTzM3QixLQUFLcmpCLE1BQWhCO0FBQ0EsVUFBSThMLElBQUksQ0FBUjs7QUFFQSxhQUFPQSxJQUFJa3pDLElBQVgsRUFBaUIsRUFBRWx6QyxDQUFuQixFQUFzQjtBQUNyQmpFLGNBQU93YixLQUFLdlgsQ0FBTCxDQUFQLElBQWtCcUwsUUFBUXpQLEtBQVIsQ0FBY0UsT0FBT3liLEtBQUt2WCxDQUFMLENBQVAsQ0FBZCxDQUFsQjtBQUNBOztBQUVELGFBQU9qRSxNQUFQO0FBQ0E7O0FBRUQsWUFBT0QsTUFBUDtBQUNBLEtBektZOztBQTJLYjs7Ozs7QUFLQW14QixhQUFTLGlCQUFTemlCLEdBQVQsRUFBY3pPLE1BQWQsRUFBc0JELE1BQXRCLEVBQThCa1UsT0FBOUIsRUFBdUM7QUFDL0MsU0FBSTZjLE9BQU85d0IsT0FBT3lPLEdBQVAsQ0FBWDtBQUNBLFNBQUlzaUIsT0FBT2h4QixPQUFPME8sR0FBUCxDQUFYOztBQUVBLFNBQUlhLFFBQVFzbkMsUUFBUixDQUFpQjlsQixJQUFqQixLQUEwQnhoQixRQUFRc25DLFFBQVIsQ0FBaUI3bEIsSUFBakIsQ0FBOUIsRUFBc0Q7QUFDckR6aEIsY0FBUTRmLEtBQVIsQ0FBYzRCLElBQWQsRUFBb0JDLElBQXBCLEVBQTBCOWMsT0FBMUI7QUFDQSxNQUZELE1BRU87QUFDTmpVLGFBQU95TyxHQUFQLElBQWNhLFFBQVF6UCxLQUFSLENBQWNreEIsSUFBZCxDQUFkO0FBQ0E7QUFDRCxLQXpMWTs7QUEyTGI7Ozs7QUFJQXFtQixlQUFXLG1CQUFTM29DLEdBQVQsRUFBY3pPLE1BQWQsRUFBc0JELE1BQXRCLEVBQThCO0FBQ3hDLFNBQUkrd0IsT0FBTzl3QixPQUFPeU8sR0FBUCxDQUFYO0FBQ0EsU0FBSXNpQixPQUFPaHhCLE9BQU8wTyxHQUFQLENBQVg7O0FBRUEsU0FBSWEsUUFBUXNuQyxRQUFSLENBQWlCOWxCLElBQWpCLEtBQTBCeGhCLFFBQVFzbkMsUUFBUixDQUFpQjdsQixJQUFqQixDQUE5QixFQUFzRDtBQUNyRHpoQixjQUFRK25DLE9BQVIsQ0FBZ0J2bUIsSUFBaEIsRUFBc0JDLElBQXRCO0FBQ0EsTUFGRCxNQUVPLElBQUksQ0FBQy93QixPQUFPRyxjQUFQLENBQXNCc08sR0FBdEIsQ0FBTCxFQUFpQztBQUN2Q3pPLGFBQU95TyxHQUFQLElBQWNhLFFBQVF6UCxLQUFSLENBQWNreEIsSUFBZCxDQUFkO0FBQ0E7QUFDRCxLQXhNWTs7QUEwTWI7Ozs7Ozs7OztBQVNBN0IsV0FBTyxlQUFTbHZCLE1BQVQsRUFBaUJELE1BQWpCLEVBQXlCa1UsT0FBekIsRUFBa0M7QUFDeEMsU0FBSXFqQyxVQUFVaG9DLFFBQVEyTixPQUFSLENBQWdCbGQsTUFBaEIsSUFBMEJBLE1BQTFCLEdBQW1DLENBQUNBLE1BQUQsQ0FBakQ7QUFDQSxTQUFJOFQsT0FBT3lqQyxRQUFRbi9DLE1BQW5CO0FBQ0EsU0FBSSsyQixLQUFKLEVBQVd4M0IsQ0FBWCxFQUFjOGpCLElBQWQsRUFBb0IyN0IsSUFBcEIsRUFBMEJsekMsQ0FBMUI7O0FBRUEsU0FBSSxDQUFDcUwsUUFBUXNuQyxRQUFSLENBQWlCNTJDLE1BQWpCLENBQUwsRUFBK0I7QUFDOUIsYUFBT0EsTUFBUDtBQUNBOztBQUVEaVUsZUFBVUEsV0FBVyxFQUFyQjtBQUNBaWIsYUFBUWpiLFFBQVE0YyxNQUFSLElBQWtCdmhCLFFBQVE0aEIsT0FBbEM7O0FBRUEsVUFBS3g1QixJQUFJLENBQVQsRUFBWUEsSUFBSW1jLElBQWhCLEVBQXNCLEVBQUVuYyxDQUF4QixFQUEyQjtBQUMxQnFJLGVBQVN1M0MsUUFBUTUvQyxDQUFSLENBQVQ7QUFDQSxVQUFJLENBQUM0WCxRQUFRc25DLFFBQVIsQ0FBaUI3MkMsTUFBakIsQ0FBTCxFQUErQjtBQUM5QjtBQUNBOztBQUVEeWIsYUFBTzJKLE9BQU8zSixJQUFQLENBQVl6YixNQUFaLENBQVA7QUFDQSxXQUFLa0UsSUFBSSxDQUFKLEVBQU9rekMsT0FBTzM3QixLQUFLcmpCLE1BQXhCLEVBQWdDOEwsSUFBSWt6QyxJQUFwQyxFQUEwQyxFQUFFbHpDLENBQTVDLEVBQStDO0FBQzlDaXJCLGFBQU0xVCxLQUFLdlgsQ0FBTCxDQUFOLEVBQWVqRSxNQUFmLEVBQXVCRCxNQUF2QixFQUErQmtVLE9BQS9CO0FBQ0E7QUFDRDs7QUFFRCxZQUFPalUsTUFBUDtBQUNBLEtBNU9ZOztBQThPYjs7Ozs7OztBQU9BcTNDLGFBQVMsaUJBQVNyM0MsTUFBVCxFQUFpQkQsTUFBakIsRUFBeUI7QUFDakMsWUFBT3VQLFFBQVE0ZixLQUFSLENBQWNsdkIsTUFBZCxFQUFzQkQsTUFBdEIsRUFBOEIsRUFBQzh3QixRQUFRdmhCLFFBQVE4bkMsU0FBakIsRUFBOUIsQ0FBUDtBQUNBLEtBdlBZOztBQXlQYjs7Ozs7OztBQU9Bdm1DLFlBQVEsZ0JBQVM3USxNQUFULEVBQWlCO0FBQ3hCLFNBQUl1M0MsUUFBUSxTQUFSQSxLQUFRLENBQVN0N0MsS0FBVCxFQUFnQndTLEdBQWhCLEVBQXFCO0FBQ2hDek8sYUFBT3lPLEdBQVAsSUFBY3hTLEtBQWQ7QUFDQSxNQUZEO0FBR0EsVUFBSyxJQUFJdkUsSUFBSSxDQUFSLEVBQVdtYyxPQUFPdFgsVUFBVXBFLE1BQWpDLEVBQXlDVCxJQUFJbWMsSUFBN0MsRUFBbUQsRUFBRW5jLENBQXJELEVBQXdEO0FBQ3ZENFgsY0FBUTJLLElBQVIsQ0FBYTFkLFVBQVU3RSxDQUFWLENBQWIsRUFBMkI2L0MsS0FBM0I7QUFDQTtBQUNELFlBQU92M0MsTUFBUDtBQUNBLEtBeFFZOztBQTBRYjs7O0FBR0E2dkIsY0FBVSxrQkFBUzJuQixVQUFULEVBQXFCO0FBQzlCLFNBQUlyaUMsS0FBSyxJQUFUO0FBQ0EsU0FBSXNpQyxlQUFnQkQsY0FBY0EsV0FBV3IzQyxjQUFYLENBQTBCLGFBQTFCLENBQWYsR0FBMkRxM0MsV0FBV0UsV0FBdEUsR0FBb0YsWUFBVztBQUNqSCxhQUFPdmlDLEdBQUdFLEtBQUgsQ0FBUyxJQUFULEVBQWU5WSxTQUFmLENBQVA7QUFDQSxNQUZEOztBQUlBLFNBQUlvN0MsWUFBWSxTQUFaQSxTQUFZLEdBQVc7QUFDMUIsV0FBS0QsV0FBTCxHQUFtQkQsWUFBbkI7QUFDQSxNQUZEOztBQUlBRSxlQUFVdjdDLFNBQVYsR0FBc0IrWSxHQUFHL1ksU0FBekI7QUFDQXE3QyxrQkFBYXI3QyxTQUFiLEdBQXlCLElBQUl1N0MsU0FBSixFQUF6QjtBQUNBRixrQkFBYTVtQyxNQUFiLEdBQXNCdkIsUUFBUXVnQixRQUE5Qjs7QUFFQSxTQUFJMm5CLFVBQUosRUFBZ0I7QUFDZmxvQyxjQUFRdUIsTUFBUixDQUFlNG1DLGFBQWFyN0MsU0FBNUIsRUFBdUNvN0MsVUFBdkM7QUFDQTs7QUFFREMsa0JBQWFHLFNBQWIsR0FBeUJ6aUMsR0FBRy9ZLFNBQTVCO0FBQ0EsWUFBT3E3QyxZQUFQO0FBQ0E7QUFqU1ksSUFBZDs7QUFvU0EzZ0QsVUFBT0QsT0FBUCxHQUFpQnlZLE9BQWpCOztBQUVBOztBQUVBOzs7Ozs7O0FBT0FBLFdBQVF1b0MsWUFBUixHQUF1QnZvQyxRQUFRdVgsUUFBL0I7O0FBRUE7Ozs7Ozs7O0FBUUF2WCxXQUFRZ0osT0FBUixHQUFrQixVQUFTNFYsS0FBVCxFQUFnQnZiLElBQWhCLEVBQXNCbWxDLFNBQXRCLEVBQWlDO0FBQ2xELFdBQU8vMkMsTUFBTTNFLFNBQU4sQ0FBZ0JrYyxPQUFoQixDQUF3QnBnQixJQUF4QixDQUE2QmcyQixLQUE3QixFQUFvQ3ZiLElBQXBDLEVBQTBDbWxDLFNBQTFDLENBQVA7QUFDQSxJQUZEOztBQUlBOzs7Ozs7O0FBT0F4b0MsV0FBUXlvQyxpQkFBUixHQUE0QnpvQyxRQUFROEosY0FBcEM7O0FBRUE7Ozs7Ozs7QUFPQTlKLFdBQVEwb0Msd0JBQVIsR0FBbUMxb0MsUUFBUXNILHFCQUEzQztBQUVDLEdBclZlLEVBcVZkLEVBclZjLENBMW1UeXlCLEVBKzdUbnpCLElBQUcsQ0FBQyxVQUFTaGYsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQzFDOztBQUVBLE9BQUl5WSxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7O0FBRUE7Ozs7O0FBS0EsT0FBSXN6QixVQUFVO0FBQ2IrZSxZQUFRLGdCQUFTenlDLENBQVQsRUFBWTtBQUNuQixZQUFPQSxDQUFQO0FBQ0EsS0FIWTs7QUFLYnlnRCxnQkFBWSxvQkFBU3pnRCxDQUFULEVBQVk7QUFDdkIsWUFBT0EsSUFBSUEsQ0FBWDtBQUNBLEtBUFk7O0FBU2IwZ0QsaUJBQWEscUJBQVMxZ0QsQ0FBVCxFQUFZO0FBQ3hCLFlBQU8sQ0FBQ0EsQ0FBRCxJQUFNQSxJQUFJLENBQVYsQ0FBUDtBQUNBLEtBWFk7O0FBYWIyZ0QsbUJBQWUsdUJBQVMzZ0QsQ0FBVCxFQUFZO0FBQzFCLFNBQUksQ0FBQ0EsS0FBSyxHQUFOLElBQWEsQ0FBakIsRUFBb0I7QUFDbkIsYUFBTyxNQUFNQSxDQUFOLEdBQVVBLENBQWpCO0FBQ0E7QUFDRCxZQUFPLENBQUMsR0FBRCxJQUFTLEVBQUVBLENBQUgsSUFBU0EsSUFBSSxDQUFiLElBQWtCLENBQTFCLENBQVA7QUFDQSxLQWxCWTs7QUFvQmI0Z0QsaUJBQWEscUJBQVM1Z0QsQ0FBVCxFQUFZO0FBQ3hCLFlBQU9BLElBQUlBLENBQUosR0FBUUEsQ0FBZjtBQUNBLEtBdEJZOztBQXdCYjZnRCxrQkFBYyxzQkFBUzdnRCxDQUFULEVBQVk7QUFDekIsWUFBTyxDQUFDQSxJQUFJQSxJQUFJLENBQVQsSUFBY0EsQ0FBZCxHQUFrQkEsQ0FBbEIsR0FBc0IsQ0FBN0I7QUFDQSxLQTFCWTs7QUE0QmI4Z0Qsb0JBQWdCLHdCQUFTOWdELENBQVQsRUFBWTtBQUMzQixTQUFJLENBQUNBLEtBQUssR0FBTixJQUFhLENBQWpCLEVBQW9CO0FBQ25CLGFBQU8sTUFBTUEsQ0FBTixHQUFVQSxDQUFWLEdBQWNBLENBQXJCO0FBQ0E7QUFDRCxZQUFPLE9BQU8sQ0FBQ0EsS0FBSyxDQUFOLElBQVdBLENBQVgsR0FBZUEsQ0FBZixHQUFtQixDQUExQixDQUFQO0FBQ0EsS0FqQ1k7O0FBbUNiK2dELGlCQUFhLHFCQUFTL2dELENBQVQsRUFBWTtBQUN4QixZQUFPQSxJQUFJQSxDQUFKLEdBQVFBLENBQVIsR0FBWUEsQ0FBbkI7QUFDQSxLQXJDWTs7QUF1Q2JnaEQsa0JBQWMsc0JBQVNoaEQsQ0FBVCxFQUFZO0FBQ3pCLFlBQU8sRUFBRSxDQUFDQSxJQUFJQSxJQUFJLENBQVQsSUFBY0EsQ0FBZCxHQUFrQkEsQ0FBbEIsR0FBc0JBLENBQXRCLEdBQTBCLENBQTVCLENBQVA7QUFDQSxLQXpDWTs7QUEyQ2JpaEQsb0JBQWdCLHdCQUFTamhELENBQVQsRUFBWTtBQUMzQixTQUFJLENBQUNBLEtBQUssR0FBTixJQUFhLENBQWpCLEVBQW9CO0FBQ25CLGFBQU8sTUFBTUEsQ0FBTixHQUFVQSxDQUFWLEdBQWNBLENBQWQsR0FBa0JBLENBQXpCO0FBQ0E7QUFDRCxZQUFPLENBQUMsR0FBRCxJQUFRLENBQUNBLEtBQUssQ0FBTixJQUFXQSxDQUFYLEdBQWVBLENBQWYsR0FBbUJBLENBQW5CLEdBQXVCLENBQS9CLENBQVA7QUFDQSxLQWhEWTs7QUFrRGJraEQsaUJBQWEscUJBQVNsaEQsQ0FBVCxFQUFZO0FBQ3hCLFlBQU9BLElBQUlBLENBQUosR0FBUUEsQ0FBUixHQUFZQSxDQUFaLEdBQWdCQSxDQUF2QjtBQUNBLEtBcERZOztBQXNEYm1oRCxrQkFBYyxzQkFBU25oRCxDQUFULEVBQVk7QUFDekIsWUFBTyxDQUFDQSxJQUFJQSxJQUFJLENBQVQsSUFBY0EsQ0FBZCxHQUFrQkEsQ0FBbEIsR0FBc0JBLENBQXRCLEdBQTBCQSxDQUExQixHQUE4QixDQUFyQztBQUNBLEtBeERZOztBQTBEYm9oRCxvQkFBZ0Isd0JBQVNwaEQsQ0FBVCxFQUFZO0FBQzNCLFNBQUksQ0FBQ0EsS0FBSyxHQUFOLElBQWEsQ0FBakIsRUFBb0I7QUFDbkIsYUFBTyxNQUFNQSxDQUFOLEdBQVVBLENBQVYsR0FBY0EsQ0FBZCxHQUFrQkEsQ0FBbEIsR0FBc0JBLENBQTdCO0FBQ0E7QUFDRCxZQUFPLE9BQU8sQ0FBQ0EsS0FBSyxDQUFOLElBQVdBLENBQVgsR0FBZUEsQ0FBZixHQUFtQkEsQ0FBbkIsR0FBdUJBLENBQXZCLEdBQTJCLENBQWxDLENBQVA7QUFDQSxLQS9EWTs7QUFpRWJxaEQsZ0JBQVksb0JBQVNyaEQsQ0FBVCxFQUFZO0FBQ3ZCLFlBQU8sQ0FBQ3NDLEtBQUsyTCxHQUFMLENBQVNqTyxLQUFLc0MsS0FBS3dMLEVBQUwsR0FBVSxDQUFmLENBQVQsQ0FBRCxHQUErQixDQUF0QztBQUNBLEtBbkVZOztBQXFFYnd6QyxpQkFBYSxxQkFBU3RoRCxDQUFULEVBQVk7QUFDeEIsWUFBT3NDLEtBQUs0TCxHQUFMLENBQVNsTyxLQUFLc0MsS0FBS3dMLEVBQUwsR0FBVSxDQUFmLENBQVQsQ0FBUDtBQUNBLEtBdkVZOztBQXlFYnl6QyxtQkFBZSx1QkFBU3ZoRCxDQUFULEVBQVk7QUFDMUIsWUFBTyxDQUFDLEdBQUQsSUFBUXNDLEtBQUsyTCxHQUFMLENBQVMzTCxLQUFLd0wsRUFBTCxHQUFVOU4sQ0FBbkIsSUFBd0IsQ0FBaEMsQ0FBUDtBQUNBLEtBM0VZOztBQTZFYndoRCxnQkFBWSxvQkFBU3hoRCxDQUFULEVBQVk7QUFDdkIsWUFBUUEsTUFBTSxDQUFQLEdBQVksQ0FBWixHQUFnQnNDLEtBQUtpRSxHQUFMLENBQVMsQ0FBVCxFQUFZLE1BQU12RyxJQUFJLENBQVYsQ0FBWixDQUF2QjtBQUNBLEtBL0VZOztBQWlGYnloRCxpQkFBYSxxQkFBU3poRCxDQUFULEVBQVk7QUFDeEIsWUFBUUEsTUFBTSxDQUFQLEdBQVksQ0FBWixHQUFnQixDQUFDc0MsS0FBS2lFLEdBQUwsQ0FBUyxDQUFULEVBQVksQ0FBQyxFQUFELEdBQU12RyxDQUFsQixDQUFELEdBQXdCLENBQS9DO0FBQ0EsS0FuRlk7O0FBcUZiMGhELG1CQUFlLHVCQUFTMWhELENBQVQsRUFBWTtBQUMxQixTQUFJQSxNQUFNLENBQVYsRUFBYTtBQUNaLGFBQU8sQ0FBUDtBQUNBO0FBQ0QsU0FBSUEsTUFBTSxDQUFWLEVBQWE7QUFDWixhQUFPLENBQVA7QUFDQTtBQUNELFNBQUksQ0FBQ0EsS0FBSyxHQUFOLElBQWEsQ0FBakIsRUFBb0I7QUFDbkIsYUFBTyxNQUFNc0MsS0FBS2lFLEdBQUwsQ0FBUyxDQUFULEVBQVksTUFBTXZHLElBQUksQ0FBVixDQUFaLENBQWI7QUFDQTtBQUNELFlBQU8sT0FBTyxDQUFDc0MsS0FBS2lFLEdBQUwsQ0FBUyxDQUFULEVBQVksQ0FBQyxFQUFELEdBQU0sRUFBRXZHLENBQXBCLENBQUQsR0FBMEIsQ0FBakMsQ0FBUDtBQUNBLEtBaEdZOztBQWtHYjJoRCxnQkFBWSxvQkFBUzNoRCxDQUFULEVBQVk7QUFDdkIsU0FBSUEsS0FBSyxDQUFULEVBQVk7QUFDWCxhQUFPQSxDQUFQO0FBQ0E7QUFDRCxZQUFPLEVBQUVzQyxLQUFLeUwsSUFBTCxDQUFVLElBQUkvTixJQUFJQSxDQUFsQixJQUF1QixDQUF6QixDQUFQO0FBQ0EsS0F2R1k7O0FBeUdiNGhELGlCQUFhLHFCQUFTNWhELENBQVQsRUFBWTtBQUN4QixZQUFPc0MsS0FBS3lMLElBQUwsQ0FBVSxJQUFJLENBQUMvTixJQUFJQSxJQUFJLENBQVQsSUFBY0EsQ0FBNUIsQ0FBUDtBQUNBLEtBM0dZOztBQTZHYjZoRCxtQkFBZSx1QkFBUzdoRCxDQUFULEVBQVk7QUFDMUIsU0FBSSxDQUFDQSxLQUFLLEdBQU4sSUFBYSxDQUFqQixFQUFvQjtBQUNuQixhQUFPLENBQUMsR0FBRCxJQUFRc0MsS0FBS3lMLElBQUwsQ0FBVSxJQUFJL04sSUFBSUEsQ0FBbEIsSUFBdUIsQ0FBL0IsQ0FBUDtBQUNBO0FBQ0QsWUFBTyxPQUFPc0MsS0FBS3lMLElBQUwsQ0FBVSxJQUFJLENBQUMvTixLQUFLLENBQU4sSUFBV0EsQ0FBekIsSUFBOEIsQ0FBckMsQ0FBUDtBQUNBLEtBbEhZOztBQW9IYjhoRCxtQkFBZSx1QkFBUzloRCxDQUFULEVBQVk7QUFDMUIsU0FBSTRDLElBQUksT0FBUjtBQUNBLFNBQUluQyxJQUFJLENBQVI7QUFDQSxTQUFJSCxJQUFJLENBQVI7QUFDQSxTQUFJTixNQUFNLENBQVYsRUFBYTtBQUNaLGFBQU8sQ0FBUDtBQUNBO0FBQ0QsU0FBSUEsTUFBTSxDQUFWLEVBQWE7QUFDWixhQUFPLENBQVA7QUFDQTtBQUNELFNBQUksQ0FBQ1MsQ0FBTCxFQUFRO0FBQ1BBLFVBQUksR0FBSjtBQUNBO0FBQ0QsU0FBSUgsSUFBSSxDQUFSLEVBQVc7QUFDVkEsVUFBSSxDQUFKO0FBQ0FzQyxVQUFJbkMsSUFBSSxDQUFSO0FBQ0EsTUFIRCxNQUdPO0FBQ05tQyxVQUFJbkMsS0FBSyxJQUFJNkIsS0FBS3dMLEVBQWQsSUFBb0J4TCxLQUFLeS9DLElBQUwsQ0FBVSxJQUFJemhELENBQWQsQ0FBeEI7QUFDQTtBQUNELFlBQU8sRUFBRUEsSUFBSWdDLEtBQUtpRSxHQUFMLENBQVMsQ0FBVCxFQUFZLE1BQU12RyxLQUFLLENBQVgsQ0FBWixDQUFKLEdBQWlDc0MsS0FBSzRMLEdBQUwsQ0FBUyxDQUFDbE8sSUFBSTRDLENBQUwsS0FBVyxJQUFJTixLQUFLd0wsRUFBcEIsSUFBMEJyTixDQUFuQyxDQUFuQyxDQUFQO0FBQ0EsS0F4SVk7O0FBMElidWhELG9CQUFnQix3QkFBU2hpRCxDQUFULEVBQVk7QUFDM0IsU0FBSTRDLElBQUksT0FBUjtBQUNBLFNBQUluQyxJQUFJLENBQVI7QUFDQSxTQUFJSCxJQUFJLENBQVI7QUFDQSxTQUFJTixNQUFNLENBQVYsRUFBYTtBQUNaLGFBQU8sQ0FBUDtBQUNBO0FBQ0QsU0FBSUEsTUFBTSxDQUFWLEVBQWE7QUFDWixhQUFPLENBQVA7QUFDQTtBQUNELFNBQUksQ0FBQ1MsQ0FBTCxFQUFRO0FBQ1BBLFVBQUksR0FBSjtBQUNBO0FBQ0QsU0FBSUgsSUFBSSxDQUFSLEVBQVc7QUFDVkEsVUFBSSxDQUFKO0FBQ0FzQyxVQUFJbkMsSUFBSSxDQUFSO0FBQ0EsTUFIRCxNQUdPO0FBQ05tQyxVQUFJbkMsS0FBSyxJQUFJNkIsS0FBS3dMLEVBQWQsSUFBb0J4TCxLQUFLeS9DLElBQUwsQ0FBVSxJQUFJemhELENBQWQsQ0FBeEI7QUFDQTtBQUNELFlBQU9BLElBQUlnQyxLQUFLaUUsR0FBTCxDQUFTLENBQVQsRUFBWSxDQUFDLEVBQUQsR0FBTXZHLENBQWxCLENBQUosR0FBMkJzQyxLQUFLNEwsR0FBTCxDQUFTLENBQUNsTyxJQUFJNEMsQ0FBTCxLQUFXLElBQUlOLEtBQUt3TCxFQUFwQixJQUEwQnJOLENBQW5DLENBQTNCLEdBQW1FLENBQTFFO0FBQ0EsS0E5Slk7O0FBZ0tid2hELHNCQUFrQiwwQkFBU2ppRCxDQUFULEVBQVk7QUFDN0IsU0FBSTRDLElBQUksT0FBUjtBQUNBLFNBQUluQyxJQUFJLENBQVI7QUFDQSxTQUFJSCxJQUFJLENBQVI7QUFDQSxTQUFJTixNQUFNLENBQVYsRUFBYTtBQUNaLGFBQU8sQ0FBUDtBQUNBO0FBQ0QsU0FBSSxDQUFDQSxLQUFLLEdBQU4sTUFBZSxDQUFuQixFQUFzQjtBQUNyQixhQUFPLENBQVA7QUFDQTtBQUNELFNBQUksQ0FBQ1MsQ0FBTCxFQUFRO0FBQ1BBLFVBQUksSUFBSjtBQUNBO0FBQ0QsU0FBSUgsSUFBSSxDQUFSLEVBQVc7QUFDVkEsVUFBSSxDQUFKO0FBQ0FzQyxVQUFJbkMsSUFBSSxDQUFSO0FBQ0EsTUFIRCxNQUdPO0FBQ05tQyxVQUFJbkMsS0FBSyxJQUFJNkIsS0FBS3dMLEVBQWQsSUFBb0J4TCxLQUFLeS9DLElBQUwsQ0FBVSxJQUFJemhELENBQWQsQ0FBeEI7QUFDQTtBQUNELFNBQUlOLElBQUksQ0FBUixFQUFXO0FBQ1YsYUFBTyxDQUFDLEdBQUQsSUFBUU0sSUFBSWdDLEtBQUtpRSxHQUFMLENBQVMsQ0FBVCxFQUFZLE1BQU12RyxLQUFLLENBQVgsQ0FBWixDQUFKLEdBQWlDc0MsS0FBSzRMLEdBQUwsQ0FBUyxDQUFDbE8sSUFBSTRDLENBQUwsS0FBVyxJQUFJTixLQUFLd0wsRUFBcEIsSUFBMEJyTixDQUFuQyxDQUF6QyxDQUFQO0FBQ0E7QUFDRCxZQUFPSCxJQUFJZ0MsS0FBS2lFLEdBQUwsQ0FBUyxDQUFULEVBQVksQ0FBQyxFQUFELElBQU92RyxLQUFLLENBQVosQ0FBWixDQUFKLEdBQWtDc0MsS0FBSzRMLEdBQUwsQ0FBUyxDQUFDbE8sSUFBSTRDLENBQUwsS0FBVyxJQUFJTixLQUFLd0wsRUFBcEIsSUFBMEJyTixDQUFuQyxDQUFsQyxHQUEwRSxHQUExRSxHQUFnRixDQUF2RjtBQUNBLEtBdkxZO0FBd0xieWhELGdCQUFZLG9CQUFTbGlELENBQVQsRUFBWTtBQUN2QixTQUFJNEMsSUFBSSxPQUFSO0FBQ0EsWUFBTzVDLElBQUlBLENBQUosSUFBUyxDQUFDNEMsSUFBSSxDQUFMLElBQVU1QyxDQUFWLEdBQWM0QyxDQUF2QixDQUFQO0FBQ0EsS0EzTFk7O0FBNkxidS9DLGlCQUFhLHFCQUFTbmlELENBQVQsRUFBWTtBQUN4QixTQUFJNEMsSUFBSSxPQUFSO0FBQ0EsWUFBTyxDQUFDNUMsSUFBSUEsSUFBSSxDQUFULElBQWNBLENBQWQsSUFBbUIsQ0FBQzRDLElBQUksQ0FBTCxJQUFVNUMsQ0FBVixHQUFjNEMsQ0FBakMsSUFBc0MsQ0FBN0M7QUFDQSxLQWhNWTs7QUFrTWJ3L0MsbUJBQWUsdUJBQVNwaUQsQ0FBVCxFQUFZO0FBQzFCLFNBQUk0QyxJQUFJLE9BQVI7QUFDQSxTQUFJLENBQUM1QyxLQUFLLEdBQU4sSUFBYSxDQUFqQixFQUFvQjtBQUNuQixhQUFPLE9BQU9BLElBQUlBLENBQUosSUFBUyxDQUFDLENBQUM0QyxLQUFNLEtBQVAsSUFBaUIsQ0FBbEIsSUFBdUI1QyxDQUF2QixHQUEyQjRDLENBQXBDLENBQVAsQ0FBUDtBQUNBO0FBQ0QsWUFBTyxPQUFPLENBQUM1QyxLQUFLLENBQU4sSUFBV0EsQ0FBWCxJQUFnQixDQUFDLENBQUM0QyxLQUFNLEtBQVAsSUFBaUIsQ0FBbEIsSUFBdUI1QyxDQUF2QixHQUEyQjRDLENBQTNDLElBQWdELENBQXZELENBQVA7QUFDQSxLQXhNWTs7QUEwTWJ5L0Msa0JBQWMsc0JBQVNyaUQsQ0FBVCxFQUFZO0FBQ3pCLFlBQU8sSUFBSTB6QixRQUFRNHVCLGFBQVIsQ0FBc0IsSUFBSXRpRCxDQUExQixDQUFYO0FBQ0EsS0E1TVk7O0FBOE1ic2lELG1CQUFlLHVCQUFTdGlELENBQVQsRUFBWTtBQUMxQixTQUFJQSxJQUFLLElBQUksSUFBYixFQUFvQjtBQUNuQixhQUFPLFNBQVNBLENBQVQsR0FBYUEsQ0FBcEI7QUFDQTtBQUNELFNBQUlBLElBQUssSUFBSSxJQUFiLEVBQW9CO0FBQ25CLGFBQU8sVUFBVUEsS0FBTSxNQUFNLElBQXRCLElBQStCQSxDQUEvQixHQUFtQyxJQUExQztBQUNBO0FBQ0QsU0FBSUEsSUFBSyxNQUFNLElBQWYsRUFBc0I7QUFDckIsYUFBTyxVQUFVQSxLQUFNLE9BQU8sSUFBdkIsSUFBZ0NBLENBQWhDLEdBQW9DLE1BQTNDO0FBQ0E7QUFDRCxZQUFPLFVBQVVBLEtBQU0sUUFBUSxJQUF4QixJQUFpQ0EsQ0FBakMsR0FBcUMsUUFBNUM7QUFDQSxLQXpOWTs7QUEyTmJ1aUQscUJBQWlCLHlCQUFTdmlELENBQVQsRUFBWTtBQUM1QixTQUFJQSxJQUFJLEdBQVIsRUFBYTtBQUNaLGFBQU8wekIsUUFBUTJ1QixZQUFSLENBQXFCcmlELElBQUksQ0FBekIsSUFBOEIsR0FBckM7QUFDQTtBQUNELFlBQU8wekIsUUFBUTR1QixhQUFSLENBQXNCdGlELElBQUksQ0FBSixHQUFRLENBQTlCLElBQW1DLEdBQW5DLEdBQXlDLEdBQWhEO0FBQ0E7QUFoT1ksSUFBZDs7QUFtT0FWLFVBQU9ELE9BQVAsR0FBaUI7QUFDaEJxMEIsYUFBU0E7QUFETyxJQUFqQjs7QUFJQTs7QUFFQTs7Ozs7OztBQU9BNWIsV0FBUTBxQyxhQUFSLEdBQXdCOXVCLE9BQXhCO0FBRUMsR0E1UFEsRUE0UFAsRUFBQyxNQUFLLEVBQU4sRUE1UE8sQ0EvN1RnekIsRUEyclU1eUIsSUFBRyxDQUFDLFVBQVN0ekIsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ2pEOztBQUVBLE9BQUl5WSxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7O0FBRUE7Ozs7QUFJQWQsVUFBT0QsT0FBUCxHQUFpQjtBQUNoQjs7Ozs7Ozs7QUFRQXFyQyxrQkFBYyxzQkFBU2ptQyxLQUFULEVBQWdCcVksSUFBaEIsRUFBc0I7QUFDbkMsU0FBSTJsQyxVQUFVLENBQUMsS0FBS2grQyxLQUFOLEVBQWF2QyxLQUFiLENBQW1CLHNDQUFuQixDQUFkO0FBQ0EsU0FBSSxDQUFDdWdELE9BQUQsSUFBWUEsUUFBUSxDQUFSLE1BQWUsUUFBL0IsRUFBeUM7QUFDeEMsYUFBTzNsQyxPQUFPLEdBQWQ7QUFDQTs7QUFFRHJZLGFBQVEsQ0FBQ2crQyxRQUFRLENBQVIsQ0FBVDs7QUFFQSxhQUFRQSxRQUFRLENBQVIsQ0FBUjtBQUNBLFdBQUssSUFBTDtBQUNDLGNBQU9oK0MsS0FBUDtBQUNELFdBQUssR0FBTDtBQUNDQSxnQkFBUyxHQUFUO0FBQ0E7QUFDRDtBQUNDO0FBUEQ7O0FBVUEsWUFBT3FZLE9BQU9yWSxLQUFkO0FBQ0EsS0E1QmU7O0FBOEJoQjs7Ozs7OztBQU9BOGdDLGVBQVcsbUJBQVM5Z0MsS0FBVCxFQUFnQjtBQUMxQixTQUFJekUsQ0FBSixFQUFPSCxDQUFQLEVBQVVvRCxDQUFWLEVBQWFKLENBQWI7O0FBRUEsU0FBSWlWLFFBQVFzbkMsUUFBUixDQUFpQjM2QyxLQUFqQixDQUFKLEVBQTZCO0FBQzVCekUsVUFBSSxDQUFDeUUsTUFBTTBjLEdBQVAsSUFBYyxDQUFsQjtBQUNBdGhCLFVBQUksQ0FBQzRFLE1BQU0yaEIsS0FBUCxJQUFnQixDQUFwQjtBQUNBbmpCLFVBQUksQ0FBQ3dCLE1BQU02aEIsTUFBUCxJQUFpQixDQUFyQjtBQUNBempCLFVBQUksQ0FBQzRCLE1BQU15YyxJQUFQLElBQWUsQ0FBbkI7QUFDQSxNQUxELE1BS087QUFDTmxoQixVQUFJSCxJQUFJb0QsSUFBSUosSUFBSSxDQUFDNEIsS0FBRCxJQUFVLENBQTFCO0FBQ0E7O0FBRUQsWUFBTztBQUNOMGMsV0FBS25oQixDQURDO0FBRU5vbUIsYUFBT3ZtQixDQUZEO0FBR055bUIsY0FBUXJqQixDQUhGO0FBSU5pZSxZQUFNcmUsQ0FKQTtBQUtObVosY0FBUWhjLElBQUlpRCxDQUxOO0FBTU44WSxhQUFPbFosSUFBSWhEO0FBTkwsTUFBUDtBQVFBLEtBekRlOztBQTJEaEI7Ozs7Ozs7OztBQVNBaWtCLGFBQVMsaUJBQVM0K0IsTUFBVCxFQUFpQmhwQyxPQUFqQixFQUEwQmxRLEtBQTFCLEVBQWlDO0FBQ3pDLFNBQUl0SixDQUFKLEVBQU9tYyxJQUFQLEVBQWE1WCxLQUFiOztBQUVBLFVBQUt2RSxJQUFJLENBQUosRUFBT21jLE9BQU9xbUMsT0FBTy9oRCxNQUExQixFQUFrQ1QsSUFBSW1jLElBQXRDLEVBQTRDLEVBQUVuYyxDQUE5QyxFQUFpRDtBQUNoRHVFLGNBQVFpK0MsT0FBT3hpRCxDQUFQLENBQVI7QUFDQSxVQUFJdUUsVUFBVXBCLFNBQWQsRUFBeUI7QUFDeEI7QUFDQTtBQUNELFVBQUlxVyxZQUFZclcsU0FBWixJQUF5QixPQUFPb0IsS0FBUCxLQUFpQixVQUE5QyxFQUEwRDtBQUN6REEsZUFBUUEsTUFBTWlWLE9BQU4sQ0FBUjtBQUNBO0FBQ0QsVUFBSWxRLFVBQVVuRyxTQUFWLElBQXVCeVUsUUFBUTJOLE9BQVIsQ0FBZ0JoaEIsS0FBaEIsQ0FBM0IsRUFBbUQ7QUFDbERBLGVBQVFBLE1BQU0rRSxLQUFOLENBQVI7QUFDQTtBQUNELFVBQUkvRSxVQUFVcEIsU0FBZCxFQUF5QjtBQUN4QixjQUFPb0IsS0FBUDtBQUNBO0FBQ0Q7QUFDRDtBQXRGZSxJQUFqQjtBQXlGQyxHQWxHZSxFQWtHZCxFQUFDLE1BQUssRUFBTixFQWxHYyxDQTNyVXl5QixFQTZ4VTV5QixJQUFHLENBQUMsVUFBU3JFLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRDs7QUFFQUMsVUFBT0QsT0FBUCxHQUFpQmUsUUFBUSxFQUFSLENBQWpCO0FBQ0FkLFVBQU9ELE9BQVAsQ0FBZWt1QixNQUFmLEdBQXdCbnRCLFFBQVEsRUFBUixDQUF4QjtBQUNBZCxVQUFPRCxPQUFQLENBQWVrYSxNQUFmLEdBQXdCblosUUFBUSxFQUFSLENBQXhCO0FBQ0FkLFVBQU9ELE9BQVAsQ0FBZW9kLE9BQWYsR0FBeUJyYyxRQUFRLEVBQVIsQ0FBekI7QUFFQyxHQVJlLEVBUWQsRUFBQyxNQUFLLEVBQU4sRUFBUyxNQUFLLEVBQWQsRUFBaUIsTUFBSyxFQUF0QixFQUF5QixNQUFLLEVBQTlCLEVBUmMsQ0E3eFV5eUIsRUFxeVVweEIsSUFBRyxDQUFDLFVBQVNBLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUN6RTs7Ozs7QUFLQUMsVUFBT0QsT0FBUCxHQUFpQjtBQUNoQjZ3QixvQkFBZ0Isd0JBQVMvVSxJQUFULEVBQWU7QUFDOUIsU0FBSUEsUUFBUUEsS0FBSzVCLE1BQWpCLEVBQXlCO0FBQ3hCO0FBQ0E0QixhQUFPQSxLQUFLNUIsTUFBWjtBQUNBOztBQUVELFlBQU80QixRQUFRQSxLQUFLd25DLFVBQUwsQ0FBZ0IsSUFBaEIsQ0FBUixJQUFpQyxJQUF4QztBQUNBO0FBUmUsSUFBakI7QUFXQyxHQWpCdUMsRUFpQnRDLEVBakJzQyxDQXJ5VWl4QixFQXN6VW56QixJQUFHLENBQUMsVUFBU3ZpRCxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDMUM7Ozs7QUFJQTs7QUFFQSxPQUFJeVksVUFBVTFYLFFBQVEsRUFBUixDQUFkOztBQUVBLE9BQUl3aUQsY0FBYyxVQUFsQjtBQUNBLE9BQUlDLGFBQWEsVUFBakI7QUFDQSxPQUFJQyxxQkFBcUJELGFBQWEsZ0JBQXRDO0FBQ0EsT0FBSUUsdUJBQXVCRixhQUFhLGtCQUF4QztBQUNBLE9BQUlHLHlCQUF5QixDQUFDLGdCQUFELEVBQW1CLHNCQUFuQixDQUE3Qjs7QUFFQTs7Ozs7QUFLQSxPQUFJQyxjQUFjO0FBQ2pCQyxnQkFBWSxXQURLO0FBRWpCQyxlQUFXLFdBRk07QUFHakJDLGNBQVUsU0FITztBQUlqQkMsa0JBQWMsWUFKRztBQUtqQkMsaUJBQWEsV0FMSTtBQU1qQkMsaUJBQWEsV0FOSTtBQU9qQkMsZUFBVyxTQVBNO0FBUWpCQyxrQkFBYyxVQVJHO0FBU2pCQyxnQkFBWTtBQVRLLElBQWxCOztBQVlBOzs7Ozs7Ozs7QUFTQSxZQUFTQyxZQUFULENBQXNCOTdCLE9BQXRCLEVBQStCc1osUUFBL0IsRUFBeUM7QUFDeEMsUUFBSTE4QixRQUFRcVQsUUFBUSttQixRQUFSLENBQWlCaFgsT0FBakIsRUFBMEJzWixRQUExQixDQUFaO0FBQ0EsUUFBSXNoQixVQUFVaCtDLFNBQVNBLE1BQU12QyxLQUFOLENBQVksbUJBQVosQ0FBdkI7QUFDQSxXQUFPdWdELFVBQVVwNEIsT0FBT280QixRQUFRLENBQVIsQ0FBUCxDQUFWLEdBQStCcC9DLFNBQXRDO0FBQ0E7O0FBRUQ7Ozs7O0FBS0EsWUFBU3VnRCxVQUFULENBQW9CcnFDLE1BQXBCLEVBQTRCSSxNQUE1QixFQUFvQztBQUNuQyxRQUFJMFgsUUFBUTlYLE9BQU84WCxLQUFuQjs7QUFFQTtBQUNBO0FBQ0EsUUFBSXd5QixlQUFldHFDLE9BQU91cUMsWUFBUCxDQUFvQixRQUFwQixDQUFuQjtBQUNBLFFBQUlDLGNBQWN4cUMsT0FBT3VxQyxZQUFQLENBQW9CLE9BQXBCLENBQWxCOztBQUVBO0FBQ0F2cUMsV0FBT3FwQyxXQUFQLElBQXNCO0FBQ3JCb0IsY0FBUztBQUNSaG9DLGNBQVE2bkMsWUFEQTtBQUVSOW5DLGFBQU9nb0MsV0FGQztBQUdSMXlCLGFBQU87QUFDTnpGLGdCQUFTeUYsTUFBTXpGLE9BRFQ7QUFFTjVQLGVBQVFxVixNQUFNclYsTUFGUjtBQUdORCxjQUFPc1YsTUFBTXRWO0FBSFA7QUFIQztBQURZLEtBQXRCOztBQVlBO0FBQ0E7QUFDQTtBQUNBc1YsVUFBTXpGLE9BQU4sR0FBZ0J5RixNQUFNekYsT0FBTixJQUFpQixPQUFqQzs7QUFFQSxRQUFJbTRCLGdCQUFnQixJQUFoQixJQUF3QkEsZ0JBQWdCLEVBQTVDLEVBQWdEO0FBQy9DLFNBQUlFLGVBQWVOLGFBQWFwcUMsTUFBYixFQUFxQixPQUFyQixDQUFuQjtBQUNBLFNBQUkwcUMsaUJBQWlCNWdELFNBQXJCLEVBQWdDO0FBQy9Ca1csYUFBT3dDLEtBQVAsR0FBZWtvQyxZQUFmO0FBQ0E7QUFDRDs7QUFFRCxRQUFJSixpQkFBaUIsSUFBakIsSUFBeUJBLGlCQUFpQixFQUE5QyxFQUFrRDtBQUNqRCxTQUFJdHFDLE9BQU84WCxLQUFQLENBQWFyVixNQUFiLEtBQXdCLEVBQTVCLEVBQWdDO0FBQy9CO0FBQ0E7QUFDQTtBQUNBekMsYUFBT3lDLE1BQVAsR0FBZ0J6QyxPQUFPd0MsS0FBUCxJQUFnQnBDLE9BQU84QyxPQUFQLENBQWUyVCxXQUFmLElBQThCLENBQTlDLENBQWhCO0FBQ0EsTUFMRCxNQUtPO0FBQ04sVUFBSTh6QixnQkFBZ0JQLGFBQWFwcUMsTUFBYixFQUFxQixRQUFyQixDQUFwQjtBQUNBLFVBQUkwcUMsaUJBQWlCNWdELFNBQXJCLEVBQWdDO0FBQy9Ca1csY0FBT3lDLE1BQVAsR0FBZ0Jrb0MsYUFBaEI7QUFDQTtBQUNEO0FBQ0Q7O0FBRUQsV0FBTzNxQyxNQUFQO0FBQ0E7O0FBRUQ7Ozs7O0FBS0EsT0FBSTRxQywrQkFBZ0MsWUFBVztBQUM5QyxRQUFJQyxXQUFXLEtBQWY7QUFDQSxRQUFJO0FBQ0gsU0FBSTNuQyxVQUFVa1IsT0FBT0MsY0FBUCxDQUFzQixFQUF0QixFQUEwQixTQUExQixFQUFxQztBQUNsREMsV0FBSyxlQUFXO0FBQ2Z1MkIsa0JBQVcsSUFBWDtBQUNBO0FBSGlELE1BQXJDLENBQWQ7QUFLQTNrRCxZQUFPZzJCLGdCQUFQLENBQXdCLEdBQXhCLEVBQTZCLElBQTdCLEVBQW1DaFosT0FBbkM7QUFDQSxLQVBELENBT0UsT0FBTzNjLENBQVAsRUFBVTtBQUNYO0FBQ0E7QUFDRCxXQUFPc2tELFFBQVA7QUFDQSxJQWJtQyxFQUFwQzs7QUFlQTtBQUNBO0FBQ0EsT0FBSUMsdUJBQXVCRiwrQkFBK0IsRUFBQ0csU0FBUyxJQUFWLEVBQS9CLEdBQWlELEtBQTVFOztBQUVBLFlBQVM3dUIsaUJBQVQsQ0FBMEIySixJQUExQixFQUFnQzMyQixJQUFoQyxFQUFzQzZzQixRQUF0QyxFQUFnRDtBQUMvQzhKLFNBQUszSixnQkFBTCxDQUFzQmh0QixJQUF0QixFQUE0QjZzQixRQUE1QixFQUFzQyt1QixvQkFBdEM7QUFDQTs7QUFFRCxZQUFTM3VCLG9CQUFULENBQTZCMEosSUFBN0IsRUFBbUMzMkIsSUFBbkMsRUFBeUM2c0IsUUFBekMsRUFBbUQ7QUFDbEQ4SixTQUFLMUosbUJBQUwsQ0FBeUJqdEIsSUFBekIsRUFBK0I2c0IsUUFBL0IsRUFBeUMrdUIsb0JBQXpDO0FBQ0E7O0FBRUQsWUFBU0UsV0FBVCxDQUFxQjk3QyxJQUFyQixFQUEyQjhWLEtBQTNCLEVBQWtDMVIsQ0FBbEMsRUFBcUNMLENBQXJDLEVBQXdDZzRDLFdBQXhDLEVBQXFEO0FBQ3BELFdBQU87QUFDTi83QyxXQUFNQSxJQURBO0FBRU44VixZQUFPQSxLQUZEO0FBR044WCxhQUFRbXVCLGVBQWUsSUFIakI7QUFJTjMzQyxRQUFHQSxNQUFNeEosU0FBTixHQUFrQndKLENBQWxCLEdBQXNCLElBSm5CO0FBS05MLFFBQUdBLE1BQU1uSixTQUFOLEdBQWtCbUosQ0FBbEIsR0FBc0I7QUFMbkIsS0FBUDtBQU9BOztBQUVELFlBQVNpNEMsZUFBVCxDQUF5QkMsS0FBekIsRUFBZ0NubUMsS0FBaEMsRUFBdUM7QUFDdEMsUUFBSTlWLE9BQU93NkMsWUFBWXlCLE1BQU1qOEMsSUFBbEIsS0FBMkJpOEMsTUFBTWo4QyxJQUE1QztBQUNBLFFBQUlndEMsTUFBTTM5QixRQUFRbW1CLG1CQUFSLENBQTRCeW1CLEtBQTVCLEVBQW1Dbm1DLEtBQW5DLENBQVY7QUFDQSxXQUFPZ21DLFlBQVk5N0MsSUFBWixFQUFrQjhWLEtBQWxCLEVBQXlCazNCLElBQUk1b0MsQ0FBN0IsRUFBZ0M0b0MsSUFBSWpwQyxDQUFwQyxFQUF1Q2s0QyxLQUF2QyxDQUFQO0FBQ0E7O0FBRUQsWUFBU0MsU0FBVCxDQUFtQnJGLEVBQW5CLEVBQXVCQyxPQUF2QixFQUFnQztBQUMvQixRQUFJcUYsVUFBVSxLQUFkO0FBQ0EsUUFBSXQ3QyxPQUFPLEVBQVg7O0FBRUEsV0FBTyxZQUFXO0FBQ2pCQSxZQUFPQyxNQUFNM0UsU0FBTixDQUFnQnhDLEtBQWhCLENBQXNCMUIsSUFBdEIsQ0FBMkJxRSxTQUEzQixDQUFQO0FBQ0F3NkMsZUFBVUEsV0FBVyxJQUFyQjs7QUFFQSxTQUFJLENBQUNxRixPQUFMLEVBQWM7QUFDYkEsZ0JBQVUsSUFBVjtBQUNBOXNDLGNBQVErVyxnQkFBUixDQUF5Qm51QixJQUF6QixDQUE4QmpCLE1BQTlCLEVBQXNDLFlBQVc7QUFDaERtbEQsaUJBQVUsS0FBVjtBQUNBdEYsVUFBR3poQyxLQUFILENBQVMwaEMsT0FBVCxFQUFrQmoyQyxJQUFsQjtBQUNBLE9BSEQ7QUFJQTtBQUNELEtBWEQ7QUFZQTs7QUFFRDtBQUNBLFlBQVN1N0MsYUFBVCxDQUF1QjloQixPQUF2QixFQUFnQztBQUMvQixRQUFJK2hCLFVBQVVqbEIsU0FBU2tsQixhQUFULENBQXVCLEtBQXZCLENBQWQ7QUFDQSxRQUFJQyxNQUFNbkMsYUFBYSxjQUF2QjtBQUNBLFFBQUlvQyxVQUFVLE9BQWQ7QUFDQSxRQUFJNXpCLFFBQ0gsdUJBQ0EsU0FEQSxHQUVBLFFBRkEsR0FHQSxVQUhBLEdBSUEsV0FKQSxHQUtBLGtCQUxBLEdBTUEsc0JBTkEsR0FPQSxvQkFQQSxHQVFBLGFBVEQ7O0FBV0F5ekIsWUFBUXp6QixLQUFSLENBQWM2ekIsT0FBZCxHQUF3Qjd6QixLQUF4QjtBQUNBeXpCLFlBQVFLLFNBQVIsR0FBb0JILEdBQXBCO0FBQ0FGLFlBQVFNLFNBQVIsR0FDQyxpQkFBaUJKLEdBQWpCLEdBQXVCLGtCQUF2QixHQUE0QzN6QixLQUE1QyxHQUFvRCxJQUFwRCxHQUNDLGNBREQsR0FFRSxvQkFGRixHQUdFLFFBSEYsR0FHYTR6QixPQUhiLEdBR3VCLEtBSHZCLEdBSUUsU0FKRixHQUljQSxPQUpkLEdBSXdCLEtBSnhCLEdBS0UsU0FMRixHQU1FLFNBTkYsR0FPQyxRQVBELEdBUUEsUUFSQSxHQVNBLGNBVEEsR0FTaUJELEdBVGpCLEdBU3VCLGtCQVR2QixHQVM0QzN6QixLQVQ1QyxHQVNvRCxJQVRwRCxHQVVDLGNBVkQsR0FXRSxvQkFYRixHQVlFLGFBWkYsR0FhRSxjQWJGLEdBY0UsVUFkRixHQWVFLFNBZkYsR0FnQkMsUUFoQkQsR0FpQkEsUUFsQkQ7O0FBb0JBLFFBQUlnMEIsU0FBU1AsUUFBUVEsVUFBUixDQUFtQixDQUFuQixDQUFiO0FBQ0EsUUFBSUMsU0FBU1QsUUFBUVEsVUFBUixDQUFtQixDQUFuQixDQUFiOztBQUVBUixZQUFRVSxNQUFSLEdBQWlCLFlBQVc7QUFDM0JILFlBQU9JLFVBQVAsR0FBb0JSLE9BQXBCO0FBQ0FJLFlBQU9LLFNBQVAsR0FBbUJULE9BQW5CO0FBQ0FNLFlBQU9FLFVBQVAsR0FBb0JSLE9BQXBCO0FBQ0FNLFlBQU9HLFNBQVAsR0FBbUJULE9BQW5CO0FBQ0EsS0FMRDtBQU1BLFFBQUlVLFdBQVcsU0FBWEEsUUFBVyxHQUFXO0FBQ3pCYixhQUFRVSxNQUFSO0FBQ0F6aUI7QUFDQSxLQUhEOztBQUtBdE4sc0JBQWlCNHZCLE1BQWpCLEVBQXlCLFFBQXpCLEVBQW1DTSxTQUFTQyxJQUFULENBQWNQLE1BQWQsRUFBc0IsUUFBdEIsQ0FBbkM7QUFDQTV2QixzQkFBaUI4dkIsTUFBakIsRUFBeUIsUUFBekIsRUFBbUNJLFNBQVNDLElBQVQsQ0FBY0wsTUFBZCxFQUFzQixRQUF0QixDQUFuQzs7QUFFQSxXQUFPVCxPQUFQO0FBQ0E7O0FBRUQ7QUFDQSxZQUFTZSxjQUFULENBQXdCem1CLElBQXhCLEVBQThCMkQsT0FBOUIsRUFBdUM7QUFDdEMsUUFBSStpQixVQUFVMW1CLEtBQUt3akIsV0FBTCxNQUFzQnhqQixLQUFLd2pCLFdBQUwsSUFBb0IsRUFBMUMsQ0FBZDtBQUNBLFFBQUltRCxRQUFRRCxRQUFRRSxXQUFSLEdBQXNCLFVBQVNsbUQsQ0FBVCxFQUFZO0FBQzdDLFNBQUlBLEVBQUVtbUQsYUFBRixLQUFvQmxELG9CQUF4QixFQUE4QztBQUM3Q2hnQjtBQUNBO0FBQ0QsS0FKRDs7QUFNQWpyQixZQUFRMkssSUFBUixDQUFhdWdDLHNCQUFiLEVBQXFDLFVBQVN2NkMsSUFBVCxFQUFlO0FBQ25EZ3RCLHVCQUFpQjJKLElBQWpCLEVBQXVCMzJCLElBQXZCLEVBQTZCczlDLEtBQTdCO0FBQ0EsS0FGRDs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FELFlBQVFJLE1BQVIsR0FBaUIsQ0FBQyxDQUFDOW1CLEtBQUsrbUIsWUFBeEI7O0FBRUEvbUIsU0FBS2duQixTQUFMLENBQWVDLEdBQWYsQ0FBbUJ2RCxrQkFBbkI7QUFDQTs7QUFFRCxZQUFTd0QsZ0JBQVQsQ0FBMEJsbkIsSUFBMUIsRUFBZ0M7QUFDL0IsUUFBSTBtQixVQUFVMW1CLEtBQUt3akIsV0FBTCxLQUFxQixFQUFuQztBQUNBLFFBQUltRCxRQUFRRCxRQUFRRSxXQUFwQjs7QUFFQSxRQUFJRCxLQUFKLEVBQVc7QUFDVmp1QyxhQUFRMkssSUFBUixDQUFhdWdDLHNCQUFiLEVBQXFDLFVBQVN2NkMsSUFBVCxFQUFlO0FBQ25EaXRCLDJCQUFvQjBKLElBQXBCLEVBQTBCMzJCLElBQTFCLEVBQWdDczlDLEtBQWhDO0FBQ0EsTUFGRDs7QUFJQSxZQUFPRCxRQUFRRSxXQUFmO0FBQ0E7O0FBRUQ1bUIsU0FBS2duQixTQUFMLENBQWVHLE1BQWYsQ0FBc0J6RCxrQkFBdEI7QUFDQTs7QUFFRCxZQUFTMEQsaUJBQVQsQ0FBMkJwbkIsSUFBM0IsRUFBaUM5SixRQUFqQyxFQUEyQy9XLEtBQTNDLEVBQWtEO0FBQ2pELFFBQUl1bkMsVUFBVTFtQixLQUFLd2pCLFdBQUwsTUFBc0J4akIsS0FBS3dqQixXQUFMLElBQW9CLEVBQTFDLENBQWQ7O0FBRUE7QUFDQSxRQUFJa0MsVUFBVWdCLFFBQVFoQixPQUFSLEdBQWtCRCxjQUFjRixVQUFVLFlBQVc7QUFDbEUsU0FBSW1CLFFBQVFoQixPQUFaLEVBQXFCO0FBQ3BCLGFBQU94dkIsU0FBU2l2QixZQUFZLFFBQVosRUFBc0JobUMsS0FBdEIsQ0FBVCxDQUFQO0FBQ0E7QUFDRCxLQUo2QyxDQUFkLENBQWhDOztBQU1BO0FBQ0E7QUFDQXNuQyxtQkFBZXptQixJQUFmLEVBQXFCLFlBQVc7QUFDL0IsU0FBSTBtQixRQUFRaEIsT0FBWixFQUFxQjtBQUNwQixVQUFJcmtCLFlBQVlyQixLQUFLRyxVQUFyQjtBQUNBLFVBQUlrQixhQUFhQSxjQUFjcWtCLFFBQVF2bEIsVUFBdkMsRUFBbUQ7QUFDbERrQixpQkFBVWdtQixZQUFWLENBQXVCM0IsT0FBdkIsRUFBZ0Nya0IsVUFBVWltQixVQUExQztBQUNBOztBQUVEO0FBQ0E1QixjQUFRVSxNQUFSO0FBQ0E7QUFDRCxLQVZEO0FBV0E7O0FBRUQsWUFBU21CLG9CQUFULENBQThCdm5CLElBQTlCLEVBQW9DO0FBQ25DLFFBQUkwbUIsVUFBVTFtQixLQUFLd2pCLFdBQUwsS0FBcUIsRUFBbkM7QUFDQSxRQUFJa0MsVUFBVWdCLFFBQVFoQixPQUF0Qjs7QUFFQSxXQUFPZ0IsUUFBUWhCLE9BQWY7QUFDQXdCLHFCQUFpQmxuQixJQUFqQjs7QUFFQSxRQUFJMGxCLFdBQVdBLFFBQVF2bEIsVUFBdkIsRUFBbUM7QUFDbEN1bEIsYUFBUXZsQixVQUFSLENBQW1CcW5CLFdBQW5CLENBQStCOUIsT0FBL0I7QUFDQTtBQUNEOztBQUVELFlBQVMrQixTQUFULENBQW1CdnVDLFFBQW5CLEVBQTZCd3VDLEdBQTdCLEVBQWtDO0FBQ2pDO0FBQ0EsUUFBSXoxQixRQUFRL1ksU0FBU3l1QyxNQUFULElBQW1CbG5CLFNBQVNrbEIsYUFBVCxDQUF1QixPQUF2QixDQUEvQjtBQUNBLFFBQUksQ0FBQ3pzQyxTQUFTeXVDLE1BQWQsRUFBc0I7QUFDckJ6dUMsY0FBU3l1QyxNQUFULEdBQWtCMTFCLEtBQWxCO0FBQ0F5MUIsV0FBTSxxQkFBcUJBLEdBQTNCO0FBQ0F6MUIsV0FBTTIxQixZQUFOLENBQW1CLE1BQW5CLEVBQTJCLFVBQTNCO0FBQ0FubkIsY0FBU29uQixvQkFBVCxDQUE4QixNQUE5QixFQUFzQyxDQUF0QyxFQUF5Q0MsV0FBekMsQ0FBcUQ3MUIsS0FBckQ7QUFDQTs7QUFFREEsVUFBTTYxQixXQUFOLENBQWtCcm5CLFNBQVNzbkIsY0FBVCxDQUF3QkwsR0FBeEIsQ0FBbEI7QUFDQTs7QUFFRHhuRCxVQUFPRCxPQUFQLEdBQWlCO0FBQ2hCOzs7OztBQUtBK25ELGNBQVUsT0FBTzNuRCxNQUFQLEtBQWtCLFdBQWxCLElBQWlDLE9BQU9vZ0MsUUFBUCxLQUFvQixXQU4vQzs7QUFRaEJobkIsZ0JBQVksc0JBQVc7QUFDdEIsU0FBSXd1QyxZQUFZLGlDQUFoQjs7QUFFQVIsZUFBVSxJQUFWO0FBQ0M7QUFDQTtBQUNBLDZCQUF3QjlELG9CQUF4QixHQUErQyxHQUEvQyxHQUFxRHNFLFNBQXJELEdBQWlFLEdBQWpFLEdBQ0EsYUFEQSxHQUNnQnRFLG9CQURoQixHQUN1QyxHQUR2QyxHQUM2Q3NFLFNBRDdDLEdBQ3lELEdBRHpELEdBRUEsR0FGQSxHQUVNdkUsa0JBRk4sR0FFMkIsR0FGM0IsR0FHQyxvQkFIRCxHQUd3QkMsb0JBSHhCLEdBRytDLFVBSC9DLEdBSUMsWUFKRCxHQUlnQkEsb0JBSmhCLEdBSXVDLFVBSnZDLEdBS0EsR0FSRDtBQVVBLEtBckJlOztBQXVCaEI3eUIsb0JBQWdCLHdCQUFTL1UsSUFBVCxFQUFleEIsTUFBZixFQUF1QjtBQUN0QyxTQUFJLE9BQU93QixJQUFQLEtBQWdCLFFBQXBCLEVBQThCO0FBQzdCQSxhQUFPMGtCLFNBQVN5bkIsY0FBVCxDQUF3Qm5zQyxJQUF4QixDQUFQO0FBQ0EsTUFGRCxNQUVPLElBQUlBLEtBQUt4YSxNQUFULEVBQWlCO0FBQ3ZCO0FBQ0F3YSxhQUFPQSxLQUFLLENBQUwsQ0FBUDtBQUNBOztBQUVELFNBQUlBLFFBQVFBLEtBQUs1QixNQUFqQixFQUF5QjtBQUN4QjtBQUNBNEIsYUFBT0EsS0FBSzVCLE1BQVo7QUFDQTs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxTQUFJRyxVQUFVeUIsUUFBUUEsS0FBS3duQyxVQUFiLElBQTJCeG5DLEtBQUt3bkMsVUFBTCxDQUFnQixJQUFoQixDQUF6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQUlqcEMsV0FBV0EsUUFBUUgsTUFBUixLQUFtQjRCLElBQWxDLEVBQXdDO0FBQ3ZDeW9DLGlCQUFXem9DLElBQVgsRUFBaUJ4QixNQUFqQjtBQUNBLGFBQU9ELE9BQVA7QUFDQTs7QUFFRCxZQUFPLElBQVA7QUFDQSxLQXREZTs7QUF3RGhCc2Isb0JBQWdCLHdCQUFTdGIsT0FBVCxFQUFrQjtBQUNqQyxTQUFJSCxTQUFTRyxRQUFRSCxNQUFyQjtBQUNBLFNBQUksQ0FBQ0EsT0FBT3FwQyxXQUFQLENBQUwsRUFBMEI7QUFDekI7QUFDQTs7QUFFRCxTQUFJb0IsVUFBVXpxQyxPQUFPcXBDLFdBQVAsRUFBb0JvQixPQUFsQztBQUNBLE1BQUMsUUFBRCxFQUFXLE9BQVgsRUFBb0Juc0MsT0FBcEIsQ0FBNEIsVUFBU25QLElBQVQsRUFBZTtBQUMxQyxVQUFJakUsUUFBUXUvQyxRQUFRdDdDLElBQVIsQ0FBWjtBQUNBLFVBQUlvUCxRQUFRaUYsYUFBUixDQUFzQnRZLEtBQXRCLENBQUosRUFBa0M7QUFDakM4VSxjQUFPZ3VDLGVBQVAsQ0FBdUI3K0MsSUFBdkI7QUFDQSxPQUZELE1BRU87QUFDTjZRLGNBQU95dEMsWUFBUCxDQUFvQnQrQyxJQUFwQixFQUEwQmpFLEtBQTFCO0FBQ0E7QUFDRCxNQVBEOztBQVNBcVQsYUFBUTJLLElBQVIsQ0FBYXVoQyxRQUFRM3lCLEtBQVIsSUFBaUIsRUFBOUIsRUFBa0MsVUFBUzVzQixLQUFULEVBQWdCd1MsR0FBaEIsRUFBcUI7QUFDdERzQyxhQUFPOFgsS0FBUCxDQUFhcGEsR0FBYixJQUFvQnhTLEtBQXBCO0FBQ0EsTUFGRDs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOFUsWUFBT3dDLEtBQVAsR0FBZXhDLE9BQU93QyxLQUF0Qjs7QUFFQSxZQUFPeEMsT0FBT3FwQyxXQUFQLENBQVA7QUFDQSxLQW5GZTs7QUFxRmhCbnRCLHNCQUFrQiwwQkFBU2xYLEtBQVQsRUFBZ0I5VixJQUFoQixFQUFzQjZzQixRQUF0QixFQUFnQztBQUNqRCxTQUFJL2IsU0FBU2dGLE1BQU1oRixNQUFuQjtBQUNBLFNBQUk5USxTQUFTLFFBQWIsRUFBdUI7QUFDdEI7QUFDQSs5Qyx3QkFBa0JqdEMsTUFBbEIsRUFBMEIrYixRQUExQixFQUFvQy9XLEtBQXBDO0FBQ0E7QUFDQTs7QUFFRCxTQUFJdW5DLFVBQVV4d0IsU0FBU3N0QixXQUFULE1BQTBCdHRCLFNBQVNzdEIsV0FBVCxJQUF3QixFQUFsRCxDQUFkO0FBQ0EsU0FBSTRFLFVBQVUxQixRQUFRMEIsT0FBUixLQUFvQjFCLFFBQVEwQixPQUFSLEdBQWtCLEVBQXRDLENBQWQ7QUFDQSxTQUFJekIsUUFBUXlCLFFBQVFqcEMsTUFBTWtELEVBQU4sR0FBVyxHQUFYLEdBQWlCaFosSUFBekIsSUFBaUMsVUFBU2k4QyxLQUFULEVBQWdCO0FBQzVEcHZCLGVBQVNtdkIsZ0JBQWdCQyxLQUFoQixFQUF1Qm5tQyxLQUF2QixDQUFUO0FBQ0EsTUFGRDs7QUFJQWtYLHVCQUFpQmxjLE1BQWpCLEVBQXlCOVEsSUFBekIsRUFBK0JzOUMsS0FBL0I7QUFDQSxLQXBHZTs7QUFzR2hCcndCLHlCQUFxQiw2QkFBU25YLEtBQVQsRUFBZ0I5VixJQUFoQixFQUFzQjZzQixRQUF0QixFQUFnQztBQUNwRCxTQUFJL2IsU0FBU2dGLE1BQU1oRixNQUFuQjtBQUNBLFNBQUk5USxTQUFTLFFBQWIsRUFBdUI7QUFDdEI7QUFDQWsrQywyQkFBcUJwdEMsTUFBckIsRUFBNkIrYixRQUE3QjtBQUNBO0FBQ0E7O0FBRUQsU0FBSXd3QixVQUFVeHdCLFNBQVNzdEIsV0FBVCxLQUF5QixFQUF2QztBQUNBLFNBQUk0RSxVQUFVMUIsUUFBUTBCLE9BQVIsSUFBbUIsRUFBakM7QUFDQSxTQUFJekIsUUFBUXlCLFFBQVFqcEMsTUFBTWtELEVBQU4sR0FBVyxHQUFYLEdBQWlCaFosSUFBekIsQ0FBWjtBQUNBLFNBQUksQ0FBQ3M5QyxLQUFMLEVBQVk7QUFDWDtBQUNBOztBQUVEcndCLDBCQUFvQm5jLE1BQXBCLEVBQTRCOVEsSUFBNUIsRUFBa0NzOUMsS0FBbEM7QUFDQTtBQXRIZSxJQUFqQjs7QUF5SEE7O0FBRUE7Ozs7Ozs7OztBQVNBanVDLFdBQVEydkMsUUFBUixHQUFtQmh5QixpQkFBbkI7O0FBRUE7Ozs7Ozs7OztBQVNBM2QsV0FBUTR2QyxXQUFSLEdBQXNCaHlCLG9CQUF0QjtBQUVDLEdBM2NRLEVBMmNQLEVBQUMsTUFBSyxFQUFOLEVBM2NPLENBdHpVZ3pCLEVBaXdWNXlCLElBQUcsQ0FBQyxVQUFTdDFCLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRDs7QUFFQSxPQUFJeVksVUFBVTFYLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSXVuRCxRQUFRdm5ELFFBQVEsRUFBUixDQUFaO0FBQ0EsT0FBSXduRCxNQUFNeG5ELFFBQVEsRUFBUixDQUFWOztBQUVBO0FBQ0EsT0FBSXluRCxpQkFBaUJELElBQUlSLFFBQUosR0FBZVEsR0FBZixHQUFxQkQsS0FBMUM7O0FBRUE7Ozs7O0FBS0Fyb0QsVUFBT0QsT0FBUCxHQUFpQnlZLFFBQVF1QixNQUFSLENBQWU7QUFDL0I7OztBQUdBUixnQkFBWSxzQkFBVyxDQUFFLENBSk07O0FBTS9COzs7Ozs7O0FBT0FxWCxvQkFBZ0IsMEJBQVcsQ0FBRSxDQWJFOztBQWUvQjs7Ozs7O0FBTUE4RSxvQkFBZ0IsMEJBQVcsQ0FBRSxDQXJCRTs7QUF1Qi9COzs7Ozs7O0FBT0FTLHNCQUFrQiw0QkFBVyxDQUFFLENBOUJBOztBQWdDL0I7Ozs7OztBQU1BQyx5QkFBcUIsK0JBQVcsQ0FBRTs7QUF0Q0gsSUFBZixFQXdDZG15QixjQXhDYyxDQUFqQjs7QUEwQ0E7Ozs7Ozs7OztBQVNBOzs7Ozs7Ozs7QUFVQyxHQTVFZSxFQTRFZCxFQUFDLE1BQUssRUFBTixFQUFTLE1BQUssRUFBZCxFQUFpQixNQUFLLEVBQXRCLEVBNUVjLENBandWeXlCLEVBNjBWNXhCLElBQUcsQ0FBQyxVQUFTem5ELE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUNqRTs7QUFFQUMsVUFBT0QsT0FBUCxHQUFpQixFQUFqQjtBQUNBQyxVQUFPRCxPQUFQLENBQWV5b0QsTUFBZixHQUF3QjFuRCxRQUFRLEVBQVIsQ0FBeEI7QUFDQWQsVUFBT0QsT0FBUCxDQUFlMFosTUFBZixHQUF3QjNZLFFBQVEsRUFBUixDQUF4QjtBQUNBZCxVQUFPRCxPQUFQLENBQWU2WixLQUFmLEdBQXVCOVksUUFBUSxFQUFSLENBQXZCO0FBRUMsR0FSK0IsRUFROUIsRUFBQyxNQUFLLEVBQU4sRUFBUyxNQUFLLEVBQWQsRUFBaUIsTUFBSyxFQUF0QixFQVI4QixDQTcwVnl4QixFQXExVjV4QixJQUFHLENBQUMsVUFBU0EsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ2pFOzs7Ozs7QUFNQTs7QUFFQSxPQUFJNFksV0FBVzdYLFFBQVEsRUFBUixDQUFmO0FBQ0EsT0FBSStYLFdBQVcvWCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUkwWCxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7O0FBRUE2WCxZQUFTaUMsSUFBVCxDQUFjLFFBQWQsRUFBd0I7QUFDdkIzQixhQUFTO0FBQ1J1dkMsYUFBUTtBQUNQQyxpQkFBVztBQURKO0FBREE7QUFEYyxJQUF4Qjs7QUFRQSxPQUFJQyxVQUFVO0FBQ2J4cEMsYUFBUyxpQkFBU2pXLE1BQVQsRUFBaUI7QUFDekIsU0FBSWlCLFFBQVFqQixPQUFPcWMsSUFBbkI7QUFDQSxTQUFJckcsUUFBUWhXLE9BQU9nVyxLQUFuQjtBQUNBLFNBQUlYLE9BQU9XLE1BQU1xQyxjQUFOLENBQXFCcFgsS0FBckIsQ0FBWDtBQUNBLFNBQUl5K0MsVUFBVXJxQyxRQUFRVyxNQUFNc0MsZ0JBQU4sQ0FBdUJyWCxLQUF2QixDQUF0QjtBQUNBLFNBQUlnWixTQUFVeWxDLFdBQVdycUMsS0FBS1ksT0FBTCxDQUFhb0ssU0FBekIsSUFBdUMsRUFBcEQ7QUFDQSxTQUFJam9CLFNBQVM2aEIsT0FBTzdoQixNQUFQLElBQWlCLENBQTlCOztBQUVBLFlBQU8sQ0FBQ0EsTUFBRCxHQUFVLElBQVYsR0FBaUIsVUFBUytoQixLQUFULEVBQWdCeGlCLENBQWhCLEVBQW1CO0FBQzFDLGFBQVFBLElBQUlTLE1BQUosSUFBYzZoQixPQUFPdGlCLENBQVAsRUFBVSs0QixLQUF6QixJQUFtQyxJQUExQztBQUNBLE1BRkQ7QUFHQSxLQVpZOztBQWNiaXZCLGNBQVUsa0JBQVMzL0MsTUFBVCxFQUFpQjtBQUMxQixTQUFJMi9DLFdBQVczL0MsT0FBTzIvQyxRQUF0QjtBQUNBLFNBQUlyN0MsSUFBSXE3QyxXQUFXQSxTQUFTcjdDLENBQXBCLEdBQXdCLElBQWhDO0FBQ0EsU0FBSUwsSUFBSTA3QyxXQUFXQSxTQUFTMTdDLENBQXBCLEdBQXdCLElBQWhDOztBQUVBLFlBQU8sVUFBU2tXLEtBQVQsRUFBZ0I7QUFDdEIsYUFBTztBQUNON1YsVUFBR0EsTUFBTSxJQUFOLEdBQWE2VixNQUFNN1YsQ0FBbkIsR0FBdUJBLENBRHBCO0FBRU5MLFVBQUdBLE1BQU0sSUFBTixHQUFha1csTUFBTWxXLENBQW5CLEdBQXVCQTtBQUZwQixPQUFQO0FBSUEsTUFMRDtBQU1BO0FBekJZLElBQWQ7O0FBNEJBO0FBQ0EsWUFBUzI3QyxVQUFULENBQW9Cam5CLEVBQXBCLEVBQXdCMTNCLEtBQXhCLEVBQStCb1QsS0FBL0IsRUFBc0M7QUFDckMsUUFBSTZDLFFBQVF5aEIsR0FBR2hpQixNQUFILElBQWEsRUFBekI7QUFDQSxRQUFJMEYsT0FBT25GLE1BQU1tRixJQUFqQjtBQUNBLFFBQUlwYyxNQUFKOztBQUVBLFFBQUlvYyxTQUFTdmhCLFNBQWIsRUFBd0I7QUFDdkJ1aEIsWUFBTyxDQUFDLENBQUNuRixNQUFNTixlQUFmO0FBQ0E7O0FBRUQsUUFBSXlGLFNBQVMsS0FBVCxJQUFrQkEsU0FBUyxJQUEvQixFQUFxQztBQUNwQyxZQUFPLEtBQVA7QUFDQTs7QUFFRCxRQUFJQSxTQUFTLElBQWIsRUFBbUI7QUFDbEIsWUFBTyxRQUFQO0FBQ0E7O0FBRURwYyxhQUFTbkcsV0FBV3VpQixJQUFYLEVBQWlCLEVBQWpCLENBQVQ7QUFDQSxRQUFJbVUsU0FBU3Z3QixNQUFULEtBQW9CbEcsS0FBSytLLEtBQUwsQ0FBVzdFLE1BQVgsTUFBdUJBLE1BQS9DLEVBQXVEO0FBQ3RELFNBQUlvYyxLQUFLLENBQUwsTUFBWSxHQUFaLElBQW1CQSxLQUFLLENBQUwsTUFBWSxHQUFuQyxFQUF3QztBQUN2Q3BjLGVBQVNnQixRQUFRaEIsTUFBakI7QUFDQTs7QUFFRCxTQUFJQSxXQUFXZ0IsS0FBWCxJQUFvQmhCLFNBQVMsQ0FBN0IsSUFBa0NBLFVBQVVvVSxLQUFoRCxFQUF1RDtBQUN0RCxhQUFPLEtBQVA7QUFDQTs7QUFFRCxZQUFPcFUsTUFBUDtBQUNBOztBQUVELFlBQVFvYyxJQUFSO0FBQ0E7QUFDQSxVQUFLLFFBQUw7QUFDQyxhQUFPLE9BQVA7QUFDRCxVQUFLLEtBQUw7QUFDQyxhQUFPLEtBQVA7QUFDRCxVQUFLLE1BQUw7QUFDQyxhQUFPLFFBQVA7QUFDRDtBQUNBLFVBQUssUUFBTDtBQUNBLFVBQUssT0FBTDtBQUNBLFVBQUssS0FBTDtBQUNDLGFBQU9BLElBQVA7QUFDRDtBQUNBO0FBQ0MsYUFBTyxLQUFQO0FBZkQ7QUFpQkE7O0FBRUQsWUFBU3dqQyxlQUFULENBQXlCNy9DLE1BQXpCLEVBQWlDO0FBQ2hDLFFBQUlrWCxRQUFRbFgsT0FBTzI0QixFQUFQLENBQVVoaUIsTUFBVixJQUFvQixFQUFoQztBQUNBLFFBQUkxYyxRQUFRK0YsT0FBTzI0QixFQUFQLENBQVV2WSxNQUFWLElBQW9CLEVBQWhDO0FBQ0EsUUFBSS9ELE9BQU9yYyxPQUFPcWMsSUFBbEI7QUFDQSxRQUFJcGMsU0FBUyxJQUFiO0FBQ0EsUUFBSXNYLFVBQUo7O0FBRUEsUUFBSWlaLFNBQVNuVSxJQUFULENBQUosRUFBb0I7QUFDbkIsWUFBTyxJQUFQO0FBQ0E7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLFFBQUlBLFNBQVMsT0FBYixFQUFzQjtBQUNyQnBjLGNBQVNpWCxNQUFNNG9DLFdBQU4sS0FBc0JobEQsU0FBdEIsR0FBa0NiLE1BQU04akIsTUFBeEMsR0FBaUQ3RyxNQUFNNG9DLFdBQWhFO0FBQ0EsS0FGRCxNQUVPLElBQUl6akMsU0FBUyxLQUFiLEVBQW9CO0FBQzFCcGMsY0FBU2lYLE1BQU02b0MsUUFBTixLQUFtQmpsRCxTQUFuQixHQUErQmIsTUFBTTJlLEdBQXJDLEdBQTJDMUIsTUFBTTZvQyxRQUExRDtBQUNBLEtBRk0sTUFFQSxJQUFJN29DLE1BQU04b0MsU0FBTixLQUFvQmxsRCxTQUF4QixFQUFtQztBQUN6Q21GLGNBQVNpWCxNQUFNOG9DLFNBQWY7QUFDQSxLQUZNLE1BRUEsSUFBSS9sRCxNQUFNZ21ELGVBQVYsRUFBMkI7QUFDakNoZ0QsY0FBU2hHLE1BQU1nbUQsZUFBTixFQUFUO0FBQ0EsS0FGTSxNQUVBLElBQUlobUQsTUFBTXFkLFlBQVYsRUFBd0I7QUFDOUJyWCxjQUFTaEcsTUFBTXFkLFlBQU4sRUFBVDtBQUNBOztBQUVELFFBQUlyWCxXQUFXbkYsU0FBWCxJQUF3Qm1GLFdBQVcsSUFBdkMsRUFBNkM7QUFDNUMsU0FBSUEsT0FBT3FFLENBQVAsS0FBYXhKLFNBQWIsSUFBMEJtRixPQUFPZ0UsQ0FBUCxLQUFhbkosU0FBM0MsRUFBc0Q7QUFDckQsYUFBT21GLE1BQVA7QUFDQTs7QUFFRCxTQUFJLE9BQU9BLE1BQVAsS0FBa0IsUUFBbEIsSUFBOEJ1d0IsU0FBU3Z3QixNQUFULENBQWxDLEVBQW9EO0FBQ25Ec1gsbUJBQWF0ZCxNQUFNc1osWUFBTixFQUFiO0FBQ0EsYUFBTztBQUNOalAsVUFBR2lULGFBQWF0WCxNQUFiLEdBQXNCLElBRG5CO0FBRU5nRSxVQUFHc1QsYUFBYSxJQUFiLEdBQW9CdFg7QUFGakIsT0FBUDtBQUlBO0FBQ0Q7O0FBRUQsV0FBTyxJQUFQO0FBQ0E7O0FBRUQsWUFBU2lnRCxhQUFULENBQXVCM0ksT0FBdkIsRUFBZ0N0MkMsS0FBaEMsRUFBdUN1K0MsU0FBdkMsRUFBa0Q7QUFDakQsUUFBSXgvQyxTQUFTdTNDLFFBQVF0MkMsS0FBUixDQUFiO0FBQ0EsUUFBSW9iLE9BQU9yYyxPQUFPcWMsSUFBbEI7QUFDQSxRQUFJOGpDLFVBQVUsQ0FBQ2wvQyxLQUFELENBQWQ7QUFDQSxRQUFJaEIsTUFBSjs7QUFFQSxRQUFJLENBQUN1L0MsU0FBTCxFQUFnQjtBQUNmLFlBQU9uakMsSUFBUDtBQUNBOztBQUVELFdBQU9BLFNBQVMsS0FBVCxJQUFrQjhqQyxRQUFRNW5DLE9BQVIsQ0FBZ0I4RCxJQUFoQixNQUEwQixDQUFDLENBQXBELEVBQXVEO0FBQ3RELFNBQUksQ0FBQ21VLFNBQVNuVSxJQUFULENBQUwsRUFBcUI7QUFDcEIsYUFBT0EsSUFBUDtBQUNBOztBQUVEcGMsY0FBU3MzQyxRQUFRbDdCLElBQVIsQ0FBVDtBQUNBLFNBQUksQ0FBQ3BjLE1BQUwsRUFBYTtBQUNaLGFBQU8sS0FBUDtBQUNBOztBQUVELFNBQUlBLE9BQU95L0MsT0FBWCxFQUFvQjtBQUNuQixhQUFPcmpDLElBQVA7QUFDQTs7QUFFRDhqQyxhQUFRM25DLElBQVIsQ0FBYTZELElBQWI7QUFDQUEsWUFBT3BjLE9BQU9vYyxJQUFkO0FBQ0E7O0FBRUQsV0FBTyxLQUFQO0FBQ0E7O0FBRUQsWUFBUytqQyxZQUFULENBQXNCcGdELE1BQXRCLEVBQThCO0FBQzdCLFFBQUlxYyxPQUFPcmMsT0FBT3FjLElBQWxCO0FBQ0EsUUFBSW5jLE9BQU8sU0FBWDs7QUFFQSxRQUFJbWMsU0FBUyxLQUFiLEVBQW9CO0FBQ25CLFlBQU8sSUFBUDtBQUNBOztBQUVELFFBQUksQ0FBQ21VLFNBQVNuVSxJQUFULENBQUwsRUFBcUI7QUFDcEJuYyxZQUFPLFVBQVA7QUFDQTs7QUFFRCxXQUFPdS9DLFFBQVF2L0MsSUFBUixFQUFjRixNQUFkLENBQVA7QUFDQTs7QUFFRCxZQUFTcWdELFVBQVQsQ0FBb0JsbUMsS0FBcEIsRUFBMkI7QUFDMUIsV0FBT0EsU0FBUyxDQUFDQSxNQUFNWSxJQUF2QjtBQUNBOztBQUVELFlBQVN1bEMsUUFBVCxDQUFrQjVtQyxHQUFsQixFQUF1QjZtQyxNQUF2QixFQUErQkMsTUFBL0IsRUFBdUNDLElBQXZDLEVBQTZDQyxJQUE3QyxFQUFtRDtBQUNsRCxRQUFJL29ELENBQUo7O0FBRUEsUUFBSSxDQUFDOG9ELElBQUQsSUFBUyxDQUFDQyxJQUFkLEVBQW9CO0FBQ25CO0FBQ0E7O0FBRUQ7QUFDQWhuQyxRQUFJeXZCLE1BQUosQ0FBV29YLE9BQU8sQ0FBUCxFQUFVajhDLENBQXJCLEVBQXdCaThDLE9BQU8sQ0FBUCxFQUFVdDhDLENBQWxDO0FBQ0EsU0FBS3RNLElBQUksQ0FBVCxFQUFZQSxJQUFJOG9ELElBQWhCLEVBQXNCLEVBQUU5b0QsQ0FBeEIsRUFBMkI7QUFDMUI0WCxhQUFReUIsTUFBUixDQUFlbzRCLE1BQWYsQ0FBc0IxdkIsR0FBdEIsRUFBMkI2bUMsT0FBTzVvRCxJQUFJLENBQVgsQ0FBM0IsRUFBMEM0b0QsT0FBTzVvRCxDQUFQLENBQTFDO0FBQ0E7O0FBRUQ7QUFDQStoQixRQUFJMHZCLE1BQUosQ0FBV29YLE9BQU9FLE9BQU8sQ0FBZCxFQUFpQnA4QyxDQUE1QixFQUErQms4QyxPQUFPRSxPQUFPLENBQWQsRUFBaUJ6OEMsQ0FBaEQ7O0FBRUE7QUFDQSxTQUFLdE0sSUFBSStvRCxPQUFPLENBQWhCLEVBQW1CL29ELElBQUksQ0FBdkIsRUFBMEIsRUFBRUEsQ0FBNUIsRUFBK0I7QUFDOUI0WCxhQUFReUIsTUFBUixDQUFlbzRCLE1BQWYsQ0FBc0IxdkIsR0FBdEIsRUFBMkI4bUMsT0FBTzdvRCxDQUFQLENBQTNCLEVBQXNDNm9ELE9BQU83b0QsSUFBSSxDQUFYLENBQXRDLEVBQXFELElBQXJEO0FBQ0E7QUFDRDs7QUFFRCxZQUFTZ3BELE1BQVQsQ0FBZ0JqbkMsR0FBaEIsRUFBcUJPLE1BQXJCLEVBQTZCMm1DLE1BQTdCLEVBQXFDMXdCLElBQXJDLEVBQTJDRixLQUEzQyxFQUFrRGlGLElBQWxELEVBQXdEO0FBQ3ZELFFBQUk1Z0IsUUFBUTRGLE9BQU83aEIsTUFBbkI7QUFDQSxRQUFJeW9ELE9BQU8zd0IsS0FBS3RRLFFBQWhCO0FBQ0EsUUFBSTJnQyxTQUFTLEVBQWI7QUFDQSxRQUFJQyxTQUFTLEVBQWI7QUFDQSxRQUFJQyxPQUFPLENBQVg7QUFDQSxRQUFJQyxPQUFPLENBQVg7QUFDQSxRQUFJL29ELENBQUosRUFBT21jLElBQVAsRUFBYTdTLEtBQWIsRUFBb0I2L0MsRUFBcEIsRUFBd0JDLEVBQXhCLEVBQTRCQyxFQUE1QixFQUFnQ0MsRUFBaEM7O0FBRUF2bkMsUUFBSXd2QixTQUFKOztBQUVBLFNBQUt2eEMsSUFBSSxDQUFKLEVBQU9tYyxPQUFRTyxRQUFRLENBQUMsQ0FBQzRnQixJQUE5QixFQUFxQ3Q5QixJQUFJbWMsSUFBekMsRUFBK0MsRUFBRW5jLENBQWpELEVBQW9EO0FBQ25Ec0osYUFBUXRKLElBQUkwYyxLQUFaO0FBQ0F5c0MsVUFBSzdtQyxPQUFPaFosS0FBUCxFQUFjeXZCLEtBQW5CO0FBQ0Fxd0IsVUFBS0gsT0FBT0UsRUFBUCxFQUFXNy9DLEtBQVgsRUFBa0JpdkIsSUFBbEIsQ0FBTDtBQUNBOHdCLFVBQUtYLFdBQVdTLEVBQVgsQ0FBTDtBQUNBRyxVQUFLWixXQUFXVSxFQUFYLENBQUw7O0FBRUEsU0FBSUMsTUFBTUMsRUFBVixFQUFjO0FBQ2JSLGFBQU9GLE9BQU8vbkMsSUFBUCxDQUFZc29DLEVBQVosQ0FBUDtBQUNBSixhQUFPRixPQUFPaG9DLElBQVAsQ0FBWXVvQyxFQUFaLENBQVA7QUFDQSxNQUhELE1BR08sSUFBSU4sUUFBUUMsSUFBWixFQUFrQjtBQUN4QixVQUFJLENBQUNHLElBQUwsRUFBVztBQUNWUCxnQkFBUzVtQyxHQUFULEVBQWM2bUMsTUFBZCxFQUFzQkMsTUFBdEIsRUFBOEJDLElBQTlCLEVBQW9DQyxJQUFwQztBQUNBRCxjQUFPQyxPQUFPLENBQWQ7QUFDQUgsZ0JBQVMsRUFBVDtBQUNBQyxnQkFBUyxFQUFUO0FBQ0EsT0FMRCxNQUtPO0FBQ04sV0FBSVEsRUFBSixFQUFRO0FBQ1BULGVBQU8vbkMsSUFBUCxDQUFZc29DLEVBQVo7QUFDQTtBQUNELFdBQUlHLEVBQUosRUFBUTtBQUNQVCxlQUFPaG9DLElBQVAsQ0FBWXVvQyxFQUFaO0FBQ0E7QUFDRDtBQUNEO0FBQ0Q7O0FBRURULGFBQVM1bUMsR0FBVCxFQUFjNm1DLE1BQWQsRUFBc0JDLE1BQXRCLEVBQThCQyxJQUE5QixFQUFvQ0MsSUFBcEM7O0FBRUFobkMsUUFBSTA1QixTQUFKO0FBQ0ExNUIsUUFBSThDLFNBQUosR0FBZ0J3VCxLQUFoQjtBQUNBdFcsUUFBSTJDLElBQUo7QUFDQTs7QUFFRHRsQixVQUFPRCxPQUFQLEdBQWlCO0FBQ2hCb2lCLFFBQUksUUFEWTs7QUFHaEJnb0MseUJBQXFCLDZCQUFTbHJDLEtBQVQsRUFBZ0I5QixPQUFoQixFQUF5QjtBQUM3QyxTQUFJRyxRQUFRLENBQUMyQixNQUFNbkQsSUFBTixDQUFXSyxRQUFYLElBQXVCLEVBQXhCLEVBQTRCOWEsTUFBeEM7QUFDQSxTQUFJb25ELFlBQVl0ckMsUUFBUXNyQyxTQUF4QjtBQUNBLFNBQUlqSSxVQUFVLEVBQWQ7QUFDQSxTQUFJbGlDLElBQUosRUFBVTFkLENBQVYsRUFBYWdoQyxFQUFiLEVBQWlCMzRCLE1BQWpCOztBQUVBLFVBQUtySSxJQUFJLENBQVQsRUFBWUEsSUFBSTBjLEtBQWhCLEVBQXVCLEVBQUUxYyxDQUF6QixFQUE0QjtBQUMzQjBkLGFBQU9XLE1BQU1xQyxjQUFOLENBQXFCMWdCLENBQXJCLENBQVA7QUFDQWdoQyxXQUFLdGpCLEtBQUtZLE9BQVY7QUFDQWpXLGVBQVMsSUFBVDs7QUFFQSxVQUFJMjRCLE1BQU1BLEdBQUdoaUIsTUFBVCxJQUFtQmdpQixjQUFjL29CLFNBQVMyQixJQUE5QyxFQUFvRDtBQUNuRHZSLGdCQUFTO0FBQ1IwL0MsaUJBQVMxcEMsTUFBTXNDLGdCQUFOLENBQXVCM2dCLENBQXZCLENBREQ7QUFFUjBrQixjQUFNdWpDLFdBQVdqbkIsRUFBWCxFQUFlaGhDLENBQWYsRUFBa0IwYyxLQUFsQixDQUZFO0FBR1IyQixlQUFPQSxLQUhDO0FBSVIyaUIsWUFBSUE7QUFKSSxRQUFUO0FBTUE7O0FBRUR0akIsV0FBSzhyQyxPQUFMLEdBQWVuaEQsTUFBZjtBQUNBdTNDLGNBQVEvK0IsSUFBUixDQUFheFksTUFBYjtBQUNBOztBQUVELFVBQUtySSxJQUFJLENBQVQsRUFBWUEsSUFBSTBjLEtBQWhCLEVBQXVCLEVBQUUxYyxDQUF6QixFQUE0QjtBQUMzQnFJLGVBQVN1M0MsUUFBUTUvQyxDQUFSLENBQVQ7QUFDQSxVQUFJLENBQUNxSSxNQUFMLEVBQWE7QUFDWjtBQUNBOztBQUVEQSxhQUFPcWMsSUFBUCxHQUFjNmpDLGNBQWMzSSxPQUFkLEVBQXVCNS9DLENBQXZCLEVBQTBCNm5ELFNBQTFCLENBQWQ7QUFDQXgvQyxhQUFPMi9DLFFBQVAsR0FBa0JFLGdCQUFnQjcvQyxNQUFoQixDQUFsQjtBQUNBQSxhQUFPNGdELE1BQVAsR0FBZ0JSLGFBQWFwZ0QsTUFBYixDQUFoQjtBQUNBO0FBQ0QsS0FyQ2U7O0FBdUNoQm9oRCx1QkFBbUIsMkJBQVNwckMsS0FBVCxFQUFnQmpWLElBQWhCLEVBQXNCO0FBQ3hDLFNBQUlzVSxPQUFPdFUsS0FBS3NVLElBQUwsQ0FBVThyQyxPQUFyQjtBQUNBLFNBQUksQ0FBQzlyQyxJQUFMLEVBQVc7QUFDVjtBQUNBOztBQUVELFNBQUlxRSxNQUFNMUQsTUFBTTBELEdBQWhCO0FBQ0EsU0FBSWlmLEtBQUt0akIsS0FBS3NqQixFQUFkO0FBQ0EsU0FBSXpJLE9BQU95SSxHQUFHakksS0FBZDtBQUNBLFNBQUl6VyxTQUFTMGUsR0FBR3RZLFNBQUgsSUFBZ0IsRUFBN0I7QUFDQSxTQUFJdWdDLFNBQVN2ckMsS0FBS3VyQyxNQUFsQjtBQUNBLFNBQUk1d0IsUUFBUUUsS0FBS3RaLGVBQUwsSUFBd0JsSCxTQUFTdlksTUFBVCxDQUFnQmlqQyxZQUFwRDs7QUFFQSxTQUFJd21CLFVBQVU1d0IsS0FBVixJQUFtQi9WLE9BQU83aEIsTUFBOUIsRUFBc0M7QUFDckNtWCxjQUFReUIsTUFBUixDQUFleUksUUFBZixDQUF3QkMsR0FBeEIsRUFBNkIxRCxNQUFNMkQsU0FBbkM7QUFDQWduQyxhQUFPam5DLEdBQVAsRUFBWU8sTUFBWixFQUFvQjJtQyxNQUFwQixFQUE0QjF3QixJQUE1QixFQUFrQ0YsS0FBbEMsRUFBeUMySSxHQUFHbFUsS0FBNUM7QUFDQWxWLGNBQVF5QixNQUFSLENBQWU0SSxVQUFmLENBQTBCRixHQUExQjtBQUNBO0FBQ0Q7QUF6RGUsSUFBakI7QUE0REMsR0FoVStCLEVBZ1U5QixFQUFDLE1BQUssRUFBTixFQUFTLE1BQUssRUFBZCxFQUFpQixNQUFLLEVBQXRCLEVBaFU4QixDQXIxVnl4QixFQXFwVzV4QixJQUFHLENBQUMsVUFBUzdoQixPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDakU7O0FBRUEsT0FBSTRZLFdBQVc3WCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUk4WCxVQUFVOVgsUUFBUSxFQUFSLENBQWQ7QUFDQSxPQUFJMFgsVUFBVTFYLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSWlZLFVBQVVqWSxRQUFRLEVBQVIsQ0FBZDs7QUFFQSxPQUFJMGxCLE9BQU9oTyxRQUFRZ08sSUFBbkI7O0FBRUE3TixZQUFTaUMsSUFBVCxDQUFjLFFBQWQsRUFBd0I7QUFDdkJuQixZQUFRO0FBQ1A2UyxjQUFTLElBREY7QUFFUDlRLGVBQVUsS0FGSDtBQUdQb3FCLGdCQUFXLElBSEo7QUFJUEwsY0FBUyxLQUpGO0FBS1A3OEIsYUFBUSxJQUxEOztBQU9QO0FBQ0FtZCxjQUFTLGlCQUFTcmxCLENBQVQsRUFBWXNsQixVQUFaLEVBQXdCO0FBQ2hDLFVBQUk1YixRQUFRNGIsV0FBVzFKLFlBQXZCO0FBQ0EsVUFBSWt1QyxLQUFLLEtBQUtyckMsS0FBZDtBQUNBLFVBQUlYLE9BQU9nc0MsR0FBR2hwQyxjQUFILENBQWtCcFgsS0FBbEIsQ0FBWDs7QUFFQTtBQUNBb1UsV0FBS3NILE1BQUwsR0FBY3RILEtBQUtzSCxNQUFMLEtBQWdCLElBQWhCLEdBQXVCLENBQUMwa0MsR0FBR3h1QyxJQUFILENBQVFLLFFBQVIsQ0FBaUJqUyxLQUFqQixFQUF3QjBiLE1BQWhELEdBQXlELElBQXZFOztBQUVBO0FBQ0Ewa0MsU0FBRzNyQyxNQUFIO0FBQ0EsTUFsQk07O0FBb0JQbVksY0FBUyxJQXBCRjs7QUFzQlA5YSxhQUFRO0FBQ1B1dUMsZ0JBQVUsRUFESDtBQUVQbnBCLGVBQVMsRUFGRjtBQUdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQW5jLHNCQUFnQix3QkFBU2hHLEtBQVQsRUFBZ0I7QUFDL0IsV0FBSW5ELE9BQU9tRCxNQUFNbkQsSUFBakI7QUFDQSxjQUFPdEQsUUFBUTJOLE9BQVIsQ0FBZ0JySyxLQUFLSyxRQUFyQixJQUFpQ0wsS0FBS0ssUUFBTCxDQUFjK0ksR0FBZCxDQUFrQixVQUFTaEcsT0FBVCxFQUFrQnRlLENBQWxCLEVBQXFCO0FBQzlFLGVBQU87QUFDTm1rQixlQUFNN0YsUUFBUWpELEtBRFI7QUFFTndKLG9CQUFZLENBQUNqTixRQUFRMk4sT0FBUixDQUFnQmpILFFBQVFXLGVBQXhCLENBQUQsR0FBNENYLFFBQVFXLGVBQXBELEdBQXNFWCxRQUFRVyxlQUFSLENBQXdCLENBQXhCLENBRjVFO0FBR04rRixpQkFBUSxDQUFDM0csTUFBTXNDLGdCQUFOLENBQXVCM2dCLENBQXZCLENBSEg7QUFJTjI4QyxrQkFBU3IrQixRQUFRcUssY0FKWDtBQUtOaWhDLG1CQUFVdHJDLFFBQVFzSyxVQUxaO0FBTU4wb0IseUJBQWdCaHpCLFFBQVF1SyxnQkFObEI7QUFPTjB6QixtQkFBVWorQixRQUFRd0ssZUFQWjtBQVFOL0Qsb0JBQVd6RyxRQUFRYyxXQVJiO0FBU04wRixzQkFBYXhHLFFBQVFhLFdBVGY7QUFVTjhELHFCQUFZM0UsUUFBUTJFLFVBVmQ7O0FBWU47QUFDQXpILHVCQUFjeGI7QUFiUixTQUFQO0FBZUEsUUFoQnVDLEVBZ0JyQyxJQWhCcUMsQ0FBakMsR0FnQkksRUFoQlg7QUFpQkE7QUFqQ007QUF0QkQsS0FEZTs7QUE0RHZCa2tCLG9CQUFnQix3QkFBUzdGLEtBQVQsRUFBZ0I7QUFDL0IsU0FBSThGLE9BQU8sRUFBWDtBQUNBQSxVQUFLdEQsSUFBTCxDQUFVLGdCQUFnQnhDLE1BQU1rRCxFQUF0QixHQUEyQixXQUFyQztBQUNBLFVBQUssSUFBSXZoQixJQUFJLENBQWIsRUFBZ0JBLElBQUlxZSxNQUFNbkQsSUFBTixDQUFXSyxRQUFYLENBQW9COWEsTUFBeEMsRUFBZ0RULEdBQWhELEVBQXFEO0FBQ3BEbWtCLFdBQUt0RCxJQUFMLENBQVUsdUNBQXVDeEMsTUFBTW5ELElBQU4sQ0FBV0ssUUFBWCxDQUFvQnZiLENBQXBCLEVBQXVCaWYsZUFBOUQsR0FBZ0YsV0FBMUY7QUFDQSxVQUFJWixNQUFNbkQsSUFBTixDQUFXSyxRQUFYLENBQW9CdmIsQ0FBcEIsRUFBdUJxYixLQUEzQixFQUFrQztBQUNqQzhJLFlBQUt0RCxJQUFMLENBQVV4QyxNQUFNbkQsSUFBTixDQUFXSyxRQUFYLENBQW9CdmIsQ0FBcEIsRUFBdUJxYixLQUFqQztBQUNBO0FBQ0Q4SSxXQUFLdEQsSUFBTCxDQUFVLE9BQVY7QUFDQTtBQUNEc0QsVUFBS3RELElBQUwsQ0FBVSxPQUFWO0FBQ0EsWUFBT3NELEtBQUtDLElBQUwsQ0FBVSxFQUFWLENBQVA7QUFDQTtBQXhFc0IsSUFBeEI7O0FBMkVBOzs7Ozs7QUFNQSxZQUFTeWxDLFdBQVQsQ0FBcUJDLFNBQXJCLEVBQWdDemYsUUFBaEMsRUFBMEM7QUFDekMsV0FBT3lmLFVBQVVDLGFBQVYsR0FDTjFmLFdBQVdqb0MsS0FBS3M4QyxLQURWLEdBRU5vTCxVQUFVSCxRQUZYO0FBR0E7O0FBRUQ7OztBQUdBLE9BQUkvd0MsU0FBU1osUUFBUW1CLE1BQVIsQ0FBZTs7QUFFM0JSLGdCQUFZLG9CQUFTYyxNQUFULEVBQWlCO0FBQzVCN0IsYUFBUXVCLE1BQVIsQ0FBZSxJQUFmLEVBQXFCTSxNQUFyQjs7QUFFQTtBQUNBLFVBQUt1d0MsY0FBTCxHQUFzQixFQUF0Qjs7QUFFQTtBQUNBLFVBQUtDLFlBQUwsR0FBb0IsS0FBcEI7QUFDQSxLQVYwQjs7QUFZM0I7QUFDQTtBQUNBOztBQUVBdmYsa0JBQWM5a0IsSUFoQmE7QUFpQjNCN0gsWUFBUSxnQkFBUzRzQixRQUFULEVBQW1CQyxTQUFuQixFQUE4QkMsT0FBOUIsRUFBdUM7QUFDOUMsU0FBSXB0QixLQUFLLElBQVQ7O0FBRUE7QUFDQUEsUUFBR2l0QixZQUFIOztBQUVBO0FBQ0FqdEIsUUFBR2t0QixRQUFILEdBQWNBLFFBQWQ7QUFDQWx0QixRQUFHbXRCLFNBQUgsR0FBZUEsU0FBZjtBQUNBbnRCLFFBQUdvdEIsT0FBSCxHQUFhQSxPQUFiOztBQUVBO0FBQ0FwdEIsUUFBR3N0QixtQkFBSDtBQUNBdHRCLFFBQUd1dEIsYUFBSDtBQUNBdnRCLFFBQUd3dEIsa0JBQUg7QUFDQTtBQUNBeHRCLFFBQUd5c0MsaUJBQUg7QUFDQXpzQyxRQUFHMHNDLFdBQUg7QUFDQTFzQyxRQUFHMnNDLGdCQUFIOztBQUVBO0FBQ0Ezc0MsUUFBR3F1QixTQUFIO0FBQ0FydUIsUUFBR3N1QixHQUFIO0FBQ0F0dUIsUUFBR3V1QixRQUFIO0FBQ0E7QUFDQXZ1QixRQUFHd3VCLFdBQUg7O0FBRUEsWUFBT3h1QixHQUFHNEksT0FBVjtBQUNBLEtBN0MwQjtBQThDM0I0bEIsaUJBQWFybUIsSUE5Q2M7O0FBZ0QzQjs7QUFFQW1sQix5QkFBcUJubEIsSUFsRE07QUFtRDNCb2xCLG1CQUFlLHlCQUFXO0FBQ3pCLFNBQUl2dEIsS0FBSyxJQUFUO0FBQ0E7QUFDQSxTQUFJQSxHQUFHN0IsWUFBSCxFQUFKLEVBQXVCO0FBQ3RCO0FBQ0E2QixTQUFHNUIsS0FBSCxHQUFXNEIsR0FBR2t0QixRQUFkO0FBQ0FsdEIsU0FBR3VELElBQUgsR0FBVSxDQUFWO0FBQ0F2RCxTQUFHeUksS0FBSCxHQUFXekksR0FBRzVCLEtBQWQ7QUFDQSxNQUxELE1BS087QUFDTjRCLFNBQUczQixNQUFILEdBQVkyQixHQUFHbXRCLFNBQWY7O0FBRUE7QUFDQW50QixTQUFHd0QsR0FBSCxHQUFTLENBQVQ7QUFDQXhELFNBQUcySSxNQUFILEdBQVkzSSxHQUFHM0IsTUFBZjtBQUNBOztBQUVEO0FBQ0EyQixRQUFHaWhCLFdBQUgsR0FBaUIsQ0FBakI7QUFDQWpoQixRQUFHbWhCLFVBQUgsR0FBZ0IsQ0FBaEI7QUFDQW5oQixRQUFHb2hCLFlBQUgsR0FBa0IsQ0FBbEI7QUFDQXBoQixRQUFHcWhCLGFBQUgsR0FBbUIsQ0FBbkI7O0FBRUE7QUFDQXJoQixRQUFHNEksT0FBSCxHQUFhO0FBQ1p4SyxhQUFPLENBREs7QUFFWkMsY0FBUTtBQUZJLE1BQWI7QUFJQSxLQTlFMEI7QUErRTNCbXZCLHdCQUFvQnJsQixJQS9FTzs7QUFpRjNCOztBQUVBc2tDLHVCQUFtQnRrQyxJQW5GUTtBQW9GM0J1a0MsaUJBQWEsdUJBQVc7QUFDdkIsU0FBSTFzQyxLQUFLLElBQVQ7QUFDQSxTQUFJcXNDLFlBQVlyc0MsR0FBR2xCLE9BQUgsQ0FBV25CLE1BQVgsSUFBcUIsRUFBckM7QUFDQSxTQUFJaXZDLGNBQWN6eUMsUUFBUXVYLFFBQVIsQ0FBaUIyNkIsVUFBVXpsQyxjQUEzQixFQUEyQyxDQUFDNUcsR0FBR1ksS0FBSixDQUEzQyxFQUF1RFosRUFBdkQsS0FBOEQsRUFBaEY7O0FBRUEsU0FBSXFzQyxVQUFVdi9CLE1BQWQsRUFBc0I7QUFDckI4L0Isb0JBQWNBLFlBQVk5L0IsTUFBWixDQUFtQixVQUFTdFAsSUFBVCxFQUFlO0FBQy9DLGNBQU82dUMsVUFBVXYvQixNQUFWLENBQWlCdFAsSUFBakIsRUFBdUJ3QyxHQUFHWSxLQUFILENBQVNuRCxJQUFoQyxDQUFQO0FBQ0EsT0FGYSxDQUFkO0FBR0E7O0FBRUQsU0FBSXVDLEdBQUdsQixPQUFILENBQVdvb0IsT0FBZixFQUF3QjtBQUN2QjBsQixrQkFBWTFsQixPQUFaO0FBQ0E7O0FBRURsbkIsUUFBRzRzQyxXQUFILEdBQWlCQSxXQUFqQjtBQUNBLEtBcEcwQjtBQXFHM0JELHNCQUFrQnhrQyxJQXJHUzs7QUF1RzNCOztBQUVBa21CLGVBQVdsbUIsSUF6R2dCO0FBMEczQm1tQixTQUFLLGVBQVc7QUFDZixTQUFJdHVCLEtBQUssSUFBVDtBQUNBLFNBQUl1SSxPQUFPdkksR0FBR2xCLE9BQWQ7QUFDQSxTQUFJdXRDLFlBQVk5akMsS0FBSzVLLE1BQXJCO0FBQ0EsU0FBSXNRLFVBQVUxRixLQUFLMEYsT0FBbkI7O0FBRUEsU0FBSTNKLE1BQU10RSxHQUFHc0UsR0FBYjs7QUFFQSxTQUFJdW9DLGdCQUFnQnZ5QyxTQUFTdlksTUFBN0I7QUFDQSxTQUFJa2lCLGlCQUFpQjlKLFFBQVE4SixjQUE3QjtBQUNBLFNBQUkyb0IsV0FBVzNvQixlQUFlb29DLFVBQVV6ZixRQUF6QixFQUFtQ2lnQixjQUFjaG1CLGVBQWpELENBQWY7QUFDQSxTQUFJOUMsWUFBWTlmLGVBQWVvb0MsVUFBVXRvQixTQUF6QixFQUFvQzhvQixjQUFjL2xCLGdCQUFsRCxDQUFoQjtBQUNBLFNBQUk5QyxhQUFhL2YsZUFBZW9vQyxVQUFVcm9CLFVBQXpCLEVBQXFDNm9CLGNBQWNqbUIsaUJBQW5ELENBQWpCO0FBQ0EsU0FBSWttQixZQUFZM3lDLFFBQVEwcEIsVUFBUixDQUFtQitJLFFBQW5CLEVBQTZCN0ksU0FBN0IsRUFBd0NDLFVBQXhDLENBQWhCOztBQUVBO0FBQ0EsU0FBSStvQixXQUFXL3NDLEdBQUd1c0MsY0FBSCxHQUFvQixFQUFuQzs7QUFFQSxTQUFJM2pDLFVBQVU1SSxHQUFHNEksT0FBakI7QUFDQSxTQUFJekssZUFBZTZCLEdBQUc3QixZQUFILEVBQW5COztBQUVBLFNBQUlBLFlBQUosRUFBa0I7QUFDakJ5SyxjQUFReEssS0FBUixHQUFnQjRCLEdBQUdrdEIsUUFBbkIsQ0FEaUIsQ0FDWTtBQUM3QnRrQixjQUFRdkssTUFBUixHQUFpQjRQLFVBQVUsRUFBVixHQUFlLENBQWhDO0FBQ0EsTUFIRCxNQUdPO0FBQ05yRixjQUFReEssS0FBUixHQUFnQjZQLFVBQVUsRUFBVixHQUFlLENBQS9CO0FBQ0FyRixjQUFRdkssTUFBUixHQUFpQjJCLEdBQUdtdEIsU0FBcEIsQ0FGTSxDQUV5QjtBQUMvQjs7QUFFRDtBQUNBLFNBQUlsZixPQUFKLEVBQWE7QUFDWjNKLFVBQUk0ZixJQUFKLEdBQVc0b0IsU0FBWDs7QUFFQSxVQUFJM3VDLFlBQUosRUFBa0I7QUFDakI7O0FBRUE7QUFDQSxXQUFJNnVDLGFBQWFodEMsR0FBR2d0QyxVQUFILEdBQWdCLENBQUMsQ0FBRCxDQUFqQztBQUNBLFdBQUlDLGNBQWNqdEMsR0FBRzRzQyxXQUFILENBQWU1cEQsTUFBZixHQUF3QjRwQyxXQUFZeWYsVUFBVXRwQixPQUE5QyxHQUF5RCxDQUEzRTs7QUFFQXplLFdBQUl5dUIsU0FBSixHQUFnQixNQUFoQjtBQUNBenVCLFdBQUkwdUIsWUFBSixHQUFtQixLQUFuQjs7QUFFQTc0QixlQUFRMkssSUFBUixDQUFhOUUsR0FBRzRzQyxXQUFoQixFQUE2QixVQUFTbmxDLFVBQVQsRUFBcUJsbEIsQ0FBckIsRUFBd0I7QUFDcEQsWUFBSTJwRCxXQUFXRSxZQUFZQyxTQUFaLEVBQXVCemYsUUFBdkIsQ0FBZjtBQUNBLFlBQUl4dUIsUUFBUTh0QyxXQUFZdGYsV0FBVyxDQUF2QixHQUE0QnRvQixJQUFJbWdCLFdBQUosQ0FBZ0JoZCxXQUFXZixJQUEzQixFQUFpQ3RJLEtBQXpFOztBQUVBLFlBQUk0dUMsV0FBV0EsV0FBV2hxRCxNQUFYLEdBQW9CLENBQS9CLElBQW9Db2IsS0FBcEMsR0FBNENpdUMsVUFBVXRwQixPQUF0RCxJQUFpRS9pQixHQUFHNUIsS0FBeEUsRUFBK0U7QUFDOUU2dUMsd0JBQWVyZ0IsV0FBWXlmLFVBQVV0cEIsT0FBckM7QUFDQWlxQixvQkFBV0EsV0FBV2hxRCxNQUF0QixJQUFnQ2dkLEdBQUd1RCxJQUFuQztBQUNBOztBQUVEO0FBQ0F3cEMsaUJBQVN4cUQsQ0FBVCxJQUFjO0FBQ2JnaEIsZUFBTSxDQURPO0FBRWJDLGNBQUssQ0FGUTtBQUdicEYsZ0JBQU9BLEtBSE07QUFJYkMsaUJBQVF1dUI7QUFKSyxTQUFkOztBQU9Bb2dCLG1CQUFXQSxXQUFXaHFELE1BQVgsR0FBb0IsQ0FBL0IsS0FBcUNvYixRQUFRaXVDLFVBQVV0cEIsT0FBdkQ7QUFDQSxRQWxCRDs7QUFvQkFuYSxlQUFRdkssTUFBUixJQUFrQjR1QyxXQUFsQjtBQUVBLE9BaENELE1BZ0NPO0FBQ04sV0FBSUMsV0FBV2IsVUFBVXRwQixPQUF6QjtBQUNBLFdBQUlvcUIsZUFBZW50QyxHQUFHbXRDLFlBQUgsR0FBa0IsRUFBckM7QUFDQSxXQUFJQyxhQUFhZixVQUFVdHBCLE9BQTNCO0FBQ0EsV0FBSXNxQixrQkFBa0IsQ0FBdEI7QUFDQSxXQUFJQyxtQkFBbUIsQ0FBdkI7QUFDQSxXQUFJQyxhQUFhM2dCLFdBQVdzZ0IsUUFBNUI7O0FBRUEveUMsZUFBUTJLLElBQVIsQ0FBYTlFLEdBQUc0c0MsV0FBaEIsRUFBNkIsVUFBU25sQyxVQUFULEVBQXFCbGxCLENBQXJCLEVBQXdCO0FBQ3BELFlBQUkycEQsV0FBV0UsWUFBWUMsU0FBWixFQUF1QnpmLFFBQXZCLENBQWY7QUFDQSxZQUFJNGdCLFlBQVl0QixXQUFZdGYsV0FBVyxDQUF2QixHQUE0QnRvQixJQUFJbWdCLFdBQUosQ0FBZ0JoZCxXQUFXZixJQUEzQixFQUFpQ3RJLEtBQTdFOztBQUVBO0FBQ0EsWUFBSWt2QyxtQkFBbUJDLFVBQW5CLEdBQWdDM2tDLFFBQVF2SyxNQUE1QyxFQUFvRDtBQUNuRCt1Qyx1QkFBY0Msa0JBQWtCaEIsVUFBVXRwQixPQUExQztBQUNBb3FCLHNCQUFhL3BDLElBQWIsQ0FBa0JpcUMsZUFBbEIsRUFGbUQsQ0FFZjs7QUFFcENBLDJCQUFrQixDQUFsQjtBQUNBQyw0QkFBbUIsQ0FBbkI7QUFDQTs7QUFFRDtBQUNBRCwwQkFBa0Ixb0QsS0FBS21CLEdBQUwsQ0FBU3VuRCxlQUFULEVBQTBCRyxTQUExQixDQUFsQjtBQUNBRiw0QkFBb0JDLFVBQXBCOztBQUVBO0FBQ0FSLGlCQUFTeHFELENBQVQsSUFBYztBQUNiZ2hCLGVBQU0sQ0FETztBQUViQyxjQUFLLENBRlE7QUFHYnBGLGdCQUFPb3ZDLFNBSE07QUFJYm52QyxpQkFBUXV1QjtBQUpLLFNBQWQ7QUFNQSxRQXhCRDs7QUEwQkF3Z0IscUJBQWNDLGVBQWQ7QUFDQUYsb0JBQWEvcEMsSUFBYixDQUFrQmlxQyxlQUFsQjtBQUNBemtDLGVBQVF4SyxLQUFSLElBQWlCZ3ZDLFVBQWpCO0FBQ0E7QUFDRDs7QUFFRHB0QyxRQUFHNUIsS0FBSCxHQUFXd0ssUUFBUXhLLEtBQW5CO0FBQ0E0QixRQUFHM0IsTUFBSCxHQUFZdUssUUFBUXZLLE1BQXBCO0FBQ0EsS0FyTjBCO0FBc04zQmt3QixjQUFVcG1CLElBdE5pQjs7QUF3TjNCO0FBQ0FoSyxrQkFBYyx3QkFBVztBQUN4QixZQUFPLEtBQUtXLE9BQUwsQ0FBYTNCLFFBQWIsS0FBMEIsS0FBMUIsSUFBbUMsS0FBSzJCLE9BQUwsQ0FBYTNCLFFBQWIsS0FBMEIsUUFBcEU7QUFDQSxLQTNOMEI7O0FBNk4zQjtBQUNBaUgsVUFBTSxnQkFBVztBQUNoQixTQUFJcEUsS0FBSyxJQUFUO0FBQ0EsU0FBSXVJLE9BQU92SSxHQUFHbEIsT0FBZDtBQUNBLFNBQUl1dEMsWUFBWTlqQyxLQUFLNUssTUFBckI7QUFDQSxTQUFJa3ZDLGdCQUFnQnZ5QyxTQUFTdlksTUFBN0I7QUFDQSxTQUFJMHJELGNBQWNaLGNBQWNyeUMsUUFBZCxDQUF1Qm1RLElBQXpDO0FBQ0EsU0FBSStpQyxjQUFjMXRDLEdBQUc1QixLQUFyQjtBQUNBLFNBQUk0dUMsYUFBYWh0QyxHQUFHZ3RDLFVBQXBCOztBQUVBLFNBQUl6a0MsS0FBSzBGLE9BQVQsRUFBa0I7QUFDakIsVUFBSTNKLE1BQU10RSxHQUFHc0UsR0FBYjtBQUNBLFVBQUlMLGlCQUFpQjlKLFFBQVE4SixjQUE3QjtBQUNBLFVBQUl1dEIsWUFBWXZ0QixlQUFlb29DLFVBQVU3YSxTQUF6QixFQUFvQ3FiLGNBQWNsbUIsZ0JBQWxELENBQWhCO0FBQ0EsVUFBSWlHLFdBQVczb0IsZUFBZW9vQyxVQUFVemYsUUFBekIsRUFBbUNpZ0IsY0FBY2htQixlQUFqRCxDQUFmO0FBQ0EsVUFBSTlDLFlBQVk5ZixlQUFlb29DLFVBQVV0b0IsU0FBekIsRUFBb0M4b0IsY0FBYy9sQixnQkFBbEQsQ0FBaEI7QUFDQSxVQUFJOUMsYUFBYS9mLGVBQWVvb0MsVUFBVXJvQixVQUF6QixFQUFxQzZvQixjQUFjam1CLGlCQUFuRCxDQUFqQjtBQUNBLFVBQUlrbUIsWUFBWTN5QyxRQUFRMHBCLFVBQVIsQ0FBbUIrSSxRQUFuQixFQUE2QjdJLFNBQTdCLEVBQXdDQyxVQUF4QyxDQUFoQjtBQUNBLFVBQUkycEIsTUFBSjs7QUFFQTtBQUNBcnBDLFVBQUl5dUIsU0FBSixHQUFnQixNQUFoQjtBQUNBenVCLFVBQUkwdUIsWUFBSixHQUFtQixRQUFuQjtBQUNBMXVCLFVBQUlnRCxTQUFKLEdBQWdCLEdBQWhCO0FBQ0FoRCxVQUFJK0MsV0FBSixHQUFrQm1xQixTQUFsQixDQWRpQixDQWNZO0FBQzdCbHRCLFVBQUk4QyxTQUFKLEdBQWdCb3FCLFNBQWhCLENBZmlCLENBZVU7QUFDM0JsdEIsVUFBSTRmLElBQUosR0FBVzRvQixTQUFYOztBQUVBLFVBQUlaLFdBQVdFLFlBQVlDLFNBQVosRUFBdUJ6ZixRQUF2QixDQUFmO0FBQ0EsVUFBSW1nQixXQUFXL3NDLEdBQUd1c0MsY0FBbEI7O0FBRUE7QUFDQSxVQUFJcUIsZ0JBQWdCLFNBQWhCQSxhQUFnQixDQUFTMStDLENBQVQsRUFBWUwsQ0FBWixFQUFlNFksVUFBZixFQUEyQjtBQUM5QyxXQUFJdGlCLE1BQU0rbUQsUUFBTixLQUFtQkEsWUFBWSxDQUFuQyxFQUFzQztBQUNyQztBQUNBOztBQUVEO0FBQ0E1bkMsV0FBSXF2QixJQUFKOztBQUVBcnZCLFdBQUk4QyxTQUFKLEdBQWdCbkQsZUFBZXdELFdBQVdMLFNBQTFCLEVBQXFDeWxDLGNBQWM3bkIsWUFBbkQsQ0FBaEI7QUFDQTFnQixXQUFJNDZCLE9BQUosR0FBY2o3QixlQUFld0QsV0FBV3kzQixPQUExQixFQUFtQ3VPLFlBQVl2aUMsY0FBL0MsQ0FBZDtBQUNBNUcsV0FBSXV2QixjQUFKLEdBQXFCNXZCLGVBQWV3RCxXQUFXb3NCLGNBQTFCLEVBQTBDNFosWUFBWXJpQyxnQkFBdEQsQ0FBckI7QUFDQTlHLFdBQUl3NkIsUUFBSixHQUFlNzZCLGVBQWV3RCxXQUFXcTNCLFFBQTFCLEVBQW9DMk8sWUFBWXBpQyxlQUFoRCxDQUFmO0FBQ0EvRyxXQUFJZ0QsU0FBSixHQUFnQnJELGVBQWV3RCxXQUFXSCxTQUExQixFQUFxQ21tQyxZQUFZOXJDLFdBQWpELENBQWhCO0FBQ0EyQyxXQUFJK0MsV0FBSixHQUFrQnBELGVBQWV3RCxXQUFXSixXQUExQixFQUF1Q3dsQyxjQUFjN25CLFlBQXJELENBQWxCO0FBQ0EsV0FBSTZvQixrQkFBbUI1cEMsZUFBZXdELFdBQVdILFNBQTFCLEVBQXFDbW1DLFlBQVk5ckMsV0FBakQsTUFBa0UsQ0FBekY7O0FBRUEsV0FBSTJDLElBQUlzdkIsV0FBUixFQUFxQjtBQUNwQjtBQUNBdHZCLFlBQUlzdkIsV0FBSixDQUFnQjN2QixlQUFld0QsV0FBVzBrQyxRQUExQixFQUFvQ3NCLFlBQVl0aUMsVUFBaEQsQ0FBaEI7QUFDQTs7QUFFRCxXQUFJNUMsS0FBSzVLLE1BQUwsSUFBZTRLLEtBQUs1SyxNQUFMLENBQVkydUMsYUFBL0IsRUFBOEM7QUFDN0M7QUFDQTtBQUNBLFlBQUk1bUMsU0FBU2tuQixXQUFXam9DLEtBQUtzOEMsS0FBaEIsR0FBd0IsQ0FBckM7QUFDQSxZQUFJNk0sU0FBU3BvQyxTQUFTL2dCLEtBQUtzOEMsS0FBM0I7QUFDQSxZQUFJbjNCLFVBQVU1YSxJQUFJNCtDLE1BQWxCO0FBQ0EsWUFBSS9qQyxVQUFVbGIsSUFBSWkvQyxNQUFsQjs7QUFFQTtBQUNBM3pDLGdCQUFReUIsTUFBUixDQUFlMGpDLFNBQWYsQ0FBeUJoN0IsR0FBekIsRUFBOEJtRCxXQUFXakMsVUFBekMsRUFBcURFLE1BQXJELEVBQTZEb0UsT0FBN0QsRUFBc0VDLE9BQXRFO0FBQ0EsUUFWRCxNQVVPO0FBQ047QUFDQSxZQUFJLENBQUM4akMsZUFBTCxFQUFzQjtBQUNyQnZwQyxhQUFJczVCLFVBQUosQ0FBZTF1QyxDQUFmLEVBQWtCTCxDQUFsQixFQUFxQnE5QyxRQUFyQixFQUErQnRmLFFBQS9CO0FBQ0E7QUFDRHRvQixZQUFJcTVCLFFBQUosQ0FBYXp1QyxDQUFiLEVBQWdCTCxDQUFoQixFQUFtQnE5QyxRQUFuQixFQUE2QnRmLFFBQTdCO0FBQ0E7O0FBRUR0b0IsV0FBSTJ2QixPQUFKO0FBQ0EsT0F4Q0Q7QUF5Q0EsVUFBSUcsV0FBVyxTQUFYQSxRQUFXLENBQVNsbEMsQ0FBVCxFQUFZTCxDQUFaLEVBQWU0WSxVQUFmLEVBQTJCbWQsU0FBM0IsRUFBc0M7QUFDcEQsV0FBSW1wQixlQUFlbmhCLFdBQVcsQ0FBOUI7QUFDQSxXQUFJb2hCLFFBQVE5QixXQUFXNkIsWUFBWCxHQUEwQjcrQyxDQUF0QztBQUNBLFdBQUkrK0MsVUFBVXAvQyxJQUFJay9DLFlBQWxCOztBQUVBenBDLFdBQUk4dkIsUUFBSixDQUFhM3NCLFdBQVdmLElBQXhCLEVBQThCc25DLEtBQTlCLEVBQXFDQyxPQUFyQzs7QUFFQSxXQUFJeG1DLFdBQVdGLE1BQWYsRUFBdUI7QUFDdEI7QUFDQWpELFlBQUl3dkIsU0FBSjtBQUNBeHZCLFlBQUlnRCxTQUFKLEdBQWdCLENBQWhCO0FBQ0FoRCxZQUFJeXZCLE1BQUosQ0FBV2lhLEtBQVgsRUFBa0JDLE9BQWxCO0FBQ0EzcEMsWUFBSTB2QixNQUFKLENBQVdnYSxRQUFRcHBCLFNBQW5CLEVBQThCcXBCLE9BQTlCO0FBQ0EzcEMsWUFBSTRDLE1BQUo7QUFDQTtBQUNELE9BZkQ7O0FBaUJBO0FBQ0EsVUFBSS9JLGVBQWU2QixHQUFHN0IsWUFBSCxFQUFuQjtBQUNBLFVBQUlBLFlBQUosRUFBa0I7QUFDakJ3dkMsZ0JBQVM7QUFDUnorQyxXQUFHOFEsR0FBR3VELElBQUgsR0FBVyxDQUFDbXFDLGNBQWNWLFdBQVcsQ0FBWCxDQUFmLElBQWdDLENBRHRDO0FBRVJuK0MsV0FBR21SLEdBQUd3RCxHQUFILEdBQVM2b0MsVUFBVXRwQixPQUZkO0FBR1JwWSxjQUFNO0FBSEUsUUFBVDtBQUtBLE9BTkQsTUFNTztBQUNOZ2pDLGdCQUFTO0FBQ1J6K0MsV0FBRzhRLEdBQUd1RCxJQUFILEdBQVU4b0MsVUFBVXRwQixPQURmO0FBRVJsMEIsV0FBR21SLEdBQUd3RCxHQUFILEdBQVM2b0MsVUFBVXRwQixPQUZkO0FBR1JwWSxjQUFNO0FBSEUsUUFBVDtBQUtBOztBQUVELFVBQUk0aUMsYUFBYTNnQixXQUFXeWYsVUFBVXRwQixPQUF0QztBQUNBNW9CLGNBQVEySyxJQUFSLENBQWE5RSxHQUFHNHNDLFdBQWhCLEVBQTZCLFVBQVNubEMsVUFBVCxFQUFxQmxsQixDQUFyQixFQUF3QjtBQUNwRCxXQUFJcWlDLFlBQVl0Z0IsSUFBSW1nQixXQUFKLENBQWdCaGQsV0FBV2YsSUFBM0IsRUFBaUN0SSxLQUFqRDtBQUNBLFdBQUlBLFFBQVE4dEMsV0FBWXRmLFdBQVcsQ0FBdkIsR0FBNEJoSSxTQUF4QztBQUNBLFdBQUkxMUIsSUFBSXkrQyxPQUFPeitDLENBQWY7QUFDQSxXQUFJTCxJQUFJOCtDLE9BQU85K0MsQ0FBZjs7QUFFQSxXQUFJc1AsWUFBSixFQUFrQjtBQUNqQixZQUFJalAsSUFBSWtQLEtBQUosSUFBYXN2QyxXQUFqQixFQUE4QjtBQUM3QjcrQyxhQUFJOCtDLE9BQU85K0MsQ0FBUCxJQUFZMCtDLFVBQWhCO0FBQ0FJLGdCQUFPaGpDLElBQVA7QUFDQXpiLGFBQUl5K0MsT0FBT3orQyxDQUFQLEdBQVc4USxHQUFHdUQsSUFBSCxHQUFXLENBQUNtcUMsY0FBY1YsV0FBV1csT0FBT2hqQyxJQUFsQixDQUFmLElBQTBDLENBQXBFO0FBQ0E7QUFDRCxRQU5ELE1BTU8sSUFBSTliLElBQUkwK0MsVUFBSixHQUFpQnZ0QyxHQUFHMkksTUFBeEIsRUFBZ0M7QUFDdEN6WixZQUFJeStDLE9BQU96K0MsQ0FBUCxHQUFXQSxJQUFJOFEsR0FBR210QyxZQUFILENBQWdCUSxPQUFPaGpDLElBQXZCLENBQUosR0FBbUMwaEMsVUFBVXRwQixPQUE1RDtBQUNBbDBCLFlBQUk4K0MsT0FBTzkrQyxDQUFQLEdBQVdtUixHQUFHd0QsR0FBSCxHQUFTNm9DLFVBQVV0cEIsT0FBbEM7QUFDQTRxQixlQUFPaGpDLElBQVA7QUFDQTs7QUFFRGlqQyxxQkFBYzErQyxDQUFkLEVBQWlCTCxDQUFqQixFQUFvQjRZLFVBQXBCOztBQUVBc2xDLGdCQUFTeHFELENBQVQsRUFBWWdoQixJQUFaLEdBQW1CclUsQ0FBbkI7QUFDQTY5QyxnQkFBU3hxRCxDQUFULEVBQVlpaEIsR0FBWixHQUFrQjNVLENBQWxCOztBQUVBO0FBQ0F1bEMsZ0JBQVNsbEMsQ0FBVCxFQUFZTCxDQUFaLEVBQWU0WSxVQUFmLEVBQTJCbWQsU0FBM0I7O0FBRUEsV0FBSXptQixZQUFKLEVBQWtCO0FBQ2pCd3ZDLGVBQU96K0MsQ0FBUCxJQUFZa1AsUUFBU2l1QyxVQUFVdHBCLE9BQS9CO0FBQ0EsUUFGRCxNQUVPO0FBQ040cUIsZUFBTzkrQyxDQUFQLElBQVkwK0MsVUFBWjtBQUNBO0FBRUQsT0FoQ0Q7QUFpQ0E7QUFDRCxLQTFXMEI7O0FBNFczQjs7Ozs7O0FBTUFwMUIsaUJBQWEscUJBQVNoMkIsQ0FBVCxFQUFZO0FBQ3hCLFNBQUk2ZCxLQUFLLElBQVQ7QUFDQSxTQUFJdUksT0FBT3ZJLEdBQUdsQixPQUFkO0FBQ0EsU0FBSWhVLE9BQU8zSSxFQUFFMkksSUFBRixLQUFXLFNBQVgsR0FBdUIsT0FBdkIsR0FBaUMzSSxFQUFFMkksSUFBOUM7QUFDQSxTQUFJb3RCLFVBQVUsS0FBZDs7QUFFQSxTQUFJcHRCLFNBQVMsV0FBYixFQUEwQjtBQUN6QixVQUFJLENBQUN5ZCxLQUFLa1EsT0FBVixFQUFtQjtBQUNsQjtBQUNBO0FBQ0QsTUFKRCxNQUlPLElBQUkzdEIsU0FBUyxPQUFiLEVBQXNCO0FBQzVCLFVBQUksQ0FBQ3lkLEtBQUtmLE9BQVYsRUFBbUI7QUFDbEI7QUFDQTtBQUNELE1BSk0sTUFJQTtBQUNOO0FBQ0E7O0FBRUQ7QUFDQSxTQUFJdFksSUFBSS9NLEVBQUUrTSxDQUFWO0FBQ0EsU0FBSUwsSUFBSTFNLEVBQUUwTSxDQUFWOztBQUVBLFNBQUlLLEtBQUs4USxHQUFHdUQsSUFBUixJQUFnQnJVLEtBQUs4USxHQUFHeUksS0FBeEIsSUFBaUM1WixLQUFLbVIsR0FBR3dELEdBQXpDLElBQWdEM1UsS0FBS21SLEdBQUcySSxNQUE1RCxFQUFvRTtBQUNuRTtBQUNBLFVBQUl1bEMsS0FBS2x1QyxHQUFHdXNDLGNBQVo7QUFDQSxXQUFLLElBQUlocUQsSUFBSSxDQUFiLEVBQWdCQSxJQUFJMnJELEdBQUdsckQsTUFBdkIsRUFBK0IsRUFBRVQsQ0FBakMsRUFBb0M7QUFDbkMsV0FBSTRyRCxTQUFTRCxHQUFHM3JELENBQUgsQ0FBYjs7QUFFQSxXQUFJMk0sS0FBS2kvQyxPQUFPNXFDLElBQVosSUFBb0JyVSxLQUFLaS9DLE9BQU81cUMsSUFBUCxHQUFjNHFDLE9BQU8vdkMsS0FBOUMsSUFBdUR2UCxLQUFLcy9DLE9BQU8zcUMsR0FBbkUsSUFBMEUzVSxLQUFLcy9DLE9BQU8zcUMsR0FBUCxHQUFhMnFDLE9BQU85dkMsTUFBdkcsRUFBK0c7QUFDOUc7QUFDQSxZQUFJdlQsU0FBUyxPQUFiLEVBQXNCO0FBQ3JCO0FBQ0F5ZCxjQUFLZixPQUFMLENBQWF6a0IsSUFBYixDQUFrQmlkLEVBQWxCLEVBQXNCN2QsRUFBRXUyQixNQUF4QixFQUFnQzFZLEdBQUc0c0MsV0FBSCxDQUFlcnFELENBQWYsQ0FBaEM7QUFDQTIxQixtQkFBVSxJQUFWO0FBQ0E7QUFDQSxTQUxELE1BS08sSUFBSXB0QixTQUFTLFdBQWIsRUFBMEI7QUFDaEM7QUFDQXlkLGNBQUtrUSxPQUFMLENBQWExMUIsSUFBYixDQUFrQmlkLEVBQWxCLEVBQXNCN2QsRUFBRXUyQixNQUF4QixFQUFnQzFZLEdBQUc0c0MsV0FBSCxDQUFlcnFELENBQWYsQ0FBaEM7QUFDQTIxQixtQkFBVSxJQUFWO0FBQ0E7QUFDQTtBQUNEO0FBQ0Q7QUFDRDs7QUFFRCxZQUFPQSxPQUFQO0FBQ0E7QUFoYTBCLElBQWYsQ0FBYjs7QUFtYUEsWUFBU2syQix3QkFBVCxDQUFrQ3h0QyxLQUFsQyxFQUF5Q3l0QyxVQUF6QyxFQUFxRDtBQUNwRCxRQUFJanpDLFNBQVMsSUFBSUQsTUFBSixDQUFXO0FBQ3ZCbUosVUFBSzFELE1BQU0wRCxHQURZO0FBRXZCeEYsY0FBU3V2QyxVQUZjO0FBR3ZCenRDLFlBQU9BO0FBSGdCLEtBQVgsQ0FBYjs7QUFNQWxHLFlBQVErc0IsU0FBUixDQUFrQjdtQixLQUFsQixFQUF5QnhGLE1BQXpCLEVBQWlDaXpDLFVBQWpDO0FBQ0EzekMsWUFBUTRzQixNQUFSLENBQWUxbUIsS0FBZixFQUFzQnhGLE1BQXRCO0FBQ0F3RixVQUFNeEYsTUFBTixHQUFlQSxNQUFmO0FBQ0E7O0FBRUR6WixVQUFPRCxPQUFQLEdBQWlCO0FBQ2hCb2lCLFFBQUksUUFEWTs7QUFHaEI7Ozs7Ozs7QUFPQXpJLGNBQVVGLE1BVk07O0FBWWhCbXpDLGdCQUFZLG9CQUFTMXRDLEtBQVQsRUFBZ0I7QUFDM0IsU0FBSXl0QyxhQUFhenRDLE1BQU05QixPQUFOLENBQWMxRCxNQUEvQjs7QUFFQSxTQUFJaXpDLFVBQUosRUFBZ0I7QUFDZkQsK0JBQXlCeHRDLEtBQXpCLEVBQWdDeXRDLFVBQWhDO0FBQ0E7QUFDRCxLQWxCZTs7QUFvQmhCcGhCLGtCQUFjLHNCQUFTcnNCLEtBQVQsRUFBZ0I7QUFDN0IsU0FBSXl0QyxhQUFhenRDLE1BQU05QixPQUFOLENBQWMxRCxNQUEvQjtBQUNBLFNBQUlBLFNBQVN3RixNQUFNeEYsTUFBbkI7O0FBRUEsU0FBSWl6QyxVQUFKLEVBQWdCO0FBQ2ZsMEMsY0FBUStuQyxPQUFSLENBQWdCbU0sVUFBaEIsRUFBNEIvekMsU0FBU3ZZLE1BQVQsQ0FBZ0JxWixNQUE1Qzs7QUFFQSxVQUFJQSxNQUFKLEVBQVk7QUFDWFYsZUFBUStzQixTQUFSLENBQWtCN21CLEtBQWxCLEVBQXlCeEYsTUFBekIsRUFBaUNpekMsVUFBakM7QUFDQWp6QyxjQUFPMEQsT0FBUCxHQUFpQnV2QyxVQUFqQjtBQUNBLE9BSEQsTUFHTztBQUNORCxnQ0FBeUJ4dEMsS0FBekIsRUFBZ0N5dEMsVUFBaEM7QUFDQTtBQUNELE1BVEQsTUFTTyxJQUFJanpDLE1BQUosRUFBWTtBQUNsQlYsY0FBUXVYLFNBQVIsQ0FBa0JyUixLQUFsQixFQUF5QnhGLE1BQXpCO0FBQ0EsYUFBT3dGLE1BQU14RixNQUFiO0FBQ0E7QUFDRCxLQXJDZTs7QUF1Q2hCbXpDLGdCQUFZLG9CQUFTM3RDLEtBQVQsRUFBZ0J6ZSxDQUFoQixFQUFtQjtBQUM5QixTQUFJaVosU0FBU3dGLE1BQU14RixNQUFuQjtBQUNBLFNBQUlBLE1BQUosRUFBWTtBQUNYQSxhQUFPK2MsV0FBUCxDQUFtQmgyQixDQUFuQjtBQUNBO0FBQ0Q7QUE1Q2UsSUFBakI7QUErQ0MsR0Fsa0IrQixFQWtrQjlCLEVBQUMsTUFBSyxFQUFOLEVBQVMsTUFBSyxFQUFkLEVBQWlCLE1BQUssRUFBdEIsRUFBeUIsTUFBSyxFQUE5QixFQWxrQjhCLENBcnBXeXhCLEVBdXRYcHhCLElBQUcsQ0FBQyxVQUFTTSxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDekU7O0FBRUEsT0FBSTRZLFdBQVc3WCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUk4WCxVQUFVOVgsUUFBUSxFQUFSLENBQWQ7QUFDQSxPQUFJMFgsVUFBVTFYLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSWlZLFVBQVVqWSxRQUFRLEVBQVIsQ0FBZDs7QUFFQSxPQUFJMGxCLE9BQU9oTyxRQUFRZ08sSUFBbkI7O0FBRUE3TixZQUFTaUMsSUFBVCxDQUFjLFFBQWQsRUFBd0I7QUFDdkJoQixXQUFPO0FBQ04wUyxjQUFTLEtBREg7QUFFTjhWLGdCQUFXLE1BRkw7QUFHTndELGdCQUFXLElBSEw7QUFJTm9FLGlCQUFZLEdBSk47QUFLTjVJLGNBQVMsRUFMSDtBQU1ONWxCLGVBQVUsS0FOSjtBQU9OdUosV0FBTSxFQVBBO0FBUU5yYyxhQUFRLElBUkYsQ0FRZTtBQVJmO0FBRGdCLElBQXhCOztBQWFBOzs7QUFHQSxPQUFJaVIsUUFBUWYsUUFBUW1CLE1BQVIsQ0FBZTtBQUMxQlIsZ0JBQVksb0JBQVNjLE1BQVQsRUFBaUI7QUFDNUIsU0FBSWdFLEtBQUssSUFBVDtBQUNBN0YsYUFBUXVCLE1BQVIsQ0FBZXNFLEVBQWYsRUFBbUJoRSxNQUFuQjs7QUFFQTtBQUNBZ0UsUUFBR3VzQyxjQUFILEdBQW9CLEVBQXBCO0FBQ0EsS0FQeUI7O0FBUzFCOztBQUVBdGYsa0JBQWM5a0IsSUFYWTtBQVkxQjdILFlBQVEsZ0JBQVM0c0IsUUFBVCxFQUFtQkMsU0FBbkIsRUFBOEJDLE9BQTlCLEVBQXVDO0FBQzlDLFNBQUlwdEIsS0FBSyxJQUFUOztBQUVBO0FBQ0FBLFFBQUdpdEIsWUFBSDs7QUFFQTtBQUNBanRCLFFBQUdrdEIsUUFBSCxHQUFjQSxRQUFkO0FBQ0FsdEIsUUFBR210QixTQUFILEdBQWVBLFNBQWY7QUFDQW50QixRQUFHb3RCLE9BQUgsR0FBYUEsT0FBYjs7QUFFQTtBQUNBcHRCLFFBQUdzdEIsbUJBQUg7QUFDQXR0QixRQUFHdXRCLGFBQUg7QUFDQXZ0QixRQUFHd3RCLGtCQUFIO0FBQ0E7QUFDQXh0QixRQUFHeXNDLGlCQUFIO0FBQ0F6c0MsUUFBRzBzQyxXQUFIO0FBQ0Exc0MsUUFBRzJzQyxnQkFBSDs7QUFFQTtBQUNBM3NDLFFBQUdxdUIsU0FBSDtBQUNBcnVCLFFBQUdzdUIsR0FBSDtBQUNBdHVCLFFBQUd1dUIsUUFBSDtBQUNBO0FBQ0F2dUIsUUFBR3d1QixXQUFIOztBQUVBLFlBQU94dUIsR0FBRzRJLE9BQVY7QUFFQSxLQXpDeUI7QUEwQzFCNGxCLGlCQUFhcm1CLElBMUNhOztBQTRDMUI7O0FBRUFtbEIseUJBQXFCbmxCLElBOUNLO0FBK0MxQm9sQixtQkFBZSx5QkFBVztBQUN6QixTQUFJdnRCLEtBQUssSUFBVDtBQUNBO0FBQ0EsU0FBSUEsR0FBRzdCLFlBQUgsRUFBSixFQUF1QjtBQUN0QjtBQUNBNkIsU0FBRzVCLEtBQUgsR0FBVzRCLEdBQUdrdEIsUUFBZDtBQUNBbHRCLFNBQUd1RCxJQUFILEdBQVUsQ0FBVjtBQUNBdkQsU0FBR3lJLEtBQUgsR0FBV3pJLEdBQUc1QixLQUFkO0FBQ0EsTUFMRCxNQUtPO0FBQ040QixTQUFHM0IsTUFBSCxHQUFZMkIsR0FBR210QixTQUFmOztBQUVBO0FBQ0FudEIsU0FBR3dELEdBQUgsR0FBUyxDQUFUO0FBQ0F4RCxTQUFHMkksTUFBSCxHQUFZM0ksR0FBRzNCLE1BQWY7QUFDQTs7QUFFRDtBQUNBMkIsUUFBR2loQixXQUFILEdBQWlCLENBQWpCO0FBQ0FqaEIsUUFBR21oQixVQUFILEdBQWdCLENBQWhCO0FBQ0FuaEIsUUFBR29oQixZQUFILEdBQWtCLENBQWxCO0FBQ0FwaEIsUUFBR3FoQixhQUFILEdBQW1CLENBQW5COztBQUVBO0FBQ0FyaEIsUUFBRzRJLE9BQUgsR0FBYTtBQUNaeEssYUFBTyxDQURLO0FBRVpDLGNBQVE7QUFGSSxNQUFiO0FBSUEsS0ExRXlCO0FBMkUxQm12Qix3QkFBb0JybEIsSUEzRU07O0FBNkUxQjs7QUFFQXNrQyx1QkFBbUJ0a0MsSUEvRU87QUFnRjFCdWtDLGlCQUFhdmtDLElBaEZhO0FBaUYxQndrQyxzQkFBa0J4a0MsSUFqRlE7O0FBbUYxQjs7QUFFQWttQixlQUFXbG1CLElBckZlO0FBc0YxQm1tQixTQUFLLGVBQVc7QUFDZixTQUFJdHVCLEtBQUssSUFBVDtBQUNBLFNBQUlpRSxpQkFBaUI5SixRQUFROEosY0FBN0I7QUFDQSxTQUFJc0UsT0FBT3ZJLEdBQUdsQixPQUFkO0FBQ0EsU0FBSW1QLFVBQVUxRixLQUFLMEYsT0FBbkI7QUFDQSxTQUFJMmUsV0FBVzNvQixlQUFlc0UsS0FBS3FrQixRQUFwQixFQUE4QnR5QixTQUFTdlksTUFBVCxDQUFnQjhrQyxlQUE5QyxDQUFmO0FBQ0EsU0FBSWplLFVBQVU1SSxHQUFHNEksT0FBakI7QUFDQSxTQUFJdXJCLFlBQVloNkIsUUFBUTJOLE9BQVIsQ0FBZ0JTLEtBQUs3QixJQUFyQixJQUE2QjZCLEtBQUs3QixJQUFMLENBQVUxakIsTUFBdkMsR0FBZ0QsQ0FBaEU7QUFDQSxTQUFJMm9DLGFBQWF4eEIsUUFBUTJFLE9BQVIsQ0FBZ0JpdUIsWUFBaEIsQ0FBNkJ4a0IsS0FBS29qQixVQUFsQyxFQUE4Q2lCLFFBQTlDLENBQWpCO0FBQ0EsU0FBSTRoQixXQUFXdmdDLFVBQVdrbUIsWUFBWXhJLFVBQWIsR0FBNEJwakIsS0FBS3dhLE9BQUwsR0FBZSxDQUFyRCxHQUEwRCxDQUF6RTs7QUFFQSxTQUFJL2lCLEdBQUc3QixZQUFILEVBQUosRUFBdUI7QUFDdEJ5SyxjQUFReEssS0FBUixHQUFnQjRCLEdBQUdrdEIsUUFBbkIsQ0FEc0IsQ0FDTztBQUM3QnRrQixjQUFRdkssTUFBUixHQUFpQm13QyxRQUFqQjtBQUNBLE1BSEQsTUFHTztBQUNONWxDLGNBQVF4SyxLQUFSLEdBQWdCb3dDLFFBQWhCO0FBQ0E1bEMsY0FBUXZLLE1BQVIsR0FBaUIyQixHQUFHbXRCLFNBQXBCLENBRk0sQ0FFeUI7QUFDL0I7O0FBRURudEIsUUFBRzVCLEtBQUgsR0FBV3dLLFFBQVF4SyxLQUFuQjtBQUNBNEIsUUFBRzNCLE1BQUgsR0FBWXVLLFFBQVF2SyxNQUFwQjtBQUVBLEtBNUd5QjtBQTZHMUJrd0IsY0FBVXBtQixJQTdHZ0I7O0FBK0cxQjtBQUNBaEssa0JBQWMsd0JBQVc7QUFDeEIsU0FBSTI1QixNQUFNLEtBQUtoNUIsT0FBTCxDQUFhM0IsUUFBdkI7QUFDQSxZQUFPMjZCLFFBQVEsS0FBUixJQUFpQkEsUUFBUSxRQUFoQztBQUNBLEtBbkh5Qjs7QUFxSDFCO0FBQ0ExekIsVUFBTSxnQkFBVztBQUNoQixTQUFJcEUsS0FBSyxJQUFUO0FBQ0EsU0FBSXNFLE1BQU10RSxHQUFHc0UsR0FBYjtBQUNBLFNBQUlMLGlCQUFpQjlKLFFBQVE4SixjQUE3QjtBQUNBLFNBQUlzRSxPQUFPdkksR0FBR2xCLE9BQWQ7QUFDQSxTQUFJNnRCLGlCQUFpQnJ5QixTQUFTdlksTUFBOUI7O0FBRUEsU0FBSXdtQixLQUFLMEYsT0FBVCxFQUFrQjtBQUNqQixVQUFJMmUsV0FBVzNvQixlQUFlc0UsS0FBS3FrQixRQUFwQixFQUE4QkQsZUFBZTlGLGVBQTdDLENBQWY7QUFDQSxVQUFJOUMsWUFBWTlmLGVBQWVzRSxLQUFLd2IsU0FBcEIsRUFBK0I0SSxlQUFlN0YsZ0JBQTlDLENBQWhCO0FBQ0EsVUFBSTlDLGFBQWEvZixlQUFlc0UsS0FBS3liLFVBQXBCLEVBQWdDMkksZUFBZS9GLGlCQUEvQyxDQUFqQjtBQUNBLFVBQUk2bkIsWUFBWXQwQyxRQUFRMHBCLFVBQVIsQ0FBbUIrSSxRQUFuQixFQUE2QjdJLFNBQTdCLEVBQXdDQyxVQUF4QyxDQUFoQjtBQUNBLFVBQUkySCxhQUFheHhCLFFBQVEyRSxPQUFSLENBQWdCaXVCLFlBQWhCLENBQTZCeGtCLEtBQUtvakIsVUFBbEMsRUFBOENpQixRQUE5QyxDQUFqQjtBQUNBLFVBQUk5dkIsU0FBUzZ1QixhQUFhLENBQWIsR0FBaUJwakIsS0FBS3dhLE9BQW5DO0FBQ0EsVUFBSXRkLFdBQVcsQ0FBZjtBQUNBLFVBQUlqQyxNQUFNeEQsR0FBR3dELEdBQWI7QUFDQSxVQUFJRCxPQUFPdkQsR0FBR3VELElBQWQ7QUFDQSxVQUFJb0YsU0FBUzNJLEdBQUcySSxNQUFoQjtBQUNBLFVBQUlGLFFBQVF6SSxHQUFHeUksS0FBZjtBQUNBLFVBQUl5a0IsUUFBSixFQUFjd2hCLE1BQWQsRUFBc0JDLE1BQXRCOztBQUVBcnFDLFVBQUk4QyxTQUFKLEdBQWdCbkQsZUFBZXNFLEtBQUtpcEIsU0FBcEIsRUFBK0I3RSxlQUFlaEcsZ0JBQTlDLENBQWhCLENBZGlCLENBY2dFO0FBQ2pGcmlCLFVBQUk0ZixJQUFKLEdBQVd1cUIsU0FBWDs7QUFFQTtBQUNBLFVBQUl6dUMsR0FBRzdCLFlBQUgsRUFBSixFQUF1QjtBQUN0QnV3QyxnQkFBU25yQyxPQUFRLENBQUNrRixRQUFRbEYsSUFBVCxJQUFpQixDQUFsQyxDQURzQixDQUNnQjtBQUN0Q29yQyxnQkFBU25yQyxNQUFNMUcsTUFBZjtBQUNBb3dCLGtCQUFXemtCLFFBQVFsRixJQUFuQjtBQUNBLE9BSkQsTUFJTztBQUNObXJDLGdCQUFTbm1DLEtBQUtwTCxRQUFMLEtBQWtCLE1BQWxCLEdBQTJCb0csT0FBT3pHLE1BQWxDLEdBQTJDMkwsUUFBUTNMLE1BQTVEO0FBQ0E2eEMsZ0JBQVNuckMsTUFBTyxDQUFDbUYsU0FBU25GLEdBQVYsSUFBaUIsQ0FBakM7QUFDQTBwQixrQkFBV3ZrQixTQUFTbkYsR0FBcEI7QUFDQWlDLGtCQUFXOWdCLEtBQUt3TCxFQUFMLElBQVdvWSxLQUFLcEwsUUFBTCxLQUFrQixNQUFsQixHQUEyQixDQUFDLEdBQTVCLEdBQWtDLEdBQTdDLENBQVg7QUFDQTs7QUFFRG1ILFVBQUlxdkIsSUFBSjtBQUNBcnZCLFVBQUk0dkIsU0FBSixDQUFjd2EsTUFBZCxFQUFzQkMsTUFBdEI7QUFDQXJxQyxVQUFJcmEsTUFBSixDQUFXd2IsUUFBWDtBQUNBbkIsVUFBSXl1QixTQUFKLEdBQWdCLFFBQWhCO0FBQ0F6dUIsVUFBSTB1QixZQUFKLEdBQW1CLFFBQW5COztBQUVBLFVBQUl0c0IsT0FBTzZCLEtBQUs3QixJQUFoQjtBQUNBLFVBQUl2TSxRQUFRMk4sT0FBUixDQUFnQnBCLElBQWhCLENBQUosRUFBMkI7QUFDMUIsV0FBSTdYLElBQUksQ0FBUjtBQUNBLFlBQUssSUFBSXRNLElBQUksQ0FBYixFQUFnQkEsSUFBSW1rQixLQUFLMWpCLE1BQXpCLEVBQWlDLEVBQUVULENBQW5DLEVBQXNDO0FBQ3JDK2hCLFlBQUk4dkIsUUFBSixDQUFhMXRCLEtBQUtua0IsQ0FBTCxDQUFiLEVBQXNCLENBQXRCLEVBQXlCc00sQ0FBekIsRUFBNEJxK0IsUUFBNUI7QUFDQXIrQixhQUFLODhCLFVBQUw7QUFDQTtBQUNELE9BTkQsTUFNTztBQUNOcm5CLFdBQUk4dkIsUUFBSixDQUFhMXRCLElBQWIsRUFBbUIsQ0FBbkIsRUFBc0IsQ0FBdEIsRUFBeUJ3bUIsUUFBekI7QUFDQTs7QUFFRDVvQixVQUFJMnZCLE9BQUo7QUFDQTtBQUNEO0FBN0t5QixJQUFmLENBQVo7O0FBZ0xBLFlBQVMyYSw0QkFBVCxDQUFzQ2h1QyxLQUF0QyxFQUE2Q2l1QyxTQUE3QyxFQUF3RDtBQUN2RCxRQUFJdHpDLFFBQVEsSUFBSUQsS0FBSixDQUFVO0FBQ3JCZ0osVUFBSzFELE1BQU0wRCxHQURVO0FBRXJCeEYsY0FBUyt2QyxTQUZZO0FBR3JCanVDLFlBQU9BO0FBSGMsS0FBVixDQUFaOztBQU1BbEcsWUFBUStzQixTQUFSLENBQWtCN21CLEtBQWxCLEVBQXlCckYsS0FBekIsRUFBZ0NzekMsU0FBaEM7QUFDQW4wQyxZQUFRNHNCLE1BQVIsQ0FBZTFtQixLQUFmLEVBQXNCckYsS0FBdEI7QUFDQXFGLFVBQU1rdUMsVUFBTixHQUFtQnZ6QyxLQUFuQjtBQUNBOztBQUVENVosVUFBT0QsT0FBUCxHQUFpQjtBQUNoQm9pQixRQUFJLE9BRFk7O0FBR2hCOzs7Ozs7O0FBT0F6SSxjQUFVQyxLQVZNOztBQVloQmd6QyxnQkFBWSxvQkFBUzF0QyxLQUFULEVBQWdCO0FBQzNCLFNBQUlpdUMsWUFBWWp1QyxNQUFNOUIsT0FBTixDQUFjdkQsS0FBOUI7O0FBRUEsU0FBSXN6QyxTQUFKLEVBQWU7QUFDZEQsbUNBQTZCaHVDLEtBQTdCLEVBQW9DaXVDLFNBQXBDO0FBQ0E7QUFDRCxLQWxCZTs7QUFvQmhCNWhCLGtCQUFjLHNCQUFTcnNCLEtBQVQsRUFBZ0I7QUFDN0IsU0FBSWl1QyxZQUFZanVDLE1BQU05QixPQUFOLENBQWN2RCxLQUE5QjtBQUNBLFNBQUl1ekMsYUFBYWx1QyxNQUFNa3VDLFVBQXZCOztBQUVBLFNBQUlELFNBQUosRUFBZTtBQUNkMTBDLGNBQVErbkMsT0FBUixDQUFnQjJNLFNBQWhCLEVBQTJCdjBDLFNBQVN2WSxNQUFULENBQWdCd1osS0FBM0M7O0FBRUEsVUFBSXV6QyxVQUFKLEVBQWdCO0FBQ2ZwMEMsZUFBUStzQixTQUFSLENBQWtCN21CLEtBQWxCLEVBQXlCa3VDLFVBQXpCLEVBQXFDRCxTQUFyQztBQUNBQyxrQkFBV2h3QyxPQUFYLEdBQXFCK3ZDLFNBQXJCO0FBQ0EsT0FIRCxNQUdPO0FBQ05ELG9DQUE2Qmh1QyxLQUE3QixFQUFvQ2l1QyxTQUFwQztBQUNBO0FBQ0QsTUFURCxNQVNPLElBQUlDLFVBQUosRUFBZ0I7QUFDdEJwMEMsY0FBUXVYLFNBQVIsQ0FBa0JyUixLQUFsQixFQUF5Qmt1QyxVQUF6QjtBQUNBLGFBQU9sdUMsTUFBTWt1QyxVQUFiO0FBQ0E7QUFDRDtBQXJDZSxJQUFqQjtBQXdDQyxHQTlQdUMsRUE4UHRDLEVBQUMsTUFBSyxFQUFOLEVBQVMsTUFBSyxFQUFkLEVBQWlCLE1BQUssRUFBdEIsRUFBeUIsTUFBSyxFQUE5QixFQTlQc0MsQ0F2dFhpeEIsRUFxOVhweEIsSUFBRyxDQUFDLFVBQVNyc0QsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ3pFOztBQUVBLE9BQUltWixRQUFRcFksUUFBUSxFQUFSLENBQVo7QUFDQSxPQUFJcVksZUFBZXJZLFFBQVEsRUFBUixDQUFuQjs7QUFFQWQsVUFBT0QsT0FBUCxHQUFpQixZQUFXOztBQUUzQjtBQUNBLFFBQUlxdEQsZ0JBQWdCO0FBQ25CNXhDLGVBQVU7QUFEUyxLQUFwQjs7QUFJQSxRQUFJNnhDLGVBQWVuMEMsTUFBTWEsTUFBTixDQUFhO0FBQy9COzs7OztBQUtBdXpDLGdCQUFXLHFCQUFXO0FBQ3JCLFVBQUl4eEMsT0FBTyxLQUFLbUQsS0FBTCxDQUFXbkQsSUFBdEI7QUFDQSxhQUFPLEtBQUtxQixPQUFMLENBQWFuQixNQUFiLEtBQXdCLEtBQUtRLFlBQUwsS0FBc0JWLEtBQUt5eEMsT0FBM0IsR0FBcUN6eEMsS0FBSzB4QyxPQUFsRSxLQUE4RTF4QyxLQUFLRSxNQUExRjtBQUNBLE1BVDhCOztBQVcvQit2QiwwQkFBcUIsK0JBQVc7QUFDL0IsVUFBSTF0QixLQUFLLElBQVQ7QUFDQSxVQUFJckMsU0FBU3FDLEdBQUdpdkMsU0FBSCxFQUFiO0FBQ0FqdkMsU0FBR292QyxRQUFILEdBQWMsQ0FBZDtBQUNBcHZDLFNBQUdxdkMsUUFBSCxHQUFjMXhDLE9BQU8zYSxNQUFQLEdBQWdCLENBQTlCO0FBQ0EsVUFBSWd1QixTQUFKOztBQUVBLFVBQUloUixHQUFHbEIsT0FBSCxDQUFXUixLQUFYLENBQWlCelksR0FBakIsS0FBeUJILFNBQTdCLEVBQXdDO0FBQ3ZDO0FBQ0FzckIsbUJBQVlyVCxPQUFPd0YsT0FBUCxDQUFlbkQsR0FBR2xCLE9BQUgsQ0FBV1IsS0FBWCxDQUFpQnpZLEdBQWhDLENBQVo7QUFDQW1hLFVBQUdvdkMsUUFBSCxHQUFjcCtCLGNBQWMsQ0FBQyxDQUFmLEdBQW1CQSxTQUFuQixHQUErQmhSLEdBQUdvdkMsUUFBaEQ7QUFDQTs7QUFFRCxVQUFJcHZDLEdBQUdsQixPQUFILENBQVdSLEtBQVgsQ0FBaUJ4WSxHQUFqQixLQUF5QkosU0FBN0IsRUFBd0M7QUFDdkM7QUFDQXNyQixtQkFBWXJULE9BQU93RixPQUFQLENBQWVuRCxHQUFHbEIsT0FBSCxDQUFXUixLQUFYLENBQWlCeFksR0FBaEMsQ0FBWjtBQUNBa2EsVUFBR3F2QyxRQUFILEdBQWNyK0IsY0FBYyxDQUFDLENBQWYsR0FBbUJBLFNBQW5CLEdBQStCaFIsR0FBR3F2QyxRQUFoRDtBQUNBOztBQUVEcnZDLFNBQUduYSxHQUFILEdBQVM4WCxPQUFPcUMsR0FBR292QyxRQUFWLENBQVQ7QUFDQXB2QyxTQUFHbGEsR0FBSCxHQUFTNlgsT0FBT3FDLEdBQUdxdkMsUUFBVixDQUFUO0FBQ0EsTUFoQzhCOztBQWtDL0J4aEIsaUJBQVksc0JBQVc7QUFDdEIsVUFBSTd0QixLQUFLLElBQVQ7QUFDQSxVQUFJckMsU0FBU3FDLEdBQUdpdkMsU0FBSCxFQUFiO0FBQ0E7QUFDQWp2QyxTQUFHMUIsS0FBSCxHQUFZMEIsR0FBR292QyxRQUFILEtBQWdCLENBQWhCLElBQXFCcHZDLEdBQUdxdkMsUUFBSCxLQUFnQjF4QyxPQUFPM2EsTUFBUCxHQUFnQixDQUF0RCxHQUEyRDJhLE1BQTNELEdBQW9FQSxPQUFPbFosS0FBUCxDQUFhdWIsR0FBR292QyxRQUFoQixFQUEwQnB2QyxHQUFHcXZDLFFBQUgsR0FBYyxDQUF4QyxDQUEvRTtBQUNBLE1BdkM4Qjs7QUF5Qy9CbGYsdUJBQWtCLDBCQUFTdGtDLEtBQVQsRUFBZ0JrUyxZQUFoQixFQUE4QjtBQUMvQyxVQUFJaUMsS0FBSyxJQUFUO0FBQ0EsVUFBSXZDLE9BQU91QyxHQUFHWSxLQUFILENBQVNuRCxJQUFwQjtBQUNBLFVBQUlVLGVBQWU2QixHQUFHN0IsWUFBSCxFQUFuQjs7QUFFQSxVQUFJVixLQUFLMHhDLE9BQUwsSUFBZ0IsQ0FBQ2h4QyxZQUFyQixFQUFtQztBQUNsQyxjQUFPNkIsR0FBRzBELGFBQUgsQ0FBaUJqRyxLQUFLSyxRQUFMLENBQWNDLFlBQWQsRUFBNEJOLElBQTVCLENBQWlDNVIsS0FBakMsQ0FBakIsQ0FBUDtBQUNBO0FBQ0QsYUFBT21VLEdBQUcxQixLQUFILENBQVN6UyxRQUFRbVUsR0FBR292QyxRQUFwQixDQUFQO0FBQ0EsTUFsRDhCOztBQW9EL0I7QUFDQTNyQyx1QkFBa0IsMEJBQVMzYyxLQUFULEVBQWdCK0UsS0FBaEIsRUFBdUI7QUFDeEMsVUFBSW1VLEtBQUssSUFBVDtBQUNBLFVBQUlsRCxTQUFTa0QsR0FBR2xCLE9BQUgsQ0FBV2hDLE1BQXhCO0FBQ0E7QUFDQSxVQUFJd3lDLFlBQVkzcUQsS0FBS21CLEdBQUwsQ0FBVWthLEdBQUdxdkMsUUFBSCxHQUFjLENBQWQsR0FBa0JydkMsR0FBR292QyxRQUFyQixJQUFpQ3R5QyxTQUFTLENBQVQsR0FBYSxDQUE5QyxDQUFWLEVBQTZELENBQTdELENBQWhCOztBQUVBO0FBQ0E7QUFDQSxVQUFJeXlDLGFBQUo7QUFDQSxVQUFJem9ELFVBQVVwQixTQUFWLElBQXVCb0IsVUFBVSxJQUFyQyxFQUEyQztBQUMxQ3lvRCx1QkFBZ0J2dkMsR0FBRzdCLFlBQUgsS0FBb0JyWCxNQUFNb0ksQ0FBMUIsR0FBOEJwSSxNQUFNK0gsQ0FBcEQ7QUFDQTtBQUNELFVBQUkwZ0Qsa0JBQWtCN3BELFNBQWxCLElBQWdDb0IsVUFBVXBCLFNBQVYsSUFBdUJQLE1BQU0wRyxLQUFOLENBQTNELEVBQTBFO0FBQ3pFLFdBQUk4UixTQUFTcUMsR0FBR2l2QyxTQUFILEVBQWI7QUFDQW5vRCxlQUFReW9ELGlCQUFpQnpvRCxLQUF6QjtBQUNBLFdBQUk0akMsTUFBTS9zQixPQUFPd0YsT0FBUCxDQUFlcmMsS0FBZixDQUFWO0FBQ0ErRSxlQUFRNitCLFFBQVEsQ0FBQyxDQUFULEdBQWFBLEdBQWIsR0FBbUI3K0IsS0FBM0I7QUFDQTs7QUFFRCxVQUFJbVUsR0FBRzdCLFlBQUgsRUFBSixFQUF1QjtBQUN0QixXQUFJcXhDLGFBQWF4dkMsR0FBRzVCLEtBQUgsR0FBV2t4QyxTQUE1QjtBQUNBLFdBQUlHLGNBQWVELGNBQWMzakQsUUFBUW1VLEdBQUdvdkMsUUFBekIsQ0FBbkI7O0FBRUEsV0FBSXR5QyxNQUFKLEVBQVk7QUFDWDJ5Qyx1QkFBZ0JELGFBQWEsQ0FBN0I7QUFDQTs7QUFFRCxjQUFPeHZDLEdBQUd1RCxJQUFILEdBQVU1ZSxLQUFLQyxLQUFMLENBQVc2cUQsV0FBWCxDQUFqQjtBQUNBO0FBQ0QsVUFBSUMsY0FBYzF2QyxHQUFHM0IsTUFBSCxHQUFZaXhDLFNBQTlCO0FBQ0EsVUFBSUssZUFBZ0JELGVBQWU3akQsUUFBUW1VLEdBQUdvdkMsUUFBMUIsQ0FBcEI7O0FBRUEsVUFBSXR5QyxNQUFKLEVBQVk7QUFDWDZ5Qyx1QkFBaUJELGNBQWMsQ0FBL0I7QUFDQTs7QUFFRCxhQUFPMXZDLEdBQUd3RCxHQUFILEdBQVM3ZSxLQUFLQyxLQUFMLENBQVcrcUQsWUFBWCxDQUFoQjtBQUNBLE1BMUY4QjtBQTJGL0JoeEMsc0JBQWlCLHlCQUFTOVMsS0FBVCxFQUFnQjtBQUNoQyxhQUFPLEtBQUs0WCxnQkFBTCxDQUFzQixLQUFLbkYsS0FBTCxDQUFXelMsS0FBWCxDQUF0QixFQUF5Q0EsUUFBUSxLQUFLdWpELFFBQXRELEVBQWdFLElBQWhFLENBQVA7QUFDQSxNQTdGOEI7QUE4Ri9CaGYsdUJBQWtCLDBCQUFTRSxLQUFULEVBQWdCO0FBQ2pDLFVBQUl0d0IsS0FBSyxJQUFUO0FBQ0EsVUFBSWxELFNBQVNrRCxHQUFHbEIsT0FBSCxDQUFXaEMsTUFBeEI7QUFDQSxVQUFJaFcsS0FBSjtBQUNBLFVBQUl3b0QsWUFBWTNxRCxLQUFLbUIsR0FBTCxDQUFVa2EsR0FBR2d0QixNQUFILENBQVVocUMsTUFBVixJQUFvQjhaLFNBQVMsQ0FBVCxHQUFhLENBQWpDLENBQVYsRUFBZ0QsQ0FBaEQsQ0FBaEI7QUFDQSxVQUFJOHlDLE9BQU81dkMsR0FBRzdCLFlBQUgsRUFBWDtBQUNBLFVBQUkweEMsaUJBQWlCLENBQUNELE9BQU81dkMsR0FBRzVCLEtBQVYsR0FBa0I0QixHQUFHM0IsTUFBdEIsSUFBZ0NpeEMsU0FBckQ7O0FBRUFoZixlQUFTc2YsT0FBTzV2QyxHQUFHdUQsSUFBVixHQUFpQnZELEdBQUd3RCxHQUE3Qjs7QUFFQSxVQUFJMUcsTUFBSixFQUFZO0FBQ1h3ekIsZ0JBQVV1ZixpQkFBaUIsQ0FBM0I7QUFDQTs7QUFFRCxVQUFJdmYsU0FBUyxDQUFiLEVBQWdCO0FBQ2Z4cEMsZUFBUSxDQUFSO0FBQ0EsT0FGRCxNQUVPO0FBQ05BLGVBQVFuQyxLQUFLQyxLQUFMLENBQVcwckMsUUFBUXVmLGNBQW5CLENBQVI7QUFDQTs7QUFFRCxhQUFPL29ELFFBQVFrWixHQUFHb3ZDLFFBQWxCO0FBQ0EsTUFuSDhCO0FBb0gvQmx0QyxtQkFBYyx3QkFBVztBQUN4QixhQUFPLEtBQUt5RyxNQUFaO0FBQ0E7QUF0SDhCLEtBQWIsQ0FBbkI7O0FBeUhBN04saUJBQWEyNUIsaUJBQWIsQ0FBK0IsVUFBL0IsRUFBMkN1YSxZQUEzQyxFQUF5REQsYUFBekQ7QUFDQSxJQWpJRDtBQW1JQyxHQXpJdUMsRUF5SXRDLEVBQUMsTUFBSyxFQUFOLEVBQVMsTUFBSyxFQUFkLEVBeklzQyxDQXI5WGl4QixFQThsWXB5QixJQUFHLENBQUMsVUFBU3RzRCxPQUFULEVBQWlCZCxNQUFqQixFQUF3QkQsT0FBeEIsRUFBZ0M7QUFDekQ7O0FBRUEsT0FBSTRZLFdBQVc3WCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUkwWCxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7QUFDQSxPQUFJcVksZUFBZXJZLFFBQVEsRUFBUixDQUFuQjtBQUNBLE9BQUlzWSxRQUFRdFksUUFBUSxFQUFSLENBQVo7O0FBRUFkLFVBQU9ELE9BQVAsR0FBaUIsVUFBU08sS0FBVCxFQUFnQjs7QUFFaEMsUUFBSThzRCxnQkFBZ0I7QUFDbkI1eEMsZUFBVSxNQURTO0FBRW5CbUIsWUFBTztBQUNOb1QsZ0JBQVUzVyxNQUFNbXhCLFVBQU4sQ0FBaUI0STtBQURyQjtBQUZZLEtBQXBCOztBQU9BLFFBQUlnYixjQUFjN3RELE1BQU04dEQsZUFBTixDQUFzQnIwQyxNQUF0QixDQUE2Qjs7QUFFOUNneUIsMEJBQXFCLCtCQUFXO0FBQy9CLFVBQUkxdEIsS0FBSyxJQUFUO0FBQ0EsVUFBSXVJLE9BQU92SSxHQUFHbEIsT0FBZDtBQUNBLFVBQUk4QixRQUFRWixHQUFHWSxLQUFmO0FBQ0EsVUFBSW5ELE9BQU9tRCxNQUFNbkQsSUFBakI7QUFDQSxVQUFJSyxXQUFXTCxLQUFLSyxRQUFwQjtBQUNBLFVBQUlLLGVBQWU2QixHQUFHN0IsWUFBSCxFQUFuQjtBQUNBLFVBQUk2eEMsY0FBYyxDQUFsQjtBQUNBLFVBQUlDLGNBQWMsQ0FBbEI7O0FBRUEsZUFBU0MsU0FBVCxDQUFtQmp3QyxJQUFuQixFQUF5QjtBQUN4QixjQUFPOUIsZUFBZThCLEtBQUtpQixPQUFMLEtBQWlCbEIsR0FBRzhELEVBQW5DLEdBQXdDN0QsS0FBS21CLE9BQUwsS0FBaUJwQixHQUFHOEQsRUFBbkU7QUFDQTs7QUFFRDtBQUNBOUQsU0FBR25hLEdBQUgsR0FBUyxJQUFUO0FBQ0FtYSxTQUFHbGEsR0FBSCxHQUFTLElBQVQ7O0FBRUEsVUFBSXFxRCxZQUFZNW5DLEtBQUt4RixPQUFyQjtBQUNBLFVBQUlvdEMsY0FBY3pxRCxTQUFsQixFQUE2QjtBQUM1QnlVLGVBQVEySyxJQUFSLENBQWFoSCxRQUFiLEVBQXVCLFVBQVMrQyxPQUFULEVBQWtCOUMsWUFBbEIsRUFBZ0M7QUFDdEQsWUFBSW95QyxTQUFKLEVBQWU7QUFDZDtBQUNBOztBQUVELFlBQUlsd0MsT0FBT1csTUFBTXFDLGNBQU4sQ0FBcUJsRixZQUFyQixDQUFYO0FBQ0EsWUFBSTZDLE1BQU1zQyxnQkFBTixDQUF1Qm5GLFlBQXZCLEtBQXdDbXlDLFVBQVVqd0MsSUFBVixDQUF4QyxJQUNIQSxLQUFLRyxLQUFMLEtBQWUxYSxTQURoQixFQUMyQjtBQUMxQnlxRCxxQkFBWSxJQUFaO0FBQ0E7QUFDRCxRQVZEO0FBV0E7O0FBRUQsVUFBSTVuQyxLQUFLeEYsT0FBTCxJQUFnQm90QyxTQUFwQixFQUErQjtBQUM5QixXQUFJQyxpQkFBaUIsRUFBckI7O0FBRUFqMkMsZUFBUTJLLElBQVIsQ0FBYWhILFFBQWIsRUFBdUIsVUFBUytDLE9BQVQsRUFBa0I5QyxZQUFsQixFQUFnQztBQUN0RCxZQUFJa0MsT0FBT1csTUFBTXFDLGNBQU4sQ0FBcUJsRixZQUFyQixDQUFYO0FBQ0EsWUFBSXpFLE1BQU0sQ0FDVDJHLEtBQUtuVixJQURJO0FBRVQ7QUFDRXlkLGFBQUt4RixPQUFMLEtBQWlCcmQsU0FBakIsSUFBOEJ1YSxLQUFLRyxLQUFMLEtBQWUxYSxTQUE5QyxHQUEyRHFZLFlBQTNELEdBQTBFLEVBSGxFLEVBSVRrQyxLQUFLRyxLQUpJLEVBS1J1RyxJQUxRLENBS0gsR0FMRyxDQUFWOztBQU9BLFlBQUl5cEMsZUFBZTkyQyxHQUFmLE1BQXdCNVQsU0FBNUIsRUFBdUM7QUFDdEMwcUQsd0JBQWU5MkMsR0FBZixJQUFzQjtBQUNyQisyQywwQkFBZ0IsRUFESztBQUVyQkMsMEJBQWdCO0FBRkssVUFBdEI7QUFJQTs7QUFFRDtBQUNBLFlBQUlELGlCQUFpQkQsZUFBZTkyQyxHQUFmLEVBQW9CKzJDLGNBQXpDO0FBQ0EsWUFBSUMsaUJBQWlCRixlQUFlOTJDLEdBQWYsRUFBb0JnM0MsY0FBekM7O0FBRUEsWUFBSTF2QyxNQUFNc0MsZ0JBQU4sQ0FBdUJuRixZQUF2QixLQUF3Q215QyxVQUFVandDLElBQVYsQ0FBNUMsRUFBNkQ7QUFDNUQ5RixpQkFBUTJLLElBQVIsQ0FBYWpFLFFBQVFwRCxJQUFyQixFQUEyQixVQUFTeXlCLFFBQVQsRUFBbUJya0MsS0FBbkIsRUFBMEI7QUFDcEQsY0FBSS9FLFFBQVEsQ0FBQ2taLEdBQUcwRCxhQUFILENBQWlCd3NCLFFBQWpCLENBQWI7QUFDQSxjQUFJL3FDLE1BQU0yQixLQUFOLEtBQWdCbVosS0FBS3hDLElBQUwsQ0FBVTVSLEtBQVYsRUFBaUIwYixNQUFyQyxFQUE2QztBQUM1QztBQUNBOztBQUVEOG9DLHlCQUFleGtELEtBQWYsSUFBd0J3a0QsZUFBZXhrRCxLQUFmLEtBQXlCLENBQWpEO0FBQ0F5a0QseUJBQWV6a0QsS0FBZixJQUF3QnlrRCxlQUFlemtELEtBQWYsS0FBeUIsQ0FBakQ7O0FBRUEsY0FBSTBjLEtBQUtnb0MsY0FBVCxFQUF5QjtBQUN4QkYsMEJBQWV4a0QsS0FBZixJQUF3QixHQUF4QjtBQUNBLFdBRkQsTUFFTyxJQUFJL0UsUUFBUSxDQUFaLEVBQWU7QUFDckJ3cEQsMEJBQWV6a0QsS0FBZixLQUF5Qi9FLEtBQXpCO0FBQ0EsV0FGTSxNQUVBO0FBQ051cEQsMEJBQWV4a0QsS0FBZixLQUF5Qi9FLEtBQXpCO0FBQ0E7QUFDRCxVQWhCRDtBQWlCQTtBQUNELFFBdkNEOztBQXlDQXFULGVBQVEySyxJQUFSLENBQWFzckMsY0FBYixFQUE2QixVQUFTSSxhQUFULEVBQXdCO0FBQ3BELFlBQUlqcUQsU0FBU2lxRCxjQUFjSCxjQUFkLENBQTZCNW9ELE1BQTdCLENBQW9DK29ELGNBQWNGLGNBQWxELENBQWI7QUFDQSxZQUFJRyxTQUFTdDJDLFFBQVF0VSxHQUFSLENBQVlVLE1BQVosQ0FBYjtBQUNBLFlBQUltcUQsU0FBU3YyQyxRQUFRclUsR0FBUixDQUFZUyxNQUFaLENBQWI7QUFDQXlaLFdBQUduYSxHQUFILEdBQVNtYSxHQUFHbmEsR0FBSCxLQUFXLElBQVgsR0FBa0I0cUQsTUFBbEIsR0FBMkI5ckQsS0FBS2tCLEdBQUwsQ0FBU21hLEdBQUduYSxHQUFaLEVBQWlCNHFELE1BQWpCLENBQXBDO0FBQ0F6d0MsV0FBR2xhLEdBQUgsR0FBU2thLEdBQUdsYSxHQUFILEtBQVcsSUFBWCxHQUFrQjRxRCxNQUFsQixHQUEyQi9yRCxLQUFLbUIsR0FBTCxDQUFTa2EsR0FBR2xhLEdBQVosRUFBaUI0cUQsTUFBakIsQ0FBcEM7QUFDQSxRQU5EO0FBUUEsT0FwREQsTUFvRE87QUFDTnYyQyxlQUFRMkssSUFBUixDQUFhaEgsUUFBYixFQUF1QixVQUFTK0MsT0FBVCxFQUFrQjlDLFlBQWxCLEVBQWdDO0FBQ3RELFlBQUlrQyxPQUFPVyxNQUFNcUMsY0FBTixDQUFxQmxGLFlBQXJCLENBQVg7QUFDQSxZQUFJNkMsTUFBTXNDLGdCQUFOLENBQXVCbkYsWUFBdkIsS0FBd0NteUMsVUFBVWp3QyxJQUFWLENBQTVDLEVBQTZEO0FBQzVEOUYsaUJBQVEySyxJQUFSLENBQWFqRSxRQUFRcEQsSUFBckIsRUFBMkIsVUFBU3l5QixRQUFULEVBQW1CcmtDLEtBQW5CLEVBQTBCO0FBQ3BELGNBQUkvRSxRQUFRLENBQUNrWixHQUFHMEQsYUFBSCxDQUFpQndzQixRQUFqQixDQUFiO0FBQ0EsY0FBSS9xQyxNQUFNMkIsS0FBTixLQUFnQm1aLEtBQUt4QyxJQUFMLENBQVU1UixLQUFWLEVBQWlCMGIsTUFBckMsRUFBNkM7QUFDNUM7QUFDQTs7QUFFRCxjQUFJdkgsR0FBR25hLEdBQUgsS0FBVyxJQUFmLEVBQXFCO0FBQ3BCbWEsY0FBR25hLEdBQUgsR0FBU2lCLEtBQVQ7QUFDQSxXQUZELE1BRU8sSUFBSUEsUUFBUWtaLEdBQUduYSxHQUFmLEVBQW9CO0FBQzFCbWEsY0FBR25hLEdBQUgsR0FBU2lCLEtBQVQ7QUFDQTs7QUFFRCxjQUFJa1osR0FBR2xhLEdBQUgsS0FBVyxJQUFmLEVBQXFCO0FBQ3BCa2EsY0FBR2xhLEdBQUgsR0FBU2dCLEtBQVQ7QUFDQSxXQUZELE1BRU8sSUFBSUEsUUFBUWtaLEdBQUdsYSxHQUFmLEVBQW9CO0FBQzFCa2EsY0FBR2xhLEdBQUgsR0FBU2dCLEtBQVQ7QUFDQTtBQUNELFVBakJEO0FBa0JBO0FBQ0QsUUF0QkQ7QUF1QkE7O0FBRURrWixTQUFHbmEsR0FBSCxHQUFTdTFCLFNBQVNwYixHQUFHbmEsR0FBWixLQUFvQixDQUFDVixNQUFNNmEsR0FBR25hLEdBQVQsQ0FBckIsR0FBcUNtYSxHQUFHbmEsR0FBeEMsR0FBOENtcUQsV0FBdkQ7QUFDQWh3QyxTQUFHbGEsR0FBSCxHQUFTczFCLFNBQVNwYixHQUFHbGEsR0FBWixLQUFvQixDQUFDWCxNQUFNNmEsR0FBR2xhLEdBQVQsQ0FBckIsR0FBcUNrYSxHQUFHbGEsR0FBeEMsR0FBOENtcUQsV0FBdkQ7O0FBRUE7QUFDQSxXQUFLVSxzQkFBTDtBQUNBLE1BdEg2QztBQXVIOUNDLG1CQUFjLHdCQUFXO0FBQ3hCLFVBQUl6ZixRQUFKO0FBQ0EsVUFBSW54QixLQUFLLElBQVQ7QUFDQSxVQUFJeXVCLFdBQVd6dUIsR0FBR2xCLE9BQUgsQ0FBV1IsS0FBMUI7O0FBRUEsVUFBSTBCLEdBQUc3QixZQUFILEVBQUosRUFBdUI7QUFDdEJnekIsa0JBQVd4c0MsS0FBS2tCLEdBQUwsQ0FBUzRvQyxTQUFTMkMsYUFBVCxHQUF5QjNDLFNBQVMyQyxhQUFsQyxHQUFrRCxFQUEzRCxFQUErRHpzQyxLQUFLa3NELElBQUwsQ0FBVTd3QyxHQUFHNUIsS0FBSCxHQUFXLEVBQXJCLENBQS9ELENBQVg7QUFDQSxPQUZELE1BRU87QUFDTjtBQUNBLFdBQUkweUMsZUFBZTMyQyxRQUFROEosY0FBUixDQUF1QndxQixTQUFTN0IsUUFBaEMsRUFBMEN0eUIsU0FBU3ZZLE1BQVQsQ0FBZ0I4a0MsZUFBMUQsQ0FBbkI7QUFDQXNLLGtCQUFXeHNDLEtBQUtrQixHQUFMLENBQVM0b0MsU0FBUzJDLGFBQVQsR0FBeUIzQyxTQUFTMkMsYUFBbEMsR0FBa0QsRUFBM0QsRUFBK0R6c0MsS0FBS2tzRCxJQUFMLENBQVU3d0MsR0FBRzNCLE1BQUgsSUFBYSxJQUFJeXlDLFlBQWpCLENBQVYsQ0FBL0QsQ0FBWDtBQUNBOztBQUVELGFBQU8zZixRQUFQO0FBQ0EsTUFySTZDO0FBc0k5QztBQUNBNGYsK0JBQTBCLG9DQUFXO0FBQ3BDLFVBQUksQ0FBQyxLQUFLNXlDLFlBQUwsRUFBTCxFQUEwQjtBQUN6QjtBQUNBLFlBQUtHLEtBQUwsQ0FBVzRvQixPQUFYO0FBQ0E7QUFDRCxNQTVJNkM7QUE2STlDaUosdUJBQWtCLDBCQUFTdGtDLEtBQVQsRUFBZ0JrUyxZQUFoQixFQUE4QjtBQUMvQyxhQUFPLENBQUMsS0FBSzJGLGFBQUwsQ0FBbUIsS0FBSzlDLEtBQUwsQ0FBV25ELElBQVgsQ0FBZ0JLLFFBQWhCLENBQXlCQyxZQUF6QixFQUF1Q04sSUFBdkMsQ0FBNEM1UixLQUE1QyxDQUFuQixDQUFSO0FBQ0EsTUEvSTZDO0FBZ0o5QztBQUNBNFgsdUJBQWtCLDBCQUFTM2MsS0FBVCxFQUFnQjtBQUNqQztBQUNBO0FBQ0EsVUFBSWtaLEtBQUssSUFBVDtBQUNBLFVBQUlWLFFBQVFVLEdBQUdWLEtBQWY7O0FBRUEsVUFBSXFOLGFBQWEsQ0FBQzNNLEdBQUcwRCxhQUFILENBQWlCNWMsS0FBakIsQ0FBbEI7QUFDQSxVQUFJd3BDLEtBQUo7QUFDQSxVQUFJdnNCLFFBQVEvRCxHQUFHTixHQUFILEdBQVNKLEtBQXJCOztBQUVBLFVBQUlVLEdBQUc3QixZQUFILEVBQUosRUFBdUI7QUFDdEJteUIsZUFBUXR3QixHQUFHdUQsSUFBSCxHQUFXdkQsR0FBRzVCLEtBQUgsR0FBVzJGLEtBQVgsSUFBb0I0SSxhQUFhck4sS0FBakMsQ0FBbkI7QUFDQSxPQUZELE1BRU87QUFDTmd4QixlQUFRdHdCLEdBQUcySSxNQUFILEdBQWEzSSxHQUFHM0IsTUFBSCxHQUFZMEYsS0FBWixJQUFxQjRJLGFBQWFyTixLQUFsQyxDQUFyQjtBQUNBO0FBQ0QsYUFBT2d4QixLQUFQO0FBQ0EsTUFqSzZDO0FBa0s5Q0YsdUJBQWtCLDBCQUFTRSxLQUFULEVBQWdCO0FBQ2pDLFVBQUl0d0IsS0FBSyxJQUFUO0FBQ0EsVUFBSTdCLGVBQWU2QixHQUFHN0IsWUFBSCxFQUFuQjtBQUNBLFVBQUk2eUMsaUJBQWlCN3lDLGVBQWU2QixHQUFHNUIsS0FBbEIsR0FBMEI0QixHQUFHM0IsTUFBbEQ7QUFDQSxVQUFJdkIsU0FBUyxDQUFDcUIsZUFBZW15QixRQUFRdHdCLEdBQUd1RCxJQUExQixHQUFpQ3ZELEdBQUcySSxNQUFILEdBQVkybkIsS0FBOUMsSUFBdUQwZ0IsY0FBcEU7QUFDQSxhQUFPaHhDLEdBQUdWLEtBQUgsR0FBWSxDQUFDVSxHQUFHTixHQUFILEdBQVNNLEdBQUdWLEtBQWIsSUFBc0J4QyxNQUF6QztBQUNBLE1BeEs2QztBQXlLOUM2QixzQkFBaUIseUJBQVM5UyxLQUFULEVBQWdCO0FBQ2hDLGFBQU8sS0FBSzRYLGdCQUFMLENBQXNCLEtBQUt3dEMsY0FBTCxDQUFvQnBsRCxLQUFwQixDQUF0QixDQUFQO0FBQ0E7QUEzSzZDLEtBQTdCLENBQWxCOztBQThLQWlQLGlCQUFhMjVCLGlCQUFiLENBQStCLFFBQS9CLEVBQXlDcWIsV0FBekMsRUFBc0RmLGFBQXREO0FBQ0EsSUF4TEQ7QUEwTEMsR0FsTXVCLEVBa010QixFQUFDLE1BQUssRUFBTixFQUFTLE1BQUssRUFBZCxFQUFpQixNQUFLLEVBQXRCLEVBQXlCLE1BQUssRUFBOUIsRUFsTXNCLENBOWxZaXlCLEVBZ3lZcHhCLElBQUcsQ0FBQyxVQUFTdHNELE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUN6RTs7QUFFQSxPQUFJeVksVUFBVTFYLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSW9ZLFFBQVFwWSxRQUFRLEVBQVIsQ0FBWjs7QUFFQTs7Ozs7O0FBTUEsWUFBU3l1RCxhQUFULENBQXVCQyxpQkFBdkIsRUFBMENDLFNBQTFDLEVBQXFEO0FBQ3BELFFBQUk5eUMsUUFBUSxFQUFaO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQUkreUMsTUFBSjtBQUNBLFFBQUlDLFNBQUo7QUFDQSxRQUFJQyxPQUFKOztBQUVBLFFBQUlKLGtCQUFrQkssUUFBbEIsSUFBOEJMLGtCQUFrQkssUUFBbEIsR0FBNkIsQ0FBL0QsRUFBa0U7QUFDakVELGVBQVVKLGtCQUFrQkssUUFBNUI7QUFDQSxLQUZELE1BRU87QUFDTixTQUFJQyxZQUFZdDNDLFFBQVEybEIsT0FBUixDQUFnQnN4QixVQUFVdHJELEdBQVYsR0FBZ0JzckQsVUFBVXZyRCxHQUExQyxFQUErQyxLQUEvQyxDQUFoQjtBQUNBMHJELGVBQVVwM0MsUUFBUTJsQixPQUFSLENBQWdCMnhCLGFBQWFOLGtCQUFrQmhnQixRQUFsQixHQUE2QixDQUExQyxDQUFoQixFQUE4RCxJQUE5RCxDQUFWOztBQUVBbWdCLGlCQUFZSCxrQkFBa0JHLFNBQTlCO0FBQ0EsU0FBSUEsY0FBYzVyRCxTQUFsQixFQUE2QjtBQUM1QjtBQUNBMnJELGVBQVMxc0QsS0FBS2lFLEdBQUwsQ0FBUyxFQUFULEVBQWEwb0QsU0FBYixDQUFUO0FBQ0FDLGdCQUFVNXNELEtBQUtrc0QsSUFBTCxDQUFVVSxVQUFVRixNQUFwQixJQUE4QkEsTUFBeEM7QUFDQTtBQUNEO0FBQ0QsUUFBSUssVUFBVS9zRCxLQUFLK0ssS0FBTCxDQUFXMGhELFVBQVV2ckQsR0FBVixHQUFnQjByRCxPQUEzQixJQUFzQ0EsT0FBcEQ7QUFDQSxRQUFJSSxVQUFVaHRELEtBQUtrc0QsSUFBTCxDQUFVTyxVQUFVdHJELEdBQVYsR0FBZ0J5ckQsT0FBMUIsSUFBcUNBLE9BQW5EOztBQUVBO0FBQ0EsUUFBSSxDQUFDcDNDLFFBQVFpRixhQUFSLENBQXNCK3hDLGtCQUFrQnRyRCxHQUF4QyxDQUFELElBQWlELENBQUNzVSxRQUFRaUYsYUFBUixDQUFzQit4QyxrQkFBa0JyckQsR0FBeEMsQ0FBbEQsSUFBa0dxckQsa0JBQWtCSyxRQUF4SCxFQUFrSTtBQUNqSTtBQUNBLFNBQUlyM0MsUUFBUXlpQixXQUFSLENBQW9CLENBQUN1MEIsa0JBQWtCcnJELEdBQWxCLEdBQXdCcXJELGtCQUFrQnRyRCxHQUEzQyxJQUFrRHNyRCxrQkFBa0JLLFFBQXhGLEVBQWtHRCxVQUFVLElBQTVHLENBQUosRUFBdUg7QUFDdEhHLGdCQUFVUCxrQkFBa0J0ckQsR0FBNUI7QUFDQThyRCxnQkFBVVIsa0JBQWtCcnJELEdBQTVCO0FBQ0E7QUFDRDs7QUFFRCxRQUFJOHJELFlBQVksQ0FBQ0QsVUFBVUQsT0FBWCxJQUFzQkgsT0FBdEM7QUFDQTtBQUNBLFFBQUlwM0MsUUFBUXVpQixZQUFSLENBQXFCazFCLFNBQXJCLEVBQWdDanRELEtBQUtDLEtBQUwsQ0FBV2d0RCxTQUFYLENBQWhDLEVBQXVETCxVQUFVLElBQWpFLENBQUosRUFBNEU7QUFDM0VLLGlCQUFZanRELEtBQUtDLEtBQUwsQ0FBV2d0RCxTQUFYLENBQVo7QUFDQSxLQUZELE1BRU87QUFDTkEsaUJBQVlqdEQsS0FBS2tzRCxJQUFMLENBQVVlLFNBQVYsQ0FBWjtBQUNBOztBQUVETixnQkFBWSxDQUFaO0FBQ0EsUUFBSUMsVUFBVSxDQUFkLEVBQWlCO0FBQ2hCRCxpQkFBWTNzRCxLQUFLaUUsR0FBTCxDQUFTLEVBQVQsRUFBYSxJQUFJakUsS0FBSytLLEtBQUwsQ0FBV3lLLFFBQVE4aUIsS0FBUixDQUFjczBCLE9BQWQsQ0FBWCxDQUFqQixDQUFaO0FBQ0FHLGVBQVUvc0QsS0FBS0MsS0FBTCxDQUFXOHNELFVBQVVKLFNBQXJCLElBQWtDQSxTQUE1QztBQUNBSyxlQUFVaHRELEtBQUtDLEtBQUwsQ0FBVytzRCxVQUFVTCxTQUFyQixJQUFrQ0EsU0FBNUM7QUFDQTtBQUNEaHpDLFVBQU04RSxJQUFOLENBQVcrdEMsa0JBQWtCdHJELEdBQWxCLEtBQTBCSCxTQUExQixHQUFzQ3lyRCxrQkFBa0J0ckQsR0FBeEQsR0FBOEQ2ckQsT0FBekU7QUFDQSxTQUFLLElBQUlwcEMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJc3BDLFNBQXBCLEVBQStCLEVBQUV0cEMsQ0FBakMsRUFBb0M7QUFDbkNoSyxXQUFNOEUsSUFBTixDQUFXemUsS0FBS0MsS0FBTCxDQUFXLENBQUM4c0QsVUFBVXBwQyxJQUFJaXBDLE9BQWYsSUFBMEJELFNBQXJDLElBQWtEQSxTQUE3RDtBQUNBO0FBQ0RoekMsVUFBTThFLElBQU4sQ0FBVyt0QyxrQkFBa0JyckQsR0FBbEIsS0FBMEJKLFNBQTFCLEdBQXNDeXJELGtCQUFrQnJyRCxHQUF4RCxHQUE4RDZyRCxPQUF6RTs7QUFFQSxXQUFPcnpDLEtBQVA7QUFDQTs7QUFFRDNjLFVBQU9ELE9BQVAsR0FBaUIsVUFBU08sS0FBVCxFQUFnQjs7QUFFaEMsUUFBSWttQixPQUFPaE8sUUFBUWdPLElBQW5COztBQUVBbG1CLFVBQU04dEQsZUFBTixHQUF3QmwxQyxNQUFNYSxNQUFOLENBQWE7QUFDcENnSSxvQkFBZSx1QkFBUzVjLEtBQVQsRUFBZ0I7QUFDOUIsVUFBSSxPQUFPQSxLQUFQLEtBQWlCLFFBQXJCLEVBQStCO0FBQzlCLGNBQU8sQ0FBQ0EsS0FBUjtBQUNBO0FBQ0QsYUFBTytULE1BQU01VCxTQUFOLENBQWdCeWMsYUFBaEIsQ0FBOEIzZ0IsSUFBOUIsQ0FBbUMsSUFBbkMsRUFBeUMrRCxLQUF6QyxDQUFQO0FBQ0EsTUFObUM7O0FBUXBDNnBELDZCQUF3QixrQ0FBVztBQUNsQyxVQUFJM3dDLEtBQUssSUFBVDtBQUNBLFVBQUl1SSxPQUFPdkksR0FBR2xCLE9BQWQ7QUFDQSxVQUFJMnZCLFdBQVdsbUIsS0FBS2pLLEtBQXBCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQUltd0IsU0FBU3JnQixXQUFiLEVBQTBCO0FBQ3pCLFdBQUl5akMsVUFBVTEzQyxRQUFRNmlCLElBQVIsQ0FBYWhkLEdBQUduYSxHQUFoQixDQUFkO0FBQ0EsV0FBSWlzRCxVQUFVMzNDLFFBQVE2aUIsSUFBUixDQUFhaGQsR0FBR2xhLEdBQWhCLENBQWQ7O0FBRUEsV0FBSStyRCxVQUFVLENBQVYsSUFBZUMsVUFBVSxDQUE3QixFQUFnQztBQUMvQjtBQUNBOXhDLFdBQUdsYSxHQUFILEdBQVMsQ0FBVDtBQUNBLFFBSEQsTUFHTyxJQUFJK3JELFVBQVUsQ0FBVixJQUFlQyxVQUFVLENBQTdCLEVBQWdDO0FBQ3RDO0FBQ0E5eEMsV0FBR25hLEdBQUgsR0FBUyxDQUFUO0FBQ0E7QUFDRDs7QUFFRCxVQUFJa3NELFNBQVN0akIsU0FBUzVvQyxHQUFULEtBQWlCSCxTQUFqQixJQUE4QitvQyxTQUFTdWpCLFlBQVQsS0FBMEJ0c0QsU0FBckU7QUFDQSxVQUFJdXNELFNBQVN4akIsU0FBUzNvQyxHQUFULEtBQWlCSixTQUFqQixJQUE4QitvQyxTQUFTeWpCLFlBQVQsS0FBMEJ4c0QsU0FBckU7O0FBRUEsVUFBSStvQyxTQUFTNW9DLEdBQVQsS0FBaUJILFNBQXJCLEVBQWdDO0FBQy9Cc2EsVUFBR25hLEdBQUgsR0FBUzRvQyxTQUFTNW9DLEdBQWxCO0FBQ0EsT0FGRCxNQUVPLElBQUk0b0MsU0FBU3VqQixZQUFULEtBQTBCdHNELFNBQTlCLEVBQXlDO0FBQy9DLFdBQUlzYSxHQUFHbmEsR0FBSCxLQUFXLElBQWYsRUFBcUI7QUFDcEJtYSxXQUFHbmEsR0FBSCxHQUFTNG9DLFNBQVN1akIsWUFBbEI7QUFDQSxRQUZELE1BRU87QUFDTmh5QyxXQUFHbmEsR0FBSCxHQUFTbEIsS0FBS2tCLEdBQUwsQ0FBU21hLEdBQUduYSxHQUFaLEVBQWlCNG9DLFNBQVN1akIsWUFBMUIsQ0FBVDtBQUNBO0FBQ0Q7O0FBRUQsVUFBSXZqQixTQUFTM29DLEdBQVQsS0FBaUJKLFNBQXJCLEVBQWdDO0FBQy9Cc2EsVUFBR2xhLEdBQUgsR0FBUzJvQyxTQUFTM29DLEdBQWxCO0FBQ0EsT0FGRCxNQUVPLElBQUkyb0MsU0FBU3lqQixZQUFULEtBQTBCeHNELFNBQTlCLEVBQXlDO0FBQy9DLFdBQUlzYSxHQUFHbGEsR0FBSCxLQUFXLElBQWYsRUFBcUI7QUFDcEJrYSxXQUFHbGEsR0FBSCxHQUFTMm9DLFNBQVN5akIsWUFBbEI7QUFDQSxRQUZELE1BRU87QUFDTmx5QyxXQUFHbGEsR0FBSCxHQUFTbkIsS0FBS21CLEdBQUwsQ0FBU2thLEdBQUdsYSxHQUFaLEVBQWlCMm9DLFNBQVN5akIsWUFBMUIsQ0FBVDtBQUNBO0FBQ0Q7O0FBRUQsVUFBSUgsV0FBV0UsTUFBZixFQUF1QjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQUlqeUMsR0FBR25hLEdBQUgsSUFBVW1hLEdBQUdsYSxHQUFqQixFQUFzQjtBQUNyQixZQUFJaXNELE1BQUosRUFBWTtBQUNYL3hDLFlBQUdsYSxHQUFILEdBQVNrYSxHQUFHbmEsR0FBSCxHQUFTLENBQWxCO0FBQ0EsU0FGRCxNQUVPO0FBQ05tYSxZQUFHbmEsR0FBSCxHQUFTbWEsR0FBR2xhLEdBQUgsR0FBUyxDQUFsQjtBQUNBO0FBQ0Q7QUFDRDs7QUFFRCxVQUFJa2EsR0FBR25hLEdBQUgsS0FBV21hLEdBQUdsYSxHQUFsQixFQUF1QjtBQUN0QmthLFVBQUdsYSxHQUFIOztBQUVBLFdBQUksQ0FBQzJvQyxTQUFTcmdCLFdBQWQsRUFBMkI7QUFDMUJwTyxXQUFHbmEsR0FBSDtBQUNBO0FBQ0Q7QUFDRCxNQXpFbUM7QUEwRXBDK3FELG1CQUFjem9DLElBMUVzQjtBQTJFcEM0b0MsK0JBQTBCNW9DLElBM0VVOztBQTZFcEMwbEIsaUJBQVksc0JBQVc7QUFDdEIsVUFBSTd0QixLQUFLLElBQVQ7QUFDQSxVQUFJdUksT0FBT3ZJLEdBQUdsQixPQUFkO0FBQ0EsVUFBSTJ2QixXQUFXbG1CLEtBQUtqSyxLQUFwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQUk2eUIsV0FBV254QixHQUFHNHdDLFlBQUgsRUFBZjtBQUNBemYsaUJBQVd4c0MsS0FBS21CLEdBQUwsQ0FBUyxDQUFULEVBQVlxckMsUUFBWixDQUFYOztBQUVBLFVBQUlnaEIsMEJBQTBCO0FBQzdCaGhCLGlCQUFVQSxRQURtQjtBQUU3QnRyQyxZQUFLNG9DLFNBQVM1b0MsR0FGZTtBQUc3QkMsWUFBSzJvQyxTQUFTM29DLEdBSGU7QUFJN0J3ckQsa0JBQVc3aUIsU0FBUzZpQixTQUpTO0FBSzdCRSxpQkFBVXIzQyxRQUFROEosY0FBUixDQUF1QndxQixTQUFTMmpCLGFBQWhDLEVBQStDM2pCLFNBQVMraUIsUUFBeEQ7QUFMbUIsT0FBOUI7QUFPQSxVQUFJbHpDLFFBQVEwQixHQUFHMUIsS0FBSCxHQUFXNHlDLGNBQWNpQix1QkFBZCxFQUF1Q255QyxFQUF2QyxDQUF2Qjs7QUFFQUEsU0FBRyt3Qyx3QkFBSDs7QUFFQTtBQUNBO0FBQ0Evd0MsU0FBR2xhLEdBQUgsR0FBU3FVLFFBQVFyVSxHQUFSLENBQVl3WSxLQUFaLENBQVQ7QUFDQTBCLFNBQUduYSxHQUFILEdBQVNzVSxRQUFRdFUsR0FBUixDQUFZeVksS0FBWixDQUFUOztBQUVBLFVBQUltd0IsU0FBU3ZILE9BQWIsRUFBc0I7QUFDckI1b0IsYUFBTTRvQixPQUFOOztBQUVBbG5CLFVBQUdWLEtBQUgsR0FBV1UsR0FBR2xhLEdBQWQ7QUFDQWthLFVBQUdOLEdBQUgsR0FBU00sR0FBR25hLEdBQVo7QUFDQSxPQUxELE1BS087QUFDTm1hLFVBQUdWLEtBQUgsR0FBV1UsR0FBR25hLEdBQWQ7QUFDQW1hLFVBQUdOLEdBQUgsR0FBU00sR0FBR2xhLEdBQVo7QUFDQTtBQUNELE1BbEhtQztBQW1IcENrb0MsMkJBQXNCLGdDQUFXO0FBQ2hDLFVBQUlodUIsS0FBSyxJQUFUO0FBQ0FBLFNBQUdpeEMsY0FBSCxHQUFvQmp4QyxHQUFHMUIsS0FBSCxDQUFTN1osS0FBVCxFQUFwQjtBQUNBdWIsU0FBR3F5QixhQUFILEdBQW1CcnlCLEdBQUcxQixLQUFILENBQVM2RSxPQUFULENBQWlCLENBQWpCLENBQW5COztBQUVBdEksWUFBTTVULFNBQU4sQ0FBZ0IrbUMsb0JBQWhCLENBQXFDanJDLElBQXJDLENBQTBDaWQsRUFBMUM7QUFDQTtBQXpIbUMsS0FBYixDQUF4QjtBQTJIQSxJQS9IRDtBQWlJQyxHQXZNdUMsRUF1TXRDLEVBQUMsTUFBSyxFQUFOLEVBQVMsTUFBSyxFQUFkLEVBdk1zQyxDQWh5WWl4QixFQXUrWXB5QixJQUFHLENBQUMsVUFBU3ZkLE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUN6RDs7QUFFQSxPQUFJeVksVUFBVTFYLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSW9ZLFFBQVFwWSxRQUFRLEVBQVIsQ0FBWjtBQUNBLE9BQUlxWSxlQUFlclksUUFBUSxFQUFSLENBQW5CO0FBQ0EsT0FBSXNZLFFBQVF0WSxRQUFRLEVBQVIsQ0FBWjs7QUFFQTs7Ozs7O0FBTUEsWUFBU3l1RCxhQUFULENBQXVCQyxpQkFBdkIsRUFBMENDLFNBQTFDLEVBQXFEO0FBQ3BELFFBQUk5eUMsUUFBUSxFQUFaO0FBQ0EsUUFBSTJGLGlCQUFpQjlKLFFBQVE4SixjQUE3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQUlvdUMsVUFBVXB1QyxlQUFla3RDLGtCQUFrQnRyRCxHQUFqQyxFQUFzQ2xCLEtBQUtpRSxHQUFMLENBQVMsRUFBVCxFQUFhakUsS0FBSytLLEtBQUwsQ0FBV3lLLFFBQVE4aUIsS0FBUixDQUFjbTBCLFVBQVV2ckQsR0FBeEIsQ0FBWCxDQUFiLENBQXRDLENBQWQ7O0FBRUEsUUFBSXlzRCxTQUFTM3RELEtBQUsrSyxLQUFMLENBQVd5SyxRQUFROGlCLEtBQVIsQ0FBY20wQixVQUFVdHJELEdBQXhCLENBQVgsQ0FBYjtBQUNBLFFBQUl5c0QsaUJBQWlCNXRELEtBQUtrc0QsSUFBTCxDQUFVTyxVQUFVdHJELEdBQVYsR0FBZ0JuQixLQUFLaUUsR0FBTCxDQUFTLEVBQVQsRUFBYTBwRCxNQUFiLENBQTFCLENBQXJCO0FBQ0EsUUFBSUUsR0FBSixFQUFTQyxXQUFUOztBQUVBLFFBQUlKLFlBQVksQ0FBaEIsRUFBbUI7QUFDbEJHLFdBQU03dEQsS0FBSytLLEtBQUwsQ0FBV3lLLFFBQVE4aUIsS0FBUixDQUFjbTBCLFVBQVVzQixVQUF4QixDQUFYLENBQU47QUFDQUQsbUJBQWM5dEQsS0FBSytLLEtBQUwsQ0FBVzBoRCxVQUFVc0IsVUFBVixHQUF1Qi90RCxLQUFLaUUsR0FBTCxDQUFTLEVBQVQsRUFBYTRwRCxHQUFiLENBQWxDLENBQWQ7O0FBRUFsMEMsV0FBTThFLElBQU4sQ0FBV2l2QyxPQUFYO0FBQ0FBLGVBQVVJLGNBQWM5dEQsS0FBS2lFLEdBQUwsQ0FBUyxFQUFULEVBQWE0cEQsR0FBYixDQUF4QjtBQUNBLEtBTkQsTUFNTztBQUNOQSxXQUFNN3RELEtBQUsrSyxLQUFMLENBQVd5SyxRQUFROGlCLEtBQVIsQ0FBY28xQixPQUFkLENBQVgsQ0FBTjtBQUNBSSxtQkFBYzl0RCxLQUFLK0ssS0FBTCxDQUFXMmlELFVBQVUxdEQsS0FBS2lFLEdBQUwsQ0FBUyxFQUFULEVBQWE0cEQsR0FBYixDQUFyQixDQUFkO0FBQ0E7QUFDRCxRQUFJbEIsWUFBWWtCLE1BQU0sQ0FBTixHQUFVN3RELEtBQUtpRSxHQUFMLENBQVMsRUFBVCxFQUFhakUsS0FBS3dsQixHQUFMLENBQVNxb0MsR0FBVCxDQUFiLENBQVYsR0FBd0MsQ0FBeEQ7O0FBRUEsT0FBRztBQUNGbDBDLFdBQU04RSxJQUFOLENBQVdpdkMsT0FBWDs7QUFFQSxPQUFFSSxXQUFGO0FBQ0EsU0FBSUEsZ0JBQWdCLEVBQXBCLEVBQXdCO0FBQ3ZCQSxvQkFBYyxDQUFkO0FBQ0EsUUFBRUQsR0FBRjtBQUNBbEIsa0JBQVlrQixPQUFPLENBQVAsR0FBVyxDQUFYLEdBQWVsQixTQUEzQjtBQUNBOztBQUVEZSxlQUFVMXRELEtBQUtDLEtBQUwsQ0FBVzZ0RCxjQUFjOXRELEtBQUtpRSxHQUFMLENBQVMsRUFBVCxFQUFhNHBELEdBQWIsQ0FBZCxHQUFrQ2xCLFNBQTdDLElBQTBEQSxTQUFwRTtBQUNBLEtBWEQsUUFXU2tCLE1BQU1GLE1BQU4sSUFBaUJFLFFBQVFGLE1BQVIsSUFBa0JHLGNBQWNGLGNBWDFEOztBQWFBLFFBQUlJLFdBQVcxdUMsZUFBZWt0QyxrQkFBa0JyckQsR0FBakMsRUFBc0N1c0QsT0FBdEMsQ0FBZjtBQUNBL3pDLFVBQU04RSxJQUFOLENBQVd1dkMsUUFBWDs7QUFFQSxXQUFPcjBDLEtBQVA7QUFDQTs7QUFHRDNjLFVBQU9ELE9BQVAsR0FBaUIsVUFBU08sS0FBVCxFQUFnQjs7QUFFaEMsUUFBSThzRCxnQkFBZ0I7QUFDbkI1eEMsZUFBVSxNQURTOztBQUduQjtBQUNBbUIsWUFBTztBQUNOb1QsZ0JBQVUzVyxNQUFNbXhCLFVBQU4sQ0FBaUJxSjtBQURyQjtBQUpZLEtBQXBCOztBQVNBLFFBQUlxZCxtQkFBbUIvM0MsTUFBTWEsTUFBTixDQUFhO0FBQ25DZ3lCLDBCQUFxQiwrQkFBVztBQUMvQixVQUFJMXRCLEtBQUssSUFBVDtBQUNBLFVBQUl1SSxPQUFPdkksR0FBR2xCLE9BQWQ7QUFDQSxVQUFJOEIsUUFBUVosR0FBR1ksS0FBZjtBQUNBLFVBQUluRCxPQUFPbUQsTUFBTW5ELElBQWpCO0FBQ0EsVUFBSUssV0FBV0wsS0FBS0ssUUFBcEI7QUFDQSxVQUFJSyxlQUFlNkIsR0FBRzdCLFlBQUgsRUFBbkI7QUFDQSxlQUFTK3hDLFNBQVQsQ0FBbUJqd0MsSUFBbkIsRUFBeUI7QUFDeEIsY0FBTzlCLGVBQWU4QixLQUFLaUIsT0FBTCxLQUFpQmxCLEdBQUc4RCxFQUFuQyxHQUF3QzdELEtBQUttQixPQUFMLEtBQWlCcEIsR0FBRzhELEVBQW5FO0FBQ0E7O0FBRUQ7QUFDQTlELFNBQUduYSxHQUFILEdBQVMsSUFBVDtBQUNBbWEsU0FBR2xhLEdBQUgsR0FBUyxJQUFUO0FBQ0FrYSxTQUFHMHlDLFVBQUgsR0FBZ0IsSUFBaEI7O0FBRUEsVUFBSXZDLFlBQVk1bkMsS0FBS3hGLE9BQXJCO0FBQ0EsVUFBSW90QyxjQUFjenFELFNBQWxCLEVBQTZCO0FBQzVCeVUsZUFBUTJLLElBQVIsQ0FBYWhILFFBQWIsRUFBdUIsVUFBUytDLE9BQVQsRUFBa0I5QyxZQUFsQixFQUFnQztBQUN0RCxZQUFJb3lDLFNBQUosRUFBZTtBQUNkO0FBQ0E7O0FBRUQsWUFBSWx3QyxPQUFPVyxNQUFNcUMsY0FBTixDQUFxQmxGLFlBQXJCLENBQVg7QUFDQSxZQUFJNkMsTUFBTXNDLGdCQUFOLENBQXVCbkYsWUFBdkIsS0FBd0NteUMsVUFBVWp3QyxJQUFWLENBQXhDLElBQ0hBLEtBQUtHLEtBQUwsS0FBZTFhLFNBRGhCLEVBQzJCO0FBQzFCeXFELHFCQUFZLElBQVo7QUFDQTtBQUNELFFBVkQ7QUFXQTs7QUFFRCxVQUFJNW5DLEtBQUt4RixPQUFMLElBQWdCb3RDLFNBQXBCLEVBQStCO0FBQzlCLFdBQUlDLGlCQUFpQixFQUFyQjs7QUFFQWoyQyxlQUFRMkssSUFBUixDQUFhaEgsUUFBYixFQUF1QixVQUFTK0MsT0FBVCxFQUFrQjlDLFlBQWxCLEVBQWdDO0FBQ3RELFlBQUlrQyxPQUFPVyxNQUFNcUMsY0FBTixDQUFxQmxGLFlBQXJCLENBQVg7QUFDQSxZQUFJekUsTUFBTSxDQUNUMkcsS0FBS25WLElBREk7QUFFVDtBQUNFeWQsYUFBS3hGLE9BQUwsS0FBaUJyZCxTQUFqQixJQUE4QnVhLEtBQUtHLEtBQUwsS0FBZTFhLFNBQTlDLEdBQTJEcVksWUFBM0QsR0FBMEUsRUFIbEUsRUFJVGtDLEtBQUtHLEtBSkksRUFLUnVHLElBTFEsQ0FLSCxHQUxHLENBQVY7O0FBT0EsWUFBSS9GLE1BQU1zQyxnQkFBTixDQUF1Qm5GLFlBQXZCLEtBQXdDbXlDLFVBQVVqd0MsSUFBVixDQUE1QyxFQUE2RDtBQUM1RCxhQUFJbXdDLGVBQWU5MkMsR0FBZixNQUF3QjVULFNBQTVCLEVBQXVDO0FBQ3RDMHFELHlCQUFlOTJDLEdBQWYsSUFBc0IsRUFBdEI7QUFDQTs7QUFFRGEsaUJBQVEySyxJQUFSLENBQWFqRSxRQUFRcEQsSUFBckIsRUFBMkIsVUFBU3l5QixRQUFULEVBQW1CcmtDLEtBQW5CLEVBQTBCO0FBQ3BELGNBQUl0RixTQUFTNnBELGVBQWU5MkMsR0FBZixDQUFiO0FBQ0EsY0FBSXhTLFFBQVEsQ0FBQ2taLEdBQUcwRCxhQUFILENBQWlCd3NCLFFBQWpCLENBQWI7QUFDQTtBQUNBLGNBQUkvcUMsTUFBTTJCLEtBQU4sS0FBZ0JtWixLQUFLeEMsSUFBTCxDQUFVNVIsS0FBVixFQUFpQjBiLE1BQWpDLElBQTJDemdCLFFBQVEsQ0FBdkQsRUFBMEQ7QUFDekQ7QUFDQTtBQUNEUCxpQkFBT3NGLEtBQVAsSUFBZ0J0RixPQUFPc0YsS0FBUCxLQUFpQixDQUFqQztBQUNBdEYsaUJBQU9zRixLQUFQLEtBQWlCL0UsS0FBakI7QUFDQSxVQVREO0FBVUE7QUFDRCxRQXpCRDs7QUEyQkFxVCxlQUFRMkssSUFBUixDQUFhc3JDLGNBQWIsRUFBNkIsVUFBU0ksYUFBVCxFQUF3QjtBQUNwRCxZQUFJQSxjQUFjeHRELE1BQWQsR0FBdUIsQ0FBM0IsRUFBOEI7QUFDN0IsYUFBSXl0RCxTQUFTdDJDLFFBQVF0VSxHQUFSLENBQVkycUQsYUFBWixDQUFiO0FBQ0EsYUFBSUUsU0FBU3YyQyxRQUFRclUsR0FBUixDQUFZMHFELGFBQVosQ0FBYjtBQUNBeHdDLFlBQUduYSxHQUFILEdBQVNtYSxHQUFHbmEsR0FBSCxLQUFXLElBQVgsR0FBa0I0cUQsTUFBbEIsR0FBMkI5ckQsS0FBS2tCLEdBQUwsQ0FBU21hLEdBQUduYSxHQUFaLEVBQWlCNHFELE1BQWpCLENBQXBDO0FBQ0F6d0MsWUFBR2xhLEdBQUgsR0FBU2thLEdBQUdsYSxHQUFILEtBQVcsSUFBWCxHQUFrQjRxRCxNQUFsQixHQUEyQi9yRCxLQUFLbUIsR0FBTCxDQUFTa2EsR0FBR2xhLEdBQVosRUFBaUI0cUQsTUFBakIsQ0FBcEM7QUFDQTtBQUNELFFBUEQ7QUFTQSxPQXZDRCxNQXVDTztBQUNOdjJDLGVBQVEySyxJQUFSLENBQWFoSCxRQUFiLEVBQXVCLFVBQVMrQyxPQUFULEVBQWtCOUMsWUFBbEIsRUFBZ0M7QUFDdEQsWUFBSWtDLE9BQU9XLE1BQU1xQyxjQUFOLENBQXFCbEYsWUFBckIsQ0FBWDtBQUNBLFlBQUk2QyxNQUFNc0MsZ0JBQU4sQ0FBdUJuRixZQUF2QixLQUF3Q215QyxVQUFVandDLElBQVYsQ0FBNUMsRUFBNkQ7QUFDNUQ5RixpQkFBUTJLLElBQVIsQ0FBYWpFLFFBQVFwRCxJQUFyQixFQUEyQixVQUFTeXlCLFFBQVQsRUFBbUJya0MsS0FBbkIsRUFBMEI7QUFDcEQsY0FBSS9FLFFBQVEsQ0FBQ2taLEdBQUcwRCxhQUFILENBQWlCd3NCLFFBQWpCLENBQWI7QUFDQTtBQUNBLGNBQUkvcUMsTUFBTTJCLEtBQU4sS0FBZ0JtWixLQUFLeEMsSUFBTCxDQUFVNVIsS0FBVixFQUFpQjBiLE1BQWpDLElBQTJDemdCLFFBQVEsQ0FBdkQsRUFBMEQ7QUFDekQ7QUFDQTs7QUFFRCxjQUFJa1osR0FBR25hLEdBQUgsS0FBVyxJQUFmLEVBQXFCO0FBQ3BCbWEsY0FBR25hLEdBQUgsR0FBU2lCLEtBQVQ7QUFDQSxXQUZELE1BRU8sSUFBSUEsUUFBUWtaLEdBQUduYSxHQUFmLEVBQW9CO0FBQzFCbWEsY0FBR25hLEdBQUgsR0FBU2lCLEtBQVQ7QUFDQTs7QUFFRCxjQUFJa1osR0FBR2xhLEdBQUgsS0FBVyxJQUFmLEVBQXFCO0FBQ3BCa2EsY0FBR2xhLEdBQUgsR0FBU2dCLEtBQVQ7QUFDQSxXQUZELE1BRU8sSUFBSUEsUUFBUWtaLEdBQUdsYSxHQUFmLEVBQW9CO0FBQzFCa2EsY0FBR2xhLEdBQUgsR0FBU2dCLEtBQVQ7QUFDQTs7QUFFRCxjQUFJQSxVQUFVLENBQVYsS0FBZ0JrWixHQUFHMHlDLFVBQUgsS0FBa0IsSUFBbEIsSUFBMEI1ckQsUUFBUWtaLEdBQUcweUMsVUFBckQsQ0FBSixFQUFzRTtBQUNyRTF5QyxjQUFHMHlDLFVBQUgsR0FBZ0I1ckQsS0FBaEI7QUFDQTtBQUNELFVBdEJEO0FBdUJBO0FBQ0QsUUEzQkQ7QUE0QkE7O0FBRUQ7QUFDQSxXQUFLNnBELHNCQUFMO0FBQ0EsTUF4R2tDO0FBeUduQ0EsNkJBQXdCLGtDQUFXO0FBQ2xDLFVBQUkzd0MsS0FBSyxJQUFUO0FBQ0EsVUFBSXVJLE9BQU92SSxHQUFHbEIsT0FBZDtBQUNBLFVBQUkydkIsV0FBV2xtQixLQUFLakssS0FBcEI7QUFDQSxVQUFJMkYsaUJBQWlCOUosUUFBUThKLGNBQTdCO0FBQ0EsVUFBSStyQyxjQUFjLENBQWxCO0FBQ0EsVUFBSUMsY0FBYyxFQUFsQjs7QUFFQWp3QyxTQUFHbmEsR0FBSCxHQUFTb2UsZUFBZXdxQixTQUFTNW9DLEdBQXhCLEVBQTZCbWEsR0FBR25hLEdBQWhDLENBQVQ7QUFDQW1hLFNBQUdsYSxHQUFILEdBQVNtZSxlQUFld3FCLFNBQVMzb0MsR0FBeEIsRUFBNkJrYSxHQUFHbGEsR0FBaEMsQ0FBVDs7QUFFQSxVQUFJa2EsR0FBR25hLEdBQUgsS0FBV21hLEdBQUdsYSxHQUFsQixFQUF1QjtBQUN0QixXQUFJa2EsR0FBR25hLEdBQUgsS0FBVyxDQUFYLElBQWdCbWEsR0FBR25hLEdBQUgsS0FBVyxJQUEvQixFQUFxQztBQUNwQ21hLFdBQUduYSxHQUFILEdBQVNsQixLQUFLaUUsR0FBTCxDQUFTLEVBQVQsRUFBYWpFLEtBQUsrSyxLQUFMLENBQVd5SyxRQUFROGlCLEtBQVIsQ0FBY2pkLEdBQUduYSxHQUFqQixDQUFYLElBQW9DLENBQWpELENBQVQ7QUFDQW1hLFdBQUdsYSxHQUFILEdBQVNuQixLQUFLaUUsR0FBTCxDQUFTLEVBQVQsRUFBYWpFLEtBQUsrSyxLQUFMLENBQVd5SyxRQUFROGlCLEtBQVIsQ0FBY2pkLEdBQUdsYSxHQUFqQixDQUFYLElBQW9DLENBQWpELENBQVQ7QUFDQSxRQUhELE1BR087QUFDTmthLFdBQUduYSxHQUFILEdBQVNtcUQsV0FBVDtBQUNBaHdDLFdBQUdsYSxHQUFILEdBQVNtcUQsV0FBVDtBQUNBO0FBQ0Q7QUFDRCxVQUFJandDLEdBQUduYSxHQUFILEtBQVcsSUFBZixFQUFxQjtBQUNwQm1hLFVBQUduYSxHQUFILEdBQVNsQixLQUFLaUUsR0FBTCxDQUFTLEVBQVQsRUFBYWpFLEtBQUsrSyxLQUFMLENBQVd5SyxRQUFROGlCLEtBQVIsQ0FBY2pkLEdBQUdsYSxHQUFqQixDQUFYLElBQW9DLENBQWpELENBQVQ7QUFDQTtBQUNELFVBQUlrYSxHQUFHbGEsR0FBSCxLQUFXLElBQWYsRUFBcUI7QUFDcEJrYSxVQUFHbGEsR0FBSCxHQUFTa2EsR0FBR25hLEdBQUgsS0FBVyxDQUFYLEdBQ05sQixLQUFLaUUsR0FBTCxDQUFTLEVBQVQsRUFBYWpFLEtBQUsrSyxLQUFMLENBQVd5SyxRQUFROGlCLEtBQVIsQ0FBY2pkLEdBQUduYSxHQUFqQixDQUFYLElBQW9DLENBQWpELENBRE0sR0FFTm9xRCxXQUZIO0FBR0E7QUFDRCxVQUFJandDLEdBQUcweUMsVUFBSCxLQUFrQixJQUF0QixFQUE0QjtBQUMzQixXQUFJMXlDLEdBQUduYSxHQUFILEdBQVMsQ0FBYixFQUFnQjtBQUNmbWEsV0FBRzB5QyxVQUFILEdBQWdCMXlDLEdBQUduYSxHQUFuQjtBQUNBLFFBRkQsTUFFTyxJQUFJbWEsR0FBR2xhLEdBQUgsR0FBUyxDQUFiLEVBQWdCO0FBQ3RCa2EsV0FBRzB5QyxVQUFILEdBQWdCL3RELEtBQUtpRSxHQUFMLENBQVMsRUFBVCxFQUFhakUsS0FBSytLLEtBQUwsQ0FBV3lLLFFBQVE4aUIsS0FBUixDQUFjamQsR0FBR2xhLEdBQWpCLENBQVgsQ0FBYixDQUFoQjtBQUNBLFFBRk0sTUFFQTtBQUNOa2EsV0FBRzB5QyxVQUFILEdBQWdCMUMsV0FBaEI7QUFDQTtBQUNEO0FBQ0QsTUE5SWtDO0FBK0luQ25pQixpQkFBWSxzQkFBVztBQUN0QixVQUFJN3RCLEtBQUssSUFBVDtBQUNBLFVBQUl1SSxPQUFPdkksR0FBR2xCLE9BQWQ7QUFDQSxVQUFJMnZCLFdBQVdsbUIsS0FBS2pLLEtBQXBCO0FBQ0EsVUFBSTRvQixVQUFVLENBQUNsbkIsR0FBRzdCLFlBQUgsRUFBZjs7QUFFQSxVQUFJZ3pDLG9CQUFvQjtBQUN2QnRyRCxZQUFLNG9DLFNBQVM1b0MsR0FEUztBQUV2QkMsWUFBSzJvQyxTQUFTM29DO0FBRlMsT0FBeEI7QUFJQSxVQUFJd1ksUUFBUTBCLEdBQUcxQixLQUFILEdBQVc0eUMsY0FBY0MsaUJBQWQsRUFBaUNueEMsRUFBakMsQ0FBdkI7O0FBRUE7QUFDQTtBQUNBQSxTQUFHbGEsR0FBSCxHQUFTcVUsUUFBUXJVLEdBQVIsQ0FBWXdZLEtBQVosQ0FBVDtBQUNBMEIsU0FBR25hLEdBQUgsR0FBU3NVLFFBQVF0VSxHQUFSLENBQVl5WSxLQUFaLENBQVQ7O0FBRUEsVUFBSW13QixTQUFTdkgsT0FBYixFQUFzQjtBQUNyQkEsaUJBQVUsQ0FBQ0EsT0FBWDtBQUNBbG5CLFVBQUdWLEtBQUgsR0FBV1UsR0FBR2xhLEdBQWQ7QUFDQWthLFVBQUdOLEdBQUgsR0FBU00sR0FBR25hLEdBQVo7QUFDQSxPQUpELE1BSU87QUFDTm1hLFVBQUdWLEtBQUgsR0FBV1UsR0FBR25hLEdBQWQ7QUFDQW1hLFVBQUdOLEdBQUgsR0FBU00sR0FBR2xhLEdBQVo7QUFDQTtBQUNELFVBQUlvaEMsT0FBSixFQUFhO0FBQ1o1b0IsYUFBTTRvQixPQUFOO0FBQ0E7QUFDRCxNQTNLa0M7QUE0S25DOEcsMkJBQXNCLGdDQUFXO0FBQ2hDLFdBQUs2a0IsVUFBTCxHQUFrQixLQUFLdjBDLEtBQUwsQ0FBVzdaLEtBQVgsRUFBbEI7O0FBRUFvVyxZQUFNNVQsU0FBTixDQUFnQittQyxvQkFBaEIsQ0FBcUNqckMsSUFBckMsQ0FBMEMsSUFBMUM7QUFDQSxNQWhMa0M7QUFpTG5DO0FBQ0FvdEMsdUJBQWtCLDBCQUFTdGtDLEtBQVQsRUFBZ0JrUyxZQUFoQixFQUE4QjtBQUMvQyxhQUFPLENBQUMsS0FBSzJGLGFBQUwsQ0FBbUIsS0FBSzlDLEtBQUwsQ0FBV25ELElBQVgsQ0FBZ0JLLFFBQWhCLENBQXlCQyxZQUF6QixFQUF1Q04sSUFBdkMsQ0FBNEM1UixLQUE1QyxDQUFuQixDQUFSO0FBQ0EsTUFwTGtDO0FBcUxuQzhTLHNCQUFpQix5QkFBUzlTLEtBQVQsRUFBZ0I7QUFDaEMsYUFBTyxLQUFLNFgsZ0JBQUwsQ0FBc0IsS0FBS292QyxVQUFMLENBQWdCaG5ELEtBQWhCLENBQXRCLENBQVA7QUFDQSxNQXZMa0M7QUF3TG5DOzs7Ozs7QUFNQWluRCx5QkFBb0IsNEJBQVNoc0QsS0FBVCxFQUFnQjtBQUNuQyxVQUFJMHJELE1BQU03dEQsS0FBSytLLEtBQUwsQ0FBV3lLLFFBQVE4aUIsS0FBUixDQUFjbjJCLEtBQWQsQ0FBWCxDQUFWO0FBQ0EsVUFBSTJyRCxjQUFjOXRELEtBQUsrSyxLQUFMLENBQVc1SSxRQUFRbkMsS0FBS2lFLEdBQUwsQ0FBUyxFQUFULEVBQWE0cEQsR0FBYixDQUFuQixDQUFsQjs7QUFFQSxhQUFPQyxjQUFjOXRELEtBQUtpRSxHQUFMLENBQVMsRUFBVCxFQUFhNHBELEdBQWIsQ0FBckI7QUFDQSxNQW5Na0M7QUFvTW5DL3VDLHVCQUFrQiwwQkFBUzNjLEtBQVQsRUFBZ0I7QUFDakMsVUFBSWtaLEtBQUssSUFBVDtBQUNBLFVBQUlrbkIsVUFBVWxuQixHQUFHbEIsT0FBSCxDQUFXUixLQUFYLENBQWlCNG9CLE9BQS9CO0FBQ0EsVUFBSWpLLFFBQVE5aUIsUUFBUThpQixLQUFwQjtBQUNBLFVBQUk4MUIsaUJBQWlCL3lDLEdBQUc4eUMsa0JBQUgsQ0FBc0I5eUMsR0FBRzB5QyxVQUF6QixDQUFyQjtBQUNBLFVBQUk1MUMsU0FBUyxDQUFiO0FBQ0EsVUFBSWswQyxjQUFKLEVBQW9CMWdCLEtBQXBCLEVBQTJCaHhCLEtBQTNCLEVBQWtDSSxHQUFsQyxFQUF1Q3NkLElBQXZDOztBQUVBbDJCLGNBQVEsQ0FBQ2taLEdBQUcwRCxhQUFILENBQWlCNWMsS0FBakIsQ0FBVDtBQUNBLFVBQUlvZ0MsT0FBSixFQUFhO0FBQ1o1bkIsZUFBUVUsR0FBR04sR0FBWDtBQUNBQSxhQUFNTSxHQUFHVixLQUFUO0FBQ0EwZCxjQUFPLENBQUMsQ0FBUjtBQUNBLE9BSkQsTUFJTztBQUNOMWQsZUFBUVUsR0FBR1YsS0FBWDtBQUNBSSxhQUFNTSxHQUFHTixHQUFUO0FBQ0FzZCxjQUFPLENBQVA7QUFDQTtBQUNELFVBQUloZCxHQUFHN0IsWUFBSCxFQUFKLEVBQXVCO0FBQ3RCNnlDLHdCQUFpQmh4QyxHQUFHNUIsS0FBcEI7QUFDQWt5QixlQUFRcEosVUFBVWxuQixHQUFHeUksS0FBYixHQUFxQnpJLEdBQUd1RCxJQUFoQztBQUNBLE9BSEQsTUFHTztBQUNOeXRDLHdCQUFpQmh4QyxHQUFHM0IsTUFBcEI7QUFDQTJlLGVBQVEsQ0FBQyxDQUFULENBRk0sQ0FFTTtBQUNac1QsZUFBUXBKLFVBQVVsbkIsR0FBR3dELEdBQWIsR0FBbUJ4RCxHQUFHMkksTUFBOUI7QUFDQTtBQUNELFVBQUk3aEIsVUFBVXdZLEtBQWQsRUFBcUI7QUFDcEIsV0FBSUEsVUFBVSxDQUFkLEVBQWlCO0FBQUU7QUFDbEJ4QyxpQkFBUzNDLFFBQVF5b0MsaUJBQVIsQ0FDUjVpQyxHQUFHbEIsT0FBSCxDQUFXUixLQUFYLENBQWlCc3VCLFFBRFQsRUFFUjNxQyxNQUFNcVksUUFBTixDQUFldlksTUFBZixDQUFzQjhrQyxlQUZkLENBQVQ7QUFJQW1xQiwwQkFBa0JsMEMsTUFBbEI7QUFDQXdDLGdCQUFReXpDLGNBQVI7QUFDQTtBQUNELFdBQUlqc0QsVUFBVSxDQUFkLEVBQWlCO0FBQ2hCZ1csa0JBQVVrMEMsa0JBQWtCL3pCLE1BQU12ZCxHQUFOLElBQWF1ZCxNQUFNM2QsS0FBTixDQUEvQixLQUFnRDJkLE1BQU1uMkIsS0FBTixJQUFlbTJCLE1BQU0zZCxLQUFOLENBQS9ELENBQVY7QUFDQTtBQUNEZ3hCLGdCQUFTdFQsT0FBT2xnQixNQUFoQjtBQUNBO0FBQ0QsYUFBT3d6QixLQUFQO0FBQ0EsTUE3T2tDO0FBOE9uQ0YsdUJBQWtCLDBCQUFTRSxLQUFULEVBQWdCO0FBQ2pDLFVBQUl0d0IsS0FBSyxJQUFUO0FBQ0EsVUFBSWtuQixVQUFVbG5CLEdBQUdsQixPQUFILENBQVdSLEtBQVgsQ0FBaUI0b0IsT0FBL0I7QUFDQSxVQUFJakssUUFBUTlpQixRQUFROGlCLEtBQXBCO0FBQ0EsVUFBSTgxQixpQkFBaUIveUMsR0FBRzh5QyxrQkFBSCxDQUFzQjl5QyxHQUFHMHlDLFVBQXpCLENBQXJCO0FBQ0EsVUFBSTFCLGNBQUosRUFBb0IxeEMsS0FBcEIsRUFBMkJJLEdBQTNCLEVBQWdDNVksS0FBaEM7O0FBRUEsVUFBSW9nQyxPQUFKLEVBQWE7QUFDWjVuQixlQUFRVSxHQUFHTixHQUFYO0FBQ0FBLGFBQU1NLEdBQUdWLEtBQVQ7QUFDQSxPQUhELE1BR087QUFDTkEsZUFBUVUsR0FBR1YsS0FBWDtBQUNBSSxhQUFNTSxHQUFHTixHQUFUO0FBQ0E7QUFDRCxVQUFJTSxHQUFHN0IsWUFBSCxFQUFKLEVBQXVCO0FBQ3RCNnlDLHdCQUFpQmh4QyxHQUFHNUIsS0FBcEI7QUFDQXRYLGVBQVFvZ0MsVUFBVWxuQixHQUFHeUksS0FBSCxHQUFXNm5CLEtBQXJCLEdBQTZCQSxRQUFRdHdCLEdBQUd1RCxJQUFoRDtBQUNBLE9BSEQsTUFHTztBQUNOeXRDLHdCQUFpQmh4QyxHQUFHM0IsTUFBcEI7QUFDQXZYLGVBQVFvZ0MsVUFBVW9KLFFBQVF0d0IsR0FBR3dELEdBQXJCLEdBQTJCeEQsR0FBRzJJLE1BQUgsR0FBWTJuQixLQUEvQztBQUNBO0FBQ0QsVUFBSXhwQyxVQUFVd1ksS0FBZCxFQUFxQjtBQUNwQixXQUFJQSxVQUFVLENBQWQsRUFBaUI7QUFBRTtBQUNsQixZQUFJeEMsU0FBUzNDLFFBQVF5b0MsaUJBQVIsQ0FDWjVpQyxHQUFHbEIsT0FBSCxDQUFXUixLQUFYLENBQWlCc3VCLFFBREwsRUFFWjNxQyxNQUFNcVksUUFBTixDQUFldlksTUFBZixDQUFzQjhrQyxlQUZWLENBQWI7QUFJQS8vQixpQkFBU2dXLE1BQVQ7QUFDQWswQywwQkFBa0JsMEMsTUFBbEI7QUFDQXdDLGdCQUFReXpDLGNBQVI7QUFDQTtBQUNEanNELGdCQUFTbTJCLE1BQU12ZCxHQUFOLElBQWF1ZCxNQUFNM2QsS0FBTixDQUF0QjtBQUNBeFksZ0JBQVNrcUQsY0FBVDtBQUNBbHFELGVBQVFuQyxLQUFLaUUsR0FBTCxDQUFTLEVBQVQsRUFBYXEwQixNQUFNM2QsS0FBTixJQUFleFksS0FBNUIsQ0FBUjtBQUNBO0FBQ0QsYUFBT0EsS0FBUDtBQUNBO0FBbFJrQyxLQUFiLENBQXZCOztBQXFSQWdVLGlCQUFhMjVCLGlCQUFiLENBQStCLGFBQS9CLEVBQThDbWUsZ0JBQTlDLEVBQWdFN0QsYUFBaEU7QUFDQSxJQWpTRDtBQW1TQyxHQS9WdUIsRUErVnRCLEVBQUMsTUFBSyxFQUFOLEVBQVMsTUFBSyxFQUFkLEVBQWlCLE1BQUssRUFBdEIsRUFBeUIsTUFBSyxFQUE5QixFQS9Wc0IsQ0F2K1lpeUIsRUFzMFpweEIsSUFBRyxDQUFDLFVBQVN0c0QsT0FBVCxFQUFpQmQsTUFBakIsRUFBd0JELE9BQXhCLEVBQWdDO0FBQ3pFOztBQUVBLE9BQUk0WSxXQUFXN1gsUUFBUSxFQUFSLENBQWY7QUFDQSxPQUFJMFgsVUFBVTFYLFFBQVEsRUFBUixDQUFkO0FBQ0EsT0FBSXFZLGVBQWVyWSxRQUFRLEVBQVIsQ0FBbkI7QUFDQSxPQUFJc1ksUUFBUXRZLFFBQVEsRUFBUixDQUFaOztBQUVBZCxVQUFPRCxPQUFQLEdBQWlCLFVBQVNPLEtBQVQsRUFBZ0I7O0FBRWhDLFFBQUkwcUMsaUJBQWlCcnlCLFNBQVN2WSxNQUE5Qjs7QUFFQSxRQUFJZ3RELGdCQUFnQjtBQUNuQjlnQyxjQUFTLElBRFU7O0FBR25CO0FBQ0Era0MsY0FBUyxJQUpVO0FBS25CNzFDLGVBQVUsV0FMUzs7QUFPbkI2USxpQkFBWTtBQUNYQyxlQUFTLElBREU7QUFFWDJNLGFBQU8sb0JBRkk7QUFHWHRULGlCQUFXO0FBSEEsTUFQTzs7QUFhbkJ2SyxnQkFBVztBQUNWbVIsZ0JBQVU7QUFEQSxNQWJROztBQWlCbkI7QUFDQTVQLFlBQU87QUFDTjtBQUNBMjBDLHlCQUFtQixJQUZiOztBQUlOO0FBQ0FDLHFCQUFlLHdCQUxUOztBQU9OO0FBQ0FDLHdCQUFrQixDQVJaOztBQVVOO0FBQ0FDLHdCQUFrQixDQVhaOztBQWFOMWhDLGdCQUFVM1csTUFBTW14QixVQUFOLENBQWlCNEk7QUFickIsTUFsQlk7O0FBa0NuQjNtQixrQkFBYTtBQUNaO0FBQ0FGLGVBQVMsSUFGRzs7QUFJWjtBQUNBMmUsZ0JBQVUsRUFMRTs7QUFPWjtBQUNBbGIsZ0JBQVUsa0JBQVM5VCxLQUFULEVBQWdCO0FBQ3pCLGNBQU9BLEtBQVA7QUFDQTtBQVZXO0FBbENNLEtBQXBCOztBQWdEQSxhQUFTeTFDLGFBQVQsQ0FBdUJ4dUQsS0FBdkIsRUFBOEI7QUFDN0IsU0FBSTBqQixPQUFPMWpCLE1BQU1pYSxPQUFqQjtBQUNBLFlBQU95SixLQUFLeUYsVUFBTCxDQUFnQkMsT0FBaEIsSUFBMkIxRixLQUFLNEYsV0FBTCxDQUFpQkYsT0FBNUMsR0FBc0RwcEIsTUFBTStiLEtBQU4sQ0FBWW5ELElBQVosQ0FBaUJFLE1BQWpCLENBQXdCM2EsTUFBOUUsR0FBdUYsQ0FBOUY7QUFDQTs7QUFFRCxhQUFTc3dELHdCQUFULENBQWtDenVELEtBQWxDLEVBQXlDO0FBQ3hDLFNBQUkwdUQsb0JBQW9CMXVELE1BQU1pYSxPQUFOLENBQWNxUCxXQUF0QztBQUNBLFNBQUl5ZSxXQUFXenlCLFFBQVE4SixjQUFSLENBQXVCc3ZDLGtCQUFrQjNtQixRQUF6QyxFQUFtREQsZUFBZTlGLGVBQWxFLENBQWY7QUFDQSxTQUFJOUMsWUFBWTVwQixRQUFROEosY0FBUixDQUF1QnN2QyxrQkFBa0J4dkIsU0FBekMsRUFBb0Q0SSxlQUFlN0YsZ0JBQW5FLENBQWhCO0FBQ0EsU0FBSTlDLGFBQWE3cEIsUUFBUThKLGNBQVIsQ0FBdUJzdkMsa0JBQWtCdnZCLFVBQXpDLEVBQXFEMkksZUFBZS9GLGlCQUFwRSxDQUFqQjtBQUNBLFNBQUkxQyxPQUFPL3BCLFFBQVEwcEIsVUFBUixDQUFtQitJLFFBQW5CLEVBQTZCN0ksU0FBN0IsRUFBd0NDLFVBQXhDLENBQVg7O0FBRUEsWUFBTztBQUNON2tCLFlBQU15dEIsUUFEQTtBQUVObFosYUFBT3FRLFNBRkQ7QUFHTjhJLGNBQVE3SSxVQUhGO0FBSU5FLFlBQU1BO0FBSkEsTUFBUDtBQU1BOztBQUVELGFBQVNzdkIsZ0JBQVQsQ0FBMEJsdkMsR0FBMUIsRUFBK0Jzb0IsUUFBL0IsRUFBeUNodkIsS0FBekMsRUFBZ0Q7QUFDL0MsU0FBSXpELFFBQVEyTixPQUFSLENBQWdCbEssS0FBaEIsQ0FBSixFQUE0QjtBQUMzQixhQUFPO0FBQ052WSxVQUFHOFUsUUFBUThwQixXQUFSLENBQW9CM2YsR0FBcEIsRUFBeUJBLElBQUk0ZixJQUE3QixFQUFtQ3RtQixLQUFuQyxDQURHO0FBRU41WSxVQUFJNFksTUFBTTVhLE1BQU4sR0FBZTRwQyxRQUFoQixHQUE2QixDQUFDaHZCLE1BQU01YSxNQUFOLEdBQWUsQ0FBaEIsSUFBcUIsR0FBckIsR0FBMkI0cEM7QUFGckQsT0FBUDtBQUlBOztBQUVELFlBQU87QUFDTnZuQyxTQUFHaWYsSUFBSW1nQixXQUFKLENBQWdCN21CLEtBQWhCLEVBQXVCUSxLQURwQjtBQUVOcFosU0FBRzRuQztBQUZHLE1BQVA7QUFJQTs7QUFFRCxhQUFTNm1CLGVBQVQsQ0FBeUIva0MsS0FBekIsRUFBZ0NvcEIsR0FBaEMsRUFBcUMzNEIsSUFBckMsRUFBMkN0WixHQUEzQyxFQUFnREMsR0FBaEQsRUFBcUQ7QUFDcEQsU0FBSTRvQixVQUFVN29CLEdBQVYsSUFBaUI2b0IsVUFBVTVvQixHQUEvQixFQUFvQztBQUNuQyxhQUFPO0FBQ053WixjQUFPdzRCLE1BQU8zNEIsT0FBTyxDQURmO0FBRU5PLFlBQUtvNEIsTUFBTzM0QixPQUFPO0FBRmIsT0FBUDtBQUlBLE1BTEQsTUFLTyxJQUFJdVAsUUFBUTdvQixHQUFSLElBQWU2b0IsUUFBUTVvQixHQUEzQixFQUFnQztBQUN0QyxhQUFPO0FBQ053WixjQUFPdzRCLE1BQU0zNEIsSUFBTixHQUFhLENBRGQ7QUFFTk8sWUFBS280QjtBQUZDLE9BQVA7QUFJQTs7QUFFRCxZQUFPO0FBQ054NEIsYUFBT3c0QixHQUREO0FBRU5wNEIsV0FBS280QixNQUFNMzRCLElBQU4sR0FBYTtBQUZaLE1BQVA7QUFJQTs7QUFFRDs7O0FBR0EsYUFBU3UwQyxrQkFBVCxDQUE0Qjd1RCxLQUE1QixFQUFtQztBQUNsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQSxTQUFJOHVELFNBQVNMLHlCQUF5Qnp1RCxLQUF6QixDQUFiOztBQUVBO0FBQ0E7QUFDQSxTQUFJK3VELHdCQUF3Qmp2RCxLQUFLa0IsR0FBTCxDQUFTaEIsTUFBTXdaLE1BQU4sR0FBZSxDQUF4QixFQUEyQnhaLE1BQU11WixLQUFOLEdBQWMsQ0FBekMsQ0FBNUI7QUFDQSxTQUFJeTFDLGlCQUFpQjtBQUNwQjN4RCxTQUFHMkMsTUFBTXVaLEtBRFc7QUFFcEJsWixTQUFHLENBRmlCO0FBR3BCN0MsU0FBR3dDLE1BQU13WixNQUhXO0FBSXBCL1ksU0FBRztBQUppQixNQUFyQjtBQU1BLFNBQUl3dUQsaUJBQWlCLEVBQXJCO0FBQ0EsU0FBSXZ4RCxDQUFKLEVBQU9pc0QsUUFBUCxFQUFpQmovQixhQUFqQjs7QUFFQTFxQixXQUFNeWYsR0FBTixDQUFVNGYsSUFBVixHQUFpQnl2QixPQUFPenZCLElBQXhCO0FBQ0FyL0IsV0FBTWt2RCxnQkFBTixHQUF5QixFQUF6Qjs7QUFFQSxTQUFJQyxhQUFhWCxjQUFjeHVELEtBQWQsQ0FBakI7QUFDQSxVQUFLdEMsSUFBSSxDQUFULEVBQVlBLElBQUl5eEQsVUFBaEIsRUFBNEJ6eEQsR0FBNUIsRUFBaUM7QUFDaENndEIsc0JBQWdCMXFCLE1BQU1vdkQsZ0JBQU4sQ0FBdUIxeEQsQ0FBdkIsRUFBMEJxeEQscUJBQTFCLENBQWhCO0FBQ0FwRixpQkFBV2dGLGlCQUFpQjN1RCxNQUFNeWYsR0FBdkIsRUFBNEJxdkMsT0FBT3gwQyxJQUFuQyxFQUF5Q3RhLE1BQU1zcEIsV0FBTixDQUFrQjVyQixDQUFsQixLQUF3QixFQUFqRSxDQUFYO0FBQ0FzQyxZQUFNa3ZELGdCQUFOLENBQXVCeHhELENBQXZCLElBQTRCaXNELFFBQTVCOztBQUVBO0FBQ0EsVUFBSXRmLGVBQWVycUMsTUFBTXF2RCxhQUFOLENBQW9CM3hELENBQXBCLENBQW5CO0FBQ0EsVUFBSW1zQixRQUFRdlUsUUFBUXFqQixTQUFSLENBQWtCMFIsWUFBbEIsSUFBa0MsR0FBOUM7QUFDQSxVQUFJaWxCLFVBQVVWLGdCQUFnQi9rQyxLQUFoQixFQUF1QmEsY0FBY3JnQixDQUFyQyxFQUF3Q3MvQyxTQUFTbnBELENBQWpELEVBQW9ELENBQXBELEVBQXVELEdBQXZELENBQWQ7QUFDQSxVQUFJK3VELFVBQVVYLGdCQUFnQi9rQyxLQUFoQixFQUF1QmEsY0FBYzFnQixDQUFyQyxFQUF3QzIvQyxTQUFTeHBELENBQWpELEVBQW9ELEVBQXBELEVBQXdELEdBQXhELENBQWQ7O0FBRUEsVUFBSW12RCxRQUFRNzBDLEtBQVIsR0FBZ0J1MEMsZUFBZTN1RCxDQUFuQyxFQUFzQztBQUNyQzJ1RCxzQkFBZTN1RCxDQUFmLEdBQW1CaXZELFFBQVE3MEMsS0FBM0I7QUFDQXcwQyxzQkFBZTV1RCxDQUFmLEdBQW1CZ3FDLFlBQW5CO0FBQ0E7O0FBRUQsVUFBSWlsQixRQUFRejBDLEdBQVIsR0FBY20wQyxlQUFlM3hELENBQWpDLEVBQW9DO0FBQ25DMnhELHNCQUFlM3hELENBQWYsR0FBbUJpeUQsUUFBUXowQyxHQUEzQjtBQUNBbzBDLHNCQUFlNXhELENBQWYsR0FBbUJndEMsWUFBbkI7QUFDQTs7QUFFRCxVQUFJa2xCLFFBQVE5MEMsS0FBUixHQUFnQnUwQyxlQUFleHhELENBQW5DLEVBQXNDO0FBQ3JDd3hELHNCQUFleHhELENBQWYsR0FBbUIreEQsUUFBUTkwQyxLQUEzQjtBQUNBdzBDLHNCQUFlenhELENBQWYsR0FBbUI2c0MsWUFBbkI7QUFDQTs7QUFFRCxVQUFJa2xCLFFBQVExMEMsR0FBUixHQUFjbTBDLGVBQWV2dUQsQ0FBakMsRUFBb0M7QUFDbkN1dUQsc0JBQWV2dUQsQ0FBZixHQUFtQjh1RCxRQUFRMTBDLEdBQTNCO0FBQ0FvMEMsc0JBQWV4dUQsQ0FBZixHQUFtQjRwQyxZQUFuQjtBQUNBO0FBQ0Q7O0FBRURycUMsV0FBTXd2RCxhQUFOLENBQW9CVCxxQkFBcEIsRUFBMkNDLGNBQTNDLEVBQTJEQyxjQUEzRDtBQUNBOztBQUVEOzs7QUFHQSxhQUFTeGxCLElBQVQsQ0FBYXpwQyxLQUFiLEVBQW9CO0FBQ25CLFNBQUkrdUQsd0JBQXdCanZELEtBQUtrQixHQUFMLENBQVNoQixNQUFNd1osTUFBTixHQUFlLENBQXhCLEVBQTJCeFosTUFBTXVaLEtBQU4sR0FBYyxDQUF6QyxDQUE1QjtBQUNBdlosV0FBTXl2RCxXQUFOLEdBQW9CM3ZELEtBQUtDLEtBQUwsQ0FBV2d2RCxxQkFBWCxDQUFwQjtBQUNBL3VELFdBQU0wdkQsY0FBTixDQUFxQixDQUFyQixFQUF3QixDQUF4QixFQUEyQixDQUEzQixFQUE4QixDQUE5QjtBQUNBOztBQUVELGFBQVNDLG9CQUFULENBQThCOWxDLEtBQTlCLEVBQXFDO0FBQ3BDLFNBQUlBLFVBQVUsQ0FBVixJQUFlQSxVQUFVLEdBQTdCLEVBQWtDO0FBQ2pDLGFBQU8sUUFBUDtBQUNBLE1BRkQsTUFFTyxJQUFJQSxRQUFRLEdBQVosRUFBaUI7QUFDdkIsYUFBTyxNQUFQO0FBQ0E7O0FBRUQsWUFBTyxPQUFQO0FBQ0E7O0FBRUQsYUFBUzBsQixRQUFULENBQWtCOXZCLEdBQWxCLEVBQXVCb0MsSUFBdkIsRUFBNkJ2SixRQUE3QixFQUF1Q3l2QixRQUF2QyxFQUFpRDtBQUNoRCxTQUFJenlCLFFBQVEyTixPQUFSLENBQWdCcEIsSUFBaEIsQ0FBSixFQUEyQjtBQUMxQixVQUFJN1gsSUFBSXNPLFNBQVN0TyxDQUFqQjtBQUNBLFVBQUkwaUQsVUFBVSxNQUFNM2tCLFFBQXBCOztBQUVBLFdBQUssSUFBSXJxQyxJQUFJLENBQWIsRUFBZ0JBLElBQUlta0IsS0FBSzFqQixNQUF6QixFQUFpQyxFQUFFVCxDQUFuQyxFQUFzQztBQUNyQytoQixXQUFJOHZCLFFBQUosQ0FBYTF0QixLQUFLbmtCLENBQUwsQ0FBYixFQUFzQjRhLFNBQVNqTyxDQUEvQixFQUFrQ0wsQ0FBbEM7QUFDQUEsWUFBSzBpRCxPQUFMO0FBQ0E7QUFDRCxNQVJELE1BUU87QUFDTmp0QyxVQUFJOHZCLFFBQUosQ0FBYTF0QixJQUFiLEVBQW1CdkosU0FBU2pPLENBQTVCLEVBQStCaU8sU0FBU3RPLENBQXhDO0FBQ0E7QUFDRDs7QUFFRCxhQUFTNGxELGlDQUFULENBQTJDL2xDLEtBQTNDLEVBQWtEOC9CLFFBQWxELEVBQTREcnhDLFFBQTVELEVBQXNFO0FBQ3JFLFNBQUl1UixVQUFVLEVBQVYsSUFBZ0JBLFVBQVUsR0FBOUIsRUFBbUM7QUFDbEN2UixlQUFTdE8sQ0FBVCxJQUFlMi9DLFNBQVN4cEQsQ0FBVCxHQUFhLENBQTVCO0FBQ0EsTUFGRCxNQUVPLElBQUkwcEIsUUFBUSxHQUFSLElBQWVBLFFBQVEsRUFBM0IsRUFBK0I7QUFDckN2UixlQUFTdE8sQ0FBVCxJQUFjMi9DLFNBQVN4cEQsQ0FBdkI7QUFDQTtBQUNEOztBQUVELGFBQVMwdkQsZUFBVCxDQUF5Qjd2RCxLQUF6QixFQUFnQztBQUMvQixTQUFJeWYsTUFBTXpmLE1BQU15ZixHQUFoQjtBQUNBLFNBQUlpRSxPQUFPMWpCLE1BQU1pYSxPQUFqQjtBQUNBLFNBQUk2MUMsZ0JBQWdCcHNDLEtBQUt5RixVQUF6QjtBQUNBLFNBQUk0bUMsaUJBQWlCcnNDLEtBQUs0RixXQUExQjs7QUFFQTdKLFNBQUlnRCxTQUFKLEdBQWdCcXRDLGNBQWNydEMsU0FBOUI7QUFDQWhELFNBQUkrQyxXQUFKLEdBQWtCc3RDLGNBQWMvNUIsS0FBaEM7O0FBRUEsU0FBSWk2QixnQkFBZ0Jod0QsTUFBTXFxQiw2QkFBTixDQUFvQzNHLEtBQUtqSyxLQUFMLENBQVc0b0IsT0FBWCxHQUFxQnJpQyxNQUFNZ0IsR0FBM0IsR0FBaUNoQixNQUFNaUIsR0FBM0UsQ0FBcEI7O0FBRUE7QUFDQSxTQUFJNnRELFNBQVNMLHlCQUF5Qnp1RCxLQUF6QixDQUFiOztBQUVBeWYsU0FBSTB1QixZQUFKLEdBQW1CLEtBQW5COztBQUVBLFVBQUssSUFBSXp3QyxJQUFJOHdELGNBQWN4dUQsS0FBZCxJQUF1QixDQUFwQyxFQUF1Q3RDLEtBQUssQ0FBNUMsRUFBK0NBLEdBQS9DLEVBQW9EO0FBQ25ELFVBQUlveUQsY0FBYzFtQyxPQUFsQixFQUEyQjtBQUMxQixXQUFJNm1DLGdCQUFnQmp3RCxNQUFNb3ZELGdCQUFOLENBQXVCMXhELENBQXZCLEVBQTBCc3lELGFBQTFCLENBQXBCO0FBQ0F2d0MsV0FBSXd2QixTQUFKO0FBQ0F4dkIsV0FBSXl2QixNQUFKLENBQVdsdkMsTUFBTWlxQixPQUFqQixFQUEwQmpxQixNQUFNa3FCLE9BQWhDO0FBQ0F6SyxXQUFJMHZCLE1BQUosQ0FBVzhnQixjQUFjNWxELENBQXpCLEVBQTRCNGxELGNBQWNqbUQsQ0FBMUM7QUFDQXlWLFdBQUk0QyxNQUFKO0FBQ0E1QyxXQUFJMDVCLFNBQUo7QUFDQTs7QUFFRCxVQUFJNFcsZUFBZTNtQyxPQUFuQixFQUE0QjtBQUMzQjtBQUNBLFdBQUk4bUMscUJBQXFCbHdELE1BQU1vdkQsZ0JBQU4sQ0FBdUIxeEQsQ0FBdkIsRUFBMEJzeUQsZ0JBQWdCLENBQTFDLENBQXpCOztBQUVBO0FBQ0EsV0FBSUcsc0JBQXNCNzZDLFFBQVFzSCxxQkFBUixDQUE4Qm16QyxlQUFlcGpCLFNBQTdDLEVBQXdEanZDLENBQXhELEVBQTJEb3FDLGVBQWVoRyxnQkFBMUUsQ0FBMUI7QUFDQXJpQixXQUFJNGYsSUFBSixHQUFXeXZCLE9BQU96dkIsSUFBbEI7QUFDQTVmLFdBQUk4QyxTQUFKLEdBQWdCNHRDLG1CQUFoQjs7QUFFQSxXQUFJOWxCLGVBQWVycUMsTUFBTXF2RCxhQUFOLENBQW9CM3hELENBQXBCLENBQW5CO0FBQ0EsV0FBSW1zQixRQUFRdlUsUUFBUXFqQixTQUFSLENBQWtCMFIsWUFBbEIsQ0FBWjtBQUNBNXFCLFdBQUl5dUIsU0FBSixHQUFnQnloQixxQkFBcUI5bEMsS0FBckIsQ0FBaEI7QUFDQStsQyx5Q0FBa0MvbEMsS0FBbEMsRUFBeUM3cEIsTUFBTWt2RCxnQkFBTixDQUF1Qnh4RCxDQUF2QixDQUF6QyxFQUFvRXd5RCxrQkFBcEU7QUFDQTNnQixnQkFBUzl2QixHQUFULEVBQWN6ZixNQUFNc3BCLFdBQU4sQ0FBa0I1ckIsQ0FBbEIsS0FBd0IsRUFBdEMsRUFBMEN3eUQsa0JBQTFDLEVBQThEcEIsT0FBT3gwQyxJQUFyRTtBQUNBO0FBQ0Q7QUFDRDs7QUFFRCxhQUFTODFDLGNBQVQsQ0FBd0Jwd0QsS0FBeEIsRUFBK0J1cUMsWUFBL0IsRUFBNkMxcEIsTUFBN0MsRUFBcUQ3WixLQUFyRCxFQUE0RDtBQUMzRCxTQUFJeVksTUFBTXpmLE1BQU15ZixHQUFoQjtBQUNBQSxTQUFJK0MsV0FBSixHQUFrQmxOLFFBQVFzSCxxQkFBUixDQUE4QjJ0QixhQUFheFUsS0FBM0MsRUFBa0QvdUIsUUFBUSxDQUExRCxDQUFsQjtBQUNBeVksU0FBSWdELFNBQUosR0FBZ0JuTixRQUFRc0gscUJBQVIsQ0FBOEIydEIsYUFBYTluQixTQUEzQyxFQUFzRHpiLFFBQVEsQ0FBOUQsQ0FBaEI7O0FBRUEsU0FBSWhILE1BQU1pYSxPQUFOLENBQWMvQixTQUFkLENBQXdCbVIsUUFBNUIsRUFBc0M7QUFDckM7QUFDQTVKLFVBQUl3dkIsU0FBSjtBQUNBeHZCLFVBQUl5QyxHQUFKLENBQVFsaUIsTUFBTWlxQixPQUFkLEVBQXVCanFCLE1BQU1rcUIsT0FBN0IsRUFBc0NySixNQUF0QyxFQUE4QyxDQUE5QyxFQUFpRC9nQixLQUFLd0wsRUFBTCxHQUFVLENBQTNEO0FBQ0FtVSxVQUFJMDVCLFNBQUo7QUFDQTE1QixVQUFJNEMsTUFBSjtBQUNBLE1BTkQsTUFNTztBQUNOO0FBQ0EsVUFBSThzQyxhQUFhWCxjQUFjeHVELEtBQWQsQ0FBakI7O0FBRUEsVUFBSW12RCxlQUFlLENBQW5CLEVBQXNCO0FBQ3JCO0FBQ0E7O0FBRUQxdkMsVUFBSXd2QixTQUFKO0FBQ0EsVUFBSXZrQixnQkFBZ0IxcUIsTUFBTW92RCxnQkFBTixDQUF1QixDQUF2QixFQUEwQnZ1QyxNQUExQixDQUFwQjtBQUNBcEIsVUFBSXl2QixNQUFKLENBQVd4a0IsY0FBY3JnQixDQUF6QixFQUE0QnFnQixjQUFjMWdCLENBQTFDOztBQUVBLFdBQUssSUFBSXRNLElBQUksQ0FBYixFQUFnQkEsSUFBSXl4RCxVQUFwQixFQUFnQ3p4RCxHQUFoQyxFQUFxQztBQUNwQ2d0Qix1QkFBZ0IxcUIsTUFBTW92RCxnQkFBTixDQUF1QjF4RCxDQUF2QixFQUEwQm1qQixNQUExQixDQUFoQjtBQUNBcEIsV0FBSTB2QixNQUFKLENBQVd6a0IsY0FBY3JnQixDQUF6QixFQUE0QnFnQixjQUFjMWdCLENBQTFDO0FBQ0E7O0FBRUR5VixVQUFJMDVCLFNBQUo7QUFDQTE1QixVQUFJNEMsTUFBSjtBQUNBO0FBQ0Q7O0FBRUQsYUFBU2d1QyxZQUFULENBQXNCQyxLQUF0QixFQUE2QjtBQUM1QixZQUFPaDdDLFFBQVFzaEIsUUFBUixDQUFpQjA1QixLQUFqQixJQUEwQkEsS0FBMUIsR0FBa0MsQ0FBekM7QUFDQTs7QUFFRCxRQUFJQyxvQkFBb0JuekQsTUFBTTh0RCxlQUFOLENBQXNCcjBDLE1BQXRCLENBQTZCO0FBQ3BENnhCLG9CQUFlLHlCQUFXO0FBQ3pCLFVBQUl2dEIsS0FBSyxJQUFUO0FBQ0EsVUFBSXVJLE9BQU92SSxHQUFHbEIsT0FBZDtBQUNBLFVBQUkydkIsV0FBV2xtQixLQUFLakssS0FBcEI7QUFDQTtBQUNBMEIsU0FBRzVCLEtBQUgsR0FBVzRCLEdBQUdrdEIsUUFBZDtBQUNBbHRCLFNBQUczQixNQUFILEdBQVkyQixHQUFHbXRCLFNBQWY7QUFDQW50QixTQUFHOE8sT0FBSCxHQUFhbnFCLEtBQUtDLEtBQUwsQ0FBV29iLEdBQUc1QixLQUFILEdBQVcsQ0FBdEIsQ0FBYjtBQUNBNEIsU0FBRytPLE9BQUgsR0FBYXBxQixLQUFLQyxLQUFMLENBQVdvYixHQUFHM0IsTUFBSCxHQUFZLENBQXZCLENBQWI7O0FBRUEsVUFBSXVLLFVBQVV6TyxRQUFRdFUsR0FBUixDQUFZLENBQUNtYSxHQUFHM0IsTUFBSixFQUFZMkIsR0FBRzVCLEtBQWYsQ0FBWixDQUFkO0FBQ0EsVUFBSTB5QyxlQUFlMzJDLFFBQVE4SixjQUFSLENBQXVCd3FCLFNBQVM3QixRQUFoQyxFQUEwQ0QsZUFBZTlGLGVBQXpELENBQW5CO0FBQ0E3bUIsU0FBR3MwQyxXQUFILEdBQWlCL3JDLEtBQUswRixPQUFMLEdBQWdCckYsVUFBVSxDQUFYLElBQWlCa29DLGVBQWUsQ0FBZixHQUFtQnJpQixTQUFTMGtCLGdCQUE3QyxDQUFmLEdBQWlGdnFDLFVBQVUsQ0FBNUc7QUFDQSxNQWRtRDtBQWVwRDhrQiwwQkFBcUIsK0JBQVc7QUFDL0IsVUFBSTF0QixLQUFLLElBQVQ7QUFDQSxVQUFJWSxRQUFRWixHQUFHWSxLQUFmO0FBQ0EsVUFBSS9hLE1BQU02bUIsT0FBT3FRLGlCQUFqQjtBQUNBLFVBQUlqM0IsTUFBTTRtQixPQUFPb1EsaUJBQWpCOztBQUVBM2lCLGNBQVEySyxJQUFSLENBQWFsRSxNQUFNbkQsSUFBTixDQUFXSyxRQUF4QixFQUFrQyxVQUFTK0MsT0FBVCxFQUFrQjlDLFlBQWxCLEVBQWdDO0FBQ2pFLFdBQUk2QyxNQUFNc0MsZ0JBQU4sQ0FBdUJuRixZQUF2QixDQUFKLEVBQTBDO0FBQ3pDLFlBQUlrQyxPQUFPVyxNQUFNcUMsY0FBTixDQUFxQmxGLFlBQXJCLENBQVg7O0FBRUE1RCxnQkFBUTJLLElBQVIsQ0FBYWpFLFFBQVFwRCxJQUFyQixFQUEyQixVQUFTeXlCLFFBQVQsRUFBbUJya0MsS0FBbkIsRUFBMEI7QUFDcEQsYUFBSS9FLFFBQVEsQ0FBQ2taLEdBQUcwRCxhQUFILENBQWlCd3NCLFFBQWpCLENBQWI7QUFDQSxhQUFJL3FDLE1BQU0yQixLQUFOLEtBQWdCbVosS0FBS3hDLElBQUwsQ0FBVTVSLEtBQVYsRUFBaUIwYixNQUFyQyxFQUE2QztBQUM1QztBQUNBOztBQUVEMWhCLGVBQU1sQixLQUFLa0IsR0FBTCxDQUFTaUIsS0FBVCxFQUFnQmpCLEdBQWhCLENBQU47QUFDQUMsZUFBTW5CLEtBQUttQixHQUFMLENBQVNnQixLQUFULEVBQWdCaEIsR0FBaEIsQ0FBTjtBQUNBLFNBUkQ7QUFTQTtBQUNELE9BZEQ7O0FBZ0JBa2EsU0FBR25hLEdBQUgsR0FBVUEsUUFBUTZtQixPQUFPcVEsaUJBQWYsR0FBbUMsQ0FBbkMsR0FBdUNsM0IsR0FBakQ7QUFDQW1hLFNBQUdsYSxHQUFILEdBQVVBLFFBQVE0bUIsT0FBT29RLGlCQUFmLEdBQW1DLENBQW5DLEdBQXVDaDNCLEdBQWpEOztBQUVBO0FBQ0FrYSxTQUFHMndDLHNCQUFIO0FBQ0EsTUExQ21EO0FBMkNwREMsbUJBQWMsd0JBQVc7QUFDeEIsVUFBSW5pQixXQUFXLEtBQUszdkIsT0FBTCxDQUFhUixLQUE1QjtBQUNBLFVBQUl3eUMsZUFBZTMyQyxRQUFROEosY0FBUixDQUF1QndxQixTQUFTN0IsUUFBaEMsRUFBMENELGVBQWU5RixlQUF6RCxDQUFuQjtBQUNBLGFBQU9saUMsS0FBS2tCLEdBQUwsQ0FBUzRvQyxTQUFTMkMsYUFBVCxHQUF5QjNDLFNBQVMyQyxhQUFsQyxHQUFrRCxFQUEzRCxFQUErRHpzQyxLQUFLa3NELElBQUwsQ0FBVSxLQUFLeUQsV0FBTCxJQUFvQixNQUFNeEQsWUFBMUIsQ0FBVixDQUEvRCxDQUFQO0FBQ0EsTUEvQ21EO0FBZ0RwRDlpQiwyQkFBc0IsZ0NBQVc7QUFDaEMsVUFBSWh1QixLQUFLLElBQVQ7O0FBRUEvZCxZQUFNOHRELGVBQU4sQ0FBc0I5b0QsU0FBdEIsQ0FBZ0MrbUMsb0JBQWhDLENBQXFEanJDLElBQXJELENBQTBEaWQsRUFBMUQ7O0FBRUE7QUFDQUEsU0FBR21PLFdBQUgsR0FBaUJuTyxHQUFHWSxLQUFILENBQVNuRCxJQUFULENBQWNFLE1BQWQsQ0FBcUJrSixHQUFyQixDQUF5QjdHLEdBQUdsQixPQUFILENBQVdxUCxXQUFYLENBQXVCdUQsUUFBaEQsRUFBMEQxUixFQUExRCxDQUFqQjtBQUNBLE1BdkRtRDtBQXdEcERtd0IsdUJBQWtCLDBCQUFTdGtDLEtBQVQsRUFBZ0JrUyxZQUFoQixFQUE4QjtBQUMvQyxhQUFPLENBQUMsS0FBSzJGLGFBQUwsQ0FBbUIsS0FBSzlDLEtBQUwsQ0FBV25ELElBQVgsQ0FBZ0JLLFFBQWhCLENBQXlCQyxZQUF6QixFQUF1Q04sSUFBdkMsQ0FBNEM1UixLQUE1QyxDQUFuQixDQUFSO0FBQ0EsTUExRG1EO0FBMkRwRHlpQyxVQUFLLGVBQVc7QUFDZixVQUFJLEtBQUt4dkIsT0FBTCxDQUFhcVAsV0FBYixDQUF5QkYsT0FBN0IsRUFBc0M7QUFDckN5bEMsMEJBQW1CLElBQW5CO0FBQ0EsT0FGRCxNQUVPO0FBQ05wbEIsWUFBSSxJQUFKO0FBQ0E7QUFDRCxNQWpFbUQ7QUFrRXBEOzs7O0FBSUErbEIsb0JBQWUsdUJBQVNULHFCQUFULEVBQWdDQyxjQUFoQyxFQUFnREMsY0FBaEQsRUFBZ0U7QUFDOUUsVUFBSTl6QyxLQUFLLElBQVQ7QUFDQSxVQUFJcTFDLHNCQUFzQnhCLGVBQWUzdUQsQ0FBZixHQUFtQlAsS0FBSzRMLEdBQUwsQ0FBU3VqRCxlQUFlNXVELENBQXhCLENBQTdDO0FBQ0EsVUFBSW93RCx1QkFBdUIzd0QsS0FBS21CLEdBQUwsQ0FBUyt0RCxlQUFlM3hELENBQWYsR0FBbUI4ZCxHQUFHNUIsS0FBL0IsRUFBc0MsQ0FBdEMsSUFBMkN6WixLQUFLNEwsR0FBTCxDQUFTdWpELGVBQWU1eEQsQ0FBeEIsQ0FBdEU7QUFDQSxVQUFJcXpELHFCQUFxQixDQUFDMUIsZUFBZXh4RCxDQUFoQixHQUFvQnNDLEtBQUsyTCxHQUFMLENBQVN3akQsZUFBZXp4RCxDQUF4QixDQUE3QztBQUNBLFVBQUltekQsd0JBQXdCLENBQUM3d0QsS0FBS21CLEdBQUwsQ0FBUyt0RCxlQUFldnVELENBQWYsR0FBbUIwYSxHQUFHM0IsTUFBL0IsRUFBdUMsQ0FBdkMsQ0FBRCxHQUE2QzFaLEtBQUsyTCxHQUFMLENBQVN3akQsZUFBZXh1RCxDQUF4QixDQUF6RTs7QUFFQSt2RCw0QkFBc0JILGFBQWFHLG1CQUFiLENBQXRCO0FBQ0FDLDZCQUF1QkosYUFBYUksb0JBQWIsQ0FBdkI7QUFDQUMsMkJBQXFCTCxhQUFhSyxrQkFBYixDQUFyQjtBQUNBQyw4QkFBd0JOLGFBQWFNLHFCQUFiLENBQXhCOztBQUVBeDFDLFNBQUdzMEMsV0FBSCxHQUFpQjN2RCxLQUFLa0IsR0FBTCxDQUNoQmxCLEtBQUtDLEtBQUwsQ0FBV2d2RCx3QkFBd0IsQ0FBQ3lCLHNCQUFzQkMsb0JBQXZCLElBQStDLENBQWxGLENBRGdCLEVBRWhCM3dELEtBQUtDLEtBQUwsQ0FBV2d2RCx3QkFBd0IsQ0FBQzJCLHFCQUFxQkMscUJBQXRCLElBQStDLENBQWxGLENBRmdCLENBQWpCO0FBR0F4MUMsU0FBR3UwQyxjQUFILENBQWtCYyxtQkFBbEIsRUFBdUNDLG9CQUF2QyxFQUE2REMsa0JBQTdELEVBQWlGQyxxQkFBakY7QUFDQSxNQXRGbUQ7QUF1RnBEakIscUJBQWdCLHdCQUFTa0IsWUFBVCxFQUF1QkMsYUFBdkIsRUFBc0NDLFdBQXRDLEVBQW1EQyxjQUFuRCxFQUFtRTtBQUNsRixVQUFJNTFDLEtBQUssSUFBVDtBQUNBLFVBQUk2MUMsV0FBVzcxQyxHQUFHNUIsS0FBSCxHQUFXczNDLGFBQVgsR0FBMkIxMUMsR0FBR3MwQyxXQUE3QztBQUNBLFVBQUl3QixVQUFVTCxlQUFlejFDLEdBQUdzMEMsV0FBaEM7QUFDQSxVQUFJeUIsU0FBU0osY0FBYzMxQyxHQUFHczBDLFdBQTlCO0FBQ0EsVUFBSTBCLFlBQVloMkMsR0FBRzNCLE1BQUgsR0FBWXUzQyxjQUFaLEdBQTZCNTFDLEdBQUdzMEMsV0FBaEQ7O0FBRUF0MEMsU0FBRzhPLE9BQUgsR0FBYW5xQixLQUFLQyxLQUFMLENBQVksQ0FBQ2t4RCxVQUFVRCxRQUFYLElBQXVCLENBQXhCLEdBQTZCNzFDLEdBQUd1RCxJQUEzQyxDQUFiO0FBQ0F2RCxTQUFHK08sT0FBSCxHQUFhcHFCLEtBQUtDLEtBQUwsQ0FBWSxDQUFDbXhELFNBQVNDLFNBQVYsSUFBdUIsQ0FBeEIsR0FBNkJoMkMsR0FBR3dELEdBQTNDLENBQWI7QUFDQSxNQWhHbUQ7O0FBa0dwRDB3QyxvQkFBZSx1QkFBU3JvRCxLQUFULEVBQWdCO0FBQzlCLFVBQUlvcUQsa0JBQW1CdHhELEtBQUt3TCxFQUFMLEdBQVUsQ0FBWCxHQUFnQmtqRCxjQUFjLElBQWQsQ0FBdEM7QUFDQSxVQUFJeHFDLGFBQWEsS0FBS2pJLEtBQUwsQ0FBVzlCLE9BQVgsSUFBc0IsS0FBSzhCLEtBQUwsQ0FBVzlCLE9BQVgsQ0FBbUIrSixVQUF6QyxHQUNoQixLQUFLakksS0FBTCxDQUFXOUIsT0FBWCxDQUFtQitKLFVBREgsR0FFaEIsQ0FGRDs7QUFJQSxVQUFJcXRDLG9CQUFvQnJ0QyxhQUFhbGtCLEtBQUt3TCxFQUFsQixHQUF1QixDQUF2QixHQUEyQixHQUFuRDs7QUFFQTtBQUNBLGFBQU90RSxRQUFRb3FELGVBQVIsR0FBMEJDLGlCQUFqQztBQUNBLE1BNUdtRDtBQTZHcERobkMsb0NBQStCLHVDQUFTcG9CLEtBQVQsRUFBZ0I7QUFDOUMsVUFBSWtaLEtBQUssSUFBVDs7QUFFQSxVQUFJbFosVUFBVSxJQUFkLEVBQW9CO0FBQ25CLGNBQU8sQ0FBUCxDQURtQixDQUNUO0FBQ1Y7O0FBRUQ7QUFDQSxVQUFJcXZELGdCQUFnQm4yQyxHQUFHczBDLFdBQUgsSUFBa0J0MEMsR0FBR2xhLEdBQUgsR0FBU2thLEdBQUduYSxHQUE5QixDQUFwQjtBQUNBLFVBQUltYSxHQUFHbEIsT0FBSCxDQUFXUixLQUFYLENBQWlCNG9CLE9BQXJCLEVBQThCO0FBQzdCLGNBQU8sQ0FBQ2xuQixHQUFHbGEsR0FBSCxHQUFTZ0IsS0FBVixJQUFtQnF2RCxhQUExQjtBQUNBO0FBQ0QsYUFBTyxDQUFDcnZELFFBQVFrWixHQUFHbmEsR0FBWixJQUFtQnN3RCxhQUExQjtBQUNBLE1BMUhtRDtBQTJIcERsQyx1QkFBa0IsMEJBQVNwb0QsS0FBVCxFQUFnQnVxRCxrQkFBaEIsRUFBb0M7QUFDckQsVUFBSXAyQyxLQUFLLElBQVQ7QUFDQSxVQUFJcTJDLFlBQVlyMkMsR0FBR2swQyxhQUFILENBQWlCcm9ELEtBQWpCLElBQTJCbEgsS0FBS3dMLEVBQUwsR0FBVSxDQUFyRDtBQUNBLGFBQU87QUFDTmpCLFVBQUd2SyxLQUFLQyxLQUFMLENBQVdELEtBQUsyTCxHQUFMLENBQVMrbEQsU0FBVCxJQUFzQkQsa0JBQWpDLElBQXVEcDJDLEdBQUc4TyxPQUR2RDtBQUVOamdCLFVBQUdsSyxLQUFLQyxLQUFMLENBQVdELEtBQUs0TCxHQUFMLENBQVM4bEQsU0FBVCxJQUFzQkQsa0JBQWpDLElBQXVEcDJDLEdBQUcrTztBQUZ2RCxPQUFQO0FBSUEsTUFsSW1EO0FBbUlwRFMsK0JBQTBCLGtDQUFTM2pCLEtBQVQsRUFBZ0IvRSxLQUFoQixFQUF1QjtBQUNoRCxhQUFPLEtBQUttdEQsZ0JBQUwsQ0FBc0Jwb0QsS0FBdEIsRUFBNkIsS0FBS3FqQiw2QkFBTCxDQUFtQ3BvQixLQUFuQyxDQUE3QixDQUFQO0FBQ0EsTUFySW1EOztBQXVJcEQrakQsc0JBQWlCLDJCQUFXO0FBQzNCLFVBQUk3cUMsS0FBSyxJQUFUO0FBQ0EsVUFBSW5hLE1BQU1tYSxHQUFHbmEsR0FBYjtBQUNBLFVBQUlDLE1BQU1rYSxHQUFHbGEsR0FBYjs7QUFFQSxhQUFPa2EsR0FBR3dQLHdCQUFILENBQTRCLENBQTVCLEVBQ054UCxHQUFHb08sV0FBSCxHQUFpQixDQUFqQixHQUNBdm9CLE1BQU0sQ0FBTixJQUFXQyxNQUFNLENBQWpCLEdBQXFCQSxHQUFyQixHQUNBRCxNQUFNLENBQU4sSUFBV0MsTUFBTSxDQUFqQixHQUFxQkQsR0FBckIsR0FDQSxDQUpNLENBQVA7QUFLQSxNQWpKbUQ7O0FBbUpwRHVlLFdBQU0sZ0JBQVc7QUFDaEIsVUFBSXBFLEtBQUssSUFBVDtBQUNBLFVBQUl1SSxPQUFPdkksR0FBR2xCLE9BQWQ7QUFDQSxVQUFJc3dCLGVBQWU3bUIsS0FBS3hMLFNBQXhCO0FBQ0EsVUFBSTB4QixXQUFXbG1CLEtBQUtqSyxLQUFwQjtBQUNBLFVBQUkyRixpQkFBaUI5SixRQUFROEosY0FBN0I7O0FBRUEsVUFBSXNFLEtBQUswRixPQUFULEVBQWtCO0FBQ2pCLFdBQUkzSixNQUFNdEUsR0FBR3NFLEdBQWI7QUFDQSxXQUFJdUUsYUFBYSxLQUFLcXJDLGFBQUwsQ0FBbUIsQ0FBbkIsQ0FBakI7O0FBRUE7QUFDQSxXQUFJcEQsZUFBZTdzQyxlQUFld3FCLFNBQVM3QixRQUF4QixFQUFrQ0QsZUFBZTlGLGVBQWpELENBQW5CO0FBQ0EsV0FBSXl2QixnQkFBZ0JyeUMsZUFBZXdxQixTQUFTMUssU0FBeEIsRUFBbUM0SSxlQUFlN0YsZ0JBQWxELENBQXBCO0FBQ0EsV0FBSXl2QixpQkFBaUJ0eUMsZUFBZXdxQixTQUFTekssVUFBeEIsRUFBb0MySSxlQUFlL0YsaUJBQW5ELENBQXJCO0FBQ0EsV0FBSTR2QixnQkFBZ0JyOEMsUUFBUTBwQixVQUFSLENBQW1CaXRCLFlBQW5CLEVBQWlDd0YsYUFBakMsRUFBZ0RDLGNBQWhELENBQXBCOztBQUVBcDhDLGVBQVEySyxJQUFSLENBQWE5RSxHQUFHMUIsS0FBaEIsRUFBdUIsVUFBU1YsS0FBVCxFQUFnQi9SLEtBQWhCLEVBQXVCO0FBQzdDO0FBQ0EsWUFBSUEsUUFBUSxDQUFSLElBQWE0aUMsU0FBU3ZILE9BQTFCLEVBQW1DO0FBQ2xDLGFBQUl1dkIsZ0JBQWdCejJDLEdBQUdrUCw2QkFBSCxDQUFpQ2xQLEdBQUdpeEMsY0FBSCxDQUFrQnBsRCxLQUFsQixDQUFqQyxDQUFwQjs7QUFFQTtBQUNBLGFBQUl1akMsYUFBYW5oQixPQUFiLElBQXdCcGlCLFVBQVUsQ0FBdEMsRUFBeUM7QUFDeENvcEQseUJBQWVqMUMsRUFBZixFQUFtQm92QixZQUFuQixFQUFpQ3FuQixhQUFqQyxFQUFnRDVxRCxLQUFoRDtBQUNBOztBQUVELGFBQUk0aUMsU0FBU3hnQixPQUFiLEVBQXNCO0FBQ3JCLGNBQUlzakIsZ0JBQWdCdHRCLGVBQWV3cUIsU0FBUytDLFNBQXhCLEVBQW1DN0UsZUFBZWhHLGdCQUFsRCxDQUFwQjtBQUNBcmlCLGNBQUk0ZixJQUFKLEdBQVdzeUIsYUFBWDs7QUFFQWx5QyxjQUFJcXZCLElBQUo7QUFDQXJ2QixjQUFJNHZCLFNBQUosQ0FBY2wwQixHQUFHOE8sT0FBakIsRUFBMEI5TyxHQUFHK08sT0FBN0I7QUFDQXpLLGNBQUlyYSxNQUFKLENBQVc0ZSxVQUFYOztBQUVBLGNBQUk0bEIsU0FBU3drQixpQkFBYixFQUFnQztBQUMvQixlQUFJbmtCLGFBQWF4cUIsSUFBSW1nQixXQUFKLENBQWdCN21CLEtBQWhCLEVBQXVCUSxLQUF4QztBQUNBa0csZUFBSThDLFNBQUosR0FBZ0JxbkIsU0FBU3lrQixhQUF6QjtBQUNBNXVDLGVBQUlxNUIsUUFBSixDQUNDLENBQUM3TyxVQUFELEdBQWMsQ0FBZCxHQUFrQkwsU0FBUzJrQixnQkFENUIsRUFFQyxDQUFDcUQsYUFBRCxHQUFpQjNGLGVBQWUsQ0FBaEMsR0FBb0NyaUIsU0FBUzBrQixnQkFGOUMsRUFHQ3JrQixhQUFhTCxTQUFTMmtCLGdCQUFULEdBQTRCLENBSDFDLEVBSUN0QyxlQUFlcmlCLFNBQVMwa0IsZ0JBQVQsR0FBNEIsQ0FKNUM7QUFNQTs7QUFFRDd1QyxjQUFJeXVCLFNBQUosR0FBZ0IsUUFBaEI7QUFDQXp1QixjQUFJMHVCLFlBQUosR0FBbUIsUUFBbkI7QUFDQTF1QixjQUFJOEMsU0FBSixHQUFnQm1xQixhQUFoQjtBQUNBanRCLGNBQUk4dkIsUUFBSixDQUFheDJCLEtBQWIsRUFBb0IsQ0FBcEIsRUFBdUIsQ0FBQzY0QyxhQUF4QjtBQUNBbnlDLGNBQUkydkIsT0FBSjtBQUNBO0FBQ0Q7QUFDRCxRQXBDRDs7QUFzQ0EsV0FBSTFyQixLQUFLeUYsVUFBTCxDQUFnQkMsT0FBaEIsSUFBMkIxRixLQUFLNEYsV0FBTCxDQUFpQkYsT0FBaEQsRUFBeUQ7QUFDeER5bUMsd0JBQWdCMTBDLEVBQWhCO0FBQ0E7QUFDRDtBQUNEO0FBOU1tRCxLQUE3QixDQUF4Qjs7QUFpTkFsRixpQkFBYTI1QixpQkFBYixDQUErQixjQUEvQixFQUErQzJnQixpQkFBL0MsRUFBa0VyRyxhQUFsRTtBQUNBLElBMWdCRDtBQTRnQkMsR0FwaEJ1QyxFQW9oQnRDLEVBQUMsTUFBSyxFQUFOLEVBQVMsTUFBSyxFQUFkLEVBQWlCLE1BQUssRUFBdEIsRUFBeUIsTUFBSyxFQUE5QixFQXBoQnNDLENBdDBaaXhCLEVBMDFhcHhCLElBQUcsQ0FBQyxVQUFTdHNELE9BQVQsRUFBaUJkLE1BQWpCLEVBQXdCRCxPQUF4QixFQUFnQztBQUN6RTtBQUNBOztBQUVBLE9BQUlnMUQsU0FBU2owRCxRQUFRLENBQVIsQ0FBYjtBQUNBaTBELFlBQVMsT0FBT0EsTUFBUCxLQUFrQixVQUFsQixHQUErQkEsTUFBL0IsR0FBd0M1MEQsT0FBTzQwRCxNQUF4RDs7QUFFQSxPQUFJcDhDLFdBQVc3WCxRQUFRLEVBQVIsQ0FBZjtBQUNBLE9BQUkwWCxVQUFVMVgsUUFBUSxFQUFSLENBQWQ7QUFDQSxPQUFJb1ksUUFBUXBZLFFBQVEsRUFBUixDQUFaO0FBQ0EsT0FBSXFZLGVBQWVyWSxRQUFRLEVBQVIsQ0FBbkI7O0FBRUE7QUFDQSxPQUFJazBELGNBQWNqcUMsT0FBT2txQyxnQkFBUCxJQUEyQixDQUFDLGdCQUE5QztBQUNBLE9BQUlDLGNBQWNucUMsT0FBT29xQyxnQkFBUCxJQUEyQixnQkFBN0M7O0FBRUEsT0FBSUMsWUFBWTtBQUNmQyxpQkFBYTtBQUNaQyxhQUFRLElBREk7QUFFWjkzQyxXQUFNLENBRk07QUFHWiszQyxZQUFPLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBTyxDQUFQLEVBQVUsRUFBVixFQUFjLEVBQWQsRUFBa0IsRUFBbEIsRUFBc0IsR0FBdEIsRUFBMkIsR0FBM0IsRUFBZ0MsR0FBaEM7QUFISyxLQURFO0FBTWZDLFlBQVE7QUFDUEYsYUFBUSxJQUREO0FBRVA5M0MsV0FBTSxJQUZDO0FBR1ArM0MsWUFBTyxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxFQUFVLEVBQVYsRUFBYyxFQUFkLEVBQWtCLEVBQWxCO0FBSEEsS0FOTztBQVdmRSxZQUFRO0FBQ1BILGFBQVEsSUFERDtBQUVQOTNDLFdBQU0sS0FGQztBQUdQKzNDLFlBQU8sQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsRUFBVSxFQUFWLEVBQWMsRUFBZCxFQUFrQixFQUFsQjtBQUhBLEtBWE87QUFnQmZHLFVBQU07QUFDTEosYUFBUSxJQURIO0FBRUw5M0MsV0FBTSxPQUZEO0FBR0wrM0MsWUFBTyxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxFQUFVLENBQVYsRUFBYSxFQUFiO0FBSEYsS0FoQlM7QUFxQmZJLFNBQUs7QUFDSkwsYUFBUSxJQURKO0FBRUo5M0MsV0FBTSxRQUZGO0FBR0orM0MsWUFBTyxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUDtBQUhILEtBckJVO0FBMEJmSyxVQUFNO0FBQ0xOLGFBQVEsS0FESDtBQUVMOTNDLFdBQU0sU0FGRDtBQUdMKzNDLFlBQU8sQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsRUFBVSxDQUFWO0FBSEYsS0ExQlM7QUErQmZNLFdBQU87QUFDTlAsYUFBUSxJQURGO0FBRU45M0MsV0FBTSxPQUZBO0FBR04rM0MsWUFBTyxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUDtBQUhELEtBL0JRO0FBb0NmTyxhQUFTO0FBQ1JSLGFBQVEsS0FEQTtBQUVSOTNDLFdBQU0sT0FGRTtBQUdSKzNDLFlBQU8sQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsRUFBVSxDQUFWO0FBSEMsS0FwQ007QUF5Q2ZRLFVBQU07QUFDTFQsYUFBUSxJQURIO0FBRUw5M0MsV0FBTTtBQUZEO0FBekNTLElBQWhCOztBQStDQSxPQUFJdzRDLFFBQVEzbkMsT0FBTzNKLElBQVAsQ0FBWTB3QyxTQUFaLENBQVo7O0FBRUEsWUFBU2EsTUFBVCxDQUFnQmoxRCxDQUFoQixFQUFtQjJDLENBQW5CLEVBQXNCO0FBQ3JCLFdBQU8zQyxJQUFJMkMsQ0FBWDtBQUNBOztBQUVELFlBQVN1eUQsV0FBVCxDQUFxQjNqQyxLQUFyQixFQUE0QjtBQUMzQixRQUFJNGpDLE9BQU8sRUFBWDtBQUNBLFFBQUlDLE1BQU0sRUFBVjtBQUNBLFFBQUl4MUQsQ0FBSixFQUFPbWMsSUFBUCxFQUFhbEIsSUFBYjs7QUFFQSxTQUFLamIsSUFBSSxDQUFKLEVBQU9tYyxPQUFPd1YsTUFBTWx4QixNQUF6QixFQUFpQ1QsSUFBSW1jLElBQXJDLEVBQTJDLEVBQUVuYyxDQUE3QyxFQUFnRDtBQUMvQ2liLFlBQU8wVyxNQUFNM3hCLENBQU4sQ0FBUDtBQUNBLFNBQUksQ0FBQ3UxRCxLQUFLdDZDLElBQUwsQ0FBTCxFQUFpQjtBQUNoQnM2QyxXQUFLdDZDLElBQUwsSUFBYSxJQUFiO0FBQ0F1NkMsVUFBSTMwQyxJQUFKLENBQVM1RixJQUFUO0FBQ0E7QUFDRDs7QUFFRCxXQUFPdTZDLEdBQVA7QUFDQTs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0FBZUEsWUFBU0MsZ0JBQVQsQ0FBMEJDLFVBQTFCLEVBQXNDcHlELEdBQXRDLEVBQTJDQyxHQUEzQyxFQUFnRG95RCxZQUFoRCxFQUE4RDtBQUM3RCxRQUFJQSxpQkFBaUIsUUFBakIsSUFBNkIsQ0FBQ0QsV0FBV2oxRCxNQUE3QyxFQUFxRDtBQUNwRCxZQUFPLENBQ04sRUFBQ20xRCxNQUFNdHlELEdBQVAsRUFBWWl5QyxLQUFLLENBQWpCLEVBRE0sRUFFTixFQUFDcWdCLE1BQU1yeUQsR0FBUCxFQUFZZ3lDLEtBQUssQ0FBakIsRUFGTSxDQUFQO0FBSUE7O0FBRUQsUUFBSXNnQixRQUFRLEVBQVo7QUFDQSxRQUFJbGtDLFFBQVEsQ0FBQ3J1QixHQUFELENBQVo7QUFDQSxRQUFJdEQsQ0FBSixFQUFPbWMsSUFBUCxFQUFhRixJQUFiLEVBQW1CQyxJQUFuQixFQUF5QmUsSUFBekI7O0FBRUEsU0FBS2pkLElBQUksQ0FBSixFQUFPbWMsT0FBT3U1QyxXQUFXajFELE1BQTlCLEVBQXNDVCxJQUFJbWMsSUFBMUMsRUFBZ0QsRUFBRW5jLENBQWxELEVBQXFEO0FBQ3BEa2MsWUFBT3c1QyxXQUFXMTFELENBQVgsQ0FBUDtBQUNBLFNBQUlrYyxPQUFPNVksR0FBUCxJQUFjNFksT0FBTzNZLEdBQXpCLEVBQThCO0FBQzdCb3VCLFlBQU05USxJQUFOLENBQVczRSxJQUFYO0FBQ0E7QUFDRDs7QUFFRHlWLFVBQU05USxJQUFOLENBQVd0ZCxHQUFYOztBQUVBLFNBQUt2RCxJQUFJLENBQUosRUFBT21jLE9BQU93VixNQUFNbHhCLE1BQXpCLEVBQWlDVCxJQUFJbWMsSUFBckMsRUFBMkMsRUFBRW5jLENBQTdDLEVBQWdEO0FBQy9DaWQsWUFBTzBVLE1BQU0zeEIsSUFBSSxDQUFWLENBQVA7QUFDQWljLFlBQU8wVixNQUFNM3hCLElBQUksQ0FBVixDQUFQO0FBQ0FrYyxZQUFPeVYsTUFBTTN4QixDQUFOLENBQVA7O0FBRUE7QUFDQSxTQUFJaWMsU0FBUzlZLFNBQVQsSUFBc0I4WixTQUFTOVosU0FBL0IsSUFBNENmLEtBQUtDLEtBQUwsQ0FBVyxDQUFDNGEsT0FBT2hCLElBQVIsSUFBZ0IsQ0FBM0IsTUFBa0NDLElBQWxGLEVBQXdGO0FBQ3ZGMjVDLFlBQU1oMUMsSUFBTixDQUFXLEVBQUMrMEMsTUFBTTE1QyxJQUFQLEVBQWFxNUIsS0FBS3YxQyxLQUFLbWMsT0FBTyxDQUFaLENBQWxCLEVBQVg7QUFDQTtBQUNEOztBQUVELFdBQU8wNUMsS0FBUDtBQUNBOztBQUVEO0FBQ0EsWUFBU0MsTUFBVCxDQUFnQkQsS0FBaEIsRUFBdUI5K0MsR0FBdkIsRUFBNEJ4UyxLQUE1QixFQUFtQztBQUNsQyxRQUFJd3hELEtBQUssQ0FBVDtBQUNBLFFBQUk3b0QsS0FBSzJvRCxNQUFNcDFELE1BQU4sR0FBZSxDQUF4QjtBQUNBLFFBQUl1MUQsR0FBSixFQUFTQyxFQUFULEVBQWFDLEVBQWI7O0FBRUEsV0FBT0gsTUFBTSxDQUFOLElBQVdBLE1BQU03b0QsRUFBeEIsRUFBNEI7QUFDM0I4b0QsV0FBT0QsS0FBSzdvRCxFQUFOLElBQWEsQ0FBbkI7QUFDQStvRCxVQUFLSixNQUFNRyxNQUFNLENBQVosS0FBa0IsSUFBdkI7QUFDQUUsVUFBS0wsTUFBTUcsR0FBTixDQUFMOztBQUVBLFNBQUksQ0FBQ0MsRUFBTCxFQUFTO0FBQ1I7QUFDQSxhQUFPLEVBQUNGLElBQUksSUFBTCxFQUFXN29ELElBQUlncEQsRUFBZixFQUFQO0FBQ0EsTUFIRCxNQUdPLElBQUlBLEdBQUduL0MsR0FBSCxJQUFVeFMsS0FBZCxFQUFxQjtBQUMzQnd4RCxXQUFLQyxNQUFNLENBQVg7QUFDQSxNQUZNLE1BRUEsSUFBSUMsR0FBR2wvQyxHQUFILElBQVV4UyxLQUFkLEVBQXFCO0FBQzNCMkksV0FBSzhvRCxNQUFNLENBQVg7QUFDQSxNQUZNLE1BRUE7QUFDTixhQUFPLEVBQUNELElBQUlFLEVBQUwsRUFBUy9vRCxJQUFJZ3BELEVBQWIsRUFBUDtBQUNBO0FBQ0Q7O0FBRUQ7QUFDQSxXQUFPLEVBQUNILElBQUlHLEVBQUwsRUFBU2hwRCxJQUFJLElBQWIsRUFBUDtBQUNBOztBQUVEOzs7Ozs7QUFNQSxZQUFTb3JCLFdBQVQsQ0FBcUJ1OUIsS0FBckIsRUFBNEJNLElBQTVCLEVBQWtDOThCLElBQWxDLEVBQXdDKzhCLElBQXhDLEVBQThDO0FBQzdDLFFBQUk1MEMsUUFBUXMwQyxPQUFPRCxLQUFQLEVBQWNNLElBQWQsRUFBb0I5OEIsSUFBcEIsQ0FBWjs7QUFFQTtBQUNBLFFBQUlwZCxPQUFPLENBQUN1RixNQUFNdTBDLEVBQVAsR0FBWUYsTUFBTSxDQUFOLENBQVosR0FBdUIsQ0FBQ3IwQyxNQUFNdFUsRUFBUCxHQUFZMm9ELE1BQU1BLE1BQU1wMUQsTUFBTixHQUFlLENBQXJCLENBQVosR0FBc0MrZ0IsTUFBTXUwQyxFQUE5RTtBQUNBLFFBQUk5NEMsT0FBTyxDQUFDdUUsTUFBTXUwQyxFQUFQLEdBQVlGLE1BQU0sQ0FBTixDQUFaLEdBQXVCLENBQUNyMEMsTUFBTXRVLEVBQVAsR0FBWTJvRCxNQUFNQSxNQUFNcDFELE1BQU4sR0FBZSxDQUFyQixDQUFaLEdBQXNDK2dCLE1BQU10VSxFQUE5RTs7QUFFQSxRQUFJZzhDLE9BQU9qc0MsS0FBS2s1QyxJQUFMLElBQWFsNkMsS0FBS2s2QyxJQUFMLENBQXhCO0FBQ0EsUUFBSWx2RCxRQUFRaWlELE9BQU8sQ0FBQzd2QixPQUFPcGQsS0FBS2s2QyxJQUFMLENBQVIsSUFBc0JqTixJQUE3QixHQUFvQyxDQUFoRDtBQUNBLFFBQUkzdUMsU0FBUyxDQUFDMEMsS0FBS201QyxJQUFMLElBQWFuNkMsS0FBS202QyxJQUFMLENBQWQsSUFBNEJudkQsS0FBekM7O0FBRUEsV0FBT2dWLEtBQUttNkMsSUFBTCxJQUFhNzdDLE1BQXBCO0FBQ0E7O0FBRUQ7Ozs7QUFJQSxZQUFTODdDLFNBQVQsQ0FBbUI5eEQsS0FBbkIsRUFBMEJnWSxPQUExQixFQUFtQztBQUNsQyxRQUFJKzVDLFNBQVMvNUMsUUFBUSs1QyxNQUFyQjtBQUNBLFFBQUlDLFNBQVNoNkMsUUFBUSs1QyxNQUFSLElBQWtCLzVDLFFBQVFnNkMsTUFBdkM7O0FBRUEsUUFBSSxPQUFPRCxNQUFQLEtBQWtCLFVBQXRCLEVBQWtDO0FBQ2pDLFlBQU9BLE9BQU8veEQsS0FBUCxDQUFQO0FBQ0E7O0FBRUQsUUFBSSxPQUFPQSxLQUFQLEtBQWlCLFFBQWpCLElBQTZCLE9BQU9neUQsTUFBUCxLQUFrQixRQUFuRCxFQUE2RDtBQUM1RCxZQUFPcEMsT0FBTzV2RCxLQUFQLEVBQWNneUQsTUFBZCxDQUFQO0FBQ0E7O0FBRUQsUUFBSSxFQUFFaHlELGlCQUFpQjR2RCxNQUFuQixDQUFKLEVBQWdDO0FBQy9CNXZELGFBQVE0dkQsT0FBTzV2RCxLQUFQLENBQVI7QUFDQTs7QUFFRCxRQUFJQSxNQUFNSSxPQUFOLEVBQUosRUFBcUI7QUFDcEIsWUFBT0osS0FBUDtBQUNBOztBQUVEO0FBQ0E7QUFDQSxRQUFJLE9BQU9neUQsTUFBUCxLQUFrQixVQUF0QixFQUFrQztBQUNqQyxZQUFPQSxPQUFPaHlELEtBQVAsQ0FBUDtBQUNBOztBQUVELFdBQU9BLEtBQVA7QUFDQTs7QUFFRCxZQUFTaXlELEtBQVQsQ0FBZUMsS0FBZixFQUFzQm4wRCxLQUF0QixFQUE2QjtBQUM1QixRQUFJc1YsUUFBUWlGLGFBQVIsQ0FBc0I0NUMsS0FBdEIsQ0FBSixFQUFrQztBQUNqQyxZQUFPLElBQVA7QUFDQTs7QUFFRCxRQUFJbDZDLFVBQVVqYSxNQUFNaWEsT0FBTixDQUFjcTVDLElBQTVCO0FBQ0EsUUFBSXJ4RCxRQUFROHhELFVBQVUvekQsTUFBTTZlLGFBQU4sQ0FBb0JzMUMsS0FBcEIsQ0FBVixFQUFzQ2w2QyxPQUF0QyxDQUFaO0FBQ0EsUUFBSSxDQUFDaFksTUFBTUksT0FBTixFQUFMLEVBQXNCO0FBQ3JCLFlBQU8sSUFBUDtBQUNBOztBQUVELFFBQUk0WCxRQUFRbGEsS0FBWixFQUFtQjtBQUNsQmtDLFdBQU1teUQsT0FBTixDQUFjbjZDLFFBQVFsYSxLQUF0QjtBQUNBOztBQUVELFdBQU9rQyxNQUFNb3lELE9BQU4sRUFBUDtBQUNBOztBQUVEOzs7O0FBSUEsWUFBU0MsaUJBQVQsQ0FBMkJ0ekQsR0FBM0IsRUFBZ0NDLEdBQWhDLEVBQXFDc3pELElBQXJDLEVBQTJDQyxRQUEzQyxFQUFxRDtBQUNwRCxRQUFJdDFDLFFBQVFqZSxNQUFNRCxHQUFsQjtBQUNBLFFBQUl5ekQsV0FBV3ZDLFVBQVVxQyxJQUFWLENBQWY7QUFDQSxRQUFJRyxlQUFlRCxTQUFTbjZDLElBQTVCO0FBQ0EsUUFBSSszQyxRQUFRb0MsU0FBU3BDLEtBQXJCO0FBQ0EsUUFBSTMwRCxDQUFKLEVBQU9tYyxJQUFQLEVBQWEyeUMsTUFBYjs7QUFFQSxRQUFJLENBQUM2RixLQUFMLEVBQVk7QUFDWCxZQUFPdnlELEtBQUtrc0QsSUFBTCxDQUFVOXNDLFNBQVNzMUMsV0FBV0UsWUFBcEIsQ0FBVixDQUFQO0FBQ0E7O0FBRUQsU0FBS2gzRCxJQUFJLENBQUosRUFBT21jLE9BQU93NEMsTUFBTWwwRCxNQUF6QixFQUFpQ1QsSUFBSW1jLElBQXJDLEVBQTJDLEVBQUVuYyxDQUE3QyxFQUFnRDtBQUMvQzh1RCxjQUFTNkYsTUFBTTMwRCxDQUFOLENBQVQ7QUFDQSxTQUFJb0MsS0FBS2tzRCxJQUFMLENBQVU5c0MsU0FBU3cxQyxlQUFlbEksTUFBeEIsQ0FBVixLQUE4Q2dJLFFBQWxELEVBQTREO0FBQzNEO0FBQ0E7QUFDRDs7QUFFRCxXQUFPaEksTUFBUDtBQUNBOztBQUVEOzs7QUFHQSxZQUFTbUkseUJBQVQsQ0FBbUNDLE9BQW5DLEVBQTRDNXpELEdBQTVDLEVBQWlEQyxHQUFqRCxFQUFzRHV6RCxRQUF0RCxFQUFnRTtBQUMvRCxRQUFJMzZDLE9BQU9pNUMsTUFBTTMwRCxNQUFqQjtBQUNBLFFBQUlULENBQUosRUFBTysyRCxRQUFQLEVBQWlCakksTUFBakI7O0FBRUEsU0FBSzl1RCxJQUFJbzFELE1BQU14MEMsT0FBTixDQUFjczJDLE9BQWQsQ0FBVCxFQUFpQ2wzRCxJQUFJbWMsT0FBTyxDQUE1QyxFQUErQyxFQUFFbmMsQ0FBakQsRUFBb0Q7QUFDbkQrMkQsZ0JBQVd2QyxVQUFVWSxNQUFNcDFELENBQU4sQ0FBVixDQUFYO0FBQ0E4dUQsY0FBU2lJLFNBQVNwQyxLQUFULEdBQWlCb0MsU0FBU3BDLEtBQVQsQ0FBZW9DLFNBQVNwQyxLQUFULENBQWVsMEQsTUFBZixHQUF3QixDQUF2QyxDQUFqQixHQUE2RDZ6RCxXQUF0RTs7QUFFQSxTQUFJeUMsU0FBU3JDLE1BQVQsSUFBbUJ0eUQsS0FBS2tzRCxJQUFMLENBQVUsQ0FBQy9xRCxNQUFNRCxHQUFQLEtBQWV3ckQsU0FBU2lJLFNBQVNuNkMsSUFBakMsQ0FBVixLQUFxRGs2QyxRQUE1RSxFQUFzRjtBQUNyRixhQUFPMUIsTUFBTXAxRCxDQUFOLENBQVA7QUFDQTtBQUNEOztBQUVELFdBQU9vMUQsTUFBTWo1QyxPQUFPLENBQWIsQ0FBUDtBQUNBOztBQUVEOzs7QUFHQSxZQUFTZzdDLDBCQUFULENBQW9DcDdDLEtBQXBDLEVBQTJDbTdDLE9BQTNDLEVBQW9ENXpELEdBQXBELEVBQXlEQyxHQUF6RCxFQUE4RDtBQUM3RCxRQUFJc3FCLFdBQVdzbUMsT0FBT3RtQyxRQUFQLENBQWdCc21DLE9BQU81d0QsR0FBUCxFQUFZNnpELElBQVosQ0FBaUJqRCxPQUFPN3dELEdBQVAsQ0FBakIsQ0FBaEIsQ0FBZjtBQUNBLFFBQUk2WSxPQUFPaTVDLE1BQU0zMEQsTUFBakI7QUFDQSxRQUFJVCxDQUFKLEVBQU82MkQsSUFBUDs7QUFFQSxTQUFLNzJELElBQUltYyxPQUFPLENBQWhCLEVBQW1CbmMsS0FBS28xRCxNQUFNeDBDLE9BQU4sQ0FBY3MyQyxPQUFkLENBQXhCLEVBQWdEbDNELEdBQWhELEVBQXFEO0FBQ3BENjJELFlBQU96QixNQUFNcDFELENBQU4sQ0FBUDtBQUNBLFNBQUl3MEQsVUFBVXFDLElBQVYsRUFBZ0JuQyxNQUFoQixJQUEwQjdtQyxTQUFTd3BDLEVBQVQsQ0FBWVIsSUFBWixLQUFxQjk2QyxNQUFNdGIsTUFBekQsRUFBaUU7QUFDaEUsYUFBT28yRCxJQUFQO0FBQ0E7QUFDRDs7QUFFRCxXQUFPekIsTUFBTThCLFVBQVU5QixNQUFNeDBDLE9BQU4sQ0FBY3MyQyxPQUFkLENBQVYsR0FBbUMsQ0FBekMsQ0FBUDtBQUNBOztBQUVELFlBQVNJLGtCQUFULENBQTRCVCxJQUE1QixFQUFrQztBQUNqQyxTQUFLLElBQUk3MkQsSUFBSW8xRCxNQUFNeDBDLE9BQU4sQ0FBY2kyQyxJQUFkLElBQXNCLENBQTlCLEVBQWlDMTZDLE9BQU9pNUMsTUFBTTMwRCxNQUFuRCxFQUEyRFQsSUFBSW1jLElBQS9ELEVBQXFFLEVBQUVuYyxDQUF2RSxFQUEwRTtBQUN6RSxTQUFJdzBELFVBQVVZLE1BQU1wMUQsQ0FBTixDQUFWLEVBQW9CMDBELE1BQXhCLEVBQWdDO0FBQy9CLGFBQU9VLE1BQU1wMUQsQ0FBTixDQUFQO0FBQ0E7QUFDRDtBQUNEOztBQUVEOzs7Ozs7QUFNQSxZQUFTdTNELFFBQVQsQ0FBa0JqMEQsR0FBbEIsRUFBdUJDLEdBQXZCLEVBQTRCdXpELFFBQTVCLEVBQXNDdjZDLE9BQXRDLEVBQStDO0FBQzlDLFFBQUlpN0MsV0FBV2o3QyxRQUFRcTVDLElBQXZCO0FBQ0EsUUFBSWhzQixRQUFRNHRCLFNBQVNYLElBQVQsSUFBaUJJLDBCQUEwQk8sU0FBU04sT0FBbkMsRUFBNEM1ekQsR0FBNUMsRUFBaURDLEdBQWpELEVBQXNEdXpELFFBQXRELENBQTdCO0FBQ0EsUUFBSWp0QixRQUFReXRCLG1CQUFtQjF0QixLQUFuQixDQUFaO0FBQ0EsUUFBSXFsQixXQUFXcjNDLFFBQVE4SixjQUFSLENBQXVCODFDLFNBQVN2SSxRQUFoQyxFQUEwQ3VJLFNBQVNDLFlBQW5ELENBQWY7QUFDQSxRQUFJQyxVQUFVOXRCLFVBQVUsTUFBVixHQUFtQjR0QixTQUFTRyxVQUE1QixHQUF5QyxLQUF2RDtBQUNBLFFBQUlDLG9CQUFvQnI3QyxRQUFRUixLQUFSLENBQWM4dEIsS0FBZCxDQUFvQm5VLE9BQTVDO0FBQ0EsUUFBSXFoQyxXQUFXdkMsVUFBVTVxQixLQUFWLENBQWY7QUFDQSxRQUFJaXVCLFFBQVExRCxPQUFPN3dELEdBQVAsQ0FBWjtBQUNBLFFBQUlpZCxPQUFPNHpDLE9BQU81d0QsR0FBUCxDQUFYO0FBQ0EsUUFBSXdZLFFBQVEsRUFBWjtBQUNBLFFBQUk2NUMsSUFBSjs7QUFFQSxRQUFJLENBQUMzRyxRQUFMLEVBQWU7QUFDZEEsZ0JBQVcySCxrQkFBa0J0ekQsR0FBbEIsRUFBdUJDLEdBQXZCLEVBQTRCcW1DLEtBQTVCLEVBQW1Da3RCLFFBQW5DLENBQVg7QUFDQTs7QUFFRDtBQUNBLFFBQUlZLE9BQUosRUFBYTtBQUNaRyxhQUFRQSxNQUFNRixVQUFOLENBQWlCRCxPQUFqQixDQUFSO0FBQ0FuM0MsWUFBT0EsS0FBS28zQyxVQUFMLENBQWdCRCxPQUFoQixDQUFQO0FBQ0E7O0FBRUQ7QUFDQUcsWUFBUUEsTUFBTW5CLE9BQU4sQ0FBY2dCLFVBQVUsS0FBVixHQUFrQjl0QixLQUFoQyxDQUFSO0FBQ0FycEIsV0FBT0EsS0FBS20yQyxPQUFMLENBQWFnQixVQUFVLEtBQVYsR0FBa0I5dEIsS0FBL0IsQ0FBUDs7QUFFQTtBQUNBLFFBQUlycEIsT0FBT2hkLEdBQVgsRUFBZ0I7QUFDZmdkLFVBQUs0bEMsR0FBTCxDQUFTLENBQVQsRUFBWXZjLEtBQVo7QUFDQTs7QUFFRGdzQixXQUFPekIsT0FBTzBELEtBQVAsQ0FBUDs7QUFFQSxRQUFJRCxxQkFBcUIvdEIsS0FBckIsSUFBOEIsQ0FBQzZ0QixPQUEvQixJQUEwQyxDQUFDRixTQUFTbjFELEtBQXhELEVBQStEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBdXpELFVBQUtjLE9BQUwsQ0FBYTdzQixLQUFiO0FBQ0ErckIsVUFBS3pQLEdBQUwsQ0FBUyxDQUFDLEVBQUUsQ0FBQzBSLFFBQVFqQyxJQUFULEtBQWtCbUIsU0FBU242QyxJQUFULEdBQWdCcXlDLFFBQWxDLENBQUYsQ0FBRCxHQUFrREEsUUFBM0QsRUFBcUVybEIsS0FBckU7QUFDQTs7QUFFRCxXQUFPZ3NCLE9BQU9yMUMsSUFBZCxFQUFvQnExQyxLQUFLelAsR0FBTCxDQUFTOEksUUFBVCxFQUFtQnJsQixLQUFuQixDQUFwQixFQUErQztBQUM5Qzd0QixXQUFNOEUsSUFBTixDQUFXLENBQUMrMEMsSUFBWjtBQUNBOztBQUVENzVDLFVBQU04RSxJQUFOLENBQVcsQ0FBQyswQyxJQUFaOztBQUVBLFdBQU83NUMsS0FBUDtBQUNBOztBQUVEOzs7O0FBSUEsWUFBUys3QyxjQUFULENBQXdCakMsS0FBeEIsRUFBK0I5NUMsS0FBL0IsRUFBc0N6WSxHQUF0QyxFQUEyQ0MsR0FBM0MsRUFBZ0RnWixPQUFoRCxFQUF5RDtBQUN4RCxRQUFJeUUsT0FBTyxDQUFYO0FBQ0EsUUFBSWtGLFFBQVEsQ0FBWjtBQUNBLFFBQUk2eEMsS0FBSixFQUFXQyxLQUFYOztBQUVBLFFBQUl6N0MsUUFBUWhDLE1BQVIsSUFBa0J3QixNQUFNdGIsTUFBNUIsRUFBb0M7QUFDbkMsU0FBSSxDQUFDOGIsUUFBUXE1QyxJQUFSLENBQWF0eUQsR0FBbEIsRUFBdUI7QUFDdEJ5MEQsY0FBUWg4QyxNQUFNdGIsTUFBTixHQUFlLENBQWYsR0FBbUJzYixNQUFNLENBQU4sQ0FBbkIsR0FBOEJ4WSxHQUF0QztBQUNBeTBELGNBQVFqOEMsTUFBTSxDQUFOLENBQVI7QUFDQWlGLGFBQU8sQ0FDTnNYLFlBQVl1OUIsS0FBWixFQUFtQixNQUFuQixFQUEyQmtDLEtBQTNCLEVBQWtDLEtBQWxDLElBQ0F6L0IsWUFBWXU5QixLQUFaLEVBQW1CLE1BQW5CLEVBQTJCbUMsS0FBM0IsRUFBa0MsS0FBbEMsQ0FGTSxJQUdILENBSEo7QUFJQTtBQUNELFNBQUksQ0FBQ3o3QyxRQUFRcTVDLElBQVIsQ0FBYXJ5RCxHQUFsQixFQUF1QjtBQUN0QncwRCxjQUFRaDhDLE1BQU1BLE1BQU10YixNQUFOLEdBQWUsQ0FBckIsQ0FBUjtBQUNBdTNELGNBQVFqOEMsTUFBTXRiLE1BQU4sR0FBZSxDQUFmLEdBQW1Cc2IsTUFBTUEsTUFBTXRiLE1BQU4sR0FBZSxDQUFyQixDQUFuQixHQUE2QzZDLEdBQXJEO0FBQ0E0aUIsY0FBUSxDQUNQb1MsWUFBWXU5QixLQUFaLEVBQW1CLE1BQW5CLEVBQTJCa0MsS0FBM0IsRUFBa0MsS0FBbEMsSUFDQXovQixZQUFZdTlCLEtBQVosRUFBbUIsTUFBbkIsRUFBMkJtQyxLQUEzQixFQUFrQyxLQUFsQyxDQUZPLElBR0osQ0FISjtBQUlBO0FBQ0Q7O0FBRUQsV0FBTyxFQUFDaDNDLE1BQU1BLElBQVAsRUFBYWtGLE9BQU9BLEtBQXBCLEVBQVA7QUFDQTs7QUFFRCxZQUFTK3hDLG1CQUFULENBQTZCajBELE1BQTdCLEVBQXFDazBELFNBQXJDLEVBQWdEO0FBQy9DLFFBQUluOEMsUUFBUSxFQUFaO0FBQ0EsUUFBSS9iLENBQUosRUFBT21jLElBQVAsRUFBYTVYLEtBQWIsRUFBb0JzbEMsS0FBcEI7O0FBRUEsU0FBSzdwQyxJQUFJLENBQUosRUFBT21jLE9BQU9uWSxPQUFPdkQsTUFBMUIsRUFBa0NULElBQUltYyxJQUF0QyxFQUE0QyxFQUFFbmMsQ0FBOUMsRUFBaUQ7QUFDaER1RSxhQUFRUCxPQUFPaEUsQ0FBUCxDQUFSO0FBQ0E2cEMsYUFBUXF1QixZQUFZM3pELFVBQVUsQ0FBQzR2RCxPQUFPNXZELEtBQVAsRUFBY215RCxPQUFkLENBQXNCd0IsU0FBdEIsQ0FBdkIsR0FBMEQsS0FBbEU7O0FBRUFuOEMsV0FBTThFLElBQU4sQ0FBVztBQUNWdGMsYUFBT0EsS0FERztBQUVWc2xDLGFBQU9BO0FBRkcsTUFBWDtBQUlBOztBQUVELFdBQU85dEIsS0FBUDtBQUNBOztBQUVELFlBQVNvOEMsb0JBQVQsQ0FBOEJqOUMsSUFBOUIsRUFBb0NzOEMsUUFBcEMsRUFBOEM7QUFDN0MsUUFBSXgzRCxDQUFKLEVBQU9vNEQsVUFBUCxFQUFtQkMsT0FBbkI7QUFDQSxRQUFJbDhDLE9BQU9qQixLQUFLemEsTUFBaEI7O0FBRUE7QUFDQTtBQUNBLFNBQUtULElBQUksQ0FBVCxFQUFZQSxJQUFJbWMsSUFBaEIsRUFBc0JuYyxHQUF0QixFQUEyQjtBQUMxQm80RCxrQkFBYS9CLFVBQVVuN0MsS0FBS2xiLENBQUwsQ0FBVixFQUFtQnczRCxRQUFuQixDQUFiO0FBQ0EsU0FBSVksV0FBVzNELFdBQVgsT0FBNkIsQ0FBakMsRUFBb0M7QUFDbkMsYUFBTywyQkFBUDtBQUNBO0FBQ0QsU0FBSTJELFdBQVd4RCxNQUFYLE9BQXdCLENBQXhCLElBQTZCd0QsV0FBV3ZELE1BQVgsT0FBd0IsQ0FBckQsSUFBMER1RCxXQUFXdEQsSUFBWCxPQUFzQixDQUFwRixFQUF1RjtBQUN0RnVELGdCQUFVLElBQVY7QUFDQTtBQUNEO0FBQ0QsUUFBSUEsT0FBSixFQUFhO0FBQ1osWUFBTyx1QkFBUDtBQUNBO0FBQ0QsV0FBTyxhQUFQO0FBQ0E7O0FBRURqNUQsVUFBT0QsT0FBUCxHQUFpQixZQUFXOztBQUUzQixRQUFJcXRELGdCQUFnQjtBQUNuQjV4QyxlQUFVLFFBRFM7O0FBR25COzs7Ozs7O0FBT0ErNkMsbUJBQWMsUUFWSzs7QUFZbkI7Ozs7Ozs7QUFPQTFYLGFBQVEsTUFuQlc7O0FBcUJuQjJYLFdBQU07QUFDTFUsY0FBUSxLQURILEVBQ1U7QUFDZkMsY0FBUSxLQUZILEVBRVU7QUFDZk0sWUFBTSxLQUhELEVBR1E7QUFDYngwRCxhQUFPLEtBSkYsRUFJUztBQUNkaTJELHFCQUFlLEtBTFYsRUFLaUI7QUFDdEJYLGtCQUFZLEtBTlAsRUFNYztBQUNuQlQsZUFBUyxhQVBKOztBQVNMO0FBQ0FxQixzQkFBZ0I7QUFDZjlELG9CQUFhLGVBREUsRUFDZTtBQUM5QkcsZUFBUSxXQUZPLEVBRU07QUFDckJDLGVBQVEsUUFITyxFQUdHO0FBQ2xCQyxhQUFNLElBSlMsRUFJSDtBQUNaQyxZQUFLLE9BTFUsRUFLRDtBQUNkQyxhQUFNLElBTlMsRUFNSDtBQUNaQyxjQUFPLFVBUFEsRUFPSTtBQUNuQkMsZ0JBQVMsYUFSTSxFQVFTO0FBQ3hCQyxhQUFNLE1BVFMsQ0FTRjtBQVRFO0FBVlgsTUFyQmE7QUEyQ25CcDVDLFlBQU87QUFDTnl0QixnQkFBVSxLQURKOztBQUdOOzs7Ozs7OztBQVFBbmhDLGNBQVEsTUFYRjs7QUFhTndoQyxhQUFPO0FBQ05uVSxnQkFBUztBQURIO0FBYkQ7QUEzQ1ksS0FBcEI7O0FBOERBLFFBQUk4aUMsWUFBWWxnRCxNQUFNYSxNQUFOLENBQWE7QUFDNUJSLGlCQUFZLHNCQUFXO0FBQ3RCLFVBQUksQ0FBQ3c3QyxNQUFMLEVBQWE7QUFDWixhQUFNLElBQUk5ekQsS0FBSixDQUFVLHNJQUFWLENBQU47QUFDQTs7QUFFRCxXQUFLK3hCLGlCQUFMOztBQUVBOVosWUFBTTVULFNBQU4sQ0FBZ0JpVSxVQUFoQixDQUEyQm5ZLElBQTNCLENBQWdDLElBQWhDO0FBQ0EsTUFUMkI7O0FBVzVCdWQsYUFBUSxrQkFBVztBQUNsQixVQUFJTixLQUFLLElBQVQ7QUFDQSxVQUFJbEIsVUFBVWtCLEdBQUdsQixPQUFqQjs7QUFFQTtBQUNBLFVBQUlBLFFBQVFxNUMsSUFBUixJQUFnQnI1QyxRQUFRcTVDLElBQVIsQ0FBYVcsTUFBakMsRUFBeUM7QUFDeEM3dEQsZUFBUSt2RCxJQUFSLENBQWEsd0VBQWI7QUFDQTs7QUFFRCxhQUFPbmdELE1BQU01VCxTQUFOLENBQWdCcVosTUFBaEIsQ0FBdUJKLEtBQXZCLENBQTZCRixFQUE3QixFQUFpQzVZLFNBQWpDLENBQVA7QUFDQSxNQXJCMkI7O0FBdUI1Qjs7O0FBR0FzYyxvQkFBZSx1QkFBU3dzQixRQUFULEVBQW1CO0FBQ2pDLFVBQUlBLFlBQVlBLFNBQVM3dEMsQ0FBVCxLQUFlcUQsU0FBL0IsRUFBMEM7QUFDekN3cUMsa0JBQVdBLFNBQVM3dEMsQ0FBcEI7QUFDQTtBQUNELGFBQU93WSxNQUFNNVQsU0FBTixDQUFnQnljLGFBQWhCLENBQThCM2dCLElBQTlCLENBQW1DLElBQW5DLEVBQXlDbXRDLFFBQXpDLENBQVA7QUFDQSxNQS9CMkI7O0FBaUM1QnhDLDBCQUFxQiwrQkFBVztBQUMvQixVQUFJMXRCLEtBQUssSUFBVDtBQUNBLFVBQUlZLFFBQVFaLEdBQUdZLEtBQWY7QUFDQSxVQUFJbTVDLFdBQVcvNUMsR0FBR2xCLE9BQUgsQ0FBV3E1QyxJQUExQjtBQUNBLFVBQUlpQixPQUFPVyxTQUFTWCxJQUFULElBQWlCLEtBQTVCO0FBQ0EsVUFBSXZ6RCxNQUFNZ3hELFdBQVY7QUFDQSxVQUFJL3dELE1BQU02d0QsV0FBVjtBQUNBLFVBQUlzQixhQUFhLEVBQWpCO0FBQ0EsVUFBSW42QyxXQUFXLEVBQWY7QUFDQSxVQUFJSCxTQUFTLEVBQWI7QUFDQSxVQUFJcGIsQ0FBSixFQUFPK2xCLENBQVAsRUFBVTVKLElBQVYsRUFBZ0IybUIsSUFBaEIsRUFBc0I1bkIsSUFBdEIsRUFBNEJ3OUMsU0FBNUI7O0FBRUE7QUFDQSxXQUFLMTRELElBQUksQ0FBSixFQUFPbWMsT0FBT2tDLE1BQU1uRCxJQUFOLENBQVdFLE1BQVgsQ0FBa0IzYSxNQUFyQyxFQUE2Q1QsSUFBSW1jLElBQWpELEVBQXVELEVBQUVuYyxDQUF6RCxFQUE0RDtBQUMzRG9iLGNBQU95RixJQUFQLENBQVkyMUMsTUFBTW40QyxNQUFNbkQsSUFBTixDQUFXRSxNQUFYLENBQWtCcGIsQ0FBbEIsQ0FBTixFQUE0QnlkLEVBQTVCLENBQVo7QUFDQTs7QUFFRDtBQUNBLFdBQUt6ZCxJQUFJLENBQUosRUFBT21jLE9BQU8sQ0FBQ2tDLE1BQU1uRCxJQUFOLENBQVdLLFFBQVgsSUFBdUIsRUFBeEIsRUFBNEI5YSxNQUEvQyxFQUF1RFQsSUFBSW1jLElBQTNELEVBQWlFLEVBQUVuYyxDQUFuRSxFQUFzRTtBQUNyRSxXQUFJcWUsTUFBTXNDLGdCQUFOLENBQXVCM2dCLENBQXZCLENBQUosRUFBK0I7QUFDOUJrYixlQUFPbUQsTUFBTW5ELElBQU4sQ0FBV0ssUUFBWCxDQUFvQnZiLENBQXBCLEVBQXVCa2IsSUFBOUI7O0FBRUE7QUFDQSxZQUFJdEQsUUFBUXNuQyxRQUFSLENBQWlCaGtDLEtBQUssQ0FBTCxDQUFqQixDQUFKLEVBQStCO0FBQzlCSyxrQkFBU3ZiLENBQVQsSUFBYyxFQUFkOztBQUVBLGNBQUsrbEIsSUFBSSxDQUFKLEVBQU8rYyxPQUFPNW5CLEtBQUt6YSxNQUF4QixFQUFnQ3NsQixJQUFJK2MsSUFBcEMsRUFBMEMsRUFBRS9jLENBQTVDLEVBQStDO0FBQzlDMnlDLHNCQUFZbEMsTUFBTXQ3QyxLQUFLNkssQ0FBTCxDQUFOLEVBQWV0SSxFQUFmLENBQVo7QUFDQWk0QyxxQkFBVzcwQyxJQUFYLENBQWdCNjNDLFNBQWhCO0FBQ0FuOUMsbUJBQVN2YixDQUFULEVBQVkrbEIsQ0FBWixJQUFpQjJ5QyxTQUFqQjtBQUNBO0FBQ0QsU0FSRCxNQVFPO0FBQ05oRCxvQkFBVzcwQyxJQUFYLENBQWdCbEQsS0FBaEIsQ0FBc0IrM0MsVUFBdEIsRUFBa0N0NkMsTUFBbEM7QUFDQUcsa0JBQVN2YixDQUFULElBQWNvYixPQUFPbFosS0FBUCxDQUFhLENBQWIsQ0FBZDtBQUNBO0FBQ0QsUUFoQkQsTUFnQk87QUFDTnFaLGlCQUFTdmIsQ0FBVCxJQUFjLEVBQWQ7QUFDQTtBQUNEOztBQUVELFVBQUlvYixPQUFPM2EsTUFBWCxFQUFtQjtBQUNsQjtBQUNBMmEsZ0JBQVNrNkMsWUFBWWw2QyxNQUFaLEVBQW9Cd29CLElBQXBCLENBQXlCeXhCLE1BQXpCLENBQVQ7QUFDQS94RCxhQUFNbEIsS0FBS2tCLEdBQUwsQ0FBU0EsR0FBVCxFQUFjOFgsT0FBTyxDQUFQLENBQWQsQ0FBTjtBQUNBN1gsYUFBTW5CLEtBQUttQixHQUFMLENBQVNBLEdBQVQsRUFBYzZYLE9BQU9BLE9BQU8zYSxNQUFQLEdBQWdCLENBQXZCLENBQWQsQ0FBTjtBQUNBOztBQUVELFVBQUlpMUQsV0FBV2oxRCxNQUFmLEVBQXVCO0FBQ3RCaTFELG9CQUFhSixZQUFZSSxVQUFaLEVBQXdCOXhCLElBQXhCLENBQTZCeXhCLE1BQTdCLENBQWI7QUFDQS94RCxhQUFNbEIsS0FBS2tCLEdBQUwsQ0FBU0EsR0FBVCxFQUFjb3lELFdBQVcsQ0FBWCxDQUFkLENBQU47QUFDQW55RCxhQUFNbkIsS0FBS21CLEdBQUwsQ0FBU0EsR0FBVCxFQUFjbXlELFdBQVdBLFdBQVdqMUQsTUFBWCxHQUFvQixDQUEvQixDQUFkLENBQU47QUFDQTs7QUFFRDZDLFlBQU1rekQsTUFBTWdCLFNBQVNsMEQsR0FBZixFQUFvQm1hLEVBQXBCLEtBQTJCbmEsR0FBakM7QUFDQUMsWUFBTWl6RCxNQUFNZ0IsU0FBU2owRCxHQUFmLEVBQW9Ca2EsRUFBcEIsS0FBMkJsYSxHQUFqQzs7QUFFQTtBQUNBRCxZQUFNQSxRQUFRZ3hELFdBQVIsR0FBc0IsQ0FBQ0gsU0FBU3VDLE9BQVQsQ0FBaUJHLElBQWpCLENBQXZCLEdBQWdEdnpELEdBQXREO0FBQ0FDLFlBQU1BLFFBQVE2d0QsV0FBUixHQUFzQixDQUFDRCxTQUFTd0UsS0FBVCxDQUFlOUIsSUFBZixDQUFELEdBQXdCLENBQTlDLEdBQWtEdHpELEdBQXhEOztBQUVBO0FBQ0FrYSxTQUFHbmEsR0FBSCxHQUFTbEIsS0FBS2tCLEdBQUwsQ0FBU0EsR0FBVCxFQUFjQyxHQUFkLENBQVQ7QUFDQWthLFNBQUdsYSxHQUFILEdBQVNuQixLQUFLbUIsR0FBTCxDQUFTRCxNQUFNLENBQWYsRUFBa0JDLEdBQWxCLENBQVQ7O0FBRUE7QUFDQWthLFNBQUdtN0MsV0FBSCxHQUFpQm43QyxHQUFHN0IsWUFBSCxFQUFqQjtBQUNBNkIsU0FBR283QyxNQUFILEdBQVksRUFBWjtBQUNBcDdDLFNBQUdxN0MsV0FBSCxHQUFpQjtBQUNoQjU5QyxhQUFNdzZDLFVBRFU7QUFFaEJuNkMsaUJBQVVBLFFBRk07QUFHaEJILGVBQVFBO0FBSFEsT0FBakI7QUFLQSxNQXpHMkI7O0FBMkc1Qmt3QixpQkFBWSxzQkFBVztBQUN0QixVQUFJN3RCLEtBQUssSUFBVDtBQUNBLFVBQUluYSxNQUFNbWEsR0FBR25hLEdBQWI7QUFDQSxVQUFJQyxNQUFNa2EsR0FBR2xhLEdBQWI7QUFDQSxVQUFJZ1osVUFBVWtCLEdBQUdsQixPQUFqQjtBQUNBLFVBQUlpN0MsV0FBV2o3QyxRQUFRcTVDLElBQXZCO0FBQ0EsVUFBSUYsYUFBYSxFQUFqQjtBQUNBLFVBQUkzNUMsUUFBUSxFQUFaO0FBQ0EsVUFBSS9iLENBQUosRUFBT21jLElBQVAsRUFBYXU4QyxTQUFiOztBQUVBLGNBQVFuOEMsUUFBUVIsS0FBUixDQUFjMVQsTUFBdEI7QUFDQSxZQUFLLE1BQUw7QUFDQ3F0RCxxQkFBYWo0QyxHQUFHcTdDLFdBQUgsQ0FBZTU5QyxJQUE1QjtBQUNBO0FBQ0QsWUFBSyxRQUFMO0FBQ0N3NkMscUJBQWFqNEMsR0FBR3E3QyxXQUFILENBQWUxOUMsTUFBNUI7QUFDQTtBQUNELFlBQUssTUFBTDtBQUNBO0FBQ0NzNkMscUJBQWE2QixTQUFTajBELEdBQVQsRUFBY0MsR0FBZCxFQUFtQmthLEdBQUdzN0MsZ0JBQUgsQ0FBb0J6MUQsR0FBcEIsQ0FBbkIsRUFBNkNpWixPQUE3QyxDQUFiO0FBVEQ7O0FBWUEsVUFBSUEsUUFBUTBoQyxNQUFSLEtBQW1CLE9BQW5CLElBQThCeVgsV0FBV2oxRCxNQUE3QyxFQUFxRDtBQUNwRDZDLGFBQU1veUQsV0FBVyxDQUFYLENBQU47QUFDQW55RCxhQUFNbXlELFdBQVdBLFdBQVdqMUQsTUFBWCxHQUFvQixDQUEvQixDQUFOO0FBQ0E7O0FBRUQ7QUFDQTZDLFlBQU1rekQsTUFBTWdCLFNBQVNsMEQsR0FBZixFQUFvQm1hLEVBQXBCLEtBQTJCbmEsR0FBakM7QUFDQUMsWUFBTWl6RCxNQUFNZ0IsU0FBU2owRCxHQUFmLEVBQW9Ca2EsRUFBcEIsS0FBMkJsYSxHQUFqQzs7QUFFQTtBQUNBLFdBQUt2RCxJQUFJLENBQUosRUFBT21jLE9BQU91NUMsV0FBV2oxRCxNQUE5QixFQUFzQ1QsSUFBSW1jLElBQTFDLEVBQWdELEVBQUVuYyxDQUFsRCxFQUFxRDtBQUNwRDA0RCxtQkFBWWhELFdBQVcxMUQsQ0FBWCxDQUFaO0FBQ0EsV0FBSTA0RCxhQUFhcDFELEdBQWIsSUFBb0JvMUQsYUFBYW4xRCxHQUFyQyxFQUEwQztBQUN6Q3dZLGNBQU04RSxJQUFOLENBQVc2M0MsU0FBWDtBQUNBO0FBQ0Q7O0FBRURqN0MsU0FBR25hLEdBQUgsR0FBU0EsR0FBVDtBQUNBbWEsU0FBR2xhLEdBQUgsR0FBU0EsR0FBVDs7QUFFQTtBQUNBa2EsU0FBR3U3QyxLQUFILEdBQVd4QixTQUFTWCxJQUFULElBQWlCTSwyQkFBMkJwN0MsS0FBM0IsRUFBa0N5N0MsU0FBU04sT0FBM0MsRUFBb0R6NUMsR0FBR25hLEdBQXZELEVBQTREbWEsR0FBR2xhLEdBQS9ELENBQTVCO0FBQ0FrYSxTQUFHdzdDLFVBQUgsR0FBZ0IzQixtQkFBbUI3NUMsR0FBR3U3QyxLQUF0QixDQUFoQjtBQUNBdjdDLFNBQUdvN0MsTUFBSCxHQUFZcEQsaUJBQWlCaDRDLEdBQUdxN0MsV0FBSCxDQUFlNTlDLElBQWhDLEVBQXNDNVgsR0FBdEMsRUFBMkNDLEdBQTNDLEVBQWdEZ1osUUFBUW81QyxZQUF4RCxDQUFaO0FBQ0FsNEMsU0FBR3k3QyxRQUFILEdBQWNwQixlQUFlcjZDLEdBQUdvN0MsTUFBbEIsRUFBMEI5OEMsS0FBMUIsRUFBaUN6WSxHQUFqQyxFQUFzQ0MsR0FBdEMsRUFBMkNnWixPQUEzQyxDQUFkO0FBQ0FrQixTQUFHMDdDLFlBQUgsR0FBa0JoQixxQkFBcUIxNkMsR0FBR3E3QyxXQUFILENBQWU1OUMsSUFBcEMsRUFBMENzOEMsUUFBMUMsQ0FBbEI7O0FBRUEsYUFBT1Msb0JBQW9CbDhDLEtBQXBCLEVBQTJCMEIsR0FBR3c3QyxVQUE5QixDQUFQO0FBQ0EsTUE3SjJCOztBQStKNUJyckIsdUJBQWtCLDBCQUFTdGtDLEtBQVQsRUFBZ0JrUyxZQUFoQixFQUE4QjtBQUMvQyxVQUFJaUMsS0FBSyxJQUFUO0FBQ0EsVUFBSXZDLE9BQU91QyxHQUFHWSxLQUFILENBQVNuRCxJQUFwQjtBQUNBLFVBQUlzOEMsV0FBVy81QyxHQUFHbEIsT0FBSCxDQUFXcTVDLElBQTFCO0FBQ0EsVUFBSXY2QyxRQUFRSCxLQUFLRSxNQUFMLElBQWU5UixRQUFRNFIsS0FBS0UsTUFBTCxDQUFZM2EsTUFBbkMsR0FBNEN5YSxLQUFLRSxNQUFMLENBQVk5UixLQUFaLENBQTVDLEdBQWlFLEVBQTdFO0FBQ0EsVUFBSS9FLFFBQVEyVyxLQUFLSyxRQUFMLENBQWNDLFlBQWQsRUFBNEJOLElBQTVCLENBQWlDNVIsS0FBakMsQ0FBWjs7QUFFQSxVQUFJc08sUUFBUXNuQyxRQUFSLENBQWlCMzZDLEtBQWpCLENBQUosRUFBNkI7QUFDNUI4VyxlQUFRb0MsR0FBRzBELGFBQUgsQ0FBaUI1YyxLQUFqQixDQUFSO0FBQ0E7QUFDRCxVQUFJaXpELFNBQVM0QixhQUFiLEVBQTRCO0FBQzNCLGNBQU8vQyxVQUFVaDdDLEtBQVYsRUFBaUJtOEMsUUFBakIsRUFBMkJqQixNQUEzQixDQUFrQ2lCLFNBQVM0QixhQUEzQyxDQUFQO0FBQ0E7QUFDRCxVQUFJLE9BQU8vOUMsS0FBUCxLQUFpQixRQUFyQixFQUErQjtBQUM5QixjQUFPQSxLQUFQO0FBQ0E7O0FBRUQsYUFBT2c3QyxVQUFVaDdDLEtBQVYsRUFBaUJtOEMsUUFBakIsRUFBMkJqQixNQUEzQixDQUFrQzk0QyxHQUFHMDdDLFlBQXJDLENBQVA7QUFDQSxNQWpMMkI7O0FBbUw1Qjs7OztBQUlBRSx5QkFBb0IsNEJBQVNudkIsSUFBVCxFQUFlNWdDLEtBQWYsRUFBc0J5UyxLQUF0QixFQUE2QnU5QyxjQUE3QixFQUE2QztBQUNoRSxVQUFJNzdDLEtBQUssSUFBVDtBQUNBLFVBQUlsQixVQUFVa0IsR0FBR2xCLE9BQWpCO0FBQ0EsVUFBSXE1QyxPQUFPMXJCLEtBQUt5c0IsT0FBTCxFQUFYO0FBQ0EsVUFBSTRDLFVBQVVoOUMsUUFBUXE1QyxJQUFSLENBQWEyQyxjQUEzQjtBQUNBLFVBQUlpQixjQUFjRCxRQUFROTdDLEdBQUd1N0MsS0FBWCxDQUFsQjtBQUNBLFVBQUlkLFlBQVl6NkMsR0FBR3c3QyxVQUFuQjtBQUNBLFVBQUlRLGNBQWNGLFFBQVFyQixTQUFSLENBQWxCO0FBQ0EsVUFBSXdCLFlBQVl4dkIsS0FBSy9oQyxLQUFMLEdBQWF1dUQsT0FBYixDQUFxQndCLFNBQXJCLEVBQWdDdkIsT0FBaEMsRUFBaEI7QUFDQSxVQUFJZ0QsZ0JBQWdCcDlDLFFBQVFSLEtBQVIsQ0FBYzh0QixLQUFsQztBQUNBLFVBQUlBLFFBQVE4dkIsY0FBY2prQyxPQUFkLElBQXlCd2lDLFNBQXpCLElBQXNDdUIsV0FBdEMsSUFBcUQ3RCxTQUFTOEQsU0FBMUU7QUFDQSxVQUFJcitDLFFBQVE2dUIsS0FBS3FzQixNQUFMLENBQVkrQyxpQkFBaUJBLGNBQWpCLEdBQWtDenZCLFFBQVE0dkIsV0FBUixHQUFzQkQsV0FBcEUsQ0FBWjtBQUNBLFVBQUl0dEIsV0FBV3JDLFFBQVE4dkIsYUFBUixHQUF3QnA5QyxRQUFRUixLQUFSLENBQWM2dEIsS0FBckQ7QUFDQSxVQUFJZ3dCLFlBQVloaUQsUUFBUThKLGNBQVIsQ0FBdUJ3cUIsU0FBUy9jLFFBQWhDLEVBQTBDK2MsU0FBU0MsWUFBbkQsQ0FBaEI7O0FBRUEsYUFBT3l0QixZQUFZQSxVQUFVditDLEtBQVYsRUFBaUIvUixLQUFqQixFQUF3QnlTLEtBQXhCLENBQVosR0FBNkNWLEtBQXBEO0FBQ0EsTUF2TTJCOztBQXlNNUJvd0IsMkJBQXNCLDhCQUFTMXZCLEtBQVQsRUFBZ0I7QUFDckMsVUFBSVgsU0FBUyxFQUFiO0FBQ0EsVUFBSXBiLENBQUosRUFBT21jLElBQVA7O0FBRUEsV0FBS25jLElBQUksQ0FBSixFQUFPbWMsT0FBT0osTUFBTXRiLE1BQXpCLEVBQWlDVCxJQUFJbWMsSUFBckMsRUFBMkMsRUFBRW5jLENBQTdDLEVBQWdEO0FBQy9Db2IsY0FBT3lGLElBQVAsQ0FBWSxLQUFLdzRDLGtCQUFMLENBQXdCbEYsT0FBT3A0QyxNQUFNL2IsQ0FBTixFQUFTdUUsS0FBaEIsQ0FBeEIsRUFBZ0R2RSxDQUFoRCxFQUFtRCtiLEtBQW5ELENBQVo7QUFDQTs7QUFFRCxhQUFPWCxNQUFQO0FBQ0EsTUFsTjJCOztBQW9ONUI7OztBQUdBeStDLHdCQUFtQiwyQkFBU2pFLElBQVQsRUFBZTtBQUNqQyxVQUFJbjRDLEtBQUssSUFBVDtBQUNBLFVBQUliLE9BQU9hLEdBQUdtN0MsV0FBSCxHQUFpQm43QyxHQUFHNUIsS0FBcEIsR0FBNEI0QixHQUFHM0IsTUFBMUM7QUFDQSxVQUFJaUIsUUFBUVUsR0FBR203QyxXQUFILEdBQWlCbjdDLEdBQUd1RCxJQUFwQixHQUEyQnZELEdBQUd3RCxHQUExQztBQUNBLFVBQUlzMEIsTUFBTWpkLFlBQVk3YSxHQUFHbzdDLE1BQWYsRUFBdUIsTUFBdkIsRUFBK0JqRCxJQUEvQixFQUFxQyxLQUFyQyxDQUFWOztBQUVBLGFBQU83NEMsUUFBUUgsUUFBUWEsR0FBR3k3QyxRQUFILENBQVlsNEMsSUFBWixHQUFtQnUwQixHQUEzQixLQUFtQzkzQixHQUFHeTdDLFFBQUgsQ0FBWWw0QyxJQUFaLEdBQW1CLENBQW5CLEdBQXVCdkQsR0FBR3k3QyxRQUFILENBQVloekMsS0FBdEUsQ0FBZjtBQUNBLE1BOU4yQjs7QUFnTzVCaEYsdUJBQWtCLDBCQUFTM2MsS0FBVCxFQUFnQitFLEtBQWhCLEVBQXVCa1MsWUFBdkIsRUFBcUM7QUFDdEQsVUFBSWlDLEtBQUssSUFBVDtBQUNBLFVBQUltNEMsT0FBTyxJQUFYOztBQUVBLFVBQUl0c0QsVUFBVW5HLFNBQVYsSUFBdUJxWSxpQkFBaUJyWSxTQUE1QyxFQUF1RDtBQUN0RHl5RCxjQUFPbjRDLEdBQUdxN0MsV0FBSCxDQUFldjlDLFFBQWYsQ0FBd0JDLFlBQXhCLEVBQXNDbFMsS0FBdEMsQ0FBUDtBQUNBOztBQUVELFVBQUlzc0QsU0FBUyxJQUFiLEVBQW1CO0FBQ2xCQSxjQUFPWSxNQUFNanlELEtBQU4sRUFBYWtaLEVBQWIsQ0FBUDtBQUNBOztBQUVELFVBQUltNEMsU0FBUyxJQUFiLEVBQW1CO0FBQ2xCLGNBQU9uNEMsR0FBR284QyxpQkFBSCxDQUFxQmpFLElBQXJCLENBQVA7QUFDQTtBQUNELE1BL08yQjs7QUFpUDVCeDVDLHNCQUFpQix5QkFBUzlTLEtBQVQsRUFBZ0I7QUFDaEMsVUFBSXlTLFFBQVEsS0FBS0MsUUFBTCxFQUFaO0FBQ0EsYUFBTzFTLFNBQVMsQ0FBVCxJQUFjQSxRQUFReVMsTUFBTXRiLE1BQTVCLEdBQ04sS0FBS281RCxpQkFBTCxDQUF1Qjk5QyxNQUFNelMsS0FBTixFQUFhL0UsS0FBcEMsQ0FETSxHQUVOLElBRkQ7QUFHQSxNQXRQMkI7O0FBd1A1QnNwQyx1QkFBa0IsMEJBQVNFLEtBQVQsRUFBZ0I7QUFDakMsVUFBSXR3QixLQUFLLElBQVQ7QUFDQSxVQUFJYixPQUFPYSxHQUFHbTdDLFdBQUgsR0FBaUJuN0MsR0FBRzVCLEtBQXBCLEdBQTRCNEIsR0FBRzNCLE1BQTFDO0FBQ0EsVUFBSWlCLFFBQVFVLEdBQUdtN0MsV0FBSCxHQUFpQm43QyxHQUFHdUQsSUFBcEIsR0FBMkJ2RCxHQUFHd0QsR0FBMUM7QUFDQSxVQUFJczBCLE1BQU0sQ0FBQzM0QixPQUFPLENBQUNteEIsUUFBUWh4QixLQUFULElBQWtCSCxJQUF6QixHQUFnQyxDQUFqQyxLQUF1Q2EsR0FBR3k3QyxRQUFILENBQVlsNEMsSUFBWixHQUFtQixDQUFuQixHQUF1QnZELEdBQUd5N0MsUUFBSCxDQUFZbDRDLElBQTFFLElBQWtGdkQsR0FBR3k3QyxRQUFILENBQVloekMsS0FBeEc7QUFDQSxVQUFJMHZDLE9BQU90OUIsWUFBWTdhLEdBQUdvN0MsTUFBZixFQUF1QixLQUF2QixFQUE4QnRqQixHQUE5QixFQUFtQyxNQUFuQyxDQUFYOztBQUVBLGFBQU80ZSxPQUFPeUIsSUFBUCxDQUFQO0FBQ0EsTUFoUTJCOztBQWtRNUI7Ozs7QUFJQWtFLG9CQUFlLHVCQUFTeitDLEtBQVQsRUFBZ0I7QUFDOUIsVUFBSW9DLEtBQUssSUFBVDtBQUNBLFVBQUlzOEMsWUFBWXQ4QyxHQUFHbEIsT0FBSCxDQUFXUixLQUEzQjtBQUNBLFVBQUlpK0MsaUJBQWlCdjhDLEdBQUdzRSxHQUFILENBQU9tZ0IsV0FBUCxDQUFtQjdtQixLQUFuQixFQUEwQlEsS0FBL0M7QUFDQSxVQUFJc1EsUUFBUXZVLFFBQVFvakIsU0FBUixDQUFrQisrQixVQUFVendCLFdBQTVCLENBQVo7QUFDQSxVQUFJa0QsY0FBY3BxQyxLQUFLMkwsR0FBTCxDQUFTb2UsS0FBVCxDQUFsQjtBQUNBLFVBQUlzZ0IsY0FBY3JxQyxLQUFLNEwsR0FBTCxDQUFTbWUsS0FBVCxDQUFsQjtBQUNBLFVBQUlvaUMsZUFBZTMyQyxRQUFROEosY0FBUixDQUF1QnE0QyxVQUFVMXZCLFFBQWpDLEVBQTJDdHlCLFNBQVN2WSxNQUFULENBQWdCOGtDLGVBQTNELENBQW5COztBQUVBLGFBQVEwMUIsaUJBQWlCeHRCLFdBQWxCLEdBQWtDK2hCLGVBQWU5aEIsV0FBeEQ7QUFDQSxNQWhSMkI7O0FBa1I1Qjs7O0FBR0Fzc0IsdUJBQWtCLDBCQUFTa0IsV0FBVCxFQUFzQjtBQUN2QyxVQUFJeDhDLEtBQUssSUFBVDs7QUFFQSxVQUFJNjdDLGlCQUFpQjc3QyxHQUFHbEIsT0FBSCxDQUFXcTVDLElBQVgsQ0FBZ0IyQyxjQUFoQixDQUErQjlELFdBQXBELENBSHVDLENBRzBCOztBQUVqRSxVQUFJeUYsZUFBZXo4QyxHQUFHNDdDLGtCQUFILENBQXNCbEYsT0FBTzhGLFdBQVAsQ0FBdEIsRUFBMkMsQ0FBM0MsRUFBOEMsRUFBOUMsRUFBa0RYLGNBQWxELENBQW5CO0FBQ0EsVUFBSVUsaUJBQWlCdjhDLEdBQUdxOEMsYUFBSCxDQUFpQkksWUFBakIsQ0FBckI7QUFDQSxVQUFJcHNCLGFBQWFyd0IsR0FBRzdCLFlBQUgsS0FBb0I2QixHQUFHNUIsS0FBdkIsR0FBK0I0QixHQUFHM0IsTUFBbkQ7O0FBRUEsVUFBSWc3QyxXQUFXMTBELEtBQUsrSyxLQUFMLENBQVcyZ0MsYUFBYWtzQixjQUF4QixDQUFmO0FBQ0EsYUFBT2xELFdBQVcsQ0FBWCxHQUFlQSxRQUFmLEdBQTBCLENBQWpDO0FBQ0E7QUFoUzJCLEtBQWIsQ0FBaEI7O0FBbVNBditDLGlCQUFhMjVCLGlCQUFiLENBQStCLE1BQS9CLEVBQXVDc21CLFNBQXZDLEVBQWtEaE0sYUFBbEQ7QUFDQSxJQXBXRDtBQXNXQyxHQW54QnVDLEVBbXhCdEMsRUFBQyxLQUFJLENBQUwsRUFBTyxNQUFLLEVBQVosRUFBZSxNQUFLLEVBQXBCLEVBQXVCLE1BQUssRUFBNUIsRUFBK0IsTUFBSyxFQUFwQyxFQW54QnNDLENBMTFhaXhCLEVBQTVjLEVBNm1jalUsRUE3bWNpVSxFQTZtYzlULENBQUMsQ0FBRCxDQTdtYzhULEVBNm1jelQsQ0E3bWN5VCxDQUFQO0FBOG1jclcsQ0E5bWNEIiwiZmlsZSI6IjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcclxuICogQ2hhcnQuanNcclxuICogaHR0cDovL2NoYXJ0anMub3JnL1xyXG4gKiBWZXJzaW9uOiAyLjcuM1xyXG4gKlxyXG4gKiBDb3B5cmlnaHQgMjAxOCBDaGFydC5qcyBDb250cmlidXRvcnNcclxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWRcclxuICovXHJcbihmdW5jdGlvbihmKXtpZih0eXBlb2YgZXhwb3J0cz09PVwib2JqZWN0XCImJnR5cGVvZiBtb2R1bGUhPT1cInVuZGVmaW5lZFwiKXttb2R1bGUuZXhwb3J0cz1mKCl9ZWxzZSBpZih0eXBlb2YgZGVmaW5lPT09XCJmdW5jdGlvblwiJiZkZWZpbmUuYW1kKXtkZWZpbmUoW10sZil9ZWxzZXt2YXIgZztpZih0eXBlb2Ygd2luZG93IT09XCJ1bmRlZmluZWRcIil7Zz13aW5kb3d9ZWxzZSBpZih0eXBlb2YgZ2xvYmFsIT09XCJ1bmRlZmluZWRcIil7Zz1nbG9iYWx9ZWxzZSBpZih0eXBlb2Ygc2VsZiE9PVwidW5kZWZpbmVkXCIpe2c9c2VsZn1lbHNle2c9dGhpc31nLkNoYXJ0ID0gZigpfX0pKGZ1bmN0aW9uKCl7dmFyIGRlZmluZSxtb2R1bGUsZXhwb3J0cztyZXR1cm4gKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSh7MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcblxyXG59LHt9XSwyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuLyogTUlUIGxpY2Vuc2UgKi9cclxudmFyIGNvbG9yTmFtZXMgPSByZXF1aXJlKDYpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgIGdldFJnYmE6IGdldFJnYmEsXHJcbiAgIGdldEhzbGE6IGdldEhzbGEsXHJcbiAgIGdldFJnYjogZ2V0UmdiLFxyXG4gICBnZXRIc2w6IGdldEhzbCxcclxuICAgZ2V0SHdiOiBnZXRId2IsXHJcbiAgIGdldEFscGhhOiBnZXRBbHBoYSxcclxuXHJcbiAgIGhleFN0cmluZzogaGV4U3RyaW5nLFxyXG4gICByZ2JTdHJpbmc6IHJnYlN0cmluZyxcclxuICAgcmdiYVN0cmluZzogcmdiYVN0cmluZyxcclxuICAgcGVyY2VudFN0cmluZzogcGVyY2VudFN0cmluZyxcclxuICAgcGVyY2VudGFTdHJpbmc6IHBlcmNlbnRhU3RyaW5nLFxyXG4gICBoc2xTdHJpbmc6IGhzbFN0cmluZyxcclxuICAgaHNsYVN0cmluZzogaHNsYVN0cmluZyxcclxuICAgaHdiU3RyaW5nOiBod2JTdHJpbmcsXHJcbiAgIGtleXdvcmQ6IGtleXdvcmRcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UmdiYShzdHJpbmcpIHtcclxuICAgaWYgKCFzdHJpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICB9XHJcbiAgIHZhciBhYmJyID0gIC9eIyhbYS1mQS1GMC05XXszfSkkL2ksXHJcbiAgICAgICBoZXggPSAgL14jKFthLWZBLUYwLTldezZ9KSQvaSxcclxuICAgICAgIHJnYmEgPSAvXnJnYmE/XFwoXFxzKihbKy1dP1xcZCspXFxzKixcXHMqKFsrLV0/XFxkKylcXHMqLFxccyooWystXT9cXGQrKVxccyooPzosXFxzKihbKy1dP1tcXGRcXC5dKylcXHMqKT9cXCkkL2ksXHJcbiAgICAgICBwZXIgPSAvXnJnYmE/XFwoXFxzKihbKy1dP1tcXGRcXC5dKylcXCVcXHMqLFxccyooWystXT9bXFxkXFwuXSspXFwlXFxzKixcXHMqKFsrLV0/W1xcZFxcLl0rKVxcJVxccyooPzosXFxzKihbKy1dP1tcXGRcXC5dKylcXHMqKT9cXCkkL2ksXHJcbiAgICAgICBrZXl3b3JkID0gLyhcXHcrKS87XHJcblxyXG4gICB2YXIgcmdiID0gWzAsIDAsIDBdLFxyXG4gICAgICAgYSA9IDEsXHJcbiAgICAgICBtYXRjaCA9IHN0cmluZy5tYXRjaChhYmJyKTtcclxuICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgIG1hdGNoID0gbWF0Y2hbMV07XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmdiLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgIHJnYltpXSA9IHBhcnNlSW50KG1hdGNoW2ldICsgbWF0Y2hbaV0sIDE2KTtcclxuICAgICAgfVxyXG4gICB9XHJcbiAgIGVsc2UgaWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKGhleCkpIHtcclxuICAgICAgbWF0Y2ggPSBtYXRjaFsxXTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZ2IubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgcmdiW2ldID0gcGFyc2VJbnQobWF0Y2guc2xpY2UoaSAqIDIsIGkgKiAyICsgMiksIDE2KTtcclxuICAgICAgfVxyXG4gICB9XHJcbiAgIGVsc2UgaWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKHJnYmEpKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmdiLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgIHJnYltpXSA9IHBhcnNlSW50KG1hdGNoW2kgKyAxXSk7XHJcbiAgICAgIH1cclxuICAgICAgYSA9IHBhcnNlRmxvYXQobWF0Y2hbNF0pO1xyXG4gICB9XHJcbiAgIGVsc2UgaWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKHBlcikpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZ2IubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgcmdiW2ldID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KG1hdGNoW2kgKyAxXSkgKiAyLjU1KTtcclxuICAgICAgfVxyXG4gICAgICBhID0gcGFyc2VGbG9hdChtYXRjaFs0XSk7XHJcbiAgIH1cclxuICAgZWxzZSBpZiAobWF0Y2ggPSBzdHJpbmcubWF0Y2goa2V5d29yZCkpIHtcclxuICAgICAgaWYgKG1hdGNoWzFdID09IFwidHJhbnNwYXJlbnRcIikge1xyXG4gICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xyXG4gICAgICB9XHJcbiAgICAgIHJnYiA9IGNvbG9yTmFtZXNbbWF0Y2hbMV1dO1xyXG4gICAgICBpZiAoIXJnYikge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZ2IubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcmdiW2ldID0gc2NhbGUocmdiW2ldLCAwLCAyNTUpO1xyXG4gICB9XHJcbiAgIGlmICghYSAmJiBhICE9IDApIHtcclxuICAgICAgYSA9IDE7XHJcbiAgIH1cclxuICAgZWxzZSB7XHJcbiAgICAgIGEgPSBzY2FsZShhLCAwLCAxKTtcclxuICAgfVxyXG4gICByZ2JbM10gPSBhO1xyXG4gICByZXR1cm4gcmdiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRIc2xhKHN0cmluZykge1xyXG4gICBpZiAoIXN0cmluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgIH1cclxuICAgdmFyIGhzbCA9IC9eaHNsYT9cXChcXHMqKFsrLV0/XFxkKykoPzpkZWcpP1xccyosXFxzKihbKy1dP1tcXGRcXC5dKyklXFxzKixcXHMqKFsrLV0/W1xcZFxcLl0rKSVcXHMqKD86LFxccyooWystXT9bXFxkXFwuXSspXFxzKik/XFwpLztcclxuICAgdmFyIG1hdGNoID0gc3RyaW5nLm1hdGNoKGhzbCk7XHJcbiAgIGlmIChtYXRjaCkge1xyXG4gICAgICB2YXIgYWxwaGEgPSBwYXJzZUZsb2F0KG1hdGNoWzRdKTtcclxuICAgICAgdmFyIGggPSBzY2FsZShwYXJzZUludChtYXRjaFsxXSksIDAsIDM2MCksXHJcbiAgICAgICAgICBzID0gc2NhbGUocGFyc2VGbG9hdChtYXRjaFsyXSksIDAsIDEwMCksXHJcbiAgICAgICAgICBsID0gc2NhbGUocGFyc2VGbG9hdChtYXRjaFszXSksIDAsIDEwMCksXHJcbiAgICAgICAgICBhID0gc2NhbGUoaXNOYU4oYWxwaGEpID8gMSA6IGFscGhhLCAwLCAxKTtcclxuICAgICAgcmV0dXJuIFtoLCBzLCBsLCBhXTtcclxuICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRId2Ioc3RyaW5nKSB7XHJcbiAgIGlmICghc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgfVxyXG4gICB2YXIgaHdiID0gL15od2JcXChcXHMqKFsrLV0/XFxkKykoPzpkZWcpP1xccyosXFxzKihbKy1dP1tcXGRcXC5dKyklXFxzKixcXHMqKFsrLV0/W1xcZFxcLl0rKSVcXHMqKD86LFxccyooWystXT9bXFxkXFwuXSspXFxzKik/XFwpLztcclxuICAgdmFyIG1hdGNoID0gc3RyaW5nLm1hdGNoKGh3Yik7XHJcbiAgIGlmIChtYXRjaCkge1xyXG4gICAgdmFyIGFscGhhID0gcGFyc2VGbG9hdChtYXRjaFs0XSk7XHJcbiAgICAgIHZhciBoID0gc2NhbGUocGFyc2VJbnQobWF0Y2hbMV0pLCAwLCAzNjApLFxyXG4gICAgICAgICAgdyA9IHNjYWxlKHBhcnNlRmxvYXQobWF0Y2hbMl0pLCAwLCAxMDApLFxyXG4gICAgICAgICAgYiA9IHNjYWxlKHBhcnNlRmxvYXQobWF0Y2hbM10pLCAwLCAxMDApLFxyXG4gICAgICAgICAgYSA9IHNjYWxlKGlzTmFOKGFscGhhKSA/IDEgOiBhbHBoYSwgMCwgMSk7XHJcbiAgICAgIHJldHVybiBbaCwgdywgYiwgYV07XHJcbiAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UmdiKHN0cmluZykge1xyXG4gICB2YXIgcmdiYSA9IGdldFJnYmEoc3RyaW5nKTtcclxuICAgcmV0dXJuIHJnYmEgJiYgcmdiYS5zbGljZSgwLCAzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0SHNsKHN0cmluZykge1xyXG4gIHZhciBoc2xhID0gZ2V0SHNsYShzdHJpbmcpO1xyXG4gIHJldHVybiBoc2xhICYmIGhzbGEuc2xpY2UoMCwgMyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFscGhhKHN0cmluZykge1xyXG4gICB2YXIgdmFscyA9IGdldFJnYmEoc3RyaW5nKTtcclxuICAgaWYgKHZhbHMpIHtcclxuICAgICAgcmV0dXJuIHZhbHNbM107XHJcbiAgIH1cclxuICAgZWxzZSBpZiAodmFscyA9IGdldEhzbGEoc3RyaW5nKSkge1xyXG4gICAgICByZXR1cm4gdmFsc1szXTtcclxuICAgfVxyXG4gICBlbHNlIGlmICh2YWxzID0gZ2V0SHdiKHN0cmluZykpIHtcclxuICAgICAgcmV0dXJuIHZhbHNbM107XHJcbiAgIH1cclxufVxyXG5cclxuLy8gZ2VuZXJhdG9yc1xyXG5mdW5jdGlvbiBoZXhTdHJpbmcocmdiKSB7XHJcbiAgIHJldHVybiBcIiNcIiArIGhleERvdWJsZShyZ2JbMF0pICsgaGV4RG91YmxlKHJnYlsxXSlcclxuICAgICAgICAgICAgICArIGhleERvdWJsZShyZ2JbMl0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZ2JTdHJpbmcocmdiYSwgYWxwaGEpIHtcclxuICAgaWYgKGFscGhhIDwgMSB8fCAocmdiYVszXSAmJiByZ2JhWzNdIDwgMSkpIHtcclxuICAgICAgcmV0dXJuIHJnYmFTdHJpbmcocmdiYSwgYWxwaGEpO1xyXG4gICB9XHJcbiAgIHJldHVybiBcInJnYihcIiArIHJnYmFbMF0gKyBcIiwgXCIgKyByZ2JhWzFdICsgXCIsIFwiICsgcmdiYVsyXSArIFwiKVwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZ2JhU3RyaW5nKHJnYmEsIGFscGhhKSB7XHJcbiAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGFscGhhID0gKHJnYmFbM10gIT09IHVuZGVmaW5lZCA/IHJnYmFbM10gOiAxKTtcclxuICAgfVxyXG4gICByZXR1cm4gXCJyZ2JhKFwiICsgcmdiYVswXSArIFwiLCBcIiArIHJnYmFbMV0gKyBcIiwgXCIgKyByZ2JhWzJdXHJcbiAgICAgICAgICAgKyBcIiwgXCIgKyBhbHBoYSArIFwiKVwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwZXJjZW50U3RyaW5nKHJnYmEsIGFscGhhKSB7XHJcbiAgIGlmIChhbHBoYSA8IDEgfHwgKHJnYmFbM10gJiYgcmdiYVszXSA8IDEpKSB7XHJcbiAgICAgIHJldHVybiBwZXJjZW50YVN0cmluZyhyZ2JhLCBhbHBoYSk7XHJcbiAgIH1cclxuICAgdmFyIHIgPSBNYXRoLnJvdW5kKHJnYmFbMF0vMjU1ICogMTAwKSxcclxuICAgICAgIGcgPSBNYXRoLnJvdW5kKHJnYmFbMV0vMjU1ICogMTAwKSxcclxuICAgICAgIGIgPSBNYXRoLnJvdW5kKHJnYmFbMl0vMjU1ICogMTAwKTtcclxuXHJcbiAgIHJldHVybiBcInJnYihcIiArIHIgKyBcIiUsIFwiICsgZyArIFwiJSwgXCIgKyBiICsgXCIlKVwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwZXJjZW50YVN0cmluZyhyZ2JhLCBhbHBoYSkge1xyXG4gICB2YXIgciA9IE1hdGgucm91bmQocmdiYVswXS8yNTUgKiAxMDApLFxyXG4gICAgICAgZyA9IE1hdGgucm91bmQocmdiYVsxXS8yNTUgKiAxMDApLFxyXG4gICAgICAgYiA9IE1hdGgucm91bmQocmdiYVsyXS8yNTUgKiAxMDApO1xyXG4gICByZXR1cm4gXCJyZ2JhKFwiICsgciArIFwiJSwgXCIgKyBnICsgXCIlLCBcIiArIGIgKyBcIiUsIFwiICsgKGFscGhhIHx8IHJnYmFbM10gfHwgMSkgKyBcIilcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaHNsU3RyaW5nKGhzbGEsIGFscGhhKSB7XHJcbiAgIGlmIChhbHBoYSA8IDEgfHwgKGhzbGFbM10gJiYgaHNsYVszXSA8IDEpKSB7XHJcbiAgICAgIHJldHVybiBoc2xhU3RyaW5nKGhzbGEsIGFscGhhKTtcclxuICAgfVxyXG4gICByZXR1cm4gXCJoc2woXCIgKyBoc2xhWzBdICsgXCIsIFwiICsgaHNsYVsxXSArIFwiJSwgXCIgKyBoc2xhWzJdICsgXCIlKVwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoc2xhU3RyaW5nKGhzbGEsIGFscGhhKSB7XHJcbiAgIGlmIChhbHBoYSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGFscGhhID0gKGhzbGFbM10gIT09IHVuZGVmaW5lZCA/IGhzbGFbM10gOiAxKTtcclxuICAgfVxyXG4gICByZXR1cm4gXCJoc2xhKFwiICsgaHNsYVswXSArIFwiLCBcIiArIGhzbGFbMV0gKyBcIiUsIFwiICsgaHNsYVsyXSArIFwiJSwgXCJcclxuICAgICAgICAgICArIGFscGhhICsgXCIpXCI7XHJcbn1cclxuXHJcbi8vIGh3YiBpcyBhIGJpdCBkaWZmZXJlbnQgdGhhbiByZ2IoYSkgJiBoc2woYSkgc2luY2UgdGhlcmUgaXMgbm8gYWxwaGEgc3BlY2lmaWMgc3ludGF4XHJcbi8vIChod2IgaGF2ZSBhbHBoYSBvcHRpb25hbCAmIDEgaXMgZGVmYXVsdCB2YWx1ZSlcclxuZnVuY3Rpb24gaHdiU3RyaW5nKGh3YiwgYWxwaGEpIHtcclxuICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgYWxwaGEgPSAoaHdiWzNdICE9PSB1bmRlZmluZWQgPyBod2JbM10gOiAxKTtcclxuICAgfVxyXG4gICByZXR1cm4gXCJod2IoXCIgKyBod2JbMF0gKyBcIiwgXCIgKyBod2JbMV0gKyBcIiUsIFwiICsgaHdiWzJdICsgXCIlXCJcclxuICAgICAgICAgICArIChhbHBoYSAhPT0gdW5kZWZpbmVkICYmIGFscGhhICE9PSAxID8gXCIsIFwiICsgYWxwaGEgOiBcIlwiKSArIFwiKVwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBrZXl3b3JkKHJnYikge1xyXG4gIHJldHVybiByZXZlcnNlTmFtZXNbcmdiLnNsaWNlKDAsIDMpXTtcclxufVxyXG5cclxuLy8gaGVscGVyc1xyXG5mdW5jdGlvbiBzY2FsZShudW0sIG1pbiwgbWF4KSB7XHJcbiAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChtaW4sIG51bSksIG1heCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhleERvdWJsZShudW0pIHtcclxuICB2YXIgc3RyID0gbnVtLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gIHJldHVybiAoc3RyLmxlbmd0aCA8IDIpID8gXCIwXCIgKyBzdHIgOiBzdHI7XHJcbn1cclxuXHJcblxyXG4vL2NyZWF0ZSBhIGxpc3Qgb2YgcmV2ZXJzZSBjb2xvciBuYW1lc1xyXG52YXIgcmV2ZXJzZU5hbWVzID0ge307XHJcbmZvciAodmFyIG5hbWUgaW4gY29sb3JOYW1lcykge1xyXG4gICByZXZlcnNlTmFtZXNbY29sb3JOYW1lc1tuYW1lXV0gPSBuYW1lO1xyXG59XHJcblxyXG59LHtcIjZcIjo2fV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbi8qIE1JVCBsaWNlbnNlICovXHJcbnZhciBjb252ZXJ0ID0gcmVxdWlyZSg1KTtcclxudmFyIHN0cmluZyA9IHJlcXVpcmUoMik7XHJcblxyXG52YXIgQ29sb3IgPSBmdW5jdGlvbiAob2JqKSB7XHJcblx0aWYgKG9iaiBpbnN0YW5jZW9mIENvbG9yKSB7XHJcblx0XHRyZXR1cm4gb2JqO1xyXG5cdH1cclxuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29sb3IpKSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbG9yKG9iaik7XHJcblx0fVxyXG5cclxuXHR0aGlzLnZhbGlkID0gZmFsc2U7XHJcblx0dGhpcy52YWx1ZXMgPSB7XHJcblx0XHRyZ2I6IFswLCAwLCAwXSxcclxuXHRcdGhzbDogWzAsIDAsIDBdLFxyXG5cdFx0aHN2OiBbMCwgMCwgMF0sXHJcblx0XHRod2I6IFswLCAwLCAwXSxcclxuXHRcdGNteWs6IFswLCAwLCAwLCAwXSxcclxuXHRcdGFscGhhOiAxXHJcblx0fTtcclxuXHJcblx0Ly8gcGFyc2UgQ29sb3IoKSBhcmd1bWVudFxyXG5cdHZhciB2YWxzO1xyXG5cdGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xyXG5cdFx0dmFscyA9IHN0cmluZy5nZXRSZ2JhKG9iaik7XHJcblx0XHRpZiAodmFscykge1xyXG5cdFx0XHR0aGlzLnNldFZhbHVlcygncmdiJywgdmFscyk7XHJcblx0XHR9IGVsc2UgaWYgKHZhbHMgPSBzdHJpbmcuZ2V0SHNsYShvYmopKSB7XHJcblx0XHRcdHRoaXMuc2V0VmFsdWVzKCdoc2wnLCB2YWxzKTtcclxuXHRcdH0gZWxzZSBpZiAodmFscyA9IHN0cmluZy5nZXRId2Iob2JqKSkge1xyXG5cdFx0XHR0aGlzLnNldFZhbHVlcygnaHdiJywgdmFscyk7XHJcblx0XHR9XHJcblx0fSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xyXG5cdFx0dmFscyA9IG9iajtcclxuXHRcdGlmICh2YWxzLnIgIT09IHVuZGVmaW5lZCB8fCB2YWxzLnJlZCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRoaXMuc2V0VmFsdWVzKCdyZ2InLCB2YWxzKTtcclxuXHRcdH0gZWxzZSBpZiAodmFscy5sICE9PSB1bmRlZmluZWQgfHwgdmFscy5saWdodG5lc3MgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLnNldFZhbHVlcygnaHNsJywgdmFscyk7XHJcblx0XHR9IGVsc2UgaWYgKHZhbHMudiAhPT0gdW5kZWZpbmVkIHx8IHZhbHMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLnNldFZhbHVlcygnaHN2JywgdmFscyk7XHJcblx0XHR9IGVsc2UgaWYgKHZhbHMudyAhPT0gdW5kZWZpbmVkIHx8IHZhbHMud2hpdGVuZXNzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5zZXRWYWx1ZXMoJ2h3YicsIHZhbHMpO1xyXG5cdFx0fSBlbHNlIGlmICh2YWxzLmMgIT09IHVuZGVmaW5lZCB8fCB2YWxzLmN5YW4gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLnNldFZhbHVlcygnY215aycsIHZhbHMpO1xyXG5cdFx0fVxyXG5cdH1cclxufTtcclxuXHJcbkNvbG9yLnByb3RvdHlwZSA9IHtcclxuXHRpc1ZhbGlkOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy52YWxpZDtcclxuXHR9LFxyXG5cdHJnYjogZnVuY3Rpb24gKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2V0U3BhY2UoJ3JnYicsIGFyZ3VtZW50cyk7XHJcblx0fSxcclxuXHRoc2w6IGZ1bmN0aW9uICgpIHtcclxuXHRcdHJldHVybiB0aGlzLnNldFNwYWNlKCdoc2wnLCBhcmd1bWVudHMpO1xyXG5cdH0sXHJcblx0aHN2OiBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5zZXRTcGFjZSgnaHN2JywgYXJndW1lbnRzKTtcclxuXHR9LFxyXG5cdGh3YjogZnVuY3Rpb24gKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2V0U3BhY2UoJ2h3YicsIGFyZ3VtZW50cyk7XHJcblx0fSxcclxuXHRjbXlrOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5zZXRTcGFjZSgnY215aycsIGFyZ3VtZW50cyk7XHJcblx0fSxcclxuXHJcblx0cmdiQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuXHRcdHJldHVybiB0aGlzLnZhbHVlcy5yZ2I7XHJcblx0fSxcclxuXHRoc2xBcnJheTogZnVuY3Rpb24gKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMudmFsdWVzLmhzbDtcclxuXHR9LFxyXG5cdGhzdkFycmF5OiBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy52YWx1ZXMuaHN2O1xyXG5cdH0sXHJcblx0aHdiQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuXHRcdHZhciB2YWx1ZXMgPSB0aGlzLnZhbHVlcztcclxuXHRcdGlmICh2YWx1ZXMuYWxwaGEgIT09IDEpIHtcclxuXHRcdFx0cmV0dXJuIHZhbHVlcy5od2IuY29uY2F0KFt2YWx1ZXMuYWxwaGFdKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWx1ZXMuaHdiO1xyXG5cdH0sXHJcblx0Y215a0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy52YWx1ZXMuY215aztcclxuXHR9LFxyXG5cdHJnYmFBcnJheTogZnVuY3Rpb24gKCkge1xyXG5cdFx0dmFyIHZhbHVlcyA9IHRoaXMudmFsdWVzO1xyXG5cdFx0cmV0dXJuIHZhbHVlcy5yZ2IuY29uY2F0KFt2YWx1ZXMuYWxwaGFdKTtcclxuXHR9LFxyXG5cdGhzbGFBcnJheTogZnVuY3Rpb24gKCkge1xyXG5cdFx0dmFyIHZhbHVlcyA9IHRoaXMudmFsdWVzO1xyXG5cdFx0cmV0dXJuIHZhbHVlcy5oc2wuY29uY2F0KFt2YWx1ZXMuYWxwaGFdKTtcclxuXHR9LFxyXG5cdGFscGhhOiBmdW5jdGlvbiAodmFsKSB7XHJcblx0XHRpZiAodmFsID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWVzLmFscGhhO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXRWYWx1ZXMoJ2FscGhhJywgdmFsKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH0sXHJcblxyXG5cdHJlZDogZnVuY3Rpb24gKHZhbCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgncmdiJywgMCwgdmFsKTtcclxuXHR9LFxyXG5cdGdyZWVuOiBmdW5jdGlvbiAodmFsKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5zZXRDaGFubmVsKCdyZ2InLCAxLCB2YWwpO1xyXG5cdH0sXHJcblx0Ymx1ZTogZnVuY3Rpb24gKHZhbCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgncmdiJywgMiwgdmFsKTtcclxuXHR9LFxyXG5cdGh1ZTogZnVuY3Rpb24gKHZhbCkge1xyXG5cdFx0aWYgKHZhbCkge1xyXG5cdFx0XHR2YWwgJT0gMzYwO1xyXG5cdFx0XHR2YWwgPSB2YWwgPCAwID8gMzYwICsgdmFsIDogdmFsO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnaHNsJywgMCwgdmFsKTtcclxuXHR9LFxyXG5cdHNhdHVyYXRpb246IGZ1bmN0aW9uICh2YWwpIHtcclxuXHRcdHJldHVybiB0aGlzLnNldENoYW5uZWwoJ2hzbCcsIDEsIHZhbCk7XHJcblx0fSxcclxuXHRsaWdodG5lc3M6IGZ1bmN0aW9uICh2YWwpIHtcclxuXHRcdHJldHVybiB0aGlzLnNldENoYW5uZWwoJ2hzbCcsIDIsIHZhbCk7XHJcblx0fSxcclxuXHRzYXR1cmF0aW9udjogZnVuY3Rpb24gKHZhbCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnaHN2JywgMSwgdmFsKTtcclxuXHR9LFxyXG5cdHdoaXRlbmVzczogZnVuY3Rpb24gKHZhbCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnaHdiJywgMSwgdmFsKTtcclxuXHR9LFxyXG5cdGJsYWNrbmVzczogZnVuY3Rpb24gKHZhbCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnaHdiJywgMiwgdmFsKTtcclxuXHR9LFxyXG5cdHZhbHVlOiBmdW5jdGlvbiAodmFsKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5zZXRDaGFubmVsKCdoc3YnLCAyLCB2YWwpO1xyXG5cdH0sXHJcblx0Y3lhbjogZnVuY3Rpb24gKHZhbCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnY215aycsIDAsIHZhbCk7XHJcblx0fSxcclxuXHRtYWdlbnRhOiBmdW5jdGlvbiAodmFsKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5zZXRDaGFubmVsKCdjbXlrJywgMSwgdmFsKTtcclxuXHR9LFxyXG5cdHllbGxvdzogZnVuY3Rpb24gKHZhbCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnY215aycsIDIsIHZhbCk7XHJcblx0fSxcclxuXHRibGFjazogZnVuY3Rpb24gKHZhbCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnY215aycsIDMsIHZhbCk7XHJcblx0fSxcclxuXHJcblx0aGV4U3RyaW5nOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gc3RyaW5nLmhleFN0cmluZyh0aGlzLnZhbHVlcy5yZ2IpO1xyXG5cdH0sXHJcblx0cmdiU3RyaW5nOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gc3RyaW5nLnJnYlN0cmluZyh0aGlzLnZhbHVlcy5yZ2IsIHRoaXMudmFsdWVzLmFscGhhKTtcclxuXHR9LFxyXG5cdHJnYmFTdHJpbmc6IGZ1bmN0aW9uICgpIHtcclxuXHRcdHJldHVybiBzdHJpbmcucmdiYVN0cmluZyh0aGlzLnZhbHVlcy5yZ2IsIHRoaXMudmFsdWVzLmFscGhhKTtcclxuXHR9LFxyXG5cdHBlcmNlbnRTdHJpbmc6IGZ1bmN0aW9uICgpIHtcclxuXHRcdHJldHVybiBzdHJpbmcucGVyY2VudFN0cmluZyh0aGlzLnZhbHVlcy5yZ2IsIHRoaXMudmFsdWVzLmFscGhhKTtcclxuXHR9LFxyXG5cdGhzbFN0cmluZzogZnVuY3Rpb24gKCkge1xyXG5cdFx0cmV0dXJuIHN0cmluZy5oc2xTdHJpbmcodGhpcy52YWx1ZXMuaHNsLCB0aGlzLnZhbHVlcy5hbHBoYSk7XHJcblx0fSxcclxuXHRoc2xhU3RyaW5nOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gc3RyaW5nLmhzbGFTdHJpbmcodGhpcy52YWx1ZXMuaHNsLCB0aGlzLnZhbHVlcy5hbHBoYSk7XHJcblx0fSxcclxuXHRod2JTdHJpbmc6IGZ1bmN0aW9uICgpIHtcclxuXHRcdHJldHVybiBzdHJpbmcuaHdiU3RyaW5nKHRoaXMudmFsdWVzLmh3YiwgdGhpcy52YWx1ZXMuYWxwaGEpO1xyXG5cdH0sXHJcblx0a2V5d29yZDogZnVuY3Rpb24gKCkge1xyXG5cdFx0cmV0dXJuIHN0cmluZy5rZXl3b3JkKHRoaXMudmFsdWVzLnJnYiwgdGhpcy52YWx1ZXMuYWxwaGEpO1xyXG5cdH0sXHJcblxyXG5cdHJnYk51bWJlcjogZnVuY3Rpb24gKCkge1xyXG5cdFx0dmFyIHJnYiA9IHRoaXMudmFsdWVzLnJnYjtcclxuXHRcdHJldHVybiAocmdiWzBdIDw8IDE2KSB8IChyZ2JbMV0gPDwgOCkgfCByZ2JbMl07XHJcblx0fSxcclxuXHJcblx0bHVtaW5vc2l0eTogZnVuY3Rpb24gKCkge1xyXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvV0NBRzIwLyNyZWxhdGl2ZWx1bWluYW5jZWRlZlxyXG5cdFx0dmFyIHJnYiA9IHRoaXMudmFsdWVzLnJnYjtcclxuXHRcdHZhciBsdW0gPSBbXTtcclxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmdiLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHZhciBjaGFuID0gcmdiW2ldIC8gMjU1O1xyXG5cdFx0XHRsdW1baV0gPSAoY2hhbiA8PSAwLjAzOTI4KSA/IGNoYW4gLyAxMi45MiA6IE1hdGgucG93KCgoY2hhbiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiAwLjIxMjYgKiBsdW1bMF0gKyAwLjcxNTIgKiBsdW1bMV0gKyAwLjA3MjIgKiBsdW1bMl07XHJcblx0fSxcclxuXHJcblx0Y29udHJhc3Q6IGZ1bmN0aW9uIChjb2xvcjIpIHtcclxuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jY29udHJhc3QtcmF0aW9kZWZcclxuXHRcdHZhciBsdW0xID0gdGhpcy5sdW1pbm9zaXR5KCk7XHJcblx0XHR2YXIgbHVtMiA9IGNvbG9yMi5sdW1pbm9zaXR5KCk7XHJcblx0XHRpZiAobHVtMSA+IGx1bTIpIHtcclxuXHRcdFx0cmV0dXJuIChsdW0xICsgMC4wNSkgLyAobHVtMiArIDAuMDUpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIChsdW0yICsgMC4wNSkgLyAobHVtMSArIDAuMDUpO1xyXG5cdH0sXHJcblxyXG5cdGxldmVsOiBmdW5jdGlvbiAoY29sb3IyKSB7XHJcblx0XHR2YXIgY29udHJhc3RSYXRpbyA9IHRoaXMuY29udHJhc3QoY29sb3IyKTtcclxuXHRcdGlmIChjb250cmFzdFJhdGlvID49IDcuMSkge1xyXG5cdFx0XHRyZXR1cm4gJ0FBQSc7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIChjb250cmFzdFJhdGlvID49IDQuNSkgPyAnQUEnIDogJyc7XHJcblx0fSxcclxuXHJcblx0ZGFyazogZnVuY3Rpb24gKCkge1xyXG5cdFx0Ly8gWUlRIGVxdWF0aW9uIGZyb20gaHR0cDovLzI0d2F5cy5vcmcvMjAxMC9jYWxjdWxhdGluZy1jb2xvci1jb250cmFzdFxyXG5cdFx0dmFyIHJnYiA9IHRoaXMudmFsdWVzLnJnYjtcclxuXHRcdHZhciB5aXEgPSAocmdiWzBdICogMjk5ICsgcmdiWzFdICogNTg3ICsgcmdiWzJdICogMTE0KSAvIDEwMDA7XHJcblx0XHRyZXR1cm4geWlxIDwgMTI4O1xyXG5cdH0sXHJcblxyXG5cdGxpZ2h0OiBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gIXRoaXMuZGFyaygpO1xyXG5cdH0sXHJcblxyXG5cdG5lZ2F0ZTogZnVuY3Rpb24gKCkge1xyXG5cdFx0dmFyIHJnYiA9IFtdO1xyXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuXHRcdFx0cmdiW2ldID0gMjU1IC0gdGhpcy52YWx1ZXMucmdiW2ldO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXRWYWx1ZXMoJ3JnYicsIHJnYik7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9LFxyXG5cclxuXHRsaWdodGVuOiBmdW5jdGlvbiAocmF0aW8pIHtcclxuXHRcdHZhciBoc2wgPSB0aGlzLnZhbHVlcy5oc2w7XHJcblx0XHRoc2xbMl0gKz0gaHNsWzJdICogcmF0aW87XHJcblx0XHR0aGlzLnNldFZhbHVlcygnaHNsJywgaHNsKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH0sXHJcblxyXG5cdGRhcmtlbjogZnVuY3Rpb24gKHJhdGlvKSB7XHJcblx0XHR2YXIgaHNsID0gdGhpcy52YWx1ZXMuaHNsO1xyXG5cdFx0aHNsWzJdIC09IGhzbFsyXSAqIHJhdGlvO1xyXG5cdFx0dGhpcy5zZXRWYWx1ZXMoJ2hzbCcsIGhzbCk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9LFxyXG5cclxuXHRzYXR1cmF0ZTogZnVuY3Rpb24gKHJhdGlvKSB7XHJcblx0XHR2YXIgaHNsID0gdGhpcy52YWx1ZXMuaHNsO1xyXG5cdFx0aHNsWzFdICs9IGhzbFsxXSAqIHJhdGlvO1xyXG5cdFx0dGhpcy5zZXRWYWx1ZXMoJ2hzbCcsIGhzbCk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9LFxyXG5cclxuXHRkZXNhdHVyYXRlOiBmdW5jdGlvbiAocmF0aW8pIHtcclxuXHRcdHZhciBoc2wgPSB0aGlzLnZhbHVlcy5oc2w7XHJcblx0XHRoc2xbMV0gLT0gaHNsWzFdICogcmF0aW87XHJcblx0XHR0aGlzLnNldFZhbHVlcygnaHNsJywgaHNsKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH0sXHJcblxyXG5cdHdoaXRlbjogZnVuY3Rpb24gKHJhdGlvKSB7XHJcblx0XHR2YXIgaHdiID0gdGhpcy52YWx1ZXMuaHdiO1xyXG5cdFx0aHdiWzFdICs9IGh3YlsxXSAqIHJhdGlvO1xyXG5cdFx0dGhpcy5zZXRWYWx1ZXMoJ2h3YicsIGh3Yik7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9LFxyXG5cclxuXHRibGFja2VuOiBmdW5jdGlvbiAocmF0aW8pIHtcclxuXHRcdHZhciBod2IgPSB0aGlzLnZhbHVlcy5od2I7XHJcblx0XHRod2JbMl0gKz0gaHdiWzJdICogcmF0aW87XHJcblx0XHR0aGlzLnNldFZhbHVlcygnaHdiJywgaHdiKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH0sXHJcblxyXG5cdGdyZXlzY2FsZTogZnVuY3Rpb24gKCkge1xyXG5cdFx0dmFyIHJnYiA9IHRoaXMudmFsdWVzLnJnYjtcclxuXHRcdC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JheXNjYWxlI0NvbnZlcnRpbmdfY29sb3JfdG9fZ3JheXNjYWxlXHJcblx0XHR2YXIgdmFsID0gcmdiWzBdICogMC4zICsgcmdiWzFdICogMC41OSArIHJnYlsyXSAqIDAuMTE7XHJcblx0XHR0aGlzLnNldFZhbHVlcygncmdiJywgW3ZhbCwgdmFsLCB2YWxdKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH0sXHJcblxyXG5cdGNsZWFyZXI6IGZ1bmN0aW9uIChyYXRpbykge1xyXG5cdFx0dmFyIGFscGhhID0gdGhpcy52YWx1ZXMuYWxwaGE7XHJcblx0XHR0aGlzLnNldFZhbHVlcygnYWxwaGEnLCBhbHBoYSAtIChhbHBoYSAqIHJhdGlvKSk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9LFxyXG5cclxuXHRvcGFxdWVyOiBmdW5jdGlvbiAocmF0aW8pIHtcclxuXHRcdHZhciBhbHBoYSA9IHRoaXMudmFsdWVzLmFscGhhO1xyXG5cdFx0dGhpcy5zZXRWYWx1ZXMoJ2FscGhhJywgYWxwaGEgKyAoYWxwaGEgKiByYXRpbykpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fSxcclxuXHJcblx0cm90YXRlOiBmdW5jdGlvbiAoZGVncmVlcykge1xyXG5cdFx0dmFyIGhzbCA9IHRoaXMudmFsdWVzLmhzbDtcclxuXHRcdHZhciBodWUgPSAoaHNsWzBdICsgZGVncmVlcykgJSAzNjA7XHJcblx0XHRoc2xbMF0gPSBodWUgPCAwID8gMzYwICsgaHVlIDogaHVlO1xyXG5cdFx0dGhpcy5zZXRWYWx1ZXMoJ2hzbCcsIGhzbCk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBQb3J0ZWQgZnJvbSBzYXNzIGltcGxlbWVudGF0aW9uIGluIENcclxuXHQgKiBodHRwczovL2dpdGh1Yi5jb20vc2Fzcy9saWJzYXNzL2Jsb2IvMGU2YjRhMjg1MDA5MjM1NmFhM2VjZTA3YzZiMjQ5ZjAyMjFjYWNlZC9mdW5jdGlvbnMuY3BwI0wyMDlcclxuXHQgKi9cclxuXHRtaXg6IGZ1bmN0aW9uIChtaXhpbkNvbG9yLCB3ZWlnaHQpIHtcclxuXHRcdHZhciBjb2xvcjEgPSB0aGlzO1xyXG5cdFx0dmFyIGNvbG9yMiA9IG1peGluQ29sb3I7XHJcblx0XHR2YXIgcCA9IHdlaWdodCA9PT0gdW5kZWZpbmVkID8gMC41IDogd2VpZ2h0O1xyXG5cclxuXHRcdHZhciB3ID0gMiAqIHAgLSAxO1xyXG5cdFx0dmFyIGEgPSBjb2xvcjEuYWxwaGEoKSAtIGNvbG9yMi5hbHBoYSgpO1xyXG5cclxuXHRcdHZhciB3MSA9ICgoKHcgKiBhID09PSAtMSkgPyB3IDogKHcgKyBhKSAvICgxICsgdyAqIGEpKSArIDEpIC8gMi4wO1xyXG5cdFx0dmFyIHcyID0gMSAtIHcxO1xyXG5cclxuXHRcdHJldHVybiB0aGlzXHJcblx0XHRcdC5yZ2IoXHJcblx0XHRcdFx0dzEgKiBjb2xvcjEucmVkKCkgKyB3MiAqIGNvbG9yMi5yZWQoKSxcclxuXHRcdFx0XHR3MSAqIGNvbG9yMS5ncmVlbigpICsgdzIgKiBjb2xvcjIuZ3JlZW4oKSxcclxuXHRcdFx0XHR3MSAqIGNvbG9yMS5ibHVlKCkgKyB3MiAqIGNvbG9yMi5ibHVlKClcclxuXHRcdFx0KVxyXG5cdFx0XHQuYWxwaGEoY29sb3IxLmFscGhhKCkgKiBwICsgY29sb3IyLmFscGhhKCkgKiAoMSAtIHApKTtcclxuXHR9LFxyXG5cclxuXHR0b0pTT046IGZ1bmN0aW9uICgpIHtcclxuXHRcdHJldHVybiB0aGlzLnJnYigpO1xyXG5cdH0sXHJcblxyXG5cdGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcblx0XHQvLyBOT1RFKFNCKTogdXNpbmcgbm9kZS1jbG9uZSBjcmVhdGVzIGEgZGVwZW5kZW5jeSB0byBCdWZmZXIgd2hlbiB1c2luZyBicm93c2VyaWZ5LFxyXG5cdFx0Ly8gbWFraW5nIHRoZSBmaW5hbCBidWlsZCB3YXkgdG8gYmlnIHRvIGVtYmVkIGluIENoYXJ0LmpzLiBTbyBsZXQncyBkbyBpdCBtYW51YWxseSxcclxuXHRcdC8vIGFzc3VtaW5nIHRoYXQgdmFsdWVzIHRvIGNsb25lIGFyZSAxIGRpbWVuc2lvbiBhcnJheXMgY29udGFpbmluZyBvbmx5IG51bWJlcnMsXHJcblx0XHQvLyBleGNlcHQgJ2FscGhhJyB3aGljaCBpcyBhIG51bWJlci5cclxuXHRcdHZhciByZXN1bHQgPSBuZXcgQ29sb3IoKTtcclxuXHRcdHZhciBzb3VyY2UgPSB0aGlzLnZhbHVlcztcclxuXHRcdHZhciB0YXJnZXQgPSByZXN1bHQudmFsdWVzO1xyXG5cdFx0dmFyIHZhbHVlLCB0eXBlO1xyXG5cclxuXHRcdGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XHJcblx0XHRcdGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcclxuXHRcdFx0XHR2YWx1ZSA9IHNvdXJjZVtwcm9wXTtcclxuXHRcdFx0XHR0eXBlID0gKHt9KS50b1N0cmluZy5jYWxsKHZhbHVlKTtcclxuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xyXG5cdFx0XHRcdFx0dGFyZ2V0W3Byb3BdID0gdmFsdWUuc2xpY2UoMCk7XHJcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBOdW1iZXJdJykge1xyXG5cdFx0XHRcdFx0dGFyZ2V0W3Byb3BdID0gdmFsdWU7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY29sb3IgdmFsdWU6JywgdmFsdWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59O1xyXG5cclxuQ29sb3IucHJvdG90eXBlLnNwYWNlcyA9IHtcclxuXHRyZ2I6IFsncmVkJywgJ2dyZWVuJywgJ2JsdWUnXSxcclxuXHRoc2w6IFsnaHVlJywgJ3NhdHVyYXRpb24nLCAnbGlnaHRuZXNzJ10sXHJcblx0aHN2OiBbJ2h1ZScsICdzYXR1cmF0aW9uJywgJ3ZhbHVlJ10sXHJcblx0aHdiOiBbJ2h1ZScsICd3aGl0ZW5lc3MnLCAnYmxhY2tuZXNzJ10sXHJcblx0Y215azogWydjeWFuJywgJ21hZ2VudGEnLCAneWVsbG93JywgJ2JsYWNrJ11cclxufTtcclxuXHJcbkNvbG9yLnByb3RvdHlwZS5tYXhlcyA9IHtcclxuXHRyZ2I6IFsyNTUsIDI1NSwgMjU1XSxcclxuXHRoc2w6IFszNjAsIDEwMCwgMTAwXSxcclxuXHRoc3Y6IFszNjAsIDEwMCwgMTAwXSxcclxuXHRod2I6IFszNjAsIDEwMCwgMTAwXSxcclxuXHRjbXlrOiBbMTAwLCAxMDAsIDEwMCwgMTAwXVxyXG59O1xyXG5cclxuQ29sb3IucHJvdG90eXBlLmdldFZhbHVlcyA9IGZ1bmN0aW9uIChzcGFjZSkge1xyXG5cdHZhciB2YWx1ZXMgPSB0aGlzLnZhbHVlcztcclxuXHR2YXIgdmFscyA9IHt9O1xyXG5cclxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHNwYWNlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHR2YWxzW3NwYWNlLmNoYXJBdChpKV0gPSB2YWx1ZXNbc3BhY2VdW2ldO1xyXG5cdH1cclxuXHJcblx0aWYgKHZhbHVlcy5hbHBoYSAhPT0gMSkge1xyXG5cdFx0dmFscy5hID0gdmFsdWVzLmFscGhhO1xyXG5cdH1cclxuXHJcblx0Ly8ge3I6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGE6IDAuNH1cclxuXHRyZXR1cm4gdmFscztcclxufTtcclxuXHJcbkNvbG9yLnByb3RvdHlwZS5zZXRWYWx1ZXMgPSBmdW5jdGlvbiAoc3BhY2UsIHZhbHMpIHtcclxuXHR2YXIgdmFsdWVzID0gdGhpcy52YWx1ZXM7XHJcblx0dmFyIHNwYWNlcyA9IHRoaXMuc3BhY2VzO1xyXG5cdHZhciBtYXhlcyA9IHRoaXMubWF4ZXM7XHJcblx0dmFyIGFscGhhID0gMTtcclxuXHR2YXIgaTtcclxuXHJcblx0dGhpcy52YWxpZCA9IHRydWU7XHJcblxyXG5cdGlmIChzcGFjZSA9PT0gJ2FscGhhJykge1xyXG5cdFx0YWxwaGEgPSB2YWxzO1xyXG5cdH0gZWxzZSBpZiAodmFscy5sZW5ndGgpIHtcclxuXHRcdC8vIFsxMCwgMTAsIDEwXVxyXG5cdFx0dmFsdWVzW3NwYWNlXSA9IHZhbHMuc2xpY2UoMCwgc3BhY2UubGVuZ3RoKTtcclxuXHRcdGFscGhhID0gdmFsc1tzcGFjZS5sZW5ndGhdO1xyXG5cdH0gZWxzZSBpZiAodmFsc1tzcGFjZS5jaGFyQXQoMCldICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdC8vIHtyOiAxMCwgZzogMTAsIGI6IDEwfVxyXG5cdFx0Zm9yIChpID0gMDsgaSA8IHNwYWNlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHZhbHVlc1tzcGFjZV1baV0gPSB2YWxzW3NwYWNlLmNoYXJBdChpKV07XHJcblx0XHR9XHJcblxyXG5cdFx0YWxwaGEgPSB2YWxzLmE7XHJcblx0fSBlbHNlIGlmICh2YWxzW3NwYWNlc1tzcGFjZV1bMF1dICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdC8vIHtyZWQ6IDEwLCBncmVlbjogMTAsIGJsdWU6IDEwfVxyXG5cdFx0dmFyIGNoYW5zID0gc3BhY2VzW3NwYWNlXTtcclxuXHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgc3BhY2UubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFsdWVzW3NwYWNlXVtpXSA9IHZhbHNbY2hhbnNbaV1dO1xyXG5cdFx0fVxyXG5cclxuXHRcdGFscGhhID0gdmFscy5hbHBoYTtcclxuXHR9XHJcblxyXG5cdHZhbHVlcy5hbHBoYSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIChhbHBoYSA9PT0gdW5kZWZpbmVkID8gdmFsdWVzLmFscGhhIDogYWxwaGEpKSk7XHJcblxyXG5cdGlmIChzcGFjZSA9PT0gJ2FscGhhJykge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0dmFyIGNhcHBlZDtcclxuXHJcblx0Ly8gY2FwIHZhbHVlcyBvZiB0aGUgc3BhY2UgcHJpb3IgY29udmVydGluZyBhbGwgdmFsdWVzXHJcblx0Zm9yIChpID0gMDsgaSA8IHNwYWNlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRjYXBwZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihtYXhlc1tzcGFjZV1baV0sIHZhbHVlc1tzcGFjZV1baV0pKTtcclxuXHRcdHZhbHVlc1tzcGFjZV1baV0gPSBNYXRoLnJvdW5kKGNhcHBlZCk7XHJcblx0fVxyXG5cclxuXHQvLyBjb252ZXJ0IHRvIGFsbCB0aGUgb3RoZXIgY29sb3Igc3BhY2VzXHJcblx0Zm9yICh2YXIgc25hbWUgaW4gc3BhY2VzKSB7XHJcblx0XHRpZiAoc25hbWUgIT09IHNwYWNlKSB7XHJcblx0XHRcdHZhbHVlc1tzbmFtZV0gPSBjb252ZXJ0W3NwYWNlXVtzbmFtZV0odmFsdWVzW3NwYWNlXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbkNvbG9yLnByb3RvdHlwZS5zZXRTcGFjZSA9IGZ1bmN0aW9uIChzcGFjZSwgYXJncykge1xyXG5cdHZhciB2YWxzID0gYXJnc1swXTtcclxuXHJcblx0aWYgKHZhbHMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0Ly8gY29sb3IucmdiKClcclxuXHRcdHJldHVybiB0aGlzLmdldFZhbHVlcyhzcGFjZSk7XHJcblx0fVxyXG5cclxuXHQvLyBjb2xvci5yZ2IoMTAsIDEwLCAxMClcclxuXHRpZiAodHlwZW9mIHZhbHMgPT09ICdudW1iZXInKSB7XHJcblx0XHR2YWxzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7XHJcblx0fVxyXG5cclxuXHR0aGlzLnNldFZhbHVlcyhzcGFjZSwgdmFscyk7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG5Db2xvci5wcm90b3R5cGUuc2V0Q2hhbm5lbCA9IGZ1bmN0aW9uIChzcGFjZSwgaW5kZXgsIHZhbCkge1xyXG5cdHZhciBzdmFsdWVzID0gdGhpcy52YWx1ZXNbc3BhY2VdO1xyXG5cdGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0Ly8gY29sb3IucmVkKClcclxuXHRcdHJldHVybiBzdmFsdWVzW2luZGV4XTtcclxuXHR9IGVsc2UgaWYgKHZhbCA9PT0gc3ZhbHVlc1tpbmRleF0pIHtcclxuXHRcdC8vIGNvbG9yLnJlZChjb2xvci5yZWQoKSlcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Ly8gY29sb3IucmVkKDEwMClcclxuXHRzdmFsdWVzW2luZGV4XSA9IHZhbDtcclxuXHR0aGlzLnNldFZhbHVlcyhzcGFjZSwgc3ZhbHVlcyk7XHJcblxyXG5cdHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcblx0d2luZG93LkNvbG9yID0gQ29sb3I7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ29sb3I7XHJcblxyXG59LHtcIjJcIjoyLFwiNVwiOjV9XSw0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuLyogTUlUIGxpY2Vuc2UgKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIHJnYjJoc2w6IHJnYjJoc2wsXHJcbiAgcmdiMmhzdjogcmdiMmhzdixcclxuICByZ2IyaHdiOiByZ2IyaHdiLFxyXG4gIHJnYjJjbXlrOiByZ2IyY215ayxcclxuICByZ2Iya2V5d29yZDogcmdiMmtleXdvcmQsXHJcbiAgcmdiMnh5ejogcmdiMnh5eixcclxuICByZ2IybGFiOiByZ2IybGFiLFxyXG4gIHJnYjJsY2g6IHJnYjJsY2gsXHJcblxyXG4gIGhzbDJyZ2I6IGhzbDJyZ2IsXHJcbiAgaHNsMmhzdjogaHNsMmhzdixcclxuICBoc2wyaHdiOiBoc2wyaHdiLFxyXG4gIGhzbDJjbXlrOiBoc2wyY215ayxcclxuICBoc2wya2V5d29yZDogaHNsMmtleXdvcmQsXHJcblxyXG4gIGhzdjJyZ2I6IGhzdjJyZ2IsXHJcbiAgaHN2MmhzbDogaHN2MmhzbCxcclxuICBoc3YyaHdiOiBoc3YyaHdiLFxyXG4gIGhzdjJjbXlrOiBoc3YyY215ayxcclxuICBoc3Yya2V5d29yZDogaHN2MmtleXdvcmQsXHJcblxyXG4gIGh3YjJyZ2I6IGh3YjJyZ2IsXHJcbiAgaHdiMmhzbDogaHdiMmhzbCxcclxuICBod2IyaHN2OiBod2IyaHN2LFxyXG4gIGh3YjJjbXlrOiBod2IyY215ayxcclxuICBod2Iya2V5d29yZDogaHdiMmtleXdvcmQsXHJcblxyXG4gIGNteWsycmdiOiBjbXlrMnJnYixcclxuICBjbXlrMmhzbDogY215azJoc2wsXHJcbiAgY215azJoc3Y6IGNteWsyaHN2LFxyXG4gIGNteWsyaHdiOiBjbXlrMmh3YixcclxuICBjbXlrMmtleXdvcmQ6IGNteWsya2V5d29yZCxcclxuXHJcbiAga2V5d29yZDJyZ2I6IGtleXdvcmQycmdiLFxyXG4gIGtleXdvcmQyaHNsOiBrZXl3b3JkMmhzbCxcclxuICBrZXl3b3JkMmhzdjoga2V5d29yZDJoc3YsXHJcbiAga2V5d29yZDJod2I6IGtleXdvcmQyaHdiLFxyXG4gIGtleXdvcmQyY215azoga2V5d29yZDJjbXlrLFxyXG4gIGtleXdvcmQybGFiOiBrZXl3b3JkMmxhYixcclxuICBrZXl3b3JkMnh5ejoga2V5d29yZDJ4eXosXHJcblxyXG4gIHh5ejJyZ2I6IHh5ejJyZ2IsXHJcbiAgeHl6MmxhYjogeHl6MmxhYixcclxuICB4eXoybGNoOiB4eXoybGNoLFxyXG5cclxuICBsYWIyeHl6OiBsYWIyeHl6LFxyXG4gIGxhYjJyZ2I6IGxhYjJyZ2IsXHJcbiAgbGFiMmxjaDogbGFiMmxjaCxcclxuXHJcbiAgbGNoMmxhYjogbGNoMmxhYixcclxuICBsY2gyeHl6OiBsY2gyeHl6LFxyXG4gIGxjaDJyZ2I6IGxjaDJyZ2JcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIHJnYjJoc2wocmdiKSB7XHJcbiAgdmFyIHIgPSByZ2JbMF0vMjU1LFxyXG4gICAgICBnID0gcmdiWzFdLzI1NSxcclxuICAgICAgYiA9IHJnYlsyXS8yNTUsXHJcbiAgICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxyXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcclxuICAgICAgZGVsdGEgPSBtYXggLSBtaW4sXHJcbiAgICAgIGgsIHMsIGw7XHJcblxyXG4gIGlmIChtYXggPT0gbWluKVxyXG4gICAgaCA9IDA7XHJcbiAgZWxzZSBpZiAociA9PSBtYXgpXHJcbiAgICBoID0gKGcgLSBiKSAvIGRlbHRhO1xyXG4gIGVsc2UgaWYgKGcgPT0gbWF4KVxyXG4gICAgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XHJcbiAgZWxzZSBpZiAoYiA9PSBtYXgpXHJcbiAgICBoID0gNCArIChyIC0gZykvIGRlbHRhO1xyXG5cclxuICBoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApO1xyXG5cclxuICBpZiAoaCA8IDApXHJcbiAgICBoICs9IDM2MDtcclxuXHJcbiAgbCA9IChtaW4gKyBtYXgpIC8gMjtcclxuXHJcbiAgaWYgKG1heCA9PSBtaW4pXHJcbiAgICBzID0gMDtcclxuICBlbHNlIGlmIChsIDw9IDAuNSlcclxuICAgIHMgPSBkZWx0YSAvIChtYXggKyBtaW4pO1xyXG4gIGVsc2VcclxuICAgIHMgPSBkZWx0YSAvICgyIC0gbWF4IC0gbWluKTtcclxuXHJcbiAgcmV0dXJuIFtoLCBzICogMTAwLCBsICogMTAwXTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmdiMmhzdihyZ2IpIHtcclxuICB2YXIgciA9IHJnYlswXSxcclxuICAgICAgZyA9IHJnYlsxXSxcclxuICAgICAgYiA9IHJnYlsyXSxcclxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXHJcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxyXG4gICAgICBkZWx0YSA9IG1heCAtIG1pbixcclxuICAgICAgaCwgcywgdjtcclxuXHJcbiAgaWYgKG1heCA9PSAwKVxyXG4gICAgcyA9IDA7XHJcbiAgZWxzZVxyXG4gICAgcyA9IChkZWx0YS9tYXggKiAxMDAwKS8xMDtcclxuXHJcbiAgaWYgKG1heCA9PSBtaW4pXHJcbiAgICBoID0gMDtcclxuICBlbHNlIGlmIChyID09IG1heClcclxuICAgIGggPSAoZyAtIGIpIC8gZGVsdGE7XHJcbiAgZWxzZSBpZiAoZyA9PSBtYXgpXHJcbiAgICBoID0gMiArIChiIC0gcikgLyBkZWx0YTtcclxuICBlbHNlIGlmIChiID09IG1heClcclxuICAgIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xyXG5cclxuICBoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApO1xyXG5cclxuICBpZiAoaCA8IDApXHJcbiAgICBoICs9IDM2MDtcclxuXHJcbiAgdiA9ICgobWF4IC8gMjU1KSAqIDEwMDApIC8gMTA7XHJcblxyXG4gIHJldHVybiBbaCwgcywgdl07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJnYjJod2IocmdiKSB7XHJcbiAgdmFyIHIgPSByZ2JbMF0sXHJcbiAgICAgIGcgPSByZ2JbMV0sXHJcbiAgICAgIGIgPSByZ2JbMl0sXHJcbiAgICAgIGggPSByZ2IyaHNsKHJnYilbMF0sXHJcbiAgICAgIHcgPSAxLzI1NSAqIE1hdGgubWluKHIsIE1hdGgubWluKGcsIGIpKSxcclxuICAgICAgYiA9IDEgLSAxLzI1NSAqIE1hdGgubWF4KHIsIE1hdGgubWF4KGcsIGIpKTtcclxuXHJcbiAgcmV0dXJuIFtoLCB3ICogMTAwLCBiICogMTAwXTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmdiMmNteWsocmdiKSB7XHJcbiAgdmFyIHIgPSByZ2JbMF0gLyAyNTUsXHJcbiAgICAgIGcgPSByZ2JbMV0gLyAyNTUsXHJcbiAgICAgIGIgPSByZ2JbMl0gLyAyNTUsXHJcbiAgICAgIGMsIG0sIHksIGs7XHJcblxyXG4gIGsgPSBNYXRoLm1pbigxIC0gciwgMSAtIGcsIDEgLSBiKTtcclxuICBjID0gKDEgLSByIC0gaykgLyAoMSAtIGspIHx8IDA7XHJcbiAgbSA9ICgxIC0gZyAtIGspIC8gKDEgLSBrKSB8fCAwO1xyXG4gIHkgPSAoMSAtIGIgLSBrKSAvICgxIC0gaykgfHwgMDtcclxuICByZXR1cm4gW2MgKiAxMDAsIG0gKiAxMDAsIHkgKiAxMDAsIGsgKiAxMDBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZ2Iya2V5d29yZChyZ2IpIHtcclxuICByZXR1cm4gcmV2ZXJzZUtleXdvcmRzW0pTT04uc3RyaW5naWZ5KHJnYildO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZ2IyeHl6KHJnYikge1xyXG4gIHZhciByID0gcmdiWzBdIC8gMjU1LFxyXG4gICAgICBnID0gcmdiWzFdIC8gMjU1LFxyXG4gICAgICBiID0gcmdiWzJdIC8gMjU1O1xyXG5cclxuICAvLyBhc3N1bWUgc1JHQlxyXG4gIHIgPSByID4gMC4wNDA0NSA/IE1hdGgucG93KCgociArIDAuMDU1KSAvIDEuMDU1KSwgMi40KSA6IChyIC8gMTIuOTIpO1xyXG4gIGcgPSBnID4gMC4wNDA0NSA/IE1hdGgucG93KCgoZyArIDAuMDU1KSAvIDEuMDU1KSwgMi40KSA6IChnIC8gMTIuOTIpO1xyXG4gIGIgPSBiID4gMC4wNDA0NSA/IE1hdGgucG93KCgoYiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KSA6IChiIC8gMTIuOTIpO1xyXG5cclxuICB2YXIgeCA9IChyICogMC40MTI0KSArIChnICogMC4zNTc2KSArIChiICogMC4xODA1KTtcclxuICB2YXIgeSA9IChyICogMC4yMTI2KSArIChnICogMC43MTUyKSArIChiICogMC4wNzIyKTtcclxuICB2YXIgeiA9IChyICogMC4wMTkzKSArIChnICogMC4xMTkyKSArIChiICogMC45NTA1KTtcclxuXHJcbiAgcmV0dXJuIFt4ICogMTAwLCB5ICoxMDAsIHogKiAxMDBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZ2IybGFiKHJnYikge1xyXG4gIHZhciB4eXogPSByZ2IyeHl6KHJnYiksXHJcbiAgICAgICAgeCA9IHh5elswXSxcclxuICAgICAgICB5ID0geHl6WzFdLFxyXG4gICAgICAgIHogPSB4eXpbMl0sXHJcbiAgICAgICAgbCwgYSwgYjtcclxuXHJcbiAgeCAvPSA5NS4wNDc7XHJcbiAgeSAvPSAxMDA7XHJcbiAgeiAvPSAxMDguODgzO1xyXG5cclxuICB4ID0geCA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeCwgMS8zKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcclxuICB5ID0geSA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeSwgMS8zKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcclxuICB6ID0geiA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeiwgMS8zKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcclxuXHJcbiAgbCA9ICgxMTYgKiB5KSAtIDE2O1xyXG4gIGEgPSA1MDAgKiAoeCAtIHkpO1xyXG4gIGIgPSAyMDAgKiAoeSAtIHopO1xyXG5cclxuICByZXR1cm4gW2wsIGEsIGJdO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZ2IybGNoKGFyZ3MpIHtcclxuICByZXR1cm4gbGFiMmxjaChyZ2IybGFiKGFyZ3MpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaHNsMnJnYihoc2wpIHtcclxuICB2YXIgaCA9IGhzbFswXSAvIDM2MCxcclxuICAgICAgcyA9IGhzbFsxXSAvIDEwMCxcclxuICAgICAgbCA9IGhzbFsyXSAvIDEwMCxcclxuICAgICAgdDEsIHQyLCB0MywgcmdiLCB2YWw7XHJcblxyXG4gIGlmIChzID09IDApIHtcclxuICAgIHZhbCA9IGwgKiAyNTU7XHJcbiAgICByZXR1cm4gW3ZhbCwgdmFsLCB2YWxdO1xyXG4gIH1cclxuXHJcbiAgaWYgKGwgPCAwLjUpXHJcbiAgICB0MiA9IGwgKiAoMSArIHMpO1xyXG4gIGVsc2VcclxuICAgIHQyID0gbCArIHMgLSBsICogcztcclxuICB0MSA9IDIgKiBsIC0gdDI7XHJcblxyXG4gIHJnYiA9IFswLCAwLCAwXTtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgdDMgPSBoICsgMSAvIDMgKiAtIChpIC0gMSk7XHJcbiAgICB0MyA8IDAgJiYgdDMrKztcclxuICAgIHQzID4gMSAmJiB0My0tO1xyXG5cclxuICAgIGlmICg2ICogdDMgPCAxKVxyXG4gICAgICB2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0MztcclxuICAgIGVsc2UgaWYgKDIgKiB0MyA8IDEpXHJcbiAgICAgIHZhbCA9IHQyO1xyXG4gICAgZWxzZSBpZiAoMyAqIHQzIDwgMilcclxuICAgICAgdmFsID0gdDEgKyAodDIgLSB0MSkgKiAoMiAvIDMgLSB0MykgKiA2O1xyXG4gICAgZWxzZVxyXG4gICAgICB2YWwgPSB0MTtcclxuXHJcbiAgICByZ2JbaV0gPSB2YWwgKiAyNTU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmdiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoc2wyaHN2KGhzbCkge1xyXG4gIHZhciBoID0gaHNsWzBdLFxyXG4gICAgICBzID0gaHNsWzFdIC8gMTAwLFxyXG4gICAgICBsID0gaHNsWzJdIC8gMTAwLFxyXG4gICAgICBzdiwgdjtcclxuXHJcbiAgaWYobCA9PT0gMCkge1xyXG4gICAgICAvLyBubyBuZWVkIHRvIGRvIGNhbGMgb24gYmxhY2tcclxuICAgICAgLy8gYWxzbyBhdm9pZHMgZGl2aWRlIGJ5IDAgZXJyb3JcclxuICAgICAgcmV0dXJuIFswLCAwLCAwXTtcclxuICB9XHJcblxyXG4gIGwgKj0gMjtcclxuICBzICo9IChsIDw9IDEpID8gbCA6IDIgLSBsO1xyXG4gIHYgPSAobCArIHMpIC8gMjtcclxuICBzdiA9ICgyICogcykgLyAobCArIHMpO1xyXG4gIHJldHVybiBbaCwgc3YgKiAxMDAsIHYgKiAxMDBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoc2wyaHdiKGFyZ3MpIHtcclxuICByZXR1cm4gcmdiMmh3Yihoc2wycmdiKGFyZ3MpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaHNsMmNteWsoYXJncykge1xyXG4gIHJldHVybiByZ2IyY215ayhoc2wycmdiKGFyZ3MpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaHNsMmtleXdvcmQoYXJncykge1xyXG4gIHJldHVybiByZ2Iya2V5d29yZChoc2wycmdiKGFyZ3MpKTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGhzdjJyZ2IoaHN2KSB7XHJcbiAgdmFyIGggPSBoc3ZbMF0gLyA2MCxcclxuICAgICAgcyA9IGhzdlsxXSAvIDEwMCxcclxuICAgICAgdiA9IGhzdlsyXSAvIDEwMCxcclxuICAgICAgaGkgPSBNYXRoLmZsb29yKGgpICUgNjtcclxuXHJcbiAgdmFyIGYgPSBoIC0gTWF0aC5mbG9vcihoKSxcclxuICAgICAgcCA9IDI1NSAqIHYgKiAoMSAtIHMpLFxyXG4gICAgICBxID0gMjU1ICogdiAqICgxIC0gKHMgKiBmKSksXHJcbiAgICAgIHQgPSAyNTUgKiB2ICogKDEgLSAocyAqICgxIC0gZikpKSxcclxuICAgICAgdiA9IDI1NSAqIHY7XHJcblxyXG4gIHN3aXRjaChoaSkge1xyXG4gICAgY2FzZSAwOlxyXG4gICAgICByZXR1cm4gW3YsIHQsIHBdO1xyXG4gICAgY2FzZSAxOlxyXG4gICAgICByZXR1cm4gW3EsIHYsIHBdO1xyXG4gICAgY2FzZSAyOlxyXG4gICAgICByZXR1cm4gW3AsIHYsIHRdO1xyXG4gICAgY2FzZSAzOlxyXG4gICAgICByZXR1cm4gW3AsIHEsIHZdO1xyXG4gICAgY2FzZSA0OlxyXG4gICAgICByZXR1cm4gW3QsIHAsIHZdO1xyXG4gICAgY2FzZSA1OlxyXG4gICAgICByZXR1cm4gW3YsIHAsIHFdO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaHN2MmhzbChoc3YpIHtcclxuICB2YXIgaCA9IGhzdlswXSxcclxuICAgICAgcyA9IGhzdlsxXSAvIDEwMCxcclxuICAgICAgdiA9IGhzdlsyXSAvIDEwMCxcclxuICAgICAgc2wsIGw7XHJcblxyXG4gIGwgPSAoMiAtIHMpICogdjtcclxuICBzbCA9IHMgKiB2O1xyXG4gIHNsIC89IChsIDw9IDEpID8gbCA6IDIgLSBsO1xyXG4gIHNsID0gc2wgfHwgMDtcclxuICBsIC89IDI7XHJcbiAgcmV0dXJuIFtoLCBzbCAqIDEwMCwgbCAqIDEwMF07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhzdjJod2IoYXJncykge1xyXG4gIHJldHVybiByZ2IyaHdiKGhzdjJyZ2IoYXJncykpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhzdjJjbXlrKGFyZ3MpIHtcclxuICByZXR1cm4gcmdiMmNteWsoaHN2MnJnYihhcmdzKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhzdjJrZXl3b3JkKGFyZ3MpIHtcclxuICByZXR1cm4gcmdiMmtleXdvcmQoaHN2MnJnYihhcmdzKSk7XHJcbn1cclxuXHJcbi8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1jb2xvci8jaHdiLXRvLXJnYlxyXG5mdW5jdGlvbiBod2IycmdiKGh3Yikge1xyXG4gIHZhciBoID0gaHdiWzBdIC8gMzYwLFxyXG4gICAgICB3aCA9IGh3YlsxXSAvIDEwMCxcclxuICAgICAgYmwgPSBod2JbMl0gLyAxMDAsXHJcbiAgICAgIHJhdGlvID0gd2ggKyBibCxcclxuICAgICAgaSwgdiwgZiwgbjtcclxuXHJcbiAgLy8gd2ggKyBibCBjYW50IGJlID4gMVxyXG4gIGlmIChyYXRpbyA+IDEpIHtcclxuICAgIHdoIC89IHJhdGlvO1xyXG4gICAgYmwgLz0gcmF0aW87XHJcbiAgfVxyXG5cclxuICBpID0gTWF0aC5mbG9vcig2ICogaCk7XHJcbiAgdiA9IDEgLSBibDtcclxuICBmID0gNiAqIGggLSBpO1xyXG4gIGlmICgoaSAmIDB4MDEpICE9IDApIHtcclxuICAgIGYgPSAxIC0gZjtcclxuICB9XHJcbiAgbiA9IHdoICsgZiAqICh2IC0gd2gpOyAgLy8gbGluZWFyIGludGVycG9sYXRpb25cclxuXHJcbiAgc3dpdGNoIChpKSB7XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgY2FzZSA2OlxyXG4gICAgY2FzZSAwOiByID0gdjsgZyA9IG47IGIgPSB3aDsgYnJlYWs7XHJcbiAgICBjYXNlIDE6IHIgPSBuOyBnID0gdjsgYiA9IHdoOyBicmVhaztcclxuICAgIGNhc2UgMjogciA9IHdoOyBnID0gdjsgYiA9IG47IGJyZWFrO1xyXG4gICAgY2FzZSAzOiByID0gd2g7IGcgPSBuOyBiID0gdjsgYnJlYWs7XHJcbiAgICBjYXNlIDQ6IHIgPSBuOyBnID0gd2g7IGIgPSB2OyBicmVhaztcclxuICAgIGNhc2UgNTogciA9IHY7IGcgPSB3aDsgYiA9IG47IGJyZWFrO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcclxufVxyXG5cclxuZnVuY3Rpb24gaHdiMmhzbChhcmdzKSB7XHJcbiAgcmV0dXJuIHJnYjJoc2woaHdiMnJnYihhcmdzKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGh3YjJoc3YoYXJncykge1xyXG4gIHJldHVybiByZ2IyaHN2KGh3YjJyZ2IoYXJncykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBod2IyY215ayhhcmdzKSB7XHJcbiAgcmV0dXJuIHJnYjJjbXlrKGh3YjJyZ2IoYXJncykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBod2Iya2V5d29yZChhcmdzKSB7XHJcbiAgcmV0dXJuIHJnYjJrZXl3b3JkKGh3YjJyZ2IoYXJncykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbXlrMnJnYihjbXlrKSB7XHJcbiAgdmFyIGMgPSBjbXlrWzBdIC8gMTAwLFxyXG4gICAgICBtID0gY215a1sxXSAvIDEwMCxcclxuICAgICAgeSA9IGNteWtbMl0gLyAxMDAsXHJcbiAgICAgIGsgPSBjbXlrWzNdIC8gMTAwLFxyXG4gICAgICByLCBnLCBiO1xyXG5cclxuICByID0gMSAtIE1hdGgubWluKDEsIGMgKiAoMSAtIGspICsgayk7XHJcbiAgZyA9IDEgLSBNYXRoLm1pbigxLCBtICogKDEgLSBrKSArIGspO1xyXG4gIGIgPSAxIC0gTWF0aC5taW4oMSwgeSAqICgxIC0gaykgKyBrKTtcclxuICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbXlrMmhzbChhcmdzKSB7XHJcbiAgcmV0dXJuIHJnYjJoc2woY215azJyZ2IoYXJncykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbXlrMmhzdihhcmdzKSB7XHJcbiAgcmV0dXJuIHJnYjJoc3YoY215azJyZ2IoYXJncykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbXlrMmh3YihhcmdzKSB7XHJcbiAgcmV0dXJuIHJnYjJod2IoY215azJyZ2IoYXJncykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbXlrMmtleXdvcmQoYXJncykge1xyXG4gIHJldHVybiByZ2Iya2V5d29yZChjbXlrMnJnYihhcmdzKSk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiB4eXoycmdiKHh5eikge1xyXG4gIHZhciB4ID0geHl6WzBdIC8gMTAwLFxyXG4gICAgICB5ID0geHl6WzFdIC8gMTAwLFxyXG4gICAgICB6ID0geHl6WzJdIC8gMTAwLFxyXG4gICAgICByLCBnLCBiO1xyXG5cclxuICByID0gKHggKiAzLjI0MDYpICsgKHkgKiAtMS41MzcyKSArICh6ICogLTAuNDk4Nik7XHJcbiAgZyA9ICh4ICogLTAuOTY4OSkgKyAoeSAqIDEuODc1OCkgKyAoeiAqIDAuMDQxNSk7XHJcbiAgYiA9ICh4ICogMC4wNTU3KSArICh5ICogLTAuMjA0MCkgKyAoeiAqIDEuMDU3MCk7XHJcblxyXG4gIC8vIGFzc3VtZSBzUkdCXHJcbiAgciA9IHIgPiAwLjAwMzEzMDggPyAoKDEuMDU1ICogTWF0aC5wb3cociwgMS4wIC8gMi40KSkgLSAwLjA1NSlcclxuICAgIDogciA9IChyICogMTIuOTIpO1xyXG5cclxuICBnID0gZyA+IDAuMDAzMTMwOCA/ICgoMS4wNTUgKiBNYXRoLnBvdyhnLCAxLjAgLyAyLjQpKSAtIDAuMDU1KVxyXG4gICAgOiBnID0gKGcgKiAxMi45Mik7XHJcblxyXG4gIGIgPSBiID4gMC4wMDMxMzA4ID8gKCgxLjA1NSAqIE1hdGgucG93KGIsIDEuMCAvIDIuNCkpIC0gMC4wNTUpXHJcbiAgICA6IGIgPSAoYiAqIDEyLjkyKTtcclxuXHJcbiAgciA9IE1hdGgubWluKE1hdGgubWF4KDAsIHIpLCAxKTtcclxuICBnID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZyksIDEpO1xyXG4gIGIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBiKSwgMSk7XHJcblxyXG4gIHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHh5ejJsYWIoeHl6KSB7XHJcbiAgdmFyIHggPSB4eXpbMF0sXHJcbiAgICAgIHkgPSB4eXpbMV0sXHJcbiAgICAgIHogPSB4eXpbMl0sXHJcbiAgICAgIGwsIGEsIGI7XHJcblxyXG4gIHggLz0gOTUuMDQ3O1xyXG4gIHkgLz0gMTAwO1xyXG4gIHogLz0gMTA4Ljg4MztcclxuXHJcbiAgeCA9IHggPiAwLjAwODg1NiA/IE1hdGgucG93KHgsIDEvMykgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XHJcbiAgeSA9IHkgPiAwLjAwODg1NiA/IE1hdGgucG93KHksIDEvMykgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XHJcbiAgeiA9IHogPiAwLjAwODg1NiA/IE1hdGgucG93KHosIDEvMykgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XHJcblxyXG4gIGwgPSAoMTE2ICogeSkgLSAxNjtcclxuICBhID0gNTAwICogKHggLSB5KTtcclxuICBiID0gMjAwICogKHkgLSB6KTtcclxuXHJcbiAgcmV0dXJuIFtsLCBhLCBiXTtcclxufVxyXG5cclxuZnVuY3Rpb24geHl6MmxjaChhcmdzKSB7XHJcbiAgcmV0dXJuIGxhYjJsY2goeHl6MmxhYihhcmdzKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxhYjJ4eXoobGFiKSB7XHJcbiAgdmFyIGwgPSBsYWJbMF0sXHJcbiAgICAgIGEgPSBsYWJbMV0sXHJcbiAgICAgIGIgPSBsYWJbMl0sXHJcbiAgICAgIHgsIHksIHosIHkyO1xyXG5cclxuICBpZiAobCA8PSA4KSB7XHJcbiAgICB5ID0gKGwgKiAxMDApIC8gOTAzLjM7XHJcbiAgICB5MiA9ICg3Ljc4NyAqICh5IC8gMTAwKSkgKyAoMTYgLyAxMTYpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB5ID0gMTAwICogTWF0aC5wb3coKGwgKyAxNikgLyAxMTYsIDMpO1xyXG4gICAgeTIgPSBNYXRoLnBvdyh5IC8gMTAwLCAxLzMpO1xyXG4gIH1cclxuXHJcbiAgeCA9IHggLyA5NS4wNDcgPD0gMC4wMDg4NTYgPyB4ID0gKDk1LjA0NyAqICgoYSAvIDUwMCkgKyB5MiAtICgxNiAvIDExNikpKSAvIDcuNzg3IDogOTUuMDQ3ICogTWF0aC5wb3coKGEgLyA1MDApICsgeTIsIDMpO1xyXG5cclxuICB6ID0geiAvIDEwOC44ODMgPD0gMC4wMDg4NTkgPyB6ID0gKDEwOC44ODMgKiAoeTIgLSAoYiAvIDIwMCkgLSAoMTYgLyAxMTYpKSkgLyA3Ljc4NyA6IDEwOC44ODMgKiBNYXRoLnBvdyh5MiAtIChiIC8gMjAwKSwgMyk7XHJcblxyXG4gIHJldHVybiBbeCwgeSwgel07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxhYjJsY2gobGFiKSB7XHJcbiAgdmFyIGwgPSBsYWJbMF0sXHJcbiAgICAgIGEgPSBsYWJbMV0sXHJcbiAgICAgIGIgPSBsYWJbMl0sXHJcbiAgICAgIGhyLCBoLCBjO1xyXG5cclxuICBociA9IE1hdGguYXRhbjIoYiwgYSk7XHJcbiAgaCA9IGhyICogMzYwIC8gMiAvIE1hdGguUEk7XHJcbiAgaWYgKGggPCAwKSB7XHJcbiAgICBoICs9IDM2MDtcclxuICB9XHJcbiAgYyA9IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcclxuICByZXR1cm4gW2wsIGMsIGhdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsYWIycmdiKGFyZ3MpIHtcclxuICByZXR1cm4geHl6MnJnYihsYWIyeHl6KGFyZ3MpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbGNoMmxhYihsY2gpIHtcclxuICB2YXIgbCA9IGxjaFswXSxcclxuICAgICAgYyA9IGxjaFsxXSxcclxuICAgICAgaCA9IGxjaFsyXSxcclxuICAgICAgYSwgYiwgaHI7XHJcblxyXG4gIGhyID0gaCAvIDM2MCAqIDIgKiBNYXRoLlBJO1xyXG4gIGEgPSBjICogTWF0aC5jb3MoaHIpO1xyXG4gIGIgPSBjICogTWF0aC5zaW4oaHIpO1xyXG4gIHJldHVybiBbbCwgYSwgYl07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxjaDJ4eXooYXJncykge1xyXG4gIHJldHVybiBsYWIyeHl6KGxjaDJsYWIoYXJncykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsY2gycmdiKGFyZ3MpIHtcclxuICByZXR1cm4gbGFiMnJnYihsY2gybGFiKGFyZ3MpKTtcclxufVxyXG5cclxuZnVuY3Rpb24ga2V5d29yZDJyZ2Ioa2V5d29yZCkge1xyXG4gIHJldHVybiBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcclxufVxyXG5cclxuZnVuY3Rpb24ga2V5d29yZDJoc2woYXJncykge1xyXG4gIHJldHVybiByZ2IyaHNsKGtleXdvcmQycmdiKGFyZ3MpKTtcclxufVxyXG5cclxuZnVuY3Rpb24ga2V5d29yZDJoc3YoYXJncykge1xyXG4gIHJldHVybiByZ2IyaHN2KGtleXdvcmQycmdiKGFyZ3MpKTtcclxufVxyXG5cclxuZnVuY3Rpb24ga2V5d29yZDJod2IoYXJncykge1xyXG4gIHJldHVybiByZ2IyaHdiKGtleXdvcmQycmdiKGFyZ3MpKTtcclxufVxyXG5cclxuZnVuY3Rpb24ga2V5d29yZDJjbXlrKGFyZ3MpIHtcclxuICByZXR1cm4gcmdiMmNteWsoa2V5d29yZDJyZ2IoYXJncykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBrZXl3b3JkMmxhYihhcmdzKSB7XHJcbiAgcmV0dXJuIHJnYjJsYWIoa2V5d29yZDJyZ2IoYXJncykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBrZXl3b3JkMnh5eihhcmdzKSB7XHJcbiAgcmV0dXJuIHJnYjJ4eXooa2V5d29yZDJyZ2IoYXJncykpO1xyXG59XHJcblxyXG52YXIgY3NzS2V5d29yZHMgPSB7XHJcbiAgYWxpY2VibHVlOiAgWzI0MCwyNDgsMjU1XSxcclxuICBhbnRpcXVld2hpdGU6IFsyNTAsMjM1LDIxNV0sXHJcbiAgYXF1YTogWzAsMjU1LDI1NV0sXHJcbiAgYXF1YW1hcmluZTogWzEyNywyNTUsMjEyXSxcclxuICBhenVyZTogIFsyNDAsMjU1LDI1NV0sXHJcbiAgYmVpZ2U6ICBbMjQ1LDI0NSwyMjBdLFxyXG4gIGJpc3F1ZTogWzI1NSwyMjgsMTk2XSxcclxuICBibGFjazogIFswLDAsMF0sXHJcbiAgYmxhbmNoZWRhbG1vbmQ6IFsyNTUsMjM1LDIwNV0sXHJcbiAgYmx1ZTogWzAsMCwyNTVdLFxyXG4gIGJsdWV2aW9sZXQ6IFsxMzgsNDMsMjI2XSxcclxuICBicm93bjogIFsxNjUsNDIsNDJdLFxyXG4gIGJ1cmx5d29vZDogIFsyMjIsMTg0LDEzNV0sXHJcbiAgY2FkZXRibHVlOiAgWzk1LDE1OCwxNjBdLFxyXG4gIGNoYXJ0cmV1c2U6IFsxMjcsMjU1LDBdLFxyXG4gIGNob2NvbGF0ZTogIFsyMTAsMTA1LDMwXSxcclxuICBjb3JhbDogIFsyNTUsMTI3LDgwXSxcclxuICBjb3JuZmxvd2VyYmx1ZTogWzEwMCwxNDksMjM3XSxcclxuICBjb3Juc2lsazogWzI1NSwyNDgsMjIwXSxcclxuICBjcmltc29uOiAgWzIyMCwyMCw2MF0sXHJcbiAgY3lhbjogWzAsMjU1LDI1NV0sXHJcbiAgZGFya2JsdWU6IFswLDAsMTM5XSxcclxuICBkYXJrY3lhbjogWzAsMTM5LDEzOV0sXHJcbiAgZGFya2dvbGRlbnJvZDogIFsxODQsMTM0LDExXSxcclxuICBkYXJrZ3JheTogWzE2OSwxNjksMTY5XSxcclxuICBkYXJrZ3JlZW46ICBbMCwxMDAsMF0sXHJcbiAgZGFya2dyZXk6IFsxNjksMTY5LDE2OV0sXHJcbiAgZGFya2toYWtpOiAgWzE4OSwxODMsMTA3XSxcclxuICBkYXJrbWFnZW50YTogIFsxMzksMCwxMzldLFxyXG4gIGRhcmtvbGl2ZWdyZWVuOiBbODUsMTA3LDQ3XSxcclxuICBkYXJrb3JhbmdlOiBbMjU1LDE0MCwwXSxcclxuICBkYXJrb3JjaGlkOiBbMTUzLDUwLDIwNF0sXHJcbiAgZGFya3JlZDogIFsxMzksMCwwXSxcclxuICBkYXJrc2FsbW9uOiBbMjMzLDE1MCwxMjJdLFxyXG4gIGRhcmtzZWFncmVlbjogWzE0MywxODgsMTQzXSxcclxuICBkYXJrc2xhdGVibHVlOiAgWzcyLDYxLDEzOV0sXHJcbiAgZGFya3NsYXRlZ3JheTogIFs0Nyw3OSw3OV0sXHJcbiAgZGFya3NsYXRlZ3JleTogIFs0Nyw3OSw3OV0sXHJcbiAgZGFya3R1cnF1b2lzZTogIFswLDIwNiwyMDldLFxyXG4gIGRhcmt2aW9sZXQ6IFsxNDgsMCwyMTFdLFxyXG4gIGRlZXBwaW5rOiBbMjU1LDIwLDE0N10sXHJcbiAgZGVlcHNreWJsdWU6ICBbMCwxOTEsMjU1XSxcclxuICBkaW1ncmF5OiAgWzEwNSwxMDUsMTA1XSxcclxuICBkaW1ncmV5OiAgWzEwNSwxMDUsMTA1XSxcclxuICBkb2RnZXJibHVlOiBbMzAsMTQ0LDI1NV0sXHJcbiAgZmlyZWJyaWNrOiAgWzE3OCwzNCwzNF0sXHJcbiAgZmxvcmFsd2hpdGU6ICBbMjU1LDI1MCwyNDBdLFxyXG4gIGZvcmVzdGdyZWVuOiAgWzM0LDEzOSwzNF0sXHJcbiAgZnVjaHNpYTogIFsyNTUsMCwyNTVdLFxyXG4gIGdhaW5zYm9ybzogIFsyMjAsMjIwLDIyMF0sXHJcbiAgZ2hvc3R3aGl0ZTogWzI0OCwyNDgsMjU1XSxcclxuICBnb2xkOiBbMjU1LDIxNSwwXSxcclxuICBnb2xkZW5yb2Q6ICBbMjE4LDE2NSwzMl0sXHJcbiAgZ3JheTogWzEyOCwxMjgsMTI4XSxcclxuICBncmVlbjogIFswLDEyOCwwXSxcclxuICBncmVlbnllbGxvdzogIFsxNzMsMjU1LDQ3XSxcclxuICBncmV5OiBbMTI4LDEyOCwxMjhdLFxyXG4gIGhvbmV5ZGV3OiBbMjQwLDI1NSwyNDBdLFxyXG4gIGhvdHBpbms6ICBbMjU1LDEwNSwxODBdLFxyXG4gIGluZGlhbnJlZDogIFsyMDUsOTIsOTJdLFxyXG4gIGluZGlnbzogWzc1LDAsMTMwXSxcclxuICBpdm9yeTogIFsyNTUsMjU1LDI0MF0sXHJcbiAga2hha2k6ICBbMjQwLDIzMCwxNDBdLFxyXG4gIGxhdmVuZGVyOiBbMjMwLDIzMCwyNTBdLFxyXG4gIGxhdmVuZGVyYmx1c2g6ICBbMjU1LDI0MCwyNDVdLFxyXG4gIGxhd25ncmVlbjogIFsxMjQsMjUyLDBdLFxyXG4gIGxlbW9uY2hpZmZvbjogWzI1NSwyNTAsMjA1XSxcclxuICBsaWdodGJsdWU6ICBbMTczLDIxNiwyMzBdLFxyXG4gIGxpZ2h0Y29yYWw6IFsyNDAsMTI4LDEyOF0sXHJcbiAgbGlnaHRjeWFuOiAgWzIyNCwyNTUsMjU1XSxcclxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogWzI1MCwyNTAsMjEwXSxcclxuICBsaWdodGdyYXk6ICBbMjExLDIxMSwyMTFdLFxyXG4gIGxpZ2h0Z3JlZW46IFsxNDQsMjM4LDE0NF0sXHJcbiAgbGlnaHRncmV5OiAgWzIxMSwyMTEsMjExXSxcclxuICBsaWdodHBpbms6ICBbMjU1LDE4MiwxOTNdLFxyXG4gIGxpZ2h0c2FsbW9uOiAgWzI1NSwxNjAsMTIyXSxcclxuICBsaWdodHNlYWdyZWVuOiAgWzMyLDE3OCwxNzBdLFxyXG4gIGxpZ2h0c2t5Ymx1ZTogWzEzNSwyMDYsMjUwXSxcclxuICBsaWdodHNsYXRlZ3JheTogWzExOSwxMzYsMTUzXSxcclxuICBsaWdodHNsYXRlZ3JleTogWzExOSwxMzYsMTUzXSxcclxuICBsaWdodHN0ZWVsYmx1ZTogWzE3NiwxOTYsMjIyXSxcclxuICBsaWdodHllbGxvdzogIFsyNTUsMjU1LDIyNF0sXHJcbiAgbGltZTogWzAsMjU1LDBdLFxyXG4gIGxpbWVncmVlbjogIFs1MCwyMDUsNTBdLFxyXG4gIGxpbmVuOiAgWzI1MCwyNDAsMjMwXSxcclxuICBtYWdlbnRhOiAgWzI1NSwwLDI1NV0sXHJcbiAgbWFyb29uOiBbMTI4LDAsMF0sXHJcbiAgbWVkaXVtYXF1YW1hcmluZTogWzEwMiwyMDUsMTcwXSxcclxuICBtZWRpdW1ibHVlOiBbMCwwLDIwNV0sXHJcbiAgbWVkaXVtb3JjaGlkOiBbMTg2LDg1LDIxMV0sXHJcbiAgbWVkaXVtcHVycGxlOiBbMTQ3LDExMiwyMTldLFxyXG4gIG1lZGl1bXNlYWdyZWVuOiBbNjAsMTc5LDExM10sXHJcbiAgbWVkaXVtc2xhdGVibHVlOiAgWzEyMywxMDQsMjM4XSxcclxuICBtZWRpdW1zcHJpbmdncmVlbjogIFswLDI1MCwxNTRdLFxyXG4gIG1lZGl1bXR1cnF1b2lzZTogIFs3MiwyMDksMjA0XSxcclxuICBtZWRpdW12aW9sZXRyZWQ6ICBbMTk5LDIxLDEzM10sXHJcbiAgbWlkbmlnaHRibHVlOiBbMjUsMjUsMTEyXSxcclxuICBtaW50Y3JlYW06ICBbMjQ1LDI1NSwyNTBdLFxyXG4gIG1pc3R5cm9zZTogIFsyNTUsMjI4LDIyNV0sXHJcbiAgbW9jY2FzaW46IFsyNTUsMjI4LDE4MV0sXHJcbiAgbmF2YWpvd2hpdGU6ICBbMjU1LDIyMiwxNzNdLFxyXG4gIG5hdnk6IFswLDAsMTI4XSxcclxuICBvbGRsYWNlOiAgWzI1MywyNDUsMjMwXSxcclxuICBvbGl2ZTogIFsxMjgsMTI4LDBdLFxyXG4gIG9saXZlZHJhYjogIFsxMDcsMTQyLDM1XSxcclxuICBvcmFuZ2U6IFsyNTUsMTY1LDBdLFxyXG4gIG9yYW5nZXJlZDogIFsyNTUsNjksMF0sXHJcbiAgb3JjaGlkOiBbMjE4LDExMiwyMTRdLFxyXG4gIHBhbGVnb2xkZW5yb2Q6ICBbMjM4LDIzMiwxNzBdLFxyXG4gIHBhbGVncmVlbjogIFsxNTIsMjUxLDE1Ml0sXHJcbiAgcGFsZXR1cnF1b2lzZTogIFsxNzUsMjM4LDIzOF0sXHJcbiAgcGFsZXZpb2xldHJlZDogIFsyMTksMTEyLDE0N10sXHJcbiAgcGFwYXlhd2hpcDogWzI1NSwyMzksMjEzXSxcclxuICBwZWFjaHB1ZmY6ICBbMjU1LDIxOCwxODVdLFxyXG4gIHBlcnU6IFsyMDUsMTMzLDYzXSxcclxuICBwaW5rOiBbMjU1LDE5MiwyMDNdLFxyXG4gIHBsdW06IFsyMjEsMTYwLDIyMV0sXHJcbiAgcG93ZGVyYmx1ZTogWzE3NiwyMjQsMjMwXSxcclxuICBwdXJwbGU6IFsxMjgsMCwxMjhdLFxyXG4gIHJlYmVjY2FwdXJwbGU6IFsxMDIsIDUxLCAxNTNdLFxyXG4gIHJlZDogIFsyNTUsMCwwXSxcclxuICByb3N5YnJvd246ICBbMTg4LDE0MywxNDNdLFxyXG4gIHJveWFsYmx1ZTogIFs2NSwxMDUsMjI1XSxcclxuICBzYWRkbGVicm93bjogIFsxMzksNjksMTldLFxyXG4gIHNhbG1vbjogWzI1MCwxMjgsMTE0XSxcclxuICBzYW5keWJyb3duOiBbMjQ0LDE2NCw5Nl0sXHJcbiAgc2VhZ3JlZW46IFs0NiwxMzksODddLFxyXG4gIHNlYXNoZWxsOiBbMjU1LDI0NSwyMzhdLFxyXG4gIHNpZW5uYTogWzE2MCw4Miw0NV0sXHJcbiAgc2lsdmVyOiBbMTkyLDE5MiwxOTJdLFxyXG4gIHNreWJsdWU6ICBbMTM1LDIwNiwyMzVdLFxyXG4gIHNsYXRlYmx1ZTogIFsxMDYsOTAsMjA1XSxcclxuICBzbGF0ZWdyYXk6ICBbMTEyLDEyOCwxNDRdLFxyXG4gIHNsYXRlZ3JleTogIFsxMTIsMTI4LDE0NF0sXHJcbiAgc25vdzogWzI1NSwyNTAsMjUwXSxcclxuICBzcHJpbmdncmVlbjogIFswLDI1NSwxMjddLFxyXG4gIHN0ZWVsYmx1ZTogIFs3MCwxMzAsMTgwXSxcclxuICB0YW46ICBbMjEwLDE4MCwxNDBdLFxyXG4gIHRlYWw6IFswLDEyOCwxMjhdLFxyXG4gIHRoaXN0bGU6ICBbMjE2LDE5MSwyMTZdLFxyXG4gIHRvbWF0bzogWzI1NSw5OSw3MV0sXHJcbiAgdHVycXVvaXNlOiAgWzY0LDIyNCwyMDhdLFxyXG4gIHZpb2xldDogWzIzOCwxMzAsMjM4XSxcclxuICB3aGVhdDogIFsyNDUsMjIyLDE3OV0sXHJcbiAgd2hpdGU6ICBbMjU1LDI1NSwyNTVdLFxyXG4gIHdoaXRlc21va2U6IFsyNDUsMjQ1LDI0NV0sXHJcbiAgeWVsbG93OiBbMjU1LDI1NSwwXSxcclxuICB5ZWxsb3dncmVlbjogIFsxNTQsMjA1LDUwXVxyXG59O1xyXG5cclxudmFyIHJldmVyc2VLZXl3b3JkcyA9IHt9O1xyXG5mb3IgKHZhciBrZXkgaW4gY3NzS2V5d29yZHMpIHtcclxuICByZXZlcnNlS2V5d29yZHNbSlNPTi5zdHJpbmdpZnkoY3NzS2V5d29yZHNba2V5XSldID0ga2V5O1xyXG59XHJcblxyXG59LHt9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxudmFyIGNvbnZlcnNpb25zID0gcmVxdWlyZSg0KTtcclxuXHJcbnZhciBjb252ZXJ0ID0gZnVuY3Rpb24oKSB7XHJcbiAgIHJldHVybiBuZXcgQ29udmVydGVyKCk7XHJcbn1cclxuXHJcbmZvciAodmFyIGZ1bmMgaW4gY29udmVyc2lvbnMpIHtcclxuICAvLyBleHBvcnQgUmF3IHZlcnNpb25zXHJcbiAgY29udmVydFtmdW5jICsgXCJSYXdcIl0gPSAgKGZ1bmN0aW9uKGZ1bmMpIHtcclxuICAgIC8vIGFjY2VwdCBhcnJheSBvciBwbGFpbiBhcmdzXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgYXJnID09IFwibnVtYmVyXCIpXHJcbiAgICAgICAgYXJnID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcclxuICAgICAgcmV0dXJuIGNvbnZlcnNpb25zW2Z1bmNdKGFyZyk7XHJcbiAgICB9XHJcbiAgfSkoZnVuYyk7XHJcblxyXG4gIHZhciBwYWlyID0gLyhcXHcrKTIoXFx3KykvLmV4ZWMoZnVuYyksXHJcbiAgICAgIGZyb20gPSBwYWlyWzFdLFxyXG4gICAgICB0byA9IHBhaXJbMl07XHJcblxyXG4gIC8vIGV4cG9ydCByZ2IyaHNsIGFuZCBbXCJyZ2JcIl1bXCJoc2xcIl1cclxuICBjb252ZXJ0W2Zyb21dID0gY29udmVydFtmcm9tXSB8fCB7fTtcclxuXHJcbiAgY29udmVydFtmcm9tXVt0b10gPSBjb252ZXJ0W2Z1bmNdID0gKGZ1bmN0aW9uKGZ1bmMpIHsgXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgYXJnID09IFwibnVtYmVyXCIpXHJcbiAgICAgICAgYXJnID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcclxuICAgICAgXHJcbiAgICAgIHZhciB2YWwgPSBjb252ZXJzaW9uc1tmdW5jXShhcmcpO1xyXG4gICAgICBpZiAodHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiIHx8IHZhbCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHJldHVybiB2YWw7IC8vIGtleXdvcmRcclxuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIHZhbFtpXSA9IE1hdGgucm91bmQodmFsW2ldKTtcclxuICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuICB9KShmdW5jKTtcclxufVxyXG5cclxuXHJcbi8qIENvbnZlcnRlciBkb2VzIGxhenkgY29udmVyc2lvbiBhbmQgY2FjaGluZyAqL1xyXG52YXIgQ29udmVydGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgIHRoaXMuY29udnMgPSB7fTtcclxufTtcclxuXHJcbi8qIEVpdGhlciBnZXQgdGhlIHZhbHVlcyBmb3IgYSBzcGFjZSBvclxyXG4gIHNldCB0aGUgdmFsdWVzIGZvciBhIHNwYWNlLCBkZXBlbmRpbmcgb24gYXJncyAqL1xyXG5Db252ZXJ0ZXIucHJvdG90eXBlLnJvdXRlU3BhY2UgPSBmdW5jdGlvbihzcGFjZSwgYXJncykge1xyXG4gICB2YXIgdmFsdWVzID0gYXJnc1swXTtcclxuICAgaWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIGNvbG9yLnJnYigpXHJcbiAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlcyhzcGFjZSk7XHJcbiAgIH1cclxuICAgLy8gY29sb3IucmdiKDEwLCAxMCwgMTApXHJcbiAgIGlmICh0eXBlb2YgdmFsdWVzID09IFwibnVtYmVyXCIpIHtcclxuICAgICAgdmFsdWVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7ICAgICAgICBcclxuICAgfVxyXG5cclxuICAgcmV0dXJuIHRoaXMuc2V0VmFsdWVzKHNwYWNlLCB2YWx1ZXMpO1xyXG59O1xyXG4gIFxyXG4vKiBTZXQgdGhlIHZhbHVlcyBmb3IgYSBzcGFjZSwgaW52YWxpZGF0aW5nIGNhY2hlICovXHJcbkNvbnZlcnRlci5wcm90b3R5cGUuc2V0VmFsdWVzID0gZnVuY3Rpb24oc3BhY2UsIHZhbHVlcykge1xyXG4gICB0aGlzLnNwYWNlID0gc3BhY2U7XHJcbiAgIHRoaXMuY29udnMgPSB7fTtcclxuICAgdGhpcy5jb252c1tzcGFjZV0gPSB2YWx1ZXM7XHJcbiAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyogR2V0IHRoZSB2YWx1ZXMgZm9yIGEgc3BhY2UuIElmIHRoZXJlJ3MgYWxyZWFkeVxyXG4gIGEgY29udmVyc2lvbiBmb3IgdGhlIHNwYWNlLCBmZXRjaCBpdCwgb3RoZXJ3aXNlXHJcbiAgY29tcHV0ZSBpdCAqL1xyXG5Db252ZXJ0ZXIucHJvdG90eXBlLmdldFZhbHVlcyA9IGZ1bmN0aW9uKHNwYWNlKSB7XHJcbiAgIHZhciB2YWxzID0gdGhpcy5jb252c1tzcGFjZV07XHJcbiAgIGlmICghdmFscykge1xyXG4gICAgICB2YXIgZnNwYWNlID0gdGhpcy5zcGFjZSxcclxuICAgICAgICAgIGZyb20gPSB0aGlzLmNvbnZzW2ZzcGFjZV07XHJcbiAgICAgIHZhbHMgPSBjb252ZXJ0W2ZzcGFjZV1bc3BhY2VdKGZyb20pO1xyXG5cclxuICAgICAgdGhpcy5jb252c1tzcGFjZV0gPSB2YWxzO1xyXG4gICB9XHJcbiAgcmV0dXJuIHZhbHM7XHJcbn07XHJcblxyXG5bXCJyZ2JcIiwgXCJoc2xcIiwgXCJoc3ZcIiwgXCJjbXlrXCIsIFwia2V5d29yZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHNwYWNlKSB7XHJcbiAgIENvbnZlcnRlci5wcm90b3R5cGVbc3BhY2VdID0gZnVuY3Rpb24odmFscykge1xyXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVNwYWNlKHNwYWNlLCBhcmd1bWVudHMpO1xyXG4gICB9XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0O1xyXG59LHtcIjRcIjo0fV0sNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0J1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0XCJhbGljZWJsdWVcIjogWzI0MCwgMjQ4LCAyNTVdLFxyXG5cdFwiYW50aXF1ZXdoaXRlXCI6IFsyNTAsIDIzNSwgMjE1XSxcclxuXHRcImFxdWFcIjogWzAsIDI1NSwgMjU1XSxcclxuXHRcImFxdWFtYXJpbmVcIjogWzEyNywgMjU1LCAyMTJdLFxyXG5cdFwiYXp1cmVcIjogWzI0MCwgMjU1LCAyNTVdLFxyXG5cdFwiYmVpZ2VcIjogWzI0NSwgMjQ1LCAyMjBdLFxyXG5cdFwiYmlzcXVlXCI6IFsyNTUsIDIyOCwgMTk2XSxcclxuXHRcImJsYWNrXCI6IFswLCAwLCAwXSxcclxuXHRcImJsYW5jaGVkYWxtb25kXCI6IFsyNTUsIDIzNSwgMjA1XSxcclxuXHRcImJsdWVcIjogWzAsIDAsIDI1NV0sXHJcblx0XCJibHVldmlvbGV0XCI6IFsxMzgsIDQzLCAyMjZdLFxyXG5cdFwiYnJvd25cIjogWzE2NSwgNDIsIDQyXSxcclxuXHRcImJ1cmx5d29vZFwiOiBbMjIyLCAxODQsIDEzNV0sXHJcblx0XCJjYWRldGJsdWVcIjogWzk1LCAxNTgsIDE2MF0sXHJcblx0XCJjaGFydHJldXNlXCI6IFsxMjcsIDI1NSwgMF0sXHJcblx0XCJjaG9jb2xhdGVcIjogWzIxMCwgMTA1LCAzMF0sXHJcblx0XCJjb3JhbFwiOiBbMjU1LCAxMjcsIDgwXSxcclxuXHRcImNvcm5mbG93ZXJibHVlXCI6IFsxMDAsIDE0OSwgMjM3XSxcclxuXHRcImNvcm5zaWxrXCI6IFsyNTUsIDI0OCwgMjIwXSxcclxuXHRcImNyaW1zb25cIjogWzIyMCwgMjAsIDYwXSxcclxuXHRcImN5YW5cIjogWzAsIDI1NSwgMjU1XSxcclxuXHRcImRhcmtibHVlXCI6IFswLCAwLCAxMzldLFxyXG5cdFwiZGFya2N5YW5cIjogWzAsIDEzOSwgMTM5XSxcclxuXHRcImRhcmtnb2xkZW5yb2RcIjogWzE4NCwgMTM0LCAxMV0sXHJcblx0XCJkYXJrZ3JheVwiOiBbMTY5LCAxNjksIDE2OV0sXHJcblx0XCJkYXJrZ3JlZW5cIjogWzAsIDEwMCwgMF0sXHJcblx0XCJkYXJrZ3JleVwiOiBbMTY5LCAxNjksIDE2OV0sXHJcblx0XCJkYXJra2hha2lcIjogWzE4OSwgMTgzLCAxMDddLFxyXG5cdFwiZGFya21hZ2VudGFcIjogWzEzOSwgMCwgMTM5XSxcclxuXHRcImRhcmtvbGl2ZWdyZWVuXCI6IFs4NSwgMTA3LCA0N10sXHJcblx0XCJkYXJrb3JhbmdlXCI6IFsyNTUsIDE0MCwgMF0sXHJcblx0XCJkYXJrb3JjaGlkXCI6IFsxNTMsIDUwLCAyMDRdLFxyXG5cdFwiZGFya3JlZFwiOiBbMTM5LCAwLCAwXSxcclxuXHRcImRhcmtzYWxtb25cIjogWzIzMywgMTUwLCAxMjJdLFxyXG5cdFwiZGFya3NlYWdyZWVuXCI6IFsxNDMsIDE4OCwgMTQzXSxcclxuXHRcImRhcmtzbGF0ZWJsdWVcIjogWzcyLCA2MSwgMTM5XSxcclxuXHRcImRhcmtzbGF0ZWdyYXlcIjogWzQ3LCA3OSwgNzldLFxyXG5cdFwiZGFya3NsYXRlZ3JleVwiOiBbNDcsIDc5LCA3OV0sXHJcblx0XCJkYXJrdHVycXVvaXNlXCI6IFswLCAyMDYsIDIwOV0sXHJcblx0XCJkYXJrdmlvbGV0XCI6IFsxNDgsIDAsIDIxMV0sXHJcblx0XCJkZWVwcGlua1wiOiBbMjU1LCAyMCwgMTQ3XSxcclxuXHRcImRlZXBza3libHVlXCI6IFswLCAxOTEsIDI1NV0sXHJcblx0XCJkaW1ncmF5XCI6IFsxMDUsIDEwNSwgMTA1XSxcclxuXHRcImRpbWdyZXlcIjogWzEwNSwgMTA1LCAxMDVdLFxyXG5cdFwiZG9kZ2VyYmx1ZVwiOiBbMzAsIDE0NCwgMjU1XSxcclxuXHRcImZpcmVicmlja1wiOiBbMTc4LCAzNCwgMzRdLFxyXG5cdFwiZmxvcmFsd2hpdGVcIjogWzI1NSwgMjUwLCAyNDBdLFxyXG5cdFwiZm9yZXN0Z3JlZW5cIjogWzM0LCAxMzksIDM0XSxcclxuXHRcImZ1Y2hzaWFcIjogWzI1NSwgMCwgMjU1XSxcclxuXHRcImdhaW5zYm9yb1wiOiBbMjIwLCAyMjAsIDIyMF0sXHJcblx0XCJnaG9zdHdoaXRlXCI6IFsyNDgsIDI0OCwgMjU1XSxcclxuXHRcImdvbGRcIjogWzI1NSwgMjE1LCAwXSxcclxuXHRcImdvbGRlbnJvZFwiOiBbMjE4LCAxNjUsIDMyXSxcclxuXHRcImdyYXlcIjogWzEyOCwgMTI4LCAxMjhdLFxyXG5cdFwiZ3JlZW5cIjogWzAsIDEyOCwgMF0sXHJcblx0XCJncmVlbnllbGxvd1wiOiBbMTczLCAyNTUsIDQ3XSxcclxuXHRcImdyZXlcIjogWzEyOCwgMTI4LCAxMjhdLFxyXG5cdFwiaG9uZXlkZXdcIjogWzI0MCwgMjU1LCAyNDBdLFxyXG5cdFwiaG90cGlua1wiOiBbMjU1LCAxMDUsIDE4MF0sXHJcblx0XCJpbmRpYW5yZWRcIjogWzIwNSwgOTIsIDkyXSxcclxuXHRcImluZGlnb1wiOiBbNzUsIDAsIDEzMF0sXHJcblx0XCJpdm9yeVwiOiBbMjU1LCAyNTUsIDI0MF0sXHJcblx0XCJraGFraVwiOiBbMjQwLCAyMzAsIDE0MF0sXHJcblx0XCJsYXZlbmRlclwiOiBbMjMwLCAyMzAsIDI1MF0sXHJcblx0XCJsYXZlbmRlcmJsdXNoXCI6IFsyNTUsIDI0MCwgMjQ1XSxcclxuXHRcImxhd25ncmVlblwiOiBbMTI0LCAyNTIsIDBdLFxyXG5cdFwibGVtb25jaGlmZm9uXCI6IFsyNTUsIDI1MCwgMjA1XSxcclxuXHRcImxpZ2h0Ymx1ZVwiOiBbMTczLCAyMTYsIDIzMF0sXHJcblx0XCJsaWdodGNvcmFsXCI6IFsyNDAsIDEyOCwgMTI4XSxcclxuXHRcImxpZ2h0Y3lhblwiOiBbMjI0LCAyNTUsIDI1NV0sXHJcblx0XCJsaWdodGdvbGRlbnJvZHllbGxvd1wiOiBbMjUwLCAyNTAsIDIxMF0sXHJcblx0XCJsaWdodGdyYXlcIjogWzIxMSwgMjExLCAyMTFdLFxyXG5cdFwibGlnaHRncmVlblwiOiBbMTQ0LCAyMzgsIDE0NF0sXHJcblx0XCJsaWdodGdyZXlcIjogWzIxMSwgMjExLCAyMTFdLFxyXG5cdFwibGlnaHRwaW5rXCI6IFsyNTUsIDE4MiwgMTkzXSxcclxuXHRcImxpZ2h0c2FsbW9uXCI6IFsyNTUsIDE2MCwgMTIyXSxcclxuXHRcImxpZ2h0c2VhZ3JlZW5cIjogWzMyLCAxNzgsIDE3MF0sXHJcblx0XCJsaWdodHNreWJsdWVcIjogWzEzNSwgMjA2LCAyNTBdLFxyXG5cdFwibGlnaHRzbGF0ZWdyYXlcIjogWzExOSwgMTM2LCAxNTNdLFxyXG5cdFwibGlnaHRzbGF0ZWdyZXlcIjogWzExOSwgMTM2LCAxNTNdLFxyXG5cdFwibGlnaHRzdGVlbGJsdWVcIjogWzE3NiwgMTk2LCAyMjJdLFxyXG5cdFwibGlnaHR5ZWxsb3dcIjogWzI1NSwgMjU1LCAyMjRdLFxyXG5cdFwibGltZVwiOiBbMCwgMjU1LCAwXSxcclxuXHRcImxpbWVncmVlblwiOiBbNTAsIDIwNSwgNTBdLFxyXG5cdFwibGluZW5cIjogWzI1MCwgMjQwLCAyMzBdLFxyXG5cdFwibWFnZW50YVwiOiBbMjU1LCAwLCAyNTVdLFxyXG5cdFwibWFyb29uXCI6IFsxMjgsIDAsIDBdLFxyXG5cdFwibWVkaXVtYXF1YW1hcmluZVwiOiBbMTAyLCAyMDUsIDE3MF0sXHJcblx0XCJtZWRpdW1ibHVlXCI6IFswLCAwLCAyMDVdLFxyXG5cdFwibWVkaXVtb3JjaGlkXCI6IFsxODYsIDg1LCAyMTFdLFxyXG5cdFwibWVkaXVtcHVycGxlXCI6IFsxNDcsIDExMiwgMjE5XSxcclxuXHRcIm1lZGl1bXNlYWdyZWVuXCI6IFs2MCwgMTc5LCAxMTNdLFxyXG5cdFwibWVkaXVtc2xhdGVibHVlXCI6IFsxMjMsIDEwNCwgMjM4XSxcclxuXHRcIm1lZGl1bXNwcmluZ2dyZWVuXCI6IFswLCAyNTAsIDE1NF0sXHJcblx0XCJtZWRpdW10dXJxdW9pc2VcIjogWzcyLCAyMDksIDIwNF0sXHJcblx0XCJtZWRpdW12aW9sZXRyZWRcIjogWzE5OSwgMjEsIDEzM10sXHJcblx0XCJtaWRuaWdodGJsdWVcIjogWzI1LCAyNSwgMTEyXSxcclxuXHRcIm1pbnRjcmVhbVwiOiBbMjQ1LCAyNTUsIDI1MF0sXHJcblx0XCJtaXN0eXJvc2VcIjogWzI1NSwgMjI4LCAyMjVdLFxyXG5cdFwibW9jY2FzaW5cIjogWzI1NSwgMjI4LCAxODFdLFxyXG5cdFwibmF2YWpvd2hpdGVcIjogWzI1NSwgMjIyLCAxNzNdLFxyXG5cdFwibmF2eVwiOiBbMCwgMCwgMTI4XSxcclxuXHRcIm9sZGxhY2VcIjogWzI1MywgMjQ1LCAyMzBdLFxyXG5cdFwib2xpdmVcIjogWzEyOCwgMTI4LCAwXSxcclxuXHRcIm9saXZlZHJhYlwiOiBbMTA3LCAxNDIsIDM1XSxcclxuXHRcIm9yYW5nZVwiOiBbMjU1LCAxNjUsIDBdLFxyXG5cdFwib3JhbmdlcmVkXCI6IFsyNTUsIDY5LCAwXSxcclxuXHRcIm9yY2hpZFwiOiBbMjE4LCAxMTIsIDIxNF0sXHJcblx0XCJwYWxlZ29sZGVucm9kXCI6IFsyMzgsIDIzMiwgMTcwXSxcclxuXHRcInBhbGVncmVlblwiOiBbMTUyLCAyNTEsIDE1Ml0sXHJcblx0XCJwYWxldHVycXVvaXNlXCI6IFsxNzUsIDIzOCwgMjM4XSxcclxuXHRcInBhbGV2aW9sZXRyZWRcIjogWzIxOSwgMTEyLCAxNDddLFxyXG5cdFwicGFwYXlhd2hpcFwiOiBbMjU1LCAyMzksIDIxM10sXHJcblx0XCJwZWFjaHB1ZmZcIjogWzI1NSwgMjE4LCAxODVdLFxyXG5cdFwicGVydVwiOiBbMjA1LCAxMzMsIDYzXSxcclxuXHRcInBpbmtcIjogWzI1NSwgMTkyLCAyMDNdLFxyXG5cdFwicGx1bVwiOiBbMjIxLCAxNjAsIDIyMV0sXHJcblx0XCJwb3dkZXJibHVlXCI6IFsxNzYsIDIyNCwgMjMwXSxcclxuXHRcInB1cnBsZVwiOiBbMTI4LCAwLCAxMjhdLFxyXG5cdFwicmViZWNjYXB1cnBsZVwiOiBbMTAyLCA1MSwgMTUzXSxcclxuXHRcInJlZFwiOiBbMjU1LCAwLCAwXSxcclxuXHRcInJvc3licm93blwiOiBbMTg4LCAxNDMsIDE0M10sXHJcblx0XCJyb3lhbGJsdWVcIjogWzY1LCAxMDUsIDIyNV0sXHJcblx0XCJzYWRkbGVicm93blwiOiBbMTM5LCA2OSwgMTldLFxyXG5cdFwic2FsbW9uXCI6IFsyNTAsIDEyOCwgMTE0XSxcclxuXHRcInNhbmR5YnJvd25cIjogWzI0NCwgMTY0LCA5Nl0sXHJcblx0XCJzZWFncmVlblwiOiBbNDYsIDEzOSwgODddLFxyXG5cdFwic2Vhc2hlbGxcIjogWzI1NSwgMjQ1LCAyMzhdLFxyXG5cdFwic2llbm5hXCI6IFsxNjAsIDgyLCA0NV0sXHJcblx0XCJzaWx2ZXJcIjogWzE5MiwgMTkyLCAxOTJdLFxyXG5cdFwic2t5Ymx1ZVwiOiBbMTM1LCAyMDYsIDIzNV0sXHJcblx0XCJzbGF0ZWJsdWVcIjogWzEwNiwgOTAsIDIwNV0sXHJcblx0XCJzbGF0ZWdyYXlcIjogWzExMiwgMTI4LCAxNDRdLFxyXG5cdFwic2xhdGVncmV5XCI6IFsxMTIsIDEyOCwgMTQ0XSxcclxuXHRcInNub3dcIjogWzI1NSwgMjUwLCAyNTBdLFxyXG5cdFwic3ByaW5nZ3JlZW5cIjogWzAsIDI1NSwgMTI3XSxcclxuXHRcInN0ZWVsYmx1ZVwiOiBbNzAsIDEzMCwgMTgwXSxcclxuXHRcInRhblwiOiBbMjEwLCAxODAsIDE0MF0sXHJcblx0XCJ0ZWFsXCI6IFswLCAxMjgsIDEyOF0sXHJcblx0XCJ0aGlzdGxlXCI6IFsyMTYsIDE5MSwgMjE2XSxcclxuXHRcInRvbWF0b1wiOiBbMjU1LCA5OSwgNzFdLFxyXG5cdFwidHVycXVvaXNlXCI6IFs2NCwgMjI0LCAyMDhdLFxyXG5cdFwidmlvbGV0XCI6IFsyMzgsIDEzMCwgMjM4XSxcclxuXHRcIndoZWF0XCI6IFsyNDUsIDIyMiwgMTc5XSxcclxuXHRcIndoaXRlXCI6IFsyNTUsIDI1NSwgMjU1XSxcclxuXHRcIndoaXRlc21va2VcIjogWzI0NSwgMjQ1LCAyNDVdLFxyXG5cdFwieWVsbG93XCI6IFsyNTUsIDI1NSwgMF0sXHJcblx0XCJ5ZWxsb3dncmVlblwiOiBbMTU0LCAyMDUsIDUwXVxyXG59O1xyXG5cclxufSx7fV0sNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIENoYXJ0XHJcbiAqL1xyXG52YXIgQ2hhcnQgPSByZXF1aXJlKDMwKSgpO1xyXG5cclxuQ2hhcnQuaGVscGVycyA9IHJlcXVpcmUoNDYpO1xyXG5cclxuLy8gQHRvZG8gZGlzcGF0Y2ggdGhlc2UgaGVscGVycyBpbnRvIGFwcHJvcHJpYXRlZCBoZWxwZXJzL2hlbHBlcnMuKiBmaWxlIGFuZCB3cml0ZSB1bml0IHRlc3RzIVxyXG5yZXF1aXJlKDI4KShDaGFydCk7XHJcblxyXG5DaGFydC5BbmltYXRpb24gPSByZXF1aXJlKDIyKTtcclxuQ2hhcnQuYW5pbWF0aW9uU2VydmljZSA9IHJlcXVpcmUoMjMpO1xyXG5DaGFydC5kZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG5DaGFydC5FbGVtZW50ID0gcmVxdWlyZSgyNyk7XHJcbkNoYXJ0LmVsZW1lbnRzID0gcmVxdWlyZSg0MSk7XHJcbkNoYXJ0LkludGVyYWN0aW9uID0gcmVxdWlyZSgyOSk7XHJcbkNoYXJ0LmxheW91dHMgPSByZXF1aXJlKDMxKTtcclxuQ2hhcnQucGxhdGZvcm0gPSByZXF1aXJlKDQ5KTtcclxuQ2hhcnQucGx1Z2lucyA9IHJlcXVpcmUoMzIpO1xyXG5DaGFydC5TY2FsZSA9IHJlcXVpcmUoMzMpO1xyXG5DaGFydC5zY2FsZVNlcnZpY2UgPSByZXF1aXJlKDM0KTtcclxuQ2hhcnQuVGlja3MgPSByZXF1aXJlKDM1KTtcclxuQ2hhcnQuVG9vbHRpcCA9IHJlcXVpcmUoMzYpO1xyXG5cclxucmVxdWlyZSgyNCkoQ2hhcnQpO1xyXG5yZXF1aXJlKDI1KShDaGFydCk7XHJcblxyXG5yZXF1aXJlKDU2KShDaGFydCk7XHJcbnJlcXVpcmUoNTQpKENoYXJ0KTtcclxucmVxdWlyZSg1NSkoQ2hhcnQpO1xyXG5yZXF1aXJlKDU3KShDaGFydCk7XHJcbnJlcXVpcmUoNTgpKENoYXJ0KTtcclxucmVxdWlyZSg1OSkoQ2hhcnQpO1xyXG5cclxuLy8gQ29udHJvbGxlcnMgbXVzdCBiZSBsb2FkZWQgYWZ0ZXIgZWxlbWVudHNcclxuLy8gU2VlIENoYXJ0LmNvcmUuZGF0YXNldENvbnRyb2xsZXIuZGF0YUVsZW1lbnRUeXBlXHJcbnJlcXVpcmUoMTUpKENoYXJ0KTtcclxucmVxdWlyZSgxNikoQ2hhcnQpO1xyXG5yZXF1aXJlKDE3KShDaGFydCk7XHJcbnJlcXVpcmUoMTgpKENoYXJ0KTtcclxucmVxdWlyZSgxOSkoQ2hhcnQpO1xyXG5yZXF1aXJlKDIwKShDaGFydCk7XHJcbnJlcXVpcmUoMjEpKENoYXJ0KTtcclxuXHJcbnJlcXVpcmUoOCkoQ2hhcnQpO1xyXG5yZXF1aXJlKDkpKENoYXJ0KTtcclxucmVxdWlyZSgxMCkoQ2hhcnQpO1xyXG5yZXF1aXJlKDExKShDaGFydCk7XHJcbnJlcXVpcmUoMTIpKENoYXJ0KTtcclxucmVxdWlyZSgxMykoQ2hhcnQpO1xyXG5yZXF1aXJlKDE0KShDaGFydCk7XHJcblxyXG4vLyBMb2FkaW5nIGJ1aWx0LWluIHBsdWdpbnNcclxudmFyIHBsdWdpbnMgPSByZXF1aXJlKDUwKTtcclxuZm9yICh2YXIgayBpbiBwbHVnaW5zKSB7XHJcblx0aWYgKHBsdWdpbnMuaGFzT3duUHJvcGVydHkoaykpIHtcclxuXHRcdENoYXJ0LnBsdWdpbnMucmVnaXN0ZXIocGx1Z2luc1trXSk7XHJcblx0fVxyXG59XHJcblxyXG5DaGFydC5wbGF0Zm9ybS5pbml0aWFsaXplKCk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENoYXJ0O1xyXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuXHR3aW5kb3cuQ2hhcnQgPSBDaGFydDtcclxufVxyXG5cclxuLy8gREVQUkVDQVRJT05TXHJcblxyXG4vKipcclxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIG5vdCBhdmFpbGFibGUgYW55bW9yZVxyXG4gKiBAbmFtZXNwYWNlIENoYXJ0LkxlZ2VuZFxyXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuMS41XHJcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcclxuICogQHByaXZhdGVcclxuICovXHJcbkNoYXJ0LkxlZ2VuZCA9IHBsdWdpbnMubGVnZW5kLl9lbGVtZW50O1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBub3QgYXZhaWxhYmxlIGFueW1vcmVcclxuICogQG5hbWVzcGFjZSBDaGFydC5UaXRsZVxyXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuMS41XHJcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcclxuICogQHByaXZhdGVcclxuICovXHJcbkNoYXJ0LlRpdGxlID0gcGx1Z2lucy50aXRsZS5fZWxlbWVudDtcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIENoYXJ0LnBsdWdpbnMgaW5zdGVhZFxyXG4gKiBAbmFtZXNwYWNlIENoYXJ0LnBsdWdpblNlcnZpY2VcclxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjEuNVxyXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5DaGFydC5wbHVnaW5TZXJ2aWNlID0gQ2hhcnQucGx1Z2lucztcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgaW5oZXJpdGluZyBmcm9tIENoYXJ0LlBsdWdpbmdCYXNlIGhhcyBub1xyXG4gKiBlZmZlY3QsIGluc3RlYWQgc2ltcGx5IGNyZWF0ZS9yZWdpc3RlciBwbHVnaW5zIHZpYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXHJcbiAqIEBpbnRlcmZhY2UgQ2hhcnQuUGx1Z2luQmFzZVxyXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuNS4wXHJcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcclxuICogQHByaXZhdGVcclxuICovXHJcbkNoYXJ0LlBsdWdpbkJhc2UgPSBDaGFydC5FbGVtZW50LmV4dGVuZCh7fSk7XHJcblxyXG4vKipcclxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5oZWxwZXJzLmNhbnZhcyBpbnN0ZWFkLlxyXG4gKiBAbmFtZXNwYWNlIENoYXJ0LmNhbnZhc0hlbHBlcnNcclxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjYuMFxyXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5DaGFydC5jYW52YXNIZWxwZXJzID0gQ2hhcnQuaGVscGVycy5jYW52YXM7XHJcblxyXG4vKipcclxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5sYXlvdXRzIGluc3RlYWQuXHJcbiAqIEBuYW1lc3BhY2UgQ2hhcnQubGF5b3V0U2VydmljZVxyXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuOC4wXHJcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcclxuICogQHByaXZhdGVcclxuICovXHJcbkNoYXJ0LmxheW91dFNlcnZpY2UgPSBDaGFydC5sYXlvdXRzO1xyXG5cclxufSx7XCIxMFwiOjEwLFwiMTFcIjoxMSxcIjEyXCI6MTIsXCIxM1wiOjEzLFwiMTRcIjoxNCxcIjE1XCI6MTUsXCIxNlwiOjE2LFwiMTdcIjoxNyxcIjE4XCI6MTgsXCIxOVwiOjE5LFwiMjBcIjoyMCxcIjIxXCI6MjEsXCIyMlwiOjIyLFwiMjNcIjoyMyxcIjI0XCI6MjQsXCIyNVwiOjI1LFwiMjZcIjoyNixcIjI3XCI6MjcsXCIyOFwiOjI4LFwiMjlcIjoyOSxcIjMwXCI6MzAsXCIzMVwiOjMxLFwiMzJcIjozMixcIjMzXCI6MzMsXCIzNFwiOjM0LFwiMzVcIjozNSxcIjM2XCI6MzYsXCI0MVwiOjQxLFwiNDZcIjo0NixcIjQ5XCI6NDksXCI1MFwiOjUwLFwiNTRcIjo1NCxcIjU1XCI6NTUsXCI1NlwiOjU2LFwiNTdcIjo1NyxcIjU4XCI6NTgsXCI1OVwiOjU5LFwiOFwiOjgsXCI5XCI6OX1dLDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKENoYXJ0KSB7XHJcblxyXG5cdENoYXJ0LkJhciA9IGZ1bmN0aW9uKGNvbnRleHQsIGNvbmZpZykge1xyXG5cdFx0Y29uZmlnLnR5cGUgPSAnYmFyJztcclxuXHJcblx0XHRyZXR1cm4gbmV3IENoYXJ0KGNvbnRleHQsIGNvbmZpZyk7XHJcblx0fTtcclxuXHJcbn07XHJcblxyXG59LHt9XSw5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDaGFydCkge1xyXG5cclxuXHRDaGFydC5CdWJibGUgPSBmdW5jdGlvbihjb250ZXh0LCBjb25maWcpIHtcclxuXHRcdGNvbmZpZy50eXBlID0gJ2J1YmJsZSc7XHJcblx0XHRyZXR1cm4gbmV3IENoYXJ0KGNvbnRleHQsIGNvbmZpZyk7XHJcblx0fTtcclxuXHJcbn07XHJcblxyXG59LHt9XSwxMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ2hhcnQpIHtcclxuXHJcblx0Q2hhcnQuRG91Z2hudXQgPSBmdW5jdGlvbihjb250ZXh0LCBjb25maWcpIHtcclxuXHRcdGNvbmZpZy50eXBlID0gJ2RvdWdobnV0JztcclxuXHJcblx0XHRyZXR1cm4gbmV3IENoYXJ0KGNvbnRleHQsIGNvbmZpZyk7XHJcblx0fTtcclxuXHJcbn07XHJcblxyXG59LHt9XSwxMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ2hhcnQpIHtcclxuXHJcblx0Q2hhcnQuTGluZSA9IGZ1bmN0aW9uKGNvbnRleHQsIGNvbmZpZykge1xyXG5cdFx0Y29uZmlnLnR5cGUgPSAnbGluZSc7XHJcblxyXG5cdFx0cmV0dXJuIG5ldyBDaGFydChjb250ZXh0LCBjb25maWcpO1xyXG5cdH07XHJcblxyXG59O1xyXG5cclxufSx7fV0sMTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKENoYXJ0KSB7XHJcblxyXG5cdENoYXJ0LlBvbGFyQXJlYSA9IGZ1bmN0aW9uKGNvbnRleHQsIGNvbmZpZykge1xyXG5cdFx0Y29uZmlnLnR5cGUgPSAncG9sYXJBcmVhJztcclxuXHJcblx0XHRyZXR1cm4gbmV3IENoYXJ0KGNvbnRleHQsIGNvbmZpZyk7XHJcblx0fTtcclxuXHJcbn07XHJcblxyXG59LHt9XSwxMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ2hhcnQpIHtcclxuXHJcblx0Q2hhcnQuUmFkYXIgPSBmdW5jdGlvbihjb250ZXh0LCBjb25maWcpIHtcclxuXHRcdGNvbmZpZy50eXBlID0gJ3JhZGFyJztcclxuXHJcblx0XHRyZXR1cm4gbmV3IENoYXJ0KGNvbnRleHQsIGNvbmZpZyk7XHJcblx0fTtcclxuXHJcbn07XHJcblxyXG59LHt9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ2hhcnQpIHtcclxuXHRDaGFydC5TY2F0dGVyID0gZnVuY3Rpb24oY29udGV4dCwgY29uZmlnKSB7XHJcblx0XHRjb25maWcudHlwZSA9ICdzY2F0dGVyJztcclxuXHRcdHJldHVybiBuZXcgQ2hhcnQoY29udGV4dCwgY29uZmlnKTtcclxuXHR9O1xyXG59O1xyXG5cclxufSx7fV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKDI2KTtcclxudmFyIGVsZW1lbnRzID0gcmVxdWlyZSg0MSk7XHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Nik7XHJcblxyXG5kZWZhdWx0cy5fc2V0KCdiYXInLCB7XHJcblx0aG92ZXI6IHtcclxuXHRcdG1vZGU6ICdsYWJlbCdcclxuXHR9LFxyXG5cclxuXHRzY2FsZXM6IHtcclxuXHRcdHhBeGVzOiBbe1xyXG5cdFx0XHR0eXBlOiAnY2F0ZWdvcnknLFxyXG5cclxuXHRcdFx0Ly8gU3BlY2lmaWMgdG8gQmFyIENvbnRyb2xsZXJcclxuXHRcdFx0Y2F0ZWdvcnlQZXJjZW50YWdlOiAwLjgsXHJcblx0XHRcdGJhclBlcmNlbnRhZ2U6IDAuOSxcclxuXHJcblx0XHRcdC8vIG9mZnNldCBzZXR0aW5nc1xyXG5cdFx0XHRvZmZzZXQ6IHRydWUsXHJcblxyXG5cdFx0XHQvLyBncmlkIGxpbmUgc2V0dGluZ3NcclxuXHRcdFx0Z3JpZExpbmVzOiB7XHJcblx0XHRcdFx0b2Zmc2V0R3JpZExpbmVzOiB0cnVlXHJcblx0XHRcdH1cclxuXHRcdH1dLFxyXG5cclxuXHRcdHlBeGVzOiBbe1xyXG5cdFx0XHR0eXBlOiAnbGluZWFyJ1xyXG5cdFx0fV1cclxuXHR9XHJcbn0pO1xyXG5cclxuZGVmYXVsdHMuX3NldCgnaG9yaXpvbnRhbEJhcicsIHtcclxuXHRob3Zlcjoge1xyXG5cdFx0bW9kZTogJ2luZGV4JyxcclxuXHRcdGF4aXM6ICd5J1xyXG5cdH0sXHJcblxyXG5cdHNjYWxlczoge1xyXG5cdFx0eEF4ZXM6IFt7XHJcblx0XHRcdHR5cGU6ICdsaW5lYXInLFxyXG5cdFx0XHRwb3NpdGlvbjogJ2JvdHRvbSdcclxuXHRcdH1dLFxyXG5cclxuXHRcdHlBeGVzOiBbe1xyXG5cdFx0XHRwb3NpdGlvbjogJ2xlZnQnLFxyXG5cdFx0XHR0eXBlOiAnY2F0ZWdvcnknLFxyXG5cclxuXHRcdFx0Ly8gU3BlY2lmaWMgdG8gSG9yaXpvbnRhbCBCYXIgQ29udHJvbGxlclxyXG5cdFx0XHRjYXRlZ29yeVBlcmNlbnRhZ2U6IDAuOCxcclxuXHRcdFx0YmFyUGVyY2VudGFnZTogMC45LFxyXG5cclxuXHRcdFx0Ly8gb2Zmc2V0IHNldHRpbmdzXHJcblx0XHRcdG9mZnNldDogdHJ1ZSxcclxuXHJcblx0XHRcdC8vIGdyaWQgbGluZSBzZXR0aW5nc1xyXG5cdFx0XHRncmlkTGluZXM6IHtcclxuXHRcdFx0XHRvZmZzZXRHcmlkTGluZXM6IHRydWVcclxuXHRcdFx0fVxyXG5cdFx0fV1cclxuXHR9LFxyXG5cclxuXHRlbGVtZW50czoge1xyXG5cdFx0cmVjdGFuZ2xlOiB7XHJcblx0XHRcdGJvcmRlclNraXBwZWQ6ICdsZWZ0J1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdHRvb2x0aXBzOiB7XHJcblx0XHRjYWxsYmFja3M6IHtcclxuXHRcdFx0dGl0bGU6IGZ1bmN0aW9uKGl0ZW0sIGRhdGEpIHtcclxuXHRcdFx0XHQvLyBQaWNrIGZpcnN0IHhMYWJlbCBmb3Igbm93XHJcblx0XHRcdFx0dmFyIHRpdGxlID0gJyc7XHJcblxyXG5cdFx0XHRcdGlmIChpdGVtLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdGlmIChpdGVtWzBdLnlMYWJlbCkge1xyXG5cdFx0XHRcdFx0XHR0aXRsZSA9IGl0ZW1bMF0ueUxhYmVsO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChkYXRhLmxhYmVscy5sZW5ndGggPiAwICYmIGl0ZW1bMF0uaW5kZXggPCBkYXRhLmxhYmVscy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0dGl0bGUgPSBkYXRhLmxhYmVsc1tpdGVtWzBdLmluZGV4XTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aXRsZTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdGxhYmVsOiBmdW5jdGlvbihpdGVtLCBkYXRhKSB7XHJcblx0XHRcdFx0dmFyIGRhdGFzZXRMYWJlbCA9IGRhdGEuZGF0YXNldHNbaXRlbS5kYXRhc2V0SW5kZXhdLmxhYmVsIHx8ICcnO1xyXG5cdFx0XHRcdHJldHVybiBkYXRhc2V0TGFiZWwgKyAnOiAnICsgaXRlbS54TGFiZWw7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRtb2RlOiAnaW5kZXgnLFxyXG5cdFx0YXhpczogJ3knXHJcblx0fVxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBDb21wdXRlcyB0aGUgXCJvcHRpbWFsXCIgc2FtcGxlIHNpemUgdG8gbWFpbnRhaW4gYmFycyBlcXVhbGx5IHNpemVkIHdoaWxlIHByZXZlbnRpbmcgb3ZlcmxhcC5cclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGNvbXB1dGVNaW5TYW1wbGVTaXplKHNjYWxlLCBwaXhlbHMpIHtcclxuXHR2YXIgbWluID0gc2NhbGUuaXNIb3Jpem9udGFsKCkgPyBzY2FsZS53aWR0aCA6IHNjYWxlLmhlaWdodDtcclxuXHR2YXIgdGlja3MgPSBzY2FsZS5nZXRUaWNrcygpO1xyXG5cdHZhciBwcmV2LCBjdXJyLCBpLCBpbGVuO1xyXG5cclxuXHRmb3IgKGkgPSAxLCBpbGVuID0gcGl4ZWxzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0bWluID0gTWF0aC5taW4obWluLCBwaXhlbHNbaV0gLSBwaXhlbHNbaSAtIDFdKTtcclxuXHR9XHJcblxyXG5cdGZvciAoaSA9IDAsIGlsZW4gPSB0aWNrcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdGN1cnIgPSBzY2FsZS5nZXRQaXhlbEZvclRpY2soaSk7XHJcblx0XHRtaW4gPSBpID4gMCA/IE1hdGgubWluKG1pbiwgY3VyciAtIHByZXYpIDogbWluO1xyXG5cdFx0cHJldiA9IGN1cnI7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbWluO1xyXG59XHJcblxyXG4vKipcclxuICogQ29tcHV0ZXMgYW4gXCJpZGVhbFwiIGNhdGVnb3J5IGJhc2VkIG9uIHRoZSBhYnNvbHV0ZSBiYXIgdGhpY2tuZXNzIG9yLCBpZiB1bmRlZmluZWQgb3IgbnVsbCxcclxuICogdXNlcyB0aGUgc21hbGxlc3QgaW50ZXJ2YWwgKHNlZSBjb21wdXRlTWluU2FtcGxlU2l6ZSkgdGhhdCBwcmV2ZW50cyBiYXIgb3ZlcmxhcHBpbmcuIFRoaXNcclxuICogbW9kZSBjdXJyZW50bHkgYWx3YXlzIGdlbmVyYXRlcyBiYXJzIGVxdWFsbHkgc2l6ZWQgKHVudGlsIHdlIGludHJvZHVjZSBzY3JpcHRhYmxlIG9wdGlvbnM/KS5cclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMpIHtcclxuXHR2YXIgdGhpY2tuZXNzID0gb3B0aW9ucy5iYXJUaGlja25lc3M7XHJcblx0dmFyIGNvdW50ID0gcnVsZXIuc3RhY2tDb3VudDtcclxuXHR2YXIgY3VyciA9IHJ1bGVyLnBpeGVsc1tpbmRleF07XHJcblx0dmFyIHNpemUsIHJhdGlvO1xyXG5cclxuXHRpZiAoaGVscGVycy5pc051bGxPclVuZGVmKHRoaWNrbmVzcykpIHtcclxuXHRcdHNpemUgPSBydWxlci5taW4gKiBvcHRpb25zLmNhdGVnb3J5UGVyY2VudGFnZTtcclxuXHRcdHJhdGlvID0gb3B0aW9ucy5iYXJQZXJjZW50YWdlO1xyXG5cdH0gZWxzZSB7XHJcblx0XHQvLyBXaGVuIGJhciB0aGlja25lc3MgaXMgZW5mb3JjZWQsIGNhdGVnb3J5IGFuZCBiYXIgcGVyY2VudGFnZXMgYXJlIGlnbm9yZWQuXHJcblx0XHQvLyBOb3RlKFNCKTogd2UgY291bGQgYWRkIHN1cHBvcnQgZm9yIHJlbGF0aXZlIGJhciB0aGlja25lc3MgKGUuZy4gYmFyVGhpY2tuZXNzOiAnNTAlJylcclxuXHRcdC8vIGFuZCBkZXByZWNhdGUgYmFyUGVyY2VudGFnZSBzaW5jZSB0aGlzIHZhbHVlIGlzIGlnbm9yZWQgd2hlbiB0aGlja25lc3MgaXMgYWJzb2x1dGUuXHJcblx0XHRzaXplID0gdGhpY2tuZXNzICogY291bnQ7XHJcblx0XHRyYXRpbyA9IDE7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0Y2h1bms6IHNpemUgLyBjb3VudCxcclxuXHRcdHJhdGlvOiByYXRpbyxcclxuXHRcdHN0YXJ0OiBjdXJyIC0gKHNpemUgLyAyKVxyXG5cdH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb21wdXRlcyBhbiBcIm9wdGltYWxcIiBjYXRlZ29yeSB0aGF0IGdsb2JhbGx5IGFycmFuZ2VzIGJhcnMgc2lkZSBieSBzaWRlIChubyBnYXAgd2hlblxyXG4gKiBwZXJjZW50YWdlIG9wdGlvbnMgYXJlIDEpLCBiYXNlZCBvbiB0aGUgcHJldmlvdXMgYW5kIGZvbGxvd2luZyBjYXRlZ29yaWVzLiBUaGlzIG1vZGVcclxuICogZ2VuZXJhdGVzIGJhcnMgd2l0aCBkaWZmZXJlbnQgd2lkdGhzIHdoZW4gZGF0YSBhcmUgbm90IGV2ZW5seSBzcGFjZWQuXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBjb21wdXRlRmxleENhdGVnb3J5VHJhaXRzKGluZGV4LCBydWxlciwgb3B0aW9ucykge1xyXG5cdHZhciBwaXhlbHMgPSBydWxlci5waXhlbHM7XHJcblx0dmFyIGN1cnIgPSBwaXhlbHNbaW5kZXhdO1xyXG5cdHZhciBwcmV2ID0gaW5kZXggPiAwID8gcGl4ZWxzW2luZGV4IC0gMV0gOiBudWxsO1xyXG5cdHZhciBuZXh0ID0gaW5kZXggPCBwaXhlbHMubGVuZ3RoIC0gMSA/IHBpeGVsc1tpbmRleCArIDFdIDogbnVsbDtcclxuXHR2YXIgcGVyY2VudCA9IG9wdGlvbnMuY2F0ZWdvcnlQZXJjZW50YWdlO1xyXG5cdHZhciBzdGFydCwgc2l6ZTtcclxuXHJcblx0aWYgKHByZXYgPT09IG51bGwpIHtcclxuXHRcdC8vIGZpcnN0IGRhdGE6IGl0cyBzaXplIGlzIGRvdWJsZSBiYXNlZCBvbiB0aGUgbmV4dCBwb2ludCBvcixcclxuXHRcdC8vIGlmIGl0J3MgYWxzbyB0aGUgbGFzdCBkYXRhLCB3ZSB1c2UgdGhlIHNjYWxlIGVuZCBleHRyZW1pdHkuXHJcblx0XHRwcmV2ID0gY3VyciAtIChuZXh0ID09PSBudWxsID8gcnVsZXIuZW5kIC0gY3VyciA6IG5leHQgLSBjdXJyKTtcclxuXHR9XHJcblxyXG5cdGlmIChuZXh0ID09PSBudWxsKSB7XHJcblx0XHQvLyBsYXN0IGRhdGE6IGl0cyBzaXplIGlzIGFsc28gZG91YmxlIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBwb2ludC5cclxuXHRcdG5leHQgPSBjdXJyICsgY3VyciAtIHByZXY7XHJcblx0fVxyXG5cclxuXHRzdGFydCA9IGN1cnIgLSAoKGN1cnIgLSBwcmV2KSAvIDIpICogcGVyY2VudDtcclxuXHRzaXplID0gKChuZXh0IC0gcHJldikgLyAyKSAqIHBlcmNlbnQ7XHJcblxyXG5cdHJldHVybiB7XHJcblx0XHRjaHVuazogc2l6ZSAvIHJ1bGVyLnN0YWNrQ291bnQsXHJcblx0XHRyYXRpbzogb3B0aW9ucy5iYXJQZXJjZW50YWdlLFxyXG5cdFx0c3RhcnQ6IHN0YXJ0XHJcblx0fTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDaGFydCkge1xyXG5cclxuXHRDaGFydC5jb250cm9sbGVycy5iYXIgPSBDaGFydC5EYXRhc2V0Q29udHJvbGxlci5leHRlbmQoe1xyXG5cclxuXHRcdGRhdGFFbGVtZW50VHlwZTogZWxlbWVudHMuUmVjdGFuZ2xlLFxyXG5cclxuXHRcdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgbWV0YTtcclxuXHJcblx0XHRcdENoYXJ0LkRhdGFzZXRDb250cm9sbGVyLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KG1lLCBhcmd1bWVudHMpO1xyXG5cclxuXHRcdFx0bWV0YSA9IG1lLmdldE1ldGEoKTtcclxuXHRcdFx0bWV0YS5zdGFjayA9IG1lLmdldERhdGFzZXQoKS5zdGFjaztcclxuXHRcdFx0bWV0YS5iYXIgPSB0cnVlO1xyXG5cdFx0fSxcclxuXHJcblx0XHR1cGRhdGU6IGZ1bmN0aW9uKHJlc2V0KSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciByZWN0cyA9IG1lLmdldE1ldGEoKS5kYXRhO1xyXG5cdFx0XHR2YXIgaSwgaWxlbjtcclxuXHJcblx0XHRcdG1lLl9ydWxlciA9IG1lLmdldFJ1bGVyKCk7XHJcblxyXG5cdFx0XHRmb3IgKGkgPSAwLCBpbGVuID0gcmVjdHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRcdFx0bWUudXBkYXRlRWxlbWVudChyZWN0c1tpXSwgaSwgcmVzZXQpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdHVwZGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKHJlY3RhbmdsZSwgaW5kZXgsIHJlc2V0KSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBjaGFydCA9IG1lLmNoYXJ0O1xyXG5cdFx0XHR2YXIgbWV0YSA9IG1lLmdldE1ldGEoKTtcclxuXHRcdFx0dmFyIGRhdGFzZXQgPSBtZS5nZXREYXRhc2V0KCk7XHJcblx0XHRcdHZhciBjdXN0b20gPSByZWN0YW5nbGUuY3VzdG9tIHx8IHt9O1xyXG5cdFx0XHR2YXIgcmVjdGFuZ2xlT3B0aW9ucyA9IGNoYXJ0Lm9wdGlvbnMuZWxlbWVudHMucmVjdGFuZ2xlO1xyXG5cclxuXHRcdFx0cmVjdGFuZ2xlLl94U2NhbGUgPSBtZS5nZXRTY2FsZUZvcklkKG1ldGEueEF4aXNJRCk7XHJcblx0XHRcdHJlY3RhbmdsZS5feVNjYWxlID0gbWUuZ2V0U2NhbGVGb3JJZChtZXRhLnlBeGlzSUQpO1xyXG5cdFx0XHRyZWN0YW5nbGUuX2RhdGFzZXRJbmRleCA9IG1lLmluZGV4O1xyXG5cdFx0XHRyZWN0YW5nbGUuX2luZGV4ID0gaW5kZXg7XHJcblxyXG5cdFx0XHRyZWN0YW5nbGUuX21vZGVsID0ge1xyXG5cdFx0XHRcdGRhdGFzZXRMYWJlbDogZGF0YXNldC5sYWJlbCxcclxuXHRcdFx0XHRsYWJlbDogY2hhcnQuZGF0YS5sYWJlbHNbaW5kZXhdLFxyXG5cdFx0XHRcdGJvcmRlclNraXBwZWQ6IGN1c3RvbS5ib3JkZXJTa2lwcGVkID8gY3VzdG9tLmJvcmRlclNraXBwZWQgOiByZWN0YW5nbGVPcHRpb25zLmJvcmRlclNraXBwZWQsXHJcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBjdXN0b20uYmFja2dyb3VuZENvbG9yID8gY3VzdG9tLmJhY2tncm91bmRDb2xvciA6IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0KGRhdGFzZXQuYmFja2dyb3VuZENvbG9yLCBpbmRleCwgcmVjdGFuZ2xlT3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpLFxyXG5cdFx0XHRcdGJvcmRlckNvbG9yOiBjdXN0b20uYm9yZGVyQ29sb3IgPyBjdXN0b20uYm9yZGVyQ29sb3IgOiBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChkYXRhc2V0LmJvcmRlckNvbG9yLCBpbmRleCwgcmVjdGFuZ2xlT3B0aW9ucy5ib3JkZXJDb2xvciksXHJcblx0XHRcdFx0Ym9yZGVyV2lkdGg6IGN1c3RvbS5ib3JkZXJXaWR0aCA/IGN1c3RvbS5ib3JkZXJXaWR0aCA6IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0KGRhdGFzZXQuYm9yZGVyV2lkdGgsIGluZGV4LCByZWN0YW5nbGVPcHRpb25zLmJvcmRlcldpZHRoKVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0bWUudXBkYXRlRWxlbWVudEdlb21ldHJ5KHJlY3RhbmdsZSwgaW5kZXgsIHJlc2V0KTtcclxuXHJcblx0XHRcdHJlY3RhbmdsZS5waXZvdCgpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdHVwZGF0ZUVsZW1lbnRHZW9tZXRyeTogZnVuY3Rpb24ocmVjdGFuZ2xlLCBpbmRleCwgcmVzZXQpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIG1vZGVsID0gcmVjdGFuZ2xlLl9tb2RlbDtcclxuXHRcdFx0dmFyIHZzY2FsZSA9IG1lLmdldFZhbHVlU2NhbGUoKTtcclxuXHRcdFx0dmFyIGJhc2UgPSB2c2NhbGUuZ2V0QmFzZVBpeGVsKCk7XHJcblx0XHRcdHZhciBob3Jpem9udGFsID0gdnNjYWxlLmlzSG9yaXpvbnRhbCgpO1xyXG5cdFx0XHR2YXIgcnVsZXIgPSBtZS5fcnVsZXIgfHwgbWUuZ2V0UnVsZXIoKTtcclxuXHRcdFx0dmFyIHZwaXhlbHMgPSBtZS5jYWxjdWxhdGVCYXJWYWx1ZVBpeGVscyhtZS5pbmRleCwgaW5kZXgpO1xyXG5cdFx0XHR2YXIgaXBpeGVscyA9IG1lLmNhbGN1bGF0ZUJhckluZGV4UGl4ZWxzKG1lLmluZGV4LCBpbmRleCwgcnVsZXIpO1xyXG5cclxuXHRcdFx0bW9kZWwuaG9yaXpvbnRhbCA9IGhvcml6b250YWw7XHJcblx0XHRcdG1vZGVsLmJhc2UgPSByZXNldCA/IGJhc2UgOiB2cGl4ZWxzLmJhc2U7XHJcblx0XHRcdG1vZGVsLnggPSBob3Jpem9udGFsID8gcmVzZXQgPyBiYXNlIDogdnBpeGVscy5oZWFkIDogaXBpeGVscy5jZW50ZXI7XHJcblx0XHRcdG1vZGVsLnkgPSBob3Jpem9udGFsID8gaXBpeGVscy5jZW50ZXIgOiByZXNldCA/IGJhc2UgOiB2cGl4ZWxzLmhlYWQ7XHJcblx0XHRcdG1vZGVsLmhlaWdodCA9IGhvcml6b250YWwgPyBpcGl4ZWxzLnNpemUgOiB1bmRlZmluZWQ7XHJcblx0XHRcdG1vZGVsLndpZHRoID0gaG9yaXpvbnRhbCA/IHVuZGVmaW5lZCA6IGlwaXhlbHMuc2l6ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRnZXRWYWx1ZVNjYWxlSWQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRNZXRhKCkueUF4aXNJRDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRnZXRJbmRleFNjYWxlSWQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRNZXRhKCkueEF4aXNJRDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRnZXRWYWx1ZVNjYWxlOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0U2NhbGVGb3JJZCh0aGlzLmdldFZhbHVlU2NhbGVJZCgpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRnZXRJbmRleFNjYWxlOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0U2NhbGVGb3JJZCh0aGlzLmdldEluZGV4U2NhbGVJZCgpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZXR1cm5zIHRoZSBzdGFja3MgYmFzZWQgb24gZ3JvdXBzIGFuZCBiYXIgdmlzaWJpbGl0eS5cclxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSBbbGFzdF0gLSBUaGUgZGF0YXNldCBpbmRleFxyXG5cdFx0ICogQHJldHVybnMge0FycmF5fSBUaGUgc3RhY2sgbGlzdFxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0X2dldFN0YWNrczogZnVuY3Rpb24obGFzdCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgY2hhcnQgPSBtZS5jaGFydDtcclxuXHRcdFx0dmFyIHNjYWxlID0gbWUuZ2V0SW5kZXhTY2FsZSgpO1xyXG5cdFx0XHR2YXIgc3RhY2tlZCA9IHNjYWxlLm9wdGlvbnMuc3RhY2tlZDtcclxuXHRcdFx0dmFyIGlsZW4gPSBsYXN0ID09PSB1bmRlZmluZWQgPyBjaGFydC5kYXRhLmRhdGFzZXRzLmxlbmd0aCA6IGxhc3QgKyAxO1xyXG5cdFx0XHR2YXIgc3RhY2tzID0gW107XHJcblx0XHRcdHZhciBpLCBtZXRhO1xyXG5cclxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHRcdG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcclxuXHRcdFx0XHRpZiAobWV0YS5iYXIgJiYgY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSAmJlxyXG5cdFx0XHRcdFx0KHN0YWNrZWQgPT09IGZhbHNlIHx8XHJcblx0XHRcdFx0XHQoc3RhY2tlZCA9PT0gdHJ1ZSAmJiBzdGFja3MuaW5kZXhPZihtZXRhLnN0YWNrKSA9PT0gLTEpIHx8XHJcblx0XHRcdFx0XHQoc3RhY2tlZCA9PT0gdW5kZWZpbmVkICYmIChtZXRhLnN0YWNrID09PSB1bmRlZmluZWQgfHwgc3RhY2tzLmluZGV4T2YobWV0YS5zdGFjaykgPT09IC0xKSkpKSB7XHJcblx0XHRcdFx0XHRzdGFja3MucHVzaChtZXRhLnN0YWNrKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBzdGFja3M7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmV0dXJucyB0aGUgZWZmZWN0aXZlIG51bWJlciBvZiBzdGFja3MgYmFzZWQgb24gZ3JvdXBzIGFuZCBiYXIgdmlzaWJpbGl0eS5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdGdldFN0YWNrQ291bnQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0U3RhY2tzKCkubGVuZ3RoO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJldHVybnMgdGhlIHN0YWNrIGluZGV4IGZvciB0aGUgZ2l2ZW4gZGF0YXNldCBiYXNlZCBvbiBncm91cHMgYW5kIGJhciB2aXNpYmlsaXR5LlxyXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IFtkYXRhc2V0SW5kZXhdIC0gVGhlIGRhdGFzZXQgaW5kZXhcclxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZV0gLSBUaGUgc3RhY2sgbmFtZSB0byBmaW5kXHJcblx0XHQgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgc3RhY2sgaW5kZXhcclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdGdldFN0YWNrSW5kZXg6IGZ1bmN0aW9uKGRhdGFzZXRJbmRleCwgbmFtZSkge1xyXG5cdFx0XHR2YXIgc3RhY2tzID0gdGhpcy5fZ2V0U3RhY2tzKGRhdGFzZXRJbmRleCk7XHJcblx0XHRcdHZhciBpbmRleCA9IChuYW1lICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0PyBzdGFja3MuaW5kZXhPZihuYW1lKVxyXG5cdFx0XHRcdDogLTE7IC8vIGluZGV4T2YgcmV0dXJucyAtMSBpZiBlbGVtZW50IGlzIG5vdCBwcmVzZW50XHJcblxyXG5cdFx0XHRyZXR1cm4gKGluZGV4ID09PSAtMSlcclxuXHRcdFx0XHQ/IHN0YWNrcy5sZW5ndGggLSAxXHJcblx0XHRcdFx0OiBpbmRleDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRnZXRSdWxlcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBzY2FsZSA9IG1lLmdldEluZGV4U2NhbGUoKTtcclxuXHRcdFx0dmFyIHN0YWNrQ291bnQgPSBtZS5nZXRTdGFja0NvdW50KCk7XHJcblx0XHRcdHZhciBkYXRhc2V0SW5kZXggPSBtZS5pbmRleDtcclxuXHRcdFx0dmFyIGlzSG9yaXpvbnRhbCA9IHNjYWxlLmlzSG9yaXpvbnRhbCgpO1xyXG5cdFx0XHR2YXIgc3RhcnQgPSBpc0hvcml6b250YWwgPyBzY2FsZS5sZWZ0IDogc2NhbGUudG9wO1xyXG5cdFx0XHR2YXIgZW5kID0gc3RhcnQgKyAoaXNIb3Jpem9udGFsID8gc2NhbGUud2lkdGggOiBzY2FsZS5oZWlnaHQpO1xyXG5cdFx0XHR2YXIgcGl4ZWxzID0gW107XHJcblx0XHRcdHZhciBpLCBpbGVuLCBtaW47XHJcblxyXG5cdFx0XHRmb3IgKGkgPSAwLCBpbGVuID0gbWUuZ2V0TWV0YSgpLmRhdGEubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRcdFx0cGl4ZWxzLnB1c2goc2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShudWxsLCBpLCBkYXRhc2V0SW5kZXgpKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bWluID0gaGVscGVycy5pc051bGxPclVuZGVmKHNjYWxlLm9wdGlvbnMuYmFyVGhpY2tuZXNzKVxyXG5cdFx0XHRcdD8gY29tcHV0ZU1pblNhbXBsZVNpemUoc2NhbGUsIHBpeGVscylcclxuXHRcdFx0XHQ6IC0xO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRtaW46IG1pbixcclxuXHRcdFx0XHRwaXhlbHM6IHBpeGVscyxcclxuXHRcdFx0XHRzdGFydDogc3RhcnQsXHJcblx0XHRcdFx0ZW5kOiBlbmQsXHJcblx0XHRcdFx0c3RhY2tDb3VudDogc3RhY2tDb3VudCxcclxuXHRcdFx0XHRzY2FsZTogc2NhbGVcclxuXHRcdFx0fTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBOb3RlOiBwaXhlbCB2YWx1ZXMgYXJlIG5vdCBjbGFtcGVkIHRvIHRoZSBzY2FsZSBhcmVhLlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0Y2FsY3VsYXRlQmFyVmFsdWVQaXhlbHM6IGZ1bmN0aW9uKGRhdGFzZXRJbmRleCwgaW5kZXgpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XHJcblx0XHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xyXG5cdFx0XHR2YXIgc2NhbGUgPSBtZS5nZXRWYWx1ZVNjYWxlKCk7XHJcblx0XHRcdHZhciBkYXRhc2V0cyA9IGNoYXJ0LmRhdGEuZGF0YXNldHM7XHJcblx0XHRcdHZhciB2YWx1ZSA9IHNjYWxlLmdldFJpZ2h0VmFsdWUoZGF0YXNldHNbZGF0YXNldEluZGV4XS5kYXRhW2luZGV4XSk7XHJcblx0XHRcdHZhciBzdGFja2VkID0gc2NhbGUub3B0aW9ucy5zdGFja2VkO1xyXG5cdFx0XHR2YXIgc3RhY2sgPSBtZXRhLnN0YWNrO1xyXG5cdFx0XHR2YXIgc3RhcnQgPSAwO1xyXG5cdFx0XHR2YXIgaSwgaW1ldGEsIGl2YWx1ZSwgYmFzZSwgaGVhZCwgc2l6ZTtcclxuXHJcblx0XHRcdGlmIChzdGFja2VkIHx8IChzdGFja2VkID09PSB1bmRlZmluZWQgJiYgc3RhY2sgIT09IHVuZGVmaW5lZCkpIHtcclxuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YXNldEluZGV4OyArK2kpIHtcclxuXHRcdFx0XHRcdGltZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoaSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGltZXRhLmJhciAmJlxyXG5cdFx0XHRcdFx0XHRpbWV0YS5zdGFjayA9PT0gc3RhY2sgJiZcclxuXHRcdFx0XHRcdFx0aW1ldGEuY29udHJvbGxlci5nZXRWYWx1ZVNjYWxlSWQoKSA9PT0gc2NhbGUuaWQgJiZcclxuXHRcdFx0XHRcdFx0Y2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSkge1xyXG5cclxuXHRcdFx0XHRcdFx0aXZhbHVlID0gc2NhbGUuZ2V0UmlnaHRWYWx1ZShkYXRhc2V0c1tpXS5kYXRhW2luZGV4XSk7XHJcblx0XHRcdFx0XHRcdGlmICgodmFsdWUgPCAwICYmIGl2YWx1ZSA8IDApIHx8ICh2YWx1ZSA+PSAwICYmIGl2YWx1ZSA+IDApKSB7XHJcblx0XHRcdFx0XHRcdFx0c3RhcnQgKz0gaXZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRiYXNlID0gc2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShzdGFydCk7XHJcblx0XHRcdGhlYWQgPSBzY2FsZS5nZXRQaXhlbEZvclZhbHVlKHN0YXJ0ICsgdmFsdWUpO1xyXG5cdFx0XHRzaXplID0gKGhlYWQgLSBiYXNlKSAvIDI7XHJcblxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHNpemU6IHNpemUsXHJcblx0XHRcdFx0YmFzZTogYmFzZSxcclxuXHRcdFx0XHRoZWFkOiBoZWFkLFxyXG5cdFx0XHRcdGNlbnRlcjogaGVhZCArIHNpemUgLyAyXHJcblx0XHRcdH07XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0Y2FsY3VsYXRlQmFySW5kZXhQaXhlbHM6IGZ1bmN0aW9uKGRhdGFzZXRJbmRleCwgaW5kZXgsIHJ1bGVyKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBvcHRpb25zID0gcnVsZXIuc2NhbGUub3B0aW9ucztcclxuXHRcdFx0dmFyIHJhbmdlID0gb3B0aW9ucy5iYXJUaGlja25lc3MgPT09ICdmbGV4J1xyXG5cdFx0XHRcdD8gY29tcHV0ZUZsZXhDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMpXHJcblx0XHRcdFx0OiBjb21wdXRlRml0Q2F0ZWdvcnlUcmFpdHMoaW5kZXgsIHJ1bGVyLCBvcHRpb25zKTtcclxuXHJcblx0XHRcdHZhciBzdGFja0luZGV4ID0gbWUuZ2V0U3RhY2tJbmRleChkYXRhc2V0SW5kZXgsIG1lLmdldE1ldGEoKS5zdGFjayk7XHJcblx0XHRcdHZhciBjZW50ZXIgPSByYW5nZS5zdGFydCArIChyYW5nZS5jaHVuayAqIHN0YWNrSW5kZXgpICsgKHJhbmdlLmNodW5rIC8gMik7XHJcblx0XHRcdHZhciBzaXplID0gTWF0aC5taW4oXHJcblx0XHRcdFx0aGVscGVycy52YWx1ZU9yRGVmYXVsdChvcHRpb25zLm1heEJhclRoaWNrbmVzcywgSW5maW5pdHkpLFxyXG5cdFx0XHRcdHJhbmdlLmNodW5rICogcmFuZ2UucmF0aW8pO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRiYXNlOiBjZW50ZXIgLSBzaXplIC8gMixcclxuXHRcdFx0XHRoZWFkOiBjZW50ZXIgKyBzaXplIC8gMixcclxuXHRcdFx0XHRjZW50ZXI6IGNlbnRlcixcclxuXHRcdFx0XHRzaXplOiBzaXplXHJcblx0XHRcdH07XHJcblx0XHR9LFxyXG5cclxuXHRcdGRyYXc6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgY2hhcnQgPSBtZS5jaGFydDtcclxuXHRcdFx0dmFyIHNjYWxlID0gbWUuZ2V0VmFsdWVTY2FsZSgpO1xyXG5cdFx0XHR2YXIgcmVjdHMgPSBtZS5nZXRNZXRhKCkuZGF0YTtcclxuXHRcdFx0dmFyIGRhdGFzZXQgPSBtZS5nZXREYXRhc2V0KCk7XHJcblx0XHRcdHZhciBpbGVuID0gcmVjdHMubGVuZ3RoO1xyXG5cdFx0XHR2YXIgaSA9IDA7XHJcblxyXG5cdFx0XHRoZWxwZXJzLmNhbnZhcy5jbGlwQXJlYShjaGFydC5jdHgsIGNoYXJ0LmNoYXJ0QXJlYSk7XHJcblxyXG5cdFx0XHRmb3IgKDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHRcdGlmICghaXNOYU4oc2NhbGUuZ2V0UmlnaHRWYWx1ZShkYXRhc2V0LmRhdGFbaV0pKSkge1xyXG5cdFx0XHRcdFx0cmVjdHNbaV0uZHJhdygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aGVscGVycy5jYW52YXMudW5jbGlwQXJlYShjaGFydC5jdHgpO1xyXG5cdFx0fSxcclxuXHR9KTtcclxuXHJcblx0Q2hhcnQuY29udHJvbGxlcnMuaG9yaXpvbnRhbEJhciA9IENoYXJ0LmNvbnRyb2xsZXJzLmJhci5leHRlbmQoe1xyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRnZXRWYWx1ZVNjYWxlSWQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRNZXRhKCkueEF4aXNJRDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRnZXRJbmRleFNjYWxlSWQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRNZXRhKCkueUF4aXNJRDtcclxuXHRcdH1cclxuXHR9KTtcclxufTtcclxuXHJcbn0se1wiMjZcIjoyNixcIjQxXCI6NDEsXCI0NlwiOjQ2fV0sMTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKDI2KTtcclxudmFyIGVsZW1lbnRzID0gcmVxdWlyZSg0MSk7XHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Nik7XHJcblxyXG5kZWZhdWx0cy5fc2V0KCdidWJibGUnLCB7XHJcblx0aG92ZXI6IHtcclxuXHRcdG1vZGU6ICdzaW5nbGUnXHJcblx0fSxcclxuXHJcblx0c2NhbGVzOiB7XHJcblx0XHR4QXhlczogW3tcclxuXHRcdFx0dHlwZTogJ2xpbmVhcicsIC8vIGJ1YmJsZSBzaG91bGQgcHJvYmFibHkgdXNlIGEgbGluZWFyIHNjYWxlIGJ5IGRlZmF1bHRcclxuXHRcdFx0cG9zaXRpb246ICdib3R0b20nLFxyXG5cdFx0XHRpZDogJ3gtYXhpcy0wJyAvLyBuZWVkIGFuIElEIHNvIGRhdGFzZXRzIGNhbiByZWZlcmVuY2UgdGhlIHNjYWxlXHJcblx0XHR9XSxcclxuXHRcdHlBeGVzOiBbe1xyXG5cdFx0XHR0eXBlOiAnbGluZWFyJyxcclxuXHRcdFx0cG9zaXRpb246ICdsZWZ0JyxcclxuXHRcdFx0aWQ6ICd5LWF4aXMtMCdcclxuXHRcdH1dXHJcblx0fSxcclxuXHJcblx0dG9vbHRpcHM6IHtcclxuXHRcdGNhbGxiYWNrczoge1xyXG5cdFx0XHR0aXRsZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0Ly8gVGl0bGUgZG9lc24ndCBtYWtlIHNlbnNlIGZvciBzY2F0dGVyIHNpbmNlIHdlIGZvcm1hdCB0aGUgZGF0YSBhcyBhIHBvaW50XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRsYWJlbDogZnVuY3Rpb24oaXRlbSwgZGF0YSkge1xyXG5cdFx0XHRcdHZhciBkYXRhc2V0TGFiZWwgPSBkYXRhLmRhdGFzZXRzW2l0ZW0uZGF0YXNldEluZGV4XS5sYWJlbCB8fCAnJztcclxuXHRcdFx0XHR2YXIgZGF0YVBvaW50ID0gZGF0YS5kYXRhc2V0c1tpdGVtLmRhdGFzZXRJbmRleF0uZGF0YVtpdGVtLmluZGV4XTtcclxuXHRcdFx0XHRyZXR1cm4gZGF0YXNldExhYmVsICsgJzogKCcgKyBpdGVtLnhMYWJlbCArICcsICcgKyBpdGVtLnlMYWJlbCArICcsICcgKyBkYXRhUG9pbnQuciArICcpJztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDaGFydCkge1xyXG5cclxuXHRDaGFydC5jb250cm9sbGVycy5idWJibGUgPSBDaGFydC5EYXRhc2V0Q29udHJvbGxlci5leHRlbmQoe1xyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJvdGVjdGVkXHJcblx0XHQgKi9cclxuXHRcdGRhdGFFbGVtZW50VHlwZTogZWxlbWVudHMuUG9pbnQsXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJvdGVjdGVkXHJcblx0XHQgKi9cclxuXHRcdHVwZGF0ZTogZnVuY3Rpb24ocmVzZXQpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XHJcblx0XHRcdHZhciBwb2ludHMgPSBtZXRhLmRhdGE7XHJcblxyXG5cdFx0XHQvLyBVcGRhdGUgUG9pbnRzXHJcblx0XHRcdGhlbHBlcnMuZWFjaChwb2ludHMsIGZ1bmN0aW9uKHBvaW50LCBpbmRleCkge1xyXG5cdFx0XHRcdG1lLnVwZGF0ZUVsZW1lbnQocG9pbnQsIGluZGV4LCByZXNldCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwcm90ZWN0ZWRcclxuXHRcdCAqL1xyXG5cdFx0dXBkYXRlRWxlbWVudDogZnVuY3Rpb24ocG9pbnQsIGluZGV4LCByZXNldCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgbWV0YSA9IG1lLmdldE1ldGEoKTtcclxuXHRcdFx0dmFyIGN1c3RvbSA9IHBvaW50LmN1c3RvbSB8fCB7fTtcclxuXHRcdFx0dmFyIHhTY2FsZSA9IG1lLmdldFNjYWxlRm9ySWQobWV0YS54QXhpc0lEKTtcclxuXHRcdFx0dmFyIHlTY2FsZSA9IG1lLmdldFNjYWxlRm9ySWQobWV0YS55QXhpc0lEKTtcclxuXHRcdFx0dmFyIG9wdGlvbnMgPSBtZS5fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKHBvaW50LCBpbmRleCk7XHJcblx0XHRcdHZhciBkYXRhID0gbWUuZ2V0RGF0YXNldCgpLmRhdGFbaW5kZXhdO1xyXG5cdFx0XHR2YXIgZHNJbmRleCA9IG1lLmluZGV4O1xyXG5cclxuXHRcdFx0dmFyIHggPSByZXNldCA/IHhTY2FsZS5nZXRQaXhlbEZvckRlY2ltYWwoMC41KSA6IHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiBOYU4sIGluZGV4LCBkc0luZGV4KTtcclxuXHRcdFx0dmFyIHkgPSByZXNldCA/IHlTY2FsZS5nZXRCYXNlUGl4ZWwoKSA6IHlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGRhdGEsIGluZGV4LCBkc0luZGV4KTtcclxuXHJcblx0XHRcdHBvaW50Ll94U2NhbGUgPSB4U2NhbGU7XHJcblx0XHRcdHBvaW50Ll95U2NhbGUgPSB5U2NhbGU7XHJcblx0XHRcdHBvaW50Ll9vcHRpb25zID0gb3B0aW9ucztcclxuXHRcdFx0cG9pbnQuX2RhdGFzZXRJbmRleCA9IGRzSW5kZXg7XHJcblx0XHRcdHBvaW50Ll9pbmRleCA9IGluZGV4O1xyXG5cdFx0XHRwb2ludC5fbW9kZWwgPSB7XHJcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmJhY2tncm91bmRDb2xvcixcclxuXHRcdFx0XHRib3JkZXJDb2xvcjogb3B0aW9ucy5ib3JkZXJDb2xvcixcclxuXHRcdFx0XHRib3JkZXJXaWR0aDogb3B0aW9ucy5ib3JkZXJXaWR0aCxcclxuXHRcdFx0XHRoaXRSYWRpdXM6IG9wdGlvbnMuaGl0UmFkaXVzLFxyXG5cdFx0XHRcdHBvaW50U3R5bGU6IG9wdGlvbnMucG9pbnRTdHlsZSxcclxuXHRcdFx0XHRyb3RhdGlvbjogb3B0aW9ucy5yb3RhdGlvbixcclxuXHRcdFx0XHRyYWRpdXM6IHJlc2V0ID8gMCA6IG9wdGlvbnMucmFkaXVzLFxyXG5cdFx0XHRcdHNraXA6IGN1c3RvbS5za2lwIHx8IGlzTmFOKHgpIHx8IGlzTmFOKHkpLFxyXG5cdFx0XHRcdHg6IHgsXHJcblx0XHRcdFx0eTogeSxcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdHBvaW50LnBpdm90KCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHByb3RlY3RlZFxyXG5cdFx0ICovXHJcblx0XHRzZXRIb3ZlclN0eWxlOiBmdW5jdGlvbihwb2ludCkge1xyXG5cdFx0XHR2YXIgbW9kZWwgPSBwb2ludC5fbW9kZWw7XHJcblx0XHRcdHZhciBvcHRpb25zID0gcG9pbnQuX29wdGlvbnM7XHJcblx0XHRcdHBvaW50LiRwcmV2aW91c1N0eWxlID0ge1xyXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogbW9kZWwuYmFja2dyb3VuZENvbG9yLFxyXG5cdFx0XHRcdGJvcmRlckNvbG9yOiBtb2RlbC5ib3JkZXJDb2xvcixcclxuXHRcdFx0XHRib3JkZXJXaWR0aDogbW9kZWwuYm9yZGVyV2lkdGgsXHJcblx0XHRcdFx0cmFkaXVzOiBtb2RlbC5yYWRpdXNcclxuXHRcdFx0fTtcclxuXHRcdFx0bW9kZWwuYmFja2dyb3VuZENvbG9yID0gaGVscGVycy52YWx1ZU9yRGVmYXVsdChvcHRpb25zLmhvdmVyQmFja2dyb3VuZENvbG9yLCBoZWxwZXJzLmdldEhvdmVyQ29sb3Iob3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpKTtcclxuXHRcdFx0bW9kZWwuYm9yZGVyQ29sb3IgPSBoZWxwZXJzLnZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuaG92ZXJCb3JkZXJDb2xvciwgaGVscGVycy5nZXRIb3ZlckNvbG9yKG9wdGlvbnMuYm9yZGVyQ29sb3IpKTtcclxuXHRcdFx0bW9kZWwuYm9yZGVyV2lkdGggPSBoZWxwZXJzLnZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuaG92ZXJCb3JkZXJXaWR0aCwgb3B0aW9ucy5ib3JkZXJXaWR0aCk7XHJcblx0XHRcdG1vZGVsLnJhZGl1cyA9IG9wdGlvbnMucmFkaXVzICsgb3B0aW9ucy5ob3ZlclJhZGl1cztcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRfcmVzb2x2ZUVsZW1lbnRPcHRpb25zOiBmdW5jdGlvbihwb2ludCwgaW5kZXgpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XHJcblx0XHRcdHZhciBkYXRhc2V0cyA9IGNoYXJ0LmRhdGEuZGF0YXNldHM7XHJcblx0XHRcdHZhciBkYXRhc2V0ID0gZGF0YXNldHNbbWUuaW5kZXhdO1xyXG5cdFx0XHR2YXIgY3VzdG9tID0gcG9pbnQuY3VzdG9tIHx8IHt9O1xyXG5cdFx0XHR2YXIgb3B0aW9ucyA9IGNoYXJ0Lm9wdGlvbnMuZWxlbWVudHMucG9pbnQ7XHJcblx0XHRcdHZhciByZXNvbHZlID0gaGVscGVycy5vcHRpb25zLnJlc29sdmU7XHJcblx0XHRcdHZhciBkYXRhID0gZGF0YXNldC5kYXRhW2luZGV4XTtcclxuXHRcdFx0dmFyIHZhbHVlcyA9IHt9O1xyXG5cdFx0XHR2YXIgaSwgaWxlbiwga2V5O1xyXG5cclxuXHRcdFx0Ly8gU2NyaXB0YWJsZSBvcHRpb25zXHJcblx0XHRcdHZhciBjb250ZXh0ID0ge1xyXG5cdFx0XHRcdGNoYXJ0OiBjaGFydCxcclxuXHRcdFx0XHRkYXRhSW5kZXg6IGluZGV4LFxyXG5cdFx0XHRcdGRhdGFzZXQ6IGRhdGFzZXQsXHJcblx0XHRcdFx0ZGF0YXNldEluZGV4OiBtZS5pbmRleFxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0dmFyIGtleXMgPSBbXHJcblx0XHRcdFx0J2JhY2tncm91bmRDb2xvcicsXHJcblx0XHRcdFx0J2JvcmRlckNvbG9yJyxcclxuXHRcdFx0XHQnYm9yZGVyV2lkdGgnLFxyXG5cdFx0XHRcdCdob3ZlckJhY2tncm91bmRDb2xvcicsXHJcblx0XHRcdFx0J2hvdmVyQm9yZGVyQ29sb3InLFxyXG5cdFx0XHRcdCdob3ZlckJvcmRlcldpZHRoJyxcclxuXHRcdFx0XHQnaG92ZXJSYWRpdXMnLFxyXG5cdFx0XHRcdCdoaXRSYWRpdXMnLFxyXG5cdFx0XHRcdCdwb2ludFN0eWxlJyxcclxuXHRcdFx0XHQncm90YXRpb24nXHJcblx0XHRcdF07XHJcblxyXG5cdFx0XHRmb3IgKGkgPSAwLCBpbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdFx0XHRrZXkgPSBrZXlzW2ldO1xyXG5cdFx0XHRcdHZhbHVlc1trZXldID0gcmVzb2x2ZShbXHJcblx0XHRcdFx0XHRjdXN0b21ba2V5XSxcclxuXHRcdFx0XHRcdGRhdGFzZXRba2V5XSxcclxuXHRcdFx0XHRcdG9wdGlvbnNba2V5XVxyXG5cdFx0XHRcdF0sIGNvbnRleHQsIGluZGV4KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ3VzdG9tIHJhZGl1cyByZXNvbHV0aW9uXHJcblx0XHRcdHZhbHVlcy5yYWRpdXMgPSByZXNvbHZlKFtcclxuXHRcdFx0XHRjdXN0b20ucmFkaXVzLFxyXG5cdFx0XHRcdGRhdGEgPyBkYXRhLnIgOiB1bmRlZmluZWQsXHJcblx0XHRcdFx0ZGF0YXNldC5yYWRpdXMsXHJcblx0XHRcdFx0b3B0aW9ucy5yYWRpdXNcclxuXHRcdFx0XSwgY29udGV4dCwgaW5kZXgpO1xyXG5cdFx0XHRyZXR1cm4gdmFsdWVzO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG59O1xyXG5cclxufSx7XCIyNlwiOjI2LFwiNDFcIjo0MSxcIjQ2XCI6NDZ9XSwxNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG52YXIgZWxlbWVudHMgPSByZXF1aXJlKDQxKTtcclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxuXHJcbmRlZmF1bHRzLl9zZXQoJ2RvdWdobnV0Jywge1xyXG5cdGFuaW1hdGlvbjoge1xyXG5cdFx0Ly8gQm9vbGVhbiAtIFdoZXRoZXIgd2UgYW5pbWF0ZSB0aGUgcm90YXRpb24gb2YgdGhlIERvdWdobnV0XHJcblx0XHRhbmltYXRlUm90YXRlOiB0cnVlLFxyXG5cdFx0Ly8gQm9vbGVhbiAtIFdoZXRoZXIgd2UgYW5pbWF0ZSBzY2FsaW5nIHRoZSBEb3VnaG51dCBmcm9tIHRoZSBjZW50cmVcclxuXHRcdGFuaW1hdGVTY2FsZTogZmFsc2VcclxuXHR9LFxyXG5cdGhvdmVyOiB7XHJcblx0XHRtb2RlOiAnc2luZ2xlJ1xyXG5cdH0sXHJcblx0bGVnZW5kQ2FsbGJhY2s6IGZ1bmN0aW9uKGNoYXJ0KSB7XHJcblx0XHR2YXIgdGV4dCA9IFtdO1xyXG5cdFx0dGV4dC5wdXNoKCc8dWwgY2xhc3M9XCInICsgY2hhcnQuaWQgKyAnLWxlZ2VuZFwiPicpO1xyXG5cclxuXHRcdHZhciBkYXRhID0gY2hhcnQuZGF0YTtcclxuXHRcdHZhciBkYXRhc2V0cyA9IGRhdGEuZGF0YXNldHM7XHJcblx0XHR2YXIgbGFiZWxzID0gZGF0YS5sYWJlbHM7XHJcblxyXG5cdFx0aWYgKGRhdGFzZXRzLmxlbmd0aCkge1xyXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFzZXRzWzBdLmRhdGEubGVuZ3RoOyArK2kpIHtcclxuXHRcdFx0XHR0ZXh0LnB1c2goJzxsaT48c3BhbiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6JyArIGRhdGFzZXRzWzBdLmJhY2tncm91bmRDb2xvcltpXSArICdcIj48L3NwYW4+Jyk7XHJcblx0XHRcdFx0aWYgKGxhYmVsc1tpXSkge1xyXG5cdFx0XHRcdFx0dGV4dC5wdXNoKGxhYmVsc1tpXSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRleHQucHVzaCgnPC9saT4nKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRleHQucHVzaCgnPC91bD4nKTtcclxuXHRcdHJldHVybiB0ZXh0LmpvaW4oJycpO1xyXG5cdH0sXHJcblx0bGVnZW5kOiB7XHJcblx0XHRsYWJlbHM6IHtcclxuXHRcdFx0Z2VuZXJhdGVMYWJlbHM6IGZ1bmN0aW9uKGNoYXJ0KSB7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSBjaGFydC5kYXRhO1xyXG5cdFx0XHRcdGlmIChkYXRhLmxhYmVscy5sZW5ndGggJiYgZGF0YS5kYXRhc2V0cy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdHJldHVybiBkYXRhLmxhYmVscy5tYXAoZnVuY3Rpb24obGFiZWwsIGkpIHtcclxuXHRcdFx0XHRcdFx0dmFyIG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YSgwKTtcclxuXHRcdFx0XHRcdFx0dmFyIGRzID0gZGF0YS5kYXRhc2V0c1swXTtcclxuXHRcdFx0XHRcdFx0dmFyIGFyYyA9IG1ldGEuZGF0YVtpXTtcclxuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbSA9IGFyYyAmJiBhcmMuY3VzdG9tIHx8IHt9O1xyXG5cdFx0XHRcdFx0XHR2YXIgdmFsdWVBdEluZGV4T3JEZWZhdWx0ID0gaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQ7XHJcblx0XHRcdFx0XHRcdHZhciBhcmNPcHRzID0gY2hhcnQub3B0aW9ucy5lbGVtZW50cy5hcmM7XHJcblx0XHRcdFx0XHRcdHZhciBmaWxsID0gY3VzdG9tLmJhY2tncm91bmRDb2xvciA/IGN1c3RvbS5iYWNrZ3JvdW5kQ29sb3IgOiB2YWx1ZUF0SW5kZXhPckRlZmF1bHQoZHMuYmFja2dyb3VuZENvbG9yLCBpLCBhcmNPcHRzLmJhY2tncm91bmRDb2xvcik7XHJcblx0XHRcdFx0XHRcdHZhciBzdHJva2UgPSBjdXN0b20uYm9yZGVyQ29sb3IgPyBjdXN0b20uYm9yZGVyQ29sb3IgOiB2YWx1ZUF0SW5kZXhPckRlZmF1bHQoZHMuYm9yZGVyQ29sb3IsIGksIGFyY09wdHMuYm9yZGVyQ29sb3IpO1xyXG5cdFx0XHRcdFx0XHR2YXIgYncgPSBjdXN0b20uYm9yZGVyV2lkdGggPyBjdXN0b20uYm9yZGVyV2lkdGggOiB2YWx1ZUF0SW5kZXhPckRlZmF1bHQoZHMuYm9yZGVyV2lkdGgsIGksIGFyY09wdHMuYm9yZGVyV2lkdGgpO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHR0ZXh0OiBsYWJlbCxcclxuXHRcdFx0XHRcdFx0XHRmaWxsU3R5bGU6IGZpbGwsXHJcblx0XHRcdFx0XHRcdFx0c3Ryb2tlU3R5bGU6IHN0cm9rZSxcclxuXHRcdFx0XHRcdFx0XHRsaW5lV2lkdGg6IGJ3LFxyXG5cdFx0XHRcdFx0XHRcdGhpZGRlbjogaXNOYU4oZHMuZGF0YVtpXSkgfHwgbWV0YS5kYXRhW2ldLmhpZGRlbixcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gRXh0cmEgZGF0YSB1c2VkIGZvciB0b2dnbGluZyB0aGUgY29ycmVjdCBpdGVtXHJcblx0XHRcdFx0XHRcdFx0aW5kZXg6IGlcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gW107XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0b25DbGljazogZnVuY3Rpb24oZSwgbGVnZW5kSXRlbSkge1xyXG5cdFx0XHR2YXIgaW5kZXggPSBsZWdlbmRJdGVtLmluZGV4O1xyXG5cdFx0XHR2YXIgY2hhcnQgPSB0aGlzLmNoYXJ0O1xyXG5cdFx0XHR2YXIgaSwgaWxlbiwgbWV0YTtcclxuXHJcblx0XHRcdGZvciAoaSA9IDAsIGlsZW4gPSAoY2hhcnQuZGF0YS5kYXRhc2V0cyB8fCBbXSkubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRcdFx0bWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGkpO1xyXG5cdFx0XHRcdC8vIHRvZ2dsZSB2aXNpYmlsaXR5IG9mIGluZGV4IGlmIGV4aXN0c1xyXG5cdFx0XHRcdGlmIChtZXRhLmRhdGFbaW5kZXhdKSB7XHJcblx0XHRcdFx0XHRtZXRhLmRhdGFbaW5kZXhdLmhpZGRlbiA9ICFtZXRhLmRhdGFbaW5kZXhdLmhpZGRlbjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNoYXJ0LnVwZGF0ZSgpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdC8vIFRoZSBwZXJjZW50YWdlIG9mIHRoZSBjaGFydCB0aGF0IHdlIGN1dCBvdXQgb2YgdGhlIG1pZGRsZS5cclxuXHRjdXRvdXRQZXJjZW50YWdlOiA1MCxcclxuXHJcblx0Ly8gVGhlIHJvdGF0aW9uIG9mIHRoZSBjaGFydCwgd2hlcmUgdGhlIGZpcnN0IGRhdGEgYXJjIGJlZ2lucy5cclxuXHRyb3RhdGlvbjogTWF0aC5QSSAqIC0wLjUsXHJcblxyXG5cdC8vIFRoZSB0b3RhbCBjaXJjdW1mZXJlbmNlIG9mIHRoZSBjaGFydC5cclxuXHRjaXJjdW1mZXJlbmNlOiBNYXRoLlBJICogMi4wLFxyXG5cclxuXHQvLyBOZWVkIHRvIG92ZXJyaWRlIHRoZXNlIHRvIGdpdmUgYSBuaWNlIGRlZmF1bHRcclxuXHR0b29sdGlwczoge1xyXG5cdFx0Y2FsbGJhY2tzOiB7XHJcblx0XHRcdHRpdGxlOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHRcdH0sXHJcblx0XHRcdGxhYmVsOiBmdW5jdGlvbih0b29sdGlwSXRlbSwgZGF0YSkge1xyXG5cdFx0XHRcdHZhciBkYXRhTGFiZWwgPSBkYXRhLmxhYmVsc1t0b29sdGlwSXRlbS5pbmRleF07XHJcblx0XHRcdFx0dmFyIHZhbHVlID0gJzogJyArIGRhdGEuZGF0YXNldHNbdG9vbHRpcEl0ZW0uZGF0YXNldEluZGV4XS5kYXRhW3Rvb2x0aXBJdGVtLmluZGV4XTtcclxuXHJcblx0XHRcdFx0aWYgKGhlbHBlcnMuaXNBcnJheShkYXRhTGFiZWwpKSB7XHJcblx0XHRcdFx0XHQvLyBzaG93IHZhbHVlIG9uIGZpcnN0IGxpbmUgb2YgbXVsdGlsaW5lIGxhYmVsXHJcblx0XHRcdFx0XHQvLyBuZWVkIHRvIGNsb25lIGJlY2F1c2Ugd2UgYXJlIGNoYW5naW5nIHRoZSB2YWx1ZVxyXG5cdFx0XHRcdFx0ZGF0YUxhYmVsID0gZGF0YUxhYmVsLnNsaWNlKCk7XHJcblx0XHRcdFx0XHRkYXRhTGFiZWxbMF0gKz0gdmFsdWU7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGRhdGFMYWJlbCArPSB2YWx1ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBkYXRhTGFiZWw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuZGVmYXVsdHMuX3NldCgncGllJywgaGVscGVycy5jbG9uZShkZWZhdWx0cy5kb3VnaG51dCkpO1xyXG5kZWZhdWx0cy5fc2V0KCdwaWUnLCB7XHJcblx0Y3V0b3V0UGVyY2VudGFnZTogMFxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ2hhcnQpIHtcclxuXHJcblx0Q2hhcnQuY29udHJvbGxlcnMuZG91Z2hudXQgPSBDaGFydC5jb250cm9sbGVycy5waWUgPSBDaGFydC5EYXRhc2V0Q29udHJvbGxlci5leHRlbmQoe1xyXG5cclxuXHRcdGRhdGFFbGVtZW50VHlwZTogZWxlbWVudHMuQXJjLFxyXG5cclxuXHRcdGxpbmtTY2FsZXM6IGhlbHBlcnMubm9vcCxcclxuXHJcblx0XHQvLyBHZXQgaW5kZXggb2YgdGhlIGRhdGFzZXQgaW4gcmVsYXRpb24gdG8gdGhlIHZpc2libGUgZGF0YXNldHMuIFRoaXMgYWxsb3dzIGRldGVybWluaW5nIHRoZSBpbm5lciBhbmQgb3V0ZXIgcmFkaXVzIGNvcnJlY3RseVxyXG5cdFx0Z2V0UmluZ0luZGV4OiBmdW5jdGlvbihkYXRhc2V0SW5kZXgpIHtcclxuXHRcdFx0dmFyIHJpbmdJbmRleCA9IDA7XHJcblxyXG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRhdGFzZXRJbmRleDsgKytqKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShqKSkge1xyXG5cdFx0XHRcdFx0KytyaW5nSW5kZXg7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gcmluZ0luZGV4O1xyXG5cdFx0fSxcclxuXHJcblx0XHR1cGRhdGU6IGZ1bmN0aW9uKHJlc2V0KSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBjaGFydCA9IG1lLmNoYXJ0O1xyXG5cdFx0XHR2YXIgY2hhcnRBcmVhID0gY2hhcnQuY2hhcnRBcmVhO1xyXG5cdFx0XHR2YXIgb3B0cyA9IGNoYXJ0Lm9wdGlvbnM7XHJcblx0XHRcdHZhciBhcmNPcHRzID0gb3B0cy5lbGVtZW50cy5hcmM7XHJcblx0XHRcdHZhciBhdmFpbGFibGVXaWR0aCA9IGNoYXJ0QXJlYS5yaWdodCAtIGNoYXJ0QXJlYS5sZWZ0IC0gYXJjT3B0cy5ib3JkZXJXaWR0aDtcclxuXHRcdFx0dmFyIGF2YWlsYWJsZUhlaWdodCA9IGNoYXJ0QXJlYS5ib3R0b20gLSBjaGFydEFyZWEudG9wIC0gYXJjT3B0cy5ib3JkZXJXaWR0aDtcclxuXHRcdFx0dmFyIG1pblNpemUgPSBNYXRoLm1pbihhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0KTtcclxuXHRcdFx0dmFyIG9mZnNldCA9IHt4OiAwLCB5OiAwfTtcclxuXHRcdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XHJcblx0XHRcdHZhciBjdXRvdXRQZXJjZW50YWdlID0gb3B0cy5jdXRvdXRQZXJjZW50YWdlO1xyXG5cdFx0XHR2YXIgY2lyY3VtZmVyZW5jZSA9IG9wdHMuY2lyY3VtZmVyZW5jZTtcclxuXHJcblx0XHRcdC8vIElmIHRoZSBjaGFydCdzIGNpcmN1bWZlcmVuY2UgaXNuJ3QgYSBmdWxsIGNpcmNsZSwgY2FsY3VsYXRlIG1pblNpemUgYXMgYSByYXRpbyBvZiB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSBhcmNcclxuXHRcdFx0aWYgKGNpcmN1bWZlcmVuY2UgPCBNYXRoLlBJICogMi4wKSB7XHJcblx0XHRcdFx0dmFyIHN0YXJ0QW5nbGUgPSBvcHRzLnJvdGF0aW9uICUgKE1hdGguUEkgKiAyLjApO1xyXG5cdFx0XHRcdHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDIuMCAqIChzdGFydEFuZ2xlID49IE1hdGguUEkgPyAtMSA6IHN0YXJ0QW5nbGUgPCAtTWF0aC5QSSA/IDEgOiAwKTtcclxuXHRcdFx0XHR2YXIgZW5kQW5nbGUgPSBzdGFydEFuZ2xlICsgY2lyY3VtZmVyZW5jZTtcclxuXHRcdFx0XHR2YXIgc3RhcnQgPSB7eDogTWF0aC5jb3Moc3RhcnRBbmdsZSksIHk6IE1hdGguc2luKHN0YXJ0QW5nbGUpfTtcclxuXHRcdFx0XHR2YXIgZW5kID0ge3g6IE1hdGguY29zKGVuZEFuZ2xlKSwgeTogTWF0aC5zaW4oZW5kQW5nbGUpfTtcclxuXHRcdFx0XHR2YXIgY29udGFpbnMwID0gKHN0YXJ0QW5nbGUgPD0gMCAmJiBlbmRBbmdsZSA+PSAwKSB8fCAoc3RhcnRBbmdsZSA8PSBNYXRoLlBJICogMi4wICYmIE1hdGguUEkgKiAyLjAgPD0gZW5kQW5nbGUpO1xyXG5cdFx0XHRcdHZhciBjb250YWluczkwID0gKHN0YXJ0QW5nbGUgPD0gTWF0aC5QSSAqIDAuNSAmJiBNYXRoLlBJICogMC41IDw9IGVuZEFuZ2xlKSB8fCAoc3RhcnRBbmdsZSA8PSBNYXRoLlBJICogMi41ICYmIE1hdGguUEkgKiAyLjUgPD0gZW5kQW5nbGUpO1xyXG5cdFx0XHRcdHZhciBjb250YWluczE4MCA9IChzdGFydEFuZ2xlIDw9IC1NYXRoLlBJICYmIC1NYXRoLlBJIDw9IGVuZEFuZ2xlKSB8fCAoc3RhcnRBbmdsZSA8PSBNYXRoLlBJICYmIE1hdGguUEkgPD0gZW5kQW5nbGUpO1xyXG5cdFx0XHRcdHZhciBjb250YWluczI3MCA9IChzdGFydEFuZ2xlIDw9IC1NYXRoLlBJICogMC41ICYmIC1NYXRoLlBJICogMC41IDw9IGVuZEFuZ2xlKSB8fCAoc3RhcnRBbmdsZSA8PSBNYXRoLlBJICogMS41ICYmIE1hdGguUEkgKiAxLjUgPD0gZW5kQW5nbGUpO1xyXG5cdFx0XHRcdHZhciBjdXRvdXQgPSBjdXRvdXRQZXJjZW50YWdlIC8gMTAwLjA7XHJcblx0XHRcdFx0dmFyIG1pbiA9IHt4OiBjb250YWluczE4MCA/IC0xIDogTWF0aC5taW4oc3RhcnQueCAqIChzdGFydC54IDwgMCA/IDEgOiBjdXRvdXQpLCBlbmQueCAqIChlbmQueCA8IDAgPyAxIDogY3V0b3V0KSksIHk6IGNvbnRhaW5zMjcwID8gLTEgOiBNYXRoLm1pbihzdGFydC55ICogKHN0YXJ0LnkgPCAwID8gMSA6IGN1dG91dCksIGVuZC55ICogKGVuZC55IDwgMCA/IDEgOiBjdXRvdXQpKX07XHJcblx0XHRcdFx0dmFyIG1heCA9IHt4OiBjb250YWluczAgPyAxIDogTWF0aC5tYXgoc3RhcnQueCAqIChzdGFydC54ID4gMCA/IDEgOiBjdXRvdXQpLCBlbmQueCAqIChlbmQueCA+IDAgPyAxIDogY3V0b3V0KSksIHk6IGNvbnRhaW5zOTAgPyAxIDogTWF0aC5tYXgoc3RhcnQueSAqIChzdGFydC55ID4gMCA/IDEgOiBjdXRvdXQpLCBlbmQueSAqIChlbmQueSA+IDAgPyAxIDogY3V0b3V0KSl9O1xyXG5cdFx0XHRcdHZhciBzaXplID0ge3dpZHRoOiAobWF4LnggLSBtaW4ueCkgKiAwLjUsIGhlaWdodDogKG1heC55IC0gbWluLnkpICogMC41fTtcclxuXHRcdFx0XHRtaW5TaXplID0gTWF0aC5taW4oYXZhaWxhYmxlV2lkdGggLyBzaXplLndpZHRoLCBhdmFpbGFibGVIZWlnaHQgLyBzaXplLmhlaWdodCk7XHJcblx0XHRcdFx0b2Zmc2V0ID0ge3g6IChtYXgueCArIG1pbi54KSAqIC0wLjUsIHk6IChtYXgueSArIG1pbi55KSAqIC0wLjV9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjaGFydC5ib3JkZXJXaWR0aCA9IG1lLmdldE1heEJvcmRlcldpZHRoKG1ldGEuZGF0YSk7XHJcblx0XHRcdGNoYXJ0Lm91dGVyUmFkaXVzID0gTWF0aC5tYXgoKG1pblNpemUgLSBjaGFydC5ib3JkZXJXaWR0aCkgLyAyLCAwKTtcclxuXHRcdFx0Y2hhcnQuaW5uZXJSYWRpdXMgPSBNYXRoLm1heChjdXRvdXRQZXJjZW50YWdlID8gKGNoYXJ0Lm91dGVyUmFkaXVzIC8gMTAwKSAqIChjdXRvdXRQZXJjZW50YWdlKSA6IDAsIDApO1xyXG5cdFx0XHRjaGFydC5yYWRpdXNMZW5ndGggPSAoY2hhcnQub3V0ZXJSYWRpdXMgLSBjaGFydC5pbm5lclJhZGl1cykgLyBjaGFydC5nZXRWaXNpYmxlRGF0YXNldENvdW50KCk7XHJcblx0XHRcdGNoYXJ0Lm9mZnNldFggPSBvZmZzZXQueCAqIGNoYXJ0Lm91dGVyUmFkaXVzO1xyXG5cdFx0XHRjaGFydC5vZmZzZXRZID0gb2Zmc2V0LnkgKiBjaGFydC5vdXRlclJhZGl1cztcclxuXHJcblx0XHRcdG1ldGEudG90YWwgPSBtZS5jYWxjdWxhdGVUb3RhbCgpO1xyXG5cclxuXHRcdFx0bWUub3V0ZXJSYWRpdXMgPSBjaGFydC5vdXRlclJhZGl1cyAtIChjaGFydC5yYWRpdXNMZW5ndGggKiBtZS5nZXRSaW5nSW5kZXgobWUuaW5kZXgpKTtcclxuXHRcdFx0bWUuaW5uZXJSYWRpdXMgPSBNYXRoLm1heChtZS5vdXRlclJhZGl1cyAtIGNoYXJ0LnJhZGl1c0xlbmd0aCwgMCk7XHJcblxyXG5cdFx0XHRoZWxwZXJzLmVhY2gobWV0YS5kYXRhLCBmdW5jdGlvbihhcmMsIGluZGV4KSB7XHJcblx0XHRcdFx0bWUudXBkYXRlRWxlbWVudChhcmMsIGluZGV4LCByZXNldCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHR1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihhcmMsIGluZGV4LCByZXNldCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgY2hhcnQgPSBtZS5jaGFydDtcclxuXHRcdFx0dmFyIGNoYXJ0QXJlYSA9IGNoYXJ0LmNoYXJ0QXJlYTtcclxuXHRcdFx0dmFyIG9wdHMgPSBjaGFydC5vcHRpb25zO1xyXG5cdFx0XHR2YXIgYW5pbWF0aW9uT3B0cyA9IG9wdHMuYW5pbWF0aW9uO1xyXG5cdFx0XHR2YXIgY2VudGVyWCA9IChjaGFydEFyZWEubGVmdCArIGNoYXJ0QXJlYS5yaWdodCkgLyAyO1xyXG5cdFx0XHR2YXIgY2VudGVyWSA9IChjaGFydEFyZWEudG9wICsgY2hhcnRBcmVhLmJvdHRvbSkgLyAyO1xyXG5cdFx0XHR2YXIgc3RhcnRBbmdsZSA9IG9wdHMucm90YXRpb247IC8vIG5vbiByZXNldCBjYXNlIGhhbmRsZWQgbGF0ZXJcclxuXHRcdFx0dmFyIGVuZEFuZ2xlID0gb3B0cy5yb3RhdGlvbjsgLy8gbm9uIHJlc2V0IGNhc2UgaGFuZGxlZCBsYXRlclxyXG5cdFx0XHR2YXIgZGF0YXNldCA9IG1lLmdldERhdGFzZXQoKTtcclxuXHRcdFx0dmFyIGNpcmN1bWZlcmVuY2UgPSByZXNldCAmJiBhbmltYXRpb25PcHRzLmFuaW1hdGVSb3RhdGUgPyAwIDogYXJjLmhpZGRlbiA/IDAgOiBtZS5jYWxjdWxhdGVDaXJjdW1mZXJlbmNlKGRhdGFzZXQuZGF0YVtpbmRleF0pICogKG9wdHMuY2lyY3VtZmVyZW5jZSAvICgyLjAgKiBNYXRoLlBJKSk7XHJcblx0XHRcdHZhciBpbm5lclJhZGl1cyA9IHJlc2V0ICYmIGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVNjYWxlID8gMCA6IG1lLmlubmVyUmFkaXVzO1xyXG5cdFx0XHR2YXIgb3V0ZXJSYWRpdXMgPSByZXNldCAmJiBhbmltYXRpb25PcHRzLmFuaW1hdGVTY2FsZSA/IDAgOiBtZS5vdXRlclJhZGl1cztcclxuXHRcdFx0dmFyIHZhbHVlQXRJbmRleE9yRGVmYXVsdCA9IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0O1xyXG5cclxuXHRcdFx0aGVscGVycy5leHRlbmQoYXJjLCB7XHJcblx0XHRcdFx0Ly8gVXRpbGl0eVxyXG5cdFx0XHRcdF9kYXRhc2V0SW5kZXg6IG1lLmluZGV4LFxyXG5cdFx0XHRcdF9pbmRleDogaW5kZXgsXHJcblxyXG5cdFx0XHRcdC8vIERlc2lyZWQgdmlldyBwcm9wZXJ0aWVzXHJcblx0XHRcdFx0X21vZGVsOiB7XHJcblx0XHRcdFx0XHR4OiBjZW50ZXJYICsgY2hhcnQub2Zmc2V0WCxcclxuXHRcdFx0XHRcdHk6IGNlbnRlclkgKyBjaGFydC5vZmZzZXRZLFxyXG5cdFx0XHRcdFx0c3RhcnRBbmdsZTogc3RhcnRBbmdsZSxcclxuXHRcdFx0XHRcdGVuZEFuZ2xlOiBlbmRBbmdsZSxcclxuXHRcdFx0XHRcdGNpcmN1bWZlcmVuY2U6IGNpcmN1bWZlcmVuY2UsXHJcblx0XHRcdFx0XHRvdXRlclJhZGl1czogb3V0ZXJSYWRpdXMsXHJcblx0XHRcdFx0XHRpbm5lclJhZGl1czogaW5uZXJSYWRpdXMsXHJcblx0XHRcdFx0XHRsYWJlbDogdmFsdWVBdEluZGV4T3JEZWZhdWx0KGRhdGFzZXQubGFiZWwsIGluZGV4LCBjaGFydC5kYXRhLmxhYmVsc1tpbmRleF0pXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHZhciBtb2RlbCA9IGFyYy5fbW9kZWw7XHJcblxyXG5cdFx0XHQvLyBSZXNldHMgdGhlIHZpc3VhbCBzdHlsZXNcclxuXHRcdFx0dmFyIGN1c3RvbSA9IGFyYy5jdXN0b20gfHwge307XHJcblx0XHRcdHZhciB2YWx1ZU9yRGVmYXVsdCA9IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0O1xyXG5cdFx0XHR2YXIgZWxlbWVudE9wdHMgPSB0aGlzLmNoYXJ0Lm9wdGlvbnMuZWxlbWVudHMuYXJjO1xyXG5cdFx0XHRtb2RlbC5iYWNrZ3JvdW5kQ29sb3IgPSBjdXN0b20uYmFja2dyb3VuZENvbG9yID8gY3VzdG9tLmJhY2tncm91bmRDb2xvciA6IHZhbHVlT3JEZWZhdWx0KGRhdGFzZXQuYmFja2dyb3VuZENvbG9yLCBpbmRleCwgZWxlbWVudE9wdHMuYmFja2dyb3VuZENvbG9yKTtcclxuXHRcdFx0bW9kZWwuYm9yZGVyQ29sb3IgPSBjdXN0b20uYm9yZGVyQ29sb3IgPyBjdXN0b20uYm9yZGVyQ29sb3IgOiB2YWx1ZU9yRGVmYXVsdChkYXRhc2V0LmJvcmRlckNvbG9yLCBpbmRleCwgZWxlbWVudE9wdHMuYm9yZGVyQ29sb3IpO1xyXG5cdFx0XHRtb2RlbC5ib3JkZXJXaWR0aCA9IGN1c3RvbS5ib3JkZXJXaWR0aCA/IGN1c3RvbS5ib3JkZXJXaWR0aCA6IHZhbHVlT3JEZWZhdWx0KGRhdGFzZXQuYm9yZGVyV2lkdGgsIGluZGV4LCBlbGVtZW50T3B0cy5ib3JkZXJXaWR0aCk7XHJcblxyXG5cdFx0XHQvLyBTZXQgY29ycmVjdCBhbmdsZXMgaWYgbm90IHJlc2V0dGluZ1xyXG5cdFx0XHRpZiAoIXJlc2V0IHx8ICFhbmltYXRpb25PcHRzLmFuaW1hdGVSb3RhdGUpIHtcclxuXHRcdFx0XHRpZiAoaW5kZXggPT09IDApIHtcclxuXHRcdFx0XHRcdG1vZGVsLnN0YXJ0QW5nbGUgPSBvcHRzLnJvdGF0aW9uO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRtb2RlbC5zdGFydEFuZ2xlID0gbWUuZ2V0TWV0YSgpLmRhdGFbaW5kZXggLSAxXS5fbW9kZWwuZW5kQW5nbGU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRtb2RlbC5lbmRBbmdsZSA9IG1vZGVsLnN0YXJ0QW5nbGUgKyBtb2RlbC5jaXJjdW1mZXJlbmNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRhcmMucGl2b3QoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Y2FsY3VsYXRlVG90YWw6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xyXG5cdFx0XHR2YXIgbWV0YSA9IHRoaXMuZ2V0TWV0YSgpO1xyXG5cdFx0XHR2YXIgdG90YWwgPSAwO1xyXG5cdFx0XHR2YXIgdmFsdWU7XHJcblxyXG5cdFx0XHRoZWxwZXJzLmVhY2gobWV0YS5kYXRhLCBmdW5jdGlvbihlbGVtZW50LCBpbmRleCkge1xyXG5cdFx0XHRcdHZhbHVlID0gZGF0YXNldC5kYXRhW2luZGV4XTtcclxuXHRcdFx0XHRpZiAoIWlzTmFOKHZhbHVlKSAmJiAhZWxlbWVudC5oaWRkZW4pIHtcclxuXHRcdFx0XHRcdHRvdGFsICs9IE1hdGguYWJzKHZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0LyogaWYgKHRvdGFsID09PSAwKSB7XHJcblx0XHRcdFx0dG90YWwgPSBOYU47XHJcblx0XHRcdH0qL1xyXG5cclxuXHRcdFx0cmV0dXJuIHRvdGFsO1xyXG5cdFx0fSxcclxuXHJcblx0XHRjYWxjdWxhdGVDaXJjdW1mZXJlbmNlOiBmdW5jdGlvbih2YWx1ZSkge1xyXG5cdFx0XHR2YXIgdG90YWwgPSB0aGlzLmdldE1ldGEoKS50b3RhbDtcclxuXHRcdFx0aWYgKHRvdGFsID4gMCAmJiAhaXNOYU4odmFsdWUpKSB7XHJcblx0XHRcdFx0cmV0dXJuIChNYXRoLlBJICogMi4wKSAqIChNYXRoLmFicyh2YWx1ZSkgLyB0b3RhbCk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIGdldHMgdGhlIG1heCBib3JkZXIgb3IgaG92ZXIgd2lkdGggdG8gcHJvcGVybHkgc2NhbGUgcGllIGNoYXJ0c1xyXG5cdFx0Z2V0TWF4Qm9yZGVyV2lkdGg6IGZ1bmN0aW9uKGFyY3MpIHtcclxuXHRcdFx0dmFyIG1heCA9IDA7XHJcblx0XHRcdHZhciBpbmRleCA9IHRoaXMuaW5kZXg7XHJcblx0XHRcdHZhciBsZW5ndGggPSBhcmNzLmxlbmd0aDtcclxuXHRcdFx0dmFyIGJvcmRlcldpZHRoO1xyXG5cdFx0XHR2YXIgaG92ZXJXaWR0aDtcclxuXHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRib3JkZXJXaWR0aCA9IGFyY3NbaV0uX21vZGVsID8gYXJjc1tpXS5fbW9kZWwuYm9yZGVyV2lkdGggOiAwO1xyXG5cdFx0XHRcdGhvdmVyV2lkdGggPSBhcmNzW2ldLl9jaGFydCA/IGFyY3NbaV0uX2NoYXJ0LmNvbmZpZy5kYXRhLmRhdGFzZXRzW2luZGV4XS5ob3ZlckJvcmRlcldpZHRoIDogMDtcclxuXHJcblx0XHRcdFx0bWF4ID0gYm9yZGVyV2lkdGggPiBtYXggPyBib3JkZXJXaWR0aCA6IG1heDtcclxuXHRcdFx0XHRtYXggPSBob3ZlcldpZHRoID4gbWF4ID8gaG92ZXJXaWR0aCA6IG1heDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbWF4O1xyXG5cdFx0fVxyXG5cdH0pO1xyXG59O1xyXG5cclxufSx7XCIyNlwiOjI2LFwiNDFcIjo0MSxcIjQ2XCI6NDZ9XSwxODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG52YXIgZWxlbWVudHMgPSByZXF1aXJlKDQxKTtcclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxuXHJcbmRlZmF1bHRzLl9zZXQoJ2xpbmUnLCB7XHJcblx0c2hvd0xpbmVzOiB0cnVlLFxyXG5cdHNwYW5HYXBzOiBmYWxzZSxcclxuXHJcblx0aG92ZXI6IHtcclxuXHRcdG1vZGU6ICdsYWJlbCdcclxuXHR9LFxyXG5cclxuXHRzY2FsZXM6IHtcclxuXHRcdHhBeGVzOiBbe1xyXG5cdFx0XHR0eXBlOiAnY2F0ZWdvcnknLFxyXG5cdFx0XHRpZDogJ3gtYXhpcy0wJ1xyXG5cdFx0fV0sXHJcblx0XHR5QXhlczogW3tcclxuXHRcdFx0dHlwZTogJ2xpbmVhcicsXHJcblx0XHRcdGlkOiAneS1heGlzLTAnXHJcblx0XHR9XVxyXG5cdH1cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKENoYXJ0KSB7XHJcblxyXG5cdGZ1bmN0aW9uIGxpbmVFbmFibGVkKGRhdGFzZXQsIG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBoZWxwZXJzLnZhbHVlT3JEZWZhdWx0KGRhdGFzZXQuc2hvd0xpbmUsIG9wdGlvbnMuc2hvd0xpbmVzKTtcclxuXHR9XHJcblxyXG5cdENoYXJ0LmNvbnRyb2xsZXJzLmxpbmUgPSBDaGFydC5EYXRhc2V0Q29udHJvbGxlci5leHRlbmQoe1xyXG5cclxuXHRcdGRhdGFzZXRFbGVtZW50VHlwZTogZWxlbWVudHMuTGluZSxcclxuXHJcblx0XHRkYXRhRWxlbWVudFR5cGU6IGVsZW1lbnRzLlBvaW50LFxyXG5cclxuXHRcdHVwZGF0ZTogZnVuY3Rpb24ocmVzZXQpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XHJcblx0XHRcdHZhciBsaW5lID0gbWV0YS5kYXRhc2V0O1xyXG5cdFx0XHR2YXIgcG9pbnRzID0gbWV0YS5kYXRhIHx8IFtdO1xyXG5cdFx0XHR2YXIgb3B0aW9ucyA9IG1lLmNoYXJ0Lm9wdGlvbnM7XHJcblx0XHRcdHZhciBsaW5lRWxlbWVudE9wdGlvbnMgPSBvcHRpb25zLmVsZW1lbnRzLmxpbmU7XHJcblx0XHRcdHZhciBzY2FsZSA9IG1lLmdldFNjYWxlRm9ySWQobWV0YS55QXhpc0lEKTtcclxuXHRcdFx0dmFyIGksIGlsZW4sIGN1c3RvbTtcclxuXHRcdFx0dmFyIGRhdGFzZXQgPSBtZS5nZXREYXRhc2V0KCk7XHJcblx0XHRcdHZhciBzaG93TGluZSA9IGxpbmVFbmFibGVkKGRhdGFzZXQsIG9wdGlvbnMpO1xyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIExpbmVcclxuXHRcdFx0aWYgKHNob3dMaW5lKSB7XHJcblx0XHRcdFx0Y3VzdG9tID0gbGluZS5jdXN0b20gfHwge307XHJcblxyXG5cdFx0XHRcdC8vIENvbXBhdGliaWxpdHk6IElmIHRoZSBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIHdpdGggb25seSB0aGUgb2xkIG5hbWUsIHVzZSB0aG9zZSB2YWx1ZXNcclxuXHRcdFx0XHRpZiAoKGRhdGFzZXQudGVuc2lvbiAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YXNldC5saW5lVGVuc2lvbiA9PT0gdW5kZWZpbmVkKSkge1xyXG5cdFx0XHRcdFx0ZGF0YXNldC5saW5lVGVuc2lvbiA9IGRhdGFzZXQudGVuc2lvbjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFV0aWxpdHlcclxuXHRcdFx0XHRsaW5lLl9zY2FsZSA9IHNjYWxlO1xyXG5cdFx0XHRcdGxpbmUuX2RhdGFzZXRJbmRleCA9IG1lLmluZGV4O1xyXG5cdFx0XHRcdC8vIERhdGFcclxuXHRcdFx0XHRsaW5lLl9jaGlsZHJlbiA9IHBvaW50cztcclxuXHRcdFx0XHQvLyBNb2RlbFxyXG5cdFx0XHRcdGxpbmUuX21vZGVsID0ge1xyXG5cdFx0XHRcdFx0Ly8gQXBwZWFyYW5jZVxyXG5cdFx0XHRcdFx0Ly8gVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgbGluZXMgaXMgdG8gYnJlYWsgYXQgbnVsbCB2YWx1ZXMsIGFjY29yZGluZ1xyXG5cdFx0XHRcdFx0Ly8gdG8gaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzI0MzUjaXNzdWVjb21tZW50LTIxNjcxODE1OFxyXG5cdFx0XHRcdFx0Ly8gVGhpcyBvcHRpb24gZ2l2ZXMgbGluZXMgdGhlIGFiaWxpdHkgdG8gc3BhbiBnYXBzXHJcblx0XHRcdFx0XHRzcGFuR2FwczogZGF0YXNldC5zcGFuR2FwcyA/IGRhdGFzZXQuc3BhbkdhcHMgOiBvcHRpb25zLnNwYW5HYXBzLFxyXG5cdFx0XHRcdFx0dGVuc2lvbjogY3VzdG9tLnRlbnNpb24gPyBjdXN0b20udGVuc2lvbiA6IGhlbHBlcnMudmFsdWVPckRlZmF1bHQoZGF0YXNldC5saW5lVGVuc2lvbiwgbGluZUVsZW1lbnRPcHRpb25zLnRlbnNpb24pLFxyXG5cdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBjdXN0b20uYmFja2dyb3VuZENvbG9yID8gY3VzdG9tLmJhY2tncm91bmRDb2xvciA6IChkYXRhc2V0LmJhY2tncm91bmRDb2xvciB8fCBsaW5lRWxlbWVudE9wdGlvbnMuYmFja2dyb3VuZENvbG9yKSxcclxuXHRcdFx0XHRcdGJvcmRlcldpZHRoOiBjdXN0b20uYm9yZGVyV2lkdGggPyBjdXN0b20uYm9yZGVyV2lkdGggOiAoZGF0YXNldC5ib3JkZXJXaWR0aCB8fCBsaW5lRWxlbWVudE9wdGlvbnMuYm9yZGVyV2lkdGgpLFxyXG5cdFx0XHRcdFx0Ym9yZGVyQ29sb3I6IGN1c3RvbS5ib3JkZXJDb2xvciA/IGN1c3RvbS5ib3JkZXJDb2xvciA6IChkYXRhc2V0LmJvcmRlckNvbG9yIHx8IGxpbmVFbGVtZW50T3B0aW9ucy5ib3JkZXJDb2xvciksXHJcblx0XHRcdFx0XHRib3JkZXJDYXBTdHlsZTogY3VzdG9tLmJvcmRlckNhcFN0eWxlID8gY3VzdG9tLmJvcmRlckNhcFN0eWxlIDogKGRhdGFzZXQuYm9yZGVyQ2FwU3R5bGUgfHwgbGluZUVsZW1lbnRPcHRpb25zLmJvcmRlckNhcFN0eWxlKSxcclxuXHRcdFx0XHRcdGJvcmRlckRhc2g6IGN1c3RvbS5ib3JkZXJEYXNoID8gY3VzdG9tLmJvcmRlckRhc2ggOiAoZGF0YXNldC5ib3JkZXJEYXNoIHx8IGxpbmVFbGVtZW50T3B0aW9ucy5ib3JkZXJEYXNoKSxcclxuXHRcdFx0XHRcdGJvcmRlckRhc2hPZmZzZXQ6IGN1c3RvbS5ib3JkZXJEYXNoT2Zmc2V0ID8gY3VzdG9tLmJvcmRlckRhc2hPZmZzZXQgOiAoZGF0YXNldC5ib3JkZXJEYXNoT2Zmc2V0IHx8IGxpbmVFbGVtZW50T3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0KSxcclxuXHRcdFx0XHRcdGJvcmRlckpvaW5TdHlsZTogY3VzdG9tLmJvcmRlckpvaW5TdHlsZSA/IGN1c3RvbS5ib3JkZXJKb2luU3R5bGUgOiAoZGF0YXNldC5ib3JkZXJKb2luU3R5bGUgfHwgbGluZUVsZW1lbnRPcHRpb25zLmJvcmRlckpvaW5TdHlsZSksXHJcblx0XHRcdFx0XHRmaWxsOiBjdXN0b20uZmlsbCA/IGN1c3RvbS5maWxsIDogKGRhdGFzZXQuZmlsbCAhPT0gdW5kZWZpbmVkID8gZGF0YXNldC5maWxsIDogbGluZUVsZW1lbnRPcHRpb25zLmZpbGwpLFxyXG5cdFx0XHRcdFx0c3RlcHBlZExpbmU6IGN1c3RvbS5zdGVwcGVkTGluZSA/IGN1c3RvbS5zdGVwcGVkTGluZSA6IGhlbHBlcnMudmFsdWVPckRlZmF1bHQoZGF0YXNldC5zdGVwcGVkTGluZSwgbGluZUVsZW1lbnRPcHRpb25zLnN0ZXBwZWQpLFxyXG5cdFx0XHRcdFx0Y3ViaWNJbnRlcnBvbGF0aW9uTW9kZTogY3VzdG9tLmN1YmljSW50ZXJwb2xhdGlvbk1vZGUgPyBjdXN0b20uY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA6IGhlbHBlcnMudmFsdWVPckRlZmF1bHQoZGF0YXNldC5jdWJpY0ludGVycG9sYXRpb25Nb2RlLCBsaW5lRWxlbWVudE9wdGlvbnMuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSksXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0bGluZS5waXZvdCgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBVcGRhdGUgUG9pbnRzXHJcblx0XHRcdGZvciAoaSA9IDAsIGlsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRcdFx0bWUudXBkYXRlRWxlbWVudChwb2ludHNbaV0sIGksIHJlc2V0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHNob3dMaW5lICYmIGxpbmUuX21vZGVsLnRlbnNpb24gIT09IDApIHtcclxuXHRcdFx0XHRtZS51cGRhdGVCZXppZXJDb250cm9sUG9pbnRzKCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5vdyBwaXZvdCB0aGUgcG9pbnQgZm9yIGFuaW1hdGlvblxyXG5cdFx0XHRmb3IgKGkgPSAwLCBpbGVuID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHRcdHBvaW50c1tpXS5waXZvdCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdGdldFBvaW50QmFja2dyb3VuZENvbG9yOiBmdW5jdGlvbihwb2ludCwgaW5kZXgpIHtcclxuXHRcdFx0dmFyIGJhY2tncm91bmRDb2xvciA9IHRoaXMuY2hhcnQub3B0aW9ucy5lbGVtZW50cy5wb2ludC5iYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHRcdHZhciBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KCk7XHJcblx0XHRcdHZhciBjdXN0b20gPSBwb2ludC5jdXN0b20gfHwge307XHJcblxyXG5cdFx0XHRpZiAoY3VzdG9tLmJhY2tncm91bmRDb2xvcikge1xyXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvciA9IGN1c3RvbS5iYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHRcdH0gZWxzZSBpZiAoZGF0YXNldC5wb2ludEJhY2tncm91bmRDb2xvcikge1xyXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvciA9IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0KGRhdGFzZXQucG9pbnRCYWNrZ3JvdW5kQ29sb3IsIGluZGV4LCBiYWNrZ3JvdW5kQ29sb3IpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFzZXQuYmFja2dyb3VuZENvbG9yKSB7XHJcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yID0gZGF0YXNldC5iYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBiYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHR9LFxyXG5cclxuXHRcdGdldFBvaW50Qm9yZGVyQ29sb3I6IGZ1bmN0aW9uKHBvaW50LCBpbmRleCkge1xyXG5cdFx0XHR2YXIgYm9yZGVyQ29sb3IgPSB0aGlzLmNoYXJ0Lm9wdGlvbnMuZWxlbWVudHMucG9pbnQuYm9yZGVyQ29sb3I7XHJcblx0XHRcdHZhciBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KCk7XHJcblx0XHRcdHZhciBjdXN0b20gPSBwb2ludC5jdXN0b20gfHwge307XHJcblxyXG5cdFx0XHRpZiAoY3VzdG9tLmJvcmRlckNvbG9yKSB7XHJcblx0XHRcdFx0Ym9yZGVyQ29sb3IgPSBjdXN0b20uYm9yZGVyQ29sb3I7XHJcblx0XHRcdH0gZWxzZSBpZiAoZGF0YXNldC5wb2ludEJvcmRlckNvbG9yKSB7XHJcblx0XHRcdFx0Ym9yZGVyQ29sb3IgPSBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChkYXRhc2V0LnBvaW50Qm9yZGVyQ29sb3IsIGluZGV4LCBib3JkZXJDb2xvcik7XHJcblx0XHRcdH0gZWxzZSBpZiAoZGF0YXNldC5ib3JkZXJDb2xvcikge1xyXG5cdFx0XHRcdGJvcmRlckNvbG9yID0gZGF0YXNldC5ib3JkZXJDb2xvcjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGJvcmRlckNvbG9yO1xyXG5cdFx0fSxcclxuXHJcblx0XHRnZXRQb2ludEJvcmRlcldpZHRoOiBmdW5jdGlvbihwb2ludCwgaW5kZXgpIHtcclxuXHRcdFx0dmFyIGJvcmRlcldpZHRoID0gdGhpcy5jaGFydC5vcHRpb25zLmVsZW1lbnRzLnBvaW50LmJvcmRlcldpZHRoO1xyXG5cdFx0XHR2YXIgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xyXG5cdFx0XHR2YXIgY3VzdG9tID0gcG9pbnQuY3VzdG9tIHx8IHt9O1xyXG5cclxuXHRcdFx0aWYgKCFpc05hTihjdXN0b20uYm9yZGVyV2lkdGgpKSB7XHJcblx0XHRcdFx0Ym9yZGVyV2lkdGggPSBjdXN0b20uYm9yZGVyV2lkdGg7XHJcblx0XHRcdH0gZWxzZSBpZiAoIWlzTmFOKGRhdGFzZXQucG9pbnRCb3JkZXJXaWR0aCkgfHwgaGVscGVycy5pc0FycmF5KGRhdGFzZXQucG9pbnRCb3JkZXJXaWR0aCkpIHtcclxuXHRcdFx0XHRib3JkZXJXaWR0aCA9IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0KGRhdGFzZXQucG9pbnRCb3JkZXJXaWR0aCwgaW5kZXgsIGJvcmRlcldpZHRoKTtcclxuXHRcdFx0fSBlbHNlIGlmICghaXNOYU4oZGF0YXNldC5ib3JkZXJXaWR0aCkpIHtcclxuXHRcdFx0XHRib3JkZXJXaWR0aCA9IGRhdGFzZXQuYm9yZGVyV2lkdGg7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBib3JkZXJXaWR0aDtcclxuXHRcdH0sXHJcblxyXG5cdFx0Z2V0UG9pbnRSb3RhdGlvbjogZnVuY3Rpb24ocG9pbnQsIGluZGV4KSB7XHJcblx0XHRcdHZhciBwb2ludFJvdGF0aW9uID0gdGhpcy5jaGFydC5vcHRpb25zLmVsZW1lbnRzLnBvaW50LnJvdGF0aW9uO1xyXG5cdFx0XHR2YXIgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xyXG5cdFx0XHR2YXIgY3VzdG9tID0gcG9pbnQuY3VzdG9tIHx8IHt9O1xyXG5cclxuXHRcdFx0aWYgKCFpc05hTihjdXN0b20ucm90YXRpb24pKSB7XHJcblx0XHRcdFx0cG9pbnRSb3RhdGlvbiA9IGN1c3RvbS5yb3RhdGlvbjtcclxuXHRcdFx0fSBlbHNlIGlmICghaXNOYU4oZGF0YXNldC5wb2ludFJvdGF0aW9uKSB8fCBoZWxwZXJzLmlzQXJyYXkoZGF0YXNldC5wb2ludFJvdGF0aW9uKSkge1xyXG5cdFx0XHRcdHBvaW50Um90YXRpb24gPSBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChkYXRhc2V0LnBvaW50Um90YXRpb24sIGluZGV4LCBwb2ludFJvdGF0aW9uKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gcG9pbnRSb3RhdGlvbjtcclxuXHRcdH0sXHJcblxyXG5cdFx0dXBkYXRlRWxlbWVudDogZnVuY3Rpb24ocG9pbnQsIGluZGV4LCByZXNldCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgbWV0YSA9IG1lLmdldE1ldGEoKTtcclxuXHRcdFx0dmFyIGN1c3RvbSA9IHBvaW50LmN1c3RvbSB8fCB7fTtcclxuXHRcdFx0dmFyIGRhdGFzZXQgPSBtZS5nZXREYXRhc2V0KCk7XHJcblx0XHRcdHZhciBkYXRhc2V0SW5kZXggPSBtZS5pbmRleDtcclxuXHRcdFx0dmFyIHZhbHVlID0gZGF0YXNldC5kYXRhW2luZGV4XTtcclxuXHRcdFx0dmFyIHlTY2FsZSA9IG1lLmdldFNjYWxlRm9ySWQobWV0YS55QXhpc0lEKTtcclxuXHRcdFx0dmFyIHhTY2FsZSA9IG1lLmdldFNjYWxlRm9ySWQobWV0YS54QXhpc0lEKTtcclxuXHRcdFx0dmFyIHBvaW50T3B0aW9ucyA9IG1lLmNoYXJ0Lm9wdGlvbnMuZWxlbWVudHMucG9pbnQ7XHJcblx0XHRcdHZhciB4LCB5O1xyXG5cclxuXHRcdFx0Ly8gQ29tcGF0aWJpbGl0eTogSWYgdGhlIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgd2l0aCBvbmx5IHRoZSBvbGQgbmFtZSwgdXNlIHRob3NlIHZhbHVlc1xyXG5cdFx0XHRpZiAoKGRhdGFzZXQucmFkaXVzICE9PSB1bmRlZmluZWQpICYmIChkYXRhc2V0LnBvaW50UmFkaXVzID09PSB1bmRlZmluZWQpKSB7XHJcblx0XHRcdFx0ZGF0YXNldC5wb2ludFJhZGl1cyA9IGRhdGFzZXQucmFkaXVzO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICgoZGF0YXNldC5oaXRSYWRpdXMgIT09IHVuZGVmaW5lZCkgJiYgKGRhdGFzZXQucG9pbnRIaXRSYWRpdXMgPT09IHVuZGVmaW5lZCkpIHtcclxuXHRcdFx0XHRkYXRhc2V0LnBvaW50SGl0UmFkaXVzID0gZGF0YXNldC5oaXRSYWRpdXM7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHggPSB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWUgOiBOYU4sIGluZGV4LCBkYXRhc2V0SW5kZXgpO1xyXG5cdFx0XHR5ID0gcmVzZXQgPyB5U2NhbGUuZ2V0QmFzZVBpeGVsKCkgOiBtZS5jYWxjdWxhdGVQb2ludFkodmFsdWUsIGluZGV4LCBkYXRhc2V0SW5kZXgpO1xyXG5cclxuXHRcdFx0Ly8gVXRpbGl0eVxyXG5cdFx0XHRwb2ludC5feFNjYWxlID0geFNjYWxlO1xyXG5cdFx0XHRwb2ludC5feVNjYWxlID0geVNjYWxlO1xyXG5cdFx0XHRwb2ludC5fZGF0YXNldEluZGV4ID0gZGF0YXNldEluZGV4O1xyXG5cdFx0XHRwb2ludC5faW5kZXggPSBpbmRleDtcclxuXHJcblx0XHRcdC8vIERlc2lyZWQgdmlldyBwcm9wZXJ0aWVzXHJcblx0XHRcdHBvaW50Ll9tb2RlbCA9IHtcclxuXHRcdFx0XHR4OiB4LFxyXG5cdFx0XHRcdHk6IHksXHJcblx0XHRcdFx0c2tpcDogY3VzdG9tLnNraXAgfHwgaXNOYU4oeCkgfHwgaXNOYU4oeSksXHJcblx0XHRcdFx0Ly8gQXBwZWFyYW5jZVxyXG5cdFx0XHRcdHJhZGl1czogY3VzdG9tLnJhZGl1cyB8fCBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChkYXRhc2V0LnBvaW50UmFkaXVzLCBpbmRleCwgcG9pbnRPcHRpb25zLnJhZGl1cyksXHJcblx0XHRcdFx0cG9pbnRTdHlsZTogY3VzdG9tLnBvaW50U3R5bGUgfHwgaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQoZGF0YXNldC5wb2ludFN0eWxlLCBpbmRleCwgcG9pbnRPcHRpb25zLnBvaW50U3R5bGUpLFxyXG5cdFx0XHRcdHJvdGF0aW9uOiBtZS5nZXRQb2ludFJvdGF0aW9uKHBvaW50LCBpbmRleCksXHJcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBtZS5nZXRQb2ludEJhY2tncm91bmRDb2xvcihwb2ludCwgaW5kZXgpLFxyXG5cdFx0XHRcdGJvcmRlckNvbG9yOiBtZS5nZXRQb2ludEJvcmRlckNvbG9yKHBvaW50LCBpbmRleCksXHJcblx0XHRcdFx0Ym9yZGVyV2lkdGg6IG1lLmdldFBvaW50Qm9yZGVyV2lkdGgocG9pbnQsIGluZGV4KSxcclxuXHRcdFx0XHR0ZW5zaW9uOiBtZXRhLmRhdGFzZXQuX21vZGVsID8gbWV0YS5kYXRhc2V0Ll9tb2RlbC50ZW5zaW9uIDogMCxcclxuXHRcdFx0XHRzdGVwcGVkTGluZTogbWV0YS5kYXRhc2V0Ll9tb2RlbCA/IG1ldGEuZGF0YXNldC5fbW9kZWwuc3RlcHBlZExpbmUgOiBmYWxzZSxcclxuXHRcdFx0XHQvLyBUb29sdGlwXHJcblx0XHRcdFx0aGl0UmFkaXVzOiBjdXN0b20uaGl0UmFkaXVzIHx8IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0KGRhdGFzZXQucG9pbnRIaXRSYWRpdXMsIGluZGV4LCBwb2ludE9wdGlvbnMuaGl0UmFkaXVzKVxyXG5cdFx0XHR9O1xyXG5cdFx0fSxcclxuXHJcblx0XHRjYWxjdWxhdGVQb2ludFk6IGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgZGF0YXNldEluZGV4KSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBjaGFydCA9IG1lLmNoYXJ0O1xyXG5cdFx0XHR2YXIgbWV0YSA9IG1lLmdldE1ldGEoKTtcclxuXHRcdFx0dmFyIHlTY2FsZSA9IG1lLmdldFNjYWxlRm9ySWQobWV0YS55QXhpc0lEKTtcclxuXHRcdFx0dmFyIHN1bVBvcyA9IDA7XHJcblx0XHRcdHZhciBzdW1OZWcgPSAwO1xyXG5cdFx0XHR2YXIgaSwgZHMsIGRzTWV0YTtcclxuXHJcblx0XHRcdGlmICh5U2NhbGUub3B0aW9ucy5zdGFja2VkKSB7XHJcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGRhdGFzZXRJbmRleDsgaSsrKSB7XHJcblx0XHRcdFx0XHRkcyA9IGNoYXJ0LmRhdGEuZGF0YXNldHNbaV07XHJcblx0XHRcdFx0XHRkc01ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcclxuXHRcdFx0XHRcdGlmIChkc01ldGEudHlwZSA9PT0gJ2xpbmUnICYmIGRzTWV0YS55QXhpc0lEID09PSB5U2NhbGUuaWQgJiYgY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgc3RhY2tlZFJpZ2h0VmFsdWUgPSBOdW1iZXIoeVNjYWxlLmdldFJpZ2h0VmFsdWUoZHMuZGF0YVtpbmRleF0pKTtcclxuXHRcdFx0XHRcdFx0aWYgKHN0YWNrZWRSaWdodFZhbHVlIDwgMCkge1xyXG5cdFx0XHRcdFx0XHRcdHN1bU5lZyArPSBzdGFja2VkUmlnaHRWYWx1ZSB8fCAwO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHN1bVBvcyArPSBzdGFja2VkUmlnaHRWYWx1ZSB8fCAwO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR2YXIgcmlnaHRWYWx1ZSA9IE51bWJlcih5U2NhbGUuZ2V0UmlnaHRWYWx1ZSh2YWx1ZSkpO1xyXG5cdFx0XHRcdGlmIChyaWdodFZhbHVlIDwgMCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHN1bU5lZyArIHJpZ2h0VmFsdWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4geVNjYWxlLmdldFBpeGVsRm9yVmFsdWUoc3VtUG9zICsgcmlnaHRWYWx1ZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB5U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdHVwZGF0ZUJlemllckNvbnRyb2xQb2ludHM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgbWV0YSA9IG1lLmdldE1ldGEoKTtcclxuXHRcdFx0dmFyIGFyZWEgPSBtZS5jaGFydC5jaGFydEFyZWE7XHJcblx0XHRcdHZhciBwb2ludHMgPSAobWV0YS5kYXRhIHx8IFtdKTtcclxuXHRcdFx0dmFyIGksIGlsZW4sIHBvaW50LCBtb2RlbCwgY29udHJvbFBvaW50cztcclxuXHJcblx0XHRcdC8vIE9ubHkgY29uc2lkZXIgcG9pbnRzIHRoYXQgYXJlIGRyYXduIGluIGNhc2UgdGhlIHNwYW5HYXBzIG9wdGlvbiBpcyB1c2VkXHJcblx0XHRcdGlmIChtZXRhLmRhdGFzZXQuX21vZGVsLnNwYW5HYXBzKSB7XHJcblx0XHRcdFx0cG9pbnRzID0gcG9pbnRzLmZpbHRlcihmdW5jdGlvbihwdCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuICFwdC5fbW9kZWwuc2tpcDtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gY2FwQ29udHJvbFBvaW50KHB0LCBtaW4sIG1heCkge1xyXG5cdFx0XHRcdHJldHVybiBNYXRoLm1heChNYXRoLm1pbihwdCwgbWF4KSwgbWluKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKG1ldGEuZGF0YXNldC5fbW9kZWwuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA9PT0gJ21vbm90b25lJykge1xyXG5cdFx0XHRcdGhlbHBlcnMuc3BsaW5lQ3VydmVNb25vdG9uZShwb2ludHMpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAoaSA9IDAsIGlsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRcdFx0XHRwb2ludCA9IHBvaW50c1tpXTtcclxuXHRcdFx0XHRcdG1vZGVsID0gcG9pbnQuX21vZGVsO1xyXG5cdFx0XHRcdFx0Y29udHJvbFBvaW50cyA9IGhlbHBlcnMuc3BsaW5lQ3VydmUoXHJcblx0XHRcdFx0XHRcdGhlbHBlcnMucHJldmlvdXNJdGVtKHBvaW50cywgaSkuX21vZGVsLFxyXG5cdFx0XHRcdFx0XHRtb2RlbCxcclxuXHRcdFx0XHRcdFx0aGVscGVycy5uZXh0SXRlbShwb2ludHMsIGkpLl9tb2RlbCxcclxuXHRcdFx0XHRcdFx0bWV0YS5kYXRhc2V0Ll9tb2RlbC50ZW5zaW9uXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0bW9kZWwuY29udHJvbFBvaW50UHJldmlvdXNYID0gY29udHJvbFBvaW50cy5wcmV2aW91cy54O1xyXG5cdFx0XHRcdFx0bW9kZWwuY29udHJvbFBvaW50UHJldmlvdXNZID0gY29udHJvbFBvaW50cy5wcmV2aW91cy55O1xyXG5cdFx0XHRcdFx0bW9kZWwuY29udHJvbFBvaW50TmV4dFggPSBjb250cm9sUG9pbnRzLm5leHQueDtcclxuXHRcdFx0XHRcdG1vZGVsLmNvbnRyb2xQb2ludE5leHRZID0gY29udHJvbFBvaW50cy5uZXh0Lnk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAobWUuY2hhcnQub3B0aW9ucy5lbGVtZW50cy5saW5lLmNhcEJlemllclBvaW50cykge1xyXG5cdFx0XHRcdGZvciAoaSA9IDAsIGlsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRcdFx0XHRtb2RlbCA9IHBvaW50c1tpXS5fbW9kZWw7XHJcblx0XHRcdFx0XHRtb2RlbC5jb250cm9sUG9pbnRQcmV2aW91c1ggPSBjYXBDb250cm9sUG9pbnQobW9kZWwuY29udHJvbFBvaW50UHJldmlvdXNYLCBhcmVhLmxlZnQsIGFyZWEucmlnaHQpO1xyXG5cdFx0XHRcdFx0bW9kZWwuY29udHJvbFBvaW50UHJldmlvdXNZID0gY2FwQ29udHJvbFBvaW50KG1vZGVsLmNvbnRyb2xQb2ludFByZXZpb3VzWSwgYXJlYS50b3AsIGFyZWEuYm90dG9tKTtcclxuXHRcdFx0XHRcdG1vZGVsLmNvbnRyb2xQb2ludE5leHRYID0gY2FwQ29udHJvbFBvaW50KG1vZGVsLmNvbnRyb2xQb2ludE5leHRYLCBhcmVhLmxlZnQsIGFyZWEucmlnaHQpO1xyXG5cdFx0XHRcdFx0bW9kZWwuY29udHJvbFBvaW50TmV4dFkgPSBjYXBDb250cm9sUG9pbnQobW9kZWwuY29udHJvbFBvaW50TmV4dFksIGFyZWEudG9wLCBhcmVhLmJvdHRvbSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdGRyYXc6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgY2hhcnQgPSBtZS5jaGFydDtcclxuXHRcdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XHJcblx0XHRcdHZhciBwb2ludHMgPSBtZXRhLmRhdGEgfHwgW107XHJcblx0XHRcdHZhciBhcmVhID0gY2hhcnQuY2hhcnRBcmVhO1xyXG5cdFx0XHR2YXIgaWxlbiA9IHBvaW50cy5sZW5ndGg7XHJcblx0XHRcdHZhciBoYWxmQm9yZGVyV2lkdGg7XHJcblx0XHRcdHZhciBpID0gMDtcclxuXHJcblx0XHRcdGlmIChsaW5lRW5hYmxlZChtZS5nZXREYXRhc2V0KCksIGNoYXJ0Lm9wdGlvbnMpKSB7XHJcblx0XHRcdFx0aGFsZkJvcmRlcldpZHRoID0gKG1ldGEuZGF0YXNldC5fbW9kZWwuYm9yZGVyV2lkdGggfHwgMCkgLyAyO1xyXG5cclxuXHRcdFx0XHRoZWxwZXJzLmNhbnZhcy5jbGlwQXJlYShjaGFydC5jdHgsIHtcclxuXHRcdFx0XHRcdGxlZnQ6IGFyZWEubGVmdCxcclxuXHRcdFx0XHRcdHJpZ2h0OiBhcmVhLnJpZ2h0LFxyXG5cdFx0XHRcdFx0dG9wOiBhcmVhLnRvcCAtIGhhbGZCb3JkZXJXaWR0aCxcclxuXHRcdFx0XHRcdGJvdHRvbTogYXJlYS5ib3R0b20gKyBoYWxmQm9yZGVyV2lkdGhcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0bWV0YS5kYXRhc2V0LmRyYXcoKTtcclxuXHJcblx0XHRcdFx0aGVscGVycy5jYW52YXMudW5jbGlwQXJlYShjaGFydC5jdHgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBEcmF3IHRoZSBwb2ludHNcclxuXHRcdFx0Zm9yICg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdFx0XHRwb2ludHNbaV0uZHJhdyhhcmVhKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRzZXRIb3ZlclN0eWxlOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcblx0XHRcdC8vIFBvaW50XHJcblx0XHRcdHZhciBkYXRhc2V0ID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2VsZW1lbnQuX2RhdGFzZXRJbmRleF07XHJcblx0XHRcdHZhciBpbmRleCA9IGVsZW1lbnQuX2luZGV4O1xyXG5cdFx0XHR2YXIgY3VzdG9tID0gZWxlbWVudC5jdXN0b20gfHwge307XHJcblx0XHRcdHZhciBtb2RlbCA9IGVsZW1lbnQuX21vZGVsO1xyXG5cclxuXHRcdFx0ZWxlbWVudC4kcHJldmlvdXNTdHlsZSA9IHtcclxuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IG1vZGVsLmJhY2tncm91bmRDb2xvcixcclxuXHRcdFx0XHRib3JkZXJDb2xvcjogbW9kZWwuYm9yZGVyQ29sb3IsXHJcblx0XHRcdFx0Ym9yZGVyV2lkdGg6IG1vZGVsLmJvcmRlcldpZHRoLFxyXG5cdFx0XHRcdHJhZGl1czogbW9kZWwucmFkaXVzXHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRtb2RlbC5iYWNrZ3JvdW5kQ29sb3IgPSBjdXN0b20uaG92ZXJCYWNrZ3JvdW5kQ29sb3IgfHwgaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQoZGF0YXNldC5wb2ludEhvdmVyQmFja2dyb3VuZENvbG9yLCBpbmRleCwgaGVscGVycy5nZXRIb3ZlckNvbG9yKG1vZGVsLmJhY2tncm91bmRDb2xvcikpO1xyXG5cdFx0XHRtb2RlbC5ib3JkZXJDb2xvciA9IGN1c3RvbS5ob3ZlckJvcmRlckNvbG9yIHx8IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0KGRhdGFzZXQucG9pbnRIb3ZlckJvcmRlckNvbG9yLCBpbmRleCwgaGVscGVycy5nZXRIb3ZlckNvbG9yKG1vZGVsLmJvcmRlckNvbG9yKSk7XHJcblx0XHRcdG1vZGVsLmJvcmRlcldpZHRoID0gY3VzdG9tLmhvdmVyQm9yZGVyV2lkdGggfHwgaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQoZGF0YXNldC5wb2ludEhvdmVyQm9yZGVyV2lkdGgsIGluZGV4LCBtb2RlbC5ib3JkZXJXaWR0aCk7XHJcblx0XHRcdG1vZGVsLnJhZGl1cyA9IGN1c3RvbS5ob3ZlclJhZGl1cyB8fCBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChkYXRhc2V0LnBvaW50SG92ZXJSYWRpdXMsIGluZGV4LCB0aGlzLmNoYXJ0Lm9wdGlvbnMuZWxlbWVudHMucG9pbnQuaG92ZXJSYWRpdXMpO1xyXG5cdFx0fSxcclxuXHR9KTtcclxufTtcclxuXHJcbn0se1wiMjZcIjoyNixcIjQxXCI6NDEsXCI0NlwiOjQ2fV0sMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKDI2KTtcclxudmFyIGVsZW1lbnRzID0gcmVxdWlyZSg0MSk7XHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Nik7XHJcblxyXG5kZWZhdWx0cy5fc2V0KCdwb2xhckFyZWEnLCB7XHJcblx0c2NhbGU6IHtcclxuXHRcdHR5cGU6ICdyYWRpYWxMaW5lYXInLFxyXG5cdFx0YW5nbGVMaW5lczoge1xyXG5cdFx0XHRkaXNwbGF5OiBmYWxzZVxyXG5cdFx0fSxcclxuXHRcdGdyaWRMaW5lczoge1xyXG5cdFx0XHRjaXJjdWxhcjogdHJ1ZVxyXG5cdFx0fSxcclxuXHRcdHBvaW50TGFiZWxzOiB7XHJcblx0XHRcdGRpc3BsYXk6IGZhbHNlXHJcblx0XHR9LFxyXG5cdFx0dGlja3M6IHtcclxuXHRcdFx0YmVnaW5BdFplcm86IHRydWVcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHQvLyBCb29sZWFuIC0gV2hldGhlciB0byBhbmltYXRlIHRoZSByb3RhdGlvbiBvZiB0aGUgY2hhcnRcclxuXHRhbmltYXRpb246IHtcclxuXHRcdGFuaW1hdGVSb3RhdGU6IHRydWUsXHJcblx0XHRhbmltYXRlU2NhbGU6IHRydWVcclxuXHR9LFxyXG5cclxuXHRzdGFydEFuZ2xlOiAtMC41ICogTWF0aC5QSSxcclxuXHRsZWdlbmRDYWxsYmFjazogZnVuY3Rpb24oY2hhcnQpIHtcclxuXHRcdHZhciB0ZXh0ID0gW107XHJcblx0XHR0ZXh0LnB1c2goJzx1bCBjbGFzcz1cIicgKyBjaGFydC5pZCArICctbGVnZW5kXCI+Jyk7XHJcblxyXG5cdFx0dmFyIGRhdGEgPSBjaGFydC5kYXRhO1xyXG5cdFx0dmFyIGRhdGFzZXRzID0gZGF0YS5kYXRhc2V0cztcclxuXHRcdHZhciBsYWJlbHMgPSBkYXRhLmxhYmVscztcclxuXHJcblx0XHRpZiAoZGF0YXNldHMubGVuZ3RoKSB7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YXNldHNbMF0uZGF0YS5sZW5ndGg7ICsraSkge1xyXG5cdFx0XHRcdHRleHQucHVzaCgnPGxpPjxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjonICsgZGF0YXNldHNbMF0uYmFja2dyb3VuZENvbG9yW2ldICsgJ1wiPjwvc3Bhbj4nKTtcclxuXHRcdFx0XHRpZiAobGFiZWxzW2ldKSB7XHJcblx0XHRcdFx0XHR0ZXh0LnB1c2gobGFiZWxzW2ldKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGV4dC5wdXNoKCc8L2xpPicpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0dGV4dC5wdXNoKCc8L3VsPicpO1xyXG5cdFx0cmV0dXJuIHRleHQuam9pbignJyk7XHJcblx0fSxcclxuXHRsZWdlbmQ6IHtcclxuXHRcdGxhYmVsczoge1xyXG5cdFx0XHRnZW5lcmF0ZUxhYmVsczogZnVuY3Rpb24oY2hhcnQpIHtcclxuXHRcdFx0XHR2YXIgZGF0YSA9IGNoYXJ0LmRhdGE7XHJcblx0XHRcdFx0aWYgKGRhdGEubGFiZWxzLmxlbmd0aCAmJiBkYXRhLmRhdGFzZXRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGRhdGEubGFiZWxzLm1hcChmdW5jdGlvbihsYWJlbCwgaSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKDApO1xyXG5cdFx0XHRcdFx0XHR2YXIgZHMgPSBkYXRhLmRhdGFzZXRzWzBdO1xyXG5cdFx0XHRcdFx0XHR2YXIgYXJjID0gbWV0YS5kYXRhW2ldO1xyXG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tID0gYXJjLmN1c3RvbSB8fCB7fTtcclxuXHRcdFx0XHRcdFx0dmFyIHZhbHVlQXRJbmRleE9yRGVmYXVsdCA9IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0O1xyXG5cdFx0XHRcdFx0XHR2YXIgYXJjT3B0cyA9IGNoYXJ0Lm9wdGlvbnMuZWxlbWVudHMuYXJjO1xyXG5cdFx0XHRcdFx0XHR2YXIgZmlsbCA9IGN1c3RvbS5iYWNrZ3JvdW5kQ29sb3IgPyBjdXN0b20uYmFja2dyb3VuZENvbG9yIDogdmFsdWVBdEluZGV4T3JEZWZhdWx0KGRzLmJhY2tncm91bmRDb2xvciwgaSwgYXJjT3B0cy5iYWNrZ3JvdW5kQ29sb3IpO1xyXG5cdFx0XHRcdFx0XHR2YXIgc3Ryb2tlID0gY3VzdG9tLmJvcmRlckNvbG9yID8gY3VzdG9tLmJvcmRlckNvbG9yIDogdmFsdWVBdEluZGV4T3JEZWZhdWx0KGRzLmJvcmRlckNvbG9yLCBpLCBhcmNPcHRzLmJvcmRlckNvbG9yKTtcclxuXHRcdFx0XHRcdFx0dmFyIGJ3ID0gY3VzdG9tLmJvcmRlcldpZHRoID8gY3VzdG9tLmJvcmRlcldpZHRoIDogdmFsdWVBdEluZGV4T3JEZWZhdWx0KGRzLmJvcmRlcldpZHRoLCBpLCBhcmNPcHRzLmJvcmRlcldpZHRoKTtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdFx0dGV4dDogbGFiZWwsXHJcblx0XHRcdFx0XHRcdFx0ZmlsbFN0eWxlOiBmaWxsLFxyXG5cdFx0XHRcdFx0XHRcdHN0cm9rZVN0eWxlOiBzdHJva2UsXHJcblx0XHRcdFx0XHRcdFx0bGluZVdpZHRoOiBidyxcclxuXHRcdFx0XHRcdFx0XHRoaWRkZW46IGlzTmFOKGRzLmRhdGFbaV0pIHx8IG1ldGEuZGF0YVtpXS5oaWRkZW4sXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIEV4dHJhIGRhdGEgdXNlZCBmb3IgdG9nZ2xpbmcgdGhlIGNvcnJlY3QgaXRlbVxyXG5cdFx0XHRcdFx0XHRcdGluZGV4OiBpXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdG9uQ2xpY2s6IGZ1bmN0aW9uKGUsIGxlZ2VuZEl0ZW0pIHtcclxuXHRcdFx0dmFyIGluZGV4ID0gbGVnZW5kSXRlbS5pbmRleDtcclxuXHRcdFx0dmFyIGNoYXJ0ID0gdGhpcy5jaGFydDtcclxuXHRcdFx0dmFyIGksIGlsZW4sIG1ldGE7XHJcblxyXG5cdFx0XHRmb3IgKGkgPSAwLCBpbGVuID0gKGNoYXJ0LmRhdGEuZGF0YXNldHMgfHwgW10pLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHRcdG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcclxuXHRcdFx0XHRtZXRhLmRhdGFbaW5kZXhdLmhpZGRlbiA9ICFtZXRhLmRhdGFbaW5kZXhdLmhpZGRlbjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y2hhcnQudXBkYXRlKCk7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0Ly8gTmVlZCB0byBvdmVycmlkZSB0aGVzZSB0byBnaXZlIGEgbmljZSBkZWZhdWx0XHJcblx0dG9vbHRpcHM6IHtcclxuXHRcdGNhbGxiYWNrczoge1xyXG5cdFx0XHR0aXRsZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRsYWJlbDogZnVuY3Rpb24oaXRlbSwgZGF0YSkge1xyXG5cdFx0XHRcdHJldHVybiBkYXRhLmxhYmVsc1tpdGVtLmluZGV4XSArICc6ICcgKyBpdGVtLnlMYWJlbDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKENoYXJ0KSB7XHJcblxyXG5cdENoYXJ0LmNvbnRyb2xsZXJzLnBvbGFyQXJlYSA9IENoYXJ0LkRhdGFzZXRDb250cm9sbGVyLmV4dGVuZCh7XHJcblxyXG5cdFx0ZGF0YUVsZW1lbnRUeXBlOiBlbGVtZW50cy5BcmMsXHJcblxyXG5cdFx0bGlua1NjYWxlczogaGVscGVycy5ub29wLFxyXG5cclxuXHRcdHVwZGF0ZTogZnVuY3Rpb24ocmVzZXQpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIGRhdGFzZXQgPSBtZS5nZXREYXRhc2V0KCk7XHJcblx0XHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xyXG5cdFx0XHR2YXIgc3RhcnQgPSBtZS5jaGFydC5vcHRpb25zLnN0YXJ0QW5nbGUgfHwgMDtcclxuXHRcdFx0dmFyIHN0YXJ0cyA9IG1lLl9zdGFydHMgPSBbXTtcclxuXHRcdFx0dmFyIGFuZ2xlcyA9IG1lLl9hbmdsZXMgPSBbXTtcclxuXHRcdFx0dmFyIGksIGlsZW4sIGFuZ2xlO1xyXG5cclxuXHRcdFx0bWUuX3VwZGF0ZVJhZGl1cygpO1xyXG5cclxuXHRcdFx0bWV0YS5jb3VudCA9IG1lLmNvdW50VmlzaWJsZUVsZW1lbnRzKCk7XHJcblxyXG5cdFx0XHRmb3IgKGkgPSAwLCBpbGVuID0gZGF0YXNldC5kYXRhLmxlbmd0aDsgaSA8IGlsZW47IGkrKykge1xyXG5cdFx0XHRcdHN0YXJ0c1tpXSA9IHN0YXJ0O1xyXG5cdFx0XHRcdGFuZ2xlID0gbWUuX2NvbXB1dGVBbmdsZShpKTtcclxuXHRcdFx0XHRhbmdsZXNbaV0gPSBhbmdsZTtcclxuXHRcdFx0XHRzdGFydCArPSBhbmdsZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aGVscGVycy5lYWNoKG1ldGEuZGF0YSwgZnVuY3Rpb24oYXJjLCBpbmRleCkge1xyXG5cdFx0XHRcdG1lLnVwZGF0ZUVsZW1lbnQoYXJjLCBpbmRleCwgcmVzZXQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRfdXBkYXRlUmFkaXVzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XHJcblx0XHRcdHZhciBjaGFydEFyZWEgPSBjaGFydC5jaGFydEFyZWE7XHJcblx0XHRcdHZhciBvcHRzID0gY2hhcnQub3B0aW9ucztcclxuXHRcdFx0dmFyIGFyY09wdHMgPSBvcHRzLmVsZW1lbnRzLmFyYztcclxuXHRcdFx0dmFyIG1pblNpemUgPSBNYXRoLm1pbihjaGFydEFyZWEucmlnaHQgLSBjaGFydEFyZWEubGVmdCwgY2hhcnRBcmVhLmJvdHRvbSAtIGNoYXJ0QXJlYS50b3ApO1xyXG5cclxuXHRcdFx0Y2hhcnQub3V0ZXJSYWRpdXMgPSBNYXRoLm1heCgobWluU2l6ZSAtIGFyY09wdHMuYm9yZGVyV2lkdGggLyAyKSAvIDIsIDApO1xyXG5cdFx0XHRjaGFydC5pbm5lclJhZGl1cyA9IE1hdGgubWF4KG9wdHMuY3V0b3V0UGVyY2VudGFnZSA/IChjaGFydC5vdXRlclJhZGl1cyAvIDEwMCkgKiAob3B0cy5jdXRvdXRQZXJjZW50YWdlKSA6IDEsIDApO1xyXG5cdFx0XHRjaGFydC5yYWRpdXNMZW5ndGggPSAoY2hhcnQub3V0ZXJSYWRpdXMgLSBjaGFydC5pbm5lclJhZGl1cykgLyBjaGFydC5nZXRWaXNpYmxlRGF0YXNldENvdW50KCk7XHJcblxyXG5cdFx0XHRtZS5vdXRlclJhZGl1cyA9IGNoYXJ0Lm91dGVyUmFkaXVzIC0gKGNoYXJ0LnJhZGl1c0xlbmd0aCAqIG1lLmluZGV4KTtcclxuXHRcdFx0bWUuaW5uZXJSYWRpdXMgPSBtZS5vdXRlclJhZGl1cyAtIGNoYXJ0LnJhZGl1c0xlbmd0aDtcclxuXHRcdH0sXHJcblxyXG5cdFx0dXBkYXRlRWxlbWVudDogZnVuY3Rpb24oYXJjLCBpbmRleCwgcmVzZXQpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XHJcblx0XHRcdHZhciBkYXRhc2V0ID0gbWUuZ2V0RGF0YXNldCgpO1xyXG5cdFx0XHR2YXIgb3B0cyA9IGNoYXJ0Lm9wdGlvbnM7XHJcblx0XHRcdHZhciBhbmltYXRpb25PcHRzID0gb3B0cy5hbmltYXRpb247XHJcblx0XHRcdHZhciBzY2FsZSA9IGNoYXJ0LnNjYWxlO1xyXG5cdFx0XHR2YXIgbGFiZWxzID0gY2hhcnQuZGF0YS5sYWJlbHM7XHJcblxyXG5cdFx0XHR2YXIgY2VudGVyWCA9IHNjYWxlLnhDZW50ZXI7XHJcblx0XHRcdHZhciBjZW50ZXJZID0gc2NhbGUueUNlbnRlcjtcclxuXHJcblx0XHRcdC8vIHZhciBuZWdIYWxmUEkgPSAtMC41ICogTWF0aC5QSTtcclxuXHRcdFx0dmFyIGRhdGFzZXRTdGFydEFuZ2xlID0gb3B0cy5zdGFydEFuZ2xlO1xyXG5cdFx0XHR2YXIgZGlzdGFuY2UgPSBhcmMuaGlkZGVuID8gMCA6IHNjYWxlLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKGRhdGFzZXQuZGF0YVtpbmRleF0pO1xyXG5cdFx0XHR2YXIgc3RhcnRBbmdsZSA9IG1lLl9zdGFydHNbaW5kZXhdO1xyXG5cdFx0XHR2YXIgZW5kQW5nbGUgPSBzdGFydEFuZ2xlICsgKGFyYy5oaWRkZW4gPyAwIDogbWUuX2FuZ2xlc1tpbmRleF0pO1xyXG5cclxuXHRcdFx0dmFyIHJlc2V0UmFkaXVzID0gYW5pbWF0aW9uT3B0cy5hbmltYXRlU2NhbGUgPyAwIDogc2NhbGUuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUoZGF0YXNldC5kYXRhW2luZGV4XSk7XHJcblxyXG5cdFx0XHRoZWxwZXJzLmV4dGVuZChhcmMsIHtcclxuXHRcdFx0XHQvLyBVdGlsaXR5XHJcblx0XHRcdFx0X2RhdGFzZXRJbmRleDogbWUuaW5kZXgsXHJcblx0XHRcdFx0X2luZGV4OiBpbmRleCxcclxuXHRcdFx0XHRfc2NhbGU6IHNjYWxlLFxyXG5cclxuXHRcdFx0XHQvLyBEZXNpcmVkIHZpZXcgcHJvcGVydGllc1xyXG5cdFx0XHRcdF9tb2RlbDoge1xyXG5cdFx0XHRcdFx0eDogY2VudGVyWCxcclxuXHRcdFx0XHRcdHk6IGNlbnRlclksXHJcblx0XHRcdFx0XHRpbm5lclJhZGl1czogMCxcclxuXHRcdFx0XHRcdG91dGVyUmFkaXVzOiByZXNldCA/IHJlc2V0UmFkaXVzIDogZGlzdGFuY2UsXHJcblx0XHRcdFx0XHRzdGFydEFuZ2xlOiByZXNldCAmJiBhbmltYXRpb25PcHRzLmFuaW1hdGVSb3RhdGUgPyBkYXRhc2V0U3RhcnRBbmdsZSA6IHN0YXJ0QW5nbGUsXHJcblx0XHRcdFx0XHRlbmRBbmdsZTogcmVzZXQgJiYgYW5pbWF0aW9uT3B0cy5hbmltYXRlUm90YXRlID8gZGF0YXNldFN0YXJ0QW5nbGUgOiBlbmRBbmdsZSxcclxuXHRcdFx0XHRcdGxhYmVsOiBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChsYWJlbHMsIGluZGV4LCBsYWJlbHNbaW5kZXhdKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBBcHBseSBib3JkZXIgYW5kIGZpbGwgc3R5bGVcclxuXHRcdFx0dmFyIGVsZW1lbnRPcHRzID0gdGhpcy5jaGFydC5vcHRpb25zLmVsZW1lbnRzLmFyYztcclxuXHRcdFx0dmFyIGN1c3RvbSA9IGFyYy5jdXN0b20gfHwge307XHJcblx0XHRcdHZhciB2YWx1ZU9yRGVmYXVsdCA9IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0O1xyXG5cdFx0XHR2YXIgbW9kZWwgPSBhcmMuX21vZGVsO1xyXG5cclxuXHRcdFx0bW9kZWwuYmFja2dyb3VuZENvbG9yID0gY3VzdG9tLmJhY2tncm91bmRDb2xvciA/IGN1c3RvbS5iYWNrZ3JvdW5kQ29sb3IgOiB2YWx1ZU9yRGVmYXVsdChkYXRhc2V0LmJhY2tncm91bmRDb2xvciwgaW5kZXgsIGVsZW1lbnRPcHRzLmJhY2tncm91bmRDb2xvcik7XHJcblx0XHRcdG1vZGVsLmJvcmRlckNvbG9yID0gY3VzdG9tLmJvcmRlckNvbG9yID8gY3VzdG9tLmJvcmRlckNvbG9yIDogdmFsdWVPckRlZmF1bHQoZGF0YXNldC5ib3JkZXJDb2xvciwgaW5kZXgsIGVsZW1lbnRPcHRzLmJvcmRlckNvbG9yKTtcclxuXHRcdFx0bW9kZWwuYm9yZGVyV2lkdGggPSBjdXN0b20uYm9yZGVyV2lkdGggPyBjdXN0b20uYm9yZGVyV2lkdGggOiB2YWx1ZU9yRGVmYXVsdChkYXRhc2V0LmJvcmRlcldpZHRoLCBpbmRleCwgZWxlbWVudE9wdHMuYm9yZGVyV2lkdGgpO1xyXG5cclxuXHRcdFx0YXJjLnBpdm90KCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGNvdW50VmlzaWJsZUVsZW1lbnRzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGRhdGFzZXQgPSB0aGlzLmdldERhdGFzZXQoKTtcclxuXHRcdFx0dmFyIG1ldGEgPSB0aGlzLmdldE1ldGEoKTtcclxuXHRcdFx0dmFyIGNvdW50ID0gMDtcclxuXHJcblx0XHRcdGhlbHBlcnMuZWFjaChtZXRhLmRhdGEsIGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4KSB7XHJcblx0XHRcdFx0aWYgKCFpc05hTihkYXRhc2V0LmRhdGFbaW5kZXhdKSAmJiAhZWxlbWVudC5oaWRkZW4pIHtcclxuXHRcdFx0XHRcdGNvdW50Kys7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHJldHVybiBjb3VudDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRfY29tcHV0ZUFuZ2xlOiBmdW5jdGlvbihpbmRleCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgY291bnQgPSB0aGlzLmdldE1ldGEoKS5jb3VudDtcclxuXHRcdFx0dmFyIGRhdGFzZXQgPSBtZS5nZXREYXRhc2V0KCk7XHJcblx0XHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xyXG5cclxuXHRcdFx0aWYgKGlzTmFOKGRhdGFzZXQuZGF0YVtpbmRleF0pIHx8IG1ldGEuZGF0YVtpbmRleF0uaGlkZGVuKSB7XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNjcmlwdGFibGUgb3B0aW9uc1xyXG5cdFx0XHR2YXIgY29udGV4dCA9IHtcclxuXHRcdFx0XHRjaGFydDogbWUuY2hhcnQsXHJcblx0XHRcdFx0ZGF0YUluZGV4OiBpbmRleCxcclxuXHRcdFx0XHRkYXRhc2V0OiBkYXRhc2V0LFxyXG5cdFx0XHRcdGRhdGFzZXRJbmRleDogbWUuaW5kZXhcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdHJldHVybiBoZWxwZXJzLm9wdGlvbnMucmVzb2x2ZShbXHJcblx0XHRcdFx0bWUuY2hhcnQub3B0aW9ucy5lbGVtZW50cy5hcmMuYW5nbGUsXHJcblx0XHRcdFx0KDIgKiBNYXRoLlBJKSAvIGNvdW50XHJcblx0XHRcdF0sIGNvbnRleHQsIGluZGV4KTtcclxuXHRcdH1cclxuXHR9KTtcclxufTtcclxuXHJcbn0se1wiMjZcIjoyNixcIjQxXCI6NDEsXCI0NlwiOjQ2fV0sMjA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKDI2KTtcclxudmFyIGVsZW1lbnRzID0gcmVxdWlyZSg0MSk7XHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Nik7XHJcblxyXG5kZWZhdWx0cy5fc2V0KCdyYWRhcicsIHtcclxuXHRzY2FsZToge1xyXG5cdFx0dHlwZTogJ3JhZGlhbExpbmVhcidcclxuXHR9LFxyXG5cdGVsZW1lbnRzOiB7XHJcblx0XHRsaW5lOiB7XHJcblx0XHRcdHRlbnNpb246IDAgLy8gbm8gYmV6aWVyIGluIHJhZGFyXHJcblx0XHR9XHJcblx0fVxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ2hhcnQpIHtcclxuXHJcblx0Q2hhcnQuY29udHJvbGxlcnMucmFkYXIgPSBDaGFydC5EYXRhc2V0Q29udHJvbGxlci5leHRlbmQoe1xyXG5cclxuXHRcdGRhdGFzZXRFbGVtZW50VHlwZTogZWxlbWVudHMuTGluZSxcclxuXHJcblx0XHRkYXRhRWxlbWVudFR5cGU6IGVsZW1lbnRzLlBvaW50LFxyXG5cclxuXHRcdGxpbmtTY2FsZXM6IGhlbHBlcnMubm9vcCxcclxuXHJcblx0XHR1cGRhdGU6IGZ1bmN0aW9uKHJlc2V0KSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xyXG5cdFx0XHR2YXIgbGluZSA9IG1ldGEuZGF0YXNldDtcclxuXHRcdFx0dmFyIHBvaW50cyA9IG1ldGEuZGF0YTtcclxuXHRcdFx0dmFyIGN1c3RvbSA9IGxpbmUuY3VzdG9tIHx8IHt9O1xyXG5cdFx0XHR2YXIgZGF0YXNldCA9IG1lLmdldERhdGFzZXQoKTtcclxuXHRcdFx0dmFyIGxpbmVFbGVtZW50T3B0aW9ucyA9IG1lLmNoYXJ0Lm9wdGlvbnMuZWxlbWVudHMubGluZTtcclxuXHRcdFx0dmFyIHNjYWxlID0gbWUuY2hhcnQuc2NhbGU7XHJcblxyXG5cdFx0XHQvLyBDb21wYXRpYmlsaXR5OiBJZiB0aGUgcHJvcGVydGllcyBhcmUgZGVmaW5lZCB3aXRoIG9ubHkgdGhlIG9sZCBuYW1lLCB1c2UgdGhvc2UgdmFsdWVzXHJcblx0XHRcdGlmICgoZGF0YXNldC50ZW5zaW9uICE9PSB1bmRlZmluZWQpICYmIChkYXRhc2V0LmxpbmVUZW5zaW9uID09PSB1bmRlZmluZWQpKSB7XHJcblx0XHRcdFx0ZGF0YXNldC5saW5lVGVuc2lvbiA9IGRhdGFzZXQudGVuc2lvbjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aGVscGVycy5leHRlbmQobWV0YS5kYXRhc2V0LCB7XHJcblx0XHRcdFx0Ly8gVXRpbGl0eVxyXG5cdFx0XHRcdF9kYXRhc2V0SW5kZXg6IG1lLmluZGV4LFxyXG5cdFx0XHRcdF9zY2FsZTogc2NhbGUsXHJcblx0XHRcdFx0Ly8gRGF0YVxyXG5cdFx0XHRcdF9jaGlsZHJlbjogcG9pbnRzLFxyXG5cdFx0XHRcdF9sb29wOiB0cnVlLFxyXG5cdFx0XHRcdC8vIE1vZGVsXHJcblx0XHRcdFx0X21vZGVsOiB7XHJcblx0XHRcdFx0XHQvLyBBcHBlYXJhbmNlXHJcblx0XHRcdFx0XHR0ZW5zaW9uOiBjdXN0b20udGVuc2lvbiA/IGN1c3RvbS50ZW5zaW9uIDogaGVscGVycy52YWx1ZU9yRGVmYXVsdChkYXRhc2V0LmxpbmVUZW5zaW9uLCBsaW5lRWxlbWVudE9wdGlvbnMudGVuc2lvbiksXHJcblx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IGN1c3RvbS5iYWNrZ3JvdW5kQ29sb3IgPyBjdXN0b20uYmFja2dyb3VuZENvbG9yIDogKGRhdGFzZXQuYmFja2dyb3VuZENvbG9yIHx8IGxpbmVFbGVtZW50T3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpLFxyXG5cdFx0XHRcdFx0Ym9yZGVyV2lkdGg6IGN1c3RvbS5ib3JkZXJXaWR0aCA/IGN1c3RvbS5ib3JkZXJXaWR0aCA6IChkYXRhc2V0LmJvcmRlcldpZHRoIHx8IGxpbmVFbGVtZW50T3B0aW9ucy5ib3JkZXJXaWR0aCksXHJcblx0XHRcdFx0XHRib3JkZXJDb2xvcjogY3VzdG9tLmJvcmRlckNvbG9yID8gY3VzdG9tLmJvcmRlckNvbG9yIDogKGRhdGFzZXQuYm9yZGVyQ29sb3IgfHwgbGluZUVsZW1lbnRPcHRpb25zLmJvcmRlckNvbG9yKSxcclxuXHRcdFx0XHRcdGZpbGw6IGN1c3RvbS5maWxsID8gY3VzdG9tLmZpbGwgOiAoZGF0YXNldC5maWxsICE9PSB1bmRlZmluZWQgPyBkYXRhc2V0LmZpbGwgOiBsaW5lRWxlbWVudE9wdGlvbnMuZmlsbCksXHJcblx0XHRcdFx0XHRib3JkZXJDYXBTdHlsZTogY3VzdG9tLmJvcmRlckNhcFN0eWxlID8gY3VzdG9tLmJvcmRlckNhcFN0eWxlIDogKGRhdGFzZXQuYm9yZGVyQ2FwU3R5bGUgfHwgbGluZUVsZW1lbnRPcHRpb25zLmJvcmRlckNhcFN0eWxlKSxcclxuXHRcdFx0XHRcdGJvcmRlckRhc2g6IGN1c3RvbS5ib3JkZXJEYXNoID8gY3VzdG9tLmJvcmRlckRhc2ggOiAoZGF0YXNldC5ib3JkZXJEYXNoIHx8IGxpbmVFbGVtZW50T3B0aW9ucy5ib3JkZXJEYXNoKSxcclxuXHRcdFx0XHRcdGJvcmRlckRhc2hPZmZzZXQ6IGN1c3RvbS5ib3JkZXJEYXNoT2Zmc2V0ID8gY3VzdG9tLmJvcmRlckRhc2hPZmZzZXQgOiAoZGF0YXNldC5ib3JkZXJEYXNoT2Zmc2V0IHx8IGxpbmVFbGVtZW50T3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0KSxcclxuXHRcdFx0XHRcdGJvcmRlckpvaW5TdHlsZTogY3VzdG9tLmJvcmRlckpvaW5TdHlsZSA/IGN1c3RvbS5ib3JkZXJKb2luU3R5bGUgOiAoZGF0YXNldC5ib3JkZXJKb2luU3R5bGUgfHwgbGluZUVsZW1lbnRPcHRpb25zLmJvcmRlckpvaW5TdHlsZSksXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdG1ldGEuZGF0YXNldC5waXZvdCgpO1xyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIFBvaW50c1xyXG5cdFx0XHRoZWxwZXJzLmVhY2gocG9pbnRzLCBmdW5jdGlvbihwb2ludCwgaW5kZXgpIHtcclxuXHRcdFx0XHRtZS51cGRhdGVFbGVtZW50KHBvaW50LCBpbmRleCwgcmVzZXQpO1xyXG5cdFx0XHR9LCBtZSk7XHJcblxyXG5cdFx0XHQvLyBVcGRhdGUgYmV6aWVyIGNvbnRyb2wgcG9pbnRzXHJcblx0XHRcdG1lLnVwZGF0ZUJlemllckNvbnRyb2xQb2ludHMoKTtcclxuXHRcdH0sXHJcblx0XHR1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihwb2ludCwgaW5kZXgsIHJlc2V0KSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBjdXN0b20gPSBwb2ludC5jdXN0b20gfHwge307XHJcblx0XHRcdHZhciBkYXRhc2V0ID0gbWUuZ2V0RGF0YXNldCgpO1xyXG5cdFx0XHR2YXIgc2NhbGUgPSBtZS5jaGFydC5zY2FsZTtcclxuXHRcdFx0dmFyIHBvaW50RWxlbWVudE9wdGlvbnMgPSBtZS5jaGFydC5vcHRpb25zLmVsZW1lbnRzLnBvaW50O1xyXG5cdFx0XHR2YXIgcG9pbnRQb3NpdGlvbiA9IHNjYWxlLmdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZShpbmRleCwgZGF0YXNldC5kYXRhW2luZGV4XSk7XHJcblxyXG5cdFx0XHQvLyBDb21wYXRpYmlsaXR5OiBJZiB0aGUgcHJvcGVydGllcyBhcmUgZGVmaW5lZCB3aXRoIG9ubHkgdGhlIG9sZCBuYW1lLCB1c2UgdGhvc2UgdmFsdWVzXHJcblx0XHRcdGlmICgoZGF0YXNldC5yYWRpdXMgIT09IHVuZGVmaW5lZCkgJiYgKGRhdGFzZXQucG9pbnRSYWRpdXMgPT09IHVuZGVmaW5lZCkpIHtcclxuXHRcdFx0XHRkYXRhc2V0LnBvaW50UmFkaXVzID0gZGF0YXNldC5yYWRpdXM7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKChkYXRhc2V0LmhpdFJhZGl1cyAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YXNldC5wb2ludEhpdFJhZGl1cyA9PT0gdW5kZWZpbmVkKSkge1xyXG5cdFx0XHRcdGRhdGFzZXQucG9pbnRIaXRSYWRpdXMgPSBkYXRhc2V0LmhpdFJhZGl1cztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aGVscGVycy5leHRlbmQocG9pbnQsIHtcclxuXHRcdFx0XHQvLyBVdGlsaXR5XHJcblx0XHRcdFx0X2RhdGFzZXRJbmRleDogbWUuaW5kZXgsXHJcblx0XHRcdFx0X2luZGV4OiBpbmRleCxcclxuXHRcdFx0XHRfc2NhbGU6IHNjYWxlLFxyXG5cclxuXHRcdFx0XHQvLyBEZXNpcmVkIHZpZXcgcHJvcGVydGllc1xyXG5cdFx0XHRcdF9tb2RlbDoge1xyXG5cdFx0XHRcdFx0eDogcmVzZXQgPyBzY2FsZS54Q2VudGVyIDogcG9pbnRQb3NpdGlvbi54LCAvLyB2YWx1ZSBub3QgdXNlZCBpbiBkYXRhc2V0IHNjYWxlLCBidXQgd2Ugd2FudCBhIGNvbnNpc3RlbnQgQVBJIGJldHdlZW4gc2NhbGVzXHJcblx0XHRcdFx0XHR5OiByZXNldCA/IHNjYWxlLnlDZW50ZXIgOiBwb2ludFBvc2l0aW9uLnksXHJcblxyXG5cdFx0XHRcdFx0Ly8gQXBwZWFyYW5jZVxyXG5cdFx0XHRcdFx0dGVuc2lvbjogY3VzdG9tLnRlbnNpb24gPyBjdXN0b20udGVuc2lvbiA6IGhlbHBlcnMudmFsdWVPckRlZmF1bHQoZGF0YXNldC5saW5lVGVuc2lvbiwgbWUuY2hhcnQub3B0aW9ucy5lbGVtZW50cy5saW5lLnRlbnNpb24pLFxyXG5cdFx0XHRcdFx0cmFkaXVzOiBjdXN0b20ucmFkaXVzID8gY3VzdG9tLnJhZGl1cyA6IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0KGRhdGFzZXQucG9pbnRSYWRpdXMsIGluZGV4LCBwb2ludEVsZW1lbnRPcHRpb25zLnJhZGl1cyksXHJcblx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IGN1c3RvbS5iYWNrZ3JvdW5kQ29sb3IgPyBjdXN0b20uYmFja2dyb3VuZENvbG9yIDogaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQoZGF0YXNldC5wb2ludEJhY2tncm91bmRDb2xvciwgaW5kZXgsIHBvaW50RWxlbWVudE9wdGlvbnMuYmFja2dyb3VuZENvbG9yKSxcclxuXHRcdFx0XHRcdGJvcmRlckNvbG9yOiBjdXN0b20uYm9yZGVyQ29sb3IgPyBjdXN0b20uYm9yZGVyQ29sb3IgOiBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChkYXRhc2V0LnBvaW50Qm9yZGVyQ29sb3IsIGluZGV4LCBwb2ludEVsZW1lbnRPcHRpb25zLmJvcmRlckNvbG9yKSxcclxuXHRcdFx0XHRcdGJvcmRlcldpZHRoOiBjdXN0b20uYm9yZGVyV2lkdGggPyBjdXN0b20uYm9yZGVyV2lkdGggOiBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChkYXRhc2V0LnBvaW50Qm9yZGVyV2lkdGgsIGluZGV4LCBwb2ludEVsZW1lbnRPcHRpb25zLmJvcmRlcldpZHRoKSxcclxuXHRcdFx0XHRcdHBvaW50U3R5bGU6IGN1c3RvbS5wb2ludFN0eWxlID8gY3VzdG9tLnBvaW50U3R5bGUgOiBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChkYXRhc2V0LnBvaW50U3R5bGUsIGluZGV4LCBwb2ludEVsZW1lbnRPcHRpb25zLnBvaW50U3R5bGUpLFxyXG5cdFx0XHRcdFx0cm90YXRpb246IGN1c3RvbS5yb3RhdGlvbiA/IGN1c3RvbS5yb3RhdGlvbiA6IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0KGRhdGFzZXQucG9pbnRSb3RhdGlvbiwgaW5kZXgsIHBvaW50RWxlbWVudE9wdGlvbnMucm90YXRpb24pLFxyXG5cclxuXHRcdFx0XHRcdC8vIFRvb2x0aXBcclxuXHRcdFx0XHRcdGhpdFJhZGl1czogY3VzdG9tLmhpdFJhZGl1cyA/IGN1c3RvbS5oaXRSYWRpdXMgOiBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChkYXRhc2V0LnBvaW50SGl0UmFkaXVzLCBpbmRleCwgcG9pbnRFbGVtZW50T3B0aW9ucy5oaXRSYWRpdXMpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHBvaW50Ll9tb2RlbC5za2lwID0gY3VzdG9tLnNraXAgPyBjdXN0b20uc2tpcCA6IChpc05hTihwb2ludC5fbW9kZWwueCkgfHwgaXNOYU4ocG9pbnQuX21vZGVsLnkpKTtcclxuXHRcdH0sXHJcblx0XHR1cGRhdGVCZXppZXJDb250cm9sUG9pbnRzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGNoYXJ0QXJlYSA9IHRoaXMuY2hhcnQuY2hhcnRBcmVhO1xyXG5cdFx0XHR2YXIgbWV0YSA9IHRoaXMuZ2V0TWV0YSgpO1xyXG5cclxuXHRcdFx0aGVscGVycy5lYWNoKG1ldGEuZGF0YSwgZnVuY3Rpb24ocG9pbnQsIGluZGV4KSB7XHJcblx0XHRcdFx0dmFyIG1vZGVsID0gcG9pbnQuX21vZGVsO1xyXG5cdFx0XHRcdHZhciBjb250cm9sUG9pbnRzID0gaGVscGVycy5zcGxpbmVDdXJ2ZShcclxuXHRcdFx0XHRcdGhlbHBlcnMucHJldmlvdXNJdGVtKG1ldGEuZGF0YSwgaW5kZXgsIHRydWUpLl9tb2RlbCxcclxuXHRcdFx0XHRcdG1vZGVsLFxyXG5cdFx0XHRcdFx0aGVscGVycy5uZXh0SXRlbShtZXRhLmRhdGEsIGluZGV4LCB0cnVlKS5fbW9kZWwsXHJcblx0XHRcdFx0XHRtb2RlbC50ZW5zaW9uXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0Ly8gUHJldmVudCB0aGUgYmV6aWVyIGdvaW5nIG91dHNpZGUgb2YgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhcclxuXHRcdFx0XHRtb2RlbC5jb250cm9sUG9pbnRQcmV2aW91c1ggPSBNYXRoLm1heChNYXRoLm1pbihjb250cm9sUG9pbnRzLnByZXZpb3VzLngsIGNoYXJ0QXJlYS5yaWdodCksIGNoYXJ0QXJlYS5sZWZ0KTtcclxuXHRcdFx0XHRtb2RlbC5jb250cm9sUG9pbnRQcmV2aW91c1kgPSBNYXRoLm1heChNYXRoLm1pbihjb250cm9sUG9pbnRzLnByZXZpb3VzLnksIGNoYXJ0QXJlYS5ib3R0b20pLCBjaGFydEFyZWEudG9wKTtcclxuXHJcblx0XHRcdFx0bW9kZWwuY29udHJvbFBvaW50TmV4dFggPSBNYXRoLm1heChNYXRoLm1pbihjb250cm9sUG9pbnRzLm5leHQueCwgY2hhcnRBcmVhLnJpZ2h0KSwgY2hhcnRBcmVhLmxlZnQpO1xyXG5cdFx0XHRcdG1vZGVsLmNvbnRyb2xQb2ludE5leHRZID0gTWF0aC5tYXgoTWF0aC5taW4oY29udHJvbFBvaW50cy5uZXh0LnksIGNoYXJ0QXJlYS5ib3R0b20pLCBjaGFydEFyZWEudG9wKTtcclxuXHJcblx0XHRcdFx0Ly8gTm93IHBpdm90IHRoZSBwb2ludCBmb3IgYW5pbWF0aW9uXHJcblx0XHRcdFx0cG9pbnQucGl2b3QoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdHNldEhvdmVyU3R5bGU6IGZ1bmN0aW9uKHBvaW50KSB7XHJcblx0XHRcdC8vIFBvaW50XHJcblx0XHRcdHZhciBkYXRhc2V0ID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW3BvaW50Ll9kYXRhc2V0SW5kZXhdO1xyXG5cdFx0XHR2YXIgY3VzdG9tID0gcG9pbnQuY3VzdG9tIHx8IHt9O1xyXG5cdFx0XHR2YXIgaW5kZXggPSBwb2ludC5faW5kZXg7XHJcblx0XHRcdHZhciBtb2RlbCA9IHBvaW50Ll9tb2RlbDtcclxuXHJcblx0XHRcdHBvaW50LiRwcmV2aW91c1N0eWxlID0ge1xyXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogbW9kZWwuYmFja2dyb3VuZENvbG9yLFxyXG5cdFx0XHRcdGJvcmRlckNvbG9yOiBtb2RlbC5ib3JkZXJDb2xvcixcclxuXHRcdFx0XHRib3JkZXJXaWR0aDogbW9kZWwuYm9yZGVyV2lkdGgsXHJcblx0XHRcdFx0cmFkaXVzOiBtb2RlbC5yYWRpdXNcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdG1vZGVsLnJhZGl1cyA9IGN1c3RvbS5ob3ZlclJhZGl1cyA/IGN1c3RvbS5ob3ZlclJhZGl1cyA6IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0KGRhdGFzZXQucG9pbnRIb3ZlclJhZGl1cywgaW5kZXgsIHRoaXMuY2hhcnQub3B0aW9ucy5lbGVtZW50cy5wb2ludC5ob3ZlclJhZGl1cyk7XHJcblx0XHRcdG1vZGVsLmJhY2tncm91bmRDb2xvciA9IGN1c3RvbS5ob3ZlckJhY2tncm91bmRDb2xvciA/IGN1c3RvbS5ob3ZlckJhY2tncm91bmRDb2xvciA6IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0KGRhdGFzZXQucG9pbnRIb3ZlckJhY2tncm91bmRDb2xvciwgaW5kZXgsIGhlbHBlcnMuZ2V0SG92ZXJDb2xvcihtb2RlbC5iYWNrZ3JvdW5kQ29sb3IpKTtcclxuXHRcdFx0bW9kZWwuYm9yZGVyQ29sb3IgPSBjdXN0b20uaG92ZXJCb3JkZXJDb2xvciA/IGN1c3RvbS5ob3ZlckJvcmRlckNvbG9yIDogaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQoZGF0YXNldC5wb2ludEhvdmVyQm9yZGVyQ29sb3IsIGluZGV4LCBoZWxwZXJzLmdldEhvdmVyQ29sb3IobW9kZWwuYm9yZGVyQ29sb3IpKTtcclxuXHRcdFx0bW9kZWwuYm9yZGVyV2lkdGggPSBjdXN0b20uaG92ZXJCb3JkZXJXaWR0aCA/IGN1c3RvbS5ob3ZlckJvcmRlcldpZHRoIDogaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQoZGF0YXNldC5wb2ludEhvdmVyQm9yZGVyV2lkdGgsIGluZGV4LCBtb2RlbC5ib3JkZXJXaWR0aCk7XHJcblx0XHR9LFxyXG5cdH0pO1xyXG59O1xyXG5cclxufSx7XCIyNlwiOjI2LFwiNDFcIjo0MSxcIjQ2XCI6NDZ9XSwyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG5cclxuZGVmYXVsdHMuX3NldCgnc2NhdHRlcicsIHtcclxuXHRob3Zlcjoge1xyXG5cdFx0bW9kZTogJ3NpbmdsZSdcclxuXHR9LFxyXG5cclxuXHRzY2FsZXM6IHtcclxuXHRcdHhBeGVzOiBbe1xyXG5cdFx0XHRpZDogJ3gtYXhpcy0xJywgICAgLy8gbmVlZCBhbiBJRCBzbyBkYXRhc2V0cyBjYW4gcmVmZXJlbmNlIHRoZSBzY2FsZVxyXG5cdFx0XHR0eXBlOiAnbGluZWFyJywgICAgLy8gc2NhdHRlciBzaG91bGQgbm90IHVzZSBhIGNhdGVnb3J5IGF4aXNcclxuXHRcdFx0cG9zaXRpb246ICdib3R0b20nXHJcblx0XHR9XSxcclxuXHRcdHlBeGVzOiBbe1xyXG5cdFx0XHRpZDogJ3ktYXhpcy0xJyxcclxuXHRcdFx0dHlwZTogJ2xpbmVhcicsXHJcblx0XHRcdHBvc2l0aW9uOiAnbGVmdCdcclxuXHRcdH1dXHJcblx0fSxcclxuXHJcblx0c2hvd0xpbmVzOiBmYWxzZSxcclxuXHJcblx0dG9vbHRpcHM6IHtcclxuXHRcdGNhbGxiYWNrczoge1xyXG5cdFx0XHR0aXRsZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuICcnOyAgICAgLy8gZG9lc24ndCBtYWtlIHNlbnNlIGZvciBzY2F0dGVyIHNpbmNlIGRhdGEgYXJlIGZvcm1hdHRlZCBhcyBhIHBvaW50XHJcblx0XHRcdH0sXHJcblx0XHRcdGxhYmVsOiBmdW5jdGlvbihpdGVtKSB7XHJcblx0XHRcdFx0cmV0dXJuICcoJyArIGl0ZW0ueExhYmVsICsgJywgJyArIGl0ZW0ueUxhYmVsICsgJyknO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ2hhcnQpIHtcclxuXHJcblx0Ly8gU2NhdHRlciBjaGFydHMgdXNlIGxpbmUgY29udHJvbGxlcnNcclxuXHRDaGFydC5jb250cm9sbGVycy5zY2F0dGVyID0gQ2hhcnQuY29udHJvbGxlcnMubGluZTtcclxuXHJcbn07XHJcblxyXG59LHtcIjI2XCI6MjZ9XSwyMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBFbGVtZW50ID0gcmVxdWlyZSgyNyk7XHJcblxyXG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gRWxlbWVudC5leHRlbmQoe1xyXG5cdGNoYXJ0OiBudWxsLCAvLyB0aGUgYW5pbWF0aW9uIGFzc29jaWF0ZWQgY2hhcnQgaW5zdGFuY2VcclxuXHRjdXJyZW50U3RlcDogMCwgLy8gdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHN0ZXBcclxuXHRudW1TdGVwczogNjAsIC8vIGRlZmF1bHQgbnVtYmVyIG9mIHN0ZXBzXHJcblx0ZWFzaW5nOiAnJywgLy8gdGhlIGVhc2luZyB0byB1c2UgZm9yIHRoaXMgYW5pbWF0aW9uXHJcblx0cmVuZGVyOiBudWxsLCAvLyByZW5kZXIgZnVuY3Rpb24gdXNlZCBieSB0aGUgYW5pbWF0aW9uIHNlcnZpY2VcclxuXHJcblx0b25BbmltYXRpb25Qcm9ncmVzczogbnVsbCwgLy8gdXNlciBzcGVjaWZpZWQgY2FsbGJhY2sgdG8gZmlyZSBvbiBlYWNoIHN0ZXAgb2YgdGhlIGFuaW1hdGlvblxyXG5cdG9uQW5pbWF0aW9uQ29tcGxldGU6IG51bGwsIC8vIHVzZXIgc3BlY2lmaWVkIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgYW5pbWF0aW9uIGZpbmlzaGVzXHJcbn0pO1xyXG5cclxuLy8gREVQUkVDQVRJT05TXHJcblxyXG4vKipcclxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5BbmltYXRpb24gaW5zdGVhZFxyXG4gKiBAcHJvcCBDaGFydC5BbmltYXRpb24jYW5pbWF0aW9uT2JqZWN0XHJcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi42LjBcclxuICogQHRvZG8gcmVtb3ZlIGF0IHZlcnNpb24gM1xyXG4gKi9cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMucHJvdG90eXBlLCAnYW5pbWF0aW9uT2JqZWN0Jywge1xyXG5cdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB1c2UgQ2hhcnQuQW5pbWF0aW9uI2NoYXJ0IGluc3RlYWRcclxuICogQHByb3AgQ2hhcnQuQW5pbWF0aW9uI2NoYXJ0SW5zdGFuY2VcclxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjYuMFxyXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcbiAqL1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5wcm90b3R5cGUsICdjaGFydEluc3RhbmNlJywge1xyXG5cdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jaGFydDtcclxuXHR9LFxyXG5cdHNldDogZnVuY3Rpb24odmFsdWUpIHtcclxuXHRcdHRoaXMuY2hhcnQgPSB2YWx1ZTtcclxuXHR9XHJcbn0pO1xyXG5cclxufSx7XCIyN1wiOjI3fV0sMjM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4vKiBnbG9iYWwgd2luZG93OiBmYWxzZSAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKDI2KTtcclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxuXHJcbmRlZmF1bHRzLl9zZXQoJ2dsb2JhbCcsIHtcclxuXHRhbmltYXRpb246IHtcclxuXHRcdGR1cmF0aW9uOiAxMDAwLFxyXG5cdFx0ZWFzaW5nOiAnZWFzZU91dFF1YXJ0JyxcclxuXHRcdG9uUHJvZ3Jlc3M6IGhlbHBlcnMubm9vcCxcclxuXHRcdG9uQ29tcGxldGU6IGhlbHBlcnMubm9vcFxyXG5cdH1cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHRmcmFtZUR1cmF0aW9uOiAxNyxcclxuXHRhbmltYXRpb25zOiBbXSxcclxuXHRkcm9wRnJhbWVzOiAwLFxyXG5cdHJlcXVlc3Q6IG51bGwsXHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gVGhlIGNoYXJ0IHRvIGFuaW1hdGUuXHJcblx0ICogQHBhcmFtIHtDaGFydC5BbmltYXRpb259IGFuaW1hdGlvbiAtIFRoZSBhbmltYXRpb24gdGhhdCB3ZSB3aWxsIGFuaW1hdGUuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpbiBtcy5cclxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IGxhenkgLSBpZiB0cnVlLCB0aGUgY2hhcnQgaXMgbm90IG1hcmtlZCBhcyBhbmltYXRpbmcgdG8gZW5hYmxlIG1vcmUgcmVzcG9uc2l2ZSBpbnRlcmFjdGlvbnNcclxuXHQgKi9cclxuXHRhZGRBbmltYXRpb246IGZ1bmN0aW9uKGNoYXJ0LCBhbmltYXRpb24sIGR1cmF0aW9uLCBsYXp5KSB7XHJcblx0XHR2YXIgYW5pbWF0aW9ucyA9IHRoaXMuYW5pbWF0aW9ucztcclxuXHRcdHZhciBpLCBpbGVuO1xyXG5cclxuXHRcdGFuaW1hdGlvbi5jaGFydCA9IGNoYXJ0O1xyXG5cclxuXHRcdGlmICghbGF6eSkge1xyXG5cdFx0XHRjaGFydC5hbmltYXRpbmcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSBhbmltYXRpb25zLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHRpZiAoYW5pbWF0aW9uc1tpXS5jaGFydCA9PT0gY2hhcnQpIHtcclxuXHRcdFx0XHRhbmltYXRpb25zW2ldID0gYW5pbWF0aW9uO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGFuaW1hdGlvbnMucHVzaChhbmltYXRpb24pO1xyXG5cclxuXHRcdC8vIElmIHRoZXJlIGFyZSBubyBhbmltYXRpb25zIHF1ZXVlZCwgbWFudWFsbHkga2lja3N0YXJ0IGEgZGlnZXN0LCBmb3IgbGFjayBvZiBhIGJldHRlciB3b3JkXHJcblx0XHRpZiAoYW5pbWF0aW9ucy5sZW5ndGggPT09IDEpIHtcclxuXHRcdFx0dGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRjYW5jZWxBbmltYXRpb246IGZ1bmN0aW9uKGNoYXJ0KSB7XHJcblx0XHR2YXIgaW5kZXggPSBoZWxwZXJzLmZpbmRJbmRleCh0aGlzLmFuaW1hdGlvbnMsIGZ1bmN0aW9uKGFuaW1hdGlvbikge1xyXG5cdFx0XHRyZXR1cm4gYW5pbWF0aW9uLmNoYXJ0ID09PSBjaGFydDtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpIHtcclxuXHRcdFx0dGhpcy5hbmltYXRpb25zLnNwbGljZShpbmRleCwgMSk7XHJcblx0XHRcdGNoYXJ0LmFuaW1hdGluZyA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZTogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0aWYgKG1lLnJlcXVlc3QgPT09IG51bGwpIHtcclxuXHRcdFx0Ly8gU2tpcCBhbmltYXRpb24gZnJhbWUgcmVxdWVzdHMgdW50aWwgdGhlIGFjdGl2ZSBvbmUgaXMgZXhlY3V0ZWQuXHJcblx0XHRcdC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHByb2Nlc3NpbmcgbW91c2UgZXZlbnRzLCBlLmcuICdtb3VzZW1vdmUnXHJcblx0XHRcdC8vIGFuZCAnbW91c2VvdXQnIGV2ZW50cyB3aWxsIHRyaWdnZXIgbXVsdGlwbGUgcmVuZGVycy5cclxuXHRcdFx0bWUucmVxdWVzdCA9IGhlbHBlcnMucmVxdWVzdEFuaW1GcmFtZS5jYWxsKHdpbmRvdywgZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0bWUucmVxdWVzdCA9IG51bGw7XHJcblx0XHRcdFx0bWUuc3RhcnREaWdlc3QoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRzdGFydERpZ2VzdDogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0dmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcblx0XHR2YXIgZnJhbWVzVG9Ecm9wID0gMDtcclxuXHJcblx0XHRpZiAobWUuZHJvcEZyYW1lcyA+IDEpIHtcclxuXHRcdFx0ZnJhbWVzVG9Ecm9wID0gTWF0aC5mbG9vcihtZS5kcm9wRnJhbWVzKTtcclxuXHRcdFx0bWUuZHJvcEZyYW1lcyA9IG1lLmRyb3BGcmFtZXMgJSAxO1xyXG5cdFx0fVxyXG5cclxuXHRcdG1lLmFkdmFuY2UoMSArIGZyYW1lc1RvRHJvcCk7XHJcblxyXG5cdFx0dmFyIGVuZFRpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuXHRcdG1lLmRyb3BGcmFtZXMgKz0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gbWUuZnJhbWVEdXJhdGlvbjtcclxuXHJcblx0XHQvLyBEbyB3ZSBoYXZlIG1vcmUgc3R1ZmYgdG8gYW5pbWF0ZT9cclxuXHRcdGlmIChtZS5hbmltYXRpb25zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0bWUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRhZHZhbmNlOiBmdW5jdGlvbihjb3VudCkge1xyXG5cdFx0dmFyIGFuaW1hdGlvbnMgPSB0aGlzLmFuaW1hdGlvbnM7XHJcblx0XHR2YXIgYW5pbWF0aW9uLCBjaGFydDtcclxuXHRcdHZhciBpID0gMDtcclxuXHJcblx0XHR3aGlsZSAoaSA8IGFuaW1hdGlvbnMubGVuZ3RoKSB7XHJcblx0XHRcdGFuaW1hdGlvbiA9IGFuaW1hdGlvbnNbaV07XHJcblx0XHRcdGNoYXJ0ID0gYW5pbWF0aW9uLmNoYXJ0O1xyXG5cclxuXHRcdFx0YW5pbWF0aW9uLmN1cnJlbnRTdGVwID0gKGFuaW1hdGlvbi5jdXJyZW50U3RlcCB8fCAwKSArIGNvdW50O1xyXG5cdFx0XHRhbmltYXRpb24uY3VycmVudFN0ZXAgPSBNYXRoLm1pbihhbmltYXRpb24uY3VycmVudFN0ZXAsIGFuaW1hdGlvbi5udW1TdGVwcyk7XHJcblxyXG5cdFx0XHRoZWxwZXJzLmNhbGxiYWNrKGFuaW1hdGlvbi5yZW5kZXIsIFtjaGFydCwgYW5pbWF0aW9uXSwgY2hhcnQpO1xyXG5cdFx0XHRoZWxwZXJzLmNhbGxiYWNrKGFuaW1hdGlvbi5vbkFuaW1hdGlvblByb2dyZXNzLCBbYW5pbWF0aW9uXSwgY2hhcnQpO1xyXG5cclxuXHRcdFx0aWYgKGFuaW1hdGlvbi5jdXJyZW50U3RlcCA+PSBhbmltYXRpb24ubnVtU3RlcHMpIHtcclxuXHRcdFx0XHRoZWxwZXJzLmNhbGxiYWNrKGFuaW1hdGlvbi5vbkFuaW1hdGlvbkNvbXBsZXRlLCBbYW5pbWF0aW9uXSwgY2hhcnQpO1xyXG5cdFx0XHRcdGNoYXJ0LmFuaW1hdGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdGFuaW1hdGlvbnMuc3BsaWNlKGksIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdCsraTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufTtcclxuXHJcbn0se1wiMjZcIjoyNixcIjQ2XCI6NDZ9XSwyNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBBbmltYXRpb24gPSByZXF1aXJlKDIyKTtcclxudmFyIGFuaW1hdGlvbnMgPSByZXF1aXJlKDIzKTtcclxudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgyNik7XHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Nik7XHJcbnZhciBJbnRlcmFjdGlvbiA9IHJlcXVpcmUoMjkpO1xyXG52YXIgbGF5b3V0cyA9IHJlcXVpcmUoMzEpO1xyXG52YXIgcGxhdGZvcm0gPSByZXF1aXJlKDQ5KTtcclxudmFyIHBsdWdpbnMgPSByZXF1aXJlKDMyKTtcclxudmFyIHNjYWxlU2VydmljZSA9IHJlcXVpcmUoMzQpO1xyXG52YXIgVG9vbHRpcCA9IHJlcXVpcmUoMzYpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDaGFydCkge1xyXG5cclxuXHQvLyBDcmVhdGUgYSBkaWN0aW9uYXJ5IG9mIGNoYXJ0IHR5cGVzLCB0byBhbGxvdyBmb3IgZXh0ZW5zaW9uIG9mIGV4aXN0aW5nIHR5cGVzXHJcblx0Q2hhcnQudHlwZXMgPSB7fTtcclxuXHJcblx0Ly8gU3RvcmUgYSByZWZlcmVuY2UgdG8gZWFjaCBpbnN0YW5jZSAtIGFsbG93aW5nIHVzIHRvIGdsb2JhbGx5IHJlc2l6ZSBjaGFydCBpbnN0YW5jZXMgb24gd2luZG93IHJlc2l6ZS5cclxuXHQvLyBEZXN0cm95IG1ldGhvZCBvbiB0aGUgY2hhcnQgd2lsbCByZW1vdmUgdGhlIGluc3RhbmNlIG9mIHRoZSBjaGFydCBmcm9tIHRoaXMgcmVmZXJlbmNlLlxyXG5cdENoYXJ0Lmluc3RhbmNlcyA9IHt9O1xyXG5cclxuXHQvLyBDb250cm9sbGVycyBhdmFpbGFibGUgZm9yIGRhdGFzZXQgdmlzdWFsaXphdGlvbiBlZy4gYmFyLCBsaW5lLCBzbGljZSwgZXRjLlxyXG5cdENoYXJ0LmNvbnRyb2xsZXJzID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluaXRpYWxpemVzIHRoZSBnaXZlbiBjb25maWcgd2l0aCBnbG9iYWwgYW5kIGNoYXJ0IGRlZmF1bHQgdmFsdWVzLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGluaXRDb25maWcoY29uZmlnKSB7XHJcblx0XHRjb25maWcgPSBjb25maWcgfHwge307XHJcblxyXG5cdFx0Ly8gRG8gTk9UIHVzZSBjb25maWdNZXJnZSgpIGZvciB0aGUgZGF0YSBvYmplY3QgYmVjYXVzZSB0aGlzIG1ldGhvZCBtZXJnZXMgYXJyYXlzXHJcblx0XHQvLyBhbmQgc28gd291bGQgY2hhbmdlIHJlZmVyZW5jZXMgdG8gbGFiZWxzIGFuZCBkYXRhc2V0cywgcHJldmVudGluZyBkYXRhIHVwZGF0ZXMuXHJcblx0XHR2YXIgZGF0YSA9IGNvbmZpZy5kYXRhID0gY29uZmlnLmRhdGEgfHwge307XHJcblx0XHRkYXRhLmRhdGFzZXRzID0gZGF0YS5kYXRhc2V0cyB8fCBbXTtcclxuXHRcdGRhdGEubGFiZWxzID0gZGF0YS5sYWJlbHMgfHwgW107XHJcblxyXG5cdFx0Y29uZmlnLm9wdGlvbnMgPSBoZWxwZXJzLmNvbmZpZ01lcmdlKFxyXG5cdFx0XHRkZWZhdWx0cy5nbG9iYWwsXHJcblx0XHRcdGRlZmF1bHRzW2NvbmZpZy50eXBlXSxcclxuXHRcdFx0Y29uZmlnLm9wdGlvbnMgfHwge30pO1xyXG5cclxuXHRcdHJldHVybiBjb25maWc7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGVzIHRoZSBjb25maWcgb2YgdGhlIGNoYXJ0XHJcblx0ICogQHBhcmFtIGNoYXJ0IHtDaGFydH0gY2hhcnQgdG8gdXBkYXRlIHRoZSBvcHRpb25zIGZvclxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHVwZGF0ZUNvbmZpZyhjaGFydCkge1xyXG5cdFx0dmFyIG5ld09wdGlvbnMgPSBjaGFydC5vcHRpb25zO1xyXG5cclxuXHRcdGhlbHBlcnMuZWFjaChjaGFydC5zY2FsZXMsIGZ1bmN0aW9uKHNjYWxlKSB7XHJcblx0XHRcdGxheW91dHMucmVtb3ZlQm94KGNoYXJ0LCBzY2FsZSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRuZXdPcHRpb25zID0gaGVscGVycy5jb25maWdNZXJnZShcclxuXHRcdFx0Q2hhcnQuZGVmYXVsdHMuZ2xvYmFsLFxyXG5cdFx0XHRDaGFydC5kZWZhdWx0c1tjaGFydC5jb25maWcudHlwZV0sXHJcblx0XHRcdG5ld09wdGlvbnMpO1xyXG5cclxuXHRcdGNoYXJ0Lm9wdGlvbnMgPSBjaGFydC5jb25maWcub3B0aW9ucyA9IG5ld09wdGlvbnM7XHJcblx0XHRjaGFydC5lbnN1cmVTY2FsZXNIYXZlSURzKCk7XHJcblx0XHRjaGFydC5idWlsZE9yVXBkYXRlU2NhbGVzKCk7XHJcblx0XHQvLyBUb29sdGlwXHJcblx0XHRjaGFydC50b29sdGlwLl9vcHRpb25zID0gbmV3T3B0aW9ucy50b29sdGlwcztcclxuXHRcdGNoYXJ0LnRvb2x0aXAuaW5pdGlhbGl6ZSgpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcG9zaXRpb25Jc0hvcml6b250YWwocG9zaXRpb24pIHtcclxuXHRcdHJldHVybiBwb3NpdGlvbiA9PT0gJ3RvcCcgfHwgcG9zaXRpb24gPT09ICdib3R0b20nO1xyXG5cdH1cclxuXHJcblx0aGVscGVycy5leHRlbmQoQ2hhcnQucHJvdG90eXBlLCAvKiogQGxlbmRzIENoYXJ0ICovIHtcclxuXHRcdC8qKlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0Y29uc3RydWN0OiBmdW5jdGlvbihpdGVtLCBjb25maWcpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHJcblx0XHRcdGNvbmZpZyA9IGluaXRDb25maWcoY29uZmlnKTtcclxuXHJcblx0XHRcdHZhciBjb250ZXh0ID0gcGxhdGZvcm0uYWNxdWlyZUNvbnRleHQoaXRlbSwgY29uZmlnKTtcclxuXHRcdFx0dmFyIGNhbnZhcyA9IGNvbnRleHQgJiYgY29udGV4dC5jYW52YXM7XHJcblx0XHRcdHZhciBoZWlnaHQgPSBjYW52YXMgJiYgY2FudmFzLmhlaWdodDtcclxuXHRcdFx0dmFyIHdpZHRoID0gY2FudmFzICYmIGNhbnZhcy53aWR0aDtcclxuXHJcblx0XHRcdG1lLmlkID0gaGVscGVycy51aWQoKTtcclxuXHRcdFx0bWUuY3R4ID0gY29udGV4dDtcclxuXHRcdFx0bWUuY2FudmFzID0gY2FudmFzO1xyXG5cdFx0XHRtZS5jb25maWcgPSBjb25maWc7XHJcblx0XHRcdG1lLndpZHRoID0gd2lkdGg7XHJcblx0XHRcdG1lLmhlaWdodCA9IGhlaWdodDtcclxuXHRcdFx0bWUuYXNwZWN0UmF0aW8gPSBoZWlnaHQgPyB3aWR0aCAvIGhlaWdodCA6IG51bGw7XHJcblx0XHRcdG1lLm9wdGlvbnMgPSBjb25maWcub3B0aW9ucztcclxuXHRcdFx0bWUuX2J1ZmZlcmVkUmVuZGVyID0gZmFsc2U7XHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIENoYXJ0IGFuZCBDaGFydC5Db250cm9sbGVyIGhhdmUgYmVlbiBtZXJnZWQsXHJcblx0XHRcdCAqIHRoZSBcImluc3RhbmNlXCIgc3RpbGwgbmVlZCB0byBiZSBkZWZpbmVkIHNpbmNlIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIHBsdWdpbnMuXHJcblx0XHRcdCAqIEBwcm9wIENoYXJ0I2NoYXJ0XHJcblx0XHRcdCAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi42LjBcclxuXHRcdFx0ICogQHRvZG8gcmVtb3ZlIGF0IHZlcnNpb24gM1xyXG5cdFx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0bWUuY2hhcnQgPSBtZTtcclxuXHRcdFx0bWUuY29udHJvbGxlciA9IG1lOyAvLyBjaGFydC5jaGFydC5jb250cm9sbGVyICNpbmNlcHRpb25cclxuXHJcblx0XHRcdC8vIEFkZCB0aGUgY2hhcnQgaW5zdGFuY2UgdG8gdGhlIGdsb2JhbCBuYW1lc3BhY2VcclxuXHRcdFx0Q2hhcnQuaW5zdGFuY2VzW21lLmlkXSA9IG1lO1xyXG5cclxuXHRcdFx0Ly8gRGVmaW5lIGFsaWFzIHRvIHRoZSBjb25maWcgZGF0YTogYGNoYXJ0LmRhdGEgPT09IGNoYXJ0LmNvbmZpZy5kYXRhYFxyXG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsICdkYXRhJywge1xyXG5cdFx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gbWUuY29uZmlnLmRhdGE7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcblx0XHRcdFx0XHRtZS5jb25maWcuZGF0YSA9IHZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRpZiAoIWNvbnRleHQgfHwgIWNhbnZhcykge1xyXG5cdFx0XHRcdC8vIFRoZSBnaXZlbiBpdGVtIGlzIG5vdCBhIGNvbXBhdGlibGUgY29udGV4dDJkIGVsZW1lbnQsIGxldCdzIHJldHVybiBiZWZvcmUgZmluYWxpemluZ1xyXG5cdFx0XHRcdC8vIHRoZSBjaGFydCBpbml0aWFsaXphdGlvbiBidXQgYWZ0ZXIgc2V0dGluZyBiYXNpYyBjaGFydCAvIGNvbnRyb2xsZXIgcHJvcGVydGllcyB0aGF0XHJcblx0XHRcdFx0Ly8gY2FuIGhlbHAgdG8gZmlndXJlIG91dCB0aGF0IHRoZSBjaGFydCBpcyBub3QgdmFsaWQgKGUuZyBjaGFydC5jYW52YXMgIT09IG51bGwpO1xyXG5cdFx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy8yODA3XHJcblx0XHRcdFx0Y29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgY2hhcnQ6IGNhbid0IGFjcXVpcmUgY29udGV4dCBmcm9tIHRoZSBnaXZlbiBpdGVtXCIpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bWUuaW5pdGlhbGl6ZSgpO1xyXG5cdFx0XHRtZS51cGRhdGUoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHJcblx0XHRcdC8vIEJlZm9yZSBpbml0IHBsdWdpbiBub3RpZmljYXRpb25cclxuXHRcdFx0cGx1Z2lucy5ub3RpZnkobWUsICdiZWZvcmVJbml0Jyk7XHJcblxyXG5cdFx0XHRoZWxwZXJzLnJldGluYVNjYWxlKG1lLCBtZS5vcHRpb25zLmRldmljZVBpeGVsUmF0aW8pO1xyXG5cclxuXHRcdFx0bWUuYmluZEV2ZW50cygpO1xyXG5cclxuXHRcdFx0aWYgKG1lLm9wdGlvbnMucmVzcG9uc2l2ZSkge1xyXG5cdFx0XHRcdC8vIEluaXRpYWwgcmVzaXplIGJlZm9yZSBjaGFydCBkcmF3cyAobXVzdCBiZSBzaWxlbnQgdG8gcHJlc2VydmUgaW5pdGlhbCBhbmltYXRpb25zKS5cclxuXHRcdFx0XHRtZS5yZXNpemUodHJ1ZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE1ha2Ugc3VyZSBzY2FsZXMgaGF2ZSBJRHMgYW5kIGFyZSBidWlsdCBiZWZvcmUgd2UgYnVpbGQgYW55IGNvbnRyb2xsZXJzLlxyXG5cdFx0XHRtZS5lbnN1cmVTY2FsZXNIYXZlSURzKCk7XHJcblx0XHRcdG1lLmJ1aWxkT3JVcGRhdGVTY2FsZXMoKTtcclxuXHRcdFx0bWUuaW5pdFRvb2xUaXAoKTtcclxuXHJcblx0XHRcdC8vIEFmdGVyIGluaXQgcGx1Z2luIG5vdGlmaWNhdGlvblxyXG5cdFx0XHRwbHVnaW5zLm5vdGlmeShtZSwgJ2FmdGVySW5pdCcpO1xyXG5cclxuXHRcdFx0cmV0dXJuIG1lO1xyXG5cdFx0fSxcclxuXHJcblx0XHRjbGVhcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdGhlbHBlcnMuY2FudmFzLmNsZWFyKHRoaXMpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH0sXHJcblxyXG5cdFx0c3RvcDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdC8vIFN0b3BzIGFueSBjdXJyZW50IGFuaW1hdGlvbiBsb29wIG9jY3VycmluZ1xyXG5cdFx0XHRhbmltYXRpb25zLmNhbmNlbEFuaW1hdGlvbih0aGlzKTtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9LFxyXG5cclxuXHRcdHJlc2l6ZTogZnVuY3Rpb24oc2lsZW50KSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBvcHRpb25zID0gbWUub3B0aW9ucztcclxuXHRcdFx0dmFyIGNhbnZhcyA9IG1lLmNhbnZhcztcclxuXHRcdFx0dmFyIGFzcGVjdFJhdGlvID0gKG9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiBtZS5hc3BlY3RSYXRpbykgfHwgbnVsbDtcclxuXHJcblx0XHRcdC8vIHRoZSBjYW52YXMgcmVuZGVyIHdpZHRoIGFuZCBoZWlnaHQgd2lsbCBiZSBjYXN0ZWQgdG8gaW50ZWdlcnMgc28gbWFrZSBzdXJlIHRoYXRcclxuXHRcdFx0Ly8gdGhlIGNhbnZhcyBkaXNwbGF5IHN0eWxlIHVzZXMgdGhlIHNhbWUgaW50ZWdlciB2YWx1ZXMgdG8gYXZvaWQgYmx1cnJpbmcgZWZmZWN0LlxyXG5cclxuXHRcdFx0Ly8gU2V0IHRvIDAgaW5zdGVhZCBvZiBjYW52YXMuc2l6ZSBiZWNhdXNlIHRoZSBzaXplIGRlZmF1bHRzIHRvIDMwMHgxNTAgaWYgdGhlIGVsZW1lbnQgaXMgY29sbGFwc2VkXHJcblx0XHRcdHZhciBuZXdXaWR0aCA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoaGVscGVycy5nZXRNYXhpbXVtV2lkdGgoY2FudmFzKSkpO1xyXG5cdFx0XHR2YXIgbmV3SGVpZ2h0ID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihhc3BlY3RSYXRpbyA/IG5ld1dpZHRoIC8gYXNwZWN0UmF0aW8gOiBoZWxwZXJzLmdldE1heGltdW1IZWlnaHQoY2FudmFzKSkpO1xyXG5cclxuXHRcdFx0aWYgKG1lLndpZHRoID09PSBuZXdXaWR0aCAmJiBtZS5oZWlnaHQgPT09IG5ld0hlaWdodCkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y2FudmFzLndpZHRoID0gbWUud2lkdGggPSBuZXdXaWR0aDtcclxuXHRcdFx0Y2FudmFzLmhlaWdodCA9IG1lLmhlaWdodCA9IG5ld0hlaWdodDtcclxuXHRcdFx0Y2FudmFzLnN0eWxlLndpZHRoID0gbmV3V2lkdGggKyAncHgnO1xyXG5cdFx0XHRjYW52YXMuc3R5bGUuaGVpZ2h0ID0gbmV3SGVpZ2h0ICsgJ3B4JztcclxuXHJcblx0XHRcdGhlbHBlcnMucmV0aW5hU2NhbGUobWUsIG9wdGlvbnMuZGV2aWNlUGl4ZWxSYXRpbyk7XHJcblxyXG5cdFx0XHRpZiAoIXNpbGVudCkge1xyXG5cdFx0XHRcdC8vIE5vdGlmeSBhbnkgcGx1Z2lucyBhYm91dCB0aGUgcmVzaXplXHJcblx0XHRcdFx0dmFyIG5ld1NpemUgPSB7d2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodH07XHJcblx0XHRcdFx0cGx1Z2lucy5ub3RpZnkobWUsICdyZXNpemUnLCBbbmV3U2l6ZV0pO1xyXG5cclxuXHRcdFx0XHQvLyBOb3RpZnkgb2YgcmVzaXplXHJcblx0XHRcdFx0aWYgKG1lLm9wdGlvbnMub25SZXNpemUpIHtcclxuXHRcdFx0XHRcdG1lLm9wdGlvbnMub25SZXNpemUobWUsIG5ld1NpemUpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bWUuc3RvcCgpO1xyXG5cdFx0XHRcdG1lLnVwZGF0ZSh7XHJcblx0XHRcdFx0XHRkdXJhdGlvbjogbWUub3B0aW9ucy5yZXNwb25zaXZlQW5pbWF0aW9uRHVyYXRpb25cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRlbnN1cmVTY2FsZXNIYXZlSURzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcblx0XHRcdHZhciBzY2FsZXNPcHRpb25zID0gb3B0aW9ucy5zY2FsZXMgfHwge307XHJcblx0XHRcdHZhciBzY2FsZU9wdGlvbnMgPSBvcHRpb25zLnNjYWxlO1xyXG5cclxuXHRcdFx0aGVscGVycy5lYWNoKHNjYWxlc09wdGlvbnMueEF4ZXMsIGZ1bmN0aW9uKHhBeGlzT3B0aW9ucywgaW5kZXgpIHtcclxuXHRcdFx0XHR4QXhpc09wdGlvbnMuaWQgPSB4QXhpc09wdGlvbnMuaWQgfHwgKCd4LWF4aXMtJyArIGluZGV4KTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRoZWxwZXJzLmVhY2goc2NhbGVzT3B0aW9ucy55QXhlcywgZnVuY3Rpb24oeUF4aXNPcHRpb25zLCBpbmRleCkge1xyXG5cdFx0XHRcdHlBeGlzT3B0aW9ucy5pZCA9IHlBeGlzT3B0aW9ucy5pZCB8fCAoJ3ktYXhpcy0nICsgaW5kZXgpO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdGlmIChzY2FsZU9wdGlvbnMpIHtcclxuXHRcdFx0XHRzY2FsZU9wdGlvbnMuaWQgPSBzY2FsZU9wdGlvbnMuaWQgfHwgJ3NjYWxlJztcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkcyBhIG1hcCBvZiBzY2FsZSBJRCB0byBzY2FsZSBvYmplY3QgZm9yIGZ1dHVyZSBsb29rdXAuXHJcblx0XHQgKi9cclxuXHRcdGJ1aWxkT3JVcGRhdGVTY2FsZXM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgb3B0aW9ucyA9IG1lLm9wdGlvbnM7XHJcblx0XHRcdHZhciBzY2FsZXMgPSBtZS5zY2FsZXMgfHwge307XHJcblx0XHRcdHZhciBpdGVtcyA9IFtdO1xyXG5cdFx0XHR2YXIgdXBkYXRlZCA9IE9iamVjdC5rZXlzKHNjYWxlcykucmVkdWNlKGZ1bmN0aW9uKG9iaiwgaWQpIHtcclxuXHRcdFx0XHRvYmpbaWRdID0gZmFsc2U7XHJcblx0XHRcdFx0cmV0dXJuIG9iajtcclxuXHRcdFx0fSwge30pO1xyXG5cclxuXHRcdFx0aWYgKG9wdGlvbnMuc2NhbGVzKSB7XHJcblx0XHRcdFx0aXRlbXMgPSBpdGVtcy5jb25jYXQoXHJcblx0XHRcdFx0XHQob3B0aW9ucy5zY2FsZXMueEF4ZXMgfHwgW10pLm1hcChmdW5jdGlvbih4QXhpc09wdGlvbnMpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtvcHRpb25zOiB4QXhpc09wdGlvbnMsIGR0eXBlOiAnY2F0ZWdvcnknLCBkcG9zaXRpb246ICdib3R0b20nfTtcclxuXHRcdFx0XHRcdH0pLFxyXG5cdFx0XHRcdFx0KG9wdGlvbnMuc2NhbGVzLnlBeGVzIHx8IFtdKS5tYXAoZnVuY3Rpb24oeUF4aXNPcHRpb25zKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7b3B0aW9uczogeUF4aXNPcHRpb25zLCBkdHlwZTogJ2xpbmVhcicsIGRwb3NpdGlvbjogJ2xlZnQnfTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKG9wdGlvbnMuc2NhbGUpIHtcclxuXHRcdFx0XHRpdGVtcy5wdXNoKHtcclxuXHRcdFx0XHRcdG9wdGlvbnM6IG9wdGlvbnMuc2NhbGUsXHJcblx0XHRcdFx0XHRkdHlwZTogJ3JhZGlhbExpbmVhcicsXHJcblx0XHRcdFx0XHRpc0RlZmF1bHQ6IHRydWUsXHJcblx0XHRcdFx0XHRkcG9zaXRpb246ICdjaGFydEFyZWEnXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGhlbHBlcnMuZWFjaChpdGVtcywgZnVuY3Rpb24oaXRlbSkge1xyXG5cdFx0XHRcdHZhciBzY2FsZU9wdGlvbnMgPSBpdGVtLm9wdGlvbnM7XHJcblx0XHRcdFx0dmFyIGlkID0gc2NhbGVPcHRpb25zLmlkO1xyXG5cdFx0XHRcdHZhciBzY2FsZVR5cGUgPSBoZWxwZXJzLnZhbHVlT3JEZWZhdWx0KHNjYWxlT3B0aW9ucy50eXBlLCBpdGVtLmR0eXBlKTtcclxuXHJcblx0XHRcdFx0aWYgKHBvc2l0aW9uSXNIb3Jpem9udGFsKHNjYWxlT3B0aW9ucy5wb3NpdGlvbikgIT09IHBvc2l0aW9uSXNIb3Jpem9udGFsKGl0ZW0uZHBvc2l0aW9uKSkge1xyXG5cdFx0XHRcdFx0c2NhbGVPcHRpb25zLnBvc2l0aW9uID0gaXRlbS5kcG9zaXRpb247XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR1cGRhdGVkW2lkXSA9IHRydWU7XHJcblx0XHRcdFx0dmFyIHNjYWxlID0gbnVsbDtcclxuXHRcdFx0XHRpZiAoaWQgaW4gc2NhbGVzICYmIHNjYWxlc1tpZF0udHlwZSA9PT0gc2NhbGVUeXBlKSB7XHJcblx0XHRcdFx0XHRzY2FsZSA9IHNjYWxlc1tpZF07XHJcblx0XHRcdFx0XHRzY2FsZS5vcHRpb25zID0gc2NhbGVPcHRpb25zO1xyXG5cdFx0XHRcdFx0c2NhbGUuY3R4ID0gbWUuY3R4O1xyXG5cdFx0XHRcdFx0c2NhbGUuY2hhcnQgPSBtZTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dmFyIHNjYWxlQ2xhc3MgPSBzY2FsZVNlcnZpY2UuZ2V0U2NhbGVDb25zdHJ1Y3RvcihzY2FsZVR5cGUpO1xyXG5cdFx0XHRcdFx0aWYgKCFzY2FsZUNsYXNzKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHNjYWxlID0gbmV3IHNjYWxlQ2xhc3Moe1xyXG5cdFx0XHRcdFx0XHRpZDogaWQsXHJcblx0XHRcdFx0XHRcdHR5cGU6IHNjYWxlVHlwZSxcclxuXHRcdFx0XHRcdFx0b3B0aW9uczogc2NhbGVPcHRpb25zLFxyXG5cdFx0XHRcdFx0XHRjdHg6IG1lLmN0eCxcclxuXHRcdFx0XHRcdFx0Y2hhcnQ6IG1lXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHNjYWxlc1tzY2FsZS5pZF0gPSBzY2FsZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHNjYWxlLm1lcmdlVGlja3NPcHRpb25zKCk7XHJcblxyXG5cdFx0XHRcdC8vIFRPRE8oU0IpOiBJIHRoaW5rIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIGN1c3RvbSBjYXNlIChvcHRpb25zLnNjYWxlKVxyXG5cdFx0XHRcdC8vIGFuZCBjb25zaWRlciBpdCBhcyBhIHJlZ3VsYXIgc2NhbGUgcGFydCBvZiB0aGUgXCJzY2FsZXNcIlwiIG1hcCBvbmx5ISBUaGlzIHdvdWxkXHJcblx0XHRcdFx0Ly8gbWFrZSB0aGUgbG9naWMgZWFzaWVyIGFuZCByZW1vdmUgc29tZSB1c2VsZXNzPyBjdXN0b20gY29kZS5cclxuXHRcdFx0XHRpZiAoaXRlbS5pc0RlZmF1bHQpIHtcclxuXHRcdFx0XHRcdG1lLnNjYWxlID0gc2NhbGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0Ly8gY2xlYXIgdXAgZGlzY2FyZGVkIHNjYWxlc1xyXG5cdFx0XHRoZWxwZXJzLmVhY2godXBkYXRlZCwgZnVuY3Rpb24oaGFzVXBkYXRlZCwgaWQpIHtcclxuXHRcdFx0XHRpZiAoIWhhc1VwZGF0ZWQpIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBzY2FsZXNbaWRdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRtZS5zY2FsZXMgPSBzY2FsZXM7XHJcblxyXG5cdFx0XHRzY2FsZVNlcnZpY2UuYWRkU2NhbGVzVG9MYXlvdXQodGhpcyk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGJ1aWxkT3JVcGRhdGVDb250cm9sbGVyczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciB0eXBlcyA9IFtdO1xyXG5cdFx0XHR2YXIgbmV3Q29udHJvbGxlcnMgPSBbXTtcclxuXHJcblx0XHRcdGhlbHBlcnMuZWFjaChtZS5kYXRhLmRhdGFzZXRzLCBmdW5jdGlvbihkYXRhc2V0LCBkYXRhc2V0SW5kZXgpIHtcclxuXHRcdFx0XHR2YXIgbWV0YSA9IG1lLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XHJcblx0XHRcdFx0dmFyIHR5cGUgPSBkYXRhc2V0LnR5cGUgfHwgbWUuY29uZmlnLnR5cGU7XHJcblxyXG5cdFx0XHRcdGlmIChtZXRhLnR5cGUgJiYgbWV0YS50eXBlICE9PSB0eXBlKSB7XHJcblx0XHRcdFx0XHRtZS5kZXN0cm95RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcclxuXHRcdFx0XHRcdG1ldGEgPSBtZS5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRtZXRhLnR5cGUgPSB0eXBlO1xyXG5cclxuXHRcdFx0XHR0eXBlcy5wdXNoKG1ldGEudHlwZSk7XHJcblxyXG5cdFx0XHRcdGlmIChtZXRhLmNvbnRyb2xsZXIpIHtcclxuXHRcdFx0XHRcdG1ldGEuY29udHJvbGxlci51cGRhdGVJbmRleChkYXRhc2V0SW5kZXgpO1xyXG5cdFx0XHRcdFx0bWV0YS5jb250cm9sbGVyLmxpbmtTY2FsZXMoKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dmFyIENvbnRyb2xsZXJDbGFzcyA9IENoYXJ0LmNvbnRyb2xsZXJzW21ldGEudHlwZV07XHJcblx0XHRcdFx0XHRpZiAoQ29udHJvbGxlckNsYXNzID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdcIicgKyBtZXRhLnR5cGUgKyAnXCIgaXMgbm90IGEgY2hhcnQgdHlwZS4nKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRtZXRhLmNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlckNsYXNzKG1lLCBkYXRhc2V0SW5kZXgpO1xyXG5cdFx0XHRcdFx0bmV3Q29udHJvbGxlcnMucHVzaChtZXRhLmNvbnRyb2xsZXIpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSwgbWUpO1xyXG5cclxuXHRcdFx0cmV0dXJuIG5ld0NvbnRyb2xsZXJzO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJlc2V0IHRoZSBlbGVtZW50cyBvZiBhbGwgZGF0YXNldHNcclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdHJlc2V0RWxlbWVudHM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHRoZWxwZXJzLmVhY2gobWUuZGF0YS5kYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XHJcblx0XHRcdFx0bWUuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KS5jb250cm9sbGVyLnJlc2V0KCk7XHJcblx0XHRcdH0sIG1lKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQqIFJlc2V0cyB0aGUgY2hhcnQgYmFjayB0byBpdCdzIHN0YXRlIGJlZm9yZSB0aGUgaW5pdGlhbCBhbmltYXRpb25cclxuXHRcdCovXHJcblx0XHRyZXNldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHRoaXMucmVzZXRFbGVtZW50cygpO1xyXG5cdFx0XHR0aGlzLnRvb2x0aXAuaW5pdGlhbGl6ZSgpO1xyXG5cdFx0fSxcclxuXHJcblx0XHR1cGRhdGU6IGZ1bmN0aW9uKGNvbmZpZykge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cclxuXHRcdFx0aWYgKCFjb25maWcgfHwgdHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcpIHtcclxuXHRcdFx0XHQvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxyXG5cdFx0XHRcdGNvbmZpZyA9IHtcclxuXHRcdFx0XHRcdGR1cmF0aW9uOiBjb25maWcsXHJcblx0XHRcdFx0XHRsYXp5OiBhcmd1bWVudHNbMV1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR1cGRhdGVDb25maWcobWUpO1xyXG5cclxuXHRcdFx0Ly8gcGx1Z2lucyBvcHRpb25zIHJlZmVyZW5jZXMgbWlnaHQgaGF2ZSBjaGFuZ2UsIGxldCdzIGludmFsaWRhdGUgdGhlIGNhY2hlXHJcblx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy81MTExI2lzc3VlY29tbWVudC0zNTU5MzQxNjdcclxuXHRcdFx0cGx1Z2lucy5faW52YWxpZGF0ZShtZSk7XHJcblxyXG5cdFx0XHRpZiAocGx1Z2lucy5ub3RpZnkobWUsICdiZWZvcmVVcGRhdGUnKSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEluIGNhc2UgdGhlIGVudGlyZSBkYXRhIG9iamVjdCBjaGFuZ2VkXHJcblx0XHRcdG1lLnRvb2x0aXAuX2RhdGEgPSBtZS5kYXRhO1xyXG5cclxuXHRcdFx0Ly8gTWFrZSBzdXJlIGRhdGFzZXQgY29udHJvbGxlcnMgYXJlIHVwZGF0ZWQgYW5kIG5ldyBjb250cm9sbGVycyBhcmUgcmVzZXRcclxuXHRcdFx0dmFyIG5ld0NvbnRyb2xsZXJzID0gbWUuYnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzKCk7XHJcblxyXG5cdFx0XHQvLyBNYWtlIHN1cmUgYWxsIGRhdGFzZXQgY29udHJvbGxlcnMgaGF2ZSBjb3JyZWN0IG1ldGEgZGF0YSBjb3VudHNcclxuXHRcdFx0aGVscGVycy5lYWNoKG1lLmRhdGEuZGF0YXNldHMsIGZ1bmN0aW9uKGRhdGFzZXQsIGRhdGFzZXRJbmRleCkge1xyXG5cdFx0XHRcdG1lLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCkuY29udHJvbGxlci5idWlsZE9yVXBkYXRlRWxlbWVudHMoKTtcclxuXHRcdFx0fSwgbWUpO1xyXG5cclxuXHRcdFx0bWUudXBkYXRlTGF5b3V0KCk7XHJcblxyXG5cdFx0XHQvLyBDYW4gb25seSByZXNldCB0aGUgbmV3IGNvbnRyb2xsZXJzIGFmdGVyIHRoZSBzY2FsZXMgaGF2ZSBiZWVuIHVwZGF0ZWRcclxuXHRcdFx0aWYgKG1lLm9wdGlvbnMuYW5pbWF0aW9uICYmIG1lLm9wdGlvbnMuYW5pbWF0aW9uLmR1cmF0aW9uKSB7XHJcblx0XHRcdFx0aGVscGVycy5lYWNoKG5ld0NvbnRyb2xsZXJzLCBmdW5jdGlvbihjb250cm9sbGVyKSB7XHJcblx0XHRcdFx0XHRjb250cm9sbGVyLnJlc2V0KCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG1lLnVwZGF0ZURhdGFzZXRzKCk7XHJcblxyXG5cdFx0XHQvLyBOZWVkIHRvIHJlc2V0IHRvb2x0aXAgaW4gY2FzZSBpdCBpcyBkaXNwbGF5ZWQgd2l0aCBlbGVtZW50cyB0aGF0IGFyZSByZW1vdmVkXHJcblx0XHRcdC8vIGFmdGVyIHVwZGF0ZS5cclxuXHRcdFx0bWUudG9vbHRpcC5pbml0aWFsaXplKCk7XHJcblxyXG5cdFx0XHQvLyBMYXN0IGFjdGl2ZSBjb250YWlucyBpdGVtcyB0aGF0IHdlcmUgcHJldmlvdXNseSBpbiB0aGUgdG9vbHRpcC5cclxuXHRcdFx0Ly8gV2hlbiB3ZSByZXNldCB0aGUgdG9vbHRpcCwgd2UgbmVlZCB0byBjbGVhciBpdFxyXG5cdFx0XHRtZS5sYXN0QWN0aXZlID0gW107XHJcblxyXG5cdFx0XHQvLyBEbyB0aGlzIGJlZm9yZSByZW5kZXIgc28gdGhhdCBhbnkgcGx1Z2lucyB0aGF0IG5lZWQgZmluYWwgc2NhbGUgdXBkYXRlcyBjYW4gdXNlIGl0XHJcblx0XHRcdHBsdWdpbnMubm90aWZ5KG1lLCAnYWZ0ZXJVcGRhdGUnKTtcclxuXHJcblx0XHRcdGlmIChtZS5fYnVmZmVyZWRSZW5kZXIpIHtcclxuXHRcdFx0XHRtZS5fYnVmZmVyZWRSZXF1ZXN0ID0ge1xyXG5cdFx0XHRcdFx0ZHVyYXRpb246IGNvbmZpZy5kdXJhdGlvbixcclxuXHRcdFx0XHRcdGVhc2luZzogY29uZmlnLmVhc2luZyxcclxuXHRcdFx0XHRcdGxhenk6IGNvbmZpZy5sYXp5XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRtZS5yZW5kZXIoY29uZmlnKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFVwZGF0ZXMgdGhlIGNoYXJ0IGxheW91dCB1bmxlc3MgYSBwbHVnaW4gcmV0dXJucyBgZmFsc2VgIHRvIHRoZSBgYmVmb3JlTGF5b3V0YFxyXG5cdFx0ICogaG9vaywgaW4gd2hpY2ggY2FzZSwgcGx1Z2lucyB3aWxsIG5vdCBiZSBjYWxsZWQgb24gYGFmdGVyTGF5b3V0YC5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdHVwZGF0ZUxheW91dDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblxyXG5cdFx0XHRpZiAocGx1Z2lucy5ub3RpZnkobWUsICdiZWZvcmVMYXlvdXQnKSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGxheW91dHMudXBkYXRlKHRoaXMsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIGBhZnRlckxheW91dGAgaW5zdGVhZC5cclxuXHRcdFx0ICogQG1ldGhvZCBJUGx1Z2luI2FmdGVyU2NhbGVVcGRhdGVcclxuXHRcdFx0ICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjUuMFxyXG5cdFx0XHQgKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcblx0XHRcdCAqIEBwcml2YXRlXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRwbHVnaW5zLm5vdGlmeShtZSwgJ2FmdGVyU2NhbGVVcGRhdGUnKTtcclxuXHRcdFx0cGx1Z2lucy5ub3RpZnkobWUsICdhZnRlckxheW91dCcpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFVwZGF0ZXMgYWxsIGRhdGFzZXRzIHVubGVzcyBhIHBsdWdpbiByZXR1cm5zIGBmYWxzZWAgdG8gdGhlIGBiZWZvcmVEYXRhc2V0c1VwZGF0ZWBcclxuXHRcdCAqIGhvb2ssIGluIHdoaWNoIGNhc2UsIHBsdWdpbnMgd2lsbCBub3QgYmUgY2FsbGVkIG9uIGBhZnRlckRhdGFzZXRzVXBkYXRlYC5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdHVwZGF0ZURhdGFzZXRzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHJcblx0XHRcdGlmIChwbHVnaW5zLm5vdGlmeShtZSwgJ2JlZm9yZURhdGFzZXRzVXBkYXRlJykgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKHZhciBpID0gMCwgaWxlbiA9IG1lLmRhdGEuZGF0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRcdFx0bWUudXBkYXRlRGF0YXNldChpKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cGx1Z2lucy5ub3RpZnkobWUsICdhZnRlckRhdGFzZXRzVXBkYXRlJyk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogVXBkYXRlcyBkYXRhc2V0IGF0IGluZGV4IHVubGVzcyBhIHBsdWdpbiByZXR1cm5zIGBmYWxzZWAgdG8gdGhlIGBiZWZvcmVEYXRhc2V0VXBkYXRlYFxyXG5cdFx0ICogaG9vaywgaW4gd2hpY2ggY2FzZSwgcGx1Z2lucyB3aWxsIG5vdCBiZSBjYWxsZWQgb24gYGFmdGVyRGF0YXNldFVwZGF0ZWAuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHR1cGRhdGVEYXRhc2V0OiBmdW5jdGlvbihpbmRleCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgbWV0YSA9IG1lLmdldERhdGFzZXRNZXRhKGluZGV4KTtcclxuXHRcdFx0dmFyIGFyZ3MgPSB7XHJcblx0XHRcdFx0bWV0YTogbWV0YSxcclxuXHRcdFx0XHRpbmRleDogaW5kZXhcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGlmIChwbHVnaW5zLm5vdGlmeShtZSwgJ2JlZm9yZURhdGFzZXRVcGRhdGUnLCBbYXJnc10pID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bWV0YS5jb250cm9sbGVyLnVwZGF0ZSgpO1xyXG5cclxuXHRcdFx0cGx1Z2lucy5ub3RpZnkobWUsICdhZnRlckRhdGFzZXRVcGRhdGUnLCBbYXJnc10pO1xyXG5cdFx0fSxcclxuXHJcblx0XHRyZW5kZXI6IGZ1bmN0aW9uKGNvbmZpZykge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cclxuXHRcdFx0aWYgKCFjb25maWcgfHwgdHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcpIHtcclxuXHRcdFx0XHQvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxyXG5cdFx0XHRcdGNvbmZpZyA9IHtcclxuXHRcdFx0XHRcdGR1cmF0aW9uOiBjb25maWcsXHJcblx0XHRcdFx0XHRsYXp5OiBhcmd1bWVudHNbMV1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgZHVyYXRpb24gPSBjb25maWcuZHVyYXRpb247XHJcblx0XHRcdHZhciBsYXp5ID0gY29uZmlnLmxhenk7XHJcblxyXG5cdFx0XHRpZiAocGx1Z2lucy5ub3RpZnkobWUsICdiZWZvcmVSZW5kZXInKSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBhbmltYXRpb25PcHRpb25zID0gbWUub3B0aW9ucy5hbmltYXRpb247XHJcblx0XHRcdHZhciBvbkNvbXBsZXRlID0gZnVuY3Rpb24oYW5pbWF0aW9uKSB7XHJcblx0XHRcdFx0cGx1Z2lucy5ub3RpZnkobWUsICdhZnRlclJlbmRlcicpO1xyXG5cdFx0XHRcdGhlbHBlcnMuY2FsbGJhY2soYW5pbWF0aW9uT3B0aW9ucyAmJiBhbmltYXRpb25PcHRpb25zLm9uQ29tcGxldGUsIFthbmltYXRpb25dLCBtZSk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRpZiAoYW5pbWF0aW9uT3B0aW9ucyAmJiAoKHR5cGVvZiBkdXJhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgZHVyYXRpb24gIT09IDApIHx8ICh0eXBlb2YgZHVyYXRpb24gPT09ICd1bmRlZmluZWQnICYmIGFuaW1hdGlvbk9wdGlvbnMuZHVyYXRpb24gIT09IDApKSkge1xyXG5cdFx0XHRcdHZhciBhbmltYXRpb24gPSBuZXcgQW5pbWF0aW9uKHtcclxuXHRcdFx0XHRcdG51bVN0ZXBzOiAoZHVyYXRpb24gfHwgYW5pbWF0aW9uT3B0aW9ucy5kdXJhdGlvbikgLyAxNi42NiwgLy8gNjAgZnBzXHJcblx0XHRcdFx0XHRlYXNpbmc6IGNvbmZpZy5lYXNpbmcgfHwgYW5pbWF0aW9uT3B0aW9ucy5lYXNpbmcsXHJcblxyXG5cdFx0XHRcdFx0cmVuZGVyOiBmdW5jdGlvbihjaGFydCwgYW5pbWF0aW9uT2JqZWN0KSB7XHJcblx0XHRcdFx0XHRcdHZhciBlYXNpbmdGdW5jdGlvbiA9IGhlbHBlcnMuZWFzaW5nLmVmZmVjdHNbYW5pbWF0aW9uT2JqZWN0LmVhc2luZ107XHJcblx0XHRcdFx0XHRcdHZhciBjdXJyZW50U3RlcCA9IGFuaW1hdGlvbk9iamVjdC5jdXJyZW50U3RlcDtcclxuXHRcdFx0XHRcdFx0dmFyIHN0ZXBEZWNpbWFsID0gY3VycmVudFN0ZXAgLyBhbmltYXRpb25PYmplY3QubnVtU3RlcHM7XHJcblxyXG5cdFx0XHRcdFx0XHRjaGFydC5kcmF3KGVhc2luZ0Z1bmN0aW9uKHN0ZXBEZWNpbWFsKSwgc3RlcERlY2ltYWwsIGN1cnJlbnRTdGVwKTtcclxuXHRcdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdFx0b25BbmltYXRpb25Qcm9ncmVzczogYW5pbWF0aW9uT3B0aW9ucy5vblByb2dyZXNzLFxyXG5cdFx0XHRcdFx0b25BbmltYXRpb25Db21wbGV0ZTogb25Db21wbGV0ZVxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRhbmltYXRpb25zLmFkZEFuaW1hdGlvbihtZSwgYW5pbWF0aW9uLCBkdXJhdGlvbiwgbGF6eSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0bWUuZHJhdygpO1xyXG5cclxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzM3ODFcclxuXHRcdFx0XHRvbkNvbXBsZXRlKG5ldyBBbmltYXRpb24oe251bVN0ZXBzOiAwLCBjaGFydDogbWV9KSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBtZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0ZHJhdzogZnVuY3Rpb24oZWFzaW5nVmFsdWUpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHJcblx0XHRcdG1lLmNsZWFyKCk7XHJcblxyXG5cdFx0XHRpZiAoaGVscGVycy5pc051bGxPclVuZGVmKGVhc2luZ1ZhbHVlKSkge1xyXG5cdFx0XHRcdGVhc2luZ1ZhbHVlID0gMTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bWUudHJhbnNpdGlvbihlYXNpbmdWYWx1ZSk7XHJcblxyXG5cdFx0XHRpZiAobWUud2lkdGggPD0gMCB8fCBtZS5oZWlnaHQgPD0gMCkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHBsdWdpbnMubm90aWZ5KG1lLCAnYmVmb3JlRHJhdycsIFtlYXNpbmdWYWx1ZV0pID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRHJhdyBhbGwgdGhlIHNjYWxlc1xyXG5cdFx0XHRoZWxwZXJzLmVhY2gobWUuYm94ZXMsIGZ1bmN0aW9uKGJveCkge1xyXG5cdFx0XHRcdGJveC5kcmF3KG1lLmNoYXJ0QXJlYSk7XHJcblx0XHRcdH0sIG1lKTtcclxuXHJcblx0XHRcdGlmIChtZS5zY2FsZSkge1xyXG5cdFx0XHRcdG1lLnNjYWxlLmRyYXcoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bWUuZHJhd0RhdGFzZXRzKGVhc2luZ1ZhbHVlKTtcclxuXHRcdFx0bWUuX2RyYXdUb29sdGlwKGVhc2luZ1ZhbHVlKTtcclxuXHJcblx0XHRcdHBsdWdpbnMubm90aWZ5KG1lLCAnYWZ0ZXJEcmF3JywgW2Vhc2luZ1ZhbHVlXSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0dHJhbnNpdGlvbjogZnVuY3Rpb24oZWFzaW5nVmFsdWUpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHJcblx0XHRcdGZvciAodmFyIGkgPSAwLCBpbGVuID0gKG1lLmRhdGEuZGF0YXNldHMgfHwgW10pLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHRcdGlmIChtZS5pc0RhdGFzZXRWaXNpYmxlKGkpKSB7XHJcblx0XHRcdFx0XHRtZS5nZXREYXRhc2V0TWV0YShpKS5jb250cm9sbGVyLnRyYW5zaXRpb24oZWFzaW5nVmFsdWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bWUudG9vbHRpcC50cmFuc2l0aW9uKGVhc2luZ1ZhbHVlKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBEcmF3cyBhbGwgZGF0YXNldHMgdW5sZXNzIGEgcGx1Z2luIHJldHVybnMgYGZhbHNlYCB0byB0aGUgYGJlZm9yZURhdGFzZXRzRHJhd2BcclxuXHRcdCAqIGhvb2ssIGluIHdoaWNoIGNhc2UsIHBsdWdpbnMgd2lsbCBub3QgYmUgY2FsbGVkIG9uIGBhZnRlckRhdGFzZXRzRHJhd2AuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRkcmF3RGF0YXNldHM6IGZ1bmN0aW9uKGVhc2luZ1ZhbHVlKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblxyXG5cdFx0XHRpZiAocGx1Z2lucy5ub3RpZnkobWUsICdiZWZvcmVEYXRhc2V0c0RyYXcnLCBbZWFzaW5nVmFsdWVdKSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIERyYXcgZGF0YXNldHMgcmV2ZXJzZWQgdG8gc3VwcG9ydCBwcm9wZXIgbGluZSBzdGFja2luZ1xyXG5cdFx0XHRmb3IgKHZhciBpID0gKG1lLmRhdGEuZGF0YXNldHMgfHwgW10pLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XHJcblx0XHRcdFx0aWYgKG1lLmlzRGF0YXNldFZpc2libGUoaSkpIHtcclxuXHRcdFx0XHRcdG1lLmRyYXdEYXRhc2V0KGksIGVhc2luZ1ZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHBsdWdpbnMubm90aWZ5KG1lLCAnYWZ0ZXJEYXRhc2V0c0RyYXcnLCBbZWFzaW5nVmFsdWVdKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBEcmF3cyBkYXRhc2V0IGF0IGluZGV4IHVubGVzcyBhIHBsdWdpbiByZXR1cm5zIGBmYWxzZWAgdG8gdGhlIGBiZWZvcmVEYXRhc2V0RHJhd2BcclxuXHRcdCAqIGhvb2ssIGluIHdoaWNoIGNhc2UsIHBsdWdpbnMgd2lsbCBub3QgYmUgY2FsbGVkIG9uIGBhZnRlckRhdGFzZXREcmF3YC5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdGRyYXdEYXRhc2V0OiBmdW5jdGlvbihpbmRleCwgZWFzaW5nVmFsdWUpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIG1ldGEgPSBtZS5nZXREYXRhc2V0TWV0YShpbmRleCk7XHJcblx0XHRcdHZhciBhcmdzID0ge1xyXG5cdFx0XHRcdG1ldGE6IG1ldGEsXHJcblx0XHRcdFx0aW5kZXg6IGluZGV4LFxyXG5cdFx0XHRcdGVhc2luZ1ZhbHVlOiBlYXNpbmdWYWx1ZVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0aWYgKHBsdWdpbnMubm90aWZ5KG1lLCAnYmVmb3JlRGF0YXNldERyYXcnLCBbYXJnc10pID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bWV0YS5jb250cm9sbGVyLmRyYXcoZWFzaW5nVmFsdWUpO1xyXG5cclxuXHRcdFx0cGx1Z2lucy5ub3RpZnkobWUsICdhZnRlckRhdGFzZXREcmF3JywgW2FyZ3NdKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBEcmF3cyB0b29sdGlwIHVubGVzcyBhIHBsdWdpbiByZXR1cm5zIGBmYWxzZWAgdG8gdGhlIGBiZWZvcmVUb29sdGlwRHJhd2BcclxuXHRcdCAqIGhvb2ssIGluIHdoaWNoIGNhc2UsIHBsdWdpbnMgd2lsbCBub3QgYmUgY2FsbGVkIG9uIGBhZnRlclRvb2x0aXBEcmF3YC5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdF9kcmF3VG9vbHRpcDogZnVuY3Rpb24oZWFzaW5nVmFsdWUpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIHRvb2x0aXAgPSBtZS50b29sdGlwO1xyXG5cdFx0XHR2YXIgYXJncyA9IHtcclxuXHRcdFx0XHR0b29sdGlwOiB0b29sdGlwLFxyXG5cdFx0XHRcdGVhc2luZ1ZhbHVlOiBlYXNpbmdWYWx1ZVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0aWYgKHBsdWdpbnMubm90aWZ5KG1lLCAnYmVmb3JlVG9vbHRpcERyYXcnLCBbYXJnc10pID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dG9vbHRpcC5kcmF3KCk7XHJcblxyXG5cdFx0XHRwbHVnaW5zLm5vdGlmeShtZSwgJ2FmdGVyVG9vbHRpcERyYXcnLCBbYXJnc10pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBHZXQgdGhlIHNpbmdsZSBlbGVtZW50IHRoYXQgd2FzIGNsaWNrZWQgb25cclxuXHRcdC8vIEByZXR1cm4gOiBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YXNldCBpbmRleCBhbmQgZWxlbWVudCBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgZWxlbWVudC4gQWxzbyBjb250YWlucyB0aGUgcmVjdGFuZ2xlIHRoYXQgd2FzIGRyYXdcclxuXHRcdGdldEVsZW1lbnRBdEV2ZW50OiBmdW5jdGlvbihlKSB7XHJcblx0XHRcdHJldHVybiBJbnRlcmFjdGlvbi5tb2Rlcy5zaW5nbGUodGhpcywgZSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGdldEVsZW1lbnRzQXRFdmVudDogZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRyZXR1cm4gSW50ZXJhY3Rpb24ubW9kZXMubGFiZWwodGhpcywgZSwge2ludGVyc2VjdDogdHJ1ZX0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHRnZXRFbGVtZW50c0F0WEF4aXM6IGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0cmV0dXJuIEludGVyYWN0aW9uLm1vZGVzWyd4LWF4aXMnXSh0aGlzLCBlLCB7aW50ZXJzZWN0OiB0cnVlfSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGdldEVsZW1lbnRzQXRFdmVudEZvck1vZGU6IGZ1bmN0aW9uKGUsIG1vZGUsIG9wdGlvbnMpIHtcclxuXHRcdFx0dmFyIG1ldGhvZCA9IEludGVyYWN0aW9uLm1vZGVzW21vZGVdO1xyXG5cdFx0XHRpZiAodHlwZW9mIG1ldGhvZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRcdHJldHVybiBtZXRob2QodGhpcywgZSwgb3B0aW9ucyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Z2V0RGF0YXNldEF0RXZlbnQ6IGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0cmV0dXJuIEludGVyYWN0aW9uLm1vZGVzLmRhdGFzZXQodGhpcywgZSwge2ludGVyc2VjdDogdHJ1ZX0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHRnZXREYXRhc2V0TWV0YTogZnVuY3Rpb24oZGF0YXNldEluZGV4KSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBkYXRhc2V0ID0gbWUuZGF0YS5kYXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xyXG5cdFx0XHRpZiAoIWRhdGFzZXQuX21ldGEpIHtcclxuXHRcdFx0XHRkYXRhc2V0Ll9tZXRhID0ge307XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBtZXRhID0gZGF0YXNldC5fbWV0YVttZS5pZF07XHJcblx0XHRcdGlmICghbWV0YSkge1xyXG5cdFx0XHRcdG1ldGEgPSBkYXRhc2V0Ll9tZXRhW21lLmlkXSA9IHtcclxuXHRcdFx0XHRcdHR5cGU6IG51bGwsXHJcblx0XHRcdFx0XHRkYXRhOiBbXSxcclxuXHRcdFx0XHRcdGRhdGFzZXQ6IG51bGwsXHJcblx0XHRcdFx0XHRjb250cm9sbGVyOiBudWxsLFxyXG5cdFx0XHRcdFx0aGlkZGVuOiBudWxsLFx0XHRcdC8vIFNlZSBpc0RhdGFzZXRWaXNpYmxlKCkgY29tbWVudFxyXG5cdFx0XHRcdFx0eEF4aXNJRDogbnVsbCxcclxuXHRcdFx0XHRcdHlBeGlzSUQ6IG51bGxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gbWV0YTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Z2V0VmlzaWJsZURhdGFzZXRDb3VudDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBjb3VudCA9IDA7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwLCBpbGVuID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHRcdGlmICh0aGlzLmlzRGF0YXNldFZpc2libGUoaSkpIHtcclxuXHRcdFx0XHRcdGNvdW50Kys7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBjb3VudDtcclxuXHRcdH0sXHJcblxyXG5cdFx0aXNEYXRhc2V0VmlzaWJsZTogZnVuY3Rpb24oZGF0YXNldEluZGV4KSB7XHJcblx0XHRcdHZhciBtZXRhID0gdGhpcy5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xyXG5cclxuXHRcdFx0Ly8gbWV0YS5oaWRkZW4gaXMgYSBwZXIgY2hhcnQgZGF0YXNldCBoaWRkZW4gZmxhZyBvdmVycmlkZSB3aXRoIDMgc3RhdGVzOiBpZiB0cnVlIG9yIGZhbHNlLFxyXG5cdFx0XHQvLyB0aGUgZGF0YXNldC5oaWRkZW4gdmFsdWUgaXMgaWdub3JlZCwgZWxzZSBpZiBudWxsLCB0aGUgZGF0YXNldCBoaWRkZW4gc3RhdGUgaXMgcmV0dXJuZWQuXHJcblx0XHRcdHJldHVybiB0eXBlb2YgbWV0YS5oaWRkZW4gPT09ICdib29sZWFuJyA/ICFtZXRhLmhpZGRlbiA6ICF0aGlzLmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XS5oaWRkZW47XHJcblx0XHR9LFxyXG5cclxuXHRcdGdlbmVyYXRlTGVnZW5kOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5sZWdlbmRDYWxsYmFjayh0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRkZXN0cm95RGF0YXNldE1ldGE6IGZ1bmN0aW9uKGRhdGFzZXRJbmRleCkge1xyXG5cdFx0XHR2YXIgaWQgPSB0aGlzLmlkO1xyXG5cdFx0XHR2YXIgZGF0YXNldCA9IHRoaXMuZGF0YS5kYXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xyXG5cdFx0XHR2YXIgbWV0YSA9IGRhdGFzZXQuX21ldGEgJiYgZGF0YXNldC5fbWV0YVtpZF07XHJcblxyXG5cdFx0XHRpZiAobWV0YSkge1xyXG5cdFx0XHRcdG1ldGEuY29udHJvbGxlci5kZXN0cm95KCk7XHJcblx0XHRcdFx0ZGVsZXRlIGRhdGFzZXQuX21ldGFbaWRdO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgY2FudmFzID0gbWUuY2FudmFzO1xyXG5cdFx0XHR2YXIgaSwgaWxlbjtcclxuXHJcblx0XHRcdG1lLnN0b3AoKTtcclxuXHJcblx0XHRcdC8vIGRhdGFzZXQgY29udHJvbGxlcnMgbmVlZCB0byBjbGVhbnVwIGFzc29jaWF0ZWQgZGF0YVxyXG5cdFx0XHRmb3IgKGkgPSAwLCBpbGVuID0gbWUuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdFx0XHRtZS5kZXN0cm95RGF0YXNldE1ldGEoaSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjYW52YXMpIHtcclxuXHRcdFx0XHRtZS51bmJpbmRFdmVudHMoKTtcclxuXHRcdFx0XHRoZWxwZXJzLmNhbnZhcy5jbGVhcihtZSk7XHJcblx0XHRcdFx0cGxhdGZvcm0ucmVsZWFzZUNvbnRleHQobWUuY3R4KTtcclxuXHRcdFx0XHRtZS5jYW52YXMgPSBudWxsO1xyXG5cdFx0XHRcdG1lLmN0eCA9IG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHBsdWdpbnMubm90aWZ5KG1lLCAnZGVzdHJveScpO1xyXG5cclxuXHRcdFx0ZGVsZXRlIENoYXJ0Lmluc3RhbmNlc1ttZS5pZF07XHJcblx0XHR9LFxyXG5cclxuXHRcdHRvQmFzZTY0SW1hZ2U6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5jYW52YXMudG9EYXRhVVJMLmFwcGx5KHRoaXMuY2FudmFzLCBhcmd1bWVudHMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHRpbml0VG9vbFRpcDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdG1lLnRvb2x0aXAgPSBuZXcgVG9vbHRpcCh7XHJcblx0XHRcdFx0X2NoYXJ0OiBtZSxcclxuXHRcdFx0XHRfY2hhcnRJbnN0YW5jZTogbWUsIC8vIGRlcHJlY2F0ZWQsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcclxuXHRcdFx0XHRfZGF0YTogbWUuZGF0YSxcclxuXHRcdFx0XHRfb3B0aW9uczogbWUub3B0aW9ucy50b29sdGlwc1xyXG5cdFx0XHR9LCBtZSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0YmluZEV2ZW50czogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBsaXN0ZW5lcnMgPSBtZS5fbGlzdGVuZXJzID0ge307XHJcblx0XHRcdHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdG1lLmV2ZW50SGFuZGxlci5hcHBseShtZSwgYXJndW1lbnRzKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGhlbHBlcnMuZWFjaChtZS5vcHRpb25zLmV2ZW50cywgZnVuY3Rpb24odHlwZSkge1xyXG5cdFx0XHRcdHBsYXRmb3JtLmFkZEV2ZW50TGlzdGVuZXIobWUsIHR5cGUsIGxpc3RlbmVyKTtcclxuXHRcdFx0XHRsaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcjtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBFbGVtZW50cyB1c2VkIHRvIGRldGVjdCBzaXplIGNoYW5nZSBzaG91bGQgbm90IGJlIGluamVjdGVkIGZvciBub24gcmVzcG9uc2l2ZSBjaGFydHMuXHJcblx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvMjIxMFxyXG5cdFx0XHRpZiAobWUub3B0aW9ucy5yZXNwb25zaXZlKSB7XHJcblx0XHRcdFx0bGlzdGVuZXIgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdG1lLnJlc2l6ZSgpO1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdHBsYXRmb3JtLmFkZEV2ZW50TGlzdGVuZXIobWUsICdyZXNpemUnLCBsaXN0ZW5lcik7XHJcblx0XHRcdFx0bGlzdGVuZXJzLnJlc2l6ZSA9IGxpc3RlbmVyO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0dW5iaW5kRXZlbnRzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIGxpc3RlbmVycyA9IG1lLl9saXN0ZW5lcnM7XHJcblx0XHRcdGlmICghbGlzdGVuZXJzKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkZWxldGUgbWUuX2xpc3RlbmVycztcclxuXHRcdFx0aGVscGVycy5lYWNoKGxpc3RlbmVycywgZnVuY3Rpb24obGlzdGVuZXIsIHR5cGUpIHtcclxuXHRcdFx0XHRwbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKG1lLCB0eXBlLCBsaXN0ZW5lcik7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHR1cGRhdGVIb3ZlclN0eWxlOiBmdW5jdGlvbihlbGVtZW50cywgbW9kZSwgZW5hYmxlZCkge1xyXG5cdFx0XHR2YXIgbWV0aG9kID0gZW5hYmxlZCA/ICdzZXRIb3ZlclN0eWxlJyA6ICdyZW1vdmVIb3ZlclN0eWxlJztcclxuXHRcdFx0dmFyIGVsZW1lbnQsIGksIGlsZW47XHJcblxyXG5cdFx0XHRmb3IgKGkgPSAwLCBpbGVuID0gZWxlbWVudHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRcdFx0ZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xyXG5cdFx0XHRcdGlmIChlbGVtZW50KSB7XHJcblx0XHRcdFx0XHR0aGlzLmdldERhdGFzZXRNZXRhKGVsZW1lbnQuX2RhdGFzZXRJbmRleCkuY29udHJvbGxlclttZXRob2RdKGVsZW1lbnQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdGV2ZW50SGFuZGxlcjogZnVuY3Rpb24oZSkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgdG9vbHRpcCA9IG1lLnRvb2x0aXA7XHJcblxyXG5cdFx0XHRpZiAocGx1Z2lucy5ub3RpZnkobWUsICdiZWZvcmVFdmVudCcsIFtlXSkgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBCdWZmZXIgYW55IHVwZGF0ZSBjYWxscyBzbyB0aGF0IHJlbmRlcnMgZG8gbm90IG9jY3VyXHJcblx0XHRcdG1lLl9idWZmZXJlZFJlbmRlciA9IHRydWU7XHJcblx0XHRcdG1lLl9idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xyXG5cclxuXHRcdFx0dmFyIGNoYW5nZWQgPSBtZS5oYW5kbGVFdmVudChlKTtcclxuXHRcdFx0Ly8gZm9yIHNtb290aCB0b29sdGlwIGFuaW1hdGlvbnMgaXNzdWUgIzQ5ODlcclxuXHRcdFx0Ly8gdGhlIHRvb2x0aXAgc2hvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgY2hhbmdlXHJcblx0XHRcdC8vIEFuaW1hdGlvbiBjaGVjayB3b3JrYXJvdW5kOlxyXG5cdFx0XHQvLyB0b29sdGlwLl9zdGFydCB3aWxsIGJlIG51bGwgd2hlbiB0b29sdGlwIGlzbid0IGFuaW1hdGluZ1xyXG5cdFx0XHRpZiAodG9vbHRpcCkge1xyXG5cdFx0XHRcdGNoYW5nZWQgPSB0b29sdGlwLl9zdGFydFxyXG5cdFx0XHRcdFx0PyB0b29sdGlwLmhhbmRsZUV2ZW50KGUpXHJcblx0XHRcdFx0XHQ6IGNoYW5nZWQgfCB0b29sdGlwLmhhbmRsZUV2ZW50KGUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRwbHVnaW5zLm5vdGlmeShtZSwgJ2FmdGVyRXZlbnQnLCBbZV0pO1xyXG5cclxuXHRcdFx0dmFyIGJ1ZmZlcmVkUmVxdWVzdCA9IG1lLl9idWZmZXJlZFJlcXVlc3Q7XHJcblx0XHRcdGlmIChidWZmZXJlZFJlcXVlc3QpIHtcclxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGFuIHVwZGF0ZSB0aGF0IHdhcyB0cmlnZ2VyZWQsIHdlIG5lZWQgdG8gZG8gYSBub3JtYWwgcmVuZGVyXHJcblx0XHRcdFx0bWUucmVuZGVyKGJ1ZmZlcmVkUmVxdWVzdCk7XHJcblx0XHRcdH0gZWxzZSBpZiAoY2hhbmdlZCAmJiAhbWUuYW5pbWF0aW5nKSB7XHJcblx0XHRcdFx0Ly8gSWYgZW50ZXJpbmcsIGxlYXZpbmcsIG9yIGNoYW5naW5nIGVsZW1lbnRzLCBhbmltYXRlIHRoZSBjaGFuZ2UgdmlhIHBpdm90XHJcblx0XHRcdFx0bWUuc3RvcCgpO1xyXG5cclxuXHRcdFx0XHQvLyBXZSBvbmx5IG5lZWQgdG8gcmVuZGVyIGF0IHRoaXMgcG9pbnQuIFVwZGF0aW5nIHdpbGwgY2F1c2Ugc2NhbGVzIHRvIGJlXHJcblx0XHRcdFx0Ly8gcmVjb21wdXRlZCBnZW5lcmF0aW5nIGZsaWNrZXIgJiB1c2luZyBtb3JlIG1lbW9yeSB0aGFuIG5lY2Vzc2FyeS5cclxuXHRcdFx0XHRtZS5yZW5kZXIoe1xyXG5cdFx0XHRcdFx0ZHVyYXRpb246IG1lLm9wdGlvbnMuaG92ZXIuYW5pbWF0aW9uRHVyYXRpb24sXHJcblx0XHRcdFx0XHRsYXp5OiB0cnVlXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG1lLl9idWZmZXJlZFJlbmRlciA9IGZhbHNlO1xyXG5cdFx0XHRtZS5fYnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcclxuXHJcblx0XHRcdHJldHVybiBtZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBIYW5kbGUgYW4gZXZlbnRcclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAcGFyYW0ge0lFdmVudH0gZXZlbnQgdGhlIGV2ZW50IHRvIGhhbmRsZVxyXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgY2hhcnQgbmVlZHMgdG8gcmUtcmVuZGVyXHJcblx0XHQgKi9cclxuXHRcdGhhbmRsZUV2ZW50OiBmdW5jdGlvbihlKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBvcHRpb25zID0gbWUub3B0aW9ucyB8fCB7fTtcclxuXHRcdFx0dmFyIGhvdmVyT3B0aW9ucyA9IG9wdGlvbnMuaG92ZXI7XHJcblx0XHRcdHZhciBjaGFuZ2VkID0gZmFsc2U7XHJcblxyXG5cdFx0XHRtZS5sYXN0QWN0aXZlID0gbWUubGFzdEFjdGl2ZSB8fCBbXTtcclxuXHJcblx0XHRcdC8vIEZpbmQgQWN0aXZlIEVsZW1lbnRzIGZvciBob3ZlciBhbmQgdG9vbHRpcHNcclxuXHRcdFx0aWYgKGUudHlwZSA9PT0gJ21vdXNlb3V0Jykge1xyXG5cdFx0XHRcdG1lLmFjdGl2ZSA9IFtdO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdG1lLmFjdGl2ZSA9IG1lLmdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUoZSwgaG92ZXJPcHRpb25zLm1vZGUsIGhvdmVyT3B0aW9ucyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEludm9rZSBvbkhvdmVyIGhvb2tcclxuXHRcdFx0Ly8gTmVlZCB0byBjYWxsIHdpdGggbmF0aXZlIGV2ZW50IGhlcmUgdG8gbm90IGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XHJcblx0XHRcdGhlbHBlcnMuY2FsbGJhY2sob3B0aW9ucy5vbkhvdmVyIHx8IG9wdGlvbnMuaG92ZXIub25Ib3ZlciwgW2UubmF0aXZlLCBtZS5hY3RpdmVdLCBtZSk7XHJcblxyXG5cdFx0XHRpZiAoZS50eXBlID09PSAnbW91c2V1cCcgfHwgZS50eXBlID09PSAnY2xpY2snKSB7XHJcblx0XHRcdFx0aWYgKG9wdGlvbnMub25DbGljaykge1xyXG5cdFx0XHRcdFx0Ly8gVXNlIGUubmF0aXZlIGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XHJcblx0XHRcdFx0XHRvcHRpb25zLm9uQ2xpY2suY2FsbChtZSwgZS5uYXRpdmUsIG1lLmFjdGl2ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgc3R5bGluZyBmb3IgbGFzdCBhY3RpdmUgKGV2ZW4gaWYgaXQgbWF5IHN0aWxsIGJlIGFjdGl2ZSlcclxuXHRcdFx0aWYgKG1lLmxhc3RBY3RpdmUubGVuZ3RoKSB7XHJcblx0XHRcdFx0bWUudXBkYXRlSG92ZXJTdHlsZShtZS5sYXN0QWN0aXZlLCBob3Zlck9wdGlvbnMubW9kZSwgZmFsc2UpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBCdWlsdCBpbiBob3ZlciBzdHlsaW5nXHJcblx0XHRcdGlmIChtZS5hY3RpdmUubGVuZ3RoICYmIGhvdmVyT3B0aW9ucy5tb2RlKSB7XHJcblx0XHRcdFx0bWUudXBkYXRlSG92ZXJTdHlsZShtZS5hY3RpdmUsIGhvdmVyT3B0aW9ucy5tb2RlLCB0cnVlKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y2hhbmdlZCA9ICFoZWxwZXJzLmFycmF5RXF1YWxzKG1lLmFjdGl2ZSwgbWUubGFzdEFjdGl2ZSk7XHJcblxyXG5cdFx0XHQvLyBSZW1lbWJlciBMYXN0IEFjdGl2ZXNcclxuXHRcdFx0bWUubGFzdEFjdGl2ZSA9IG1lLmFjdGl2ZTtcclxuXHJcblx0XHRcdHJldHVybiBjaGFuZ2VkO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvKipcclxuXHQgKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIENoYXJ0IGluc3RlYWQuXHJcblx0ICogQGNsYXNzIENoYXJ0LkNvbnRyb2xsZXJcclxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuNi4wXHJcblx0ICogQHRvZG8gcmVtb3ZlIGF0IHZlcnNpb24gM1xyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0Q2hhcnQuQ29udHJvbGxlciA9IENoYXJ0O1xyXG59O1xyXG5cclxufSx7XCIyMlwiOjIyLFwiMjNcIjoyMyxcIjI2XCI6MjYsXCIyOVwiOjI5LFwiMzFcIjozMSxcIjMyXCI6MzIsXCIzNFwiOjM0LFwiMzZcIjozNixcIjQ2XCI6NDYsXCI0OVwiOjQ5fV0sMjU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaGVscGVycyA9IHJlcXVpcmUoNDYpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDaGFydCkge1xyXG5cclxuXHR2YXIgYXJyYXlFdmVudHMgPSBbJ3B1c2gnLCAncG9wJywgJ3NoaWZ0JywgJ3NwbGljZScsICd1bnNoaWZ0J107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhvb2tzIHRoZSBhcnJheSBtZXRob2RzIHRoYXQgYWRkIG9yIHJlbW92ZSB2YWx1ZXMgKCdwdXNoJywgcG9wJywgJ3NoaWZ0JywgJ3NwbGljZScsXHJcblx0ICogJ3Vuc2hpZnQnKSBhbmQgbm90aWZ5IHRoZSBsaXN0ZW5lciBBRlRFUiB0aGUgYXJyYXkgaGFzIGJlZW4gYWx0ZXJlZC4gTGlzdGVuZXJzIGFyZVxyXG5cdCAqIGNhbGxlZCBvbiB0aGUgJ29uRGF0YSonIGNhbGxiYWNrcyAoZS5nLiBvbkRhdGFQdXNoLCBldGMuKSB3aXRoIHNhbWUgYXJndW1lbnRzLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGxpc3RlbkFycmF5RXZlbnRzKGFycmF5LCBsaXN0ZW5lcikge1xyXG5cdFx0aWYgKGFycmF5Ll9jaGFydGpzKSB7XHJcblx0XHRcdGFycmF5Ll9jaGFydGpzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcnJheSwgJ19jaGFydGpzJywge1xyXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXHJcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxyXG5cdFx0XHR2YWx1ZToge1xyXG5cdFx0XHRcdGxpc3RlbmVyczogW2xpc3RlbmVyXVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRhcnJheUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG5cdFx0XHR2YXIgbWV0aG9kID0gJ29uRGF0YScgKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7XHJcblx0XHRcdHZhciBiYXNlID0gYXJyYXlba2V5XTtcclxuXHJcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcnJheSwga2V5LCB7XHJcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxyXG5cdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxyXG5cdFx0XHRcdHZhbHVlOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcclxuXHRcdFx0XHRcdHZhciByZXMgPSBiYXNlLmFwcGx5KHRoaXMsIGFyZ3MpO1xyXG5cclxuXHRcdFx0XHRcdGhlbHBlcnMuZWFjaChhcnJheS5fY2hhcnRqcy5saXN0ZW5lcnMsIGZ1bmN0aW9uKG9iamVjdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIG9iamVjdFttZXRob2RdID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdFx0XHRcdFx0b2JqZWN0W21ldGhvZF0uYXBwbHkob2JqZWN0LCBhcmdzKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIHJlcztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmVzIHRoZSBnaXZlbiBhcnJheSBldmVudCBsaXN0ZW5lciBhbmQgY2xlYW51cCBleHRyYSBhdHRhY2hlZCBwcm9wZXJ0aWVzIChzdWNoIGFzXHJcblx0ICogdGhlIF9jaGFydGpzIHN0dWIgYW5kIG92ZXJyaWRkZW4gbWV0aG9kcykgaWYgYXJyYXkgZG9lc24ndCBoYXZlIGFueSBtb3JlIGxpc3RlbmVycy5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB1bmxpc3RlbkFycmF5RXZlbnRzKGFycmF5LCBsaXN0ZW5lcikge1xyXG5cdFx0dmFyIHN0dWIgPSBhcnJheS5fY2hhcnRqcztcclxuXHRcdGlmICghc3R1Yikge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGxpc3RlbmVycyA9IHN0dWIubGlzdGVuZXJzO1xyXG5cdFx0dmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xyXG5cdFx0aWYgKGluZGV4ICE9PSAtMSkge1xyXG5cdFx0XHRsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGFycmF5RXZlbnRzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcblx0XHRcdGRlbGV0ZSBhcnJheVtrZXldO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZGVsZXRlIGFycmF5Ll9jaGFydGpzO1xyXG5cdH1cclxuXHJcblx0Ly8gQmFzZSBjbGFzcyBmb3IgYWxsIGRhdGFzZXQgY29udHJvbGxlcnMgKGxpbmUsIGJhciwgZXRjKVxyXG5cdENoYXJ0LkRhdGFzZXRDb250cm9sbGVyID0gZnVuY3Rpb24oY2hhcnQsIGRhdGFzZXRJbmRleCkge1xyXG5cdFx0dGhpcy5pbml0aWFsaXplKGNoYXJ0LCBkYXRhc2V0SW5kZXgpO1xyXG5cdH07XHJcblxyXG5cdGhlbHBlcnMuZXh0ZW5kKENoYXJ0LkRhdGFzZXRDb250cm9sbGVyLnByb3RvdHlwZSwge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRWxlbWVudCB0eXBlIHVzZWQgdG8gZ2VuZXJhdGUgYSBtZXRhIGRhdGFzZXQgKGUuZy4gQ2hhcnQuZWxlbWVudC5MaW5lKS5cclxuXHRcdCAqIEB0eXBlIHtDaGFydC5jb3JlLmVsZW1lbnR9XHJcblx0XHQgKi9cclxuXHRcdGRhdGFzZXRFbGVtZW50VHlwZTogbnVsbCxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVsZW1lbnQgdHlwZSB1c2VkIHRvIGdlbmVyYXRlIGEgbWV0YSBkYXRhIChlLmcuIENoYXJ0LmVsZW1lbnQuUG9pbnQpLlxyXG5cdFx0ICogQHR5cGUge0NoYXJ0LmNvcmUuZWxlbWVudH1cclxuXHRcdCAqL1xyXG5cdFx0ZGF0YUVsZW1lbnRUeXBlOiBudWxsLFxyXG5cclxuXHRcdGluaXRpYWxpemU6IGZ1bmN0aW9uKGNoYXJ0LCBkYXRhc2V0SW5kZXgpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0bWUuY2hhcnQgPSBjaGFydDtcclxuXHRcdFx0bWUuaW5kZXggPSBkYXRhc2V0SW5kZXg7XHJcblx0XHRcdG1lLmxpbmtTY2FsZXMoKTtcclxuXHRcdFx0bWUuYWRkRWxlbWVudHMoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0dXBkYXRlSW5kZXg6IGZ1bmN0aW9uKGRhdGFzZXRJbmRleCkge1xyXG5cdFx0XHR0aGlzLmluZGV4ID0gZGF0YXNldEluZGV4O1xyXG5cdFx0fSxcclxuXHJcblx0XHRsaW5rU2NhbGVzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XHJcblx0XHRcdHZhciBkYXRhc2V0ID0gbWUuZ2V0RGF0YXNldCgpO1xyXG5cclxuXHRcdFx0aWYgKG1ldGEueEF4aXNJRCA9PT0gbnVsbCB8fCAhKG1ldGEueEF4aXNJRCBpbiBtZS5jaGFydC5zY2FsZXMpKSB7XHJcblx0XHRcdFx0bWV0YS54QXhpc0lEID0gZGF0YXNldC54QXhpc0lEIHx8IG1lLmNoYXJ0Lm9wdGlvbnMuc2NhbGVzLnhBeGVzWzBdLmlkO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChtZXRhLnlBeGlzSUQgPT09IG51bGwgfHwgIShtZXRhLnlBeGlzSUQgaW4gbWUuY2hhcnQuc2NhbGVzKSkge1xyXG5cdFx0XHRcdG1ldGEueUF4aXNJRCA9IGRhdGFzZXQueUF4aXNJRCB8fCBtZS5jaGFydC5vcHRpb25zLnNjYWxlcy55QXhlc1swXS5pZDtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRnZXREYXRhc2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1t0aGlzLmluZGV4XTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Z2V0TWV0YTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKHRoaXMuaW5kZXgpO1xyXG5cdFx0fSxcclxuXHJcblx0XHRnZXRTY2FsZUZvcklkOiBmdW5jdGlvbihzY2FsZUlEKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmNoYXJ0LnNjYWxlc1tzY2FsZUlEXTtcclxuXHRcdH0sXHJcblxyXG5cdFx0cmVzZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZSh0cnVlKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRkZXN0cm95OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKHRoaXMuX2RhdGEpIHtcclxuXHRcdFx0XHR1bmxpc3RlbkFycmF5RXZlbnRzKHRoaXMuX2RhdGEsIHRoaXMpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdGNyZWF0ZU1ldGFEYXRhc2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIHR5cGUgPSBtZS5kYXRhc2V0RWxlbWVudFR5cGU7XHJcblx0XHRcdHJldHVybiB0eXBlICYmIG5ldyB0eXBlKHtcclxuXHRcdFx0XHRfY2hhcnQ6IG1lLmNoYXJ0LFxyXG5cdFx0XHRcdF9kYXRhc2V0SW5kZXg6IG1lLmluZGV4XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHRjcmVhdGVNZXRhRGF0YTogZnVuY3Rpb24oaW5kZXgpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIHR5cGUgPSBtZS5kYXRhRWxlbWVudFR5cGU7XHJcblx0XHRcdHJldHVybiB0eXBlICYmIG5ldyB0eXBlKHtcclxuXHRcdFx0XHRfY2hhcnQ6IG1lLmNoYXJ0LFxyXG5cdFx0XHRcdF9kYXRhc2V0SW5kZXg6IG1lLmluZGV4LFxyXG5cdFx0XHRcdF9pbmRleDogaW5kZXhcclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGFkZEVsZW1lbnRzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XHJcblx0XHRcdHZhciBkYXRhID0gbWUuZ2V0RGF0YXNldCgpLmRhdGEgfHwgW107XHJcblx0XHRcdHZhciBtZXRhRGF0YSA9IG1ldGEuZGF0YTtcclxuXHRcdFx0dmFyIGksIGlsZW47XHJcblxyXG5cdFx0XHRmb3IgKGkgPSAwLCBpbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdFx0XHRtZXRhRGF0YVtpXSA9IG1ldGFEYXRhW2ldIHx8IG1lLmNyZWF0ZU1ldGFEYXRhKGkpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRtZXRhLmRhdGFzZXQgPSBtZXRhLmRhdGFzZXQgfHwgbWUuY3JlYXRlTWV0YURhdGFzZXQoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0YWRkRWxlbWVudEFuZFJlc2V0OiBmdW5jdGlvbihpbmRleCkge1xyXG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXMuY3JlYXRlTWV0YURhdGEoaW5kZXgpO1xyXG5cdFx0XHR0aGlzLmdldE1ldGEoKS5kYXRhLnNwbGljZShpbmRleCwgMCwgZWxlbWVudCk7XHJcblx0XHRcdHRoaXMudXBkYXRlRWxlbWVudChlbGVtZW50LCBpbmRleCwgdHJ1ZSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGJ1aWxkT3JVcGRhdGVFbGVtZW50czogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBkYXRhc2V0ID0gbWUuZ2V0RGF0YXNldCgpO1xyXG5cdFx0XHR2YXIgZGF0YSA9IGRhdGFzZXQuZGF0YSB8fCAoZGF0YXNldC5kYXRhID0gW10pO1xyXG5cclxuXHRcdFx0Ly8gSW4gb3JkZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBkYXRhIGFkZGl0aW9uL2RlbGV0aW9uIGFuaW1hdGlvbiAoYW4gdGh1cyBzaW11bGF0ZVxyXG5cdFx0XHQvLyByZWFsLXRpbWUgY2hhcnRzKSwgd2UgbmVlZCB0byBtb25pdG9yIHRoZXNlIGRhdGEgbW9kaWZpY2F0aW9ucyBhbmQgc3luY2hyb25pemVcclxuXHRcdFx0Ly8gdGhlIGludGVybmFsIG1ldGEgZGF0YSBhY2NvcmRpbmdseS5cclxuXHRcdFx0aWYgKG1lLl9kYXRhICE9PSBkYXRhKSB7XHJcblx0XHRcdFx0aWYgKG1lLl9kYXRhKSB7XHJcblx0XHRcdFx0XHQvLyBUaGlzIGNhc2UgaGFwcGVucyB3aGVuIHRoZSB1c2VyIHJlcGxhY2VkIHRoZSBkYXRhIGFycmF5IGluc3RhbmNlLlxyXG5cdFx0XHRcdFx0dW5saXN0ZW5BcnJheUV2ZW50cyhtZS5fZGF0YSwgbWUpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bGlzdGVuQXJyYXlFdmVudHMoZGF0YSwgbWUpO1xyXG5cdFx0XHRcdG1lLl9kYXRhID0gZGF0YTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gUmUtc3luYyBtZXRhIGRhdGEgaW4gY2FzZSB0aGUgdXNlciByZXBsYWNlZCB0aGUgZGF0YSBhcnJheSBvciBpZiB3ZSBtaXNzZWRcclxuXHRcdFx0Ly8gYW55IHVwZGF0ZXMgYW5kIHNvIG1ha2Ugc3VyZSB0aGF0IHdlIGhhbmRsZSBudW1iZXIgb2YgZGF0YXBvaW50cyBjaGFuZ2luZy5cclxuXHRcdFx0bWUucmVzeW5jRWxlbWVudHMoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0dXBkYXRlOiBoZWxwZXJzLm5vb3AsXHJcblxyXG5cdFx0dHJhbnNpdGlvbjogZnVuY3Rpb24oZWFzaW5nVmFsdWUpIHtcclxuXHRcdFx0dmFyIG1ldGEgPSB0aGlzLmdldE1ldGEoKTtcclxuXHRcdFx0dmFyIGVsZW1lbnRzID0gbWV0YS5kYXRhIHx8IFtdO1xyXG5cdFx0XHR2YXIgaWxlbiA9IGVsZW1lbnRzLmxlbmd0aDtcclxuXHRcdFx0dmFyIGkgPSAwO1xyXG5cclxuXHRcdFx0Zm9yICg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdFx0XHRlbGVtZW50c1tpXS50cmFuc2l0aW9uKGVhc2luZ1ZhbHVlKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKG1ldGEuZGF0YXNldCkge1xyXG5cdFx0XHRcdG1ldGEuZGF0YXNldC50cmFuc2l0aW9uKGVhc2luZ1ZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRkcmF3OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1ldGEgPSB0aGlzLmdldE1ldGEoKTtcclxuXHRcdFx0dmFyIGVsZW1lbnRzID0gbWV0YS5kYXRhIHx8IFtdO1xyXG5cdFx0XHR2YXIgaWxlbiA9IGVsZW1lbnRzLmxlbmd0aDtcclxuXHRcdFx0dmFyIGkgPSAwO1xyXG5cclxuXHRcdFx0aWYgKG1ldGEuZGF0YXNldCkge1xyXG5cdFx0XHRcdG1ldGEuZGF0YXNldC5kcmF3KCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRcdFx0ZWxlbWVudHNbaV0uZHJhdygpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdHJlbW92ZUhvdmVyU3R5bGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHRcdFx0aGVscGVycy5tZXJnZShlbGVtZW50Ll9tb2RlbCwgZWxlbWVudC4kcHJldmlvdXNTdHlsZSB8fCB7fSk7XHJcblx0XHRcdGRlbGV0ZSBlbGVtZW50LiRwcmV2aW91c1N0eWxlO1xyXG5cdFx0fSxcclxuXHJcblx0XHRzZXRIb3ZlclN0eWxlOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcblx0XHRcdHZhciBkYXRhc2V0ID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2VsZW1lbnQuX2RhdGFzZXRJbmRleF07XHJcblx0XHRcdHZhciBpbmRleCA9IGVsZW1lbnQuX2luZGV4O1xyXG5cdFx0XHR2YXIgY3VzdG9tID0gZWxlbWVudC5jdXN0b20gfHwge307XHJcblx0XHRcdHZhciB2YWx1ZU9yRGVmYXVsdCA9IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0O1xyXG5cdFx0XHR2YXIgZ2V0SG92ZXJDb2xvciA9IGhlbHBlcnMuZ2V0SG92ZXJDb2xvcjtcclxuXHRcdFx0dmFyIG1vZGVsID0gZWxlbWVudC5fbW9kZWw7XHJcblxyXG5cdFx0XHRlbGVtZW50LiRwcmV2aW91c1N0eWxlID0ge1xyXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogbW9kZWwuYmFja2dyb3VuZENvbG9yLFxyXG5cdFx0XHRcdGJvcmRlckNvbG9yOiBtb2RlbC5ib3JkZXJDb2xvcixcclxuXHRcdFx0XHRib3JkZXJXaWR0aDogbW9kZWwuYm9yZGVyV2lkdGhcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdG1vZGVsLmJhY2tncm91bmRDb2xvciA9IGN1c3RvbS5ob3ZlckJhY2tncm91bmRDb2xvciA/IGN1c3RvbS5ob3ZlckJhY2tncm91bmRDb2xvciA6IHZhbHVlT3JEZWZhdWx0KGRhdGFzZXQuaG92ZXJCYWNrZ3JvdW5kQ29sb3IsIGluZGV4LCBnZXRIb3ZlckNvbG9yKG1vZGVsLmJhY2tncm91bmRDb2xvcikpO1xyXG5cdFx0XHRtb2RlbC5ib3JkZXJDb2xvciA9IGN1c3RvbS5ob3ZlckJvcmRlckNvbG9yID8gY3VzdG9tLmhvdmVyQm9yZGVyQ29sb3IgOiB2YWx1ZU9yRGVmYXVsdChkYXRhc2V0LmhvdmVyQm9yZGVyQ29sb3IsIGluZGV4LCBnZXRIb3ZlckNvbG9yKG1vZGVsLmJvcmRlckNvbG9yKSk7XHJcblx0XHRcdG1vZGVsLmJvcmRlcldpZHRoID0gY3VzdG9tLmhvdmVyQm9yZGVyV2lkdGggPyBjdXN0b20uaG92ZXJCb3JkZXJXaWR0aCA6IHZhbHVlT3JEZWZhdWx0KGRhdGFzZXQuaG92ZXJCb3JkZXJXaWR0aCwgaW5kZXgsIG1vZGVsLmJvcmRlcldpZHRoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRyZXN5bmNFbGVtZW50czogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xyXG5cdFx0XHR2YXIgZGF0YSA9IG1lLmdldERhdGFzZXQoKS5kYXRhO1xyXG5cdFx0XHR2YXIgbnVtTWV0YSA9IG1ldGEuZGF0YS5sZW5ndGg7XHJcblx0XHRcdHZhciBudW1EYXRhID0gZGF0YS5sZW5ndGg7XHJcblxyXG5cdFx0XHRpZiAobnVtRGF0YSA8IG51bU1ldGEpIHtcclxuXHRcdFx0XHRtZXRhLmRhdGEuc3BsaWNlKG51bURhdGEsIG51bU1ldGEgLSBudW1EYXRhKTtcclxuXHRcdFx0fSBlbHNlIGlmIChudW1EYXRhID4gbnVtTWV0YSkge1xyXG5cdFx0XHRcdG1lLmluc2VydEVsZW1lbnRzKG51bU1ldGEsIG51bURhdGEgLSBudW1NZXRhKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdGluc2VydEVsZW1lbnRzOiBmdW5jdGlvbihzdGFydCwgY291bnQpIHtcclxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XHJcblx0XHRcdFx0dGhpcy5hZGRFbGVtZW50QW5kUmVzZXQoc3RhcnQgKyBpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdG9uRGF0YVB1c2g6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR0aGlzLmluc2VydEVsZW1lbnRzKHRoaXMuZ2V0RGF0YXNldCgpLmRhdGEubGVuZ3RoIC0gMSwgYXJndW1lbnRzLmxlbmd0aCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0b25EYXRhUG9wOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dGhpcy5nZXRNZXRhKCkuZGF0YS5wb3AoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRvbkRhdGFTaGlmdDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHRoaXMuZ2V0TWV0YSgpLmRhdGEuc2hpZnQoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRvbkRhdGFTcGxpY2U6IGZ1bmN0aW9uKHN0YXJ0LCBjb3VudCkge1xyXG5cdFx0XHR0aGlzLmdldE1ldGEoKS5kYXRhLnNwbGljZShzdGFydCwgY291bnQpO1xyXG5cdFx0XHR0aGlzLmluc2VydEVsZW1lbnRzKHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoIC0gMik7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0b25EYXRhVW5zaGlmdDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHRoaXMuaW5zZXJ0RWxlbWVudHMoMCwgYXJndW1lbnRzLmxlbmd0aCk7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdENoYXJ0LkRhdGFzZXRDb250cm9sbGVyLmV4dGVuZCA9IGhlbHBlcnMuaW5oZXJpdHM7XHJcbn07XHJcblxyXG59LHtcIjQ2XCI6NDZ9XSwyNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Nik7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHQvKipcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdF9zZXQ6IGZ1bmN0aW9uKHNjb3BlLCB2YWx1ZXMpIHtcclxuXHRcdHJldHVybiBoZWxwZXJzLm1lcmdlKHRoaXNbc2NvcGVdIHx8ICh0aGlzW3Njb3BlXSA9IHt9KSwgdmFsdWVzKTtcclxuXHR9XHJcbn07XHJcblxyXG59LHtcIjQ2XCI6NDZ9XSwyNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb2xvciA9IHJlcXVpcmUoMyk7XHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Nik7XHJcblxyXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZShzdGFydCwgdmlldywgbW9kZWwsIGVhc2UpIHtcclxuXHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG1vZGVsKTtcclxuXHR2YXIgaSwgaWxlbiwga2V5LCBhY3R1YWwsIG9yaWdpbiwgdGFyZ2V0LCB0eXBlLCBjMCwgYzE7XHJcblxyXG5cdGZvciAoaSA9IDAsIGlsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0a2V5ID0ga2V5c1tpXTtcclxuXHJcblx0XHR0YXJnZXQgPSBtb2RlbFtrZXldO1xyXG5cclxuXHRcdC8vIGlmIGEgdmFsdWUgaXMgYWRkZWQgdG8gdGhlIG1vZGVsIGFmdGVyIHBpdm90KCkgaGFzIGJlZW4gY2FsbGVkLCB0aGUgdmlld1xyXG5cdFx0Ly8gZG9lc24ndCBjb250YWluIGl0LCBzbyBsZXQncyBpbml0aWFsaXplIHRoZSB2aWV3IHRvIHRoZSB0YXJnZXQgdmFsdWUuXHJcblx0XHRpZiAoIXZpZXcuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHR2aWV3W2tleV0gPSB0YXJnZXQ7XHJcblx0XHR9XHJcblxyXG5cdFx0YWN0dWFsID0gdmlld1trZXldO1xyXG5cclxuXHRcdGlmIChhY3R1YWwgPT09IHRhcmdldCB8fCBrZXlbMF0gPT09ICdfJykge1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXN0YXJ0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0c3RhcnRba2V5XSA9IGFjdHVhbDtcclxuXHRcdH1cclxuXHJcblx0XHRvcmlnaW4gPSBzdGFydFtrZXldO1xyXG5cclxuXHRcdHR5cGUgPSB0eXBlb2YgdGFyZ2V0O1xyXG5cclxuXHRcdGlmICh0eXBlID09PSB0eXBlb2Ygb3JpZ2luKSB7XHJcblx0XHRcdGlmICh0eXBlID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRcdGMwID0gY29sb3Iob3JpZ2luKTtcclxuXHRcdFx0XHRpZiAoYzAudmFsaWQpIHtcclxuXHRcdFx0XHRcdGMxID0gY29sb3IodGFyZ2V0KTtcclxuXHRcdFx0XHRcdGlmIChjMS52YWxpZCkge1xyXG5cdFx0XHRcdFx0XHR2aWV3W2tleV0gPSBjMS5taXgoYzAsIGVhc2UpLnJnYlN0cmluZygpO1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUob3JpZ2luKSAmJiBpc0Zpbml0ZSh0YXJnZXQpKSB7XHJcblx0XHRcdFx0dmlld1trZXldID0gb3JpZ2luICsgKHRhcmdldCAtIG9yaWdpbikgKiBlYXNlO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0dmlld1trZXldID0gdGFyZ2V0O1xyXG5cdH1cclxufVxyXG5cclxudmFyIEVsZW1lbnQgPSBmdW5jdGlvbihjb25maWd1cmF0aW9uKSB7XHJcblx0aGVscGVycy5leHRlbmQodGhpcywgY29uZmlndXJhdGlvbik7XHJcblx0dGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5oZWxwZXJzLmV4dGVuZChFbGVtZW50LnByb3RvdHlwZSwge1xyXG5cclxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcclxuXHRcdHRoaXMuaGlkZGVuID0gZmFsc2U7XHJcblx0fSxcclxuXHJcblx0cGl2b3Q6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdGlmICghbWUuX3ZpZXcpIHtcclxuXHRcdFx0bWUuX3ZpZXcgPSBoZWxwZXJzLmNsb25lKG1lLl9tb2RlbCk7XHJcblx0XHR9XHJcblx0XHRtZS5fc3RhcnQgPSB7fTtcclxuXHRcdHJldHVybiBtZTtcclxuXHR9LFxyXG5cclxuXHR0cmFuc2l0aW9uOiBmdW5jdGlvbihlYXNlKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0dmFyIG1vZGVsID0gbWUuX21vZGVsO1xyXG5cdFx0dmFyIHN0YXJ0ID0gbWUuX3N0YXJ0O1xyXG5cdFx0dmFyIHZpZXcgPSBtZS5fdmlldztcclxuXHJcblx0XHQvLyBObyBhbmltYXRpb24gLT4gTm8gVHJhbnNpdGlvblxyXG5cdFx0aWYgKCFtb2RlbCB8fCBlYXNlID09PSAxKSB7XHJcblx0XHRcdG1lLl92aWV3ID0gbW9kZWw7XHJcblx0XHRcdG1lLl9zdGFydCA9IG51bGw7XHJcblx0XHRcdHJldHVybiBtZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXZpZXcpIHtcclxuXHRcdFx0dmlldyA9IG1lLl92aWV3ID0ge307XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFzdGFydCkge1xyXG5cdFx0XHRzdGFydCA9IG1lLl9zdGFydCA9IHt9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGludGVycG9sYXRlKHN0YXJ0LCB2aWV3LCBtb2RlbCwgZWFzZSk7XHJcblxyXG5cdFx0cmV0dXJuIG1lO1xyXG5cdH0sXHJcblxyXG5cdHRvb2x0aXBQb3NpdGlvbjogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR4OiB0aGlzLl9tb2RlbC54LFxyXG5cdFx0XHR5OiB0aGlzLl9tb2RlbC55XHJcblx0XHR9O1xyXG5cdH0sXHJcblxyXG5cdGhhc1ZhbHVlOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiBoZWxwZXJzLmlzTnVtYmVyKHRoaXMuX21vZGVsLngpICYmIGhlbHBlcnMuaXNOdW1iZXIodGhpcy5fbW9kZWwueSk7XHJcblx0fVxyXG59KTtcclxuXHJcbkVsZW1lbnQuZXh0ZW5kID0gaGVscGVycy5pbmhlcml0cztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRWxlbWVudDtcclxuXHJcbn0se1wiM1wiOjMsXCI0NlwiOjQ2fV0sMjg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4vKiBnbG9iYWwgd2luZG93OiBmYWxzZSAqL1xyXG4vKiBnbG9iYWwgZG9jdW1lbnQ6IGZhbHNlICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjb2xvciA9IHJlcXVpcmUoMyk7XHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG52YXIgaGVscGVycyA9IHJlcXVpcmUoNDYpO1xyXG52YXIgc2NhbGVTZXJ2aWNlID0gcmVxdWlyZSgzNCk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuXHQvLyAtLSBCYXNpYyBqcyB1dGlsaXR5IG1ldGhvZHNcclxuXHJcblx0aGVscGVycy5jb25maWdNZXJnZSA9IGZ1bmN0aW9uKC8qIG9iamVjdHMgLi4uICovKSB7XHJcblx0XHRyZXR1cm4gaGVscGVycy5tZXJnZShoZWxwZXJzLmNsb25lKGFyZ3VtZW50c1swXSksIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSwge1xyXG5cdFx0XHRtZXJnZXI6IGZ1bmN0aW9uKGtleSwgdGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcclxuXHRcdFx0XHR2YXIgdHZhbCA9IHRhcmdldFtrZXldIHx8IHt9O1xyXG5cdFx0XHRcdHZhciBzdmFsID0gc291cmNlW2tleV07XHJcblxyXG5cdFx0XHRcdGlmIChrZXkgPT09ICdzY2FsZXMnKSB7XHJcblx0XHRcdFx0XHQvLyBzY2FsZSBjb25maWcgbWVyZ2luZyBpcyBjb21wbGV4LiBBZGQgb3VyIG93biBmdW5jdGlvbiBoZXJlIGZvciB0aGF0XHJcblx0XHRcdFx0XHR0YXJnZXRba2V5XSA9IGhlbHBlcnMuc2NhbGVNZXJnZSh0dmFsLCBzdmFsKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGtleSA9PT0gJ3NjYWxlJykge1xyXG5cdFx0XHRcdFx0Ly8gdXNlZCBpbiBwb2xhciBhcmVhICYgcmFkYXIgY2hhcnRzIHNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIHNjYWxlXHJcblx0XHRcdFx0XHR0YXJnZXRba2V5XSA9IGhlbHBlcnMubWVyZ2UodHZhbCwgW3NjYWxlU2VydmljZS5nZXRTY2FsZURlZmF1bHRzKHN2YWwudHlwZSksIHN2YWxdKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aGVscGVycy5fbWVyZ2VyKGtleSwgdGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fTtcclxuXHJcblx0aGVscGVycy5zY2FsZU1lcmdlID0gZnVuY3Rpb24oLyogb2JqZWN0cyAuLi4gKi8pIHtcclxuXHRcdHJldHVybiBoZWxwZXJzLm1lcmdlKGhlbHBlcnMuY2xvbmUoYXJndW1lbnRzWzBdKSwgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLCB7XHJcblx0XHRcdG1lcmdlcjogZnVuY3Rpb24oa2V5LCB0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xyXG5cdFx0XHRcdGlmIChrZXkgPT09ICd4QXhlcycgfHwga2V5ID09PSAneUF4ZXMnKSB7XHJcblx0XHRcdFx0XHR2YXIgc2xlbiA9IHNvdXJjZVtrZXldLmxlbmd0aDtcclxuXHRcdFx0XHRcdHZhciBpLCB0eXBlLCBzY2FsZTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIXRhcmdldFtrZXldKSB7XHJcblx0XHRcdFx0XHRcdHRhcmdldFtrZXldID0gW107XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IHNsZW47ICsraSkge1xyXG5cdFx0XHRcdFx0XHRzY2FsZSA9IHNvdXJjZVtrZXldW2ldO1xyXG5cdFx0XHRcdFx0XHR0eXBlID0gaGVscGVycy52YWx1ZU9yRGVmYXVsdChzY2FsZS50eXBlLCBrZXkgPT09ICd4QXhlcycgPyAnY2F0ZWdvcnknIDogJ2xpbmVhcicpO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKGkgPj0gdGFyZ2V0W2tleV0ubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0dGFyZ2V0W2tleV0ucHVzaCh7fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmICghdGFyZ2V0W2tleV1baV0udHlwZSB8fCAoc2NhbGUudHlwZSAmJiBzY2FsZS50eXBlICE9PSB0YXJnZXRba2V5XVtpXS50eXBlKSkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIG5ldy91bnR5cGVkIHNjYWxlIG9yIHR5cGUgY2hhbmdlZDogbGV0J3MgYXBwbHkgdGhlIG5ldyBkZWZhdWx0c1xyXG5cdFx0XHRcdFx0XHRcdC8vIHRoZW4gbWVyZ2Ugc291cmNlIHNjYWxlIHRvIGNvcnJlY3RseSBvdmVyd3JpdGUgdGhlIGRlZmF1bHRzLlxyXG5cdFx0XHRcdFx0XHRcdGhlbHBlcnMubWVyZ2UodGFyZ2V0W2tleV1baV0sIFtzY2FsZVNlcnZpY2UuZ2V0U2NhbGVEZWZhdWx0cyh0eXBlKSwgc2NhbGVdKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBzY2FsZXMgdHlwZSBhcmUgdGhlIHNhbWVcclxuXHRcdFx0XHRcdFx0XHRoZWxwZXJzLm1lcmdlKHRhcmdldFtrZXldW2ldLCBzY2FsZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aGVscGVycy5fbWVyZ2VyKGtleSwgdGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fTtcclxuXHJcblx0aGVscGVycy53aGVyZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGZpbHRlckNhbGxiYWNrKSB7XHJcblx0XHRpZiAoaGVscGVycy5pc0FycmF5KGNvbGxlY3Rpb24pICYmIEFycmF5LnByb3RvdHlwZS5maWx0ZXIpIHtcclxuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb24uZmlsdGVyKGZpbHRlckNhbGxiYWNrKTtcclxuXHRcdH1cclxuXHRcdHZhciBmaWx0ZXJlZCA9IFtdO1xyXG5cclxuXHRcdGhlbHBlcnMuZWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbihpdGVtKSB7XHJcblx0XHRcdGlmIChmaWx0ZXJDYWxsYmFjayhpdGVtKSkge1xyXG5cdFx0XHRcdGZpbHRlcmVkLnB1c2goaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBmaWx0ZXJlZDtcclxuXHR9O1xyXG5cdGhlbHBlcnMuZmluZEluZGV4ID0gQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCA/XHJcblx0XHRmdW5jdGlvbihhcnJheSwgY2FsbGJhY2ssIHNjb3BlKSB7XHJcblx0XHRcdHJldHVybiBhcnJheS5maW5kSW5kZXgoY2FsbGJhY2ssIHNjb3BlKTtcclxuXHRcdH0gOlxyXG5cdFx0ZnVuY3Rpb24oYXJyYXksIGNhbGxiYWNrLCBzY29wZSkge1xyXG5cdFx0XHRzY29wZSA9IHNjb3BlID09PSB1bmRlZmluZWQgPyBhcnJheSA6IHNjb3BlO1xyXG5cdFx0XHRmb3IgKHZhciBpID0gMCwgaWxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHRcdGlmIChjYWxsYmFjay5jYWxsKHNjb3BlLCBhcnJheVtpXSwgaSwgYXJyYXkpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIC0xO1xyXG5cdFx0fTtcclxuXHRoZWxwZXJzLmZpbmROZXh0V2hlcmUgPSBmdW5jdGlvbihhcnJheVRvU2VhcmNoLCBmaWx0ZXJDYWxsYmFjaywgc3RhcnRJbmRleCkge1xyXG5cdFx0Ly8gRGVmYXVsdCB0byBzdGFydCBvZiB0aGUgYXJyYXlcclxuXHRcdGlmIChoZWxwZXJzLmlzTnVsbE9yVW5kZWYoc3RhcnRJbmRleCkpIHtcclxuXHRcdFx0c3RhcnRJbmRleCA9IC0xO1xyXG5cdFx0fVxyXG5cdFx0Zm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggKyAxOyBpIDwgYXJyYXlUb1NlYXJjaC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR2YXIgY3VycmVudEl0ZW0gPSBhcnJheVRvU2VhcmNoW2ldO1xyXG5cdFx0XHRpZiAoZmlsdGVyQ2FsbGJhY2soY3VycmVudEl0ZW0pKSB7XHJcblx0XHRcdFx0cmV0dXJuIGN1cnJlbnRJdGVtO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHRoZWxwZXJzLmZpbmRQcmV2aW91c1doZXJlID0gZnVuY3Rpb24oYXJyYXlUb1NlYXJjaCwgZmlsdGVyQ2FsbGJhY2ssIHN0YXJ0SW5kZXgpIHtcclxuXHRcdC8vIERlZmF1bHQgdG8gZW5kIG9mIHRoZSBhcnJheVxyXG5cdFx0aWYgKGhlbHBlcnMuaXNOdWxsT3JVbmRlZihzdGFydEluZGV4KSkge1xyXG5cdFx0XHRzdGFydEluZGV4ID0gYXJyYXlUb1NlYXJjaC5sZW5ndGg7XHJcblx0XHR9XHJcblx0XHRmb3IgKHZhciBpID0gc3RhcnRJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcblx0XHRcdHZhciBjdXJyZW50SXRlbSA9IGFycmF5VG9TZWFyY2hbaV07XHJcblx0XHRcdGlmIChmaWx0ZXJDYWxsYmFjayhjdXJyZW50SXRlbSkpIHtcclxuXHRcdFx0XHRyZXR1cm4gY3VycmVudEl0ZW07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvLyAtLSBNYXRoIG1ldGhvZHNcclxuXHRoZWxwZXJzLmlzTnVtYmVyID0gZnVuY3Rpb24obikge1xyXG5cdFx0cmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcclxuXHR9O1xyXG5cdGhlbHBlcnMuYWxtb3N0RXF1YWxzID0gZnVuY3Rpb24oeCwgeSwgZXBzaWxvbikge1xyXG5cdFx0cmV0dXJuIE1hdGguYWJzKHggLSB5KSA8IGVwc2lsb247XHJcblx0fTtcclxuXHRoZWxwZXJzLmFsbW9zdFdob2xlID0gZnVuY3Rpb24oeCwgZXBzaWxvbikge1xyXG5cdFx0dmFyIHJvdW5kZWQgPSBNYXRoLnJvdW5kKHgpO1xyXG5cdFx0cmV0dXJuICgoKHJvdW5kZWQgLSBlcHNpbG9uKSA8IHgpICYmICgocm91bmRlZCArIGVwc2lsb24pID4geCkpO1xyXG5cdH07XHJcblx0aGVscGVycy5tYXggPSBmdW5jdGlvbihhcnJheSkge1xyXG5cdFx0cmV0dXJuIGFycmF5LnJlZHVjZShmdW5jdGlvbihtYXgsIHZhbHVlKSB7XHJcblx0XHRcdGlmICghaXNOYU4odmFsdWUpKSB7XHJcblx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KG1heCwgdmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBtYXg7XHJcblx0XHR9LCBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xyXG5cdH07XHJcblx0aGVscGVycy5taW4gPSBmdW5jdGlvbihhcnJheSkge1xyXG5cdFx0cmV0dXJuIGFycmF5LnJlZHVjZShmdW5jdGlvbihtaW4sIHZhbHVlKSB7XHJcblx0XHRcdGlmICghaXNOYU4odmFsdWUpKSB7XHJcblx0XHRcdFx0cmV0dXJuIE1hdGgubWluKG1pbiwgdmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBtaW47XHJcblx0XHR9LCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xyXG5cdH07XHJcblx0aGVscGVycy5zaWduID0gTWF0aC5zaWduID9cclxuXHRcdGZ1bmN0aW9uKHgpIHtcclxuXHRcdFx0cmV0dXJuIE1hdGguc2lnbih4KTtcclxuXHRcdH0gOlxyXG5cdFx0ZnVuY3Rpb24oeCkge1xyXG5cdFx0XHR4ID0gK3g7IC8vIGNvbnZlcnQgdG8gYSBudW1iZXJcclxuXHRcdFx0aWYgKHggPT09IDAgfHwgaXNOYU4oeCkpIHtcclxuXHRcdFx0XHRyZXR1cm4geDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4geCA+IDAgPyAxIDogLTE7XHJcblx0XHR9O1xyXG5cdGhlbHBlcnMubG9nMTAgPSBNYXRoLmxvZzEwID9cclxuXHRcdGZ1bmN0aW9uKHgpIHtcclxuXHRcdFx0cmV0dXJuIE1hdGgubG9nMTAoeCk7XHJcblx0XHR9IDpcclxuXHRcdGZ1bmN0aW9uKHgpIHtcclxuXHRcdFx0dmFyIGV4cG9uZW50ID0gTWF0aC5sb2coeCkgKiBNYXRoLkxPRzEwRTsgLy8gTWF0aC5MT0cxMEUgPSAxIC8gTWF0aC5MTjEwLlxyXG5cdFx0XHQvLyBDaGVjayBmb3Igd2hvbGUgcG93ZXJzIG9mIDEwLFxyXG5cdFx0XHQvLyB3aGljaCBkdWUgdG8gZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3Igc2hvdWxkIGJlIGNvcnJlY3RlZC5cclxuXHRcdFx0dmFyIHBvd2VyT2YxMCA9IE1hdGgucm91bmQoZXhwb25lbnQpO1xyXG5cdFx0XHR2YXIgaXNQb3dlck9mMTAgPSB4ID09PSBNYXRoLnBvdygxMCwgcG93ZXJPZjEwKTtcclxuXHJcblx0XHRcdHJldHVybiBpc1Bvd2VyT2YxMCA/IHBvd2VyT2YxMCA6IGV4cG9uZW50O1xyXG5cdFx0fTtcclxuXHRoZWxwZXJzLnRvUmFkaWFucyA9IGZ1bmN0aW9uKGRlZ3JlZXMpIHtcclxuXHRcdHJldHVybiBkZWdyZWVzICogKE1hdGguUEkgLyAxODApO1xyXG5cdH07XHJcblx0aGVscGVycy50b0RlZ3JlZXMgPSBmdW5jdGlvbihyYWRpYW5zKSB7XHJcblx0XHRyZXR1cm4gcmFkaWFucyAqICgxODAgLyBNYXRoLlBJKTtcclxuXHR9O1xyXG5cdC8vIEdldHMgdGhlIGFuZ2xlIGZyb20gdmVydGljYWwgdXByaWdodCB0byB0aGUgcG9pbnQgYWJvdXQgYSBjZW50cmUuXHJcblx0aGVscGVycy5nZXRBbmdsZUZyb21Qb2ludCA9IGZ1bmN0aW9uKGNlbnRyZVBvaW50LCBhbmdsZVBvaW50KSB7XHJcblx0XHR2YXIgZGlzdGFuY2VGcm9tWENlbnRlciA9IGFuZ2xlUG9pbnQueCAtIGNlbnRyZVBvaW50Lng7XHJcblx0XHR2YXIgZGlzdGFuY2VGcm9tWUNlbnRlciA9IGFuZ2xlUG9pbnQueSAtIGNlbnRyZVBvaW50Lnk7XHJcblx0XHR2YXIgcmFkaWFsRGlzdGFuY2VGcm9tQ2VudGVyID0gTWF0aC5zcXJ0KGRpc3RhbmNlRnJvbVhDZW50ZXIgKiBkaXN0YW5jZUZyb21YQ2VudGVyICsgZGlzdGFuY2VGcm9tWUNlbnRlciAqIGRpc3RhbmNlRnJvbVlDZW50ZXIpO1xyXG5cclxuXHRcdHZhciBhbmdsZSA9IE1hdGguYXRhbjIoZGlzdGFuY2VGcm9tWUNlbnRlciwgZGlzdGFuY2VGcm9tWENlbnRlcik7XHJcblxyXG5cdFx0aWYgKGFuZ2xlIDwgKC0wLjUgKiBNYXRoLlBJKSkge1xyXG5cdFx0XHRhbmdsZSArPSAyLjAgKiBNYXRoLlBJOyAvLyBtYWtlIHN1cmUgdGhlIHJldHVybmVkIGFuZ2xlIGlzIGluIHRoZSByYW5nZSBvZiAoLVBJLzIsIDNQSS8yXVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGFuZ2xlOiBhbmdsZSxcclxuXHRcdFx0ZGlzdGFuY2U6IHJhZGlhbERpc3RhbmNlRnJvbUNlbnRlclxyXG5cdFx0fTtcclxuXHR9O1xyXG5cdGhlbHBlcnMuZGlzdGFuY2VCZXR3ZWVuUG9pbnRzID0gZnVuY3Rpb24ocHQxLCBwdDIpIHtcclxuXHRcdHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocHQyLnggLSBwdDEueCwgMikgKyBNYXRoLnBvdyhwdDIueSAtIHB0MS55LCAyKSk7XHJcblx0fTtcclxuXHRoZWxwZXJzLmFsaWFzUGl4ZWwgPSBmdW5jdGlvbihwaXhlbFdpZHRoKSB7XHJcblx0XHRyZXR1cm4gKHBpeGVsV2lkdGggJSAyID09PSAwKSA/IDAgOiAwLjU7XHJcblx0fTtcclxuXHRoZWxwZXJzLnNwbGluZUN1cnZlID0gZnVuY3Rpb24oZmlyc3RQb2ludCwgbWlkZGxlUG9pbnQsIGFmdGVyUG9pbnQsIHQpIHtcclxuXHRcdC8vIFByb3BzIHRvIFJvYiBTcGVuY2VyIGF0IHNjYWxlZCBpbm5vdmF0aW9uIGZvciBoaXMgcG9zdCBvbiBzcGxpbmluZyBiZXR3ZWVuIHBvaW50c1xyXG5cdFx0Ly8gaHR0cDovL3NjYWxlZGlubm92YXRpb24uY29tL2FuYWx5dGljcy9zcGxpbmVzL2Fib3V0U3BsaW5lcy5odG1sXHJcblxyXG5cdFx0Ly8gVGhpcyBmdW5jdGlvbiBtdXN0IGFsc28gcmVzcGVjdCBcInNraXBwZWRcIiBwb2ludHNcclxuXHJcblx0XHR2YXIgcHJldmlvdXMgPSBmaXJzdFBvaW50LnNraXAgPyBtaWRkbGVQb2ludCA6IGZpcnN0UG9pbnQ7XHJcblx0XHR2YXIgY3VycmVudCA9IG1pZGRsZVBvaW50O1xyXG5cdFx0dmFyIG5leHQgPSBhZnRlclBvaW50LnNraXAgPyBtaWRkbGVQb2ludCA6IGFmdGVyUG9pbnQ7XHJcblxyXG5cdFx0dmFyIGQwMSA9IE1hdGguc3FydChNYXRoLnBvdyhjdXJyZW50LnggLSBwcmV2aW91cy54LCAyKSArIE1hdGgucG93KGN1cnJlbnQueSAtIHByZXZpb3VzLnksIDIpKTtcclxuXHRcdHZhciBkMTIgPSBNYXRoLnNxcnQoTWF0aC5wb3cobmV4dC54IC0gY3VycmVudC54LCAyKSArIE1hdGgucG93KG5leHQueSAtIGN1cnJlbnQueSwgMikpO1xyXG5cclxuXHRcdHZhciBzMDEgPSBkMDEgLyAoZDAxICsgZDEyKTtcclxuXHRcdHZhciBzMTIgPSBkMTIgLyAoZDAxICsgZDEyKTtcclxuXHJcblx0XHQvLyBJZiBhbGwgcG9pbnRzIGFyZSB0aGUgc2FtZSwgczAxICYgczAyIHdpbGwgYmUgaW5mXHJcblx0XHRzMDEgPSBpc05hTihzMDEpID8gMCA6IHMwMTtcclxuXHRcdHMxMiA9IGlzTmFOKHMxMikgPyAwIDogczEyO1xyXG5cclxuXHRcdHZhciBmYSA9IHQgKiBzMDE7IC8vIHNjYWxpbmcgZmFjdG9yIGZvciB0cmlhbmdsZSBUYVxyXG5cdFx0dmFyIGZiID0gdCAqIHMxMjtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRwcmV2aW91czoge1xyXG5cdFx0XHRcdHg6IGN1cnJlbnQueCAtIGZhICogKG5leHQueCAtIHByZXZpb3VzLngpLFxyXG5cdFx0XHRcdHk6IGN1cnJlbnQueSAtIGZhICogKG5leHQueSAtIHByZXZpb3VzLnkpXHJcblx0XHRcdH0sXHJcblx0XHRcdG5leHQ6IHtcclxuXHRcdFx0XHR4OiBjdXJyZW50LnggKyBmYiAqIChuZXh0LnggLSBwcmV2aW91cy54KSxcclxuXHRcdFx0XHR5OiBjdXJyZW50LnkgKyBmYiAqIChuZXh0LnkgLSBwcmV2aW91cy55KVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH07XHJcblx0aGVscGVycy5FUFNJTE9OID0gTnVtYmVyLkVQU0lMT04gfHwgMWUtMTQ7XHJcblx0aGVscGVycy5zcGxpbmVDdXJ2ZU1vbm90b25lID0gZnVuY3Rpb24ocG9pbnRzKSB7XHJcblx0XHQvLyBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgQsOpemllciBjb250cm9sIHBvaW50cyBpbiBhIHNpbWlsYXIgd2F5IHRoYW4gfHNwbGluZUN1cnZlfCxcclxuXHRcdC8vIGJ1dCBwcmVzZXJ2ZXMgbW9ub3RvbmljaXR5IG9mIHRoZSBwcm92aWRlZCBkYXRhIGFuZCBlbnN1cmVzIG5vIGxvY2FsIGV4dHJlbXVtcyBhcmUgYWRkZWRcclxuXHRcdC8vIGJldHdlZW4gdGhlIGRhdGFzZXQgZGlzY3JldGUgcG9pbnRzIGR1ZSB0byB0aGUgaW50ZXJwb2xhdGlvbi5cclxuXHRcdC8vIFNlZSA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01vbm90b25lX2N1YmljX2ludGVycG9sYXRpb25cclxuXHJcblx0XHR2YXIgcG9pbnRzV2l0aFRhbmdlbnRzID0gKHBvaW50cyB8fCBbXSkubWFwKGZ1bmN0aW9uKHBvaW50KSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0bW9kZWw6IHBvaW50Ll9tb2RlbCxcclxuXHRcdFx0XHRkZWx0YUs6IDAsXHJcblx0XHRcdFx0bUs6IDBcclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIENhbGN1bGF0ZSBzbG9wZXMgKGRlbHRhSykgYW5kIGluaXRpYWxpemUgdGFuZ2VudHMgKG1LKVxyXG5cdFx0dmFyIHBvaW50c0xlbiA9IHBvaW50c1dpdGhUYW5nZW50cy5sZW5ndGg7XHJcblx0XHR2YXIgaSwgcG9pbnRCZWZvcmUsIHBvaW50Q3VycmVudCwgcG9pbnRBZnRlcjtcclxuXHRcdGZvciAoaSA9IDA7IGkgPCBwb2ludHNMZW47ICsraSkge1xyXG5cdFx0XHRwb2ludEN1cnJlbnQgPSBwb2ludHNXaXRoVGFuZ2VudHNbaV07XHJcblx0XHRcdGlmIChwb2ludEN1cnJlbnQubW9kZWwuc2tpcCkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRwb2ludEJlZm9yZSA9IGkgPiAwID8gcG9pbnRzV2l0aFRhbmdlbnRzW2kgLSAxXSA6IG51bGw7XHJcblx0XHRcdHBvaW50QWZ0ZXIgPSBpIDwgcG9pbnRzTGVuIC0gMSA/IHBvaW50c1dpdGhUYW5nZW50c1tpICsgMV0gOiBudWxsO1xyXG5cdFx0XHRpZiAocG9pbnRBZnRlciAmJiAhcG9pbnRBZnRlci5tb2RlbC5za2lwKSB7XHJcblx0XHRcdFx0dmFyIHNsb3BlRGVsdGFYID0gKHBvaW50QWZ0ZXIubW9kZWwueCAtIHBvaW50Q3VycmVudC5tb2RlbC54KTtcclxuXHJcblx0XHRcdFx0Ly8gSW4gdGhlIGNhc2Ugb2YgdHdvIHBvaW50cyB0aGF0IGFwcGVhciBhdCB0aGUgc2FtZSB4IHBpeGVsLCBzbG9wZURlbHRhWCBpcyAwXHJcblx0XHRcdFx0cG9pbnRDdXJyZW50LmRlbHRhSyA9IHNsb3BlRGVsdGFYICE9PSAwID8gKHBvaW50QWZ0ZXIubW9kZWwueSAtIHBvaW50Q3VycmVudC5tb2RlbC55KSAvIHNsb3BlRGVsdGFYIDogMDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCFwb2ludEJlZm9yZSB8fCBwb2ludEJlZm9yZS5tb2RlbC5za2lwKSB7XHJcblx0XHRcdFx0cG9pbnRDdXJyZW50Lm1LID0gcG9pbnRDdXJyZW50LmRlbHRhSztcclxuXHRcdFx0fSBlbHNlIGlmICghcG9pbnRBZnRlciB8fCBwb2ludEFmdGVyLm1vZGVsLnNraXApIHtcclxuXHRcdFx0XHRwb2ludEN1cnJlbnQubUsgPSBwb2ludEJlZm9yZS5kZWx0YUs7XHJcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5zaWduKHBvaW50QmVmb3JlLmRlbHRhSykgIT09IHRoaXMuc2lnbihwb2ludEN1cnJlbnQuZGVsdGFLKSkge1xyXG5cdFx0XHRcdHBvaW50Q3VycmVudC5tSyA9IDA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cG9pbnRDdXJyZW50Lm1LID0gKHBvaW50QmVmb3JlLmRlbHRhSyArIHBvaW50Q3VycmVudC5kZWx0YUspIC8gMjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFkanVzdCB0YW5nZW50cyB0byBlbnN1cmUgbW9ub3RvbmljIHByb3BlcnRpZXNcclxuXHRcdHZhciBhbHBoYUssIGJldGFLLCB0YXVLLCBzcXVhcmVkTWFnbml0dWRlO1xyXG5cdFx0Zm9yIChpID0gMDsgaSA8IHBvaW50c0xlbiAtIDE7ICsraSkge1xyXG5cdFx0XHRwb2ludEN1cnJlbnQgPSBwb2ludHNXaXRoVGFuZ2VudHNbaV07XHJcblx0XHRcdHBvaW50QWZ0ZXIgPSBwb2ludHNXaXRoVGFuZ2VudHNbaSArIDFdO1xyXG5cdFx0XHRpZiAocG9pbnRDdXJyZW50Lm1vZGVsLnNraXAgfHwgcG9pbnRBZnRlci5tb2RlbC5za2lwKSB7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChoZWxwZXJzLmFsbW9zdEVxdWFscyhwb2ludEN1cnJlbnQuZGVsdGFLLCAwLCB0aGlzLkVQU0lMT04pKSB7XHJcblx0XHRcdFx0cG9pbnRDdXJyZW50Lm1LID0gcG9pbnRBZnRlci5tSyA9IDA7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGFscGhhSyA9IHBvaW50Q3VycmVudC5tSyAvIHBvaW50Q3VycmVudC5kZWx0YUs7XHJcblx0XHRcdGJldGFLID0gcG9pbnRBZnRlci5tSyAvIHBvaW50Q3VycmVudC5kZWx0YUs7XHJcblx0XHRcdHNxdWFyZWRNYWduaXR1ZGUgPSBNYXRoLnBvdyhhbHBoYUssIDIpICsgTWF0aC5wb3coYmV0YUssIDIpO1xyXG5cdFx0XHRpZiAoc3F1YXJlZE1hZ25pdHVkZSA8PSA5KSB7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRhdUsgPSAzIC8gTWF0aC5zcXJ0KHNxdWFyZWRNYWduaXR1ZGUpO1xyXG5cdFx0XHRwb2ludEN1cnJlbnQubUsgPSBhbHBoYUsgKiB0YXVLICogcG9pbnRDdXJyZW50LmRlbHRhSztcclxuXHRcdFx0cG9pbnRBZnRlci5tSyA9IGJldGFLICogdGF1SyAqIHBvaW50Q3VycmVudC5kZWx0YUs7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ29tcHV0ZSBjb250cm9sIHBvaW50c1xyXG5cdFx0dmFyIGRlbHRhWDtcclxuXHRcdGZvciAoaSA9IDA7IGkgPCBwb2ludHNMZW47ICsraSkge1xyXG5cdFx0XHRwb2ludEN1cnJlbnQgPSBwb2ludHNXaXRoVGFuZ2VudHNbaV07XHJcblx0XHRcdGlmIChwb2ludEN1cnJlbnQubW9kZWwuc2tpcCkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRwb2ludEJlZm9yZSA9IGkgPiAwID8gcG9pbnRzV2l0aFRhbmdlbnRzW2kgLSAxXSA6IG51bGw7XHJcblx0XHRcdHBvaW50QWZ0ZXIgPSBpIDwgcG9pbnRzTGVuIC0gMSA/IHBvaW50c1dpdGhUYW5nZW50c1tpICsgMV0gOiBudWxsO1xyXG5cdFx0XHRpZiAocG9pbnRCZWZvcmUgJiYgIXBvaW50QmVmb3JlLm1vZGVsLnNraXApIHtcclxuXHRcdFx0XHRkZWx0YVggPSAocG9pbnRDdXJyZW50Lm1vZGVsLnggLSBwb2ludEJlZm9yZS5tb2RlbC54KSAvIDM7XHJcblx0XHRcdFx0cG9pbnRDdXJyZW50Lm1vZGVsLmNvbnRyb2xQb2ludFByZXZpb3VzWCA9IHBvaW50Q3VycmVudC5tb2RlbC54IC0gZGVsdGFYO1xyXG5cdFx0XHRcdHBvaW50Q3VycmVudC5tb2RlbC5jb250cm9sUG9pbnRQcmV2aW91c1kgPSBwb2ludEN1cnJlbnQubW9kZWwueSAtIGRlbHRhWCAqIHBvaW50Q3VycmVudC5tSztcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocG9pbnRBZnRlciAmJiAhcG9pbnRBZnRlci5tb2RlbC5za2lwKSB7XHJcblx0XHRcdFx0ZGVsdGFYID0gKHBvaW50QWZ0ZXIubW9kZWwueCAtIHBvaW50Q3VycmVudC5tb2RlbC54KSAvIDM7XHJcblx0XHRcdFx0cG9pbnRDdXJyZW50Lm1vZGVsLmNvbnRyb2xQb2ludE5leHRYID0gcG9pbnRDdXJyZW50Lm1vZGVsLnggKyBkZWx0YVg7XHJcblx0XHRcdFx0cG9pbnRDdXJyZW50Lm1vZGVsLmNvbnRyb2xQb2ludE5leHRZID0gcG9pbnRDdXJyZW50Lm1vZGVsLnkgKyBkZWx0YVggKiBwb2ludEN1cnJlbnQubUs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cdGhlbHBlcnMubmV4dEl0ZW0gPSBmdW5jdGlvbihjb2xsZWN0aW9uLCBpbmRleCwgbG9vcCkge1xyXG5cdFx0aWYgKGxvb3ApIHtcclxuXHRcdFx0cmV0dXJuIGluZGV4ID49IGNvbGxlY3Rpb24ubGVuZ3RoIC0gMSA/IGNvbGxlY3Rpb25bMF0gOiBjb2xsZWN0aW9uW2luZGV4ICsgMV07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gaW5kZXggPj0gY29sbGVjdGlvbi5sZW5ndGggLSAxID8gY29sbGVjdGlvbltjb2xsZWN0aW9uLmxlbmd0aCAtIDFdIDogY29sbGVjdGlvbltpbmRleCArIDFdO1xyXG5cdH07XHJcblx0aGVscGVycy5wcmV2aW91c0l0ZW0gPSBmdW5jdGlvbihjb2xsZWN0aW9uLCBpbmRleCwgbG9vcCkge1xyXG5cdFx0aWYgKGxvb3ApIHtcclxuXHRcdFx0cmV0dXJuIGluZGV4IDw9IDAgPyBjb2xsZWN0aW9uW2NvbGxlY3Rpb24ubGVuZ3RoIC0gMV0gOiBjb2xsZWN0aW9uW2luZGV4IC0gMV07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gaW5kZXggPD0gMCA/IGNvbGxlY3Rpb25bMF0gOiBjb2xsZWN0aW9uW2luZGV4IC0gMV07XHJcblx0fTtcclxuXHQvLyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmljZSBudW1iZXIgYWxnb3JpdGhtIHVzZWQgaW4gZGV0ZXJtaW5pbmcgd2hlcmUgYXhpcyBsYWJlbHMgd2lsbCBnb1xyXG5cdGhlbHBlcnMubmljZU51bSA9IGZ1bmN0aW9uKHJhbmdlLCByb3VuZCkge1xyXG5cdFx0dmFyIGV4cG9uZW50ID0gTWF0aC5mbG9vcihoZWxwZXJzLmxvZzEwKHJhbmdlKSk7XHJcblx0XHR2YXIgZnJhY3Rpb24gPSByYW5nZSAvIE1hdGgucG93KDEwLCBleHBvbmVudCk7XHJcblx0XHR2YXIgbmljZUZyYWN0aW9uO1xyXG5cclxuXHRcdGlmIChyb3VuZCkge1xyXG5cdFx0XHRpZiAoZnJhY3Rpb24gPCAxLjUpIHtcclxuXHRcdFx0XHRuaWNlRnJhY3Rpb24gPSAxO1xyXG5cdFx0XHR9IGVsc2UgaWYgKGZyYWN0aW9uIDwgMykge1xyXG5cdFx0XHRcdG5pY2VGcmFjdGlvbiA9IDI7XHJcblx0XHRcdH0gZWxzZSBpZiAoZnJhY3Rpb24gPCA3KSB7XHJcblx0XHRcdFx0bmljZUZyYWN0aW9uID0gNTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRuaWNlRnJhY3Rpb24gPSAxMDtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChmcmFjdGlvbiA8PSAxLjApIHtcclxuXHRcdFx0bmljZUZyYWN0aW9uID0gMTtcclxuXHRcdH0gZWxzZSBpZiAoZnJhY3Rpb24gPD0gMikge1xyXG5cdFx0XHRuaWNlRnJhY3Rpb24gPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChmcmFjdGlvbiA8PSA1KSB7XHJcblx0XHRcdG5pY2VGcmFjdGlvbiA9IDU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRuaWNlRnJhY3Rpb24gPSAxMDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbmljZUZyYWN0aW9uICogTWF0aC5wb3coMTAsIGV4cG9uZW50KTtcclxuXHR9O1xyXG5cdC8vIFJlcXVlc3QgYW5pbWF0aW9uIHBvbHlmaWxsIC0gaHR0cDovL3d3dy5wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXHJcblx0aGVscGVycy5yZXF1ZXN0QW5pbUZyYW1lID0gKGZ1bmN0aW9uKCkge1xyXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbihjYWxsYmFjaykge1xyXG5cdFx0XHRcdGNhbGxiYWNrKCk7XHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxyXG5cdFx0XHR3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XHJcblx0XHRcdHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcclxuXHRcdFx0d2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcclxuXHRcdFx0d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XHJcblx0XHRcdGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcblx0XHRcdFx0cmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApO1xyXG5cdFx0XHR9O1xyXG5cdH0oKSk7XHJcblx0Ly8gLS0gRE9NIG1ldGhvZHNcclxuXHRoZWxwZXJzLmdldFJlbGF0aXZlUG9zaXRpb24gPSBmdW5jdGlvbihldnQsIGNoYXJ0KSB7XHJcblx0XHR2YXIgbW91c2VYLCBtb3VzZVk7XHJcblx0XHR2YXIgZSA9IGV2dC5vcmlnaW5hbEV2ZW50IHx8IGV2dDtcclxuXHRcdHZhciBjYW52YXMgPSBldnQudGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50O1xyXG5cdFx0dmFyIGJvdW5kaW5nUmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcblx0XHR2YXIgdG91Y2hlcyA9IGUudG91Y2hlcztcclxuXHRcdGlmICh0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRtb3VzZVggPSB0b3VjaGVzWzBdLmNsaWVudFg7XHJcblx0XHRcdG1vdXNlWSA9IHRvdWNoZXNbMF0uY2xpZW50WTtcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtb3VzZVggPSBlLmNsaWVudFg7XHJcblx0XHRcdG1vdXNlWSA9IGUuY2xpZW50WTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTY2FsZSBtb3VzZSBjb29yZGluYXRlcyBpbnRvIGNhbnZhcyBjb29yZGluYXRlc1xyXG5cdFx0Ly8gYnkgZm9sbG93aW5nIHRoZSBwYXR0ZXJuIGxhaWQgb3V0IGJ5ICdqZXJyeWonIGluIHRoZSBjb21tZW50cyBvZlxyXG5cdFx0Ly8gaHR0cDovL3d3dy5odG1sNWNhbnZhc3R1dG9yaWFscy5jb20vYWR2YW5jZWQvaHRtbDUtY2FudmFzLW1vdXNlLWNvb3JkaW5hdGVzL1xyXG5cdFx0dmFyIHBhZGRpbmdMZWZ0ID0gcGFyc2VGbG9hdChoZWxwZXJzLmdldFN0eWxlKGNhbnZhcywgJ3BhZGRpbmctbGVmdCcpKTtcclxuXHRcdHZhciBwYWRkaW5nVG9wID0gcGFyc2VGbG9hdChoZWxwZXJzLmdldFN0eWxlKGNhbnZhcywgJ3BhZGRpbmctdG9wJykpO1xyXG5cdFx0dmFyIHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoaGVscGVycy5nZXRTdHlsZShjYW52YXMsICdwYWRkaW5nLXJpZ2h0JykpO1xyXG5cdFx0dmFyIHBhZGRpbmdCb3R0b20gPSBwYXJzZUZsb2F0KGhlbHBlcnMuZ2V0U3R5bGUoY2FudmFzLCAncGFkZGluZy1ib3R0b20nKSk7XHJcblx0XHR2YXIgd2lkdGggPSBib3VuZGluZ1JlY3QucmlnaHQgLSBib3VuZGluZ1JlY3QubGVmdCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0O1xyXG5cdFx0dmFyIGhlaWdodCA9IGJvdW5kaW5nUmVjdC5ib3R0b20gLSBib3VuZGluZ1JlY3QudG9wIC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207XHJcblxyXG5cdFx0Ly8gV2UgZGl2aWRlIGJ5IHRoZSBjdXJyZW50IGRldmljZSBwaXhlbCByYXRpbywgYmVjYXVzZSB0aGUgY2FudmFzIGlzIHNjYWxlZCB1cCBieSB0aGF0IGFtb3VudCBpbiBlYWNoIGRpcmVjdGlvbi4gSG93ZXZlclxyXG5cdFx0Ly8gdGhlIGJhY2tlbmQgbW9kZWwgaXMgaW4gdW5zY2FsZWQgY29vcmRpbmF0ZXMuIFNpbmNlIHdlIGFyZSBnb2luZyB0byBkZWFsIHdpdGggb3VyIG1vZGVsIGNvb3JkaW5hdGVzLCB3ZSBnbyBiYWNrIGhlcmVcclxuXHRcdG1vdXNlWCA9IE1hdGgucm91bmQoKG1vdXNlWCAtIGJvdW5kaW5nUmVjdC5sZWZ0IC0gcGFkZGluZ0xlZnQpIC8gKHdpZHRoKSAqIGNhbnZhcy53aWR0aCAvIGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvKTtcclxuXHRcdG1vdXNlWSA9IE1hdGgucm91bmQoKG1vdXNlWSAtIGJvdW5kaW5nUmVjdC50b3AgLSBwYWRkaW5nVG9wKSAvIChoZWlnaHQpICogY2FudmFzLmhlaWdodCAvIGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvKTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR4OiBtb3VzZVgsXHJcblx0XHRcdHk6IG1vdXNlWVxyXG5cdFx0fTtcclxuXHJcblx0fTtcclxuXHJcblx0Ly8gUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBtYXgtd2lkdGgvbWF4LWhlaWdodCB2YWx1ZXMgdGhhdCBtYXkgYmUgcGVyY2VudGFnZXMgaW50byBhIG51bWJlclxyXG5cdGZ1bmN0aW9uIHBhcnNlTWF4U3R5bGUoc3R5bGVWYWx1ZSwgbm9kZSwgcGFyZW50UHJvcGVydHkpIHtcclxuXHRcdHZhciB2YWx1ZUluUGl4ZWxzO1xyXG5cdFx0aWYgKHR5cGVvZiBzdHlsZVZhbHVlID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHR2YWx1ZUluUGl4ZWxzID0gcGFyc2VJbnQoc3R5bGVWYWx1ZSwgMTApO1xyXG5cclxuXHRcdFx0aWYgKHN0eWxlVmFsdWUuaW5kZXhPZignJScpICE9PSAtMSkge1xyXG5cdFx0XHRcdC8vIHBlcmNlbnRhZ2UgKiBzaXplIGluIGRpbWVuc2lvblxyXG5cdFx0XHRcdHZhbHVlSW5QaXhlbHMgPSB2YWx1ZUluUGl4ZWxzIC8gMTAwICogbm9kZS5wYXJlbnROb2RlW3BhcmVudFByb3BlcnR5XTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dmFsdWVJblBpeGVscyA9IHN0eWxlVmFsdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHZhbHVlSW5QaXhlbHM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIGlmIHRoZSBnaXZlbiB2YWx1ZSBjb250YWlucyBhbiBlZmZlY3RpdmUgY29uc3RyYWludC5cclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGlzQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICdub25lJztcclxuXHR9XHJcblxyXG5cdC8vIFByaXZhdGUgaGVscGVyIHRvIGdldCBhIGNvbnN0cmFpbnQgZGltZW5zaW9uXHJcblx0Ly8gQHBhcmFtIGRvbU5vZGUgOiB0aGUgbm9kZSB0byBjaGVjayB0aGUgY29uc3RyYWludCBvblxyXG5cdC8vIEBwYXJhbSBtYXhTdHlsZSA6IHRoZSBzdHlsZSB0aGF0IGRlZmluZXMgdGhlIG1heGltdW0gZm9yIHRoZSBkaXJlY3Rpb24gd2UgYXJlIHVzaW5nIChtYXhXaWR0aCAvIG1heEhlaWdodClcclxuXHQvLyBAcGFyYW0gcGVyY2VudGFnZVByb3BlcnR5IDogcHJvcGVydHkgb2YgcGFyZW50IHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHdpZHRoIGFzIGEgcGVyY2VudGFnZVxyXG5cdC8vIEBzZWUgaHR0cDovL3d3dy5uYXRoYW5hZWxqb25lcy5jb20vYmxvZy8yMDEzL3JlYWRpbmctbWF4LXdpZHRoLWNyb3NzLWJyb3dzZXJcclxuXHRmdW5jdGlvbiBnZXRDb25zdHJhaW50RGltZW5zaW9uKGRvbU5vZGUsIG1heFN0eWxlLCBwZXJjZW50YWdlUHJvcGVydHkpIHtcclxuXHRcdHZhciB2aWV3ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXc7XHJcblx0XHR2YXIgcGFyZW50Tm9kZSA9IGhlbHBlcnMuX2dldFBhcmVudE5vZGUoZG9tTm9kZSk7XHJcblx0XHR2YXIgY29uc3RyYWluZWROb2RlID0gdmlldy5nZXRDb21wdXRlZFN0eWxlKGRvbU5vZGUpW21heFN0eWxlXTtcclxuXHRcdHZhciBjb25zdHJhaW5lZENvbnRhaW5lciA9IHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnROb2RlKVttYXhTdHlsZV07XHJcblx0XHR2YXIgaGFzQ05vZGUgPSBpc0NvbnN0cmFpbmVkVmFsdWUoY29uc3RyYWluZWROb2RlKTtcclxuXHRcdHZhciBoYXNDQ29udGFpbmVyID0gaXNDb25zdHJhaW5lZFZhbHVlKGNvbnN0cmFpbmVkQ29udGFpbmVyKTtcclxuXHRcdHZhciBpbmZpbml0eSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcclxuXHJcblx0XHRpZiAoaGFzQ05vZGUgfHwgaGFzQ0NvbnRhaW5lcikge1xyXG5cdFx0XHRyZXR1cm4gTWF0aC5taW4oXHJcblx0XHRcdFx0aGFzQ05vZGUgPyBwYXJzZU1heFN0eWxlKGNvbnN0cmFpbmVkTm9kZSwgZG9tTm9kZSwgcGVyY2VudGFnZVByb3BlcnR5KSA6IGluZmluaXR5LFxyXG5cdFx0XHRcdGhhc0NDb250YWluZXIgPyBwYXJzZU1heFN0eWxlKGNvbnN0cmFpbmVkQ29udGFpbmVyLCBwYXJlbnROb2RlLCBwZXJjZW50YWdlUHJvcGVydHkpIDogaW5maW5pdHkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAnbm9uZSc7XHJcblx0fVxyXG5cdC8vIHJldHVybnMgTnVtYmVyIG9yIHVuZGVmaW5lZCBpZiBubyBjb25zdHJhaW50XHJcblx0aGVscGVycy5nZXRDb25zdHJhaW50V2lkdGggPSBmdW5jdGlvbihkb21Ob2RlKSB7XHJcblx0XHRyZXR1cm4gZ2V0Q29uc3RyYWludERpbWVuc2lvbihkb21Ob2RlLCAnbWF4LXdpZHRoJywgJ2NsaWVudFdpZHRoJyk7XHJcblx0fTtcclxuXHQvLyByZXR1cm5zIE51bWJlciBvciB1bmRlZmluZWQgaWYgbm8gY29uc3RyYWludFxyXG5cdGhlbHBlcnMuZ2V0Q29uc3RyYWludEhlaWdodCA9IGZ1bmN0aW9uKGRvbU5vZGUpIHtcclxuXHRcdHJldHVybiBnZXRDb25zdHJhaW50RGltZW5zaW9uKGRvbU5vZGUsICdtYXgtaGVpZ2h0JywgJ2NsaWVudEhlaWdodCcpO1xyXG5cdH07XHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuIFx0ICovXHJcblx0aGVscGVycy5fY2FsY3VsYXRlUGFkZGluZyA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgcGFkZGluZywgcGFyZW50RGltZW5zaW9uKSB7XHJcblx0XHRwYWRkaW5nID0gaGVscGVycy5nZXRTdHlsZShjb250YWluZXIsIHBhZGRpbmcpO1xyXG5cclxuXHRcdHJldHVybiBwYWRkaW5nLmluZGV4T2YoJyUnKSA+IC0xID8gcGFyZW50RGltZW5zaW9uIC8gcGFyc2VJbnQocGFkZGluZywgMTApIDogcGFyc2VJbnQocGFkZGluZywgMTApO1xyXG5cdH07XHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRoZWxwZXJzLl9nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24oZG9tTm9kZSkge1xyXG5cdFx0dmFyIHBhcmVudCA9IGRvbU5vZGUucGFyZW50Tm9kZTtcclxuXHRcdGlmIChwYXJlbnQgJiYgcGFyZW50Lmhvc3QpIHtcclxuXHRcdFx0cGFyZW50ID0gcGFyZW50Lmhvc3Q7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcGFyZW50O1xyXG5cdH07XHJcblx0aGVscGVycy5nZXRNYXhpbXVtV2lkdGggPSBmdW5jdGlvbihkb21Ob2RlKSB7XHJcblx0XHR2YXIgY29udGFpbmVyID0gaGVscGVycy5fZ2V0UGFyZW50Tm9kZShkb21Ob2RlKTtcclxuXHRcdGlmICghY29udGFpbmVyKSB7XHJcblx0XHRcdHJldHVybiBkb21Ob2RlLmNsaWVudFdpZHRoO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBjbGllbnRXaWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDtcclxuXHRcdHZhciBwYWRkaW5nTGVmdCA9IGhlbHBlcnMuX2NhbGN1bGF0ZVBhZGRpbmcoY29udGFpbmVyLCAncGFkZGluZy1sZWZ0JywgY2xpZW50V2lkdGgpO1xyXG5cdFx0dmFyIHBhZGRpbmdSaWdodCA9IGhlbHBlcnMuX2NhbGN1bGF0ZVBhZGRpbmcoY29udGFpbmVyLCAncGFkZGluZy1yaWdodCcsIGNsaWVudFdpZHRoKTtcclxuXHJcblx0XHR2YXIgdyA9IGNsaWVudFdpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQ7XHJcblx0XHR2YXIgY3cgPSBoZWxwZXJzLmdldENvbnN0cmFpbnRXaWR0aChkb21Ob2RlKTtcclxuXHRcdHJldHVybiBpc05hTihjdykgPyB3IDogTWF0aC5taW4odywgY3cpO1xyXG5cdH07XHJcblx0aGVscGVycy5nZXRNYXhpbXVtSGVpZ2h0ID0gZnVuY3Rpb24oZG9tTm9kZSkge1xyXG5cdFx0dmFyIGNvbnRhaW5lciA9IGhlbHBlcnMuX2dldFBhcmVudE5vZGUoZG9tTm9kZSk7XHJcblx0XHRpZiAoIWNvbnRhaW5lcikge1xyXG5cdFx0XHRyZXR1cm4gZG9tTm9kZS5jbGllbnRIZWlnaHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGNsaWVudEhlaWdodCA9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XHJcblx0XHR2YXIgcGFkZGluZ1RvcCA9IGhlbHBlcnMuX2NhbGN1bGF0ZVBhZGRpbmcoY29udGFpbmVyLCAncGFkZGluZy10b3AnLCBjbGllbnRIZWlnaHQpO1xyXG5cdFx0dmFyIHBhZGRpbmdCb3R0b20gPSBoZWxwZXJzLl9jYWxjdWxhdGVQYWRkaW5nKGNvbnRhaW5lciwgJ3BhZGRpbmctYm90dG9tJywgY2xpZW50SGVpZ2h0KTtcclxuXHJcblx0XHR2YXIgaCA9IGNsaWVudEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xyXG5cdFx0dmFyIGNoID0gaGVscGVycy5nZXRDb25zdHJhaW50SGVpZ2h0KGRvbU5vZGUpO1xyXG5cdFx0cmV0dXJuIGlzTmFOKGNoKSA/IGggOiBNYXRoLm1pbihoLCBjaCk7XHJcblx0fTtcclxuXHRoZWxwZXJzLmdldFN0eWxlID0gZnVuY3Rpb24oZWwsIHByb3BlcnR5KSB7XHJcblx0XHRyZXR1cm4gZWwuY3VycmVudFN0eWxlID9cclxuXHRcdFx0ZWwuY3VycmVudFN0eWxlW3Byb3BlcnR5XSA6XHJcblx0XHRcdGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xyXG5cdH07XHJcblx0aGVscGVycy5yZXRpbmFTY2FsZSA9IGZ1bmN0aW9uKGNoYXJ0LCBmb3JjZVJhdGlvKSB7XHJcblx0XHR2YXIgcGl4ZWxSYXRpbyA9IGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvID0gZm9yY2VSYXRpbyB8fCAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8pIHx8IDE7XHJcblx0XHRpZiAocGl4ZWxSYXRpbyA9PT0gMSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcclxuXHRcdHZhciBoZWlnaHQgPSBjaGFydC5oZWlnaHQ7XHJcblx0XHR2YXIgd2lkdGggPSBjaGFydC53aWR0aDtcclxuXHJcblx0XHRjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogcGl4ZWxSYXRpbztcclxuXHRcdGNhbnZhcy53aWR0aCA9IHdpZHRoICogcGl4ZWxSYXRpbztcclxuXHRcdGNoYXJ0LmN0eC5zY2FsZShwaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcclxuXHJcblx0XHQvLyBJZiBubyBzdHlsZSBoYXMgYmVlbiBzZXQgb24gdGhlIGNhbnZhcywgdGhlIHJlbmRlciBzaXplIGlzIHVzZWQgYXMgZGlzcGxheSBzaXplLFxyXG5cdFx0Ly8gbWFraW5nIHRoZSBjaGFydCB2aXN1YWxseSBiaWdnZXIsIHNvIGxldCdzIGVuZm9yY2UgaXQgdG8gdGhlIFwiY29ycmVjdFwiIHZhbHVlcy5cclxuXHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvMzU3NVxyXG5cdFx0aWYgKCFjYW52YXMuc3R5bGUuaGVpZ2h0ICYmICFjYW52YXMuc3R5bGUud2lkdGgpIHtcclxuXHRcdFx0Y2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XHJcblx0XHRcdGNhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcclxuXHRcdH1cclxuXHR9O1xyXG5cdC8vIC0tIENhbnZhcyBtZXRob2RzXHJcblx0aGVscGVycy5mb250U3RyaW5nID0gZnVuY3Rpb24ocGl4ZWxTaXplLCBmb250U3R5bGUsIGZvbnRGYW1pbHkpIHtcclxuXHRcdHJldHVybiBmb250U3R5bGUgKyAnICcgKyBwaXhlbFNpemUgKyAncHggJyArIGZvbnRGYW1pbHk7XHJcblx0fTtcclxuXHRoZWxwZXJzLmxvbmdlc3RUZXh0ID0gZnVuY3Rpb24oY3R4LCBmb250LCBhcnJheU9mVGhpbmdzLCBjYWNoZSkge1xyXG5cdFx0Y2FjaGUgPSBjYWNoZSB8fCB7fTtcclxuXHRcdHZhciBkYXRhID0gY2FjaGUuZGF0YSA9IGNhY2hlLmRhdGEgfHwge307XHJcblx0XHR2YXIgZ2MgPSBjYWNoZS5nYXJiYWdlQ29sbGVjdCA9IGNhY2hlLmdhcmJhZ2VDb2xsZWN0IHx8IFtdO1xyXG5cclxuXHRcdGlmIChjYWNoZS5mb250ICE9PSBmb250KSB7XHJcblx0XHRcdGRhdGEgPSBjYWNoZS5kYXRhID0ge307XHJcblx0XHRcdGdjID0gY2FjaGUuZ2FyYmFnZUNvbGxlY3QgPSBbXTtcclxuXHRcdFx0Y2FjaGUuZm9udCA9IGZvbnQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Y3R4LmZvbnQgPSBmb250O1xyXG5cdFx0dmFyIGxvbmdlc3QgPSAwO1xyXG5cdFx0aGVscGVycy5lYWNoKGFycmF5T2ZUaGluZ3MsIGZ1bmN0aW9uKHRoaW5nKSB7XHJcblx0XHRcdC8vIFVuZGVmaW5lZCBzdHJpbmdzIGFuZCBhcnJheXMgc2hvdWxkIG5vdCBiZSBtZWFzdXJlZFxyXG5cdFx0XHRpZiAodGhpbmcgIT09IHVuZGVmaW5lZCAmJiB0aGluZyAhPT0gbnVsbCAmJiBoZWxwZXJzLmlzQXJyYXkodGhpbmcpICE9PSB0cnVlKSB7XHJcblx0XHRcdFx0bG9uZ2VzdCA9IGhlbHBlcnMubWVhc3VyZVRleHQoY3R4LCBkYXRhLCBnYywgbG9uZ2VzdCwgdGhpbmcpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKGhlbHBlcnMuaXNBcnJheSh0aGluZykpIHtcclxuXHRcdFx0XHQvLyBpZiBpdCBpcyBhbiBhcnJheSBsZXRzIG1lYXN1cmUgZWFjaCBlbGVtZW50XHJcblx0XHRcdFx0Ly8gdG8gZG8gbWF5YmUgc2ltcGxpZnkgdGhpcyBmdW5jdGlvbiBhIGJpdCBzbyB3ZSBjYW4gZG8gdGhpcyBtb3JlIHJlY3Vyc2l2ZWx5P1xyXG5cdFx0XHRcdGhlbHBlcnMuZWFjaCh0aGluZywgZnVuY3Rpb24obmVzdGVkVGhpbmcpIHtcclxuXHRcdFx0XHRcdC8vIFVuZGVmaW5lZCBzdHJpbmdzIGFuZCBhcnJheXMgc2hvdWxkIG5vdCBiZSBtZWFzdXJlZFxyXG5cdFx0XHRcdFx0aWYgKG5lc3RlZFRoaW5nICE9PSB1bmRlZmluZWQgJiYgbmVzdGVkVGhpbmcgIT09IG51bGwgJiYgIWhlbHBlcnMuaXNBcnJheShuZXN0ZWRUaGluZykpIHtcclxuXHRcdFx0XHRcdFx0bG9uZ2VzdCA9IGhlbHBlcnMubWVhc3VyZVRleHQoY3R4LCBkYXRhLCBnYywgbG9uZ2VzdCwgbmVzdGVkVGhpbmcpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR2YXIgZ2NMZW4gPSBnYy5sZW5ndGggLyAyO1xyXG5cdFx0aWYgKGdjTGVuID4gYXJyYXlPZlRoaW5ncy5sZW5ndGgpIHtcclxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBnY0xlbjsgaSsrKSB7XHJcblx0XHRcdFx0ZGVsZXRlIGRhdGFbZ2NbaV1dO1xyXG5cdFx0XHR9XHJcblx0XHRcdGdjLnNwbGljZSgwLCBnY0xlbik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbG9uZ2VzdDtcclxuXHR9O1xyXG5cdGhlbHBlcnMubWVhc3VyZVRleHQgPSBmdW5jdGlvbihjdHgsIGRhdGEsIGdjLCBsb25nZXN0LCBzdHJpbmcpIHtcclxuXHRcdHZhciB0ZXh0V2lkdGggPSBkYXRhW3N0cmluZ107XHJcblx0XHRpZiAoIXRleHRXaWR0aCkge1xyXG5cdFx0XHR0ZXh0V2lkdGggPSBkYXRhW3N0cmluZ10gPSBjdHgubWVhc3VyZVRleHQoc3RyaW5nKS53aWR0aDtcclxuXHRcdFx0Z2MucHVzaChzdHJpbmcpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRleHRXaWR0aCA+IGxvbmdlc3QpIHtcclxuXHRcdFx0bG9uZ2VzdCA9IHRleHRXaWR0aDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBsb25nZXN0O1xyXG5cdH07XHJcblx0aGVscGVycy5udW1iZXJPZkxhYmVsTGluZXMgPSBmdW5jdGlvbihhcnJheU9mVGhpbmdzKSB7XHJcblx0XHR2YXIgbnVtYmVyT2ZMaW5lcyA9IDE7XHJcblx0XHRoZWxwZXJzLmVhY2goYXJyYXlPZlRoaW5ncywgZnVuY3Rpb24odGhpbmcpIHtcclxuXHRcdFx0aWYgKGhlbHBlcnMuaXNBcnJheSh0aGluZykpIHtcclxuXHRcdFx0XHRpZiAodGhpbmcubGVuZ3RoID4gbnVtYmVyT2ZMaW5lcykge1xyXG5cdFx0XHRcdFx0bnVtYmVyT2ZMaW5lcyA9IHRoaW5nLmxlbmd0aDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIG51bWJlck9mTGluZXM7XHJcblx0fTtcclxuXHJcblx0aGVscGVycy5jb2xvciA9ICFjb2xvciA/XHJcblx0XHRmdW5jdGlvbih2YWx1ZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKCdDb2xvci5qcyBub3QgZm91bmQhJyk7XHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH0gOlxyXG5cdFx0ZnVuY3Rpb24odmFsdWUpIHtcclxuXHRcdFx0LyogZ2xvYmFsIENhbnZhc0dyYWRpZW50ICovXHJcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIENhbnZhc0dyYWRpZW50KSB7XHJcblx0XHRcdFx0dmFsdWUgPSBkZWZhdWx0cy5nbG9iYWwuZGVmYXVsdENvbG9yO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gY29sb3IodmFsdWUpO1xyXG5cdFx0fTtcclxuXHJcblx0aGVscGVycy5nZXRIb3ZlckNvbG9yID0gZnVuY3Rpb24oY29sb3JWYWx1ZSkge1xyXG5cdFx0LyogZ2xvYmFsIENhbnZhc1BhdHRlcm4gKi9cclxuXHRcdHJldHVybiAoY29sb3JWYWx1ZSBpbnN0YW5jZW9mIENhbnZhc1BhdHRlcm4pID9cclxuXHRcdFx0Y29sb3JWYWx1ZSA6XHJcblx0XHRcdGhlbHBlcnMuY29sb3IoY29sb3JWYWx1ZSkuc2F0dXJhdGUoMC41KS5kYXJrZW4oMC4xKS5yZ2JTdHJpbmcoKTtcclxuXHR9O1xyXG59O1xyXG5cclxufSx7XCIyNlwiOjI2LFwiM1wiOjMsXCIzNFwiOjM0LFwiNDZcIjo0Nn1dLDI5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHJlbGF0aXZlIHBvc2l0aW9uIGZvciBhbiBldmVudFxyXG4gKiBAcGFyYW0ge0V2ZW50fElFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgdG8gZ2V0IHRoZSBwb3NpdGlvbiBmb3JcclxuICogQHBhcmFtIHtDaGFydH0gY2hhcnQgLSBUaGUgY2hhcnRcclxuICogQHJldHVybnMge1BvaW50fSB0aGUgZXZlbnQgcG9zaXRpb25cclxuICovXHJcbmZ1bmN0aW9uIGdldFJlbGF0aXZlUG9zaXRpb24oZSwgY2hhcnQpIHtcclxuXHRpZiAoZS5uYXRpdmUpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHg6IGUueCxcclxuXHRcdFx0eTogZS55XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGhlbHBlcnMuZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdHJhdmVyc2UgYWxsIG9mIHRoZSB2aXNpYmxlIGVsZW1lbnRzIGluIHRoZSBjaGFydFxyXG4gKiBAcGFyYW0gY2hhcnQge2NoYXJ0fSB0aGUgY2hhcnRcclxuICogQHBhcmFtIGhhbmRsZXIge0Z1bmN0aW9ufSB0aGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSBmb3IgZWFjaCB2aXNpYmxlIGl0ZW1cclxuICovXHJcbmZ1bmN0aW9uIHBhcnNlVmlzaWJsZUl0ZW1zKGNoYXJ0LCBoYW5kbGVyKSB7XHJcblx0dmFyIGRhdGFzZXRzID0gY2hhcnQuZGF0YS5kYXRhc2V0cztcclxuXHR2YXIgbWV0YSwgaSwgaiwgaWxlbiwgamxlbjtcclxuXHJcblx0Zm9yIChpID0gMCwgaWxlbiA9IGRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0aWYgKCFjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGkpKSB7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcclxuXHRcdGZvciAoaiA9IDAsIGpsZW4gPSBtZXRhLmRhdGEubGVuZ3RoOyBqIDwgamxlbjsgKytqKSB7XHJcblx0XHRcdHZhciBlbGVtZW50ID0gbWV0YS5kYXRhW2pdO1xyXG5cdFx0XHRpZiAoIWVsZW1lbnQuX3ZpZXcuc2tpcCkge1xyXG5cdFx0XHRcdGhhbmRsZXIoZWxlbWVudCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBpdGVtcyB0aGF0IGludGVyc2VjdCB0aGUgZXZlbnQgcG9zaXRpb25cclxuICogQHBhcmFtIGl0ZW1zIHtDaGFydEVsZW1lbnRbXX0gZWxlbWVudHMgdG8gZmlsdGVyXHJcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UG9pbnR9IHRoZSBwb2ludCB0byBiZSBuZWFyZXN0IHRvXHJcbiAqIEByZXR1cm4ge0NoYXJ0RWxlbWVudFtdfSB0aGUgbmVhcmVzdCBpdGVtc1xyXG4gKi9cclxuZnVuY3Rpb24gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uKSB7XHJcblx0dmFyIGVsZW1lbnRzID0gW107XHJcblxyXG5cdHBhcnNlVmlzaWJsZUl0ZW1zKGNoYXJ0LCBmdW5jdGlvbihlbGVtZW50KSB7XHJcblx0XHRpZiAoZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpKSB7XHJcblx0XHRcdGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdHJldHVybiBlbGVtZW50cztcclxufVxyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGl0ZW1zIG5lYXJlc3QgdG8gdGhlIGV2ZW50IHBvc2l0aW9uIGNvbnNpZGVyaW5nIGFsbCB2aXNpYmxlIGl0ZW1zIGluIHRlaCBjaGFydFxyXG4gKiBAcGFyYW0gY2hhcnQge0NoYXJ0fSB0aGUgY2hhcnQgdG8gbG9vayBhdCBlbGVtZW50cyBmcm9tXHJcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UG9pbnR9IHRoZSBwb2ludCB0byBiZSBuZWFyZXN0IHRvXHJcbiAqIEBwYXJhbSBpbnRlcnNlY3Qge0Jvb2xlYW59IGlmIHRydWUsIG9ubHkgY29uc2lkZXIgaXRlbXMgdGhhdCBpbnRlcnNlY3QgdGhlIHBvc2l0aW9uXHJcbiAqIEBwYXJhbSBkaXN0YW5jZU1ldHJpYyB7RnVuY3Rpb259IGZ1bmN0aW9uIHRvIHByb3ZpZGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gcG9pbnRzXHJcbiAqIEByZXR1cm4ge0NoYXJ0RWxlbWVudFtdfSB0aGUgbmVhcmVzdCBpdGVtc1xyXG4gKi9cclxuZnVuY3Rpb24gZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgaW50ZXJzZWN0LCBkaXN0YW5jZU1ldHJpYykge1xyXG5cdHZhciBtaW5EaXN0YW5jZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcclxuXHR2YXIgbmVhcmVzdEl0ZW1zID0gW107XHJcblxyXG5cdHBhcnNlVmlzaWJsZUl0ZW1zKGNoYXJ0LCBmdW5jdGlvbihlbGVtZW50KSB7XHJcblx0XHRpZiAoaW50ZXJzZWN0ICYmICFlbGVtZW50LmluUmFuZ2UocG9zaXRpb24ueCwgcG9zaXRpb24ueSkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBjZW50ZXIgPSBlbGVtZW50LmdldENlbnRlclBvaW50KCk7XHJcblx0XHR2YXIgZGlzdGFuY2UgPSBkaXN0YW5jZU1ldHJpYyhwb3NpdGlvbiwgY2VudGVyKTtcclxuXHJcblx0XHRpZiAoZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSkge1xyXG5cdFx0XHRuZWFyZXN0SXRlbXMgPSBbZWxlbWVudF07XHJcblx0XHRcdG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XHJcblx0XHR9IGVsc2UgaWYgKGRpc3RhbmNlID09PSBtaW5EaXN0YW5jZSkge1xyXG5cdFx0XHQvLyBDYW4gaGF2ZSBtdWx0aXBsZSBpdGVtcyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBpbiB3aGljaCBjYXNlIHdlIHNvcnQgYnkgc2l6ZVxyXG5cdFx0XHRuZWFyZXN0SXRlbXMucHVzaChlbGVtZW50KTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0cmV0dXJuIG5lYXJlc3RJdGVtcztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGRpc3RhbmNlIG1ldHJpYyBmdW5jdGlvbiBmb3IgdHdvIHBvaW50cyBiYXNlZCBvbiB0aGVcclxuICogYXhpcyBtb2RlIHNldHRpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IGF4aXMgdGhlIGF4aXMgbW9kZS4geHx5fHh5XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXREaXN0YW5jZU1ldHJpY0ZvckF4aXMoYXhpcykge1xyXG5cdHZhciB1c2VYID0gYXhpcy5pbmRleE9mKCd4JykgIT09IC0xO1xyXG5cdHZhciB1c2VZID0gYXhpcy5pbmRleE9mKCd5JykgIT09IC0xO1xyXG5cclxuXHRyZXR1cm4gZnVuY3Rpb24ocHQxLCBwdDIpIHtcclxuXHRcdHZhciBkZWx0YVggPSB1c2VYID8gTWF0aC5hYnMocHQxLnggLSBwdDIueCkgOiAwO1xyXG5cdFx0dmFyIGRlbHRhWSA9IHVzZVkgPyBNYXRoLmFicyhwdDEueSAtIHB0Mi55KSA6IDA7XHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGRlbHRhWCwgMikgKyBNYXRoLnBvdyhkZWx0YVksIDIpKTtcclxuXHR9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbmRleE1vZGUoY2hhcnQsIGUsIG9wdGlvbnMpIHtcclxuXHR2YXIgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcclxuXHQvLyBEZWZhdWx0IGF4aXMgZm9yIGluZGV4IG1vZGUgaXMgJ3gnIHRvIG1hdGNoIG9sZCBiZWhhdmlvdXJcclxuXHRvcHRpb25zLmF4aXMgPSBvcHRpb25zLmF4aXMgfHwgJ3gnO1xyXG5cdHZhciBkaXN0YW5jZU1ldHJpYyA9IGdldERpc3RhbmNlTWV0cmljRm9yQXhpcyhvcHRpb25zLmF4aXMpO1xyXG5cdHZhciBpdGVtcyA9IG9wdGlvbnMuaW50ZXJzZWN0ID8gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uKSA6IGdldE5lYXJlc3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGZhbHNlLCBkaXN0YW5jZU1ldHJpYyk7XHJcblx0dmFyIGVsZW1lbnRzID0gW107XHJcblxyXG5cdGlmICghaXRlbXMubGVuZ3RoKSB7XHJcblx0XHRyZXR1cm4gW107XHJcblx0fVxyXG5cclxuXHRjaGFydC5kYXRhLmRhdGFzZXRzLmZvckVhY2goZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XHJcblx0XHRpZiAoY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShkYXRhc2V0SW5kZXgpKSB7XHJcblx0XHRcdHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcclxuXHRcdFx0dmFyIGVsZW1lbnQgPSBtZXRhLmRhdGFbaXRlbXNbMF0uX2luZGV4XTtcclxuXHJcblx0XHRcdC8vIGRvbid0IGNvdW50IGl0ZW1zIHRoYXQgYXJlIHNraXBwZWQgKG51bGwgZGF0YSlcclxuXHRcdFx0aWYgKGVsZW1lbnQgJiYgIWVsZW1lbnQuX3ZpZXcuc2tpcCkge1xyXG5cdFx0XHRcdGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0cmV0dXJuIGVsZW1lbnRzO1xyXG59XHJcblxyXG4vKipcclxuICogQGludGVyZmFjZSBJSW50ZXJhY3Rpb25PcHRpb25zXHJcbiAqL1xyXG4vKipcclxuICogSWYgdHJ1ZSwgb25seSBjb25zaWRlciBpdGVtcyB0aGF0IGludGVyc2VjdCB0aGUgcG9pbnRcclxuICogQG5hbWUgSUludGVyZmFjZU9wdGlvbnMjYm9vbGVhblxyXG4gKiBAdHlwZSBCb29sZWFuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvbnRhaW5zIGludGVyYWN0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zXHJcbiAqIEBuYW1lc3BhY2UgQ2hhcnQuSW50ZXJhY3Rpb25cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgZGlmZmVyZW50IG1vZGVzXHJcblx0bW9kZXM6IHtcclxuXHRcdHNpbmdsZTogZnVuY3Rpb24oY2hhcnQsIGUpIHtcclxuXHRcdFx0dmFyIHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XHJcblx0XHRcdHZhciBlbGVtZW50cyA9IFtdO1xyXG5cclxuXHRcdFx0cGFyc2VWaXNpYmxlSXRlbXMoY2hhcnQsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHRcdFx0XHRpZiAoZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpKSB7XHJcblx0XHRcdFx0XHRlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnRzO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gZWxlbWVudHMuc2xpY2UoMCwgMSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQGZ1bmN0aW9uIENoYXJ0LkludGVyYWN0aW9uLm1vZGVzLmxhYmVsXHJcblx0XHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuNC4wXHJcblx0XHQgKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRsYWJlbDogaW5kZXhNb2RlLFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmV0dXJucyBpdGVtcyBhdCB0aGUgc2FtZSBpbmRleC4gSWYgdGhlIG9wdGlvbnMuaW50ZXJzZWN0IHBhcmFtZXRlciBpcyB0cnVlLCB3ZSBvbmx5IHJldHVybiBpdGVtcyBpZiB3ZSBpbnRlcnNlY3Qgc29tZXRoaW5nXHJcblx0XHQgKiBJZiB0aGUgb3B0aW9ucy5pbnRlcnNlY3QgbW9kZSBpcyBmYWxzZSwgd2UgZmluZCB0aGUgbmVhcmVzdCBpdGVtIGFuZCByZXR1cm4gdGhlIGl0ZW1zIGF0IHRoZSBzYW1lIGluZGV4IGFzIHRoYXQgaXRlbVxyXG5cdFx0ICogQGZ1bmN0aW9uIENoYXJ0LkludGVyYWN0aW9uLm1vZGVzLmluZGV4XHJcblx0XHQgKiBAc2luY2UgdjIuNC4wXHJcblx0XHQgKiBAcGFyYW0gY2hhcnQge2NoYXJ0fSB0aGUgY2hhcnQgd2UgYXJlIHJldHVybmluZyBpdGVtcyBmcm9tXHJcblx0XHQgKiBAcGFyYW0gZSB7RXZlbnR9IHRoZSBldmVudCB3ZSBhcmUgZmluZCB0aGluZ3MgYXRcclxuXHRcdCAqIEBwYXJhbSBvcHRpb25zIHtJSW50ZXJhY3Rpb25PcHRpb25zfSBvcHRpb25zIHRvIHVzZSBkdXJpbmcgaW50ZXJhY3Rpb25cclxuXHRcdCAqIEByZXR1cm4ge0NoYXJ0LkVsZW1lbnRbXX0gQXJyYXkgb2YgZWxlbWVudHMgdGhhdCBhcmUgdW5kZXIgdGhlIHBvaW50LiBJZiBub25lIGFyZSBmb3VuZCwgYW4gZW1wdHkgYXJyYXkgaXMgcmV0dXJuZWRcclxuXHRcdCAqL1xyXG5cdFx0aW5kZXg6IGluZGV4TW9kZSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJldHVybnMgaXRlbXMgaW4gdGhlIHNhbWUgZGF0YXNldC4gSWYgdGhlIG9wdGlvbnMuaW50ZXJzZWN0IHBhcmFtZXRlciBpcyB0cnVlLCB3ZSBvbmx5IHJldHVybiBpdGVtcyBpZiB3ZSBpbnRlcnNlY3Qgc29tZXRoaW5nXHJcblx0XHQgKiBJZiB0aGUgb3B0aW9ucy5pbnRlcnNlY3QgaXMgZmFsc2UsIHdlIGZpbmQgdGhlIG5lYXJlc3QgaXRlbSBhbmQgcmV0dXJuIHRoZSBpdGVtcyBpbiB0aGF0IGRhdGFzZXRcclxuXHRcdCAqIEBmdW5jdGlvbiBDaGFydC5JbnRlcmFjdGlvbi5tb2Rlcy5kYXRhc2V0XHJcblx0XHQgKiBAcGFyYW0gY2hhcnQge2NoYXJ0fSB0aGUgY2hhcnQgd2UgYXJlIHJldHVybmluZyBpdGVtcyBmcm9tXHJcblx0XHQgKiBAcGFyYW0gZSB7RXZlbnR9IHRoZSBldmVudCB3ZSBhcmUgZmluZCB0aGluZ3MgYXRcclxuXHRcdCAqIEBwYXJhbSBvcHRpb25zIHtJSW50ZXJhY3Rpb25PcHRpb25zfSBvcHRpb25zIHRvIHVzZSBkdXJpbmcgaW50ZXJhY3Rpb25cclxuXHRcdCAqIEByZXR1cm4ge0NoYXJ0LkVsZW1lbnRbXX0gQXJyYXkgb2YgZWxlbWVudHMgdGhhdCBhcmUgdW5kZXIgdGhlIHBvaW50LiBJZiBub25lIGFyZSBmb3VuZCwgYW4gZW1wdHkgYXJyYXkgaXMgcmV0dXJuZWRcclxuXHRcdCAqL1xyXG5cdFx0ZGF0YXNldDogZnVuY3Rpb24oY2hhcnQsIGUsIG9wdGlvbnMpIHtcclxuXHRcdFx0dmFyIHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XHJcblx0XHRcdG9wdGlvbnMuYXhpcyA9IG9wdGlvbnMuYXhpcyB8fCAneHknO1xyXG5cdFx0XHR2YXIgZGlzdGFuY2VNZXRyaWMgPSBnZXREaXN0YW5jZU1ldHJpY0ZvckF4aXMob3B0aW9ucy5heGlzKTtcclxuXHRcdFx0dmFyIGl0ZW1zID0gb3B0aW9ucy5pbnRlcnNlY3QgPyBnZXRJbnRlcnNlY3RJdGVtcyhjaGFydCwgcG9zaXRpb24pIDogZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgZmFsc2UsIGRpc3RhbmNlTWV0cmljKTtcclxuXHJcblx0XHRcdGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aXRlbXMgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpdGVtc1swXS5fZGF0YXNldEluZGV4KS5kYXRhO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gaXRlbXM7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQGZ1bmN0aW9uIENoYXJ0LkludGVyYWN0aW9uLm1vZGVzLngtYXhpc1xyXG5cdFx0ICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjQuMC4gVXNlIGluZGV4IG1vZGUgYW5kIGludGVyc2VjdCA9PSB0cnVlXHJcblx0XHQgKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHQneC1heGlzJzogZnVuY3Rpb24oY2hhcnQsIGUpIHtcclxuXHRcdFx0cmV0dXJuIGluZGV4TW9kZShjaGFydCwgZSwge2ludGVyc2VjdDogZmFsc2V9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBQb2ludCBtb2RlIHJldHVybnMgYWxsIGVsZW1lbnRzIHRoYXQgaGl0IHRlc3QgYmFzZWQgb24gdGhlIGV2ZW50IHBvc2l0aW9uXHJcblx0XHQgKiBvZiB0aGUgZXZlbnRcclxuXHRcdCAqIEBmdW5jdGlvbiBDaGFydC5JbnRlcmFjdGlvbi5tb2Rlcy5pbnRlcnNlY3RcclxuXHRcdCAqIEBwYXJhbSBjaGFydCB7Y2hhcnR9IHRoZSBjaGFydCB3ZSBhcmUgcmV0dXJuaW5nIGl0ZW1zIGZyb21cclxuXHRcdCAqIEBwYXJhbSBlIHtFdmVudH0gdGhlIGV2ZW50IHdlIGFyZSBmaW5kIHRoaW5ncyBhdFxyXG5cdFx0ICogQHJldHVybiB7Q2hhcnQuRWxlbWVudFtdfSBBcnJheSBvZiBlbGVtZW50cyB0aGF0IGFyZSB1bmRlciB0aGUgcG9pbnQuIElmIG5vbmUgYXJlIGZvdW5kLCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZFxyXG5cdFx0ICovXHJcblx0XHRwb2ludDogZnVuY3Rpb24oY2hhcnQsIGUpIHtcclxuXHRcdFx0dmFyIHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XHJcblx0XHRcdHJldHVybiBnZXRJbnRlcnNlY3RJdGVtcyhjaGFydCwgcG9zaXRpb24pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIG5lYXJlc3QgbW9kZSByZXR1cm5zIHRoZSBlbGVtZW50IGNsb3Nlc3QgdG8gdGhlIHBvaW50XHJcblx0XHQgKiBAZnVuY3Rpb24gQ2hhcnQuSW50ZXJhY3Rpb24ubW9kZXMuaW50ZXJzZWN0XHJcblx0XHQgKiBAcGFyYW0gY2hhcnQge2NoYXJ0fSB0aGUgY2hhcnQgd2UgYXJlIHJldHVybmluZyBpdGVtcyBmcm9tXHJcblx0XHQgKiBAcGFyYW0gZSB7RXZlbnR9IHRoZSBldmVudCB3ZSBhcmUgZmluZCB0aGluZ3MgYXRcclxuXHRcdCAqIEBwYXJhbSBvcHRpb25zIHtJSW50ZXJhY3Rpb25PcHRpb25zfSBvcHRpb25zIHRvIHVzZVxyXG5cdFx0ICogQHJldHVybiB7Q2hhcnQuRWxlbWVudFtdfSBBcnJheSBvZiBlbGVtZW50cyB0aGF0IGFyZSB1bmRlciB0aGUgcG9pbnQuIElmIG5vbmUgYXJlIGZvdW5kLCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZFxyXG5cdFx0ICovXHJcblx0XHRuZWFyZXN0OiBmdW5jdGlvbihjaGFydCwgZSwgb3B0aW9ucykge1xyXG5cdFx0XHR2YXIgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcclxuXHRcdFx0b3B0aW9ucy5heGlzID0gb3B0aW9ucy5heGlzIHx8ICd4eSc7XHJcblx0XHRcdHZhciBkaXN0YW5jZU1ldHJpYyA9IGdldERpc3RhbmNlTWV0cmljRm9yQXhpcyhvcHRpb25zLmF4aXMpO1xyXG5cdFx0XHR2YXIgbmVhcmVzdEl0ZW1zID0gZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgb3B0aW9ucy5pbnRlcnNlY3QsIGRpc3RhbmNlTWV0cmljKTtcclxuXHJcblx0XHRcdC8vIFdlIGhhdmUgbXVsdGlwbGUgaXRlbXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGUgZXZlbnQuIE5vdyBzb3J0IGJ5IHNtYWxsZXN0XHJcblx0XHRcdGlmIChuZWFyZXN0SXRlbXMubGVuZ3RoID4gMSkge1xyXG5cdFx0XHRcdG5lYXJlc3RJdGVtcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcclxuXHRcdFx0XHRcdHZhciBzaXplQSA9IGEuZ2V0QXJlYSgpO1xyXG5cdFx0XHRcdFx0dmFyIHNpemVCID0gYi5nZXRBcmVhKCk7XHJcblx0XHRcdFx0XHR2YXIgcmV0ID0gc2l6ZUEgLSBzaXplQjtcclxuXHJcblx0XHRcdFx0XHRpZiAocmV0ID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdC8vIGlmIGVxdWFsIHNvcnQgYnkgZGF0YXNldCBpbmRleFxyXG5cdFx0XHRcdFx0XHRyZXQgPSBhLl9kYXRhc2V0SW5kZXggLSBiLl9kYXRhc2V0SW5kZXg7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgMSBpdGVtXHJcblx0XHRcdHJldHVybiBuZWFyZXN0SXRlbXMuc2xpY2UoMCwgMSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogeCBtb2RlIHJldHVybnMgdGhlIGVsZW1lbnRzIHRoYXQgaGl0LXRlc3QgYXQgdGhlIGN1cnJlbnQgeCBjb29yZGluYXRlXHJcblx0XHQgKiBAZnVuY3Rpb24gQ2hhcnQuSW50ZXJhY3Rpb24ubW9kZXMueFxyXG5cdFx0ICogQHBhcmFtIGNoYXJ0IHtjaGFydH0gdGhlIGNoYXJ0IHdlIGFyZSByZXR1cm5pbmcgaXRlbXMgZnJvbVxyXG5cdFx0ICogQHBhcmFtIGUge0V2ZW50fSB0aGUgZXZlbnQgd2UgYXJlIGZpbmQgdGhpbmdzIGF0XHJcblx0XHQgKiBAcGFyYW0gb3B0aW9ucyB7SUludGVyYWN0aW9uT3B0aW9uc30gb3B0aW9ucyB0byB1c2VcclxuXHRcdCAqIEByZXR1cm4ge0NoYXJ0LkVsZW1lbnRbXX0gQXJyYXkgb2YgZWxlbWVudHMgdGhhdCBhcmUgdW5kZXIgdGhlIHBvaW50LiBJZiBub25lIGFyZSBmb3VuZCwgYW4gZW1wdHkgYXJyYXkgaXMgcmV0dXJuZWRcclxuXHRcdCAqL1xyXG5cdFx0eDogZnVuY3Rpb24oY2hhcnQsIGUsIG9wdGlvbnMpIHtcclxuXHRcdFx0dmFyIHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XHJcblx0XHRcdHZhciBpdGVtcyA9IFtdO1xyXG5cdFx0XHR2YXIgaW50ZXJzZWN0c0l0ZW0gPSBmYWxzZTtcclxuXHJcblx0XHRcdHBhcnNlVmlzaWJsZUl0ZW1zKGNoYXJ0LCBmdW5jdGlvbihlbGVtZW50KSB7XHJcblx0XHRcdFx0aWYgKGVsZW1lbnQuaW5YUmFuZ2UocG9zaXRpb24ueCkpIHtcclxuXHRcdFx0XHRcdGl0ZW1zLnB1c2goZWxlbWVudCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpKSB7XHJcblx0XHRcdFx0XHRpbnRlcnNlY3RzSXRlbSA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8vIElmIHdlIHdhbnQgdG8gdHJpZ2dlciBvbiBhbiBpbnRlcnNlY3QgYW5kIHdlIGRvbid0IGhhdmUgYW55IGl0ZW1zXHJcblx0XHRcdC8vIHRoYXQgaW50ZXJzZWN0IHRoZSBwb3NpdGlvbiwgcmV0dXJuIG5vdGhpbmdcclxuXHRcdFx0aWYgKG9wdGlvbnMuaW50ZXJzZWN0ICYmICFpbnRlcnNlY3RzSXRlbSkge1xyXG5cdFx0XHRcdGl0ZW1zID0gW107XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGl0ZW1zO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIHkgbW9kZSByZXR1cm5zIHRoZSBlbGVtZW50cyB0aGF0IGhpdC10ZXN0IGF0IHRoZSBjdXJyZW50IHkgY29vcmRpbmF0ZVxyXG5cdFx0ICogQGZ1bmN0aW9uIENoYXJ0LkludGVyYWN0aW9uLm1vZGVzLnlcclxuXHRcdCAqIEBwYXJhbSBjaGFydCB7Y2hhcnR9IHRoZSBjaGFydCB3ZSBhcmUgcmV0dXJuaW5nIGl0ZW1zIGZyb21cclxuXHRcdCAqIEBwYXJhbSBlIHtFdmVudH0gdGhlIGV2ZW50IHdlIGFyZSBmaW5kIHRoaW5ncyBhdFxyXG5cdFx0ICogQHBhcmFtIG9wdGlvbnMge0lJbnRlcmFjdGlvbk9wdGlvbnN9IG9wdGlvbnMgdG8gdXNlXHJcblx0XHQgKiBAcmV0dXJuIHtDaGFydC5FbGVtZW50W119IEFycmF5IG9mIGVsZW1lbnRzIHRoYXQgYXJlIHVuZGVyIHRoZSBwb2ludC4gSWYgbm9uZSBhcmUgZm91bmQsIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkXHJcblx0XHQgKi9cclxuXHRcdHk6IGZ1bmN0aW9uKGNoYXJ0LCBlLCBvcHRpb25zKSB7XHJcblx0XHRcdHZhciBwb3NpdGlvbiA9IGdldFJlbGF0aXZlUG9zaXRpb24oZSwgY2hhcnQpO1xyXG5cdFx0XHR2YXIgaXRlbXMgPSBbXTtcclxuXHRcdFx0dmFyIGludGVyc2VjdHNJdGVtID0gZmFsc2U7XHJcblxyXG5cdFx0XHRwYXJzZVZpc2libGVJdGVtcyhjaGFydCwgZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cdFx0XHRcdGlmIChlbGVtZW50LmluWVJhbmdlKHBvc2l0aW9uLnkpKSB7XHJcblx0XHRcdFx0XHRpdGVtcy5wdXNoKGVsZW1lbnQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGVsZW1lbnQuaW5SYW5nZShwb3NpdGlvbi54LCBwb3NpdGlvbi55KSkge1xyXG5cdFx0XHRcdFx0aW50ZXJzZWN0c0l0ZW0gPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBJZiB3ZSB3YW50IHRvIHRyaWdnZXIgb24gYW4gaW50ZXJzZWN0IGFuZCB3ZSBkb24ndCBoYXZlIGFueSBpdGVtc1xyXG5cdFx0XHQvLyB0aGF0IGludGVyc2VjdCB0aGUgcG9zaXRpb24sIHJldHVybiBub3RoaW5nXHJcblx0XHRcdGlmIChvcHRpb25zLmludGVyc2VjdCAmJiAhaW50ZXJzZWN0c0l0ZW0pIHtcclxuXHRcdFx0XHRpdGVtcyA9IFtdO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBpdGVtcztcclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG59LHtcIjQ2XCI6NDZ9XSwzMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG5cclxuZGVmYXVsdHMuX3NldCgnZ2xvYmFsJywge1xyXG5cdHJlc3BvbnNpdmU6IHRydWUsXHJcblx0cmVzcG9uc2l2ZUFuaW1hdGlvbkR1cmF0aW9uOiAwLFxyXG5cdG1haW50YWluQXNwZWN0UmF0aW86IHRydWUsXHJcblx0ZXZlbnRzOiBbJ21vdXNlbW92ZScsICdtb3VzZW91dCcsICdjbGljaycsICd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZSddLFxyXG5cdGhvdmVyOiB7XHJcblx0XHRvbkhvdmVyOiBudWxsLFxyXG5cdFx0bW9kZTogJ25lYXJlc3QnLFxyXG5cdFx0aW50ZXJzZWN0OiB0cnVlLFxyXG5cdFx0YW5pbWF0aW9uRHVyYXRpb246IDQwMFxyXG5cdH0sXHJcblx0b25DbGljazogbnVsbCxcclxuXHRkZWZhdWx0Q29sb3I6ICdyZ2JhKDAsMCwwLDAuMSknLFxyXG5cdGRlZmF1bHRGb250Q29sb3I6ICcjNjY2JyxcclxuXHRkZWZhdWx0Rm9udEZhbWlseTogXCInSGVsdmV0aWNhIE5ldWUnLCAnSGVsdmV0aWNhJywgJ0FyaWFsJywgc2Fucy1zZXJpZlwiLFxyXG5cdGRlZmF1bHRGb250U2l6ZTogMTIsXHJcblx0ZGVmYXVsdEZvbnRTdHlsZTogJ25vcm1hbCcsXHJcblx0c2hvd0xpbmVzOiB0cnVlLFxyXG5cclxuXHQvLyBFbGVtZW50IGRlZmF1bHRzIGRlZmluZWQgaW4gZWxlbWVudCBleHRlbnNpb25zXHJcblx0ZWxlbWVudHM6IHt9LFxyXG5cclxuXHQvLyBMYXlvdXQgb3B0aW9ucyBzdWNoIGFzIHBhZGRpbmdcclxuXHRsYXlvdXQ6IHtcclxuXHRcdHBhZGRpbmc6IHtcclxuXHRcdFx0dG9wOiAwLFxyXG5cdFx0XHRyaWdodDogMCxcclxuXHRcdFx0Ym90dG9tOiAwLFxyXG5cdFx0XHRsZWZ0OiAwXHJcblx0XHR9XHJcblx0fVxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcblxyXG5cdC8vIE9jY3VweSB0aGUgZ2xvYmFsIHZhcmlhYmxlIG9mIENoYXJ0LCBhbmQgY3JlYXRlIGEgc2ltcGxlIGJhc2UgY2xhc3NcclxuXHR2YXIgQ2hhcnQgPSBmdW5jdGlvbihpdGVtLCBjb25maWcpIHtcclxuXHRcdHRoaXMuY29uc3RydWN0KGl0ZW0sIGNvbmZpZyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9O1xyXG5cclxuXHRDaGFydC5DaGFydCA9IENoYXJ0O1xyXG5cclxuXHRyZXR1cm4gQ2hhcnQ7XHJcbn07XHJcblxyXG59LHtcIjI2XCI6MjZ9XSwzMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Nik7XHJcblxyXG5mdW5jdGlvbiBmaWx0ZXJCeVBvc2l0aW9uKGFycmF5LCBwb3NpdGlvbikge1xyXG5cdHJldHVybiBoZWxwZXJzLndoZXJlKGFycmF5LCBmdW5jdGlvbih2KSB7XHJcblx0XHRyZXR1cm4gdi5wb3NpdGlvbiA9PT0gcG9zaXRpb247XHJcblx0fSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNvcnRCeVdlaWdodChhcnJheSwgcmV2ZXJzZSkge1xyXG5cdGFycmF5LmZvckVhY2goZnVuY3Rpb24odiwgaSkge1xyXG5cdFx0di5fdG1wSW5kZXhfID0gaTtcclxuXHRcdHJldHVybiB2O1xyXG5cdH0pO1xyXG5cdGFycmF5LnNvcnQoZnVuY3Rpb24oYSwgYikge1xyXG5cdFx0dmFyIHYwID0gcmV2ZXJzZSA/IGIgOiBhO1xyXG5cdFx0dmFyIHYxID0gcmV2ZXJzZSA/IGEgOiBiO1xyXG5cdFx0cmV0dXJuIHYwLndlaWdodCA9PT0gdjEud2VpZ2h0ID9cclxuXHRcdFx0djAuX3RtcEluZGV4XyAtIHYxLl90bXBJbmRleF8gOlxyXG5cdFx0XHR2MC53ZWlnaHQgLSB2MS53ZWlnaHQ7XHJcblx0fSk7XHJcblx0YXJyYXkuZm9yRWFjaChmdW5jdGlvbih2KSB7XHJcblx0XHRkZWxldGUgdi5fdG1wSW5kZXhfO1xyXG5cdH0pO1xyXG59XHJcblxyXG4vKipcclxuICogQGludGVyZmFjZSBJTGF5b3V0SXRlbVxyXG4gKiBAcHJvcCB7U3RyaW5nfSBwb3NpdGlvbiAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgaXRlbSBpbiB0aGUgY2hhcnQgbGF5b3V0LiBQb3NzaWJsZSB2YWx1ZXMgYXJlXHJcbiAqICdsZWZ0JywgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCBhbmQgJ2NoYXJ0QXJlYSdcclxuICogQHByb3Age051bWJlcn0gd2VpZ2h0IC0gVGhlIHdlaWdodCB1c2VkIHRvIHNvcnQgdGhlIGl0ZW0uIEhpZ2hlciB3ZWlnaHRzIGFyZSBmdXJ0aGVyIGF3YXkgZnJvbSB0aGUgY2hhcnQgYXJlYVxyXG4gKiBAcHJvcCB7Qm9vbGVhbn0gZnVsbFdpZHRoIC0gaWYgdHJ1ZSwgYW5kIHRoZSBpdGVtIGlzIGhvcml6b250YWwsIHRoZW4gcHVzaCB2ZXJ0aWNhbCBib3hlcyBkb3duXHJcbiAqIEBwcm9wIHtGdW5jdGlvbn0gaXNIb3Jpem9udGFsIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBsYXlvdXQgaXRlbSBpcyBob3Jpem9udGFsIChpZS4gdG9wIG9yIGJvdHRvbSlcclxuICogQHByb3Age0Z1bmN0aW9ufSB1cGRhdGUgLSBUYWtlcyB0d28gcGFyYW1ldGVyczogd2lkdGggYW5kIGhlaWdodC4gUmV0dXJucyBzaXplIG9mIGl0ZW1cclxuICogQHByb3Age0Z1bmN0aW9ufSBnZXRQYWRkaW5nIC0gIFJldHVybnMgYW4gb2JqZWN0IHdpdGggcGFkZGluZyBvbiB0aGUgZWRnZXNcclxuICogQHByb3Age051bWJlcn0gd2lkdGggLSBXaWR0aCBvZiBpdGVtLiBNdXN0IGJlIHZhbGlkIGFmdGVyIHVwZGF0ZSgpXHJcbiAqIEBwcm9wIHtOdW1iZXJ9IGhlaWdodCAtIEhlaWdodCBvZiBpdGVtLiBNdXN0IGJlIHZhbGlkIGFmdGVyIHVwZGF0ZSgpXHJcbiAqIEBwcm9wIHtOdW1iZXJ9IGxlZnQgLSBMZWZ0IGVkZ2Ugb2YgdGhlIGl0ZW0uIFNldCBieSBsYXlvdXQgc3lzdGVtIGFuZCBjYW5ub3QgYmUgdXNlZCBpbiB1cGRhdGVcclxuICogQHByb3Age051bWJlcn0gdG9wIC0gVG9wIGVkZ2Ugb2YgdGhlIGl0ZW0uIFNldCBieSBsYXlvdXQgc3lzdGVtIGFuZCBjYW5ub3QgYmUgdXNlZCBpbiB1cGRhdGVcclxuICogQHByb3Age051bWJlcn0gcmlnaHQgLSBSaWdodCBlZGdlIG9mIHRoZSBpdGVtLiBTZXQgYnkgbGF5b3V0IHN5c3RlbSBhbmQgY2Fubm90IGJlIHVzZWQgaW4gdXBkYXRlXHJcbiAqIEBwcm9wIHtOdW1iZXJ9IGJvdHRvbSAtIEJvdHRvbSBlZGdlIG9mIHRoZSBpdGVtLiBTZXQgYnkgbGF5b3V0IHN5c3RlbSBhbmQgY2Fubm90IGJlIHVzZWQgaW4gdXBkYXRlXHJcbiAqL1xyXG5cclxuLy8gVGhlIGxheW91dCBzZXJ2aWNlIGlzIHZlcnkgc2VsZiBleHBsYW5hdG9yeS4gIEl0J3MgcmVzcG9uc2libGUgZm9yIHRoZSBsYXlvdXQgd2l0aGluIGEgY2hhcnQuXHJcbi8vIFNjYWxlcywgTGVnZW5kcyBhbmQgUGx1Z2lucyBhbGwgcmVseSBvbiB0aGUgbGF5b3V0IHNlcnZpY2UgYW5kIGNhbiBlYXNpbHkgcmVnaXN0ZXIgdG8gYmUgcGxhY2VkIGFueXdoZXJlIHRoZXkgbmVlZFxyXG4vLyBJdCBpcyB0aGlzIHNlcnZpY2UncyByZXNwb25zaWJpbGl0eSBvZiBjYXJyeWluZyBvdXQgdGhhdCBsYXlvdXQuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdGRlZmF1bHRzOiB7fSxcclxuXHJcblx0LyoqXHJcblx0ICogUmVnaXN0ZXIgYSBib3ggdG8gYSBjaGFydC5cclxuXHQgKiBBIGJveCBpcyBzaW1wbHkgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgcmVxdWlyZXMgbGF5b3V0LiBlZy4gU2NhbGVzLCBMZWdlbmQsIFRpdGxlLlxyXG5cdCAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gdGhlIGNoYXJ0IHRvIHVzZVxyXG5cdCAqIEBwYXJhbSB7SUxheW91dEl0ZW19IGl0ZW0gLSB0aGUgaXRlbSB0byBhZGQgdG8gYmUgbGF5ZWQgb3V0XHJcblx0ICovXHJcblx0YWRkQm94OiBmdW5jdGlvbihjaGFydCwgaXRlbSkge1xyXG5cdFx0aWYgKCFjaGFydC5ib3hlcykge1xyXG5cdFx0XHRjaGFydC5ib3hlcyA9IFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGluaXRpYWxpemUgaXRlbSB3aXRoIGRlZmF1bHQgdmFsdWVzXHJcblx0XHRpdGVtLmZ1bGxXaWR0aCA9IGl0ZW0uZnVsbFdpZHRoIHx8IGZhbHNlO1xyXG5cdFx0aXRlbS5wb3NpdGlvbiA9IGl0ZW0ucG9zaXRpb24gfHwgJ3RvcCc7XHJcblx0XHRpdGVtLndlaWdodCA9IGl0ZW0ud2VpZ2h0IHx8IDA7XHJcblxyXG5cdFx0Y2hhcnQuYm94ZXMucHVzaChpdGVtKTtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmUgYSBsYXlvdXRJdGVtIGZyb20gYSBjaGFydFxyXG5cdCAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gdGhlIGNoYXJ0IHRvIHJlbW92ZSB0aGUgYm94IGZyb21cclxuXHQgKiBAcGFyYW0ge09iamVjdH0gbGF5b3V0SXRlbSAtIHRoZSBpdGVtIHRvIHJlbW92ZSBmcm9tIHRoZSBsYXlvdXRcclxuXHQgKi9cclxuXHRyZW1vdmVCb3g6IGZ1bmN0aW9uKGNoYXJ0LCBsYXlvdXRJdGVtKSB7XHJcblx0XHR2YXIgaW5kZXggPSBjaGFydC5ib3hlcyA/IGNoYXJ0LmJveGVzLmluZGV4T2YobGF5b3V0SXRlbSkgOiAtMTtcclxuXHRcdGlmIChpbmRleCAhPT0gLTEpIHtcclxuXHRcdFx0Y2hhcnQuYm94ZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIChvciB1cGRhdGVzKSBvcHRpb25zIG9uIHRoZSBnaXZlbiBgaXRlbWAuXHJcblx0ICogQHBhcmFtIHtDaGFydH0gY2hhcnQgLSB0aGUgY2hhcnQgaW4gd2hpY2ggdGhlIGl0ZW0gbGl2ZXMgKG9yIHdpbGwgYmUgYWRkZWQgdG8pXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IGl0ZW0gLSB0aGUgaXRlbSB0byBjb25maWd1cmUgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9uc1xyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gdGhlIG5ldyBpdGVtIG9wdGlvbnMuXHJcblx0ICovXHJcblx0Y29uZmlndXJlOiBmdW5jdGlvbihjaGFydCwgaXRlbSwgb3B0aW9ucykge1xyXG5cdFx0dmFyIHByb3BzID0gWydmdWxsV2lkdGgnLCAncG9zaXRpb24nLCAnd2VpZ2h0J107XHJcblx0XHR2YXIgaWxlbiA9IHByb3BzLmxlbmd0aDtcclxuXHRcdHZhciBpID0gMDtcclxuXHRcdHZhciBwcm9wO1xyXG5cclxuXHRcdGZvciAoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRcdHByb3AgPSBwcm9wc1tpXTtcclxuXHRcdFx0aWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcclxuXHRcdFx0XHRpdGVtW3Byb3BdID0gb3B0aW9uc1twcm9wXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdC8qKlxyXG5cdCAqIEZpdHMgYm94ZXMgb2YgdGhlIGdpdmVuIGNoYXJ0IGludG8gdGhlIGdpdmVuIHNpemUgYnkgaGF2aW5nIGVhY2ggYm94IG1lYXN1cmUgaXRzZWxmXHJcblx0ICogdGhlbiBydW5uaW5nIGEgZml0dGluZyBhbGdvcml0aG1cclxuXHQgKiBAcGFyYW0ge0NoYXJ0fSBjaGFydCAtIHRoZSBjaGFydFxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSB3aWR0aCAtIHRoZSB3aWR0aCB0byBmaXQgaW50b1xyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBoZWlnaHQgLSB0aGUgaGVpZ2h0IHRvIGZpdCBpbnRvXHJcblx0ICovXHJcblx0dXBkYXRlOiBmdW5jdGlvbihjaGFydCwgd2lkdGgsIGhlaWdodCkge1xyXG5cdFx0aWYgKCFjaGFydCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGxheW91dE9wdGlvbnMgPSBjaGFydC5vcHRpb25zLmxheW91dCB8fCB7fTtcclxuXHRcdHZhciBwYWRkaW5nID0gaGVscGVycy5vcHRpb25zLnRvUGFkZGluZyhsYXlvdXRPcHRpb25zLnBhZGRpbmcpO1xyXG5cdFx0dmFyIGxlZnRQYWRkaW5nID0gcGFkZGluZy5sZWZ0O1xyXG5cdFx0dmFyIHJpZ2h0UGFkZGluZyA9IHBhZGRpbmcucmlnaHQ7XHJcblx0XHR2YXIgdG9wUGFkZGluZyA9IHBhZGRpbmcudG9wO1xyXG5cdFx0dmFyIGJvdHRvbVBhZGRpbmcgPSBwYWRkaW5nLmJvdHRvbTtcclxuXHJcblx0XHR2YXIgbGVmdEJveGVzID0gZmlsdGVyQnlQb3NpdGlvbihjaGFydC5ib3hlcywgJ2xlZnQnKTtcclxuXHRcdHZhciByaWdodEJveGVzID0gZmlsdGVyQnlQb3NpdGlvbihjaGFydC5ib3hlcywgJ3JpZ2h0Jyk7XHJcblx0XHR2YXIgdG9wQm94ZXMgPSBmaWx0ZXJCeVBvc2l0aW9uKGNoYXJ0LmJveGVzLCAndG9wJyk7XHJcblx0XHR2YXIgYm90dG9tQm94ZXMgPSBmaWx0ZXJCeVBvc2l0aW9uKGNoYXJ0LmJveGVzLCAnYm90dG9tJyk7XHJcblx0XHR2YXIgY2hhcnRBcmVhQm94ZXMgPSBmaWx0ZXJCeVBvc2l0aW9uKGNoYXJ0LmJveGVzLCAnY2hhcnRBcmVhJyk7XHJcblxyXG5cdFx0Ly8gU29ydCBib3hlcyBieSB3ZWlnaHQuIEEgaGlnaGVyIHdlaWdodCBpcyBmdXJ0aGVyIGF3YXkgZnJvbSB0aGUgY2hhcnQgYXJlYVxyXG5cdFx0c29ydEJ5V2VpZ2h0KGxlZnRCb3hlcywgdHJ1ZSk7XHJcblx0XHRzb3J0QnlXZWlnaHQocmlnaHRCb3hlcywgZmFsc2UpO1xyXG5cdFx0c29ydEJ5V2VpZ2h0KHRvcEJveGVzLCB0cnVlKTtcclxuXHRcdHNvcnRCeVdlaWdodChib3R0b21Cb3hlcywgZmFsc2UpO1xyXG5cclxuXHRcdC8vIEVzc2VudGlhbGx5IHdlIG5vdyBoYXZlIGFueSBudW1iZXIgb2YgYm94ZXMgb24gZWFjaCBvZiB0aGUgNCBzaWRlcy5cclxuXHRcdC8vIE91ciBjYW52YXMgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nLlxyXG5cdFx0Ly8gVGhlIGFyZWFzIEwxIGFuZCBMMiBhcmUgdGhlIGxlZnQgYXhlcy4gUjEgaXMgdGhlIHJpZ2h0IGF4aXMsIFQxIGlzIHRoZSB0b3AgYXhpcyBhbmRcclxuXHRcdC8vIEIxIGlzIHRoZSBib3R0b20gYXhpc1xyXG5cdFx0Ly8gVGhlcmUgYXJlIGFsc28gNCBxdWFkcmFudC1saWtlIGxvY2F0aW9ucyAobGVmdCB0byByaWdodCBpbnN0ZWFkIG9mIGNsb2Nrd2lzZSkgcmVzZXJ2ZWQgZm9yIGNoYXJ0IG92ZXJsYXlzXHJcblx0XHQvLyBUaGVzZSBsb2NhdGlvbnMgYXJlIHNpbmdsZS1ib3ggbG9jYXRpb25zIG9ubHksIHdoZW4gdHJ5aW5nIHRvIHJlZ2lzdGVyIGEgY2hhcnRBcmVhIGxvY2F0aW9uIHRoYXQgaXMgYWxyZWFkeSB0YWtlbixcclxuXHRcdC8vIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxyXG5cdFx0Ly9cclxuXHRcdC8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxyXG5cdFx0Ly8gfCAgICAgICAgICAgICAgICAgIFQxIChGdWxsIFdpZHRoKSAgICAgICAgICAgICAgICAgICB8XHJcblx0XHQvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcclxuXHRcdC8vIHwgICAgfCAgICB8ICAgICAgICAgICAgICAgICBUMiAgICAgICAgICAgICAgICAgIHwgICAgfFxyXG5cdFx0Ly8gfCAgICB8LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS18XHJcblx0XHQvLyB8ICAgIHwgICAgfCBDMSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDMiB8ICAgIHxcclxuXHRcdC8vIHwgICAgfCAgICB8LS0tLXwgICAgICAgICAgICAgICAgICAgICAgICAgICB8LS0tLXwgICAgfFxyXG5cdFx0Ly8gfCAgICB8ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8XHJcblx0XHQvLyB8IEwxIHwgTDIgfCAgICAgICAgICAgQ2hhcnRBcmVhIChDMCkgICAgICAgICAgICB8IFIxIHxcclxuXHRcdC8vIHwgICAgfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfFxyXG5cdFx0Ly8gfCAgICB8ICAgIHwtLS0tfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tfCAgICB8XHJcblx0XHQvLyB8ICAgIHwgICAgfCBDMyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDNCB8ICAgIHxcclxuXHRcdC8vIHwgICAgfC0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tfFxyXG5cdFx0Ly8gfCAgICB8ICAgIHwgICAgICAgICAgICAgICAgIEIxICAgICAgICAgICAgICAgICAgfCAgICB8XHJcblx0XHQvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcclxuXHRcdC8vIHwgICAgICAgICAgICAgICAgICBCMiAoRnVsbCBXaWR0aCkgICAgICAgICAgICAgICAgICAgfFxyXG5cdFx0Ly8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XHJcblx0XHQvL1xyXG5cdFx0Ly8gV2hhdCB3ZSBkbyB0byBmaW5kIHRoZSBiZXN0IHNpemluZywgd2UgZG8gdGhlIGZvbGxvd2luZ1xyXG5cdFx0Ly8gMS4gRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIHNpemUgb2YgdGhlIGNoYXJ0IGFyZWEuXHJcblx0XHQvLyAyLiBTcGxpdCB0aGUgcmVtYWluaW5nIHdpZHRoIGVxdWFsbHkgYmV0d2VlbiBlYWNoIHZlcnRpY2FsIGF4aXNcclxuXHRcdC8vIDMuIFNwbGl0IHRoZSByZW1haW5pbmcgaGVpZ2h0IGVxdWFsbHkgYmV0d2VlbiBlYWNoIGhvcml6b250YWwgYXhpc1xyXG5cdFx0Ly8gNC4gR2l2ZSBlYWNoIGxheW91dCB0aGUgbWF4aW11bSBzaXplIGl0IGNhbiBiZS4gVGhlIGxheW91dCB3aWxsIHJldHVybiBpdCdzIG1pbmltdW0gc2l6ZVxyXG5cdFx0Ly8gNS4gQWRqdXN0IHRoZSBzaXplcyBvZiBlYWNoIGF4aXMgYmFzZWQgb24gaXQncyBtaW5pbXVtIHJlcG9ydGVkIHNpemUuXHJcblx0XHQvLyA2LiBSZWZpdCBlYWNoIGF4aXNcclxuXHRcdC8vIDcuIFBvc2l0aW9uIGVhY2ggYXhpcyBpbiB0aGUgZmluYWwgbG9jYXRpb25cclxuXHRcdC8vIDguIFRlbGwgdGhlIGNoYXJ0IHRoZSBmaW5hbCBsb2NhdGlvbiBvZiB0aGUgY2hhcnQgYXJlYVxyXG5cdFx0Ly8gOS4gVGVsbCBhbnkgYXhlcyB0aGF0IG92ZXJsYXkgdGhlIGNoYXJ0IGFyZWEgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY2hhcnQgYXJlYVxyXG5cclxuXHRcdC8vIFN0ZXAgMVxyXG5cdFx0dmFyIGNoYXJ0V2lkdGggPSB3aWR0aCAtIGxlZnRQYWRkaW5nIC0gcmlnaHRQYWRkaW5nO1xyXG5cdFx0dmFyIGNoYXJ0SGVpZ2h0ID0gaGVpZ2h0IC0gdG9wUGFkZGluZyAtIGJvdHRvbVBhZGRpbmc7XHJcblx0XHR2YXIgY2hhcnRBcmVhV2lkdGggPSBjaGFydFdpZHRoIC8gMjsgLy8gbWluIDUwJVxyXG5cdFx0dmFyIGNoYXJ0QXJlYUhlaWdodCA9IGNoYXJ0SGVpZ2h0IC8gMjsgLy8gbWluIDUwJVxyXG5cclxuXHRcdC8vIFN0ZXAgMlxyXG5cdFx0dmFyIHZlcnRpY2FsQm94V2lkdGggPSAod2lkdGggLSBjaGFydEFyZWFXaWR0aCkgLyAobGVmdEJveGVzLmxlbmd0aCArIHJpZ2h0Qm94ZXMubGVuZ3RoKTtcclxuXHJcblx0XHQvLyBTdGVwIDNcclxuXHRcdHZhciBob3Jpem9udGFsQm94SGVpZ2h0ID0gKGhlaWdodCAtIGNoYXJ0QXJlYUhlaWdodCkgLyAodG9wQm94ZXMubGVuZ3RoICsgYm90dG9tQm94ZXMubGVuZ3RoKTtcclxuXHJcblx0XHQvLyBTdGVwIDRcclxuXHRcdHZhciBtYXhDaGFydEFyZWFXaWR0aCA9IGNoYXJ0V2lkdGg7XHJcblx0XHR2YXIgbWF4Q2hhcnRBcmVhSGVpZ2h0ID0gY2hhcnRIZWlnaHQ7XHJcblx0XHR2YXIgbWluQm94U2l6ZXMgPSBbXTtcclxuXHJcblx0XHRmdW5jdGlvbiBnZXRNaW5pbXVtQm94U2l6ZShib3gpIHtcclxuXHRcdFx0dmFyIG1pblNpemU7XHJcblx0XHRcdHZhciBpc0hvcml6b250YWwgPSBib3guaXNIb3Jpem9udGFsKCk7XHJcblxyXG5cdFx0XHRpZiAoaXNIb3Jpem9udGFsKSB7XHJcblx0XHRcdFx0bWluU2l6ZSA9IGJveC51cGRhdGUoYm94LmZ1bGxXaWR0aCA/IGNoYXJ0V2lkdGggOiBtYXhDaGFydEFyZWFXaWR0aCwgaG9yaXpvbnRhbEJveEhlaWdodCk7XHJcblx0XHRcdFx0bWF4Q2hhcnRBcmVhSGVpZ2h0IC09IG1pblNpemUuaGVpZ2h0O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdG1pblNpemUgPSBib3gudXBkYXRlKHZlcnRpY2FsQm94V2lkdGgsIG1heENoYXJ0QXJlYUhlaWdodCk7XHJcblx0XHRcdFx0bWF4Q2hhcnRBcmVhV2lkdGggLT0gbWluU2l6ZS53aWR0aDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bWluQm94U2l6ZXMucHVzaCh7XHJcblx0XHRcdFx0aG9yaXpvbnRhbDogaXNIb3Jpem9udGFsLFxyXG5cdFx0XHRcdG1pblNpemU6IG1pblNpemUsXHJcblx0XHRcdFx0Ym94OiBib3gsXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGhlbHBlcnMuZWFjaChsZWZ0Qm94ZXMuY29uY2F0KHJpZ2h0Qm94ZXMsIHRvcEJveGVzLCBib3R0b21Cb3hlcyksIGdldE1pbmltdW1Cb3hTaXplKTtcclxuXHJcblx0XHQvLyBJZiBhIGhvcml6b250YWwgYm94IGhhcyBwYWRkaW5nLCB3ZSBtb3ZlIHRoZSBsZWZ0IGJveGVzIG92ZXIgdG8gYXZvaWQgdWdseSBjaGFydHMgKHNlZSBpc3N1ZSAjMjQ3OClcclxuXHRcdHZhciBtYXhIb3Jpem9udGFsTGVmdFBhZGRpbmcgPSAwO1xyXG5cdFx0dmFyIG1heEhvcml6b250YWxSaWdodFBhZGRpbmcgPSAwO1xyXG5cdFx0dmFyIG1heFZlcnRpY2FsVG9wUGFkZGluZyA9IDA7XHJcblx0XHR2YXIgbWF4VmVydGljYWxCb3R0b21QYWRkaW5nID0gMDtcclxuXHJcblx0XHRoZWxwZXJzLmVhY2godG9wQm94ZXMuY29uY2F0KGJvdHRvbUJveGVzKSwgZnVuY3Rpb24oaG9yaXpvbnRhbEJveCkge1xyXG5cdFx0XHRpZiAoaG9yaXpvbnRhbEJveC5nZXRQYWRkaW5nKSB7XHJcblx0XHRcdFx0dmFyIGJveFBhZGRpbmcgPSBob3Jpem9udGFsQm94LmdldFBhZGRpbmcoKTtcclxuXHRcdFx0XHRtYXhIb3Jpem9udGFsTGVmdFBhZGRpbmcgPSBNYXRoLm1heChtYXhIb3Jpem9udGFsTGVmdFBhZGRpbmcsIGJveFBhZGRpbmcubGVmdCk7XHJcblx0XHRcdFx0bWF4SG9yaXpvbnRhbFJpZ2h0UGFkZGluZyA9IE1hdGgubWF4KG1heEhvcml6b250YWxSaWdodFBhZGRpbmcsIGJveFBhZGRpbmcucmlnaHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRoZWxwZXJzLmVhY2gobGVmdEJveGVzLmNvbmNhdChyaWdodEJveGVzKSwgZnVuY3Rpb24odmVydGljYWxCb3gpIHtcclxuXHRcdFx0aWYgKHZlcnRpY2FsQm94LmdldFBhZGRpbmcpIHtcclxuXHRcdFx0XHR2YXIgYm94UGFkZGluZyA9IHZlcnRpY2FsQm94LmdldFBhZGRpbmcoKTtcclxuXHRcdFx0XHRtYXhWZXJ0aWNhbFRvcFBhZGRpbmcgPSBNYXRoLm1heChtYXhWZXJ0aWNhbFRvcFBhZGRpbmcsIGJveFBhZGRpbmcudG9wKTtcclxuXHRcdFx0XHRtYXhWZXJ0aWNhbEJvdHRvbVBhZGRpbmcgPSBNYXRoLm1heChtYXhWZXJ0aWNhbEJvdHRvbVBhZGRpbmcsIGJveFBhZGRpbmcuYm90dG9tKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gQXQgdGhpcyBwb2ludCwgbWF4Q2hhcnRBcmVhSGVpZ2h0IGFuZCBtYXhDaGFydEFyZWFXaWR0aCBhcmUgdGhlIHNpemUgdGhlIGNoYXJ0IGFyZWEgY291bGRcclxuXHRcdC8vIGJlIGlmIHRoZSBheGVzIGFyZSBkcmF3biBhdCB0aGVpciBtaW5pbXVtIHNpemVzLlxyXG5cdFx0Ly8gU3RlcHMgNSAmIDZcclxuXHRcdHZhciB0b3RhbExlZnRCb3hlc1dpZHRoID0gbGVmdFBhZGRpbmc7XHJcblx0XHR2YXIgdG90YWxSaWdodEJveGVzV2lkdGggPSByaWdodFBhZGRpbmc7XHJcblx0XHR2YXIgdG90YWxUb3BCb3hlc0hlaWdodCA9IHRvcFBhZGRpbmc7XHJcblx0XHR2YXIgdG90YWxCb3R0b21Cb3hlc0hlaWdodCA9IGJvdHRvbVBhZGRpbmc7XHJcblxyXG5cdFx0Ly8gRnVuY3Rpb24gdG8gZml0IGEgYm94XHJcblx0XHRmdW5jdGlvbiBmaXRCb3goYm94KSB7XHJcblx0XHRcdHZhciBtaW5Cb3hTaXplID0gaGVscGVycy5maW5kTmV4dFdoZXJlKG1pbkJveFNpemVzLCBmdW5jdGlvbihtaW5Cb3gpIHtcclxuXHRcdFx0XHRyZXR1cm4gbWluQm94LmJveCA9PT0gYm94O1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdGlmIChtaW5Cb3hTaXplKSB7XHJcblx0XHRcdFx0aWYgKGJveC5pc0hvcml6b250YWwoKSkge1xyXG5cdFx0XHRcdFx0dmFyIHNjYWxlTWFyZ2luID0ge1xyXG5cdFx0XHRcdFx0XHRsZWZ0OiBNYXRoLm1heCh0b3RhbExlZnRCb3hlc1dpZHRoLCBtYXhIb3Jpem9udGFsTGVmdFBhZGRpbmcpLFxyXG5cdFx0XHRcdFx0XHRyaWdodDogTWF0aC5tYXgodG90YWxSaWdodEJveGVzV2lkdGgsIG1heEhvcml6b250YWxSaWdodFBhZGRpbmcpLFxyXG5cdFx0XHRcdFx0XHR0b3A6IDAsXHJcblx0XHRcdFx0XHRcdGJvdHRvbTogMFxyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHQvLyBEb24ndCB1c2UgbWluIHNpemUgaGVyZSBiZWNhdXNlIG9mIGxhYmVsIHJvdGF0aW9uLiBXaGVuIHRoZSBsYWJlbHMgYXJlIHJvdGF0ZWQsIHRoZWlyIHJvdGF0aW9uIGhpZ2hseSBkZXBlbmRzXHJcblx0XHRcdFx0XHQvLyBvbiB0aGUgbWFyZ2luLiBTb21ldGltZXMgdGhleSBuZWVkIHRvIGluY3JlYXNlIGluIHNpemUgc2xpZ2h0bHlcclxuXHRcdFx0XHRcdGJveC51cGRhdGUoYm94LmZ1bGxXaWR0aCA/IGNoYXJ0V2lkdGggOiBtYXhDaGFydEFyZWFXaWR0aCwgY2hhcnRIZWlnaHQgLyAyLCBzY2FsZU1hcmdpbik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGJveC51cGRhdGUobWluQm94U2l6ZS5taW5TaXplLndpZHRoLCBtYXhDaGFydEFyZWFIZWlnaHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFVwZGF0ZSwgYW5kIGNhbGN1bGF0ZSB0aGUgbGVmdCBhbmQgcmlnaHQgbWFyZ2lucyBmb3IgdGhlIGhvcml6b250YWwgYm94ZXNcclxuXHRcdGhlbHBlcnMuZWFjaChsZWZ0Qm94ZXMuY29uY2F0KHJpZ2h0Qm94ZXMpLCBmaXRCb3gpO1xyXG5cclxuXHRcdGhlbHBlcnMuZWFjaChsZWZ0Qm94ZXMsIGZ1bmN0aW9uKGJveCkge1xyXG5cdFx0XHR0b3RhbExlZnRCb3hlc1dpZHRoICs9IGJveC53aWR0aDtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGhlbHBlcnMuZWFjaChyaWdodEJveGVzLCBmdW5jdGlvbihib3gpIHtcclxuXHRcdFx0dG90YWxSaWdodEJveGVzV2lkdGggKz0gYm94LndpZHRoO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gU2V0IHRoZSBMZWZ0IGFuZCBSaWdodCBtYXJnaW5zIGZvciB0aGUgaG9yaXpvbnRhbCBib3hlc1xyXG5cdFx0aGVscGVycy5lYWNoKHRvcEJveGVzLmNvbmNhdChib3R0b21Cb3hlcyksIGZpdEJveCk7XHJcblxyXG5cdFx0Ly8gRmlndXJlIG91dCBob3cgbXVjaCBtYXJnaW4gaXMgb24gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSB2ZXJ0aWNhbCBib3hlc1xyXG5cdFx0aGVscGVycy5lYWNoKHRvcEJveGVzLCBmdW5jdGlvbihib3gpIHtcclxuXHRcdFx0dG90YWxUb3BCb3hlc0hlaWdodCArPSBib3guaGVpZ2h0O1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0aGVscGVycy5lYWNoKGJvdHRvbUJveGVzLCBmdW5jdGlvbihib3gpIHtcclxuXHRcdFx0dG90YWxCb3R0b21Cb3hlc0hlaWdodCArPSBib3guaGVpZ2h0O1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gZmluYWxGaXRWZXJ0aWNhbEJveChib3gpIHtcclxuXHRcdFx0dmFyIG1pbkJveFNpemUgPSBoZWxwZXJzLmZpbmROZXh0V2hlcmUobWluQm94U2l6ZXMsIGZ1bmN0aW9uKG1pblNpemUpIHtcclxuXHRcdFx0XHRyZXR1cm4gbWluU2l6ZS5ib3ggPT09IGJveDtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHR2YXIgc2NhbGVNYXJnaW4gPSB7XHJcblx0XHRcdFx0bGVmdDogMCxcclxuXHRcdFx0XHRyaWdodDogMCxcclxuXHRcdFx0XHR0b3A6IHRvdGFsVG9wQm94ZXNIZWlnaHQsXHJcblx0XHRcdFx0Ym90dG9tOiB0b3RhbEJvdHRvbUJveGVzSGVpZ2h0XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRpZiAobWluQm94U2l6ZSkge1xyXG5cdFx0XHRcdGJveC51cGRhdGUobWluQm94U2l6ZS5taW5TaXplLndpZHRoLCBtYXhDaGFydEFyZWFIZWlnaHQsIHNjYWxlTWFyZ2luKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIExldCB0aGUgbGVmdCBsYXlvdXQga25vdyB0aGUgZmluYWwgbWFyZ2luXHJcblx0XHRoZWxwZXJzLmVhY2gobGVmdEJveGVzLmNvbmNhdChyaWdodEJveGVzKSwgZmluYWxGaXRWZXJ0aWNhbEJveCk7XHJcblxyXG5cdFx0Ly8gUmVjYWxjdWxhdGUgYmVjYXVzZSB0aGUgc2l6ZSBvZiBlYWNoIGxheW91dCBtaWdodCBoYXZlIGNoYW5nZWQgc2xpZ2h0bHkgZHVlIHRvIHRoZSBtYXJnaW5zIChsYWJlbCByb3RhdGlvbiBmb3IgaW5zdGFuY2UpXHJcblx0XHR0b3RhbExlZnRCb3hlc1dpZHRoID0gbGVmdFBhZGRpbmc7XHJcblx0XHR0b3RhbFJpZ2h0Qm94ZXNXaWR0aCA9IHJpZ2h0UGFkZGluZztcclxuXHRcdHRvdGFsVG9wQm94ZXNIZWlnaHQgPSB0b3BQYWRkaW5nO1xyXG5cdFx0dG90YWxCb3R0b21Cb3hlc0hlaWdodCA9IGJvdHRvbVBhZGRpbmc7XHJcblxyXG5cdFx0aGVscGVycy5lYWNoKGxlZnRCb3hlcywgZnVuY3Rpb24oYm94KSB7XHJcblx0XHRcdHRvdGFsTGVmdEJveGVzV2lkdGggKz0gYm94LndpZHRoO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0aGVscGVycy5lYWNoKHJpZ2h0Qm94ZXMsIGZ1bmN0aW9uKGJveCkge1xyXG5cdFx0XHR0b3RhbFJpZ2h0Qm94ZXNXaWR0aCArPSBib3gud2lkdGg7XHJcblx0XHR9KTtcclxuXHJcblx0XHRoZWxwZXJzLmVhY2godG9wQm94ZXMsIGZ1bmN0aW9uKGJveCkge1xyXG5cdFx0XHR0b3RhbFRvcEJveGVzSGVpZ2h0ICs9IGJveC5oZWlnaHQ7XHJcblx0XHR9KTtcclxuXHRcdGhlbHBlcnMuZWFjaChib3R0b21Cb3hlcywgZnVuY3Rpb24oYm94KSB7XHJcblx0XHRcdHRvdGFsQm90dG9tQm94ZXNIZWlnaHQgKz0gYm94LmhlaWdodDtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFdlIG1heSBiZSBhZGRpbmcgc29tZSBwYWRkaW5nIHRvIGFjY291bnQgZm9yIHJvdGF0ZWQgeCBheGlzIGxhYmVsc1xyXG5cdFx0dmFyIGxlZnRQYWRkaW5nQWRkaXRpb24gPSBNYXRoLm1heChtYXhIb3Jpem9udGFsTGVmdFBhZGRpbmcgLSB0b3RhbExlZnRCb3hlc1dpZHRoLCAwKTtcclxuXHRcdHRvdGFsTGVmdEJveGVzV2lkdGggKz0gbGVmdFBhZGRpbmdBZGRpdGlvbjtcclxuXHRcdHRvdGFsUmlnaHRCb3hlc1dpZHRoICs9IE1hdGgubWF4KG1heEhvcml6b250YWxSaWdodFBhZGRpbmcgLSB0b3RhbFJpZ2h0Qm94ZXNXaWR0aCwgMCk7XHJcblxyXG5cdFx0dmFyIHRvcFBhZGRpbmdBZGRpdGlvbiA9IE1hdGgubWF4KG1heFZlcnRpY2FsVG9wUGFkZGluZyAtIHRvdGFsVG9wQm94ZXNIZWlnaHQsIDApO1xyXG5cdFx0dG90YWxUb3BCb3hlc0hlaWdodCArPSB0b3BQYWRkaW5nQWRkaXRpb247XHJcblx0XHR0b3RhbEJvdHRvbUJveGVzSGVpZ2h0ICs9IE1hdGgubWF4KG1heFZlcnRpY2FsQm90dG9tUGFkZGluZyAtIHRvdGFsQm90dG9tQm94ZXNIZWlnaHQsIDApO1xyXG5cclxuXHRcdC8vIEZpZ3VyZSBvdXQgaWYgb3VyIGNoYXJ0IGFyZWEgY2hhbmdlZC4gVGhpcyB3b3VsZCBvY2N1ciBpZiB0aGUgZGF0YXNldCBsYXlvdXQgbGFiZWwgcm90YXRpb25cclxuXHRcdC8vIGNoYW5nZWQgZHVlIHRvIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgbWFyZ2lucyBpbiBzdGVwIDYuIFNpbmNlIHdlIGNhbiBvbmx5IGdldCBiaWdnZXIsIHRoaXMgaXMgc2FmZSB0byBkb1xyXG5cdFx0Ly8gd2l0aG91dCBjYWxsaW5nIGBmaXRgIGFnYWluXHJcblx0XHR2YXIgbmV3TWF4Q2hhcnRBcmVhSGVpZ2h0ID0gaGVpZ2h0IC0gdG90YWxUb3BCb3hlc0hlaWdodCAtIHRvdGFsQm90dG9tQm94ZXNIZWlnaHQ7XHJcblx0XHR2YXIgbmV3TWF4Q2hhcnRBcmVhV2lkdGggPSB3aWR0aCAtIHRvdGFsTGVmdEJveGVzV2lkdGggLSB0b3RhbFJpZ2h0Qm94ZXNXaWR0aDtcclxuXHJcblx0XHRpZiAobmV3TWF4Q2hhcnRBcmVhV2lkdGggIT09IG1heENoYXJ0QXJlYVdpZHRoIHx8IG5ld01heENoYXJ0QXJlYUhlaWdodCAhPT0gbWF4Q2hhcnRBcmVhSGVpZ2h0KSB7XHJcblx0XHRcdGhlbHBlcnMuZWFjaChsZWZ0Qm94ZXMsIGZ1bmN0aW9uKGJveCkge1xyXG5cdFx0XHRcdGJveC5oZWlnaHQgPSBuZXdNYXhDaGFydEFyZWFIZWlnaHQ7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0aGVscGVycy5lYWNoKHJpZ2h0Qm94ZXMsIGZ1bmN0aW9uKGJveCkge1xyXG5cdFx0XHRcdGJveC5oZWlnaHQgPSBuZXdNYXhDaGFydEFyZWFIZWlnaHQ7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0aGVscGVycy5lYWNoKHRvcEJveGVzLCBmdW5jdGlvbihib3gpIHtcclxuXHRcdFx0XHRpZiAoIWJveC5mdWxsV2lkdGgpIHtcclxuXHRcdFx0XHRcdGJveC53aWR0aCA9IG5ld01heENoYXJ0QXJlYVdpZHRoO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRoZWxwZXJzLmVhY2goYm90dG9tQm94ZXMsIGZ1bmN0aW9uKGJveCkge1xyXG5cdFx0XHRcdGlmICghYm94LmZ1bGxXaWR0aCkge1xyXG5cdFx0XHRcdFx0Ym94LndpZHRoID0gbmV3TWF4Q2hhcnRBcmVhV2lkdGg7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdG1heENoYXJ0QXJlYUhlaWdodCA9IG5ld01heENoYXJ0QXJlYUhlaWdodDtcclxuXHRcdFx0bWF4Q2hhcnRBcmVhV2lkdGggPSBuZXdNYXhDaGFydEFyZWFXaWR0aDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTdGVwIDcgLSBQb3NpdGlvbiB0aGUgYm94ZXNcclxuXHRcdHZhciBsZWZ0ID0gbGVmdFBhZGRpbmcgKyBsZWZ0UGFkZGluZ0FkZGl0aW9uO1xyXG5cdFx0dmFyIHRvcCA9IHRvcFBhZGRpbmcgKyB0b3BQYWRkaW5nQWRkaXRpb247XHJcblxyXG5cdFx0ZnVuY3Rpb24gcGxhY2VCb3goYm94KSB7XHJcblx0XHRcdGlmIChib3guaXNIb3Jpem9udGFsKCkpIHtcclxuXHRcdFx0XHRib3gubGVmdCA9IGJveC5mdWxsV2lkdGggPyBsZWZ0UGFkZGluZyA6IHRvdGFsTGVmdEJveGVzV2lkdGg7XHJcblx0XHRcdFx0Ym94LnJpZ2h0ID0gYm94LmZ1bGxXaWR0aCA/IHdpZHRoIC0gcmlnaHRQYWRkaW5nIDogdG90YWxMZWZ0Qm94ZXNXaWR0aCArIG1heENoYXJ0QXJlYVdpZHRoO1xyXG5cdFx0XHRcdGJveC50b3AgPSB0b3A7XHJcblx0XHRcdFx0Ym94LmJvdHRvbSA9IHRvcCArIGJveC5oZWlnaHQ7XHJcblxyXG5cdFx0XHRcdC8vIE1vdmUgdG8gbmV4dCBwb2ludFxyXG5cdFx0XHRcdHRvcCA9IGJveC5ib3R0b207XHJcblxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRib3gubGVmdCA9IGxlZnQ7XHJcblx0XHRcdFx0Ym94LnJpZ2h0ID0gbGVmdCArIGJveC53aWR0aDtcclxuXHRcdFx0XHRib3gudG9wID0gdG90YWxUb3BCb3hlc0hlaWdodDtcclxuXHRcdFx0XHRib3guYm90dG9tID0gdG90YWxUb3BCb3hlc0hlaWdodCArIG1heENoYXJ0QXJlYUhlaWdodDtcclxuXHJcblx0XHRcdFx0Ly8gTW92ZSB0byBuZXh0IHBvaW50XHJcblx0XHRcdFx0bGVmdCA9IGJveC5yaWdodDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGhlbHBlcnMuZWFjaChsZWZ0Qm94ZXMuY29uY2F0KHRvcEJveGVzKSwgcGxhY2VCb3gpO1xyXG5cclxuXHRcdC8vIEFjY291bnQgZm9yIGNoYXJ0IHdpZHRoIGFuZCBoZWlnaHRcclxuXHRcdGxlZnQgKz0gbWF4Q2hhcnRBcmVhV2lkdGg7XHJcblx0XHR0b3AgKz0gbWF4Q2hhcnRBcmVhSGVpZ2h0O1xyXG5cclxuXHRcdGhlbHBlcnMuZWFjaChyaWdodEJveGVzLCBwbGFjZUJveCk7XHJcblx0XHRoZWxwZXJzLmVhY2goYm90dG9tQm94ZXMsIHBsYWNlQm94KTtcclxuXHJcblx0XHQvLyBTdGVwIDhcclxuXHRcdGNoYXJ0LmNoYXJ0QXJlYSA9IHtcclxuXHRcdFx0bGVmdDogdG90YWxMZWZ0Qm94ZXNXaWR0aCxcclxuXHRcdFx0dG9wOiB0b3RhbFRvcEJveGVzSGVpZ2h0LFxyXG5cdFx0XHRyaWdodDogdG90YWxMZWZ0Qm94ZXNXaWR0aCArIG1heENoYXJ0QXJlYVdpZHRoLFxyXG5cdFx0XHRib3R0b206IHRvdGFsVG9wQm94ZXNIZWlnaHQgKyBtYXhDaGFydEFyZWFIZWlnaHRcclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gU3RlcCA5XHJcblx0XHRoZWxwZXJzLmVhY2goY2hhcnRBcmVhQm94ZXMsIGZ1bmN0aW9uKGJveCkge1xyXG5cdFx0XHRib3gubGVmdCA9IGNoYXJ0LmNoYXJ0QXJlYS5sZWZ0O1xyXG5cdFx0XHRib3gudG9wID0gY2hhcnQuY2hhcnRBcmVhLnRvcDtcclxuXHRcdFx0Ym94LnJpZ2h0ID0gY2hhcnQuY2hhcnRBcmVhLnJpZ2h0O1xyXG5cdFx0XHRib3guYm90dG9tID0gY2hhcnQuY2hhcnRBcmVhLmJvdHRvbTtcclxuXHJcblx0XHRcdGJveC51cGRhdGUobWF4Q2hhcnRBcmVhV2lkdGgsIG1heENoYXJ0QXJlYUhlaWdodCk7XHJcblx0XHR9KTtcclxuXHR9XHJcbn07XHJcblxyXG59LHtcIjQ2XCI6NDZ9XSwzMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG52YXIgaGVscGVycyA9IHJlcXVpcmUoNDYpO1xyXG5cclxuZGVmYXVsdHMuX3NldCgnZ2xvYmFsJywge1xyXG5cdHBsdWdpbnM6IHt9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBwbHVnaW4gc2VydmljZSBzaW5nbGV0b25cclxuICogQG5hbWVzcGFjZSBDaGFydC5wbHVnaW5zXHJcbiAqIEBzaW5jZSAyLjEuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0LyoqXHJcblx0ICogR2xvYmFsbHkgcmVnaXN0ZXJlZCBwbHVnaW5zLlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0X3BsdWdpbnM6IFtdLFxyXG5cclxuXHQvKipcclxuXHQgKiBUaGlzIGlkZW50aWZpZXIgaXMgdXNlZCB0byBpbnZhbGlkYXRlIHRoZSBkZXNjcmlwdG9ycyBjYWNoZSBhdHRhY2hlZCB0byBlYWNoIGNoYXJ0XHJcblx0ICogd2hlbiBhIGdsb2JhbCBwbHVnaW4gaXMgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQuIEluIHRoaXMgY2FzZSwgdGhlIGNhY2hlIElEIGlzXHJcblx0ICogaW5jcmVtZW50ZWQgYW5kIGRlc2NyaXB0b3JzIGFyZSByZWdlbmVyYXRlZCBkdXJpbmcgZm9sbG93aW5nIEFQSSBjYWxscy5cclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdF9jYWNoZUlkOiAwLFxyXG5cclxuXHQvKipcclxuXHQgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIHBsdWdpbihzKSBpZiBub3QgYWxyZWFkeSByZWdpc3RlcmVkLlxyXG5cdCAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBwbHVnaW5zIHBsdWdpbiBpbnN0YW5jZShzKS5cclxuXHQgKi9cclxuXHRyZWdpc3RlcjogZnVuY3Rpb24ocGx1Z2lucykge1xyXG5cdFx0dmFyIHAgPSB0aGlzLl9wbHVnaW5zO1xyXG5cdFx0KFtdKS5jb25jYXQocGx1Z2lucykuZm9yRWFjaChmdW5jdGlvbihwbHVnaW4pIHtcclxuXHRcdFx0aWYgKHAuaW5kZXhPZihwbHVnaW4pID09PSAtMSkge1xyXG5cdFx0XHRcdHAucHVzaChwbHVnaW4pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLl9jYWNoZUlkKys7XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogVW5yZWdpc3RlcnMgdGhlIGdpdmVuIHBsdWdpbihzKSBvbmx5IGlmIHJlZ2lzdGVyZWQuXHJcblx0ICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHBsdWdpbnMgcGx1Z2luIGluc3RhbmNlKHMpLlxyXG5cdCAqL1xyXG5cdHVucmVnaXN0ZXI6IGZ1bmN0aW9uKHBsdWdpbnMpIHtcclxuXHRcdHZhciBwID0gdGhpcy5fcGx1Z2lucztcclxuXHRcdChbXSkuY29uY2F0KHBsdWdpbnMpLmZvckVhY2goZnVuY3Rpb24ocGx1Z2luKSB7XHJcblx0XHRcdHZhciBpZHggPSBwLmluZGV4T2YocGx1Z2luKTtcclxuXHRcdFx0aWYgKGlkeCAhPT0gLTEpIHtcclxuXHRcdFx0XHRwLnNwbGljZShpZHgsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLl9jYWNoZUlkKys7XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIGFsbCByZWdpc3RlcmVkIHBsdWdpbnMuXHJcblx0ICogQHNpbmNlIDIuMS41XHJcblx0ICovXHJcblx0Y2xlYXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dGhpcy5fcGx1Z2lucyA9IFtdO1xyXG5cdFx0dGhpcy5fY2FjaGVJZCsrO1xyXG5cdH0sXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIHBsdWdpbnM/XHJcblx0ICogQHJldHVybnMge051bWJlcn1cclxuXHQgKiBAc2luY2UgMi4xLjVcclxuXHQgKi9cclxuXHRjb3VudDogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcGx1Z2lucy5sZW5ndGg7XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyBhbGwgcmVnaXN0ZXJlZCBwbHVnaW4gaW5zdGFuY2VzLlxyXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXkgb2YgcGx1Z2luIG9iamVjdHMuXHJcblx0ICogQHNpbmNlIDIuMS41XHJcblx0ICovXHJcblx0Z2V0QWxsOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLl9wbHVnaW5zO1xyXG5cdH0sXHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbGxzIGVuYWJsZWQgcGx1Z2lucyBmb3IgYGNoYXJ0YCBvbiB0aGUgc3BlY2lmaWVkIGhvb2sgYW5kIHdpdGggdGhlIGdpdmVuIGFyZ3MuXHJcblx0ICogVGhpcyBtZXRob2QgaW1tZWRpYXRlbHkgcmV0dXJucyBhcyBzb29uIGFzIGEgcGx1Z2luIGV4cGxpY2l0bHkgcmV0dXJucyBmYWxzZS4gVGhlXHJcblx0ICogcmV0dXJuZWQgdmFsdWUgY2FuIGJlIHVzZWQsIGZvciBpbnN0YW5jZSwgdG8gaW50ZXJydXB0IHRoZSBjdXJyZW50IGFjdGlvbi5cclxuXHQgKiBAcGFyYW0ge09iamVjdH0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UgZm9yIHdoaWNoIHBsdWdpbnMgc2hvdWxkIGJlIGNhbGxlZC5cclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaG9vayAtIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gbWV0aG9kIHRvIGNhbGwgKGUuZy4gJ2JlZm9yZVVwZGF0ZScpLlxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IFthcmdzXSAtIEV4dHJhIGFyZ3VtZW50cyB0byBhcHBseSB0byB0aGUgaG9vayBjYWxsLlxyXG5cdCAqIEByZXR1cm5zIHtCb29sZWFufSBmYWxzZSBpZiBhbnkgb2YgdGhlIHBsdWdpbnMgcmV0dXJuIGZhbHNlLCBlbHNlIHJldHVybnMgdHJ1ZS5cclxuXHQgKi9cclxuXHRub3RpZnk6IGZ1bmN0aW9uKGNoYXJ0LCBob29rLCBhcmdzKSB7XHJcblx0XHR2YXIgZGVzY3JpcHRvcnMgPSB0aGlzLmRlc2NyaXB0b3JzKGNoYXJ0KTtcclxuXHRcdHZhciBpbGVuID0gZGVzY3JpcHRvcnMubGVuZ3RoO1xyXG5cdFx0dmFyIGksIGRlc2NyaXB0b3IsIHBsdWdpbiwgcGFyYW1zLCBtZXRob2Q7XHJcblxyXG5cdFx0Zm9yIChpID0gMDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHRkZXNjcmlwdG9yID0gZGVzY3JpcHRvcnNbaV07XHJcblx0XHRcdHBsdWdpbiA9IGRlc2NyaXB0b3IucGx1Z2luO1xyXG5cdFx0XHRtZXRob2QgPSBwbHVnaW5baG9va107XHJcblx0XHRcdGlmICh0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdFx0cGFyYW1zID0gW2NoYXJ0XS5jb25jYXQoYXJncyB8fCBbXSk7XHJcblx0XHRcdFx0cGFyYW1zLnB1c2goZGVzY3JpcHRvci5vcHRpb25zKTtcclxuXHRcdFx0XHRpZiAobWV0aG9kLmFwcGx5KHBsdWdpbiwgcGFyYW1zKSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIGRlc2NyaXB0b3JzIG9mIGVuYWJsZWQgcGx1Z2lucyBmb3IgdGhlIGdpdmVuIGNoYXJ0LlxyXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gW3sgcGx1Z2luLCBvcHRpb25zIH1dXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRkZXNjcmlwdG9yczogZnVuY3Rpb24oY2hhcnQpIHtcclxuXHRcdHZhciBjYWNoZSA9IGNoYXJ0LiRwbHVnaW5zIHx8IChjaGFydC4kcGx1Z2lucyA9IHt9KTtcclxuXHRcdGlmIChjYWNoZS5pZCA9PT0gdGhpcy5fY2FjaGVJZCkge1xyXG5cdFx0XHRyZXR1cm4gY2FjaGUuZGVzY3JpcHRvcnM7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIHBsdWdpbnMgPSBbXTtcclxuXHRcdHZhciBkZXNjcmlwdG9ycyA9IFtdO1xyXG5cdFx0dmFyIGNvbmZpZyA9IChjaGFydCAmJiBjaGFydC5jb25maWcpIHx8IHt9O1xyXG5cdFx0dmFyIG9wdGlvbnMgPSAoY29uZmlnLm9wdGlvbnMgJiYgY29uZmlnLm9wdGlvbnMucGx1Z2lucykgfHwge307XHJcblxyXG5cdFx0dGhpcy5fcGx1Z2lucy5jb25jYXQoY29uZmlnLnBsdWdpbnMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24ocGx1Z2luKSB7XHJcblx0XHRcdHZhciBpZHggPSBwbHVnaW5zLmluZGV4T2YocGx1Z2luKTtcclxuXHRcdFx0aWYgKGlkeCAhPT0gLTEpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBpZCA9IHBsdWdpbi5pZDtcclxuXHRcdFx0dmFyIG9wdHMgPSBvcHRpb25zW2lkXTtcclxuXHRcdFx0aWYgKG9wdHMgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAob3B0cyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdG9wdHMgPSBoZWxwZXJzLmNsb25lKGRlZmF1bHRzLmdsb2JhbC5wbHVnaW5zW2lkXSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHBsdWdpbnMucHVzaChwbHVnaW4pO1xyXG5cdFx0XHRkZXNjcmlwdG9ycy5wdXNoKHtcclxuXHRcdFx0XHRwbHVnaW46IHBsdWdpbixcclxuXHRcdFx0XHRvcHRpb25zOiBvcHRzIHx8IHt9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Y2FjaGUuZGVzY3JpcHRvcnMgPSBkZXNjcmlwdG9ycztcclxuXHRcdGNhY2hlLmlkID0gdGhpcy5fY2FjaGVJZDtcclxuXHRcdHJldHVybiBkZXNjcmlwdG9ycztcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBJbnZhbGlkYXRlcyBjYWNoZSBmb3IgdGhlIGdpdmVuIGNoYXJ0OiBkZXNjcmlwdG9ycyBob2xkIGEgcmVmZXJlbmNlIG9uIHBsdWdpbiBvcHRpb24sXHJcblx0ICogYnV0IGluIHNvbWUgY2FzZXMsIHRoaXMgcmVmZXJlbmNlIGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyIHdoZW4gdXBkYXRpbmcgb3B0aW9ucy5cclxuXHQgKiBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNTExMSNpc3N1ZWNvbW1lbnQtMzU1OTM0MTY3XHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRfaW52YWxpZGF0ZTogZnVuY3Rpb24oY2hhcnQpIHtcclxuXHRcdGRlbGV0ZSBjaGFydC4kcGx1Z2lucztcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogUGx1Z2luIGV4dGVuc2lvbiBob29rcy5cclxuICogQGludGVyZmFjZSBJUGx1Z2luXHJcbiAqIEBzaW5jZSAyLjEuMFxyXG4gKi9cclxuLyoqXHJcbiAqIEBtZXRob2QgSVBsdWdpbiNiZWZvcmVJbml0XHJcbiAqIEBkZXNjIENhbGxlZCBiZWZvcmUgaW5pdGlhbGl6aW5nIGBjaGFydGAuXHJcbiAqIEBwYXJhbSB7Q2hhcnQuQ29udHJvbGxlcn0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIHBsdWdpbiBvcHRpb25zLlxyXG4gKi9cclxuLyoqXHJcbiAqIEBtZXRob2QgSVBsdWdpbiNhZnRlckluaXRcclxuICogQGRlc2MgQ2FsbGVkIGFmdGVyIGBjaGFydGAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kIGJlZm9yZSB0aGUgZmlyc3QgdXBkYXRlLlxyXG4gKiBAcGFyYW0ge0NoYXJ0LkNvbnRyb2xsZXJ9IGNoYXJ0IC0gVGhlIGNoYXJ0IGluc3RhbmNlLlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cclxuICovXHJcbi8qKlxyXG4gKiBAbWV0aG9kIElQbHVnaW4jYmVmb3JlVXBkYXRlXHJcbiAqIEBkZXNjIENhbGxlZCBiZWZvcmUgdXBkYXRpbmcgYGNoYXJ0YC4gSWYgYW55IHBsdWdpbiByZXR1cm5zIGBmYWxzZWAsIHRoZSB1cGRhdGVcclxuICogaXMgY2FuY2VsbGVkIChhbmQgdGh1cyBzdWJzZXF1ZW50IHJlbmRlcihzKSkgdW50aWwgYW5vdGhlciBgdXBkYXRlYCBpcyB0cmlnZ2VyZWQuXHJcbiAqIEBwYXJhbSB7Q2hhcnQuQ29udHJvbGxlcn0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIHBsdWdpbiBvcHRpb25zLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGNoYXJ0IHVwZGF0ZS5cclxuICovXHJcbi8qKlxyXG4gKiBAbWV0aG9kIElQbHVnaW4jYWZ0ZXJVcGRhdGVcclxuICogQGRlc2MgQ2FsbGVkIGFmdGVyIGBjaGFydGAgaGFzIGJlZW4gdXBkYXRlZCBhbmQgYmVmb3JlIHJlbmRlcmluZy4gTm90ZSB0aGF0IHRoaXNcclxuICogaG9vayB3aWxsIG5vdCBiZSBjYWxsZWQgaWYgdGhlIGNoYXJ0IHVwZGF0ZSBoYXMgYmVlbiBwcmV2aW91c2x5IGNhbmNlbGxlZC5cclxuICogQHBhcmFtIHtDaGFydC5Db250cm9sbGVyfSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXHJcbiAqL1xyXG4vKipcclxuICogQG1ldGhvZCBJUGx1Z2luI2JlZm9yZURhdGFzZXRzVXBkYXRlXHJcbiAqIEBkZXNjIENhbGxlZCBiZWZvcmUgdXBkYXRpbmcgdGhlIGBjaGFydGAgZGF0YXNldHMuIElmIGFueSBwbHVnaW4gcmV0dXJucyBgZmFsc2VgLFxyXG4gKiB0aGUgZGF0YXNldHMgdXBkYXRlIGlzIGNhbmNlbGxlZCB1bnRpbCBhbm90aGVyIGB1cGRhdGVgIGlzIHRyaWdnZXJlZC5cclxuICogQHBhcmFtIHtDaGFydC5Db250cm9sbGVyfSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBmYWxzZSB0byBjYW5jZWwgdGhlIGRhdGFzZXRzIHVwZGF0ZS5cclxuICogQHNpbmNlIHZlcnNpb24gMi4xLjVcclxuKi9cclxuLyoqXHJcbiAqIEBtZXRob2QgSVBsdWdpbiNhZnRlckRhdGFzZXRzVXBkYXRlXHJcbiAqIEBkZXNjIENhbGxlZCBhZnRlciB0aGUgYGNoYXJ0YCBkYXRhc2V0cyBoYXZlIGJlZW4gdXBkYXRlZC4gTm90ZSB0aGF0IHRoaXMgaG9va1xyXG4gKiB3aWxsIG5vdCBiZSBjYWxsZWQgaWYgdGhlIGRhdGFzZXRzIHVwZGF0ZSBoYXMgYmVlbiBwcmV2aW91c2x5IGNhbmNlbGxlZC5cclxuICogQHBhcmFtIHtDaGFydC5Db250cm9sbGVyfSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXHJcbiAqIEBzaW5jZSB2ZXJzaW9uIDIuMS41XHJcbiAqL1xyXG4vKipcclxuICogQG1ldGhvZCBJUGx1Z2luI2JlZm9yZURhdGFzZXRVcGRhdGVcclxuICogQGRlc2MgQ2FsbGVkIGJlZm9yZSB1cGRhdGluZyB0aGUgYGNoYXJ0YCBkYXRhc2V0IGF0IHRoZSBnaXZlbiBgYXJncy5pbmRleGAuIElmIGFueSBwbHVnaW5cclxuICogcmV0dXJucyBgZmFsc2VgLCB0aGUgZGF0YXNldHMgdXBkYXRlIGlzIGNhbmNlbGxlZCB1bnRpbCBhbm90aGVyIGB1cGRhdGVgIGlzIHRyaWdnZXJlZC5cclxuICogQHBhcmFtIHtDaGFydH0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIC0gVGhlIGNhbGwgYXJndW1lbnRzLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYXJncy5pbmRleCAtIFRoZSBkYXRhc2V0IGluZGV4LlxyXG4gKiBAcGFyYW0ge09iamVjdH0gYXJncy5tZXRhIC0gVGhlIGRhdGFzZXQgbWV0YWRhdGEuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIHBsdWdpbiBvcHRpb25zLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGNoYXJ0IGRhdGFzZXRzIGRyYXdpbmcuXHJcbiAqL1xyXG4vKipcclxuICogQG1ldGhvZCBJUGx1Z2luI2FmdGVyRGF0YXNldFVwZGF0ZVxyXG4gKiBAZGVzYyBDYWxsZWQgYWZ0ZXIgdGhlIGBjaGFydGAgZGF0YXNldHMgYXQgdGhlIGdpdmVuIGBhcmdzLmluZGV4YCBoYXMgYmVlbiB1cGRhdGVkLiBOb3RlXHJcbiAqIHRoYXQgdGhpcyBob29rIHdpbGwgbm90IGJlIGNhbGxlZCBpZiB0aGUgZGF0YXNldHMgdXBkYXRlIGhhcyBiZWVuIHByZXZpb3VzbHkgY2FuY2VsbGVkLlxyXG4gKiBAcGFyYW0ge0NoYXJ0fSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtPYmplY3R9IGFyZ3MgLSBUaGUgY2FsbCBhcmd1bWVudHMuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhcmdzLmluZGV4IC0gVGhlIGRhdGFzZXQgaW5kZXguXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzLm1ldGEgLSBUaGUgZGF0YXNldCBtZXRhZGF0YS5cclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXHJcbiAqL1xyXG4vKipcclxuICogQG1ldGhvZCBJUGx1Z2luI2JlZm9yZUxheW91dFxyXG4gKiBAZGVzYyBDYWxsZWQgYmVmb3JlIGxheWluZyBvdXQgYGNoYXJ0YC4gSWYgYW55IHBsdWdpbiByZXR1cm5zIGBmYWxzZWAsXHJcbiAqIHRoZSBsYXlvdXQgdXBkYXRlIGlzIGNhbmNlbGxlZCB1bnRpbCBhbm90aGVyIGB1cGRhdGVgIGlzIHRyaWdnZXJlZC5cclxuICogQHBhcmFtIHtDaGFydC5Db250cm9sbGVyfSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBgZmFsc2VgIHRvIGNhbmNlbCB0aGUgY2hhcnQgbGF5b3V0LlxyXG4gKi9cclxuLyoqXHJcbiAqIEBtZXRob2QgSVBsdWdpbiNhZnRlckxheW91dFxyXG4gKiBAZGVzYyBDYWxsZWQgYWZ0ZXIgdGhlIGBjaGFydGAgaGFzIGJlZW4gbGF5ZWQgb3V0LiBOb3RlIHRoYXQgdGhpcyBob29rIHdpbGwgbm90XHJcbiAqIGJlIGNhbGxlZCBpZiB0aGUgbGF5b3V0IHVwZGF0ZSBoYXMgYmVlbiBwcmV2aW91c2x5IGNhbmNlbGxlZC5cclxuICogQHBhcmFtIHtDaGFydC5Db250cm9sbGVyfSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXHJcbiAqL1xyXG4vKipcclxuICogQG1ldGhvZCBJUGx1Z2luI2JlZm9yZVJlbmRlclxyXG4gKiBAZGVzYyBDYWxsZWQgYmVmb3JlIHJlbmRlcmluZyBgY2hhcnRgLiBJZiBhbnkgcGx1Z2luIHJldHVybnMgYGZhbHNlYCxcclxuICogdGhlIHJlbmRlcmluZyBpcyBjYW5jZWxsZWQgdW50aWwgYW5vdGhlciBgcmVuZGVyYCBpcyB0cmlnZ2VyZWQuXHJcbiAqIEBwYXJhbSB7Q2hhcnQuQ29udHJvbGxlcn0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIHBsdWdpbiBvcHRpb25zLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGNoYXJ0IHJlbmRlcmluZy5cclxuICovXHJcbi8qKlxyXG4gKiBAbWV0aG9kIElQbHVnaW4jYWZ0ZXJSZW5kZXJcclxuICogQGRlc2MgQ2FsbGVkIGFmdGVyIHRoZSBgY2hhcnRgIGhhcyBiZWVuIGZ1bGx5IHJlbmRlcmVkIChhbmQgYW5pbWF0aW9uIGNvbXBsZXRlZCkuIE5vdGVcclxuICogdGhhdCB0aGlzIGhvb2sgd2lsbCBub3QgYmUgY2FsbGVkIGlmIHRoZSByZW5kZXJpbmcgaGFzIGJlZW4gcHJldmlvdXNseSBjYW5jZWxsZWQuXHJcbiAqIEBwYXJhbSB7Q2hhcnQuQ29udHJvbGxlcn0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIHBsdWdpbiBvcHRpb25zLlxyXG4gKi9cclxuLyoqXHJcbiAqIEBtZXRob2QgSVBsdWdpbiNiZWZvcmVEcmF3XHJcbiAqIEBkZXNjIENhbGxlZCBiZWZvcmUgZHJhd2luZyBgY2hhcnRgIGF0IGV2ZXJ5IGFuaW1hdGlvbiBmcmFtZSBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuXHJcbiAqIGVhc2luZyB2YWx1ZS4gSWYgYW55IHBsdWdpbiByZXR1cm5zIGBmYWxzZWAsIHRoZSBmcmFtZSBkcmF3aW5nIGlzIGNhbmNlbGxlZCB1bnRpbFxyXG4gKiBhbm90aGVyIGByZW5kZXJgIGlzIHRyaWdnZXJlZC5cclxuICogQHBhcmFtIHtDaGFydC5Db250cm9sbGVyfSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IGVhc2luZ1ZhbHVlIC0gVGhlIGN1cnJlbnQgYW5pbWF0aW9uIHZhbHVlLCBiZXR3ZWVuIDAuMCBhbmQgMS4wLlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cclxuICogQHJldHVybnMge0Jvb2xlYW59IGBmYWxzZWAgdG8gY2FuY2VsIHRoZSBjaGFydCBkcmF3aW5nLlxyXG4gKi9cclxuLyoqXHJcbiAqIEBtZXRob2QgSVBsdWdpbiNhZnRlckRyYXdcclxuICogQGRlc2MgQ2FsbGVkIGFmdGVyIHRoZSBgY2hhcnRgIGhhcyBiZWVuIGRyYXduIGZvciB0aGUgc3BlY2lmaWMgZWFzaW5nIHZhbHVlLiBOb3RlXHJcbiAqIHRoYXQgdGhpcyBob29rIHdpbGwgbm90IGJlIGNhbGxlZCBpZiB0aGUgZHJhd2luZyBoYXMgYmVlbiBwcmV2aW91c2x5IGNhbmNlbGxlZC5cclxuICogQHBhcmFtIHtDaGFydC5Db250cm9sbGVyfSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IGVhc2luZ1ZhbHVlIC0gVGhlIGN1cnJlbnQgYW5pbWF0aW9uIHZhbHVlLCBiZXR3ZWVuIDAuMCBhbmQgMS4wLlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cclxuICovXHJcbi8qKlxyXG4gKiBAbWV0aG9kIElQbHVnaW4jYmVmb3JlRGF0YXNldHNEcmF3XHJcbiAqIEBkZXNjIENhbGxlZCBiZWZvcmUgZHJhd2luZyB0aGUgYGNoYXJ0YCBkYXRhc2V0cy4gSWYgYW55IHBsdWdpbiByZXR1cm5zIGBmYWxzZWAsXHJcbiAqIHRoZSBkYXRhc2V0cyBkcmF3aW5nIGlzIGNhbmNlbGxlZCB1bnRpbCBhbm90aGVyIGByZW5kZXJgIGlzIHRyaWdnZXJlZC5cclxuICogQHBhcmFtIHtDaGFydC5Db250cm9sbGVyfSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IGVhc2luZ1ZhbHVlIC0gVGhlIGN1cnJlbnQgYW5pbWF0aW9uIHZhbHVlLCBiZXR3ZWVuIDAuMCBhbmQgMS4wLlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cclxuICogQHJldHVybnMge0Jvb2xlYW59IGBmYWxzZWAgdG8gY2FuY2VsIHRoZSBjaGFydCBkYXRhc2V0cyBkcmF3aW5nLlxyXG4gKi9cclxuLyoqXHJcbiAqIEBtZXRob2QgSVBsdWdpbiNhZnRlckRhdGFzZXRzRHJhd1xyXG4gKiBAZGVzYyBDYWxsZWQgYWZ0ZXIgdGhlIGBjaGFydGAgZGF0YXNldHMgaGF2ZSBiZWVuIGRyYXduLiBOb3RlIHRoYXQgdGhpcyBob29rXHJcbiAqIHdpbGwgbm90IGJlIGNhbGxlZCBpZiB0aGUgZGF0YXNldHMgZHJhd2luZyBoYXMgYmVlbiBwcmV2aW91c2x5IGNhbmNlbGxlZC5cclxuICogQHBhcmFtIHtDaGFydC5Db250cm9sbGVyfSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IGVhc2luZ1ZhbHVlIC0gVGhlIGN1cnJlbnQgYW5pbWF0aW9uIHZhbHVlLCBiZXR3ZWVuIDAuMCBhbmQgMS4wLlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cclxuICovXHJcbi8qKlxyXG4gKiBAbWV0aG9kIElQbHVnaW4jYmVmb3JlRGF0YXNldERyYXdcclxuICogQGRlc2MgQ2FsbGVkIGJlZm9yZSBkcmF3aW5nIHRoZSBgY2hhcnRgIGRhdGFzZXQgYXQgdGhlIGdpdmVuIGBhcmdzLmluZGV4YCAoZGF0YXNldHNcclxuICogYXJlIGRyYXduIGluIHRoZSByZXZlcnNlIG9yZGVyKS4gSWYgYW55IHBsdWdpbiByZXR1cm5zIGBmYWxzZWAsIHRoZSBkYXRhc2V0cyBkcmF3aW5nXHJcbiAqIGlzIGNhbmNlbGxlZCB1bnRpbCBhbm90aGVyIGByZW5kZXJgIGlzIHRyaWdnZXJlZC5cclxuICogQHBhcmFtIHtDaGFydH0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIC0gVGhlIGNhbGwgYXJndW1lbnRzLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYXJncy5pbmRleCAtIFRoZSBkYXRhc2V0IGluZGV4LlxyXG4gKiBAcGFyYW0ge09iamVjdH0gYXJncy5tZXRhIC0gVGhlIGRhdGFzZXQgbWV0YWRhdGEuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhcmdzLmVhc2luZ1ZhbHVlIC0gVGhlIGN1cnJlbnQgYW5pbWF0aW9uIHZhbHVlLCBiZXR3ZWVuIDAuMCBhbmQgMS4wLlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cclxuICogQHJldHVybnMge0Jvb2xlYW59IGBmYWxzZWAgdG8gY2FuY2VsIHRoZSBjaGFydCBkYXRhc2V0cyBkcmF3aW5nLlxyXG4gKi9cclxuLyoqXHJcbiAqIEBtZXRob2QgSVBsdWdpbiNhZnRlckRhdGFzZXREcmF3XHJcbiAqIEBkZXNjIENhbGxlZCBhZnRlciB0aGUgYGNoYXJ0YCBkYXRhc2V0cyBhdCB0aGUgZ2l2ZW4gYGFyZ3MuaW5kZXhgIGhhdmUgYmVlbiBkcmF3blxyXG4gKiAoZGF0YXNldHMgYXJlIGRyYXduIGluIHRoZSByZXZlcnNlIG9yZGVyKS4gTm90ZSB0aGF0IHRoaXMgaG9vayB3aWxsIG5vdCBiZSBjYWxsZWRcclxuICogaWYgdGhlIGRhdGFzZXRzIGRyYXdpbmcgaGFzIGJlZW4gcHJldmlvdXNseSBjYW5jZWxsZWQuXHJcbiAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gVGhlIGNoYXJ0IGluc3RhbmNlLlxyXG4gKiBAcGFyYW0ge09iamVjdH0gYXJncyAtIFRoZSBjYWxsIGFyZ3VtZW50cy5cclxuICogQHBhcmFtIHtOdW1iZXJ9IGFyZ3MuaW5kZXggLSBUaGUgZGF0YXNldCBpbmRleC5cclxuICogQHBhcmFtIHtPYmplY3R9IGFyZ3MubWV0YSAtIFRoZSBkYXRhc2V0IG1ldGFkYXRhLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYXJncy5lYXNpbmdWYWx1ZSAtIFRoZSBjdXJyZW50IGFuaW1hdGlvbiB2YWx1ZSwgYmV0d2VlbiAwLjAgYW5kIDEuMC5cclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXHJcbiAqL1xyXG4vKipcclxuICogQG1ldGhvZCBJUGx1Z2luI2JlZm9yZVRvb2x0aXBEcmF3XHJcbiAqIEBkZXNjIENhbGxlZCBiZWZvcmUgZHJhd2luZyB0aGUgYHRvb2x0aXBgLiBJZiBhbnkgcGx1Z2luIHJldHVybnMgYGZhbHNlYCxcclxuICogdGhlIHRvb2x0aXAgZHJhd2luZyBpcyBjYW5jZWxsZWQgdW50aWwgYW5vdGhlciBgcmVuZGVyYCBpcyB0cmlnZ2VyZWQuXHJcbiAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gVGhlIGNoYXJ0IGluc3RhbmNlLlxyXG4gKiBAcGFyYW0ge09iamVjdH0gYXJncyAtIFRoZSBjYWxsIGFyZ3VtZW50cy5cclxuICogQHBhcmFtIHtPYmplY3R9IGFyZ3MudG9vbHRpcCAtIFRoZSB0b29sdGlwLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYXJncy5lYXNpbmdWYWx1ZSAtIFRoZSBjdXJyZW50IGFuaW1hdGlvbiB2YWx1ZSwgYmV0d2VlbiAwLjAgYW5kIDEuMC5cclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBgZmFsc2VgIHRvIGNhbmNlbCB0aGUgY2hhcnQgdG9vbHRpcCBkcmF3aW5nLlxyXG4gKi9cclxuLyoqXHJcbiAqIEBtZXRob2QgSVBsdWdpbiNhZnRlclRvb2x0aXBEcmF3XHJcbiAqIEBkZXNjIENhbGxlZCBhZnRlciBkcmF3aW5nIHRoZSBgdG9vbHRpcGAuIE5vdGUgdGhhdCB0aGlzIGhvb2sgd2lsbCBub3RcclxuICogYmUgY2FsbGVkIGlmIHRoZSB0b29sdGlwIGRyYXdpbmcgaGFzIGJlZW4gcHJldmlvdXNseSBjYW5jZWxsZWQuXHJcbiAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gVGhlIGNoYXJ0IGluc3RhbmNlLlxyXG4gKiBAcGFyYW0ge09iamVjdH0gYXJncyAtIFRoZSBjYWxsIGFyZ3VtZW50cy5cclxuICogQHBhcmFtIHtPYmplY3R9IGFyZ3MudG9vbHRpcCAtIFRoZSB0b29sdGlwLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYXJncy5lYXNpbmdWYWx1ZSAtIFRoZSBjdXJyZW50IGFuaW1hdGlvbiB2YWx1ZSwgYmV0d2VlbiAwLjAgYW5kIDEuMC5cclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXHJcbiAqL1xyXG4vKipcclxuICogQG1ldGhvZCBJUGx1Z2luI2JlZm9yZUV2ZW50XHJcbiAqIEBkZXNjIENhbGxlZCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgc3BlY2lmaWVkIGBldmVudGAuIElmIGFueSBwbHVnaW4gcmV0dXJucyBgZmFsc2VgLFxyXG4gKiB0aGUgZXZlbnQgd2lsbCBiZSBkaXNjYXJkZWQuXHJcbiAqIEBwYXJhbSB7Q2hhcnQuQ29udHJvbGxlcn0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7SUV2ZW50fSBldmVudCAtIFRoZSBldmVudCBvYmplY3QuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIHBsdWdpbiBvcHRpb25zLlxyXG4gKi9cclxuLyoqXHJcbiAqIEBtZXRob2QgSVBsdWdpbiNhZnRlckV2ZW50XHJcbiAqIEBkZXNjIENhbGxlZCBhZnRlciB0aGUgYGV2ZW50YCBoYXMgYmVlbiBjb25zdW1lZC4gTm90ZSB0aGF0IHRoaXMgaG9va1xyXG4gKiB3aWxsIG5vdCBiZSBjYWxsZWQgaWYgdGhlIGBldmVudGAgaGFzIGJlZW4gcHJldmlvdXNseSBkaXNjYXJkZWQuXHJcbiAqIEBwYXJhbSB7Q2hhcnQuQ29udHJvbGxlcn0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7SUV2ZW50fSBldmVudCAtIFRoZSBldmVudCBvYmplY3QuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIHBsdWdpbiBvcHRpb25zLlxyXG4gKi9cclxuLyoqXHJcbiAqIEBtZXRob2QgSVBsdWdpbiNyZXNpemVcclxuICogQGRlc2MgQ2FsbGVkIGFmdGVyIHRoZSBjaGFydCBhcyBiZWVuIHJlc2l6ZWQuXHJcbiAqIEBwYXJhbSB7Q2hhcnQuQ29udHJvbGxlcn0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzaXplIC0gVGhlIG5ldyBjYW52YXMgZGlzcGxheSBzaXplIChlcS4gY2FudmFzLnN0eWxlIHdpZHRoICYgaGVpZ2h0KS5cclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXHJcbiAqL1xyXG4vKipcclxuICogQG1ldGhvZCBJUGx1Z2luI2Rlc3Ryb3lcclxuICogQGRlc2MgQ2FsbGVkIGFmdGVyIHRoZSBjaGFydCBhcyBiZWVuIGRlc3Ryb3llZC5cclxuICogQHBhcmFtIHtDaGFydC5Db250cm9sbGVyfSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXHJcbiAqL1xyXG5cclxufSx7XCIyNlwiOjI2LFwiNDZcIjo0Nn1dLDMzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgyNik7XHJcbnZhciBFbGVtZW50ID0gcmVxdWlyZSgyNyk7XHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Nik7XHJcbnZhciBUaWNrcyA9IHJlcXVpcmUoMzUpO1xyXG5cclxuZGVmYXVsdHMuX3NldCgnc2NhbGUnLCB7XHJcblx0ZGlzcGxheTogdHJ1ZSxcclxuXHRwb3NpdGlvbjogJ2xlZnQnLFxyXG5cdG9mZnNldDogZmFsc2UsXHJcblxyXG5cdC8vIGdyaWQgbGluZSBzZXR0aW5nc1xyXG5cdGdyaWRMaW5lczoge1xyXG5cdFx0ZGlzcGxheTogdHJ1ZSxcclxuXHRcdGNvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjEpJyxcclxuXHRcdGxpbmVXaWR0aDogMSxcclxuXHRcdGRyYXdCb3JkZXI6IHRydWUsXHJcblx0XHRkcmF3T25DaGFydEFyZWE6IHRydWUsXHJcblx0XHRkcmF3VGlja3M6IHRydWUsXHJcblx0XHR0aWNrTWFya0xlbmd0aDogMTAsXHJcblx0XHR6ZXJvTGluZVdpZHRoOiAxLFxyXG5cdFx0emVyb0xpbmVDb2xvcjogJ3JnYmEoMCwwLDAsMC4yNSknLFxyXG5cdFx0emVyb0xpbmVCb3JkZXJEYXNoOiBbXSxcclxuXHRcdHplcm9MaW5lQm9yZGVyRGFzaE9mZnNldDogMC4wLFxyXG5cdFx0b2Zmc2V0R3JpZExpbmVzOiBmYWxzZSxcclxuXHRcdGJvcmRlckRhc2g6IFtdLFxyXG5cdFx0Ym9yZGVyRGFzaE9mZnNldDogMC4wXHJcblx0fSxcclxuXHJcblx0Ly8gc2NhbGUgbGFiZWxcclxuXHRzY2FsZUxhYmVsOiB7XHJcblx0XHQvLyBkaXNwbGF5IHByb3BlcnR5XHJcblx0XHRkaXNwbGF5OiBmYWxzZSxcclxuXHJcblx0XHQvLyBhY3R1YWwgbGFiZWxcclxuXHRcdGxhYmVsU3RyaW5nOiAnJyxcclxuXHJcblx0XHQvLyBsaW5lIGhlaWdodFxyXG5cdFx0bGluZUhlaWdodDogMS4yLFxyXG5cclxuXHRcdC8vIHRvcC9ib3R0b20gcGFkZGluZ1xyXG5cdFx0cGFkZGluZzoge1xyXG5cdFx0XHR0b3A6IDQsXHJcblx0XHRcdGJvdHRvbTogNFxyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdC8vIGxhYmVsIHNldHRpbmdzXHJcblx0dGlja3M6IHtcclxuXHRcdGJlZ2luQXRaZXJvOiBmYWxzZSxcclxuXHRcdG1pblJvdGF0aW9uOiAwLFxyXG5cdFx0bWF4Um90YXRpb246IDUwLFxyXG5cdFx0bWlycm9yOiBmYWxzZSxcclxuXHRcdHBhZGRpbmc6IDAsXHJcblx0XHRyZXZlcnNlOiBmYWxzZSxcclxuXHRcdGRpc3BsYXk6IHRydWUsXHJcblx0XHRhdXRvU2tpcDogdHJ1ZSxcclxuXHRcdGF1dG9Ta2lwUGFkZGluZzogMCxcclxuXHRcdGxhYmVsT2Zmc2V0OiAwLFxyXG5cdFx0Ly8gV2UgcGFzcyB0aHJvdWdoIGFycmF5cyB0byBiZSByZW5kZXJlZCBhcyBtdWx0aWxpbmUgbGFiZWxzLCB3ZSBjb252ZXJ0IE90aGVycyB0byBzdHJpbmdzIGhlcmUuXHJcblx0XHRjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy52YWx1ZXMsXHJcblx0XHRtaW5vcjoge30sXHJcblx0XHRtYWpvcjoge31cclxuXHR9XHJcbn0pO1xyXG5cclxuZnVuY3Rpb24gbGFiZWxzRnJvbVRpY2tzKHRpY2tzKSB7XHJcblx0dmFyIGxhYmVscyA9IFtdO1xyXG5cdHZhciBpLCBpbGVuO1xyXG5cclxuXHRmb3IgKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRsYWJlbHMucHVzaCh0aWNrc1tpXS5sYWJlbCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbGFiZWxzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRMaW5lVmFsdWUoc2NhbGUsIGluZGV4LCBvZmZzZXRHcmlkTGluZXMpIHtcclxuXHR2YXIgbGluZVZhbHVlID0gc2NhbGUuZ2V0UGl4ZWxGb3JUaWNrKGluZGV4KTtcclxuXHJcblx0aWYgKG9mZnNldEdyaWRMaW5lcykge1xyXG5cdFx0aWYgKGluZGV4ID09PSAwKSB7XHJcblx0XHRcdGxpbmVWYWx1ZSAtPSAoc2NhbGUuZ2V0UGl4ZWxGb3JUaWNrKDEpIC0gbGluZVZhbHVlKSAvIDI7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsaW5lVmFsdWUgLT0gKGxpbmVWYWx1ZSAtIHNjYWxlLmdldFBpeGVsRm9yVGljayhpbmRleCAtIDEpKSAvIDI7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBsaW5lVmFsdWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXB1dGVUZXh0U2l6ZShjb250ZXh0LCB0aWNrLCBmb250KSB7XHJcblx0cmV0dXJuIGhlbHBlcnMuaXNBcnJheSh0aWNrKSA/XHJcblx0XHRoZWxwZXJzLmxvbmdlc3RUZXh0KGNvbnRleHQsIGZvbnQsIHRpY2spIDpcclxuXHRcdGNvbnRleHQubWVhc3VyZVRleHQodGljaykud2lkdGg7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlRm9udE9wdGlvbnMob3B0aW9ucykge1xyXG5cdHZhciB2YWx1ZU9yRGVmYXVsdCA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQ7XHJcblx0dmFyIGdsb2JhbERlZmF1bHRzID0gZGVmYXVsdHMuZ2xvYmFsO1xyXG5cdHZhciBzaXplID0gdmFsdWVPckRlZmF1bHQob3B0aW9ucy5mb250U2l6ZSwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRTaXplKTtcclxuXHR2YXIgc3R5bGUgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLmZvbnRTdHlsZSwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRTdHlsZSk7XHJcblx0dmFyIGZhbWlseSA9IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuZm9udEZhbWlseSwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRGYW1pbHkpO1xyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0c2l6ZTogc2l6ZSxcclxuXHRcdHN0eWxlOiBzdHlsZSxcclxuXHRcdGZhbWlseTogZmFtaWx5LFxyXG5cdFx0Zm9udDogaGVscGVycy5mb250U3RyaW5nKHNpemUsIHN0eWxlLCBmYW1pbHkpXHJcblx0fTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VMaW5lSGVpZ2h0KG9wdGlvbnMpIHtcclxuXHRyZXR1cm4gaGVscGVycy5vcHRpb25zLnRvTGluZUhlaWdodChcclxuXHRcdGhlbHBlcnMudmFsdWVPckRlZmF1bHQob3B0aW9ucy5saW5lSGVpZ2h0LCAxLjIpLFxyXG5cdFx0aGVscGVycy52YWx1ZU9yRGVmYXVsdChvcHRpb25zLmZvbnRTaXplLCBkZWZhdWx0cy5nbG9iYWwuZGVmYXVsdEZvbnRTaXplKSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRWxlbWVudC5leHRlbmQoe1xyXG5cdC8qKlxyXG5cdCAqIEdldCB0aGUgcGFkZGluZyBuZWVkZWQgZm9yIHRoZSBzY2FsZVxyXG5cdCAqIEBtZXRob2QgZ2V0UGFkZGluZ1xyXG5cdCAqIEBwcml2YXRlXHJcblx0ICogQHJldHVybnMge1BhZGRpbmd9IHRoZSBuZWNlc3NhcnkgcGFkZGluZ1xyXG5cdCAqL1xyXG5cdGdldFBhZGRpbmc6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGxlZnQ6IG1lLnBhZGRpbmdMZWZ0IHx8IDAsXHJcblx0XHRcdHRvcDogbWUucGFkZGluZ1RvcCB8fCAwLFxyXG5cdFx0XHRyaWdodDogbWUucGFkZGluZ1JpZ2h0IHx8IDAsXHJcblx0XHRcdGJvdHRvbTogbWUucGFkZGluZ0JvdHRvbSB8fCAwXHJcblx0XHR9O1xyXG5cdH0sXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgdGhlIHNjYWxlIHRpY2sgb2JqZWN0cyAoe2xhYmVsLCBtYWpvcn0pXHJcblx0ICogQHNpbmNlIDIuN1xyXG5cdCAqL1xyXG5cdGdldFRpY2tzOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLl90aWNrcztcclxuXHR9LFxyXG5cclxuXHQvLyBUaGVzZSBtZXRob2RzIGFyZSBvcmRlcmVkIGJ5IGxpZmVjeWxlLiBVdGlsaXRpZXMgdGhlbiBmb2xsb3cuXHJcblx0Ly8gQW55IGZ1bmN0aW9uIGRlZmluZWQgaGVyZSBpcyBpbmhlcml0ZWQgYnkgYWxsIHNjYWxlIHR5cGVzLlxyXG5cdC8vIEFueSBmdW5jdGlvbiBjYW4gYmUgZXh0ZW5kZWQgYnkgdGhlIHNjYWxlIHR5cGVcclxuXHJcblx0bWVyZ2VUaWNrc09wdGlvbnM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIHRpY2tzID0gdGhpcy5vcHRpb25zLnRpY2tzO1xyXG5cdFx0aWYgKHRpY2tzLm1pbm9yID09PSBmYWxzZSkge1xyXG5cdFx0XHR0aWNrcy5taW5vciA9IHtcclxuXHRcdFx0XHRkaXNwbGF5OiBmYWxzZVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRpY2tzLm1ham9yID09PSBmYWxzZSkge1xyXG5cdFx0XHR0aWNrcy5tYWpvciA9IHtcclxuXHRcdFx0XHRkaXNwbGF5OiBmYWxzZVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdFx0Zm9yICh2YXIga2V5IGluIHRpY2tzKSB7XHJcblx0XHRcdGlmIChrZXkgIT09ICdtYWpvcicgJiYga2V5ICE9PSAnbWlub3InKSB7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiB0aWNrcy5taW5vcltrZXldID09PSAndW5kZWZpbmVkJykge1xyXG5cdFx0XHRcdFx0dGlja3MubWlub3Jba2V5XSA9IHRpY2tzW2tleV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0eXBlb2YgdGlja3MubWFqb3Jba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuXHRcdFx0XHRcdHRpY2tzLm1ham9yW2tleV0gPSB0aWNrc1trZXldO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0sXHJcblx0YmVmb3JlVXBkYXRlOiBmdW5jdGlvbigpIHtcclxuXHRcdGhlbHBlcnMuY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZVVwZGF0ZSwgW3RoaXNdKTtcclxuXHR9LFxyXG5cclxuXHR1cGRhdGU6IGZ1bmN0aW9uKG1heFdpZHRoLCBtYXhIZWlnaHQsIG1hcmdpbnMpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHR2YXIgaSwgaWxlbiwgbGFiZWxzLCBsYWJlbCwgdGlja3MsIHRpY2s7XHJcblxyXG5cdFx0Ly8gVXBkYXRlIExpZmVjeWNsZSAtIFByb2JhYmx5IGRvbid0IHdhbnQgdG8gZXZlciBleHRlbmQgb3Igb3ZlcndyaXRlIHRoaXMgZnVuY3Rpb24gOylcclxuXHRcdG1lLmJlZm9yZVVwZGF0ZSgpO1xyXG5cclxuXHRcdC8vIEFic29yYiB0aGUgbWFzdGVyIG1lYXN1cmVtZW50c1xyXG5cdFx0bWUubWF4V2lkdGggPSBtYXhXaWR0aDtcclxuXHRcdG1lLm1heEhlaWdodCA9IG1heEhlaWdodDtcclxuXHRcdG1lLm1hcmdpbnMgPSBoZWxwZXJzLmV4dGVuZCh7XHJcblx0XHRcdGxlZnQ6IDAsXHJcblx0XHRcdHJpZ2h0OiAwLFxyXG5cdFx0XHR0b3A6IDAsXHJcblx0XHRcdGJvdHRvbTogMFxyXG5cdFx0fSwgbWFyZ2lucyk7XHJcblx0XHRtZS5sb25nZXN0VGV4dENhY2hlID0gbWUubG9uZ2VzdFRleHRDYWNoZSB8fCB7fTtcclxuXHJcblx0XHQvLyBEaW1lbnNpb25zXHJcblx0XHRtZS5iZWZvcmVTZXREaW1lbnNpb25zKCk7XHJcblx0XHRtZS5zZXREaW1lbnNpb25zKCk7XHJcblx0XHRtZS5hZnRlclNldERpbWVuc2lvbnMoKTtcclxuXHJcblx0XHQvLyBEYXRhIG1pbi9tYXhcclxuXHRcdG1lLmJlZm9yZURhdGFMaW1pdHMoKTtcclxuXHRcdG1lLmRldGVybWluZURhdGFMaW1pdHMoKTtcclxuXHRcdG1lLmFmdGVyRGF0YUxpbWl0cygpO1xyXG5cclxuXHRcdC8vIFRpY2tzIC0gYHRoaXMudGlja3NgIGlzIG5vdyBERVBSRUNBVEVEIVxyXG5cdFx0Ly8gSW50ZXJuYWwgdGlja3MgYXJlIG5vdyBzdG9yZWQgYXMgb2JqZWN0cyBpbiB0aGUgUFJJVkFURSBgdGhpcy5fdGlja3NgIG1lbWJlclxyXG5cdFx0Ly8gYW5kIG11c3Qgbm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gb3V0c2lkZSB0aGlzIGNsYXNzLiBgdGhpcy50aWNrc2AgYmVpbmdcclxuXHRcdC8vIGFyb3VuZCBmb3IgbG9uZyB0aW1lIGFuZCBub3QgbWFya2VkIGFzIHByaXZhdGUsIHdlIGNhbid0IGNoYW5nZSBpdHMgc3RydWN0dXJlXHJcblx0XHQvLyB3aXRob3V0IHVuZXhwZWN0ZWQgYnJlYWtpbmcgY2hhbmdlcy4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzY2FsZSB0aWNrcyxcclxuXHRcdC8vIHVzZSBzY2FsZS5nZXRUaWNrcygpIGluc3RlYWQuXHJcblxyXG5cdFx0bWUuYmVmb3JlQnVpbGRUaWNrcygpO1xyXG5cclxuXHRcdC8vIE5ldyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHJldHVybiBhbiBhcnJheSBvZiBvYmplY3RzIGJ1dCBmb3IgQkFDS1dBUkQgQ09NUEFULFxyXG5cdFx0Ly8gd2Ugc3RpbGwgc3VwcG9ydCBubyByZXR1cm4gKGB0aGlzLnRpY2tzYCBpbnRlcm5hbGx5IHNldCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kKS5cclxuXHRcdHRpY2tzID0gbWUuYnVpbGRUaWNrcygpIHx8IFtdO1xyXG5cclxuXHRcdG1lLmFmdGVyQnVpbGRUaWNrcygpO1xyXG5cclxuXHRcdG1lLmJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbigpO1xyXG5cclxuXHRcdC8vIE5ldyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHJldHVybiB0aGUgZm9ybWF0dGVkIHRpY2sgbGFiZWxzIGJ1dCBmb3IgQkFDS1dBUkRcclxuXHRcdC8vIENPTVBBVCwgd2Ugc3RpbGwgc3VwcG9ydCBubyByZXR1cm4gKGB0aGlzLnRpY2tzYCBpbnRlcm5hbGx5IGNoYW5nZWQgYnkgY2FsbGluZ1xyXG5cdFx0Ly8gdGhpcyBtZXRob2QgYW5kIHN1cHBvc2VkIHRvIGNvbnRhaW4gb25seSBzdHJpbmcgdmFsdWVzKS5cclxuXHRcdGxhYmVscyA9IG1lLmNvbnZlcnRUaWNrc1RvTGFiZWxzKHRpY2tzKSB8fCBtZS50aWNrcztcclxuXHJcblx0XHRtZS5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbigpO1xyXG5cclxuXHRcdG1lLnRpY2tzID0gbGFiZWxzOyAgIC8vIEJBQ0tXQVJEIENPTVBBVElCSUxJVFlcclxuXHJcblx0XHQvLyBJTVBPUlRBTlQ6IGZyb20gdGhpcyBwb2ludCwgd2UgY29uc2lkZXIgdGhhdCBgdGhpcy50aWNrc2Agd2lsbCBORVZFUiBjaGFuZ2UhXHJcblxyXG5cdFx0Ly8gQkFDS1dBUkQgQ09NUEFUOiBzeW5jaHJvbml6ZSBgX3RpY2tzYCB3aXRoIGxhYmVscyAoc28gcG90ZW50aWFsbHkgYHRoaXMudGlja3NgKVxyXG5cdFx0Zm9yIChpID0gMCwgaWxlbiA9IGxhYmVscy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdFx0bGFiZWwgPSBsYWJlbHNbaV07XHJcblx0XHRcdHRpY2sgPSB0aWNrc1tpXTtcclxuXHRcdFx0aWYgKCF0aWNrKSB7XHJcblx0XHRcdFx0dGlja3MucHVzaCh0aWNrID0ge1xyXG5cdFx0XHRcdFx0bGFiZWw6IGxhYmVsLFxyXG5cdFx0XHRcdFx0bWFqb3I6IGZhbHNlXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGljay5sYWJlbCA9IGxhYmVsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0bWUuX3RpY2tzID0gdGlja3M7XHJcblxyXG5cdFx0Ly8gVGljayBSb3RhdGlvblxyXG5cdFx0bWUuYmVmb3JlQ2FsY3VsYXRlVGlja1JvdGF0aW9uKCk7XHJcblx0XHRtZS5jYWxjdWxhdGVUaWNrUm90YXRpb24oKTtcclxuXHRcdG1lLmFmdGVyQ2FsY3VsYXRlVGlja1JvdGF0aW9uKCk7XHJcblx0XHQvLyBGaXRcclxuXHRcdG1lLmJlZm9yZUZpdCgpO1xyXG5cdFx0bWUuZml0KCk7XHJcblx0XHRtZS5hZnRlckZpdCgpO1xyXG5cdFx0Ly9cclxuXHRcdG1lLmFmdGVyVXBkYXRlKCk7XHJcblxyXG5cdFx0cmV0dXJuIG1lLm1pblNpemU7XHJcblxyXG5cdH0sXHJcblx0YWZ0ZXJVcGRhdGU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0aGVscGVycy5jYWxsYmFjayh0aGlzLm9wdGlvbnMuYWZ0ZXJVcGRhdGUsIFt0aGlzXSk7XHJcblx0fSxcclxuXHJcblx0Ly9cclxuXHJcblx0YmVmb3JlU2V0RGltZW5zaW9uczogZnVuY3Rpb24oKSB7XHJcblx0XHRoZWxwZXJzLmNhbGxiYWNrKHRoaXMub3B0aW9ucy5iZWZvcmVTZXREaW1lbnNpb25zLCBbdGhpc10pO1xyXG5cdH0sXHJcblx0c2V0RGltZW5zaW9uczogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0Ly8gU2V0IHRoZSB1bmNvbnN0cmFpbmVkIGRpbWVuc2lvbiBiZWZvcmUgbGFiZWwgcm90YXRpb25cclxuXHRcdGlmIChtZS5pc0hvcml6b250YWwoKSkge1xyXG5cdFx0XHQvLyBSZXNldCBwb3NpdGlvbiBiZWZvcmUgY2FsY3VsYXRpbmcgcm90YXRpb25cclxuXHRcdFx0bWUud2lkdGggPSBtZS5tYXhXaWR0aDtcclxuXHRcdFx0bWUubGVmdCA9IDA7XHJcblx0XHRcdG1lLnJpZ2h0ID0gbWUud2lkdGg7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtZS5oZWlnaHQgPSBtZS5tYXhIZWlnaHQ7XHJcblxyXG5cdFx0XHQvLyBSZXNldCBwb3NpdGlvbiBiZWZvcmUgY2FsY3VsYXRpbmcgcm90YXRpb25cclxuXHRcdFx0bWUudG9wID0gMDtcclxuXHRcdFx0bWUuYm90dG9tID0gbWUuaGVpZ2h0O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFJlc2V0IHBhZGRpbmdcclxuXHRcdG1lLnBhZGRpbmdMZWZ0ID0gMDtcclxuXHRcdG1lLnBhZGRpbmdUb3AgPSAwO1xyXG5cdFx0bWUucGFkZGluZ1JpZ2h0ID0gMDtcclxuXHRcdG1lLnBhZGRpbmdCb3R0b20gPSAwO1xyXG5cdH0sXHJcblx0YWZ0ZXJTZXREaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcclxuXHRcdGhlbHBlcnMuY2FsbGJhY2sodGhpcy5vcHRpb25zLmFmdGVyU2V0RGltZW5zaW9ucywgW3RoaXNdKTtcclxuXHR9LFxyXG5cclxuXHQvLyBEYXRhIGxpbWl0c1xyXG5cdGJlZm9yZURhdGFMaW1pdHM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0aGVscGVycy5jYWxsYmFjayh0aGlzLm9wdGlvbnMuYmVmb3JlRGF0YUxpbWl0cywgW3RoaXNdKTtcclxuXHR9LFxyXG5cdGRldGVybWluZURhdGFMaW1pdHM6IGhlbHBlcnMubm9vcCxcclxuXHRhZnRlckRhdGFMaW1pdHM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0aGVscGVycy5jYWxsYmFjayh0aGlzLm9wdGlvbnMuYWZ0ZXJEYXRhTGltaXRzLCBbdGhpc10pO1xyXG5cdH0sXHJcblxyXG5cdC8vXHJcblx0YmVmb3JlQnVpbGRUaWNrczogZnVuY3Rpb24oKSB7XHJcblx0XHRoZWxwZXJzLmNhbGxiYWNrKHRoaXMub3B0aW9ucy5iZWZvcmVCdWlsZFRpY2tzLCBbdGhpc10pO1xyXG5cdH0sXHJcblx0YnVpbGRUaWNrczogaGVscGVycy5ub29wLFxyXG5cdGFmdGVyQnVpbGRUaWNrczogZnVuY3Rpb24oKSB7XHJcblx0XHRoZWxwZXJzLmNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlckJ1aWxkVGlja3MsIFt0aGlzXSk7XHJcblx0fSxcclxuXHJcblx0YmVmb3JlVGlja1RvTGFiZWxDb252ZXJzaW9uOiBmdW5jdGlvbigpIHtcclxuXHRcdGhlbHBlcnMuY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbiwgW3RoaXNdKTtcclxuXHR9LFxyXG5cdGNvbnZlcnRUaWNrc1RvTGFiZWxzOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHQvLyBDb252ZXJ0IHRpY2tzIHRvIHN0cmluZ3NcclxuXHRcdHZhciB0aWNrT3B0cyA9IG1lLm9wdGlvbnMudGlja3M7XHJcblx0XHRtZS50aWNrcyA9IG1lLnRpY2tzLm1hcCh0aWNrT3B0cy51c2VyQ2FsbGJhY2sgfHwgdGlja09wdHMuY2FsbGJhY2ssIHRoaXMpO1xyXG5cdH0sXHJcblx0YWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb246IGZ1bmN0aW9uKCkge1xyXG5cdFx0aGVscGVycy5jYWxsYmFjayh0aGlzLm9wdGlvbnMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24sIFt0aGlzXSk7XHJcblx0fSxcclxuXHJcblx0Ly9cclxuXHJcblx0YmVmb3JlQ2FsY3VsYXRlVGlja1JvdGF0aW9uOiBmdW5jdGlvbigpIHtcclxuXHRcdGhlbHBlcnMuY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZUNhbGN1bGF0ZVRpY2tSb3RhdGlvbiwgW3RoaXNdKTtcclxuXHR9LFxyXG5cdGNhbGN1bGF0ZVRpY2tSb3RhdGlvbjogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0dmFyIGNvbnRleHQgPSBtZS5jdHg7XHJcblx0XHR2YXIgdGlja09wdHMgPSBtZS5vcHRpb25zLnRpY2tzO1xyXG5cdFx0dmFyIGxhYmVscyA9IGxhYmVsc0Zyb21UaWNrcyhtZS5fdGlja3MpO1xyXG5cclxuXHRcdC8vIEdldCB0aGUgd2lkdGggb2YgZWFjaCBncmlkIGJ5IGNhbGN1bGF0aW5nIHRoZSBkaWZmZXJlbmNlXHJcblx0XHQvLyBiZXR3ZWVuIHggb2Zmc2V0cyBiZXR3ZWVuIDAgYW5kIDEuXHJcblx0XHR2YXIgdGlja0ZvbnQgPSBwYXJzZUZvbnRPcHRpb25zKHRpY2tPcHRzKTtcclxuXHRcdGNvbnRleHQuZm9udCA9IHRpY2tGb250LmZvbnQ7XHJcblxyXG5cdFx0dmFyIGxhYmVsUm90YXRpb24gPSB0aWNrT3B0cy5taW5Sb3RhdGlvbiB8fCAwO1xyXG5cclxuXHRcdGlmIChsYWJlbHMubGVuZ3RoICYmIG1lLm9wdGlvbnMuZGlzcGxheSAmJiBtZS5pc0hvcml6b250YWwoKSkge1xyXG5cdFx0XHR2YXIgb3JpZ2luYWxMYWJlbFdpZHRoID0gaGVscGVycy5sb25nZXN0VGV4dChjb250ZXh0LCB0aWNrRm9udC5mb250LCBsYWJlbHMsIG1lLmxvbmdlc3RUZXh0Q2FjaGUpO1xyXG5cdFx0XHR2YXIgbGFiZWxXaWR0aCA9IG9yaWdpbmFsTGFiZWxXaWR0aDtcclxuXHRcdFx0dmFyIGNvc1JvdGF0aW9uLCBzaW5Sb3RhdGlvbjtcclxuXHJcblx0XHRcdC8vIEFsbG93IDMgcGl4ZWxzIHgyIHBhZGRpbmcgZWl0aGVyIHNpZGUgZm9yIGxhYmVsIHJlYWRhYmlsaXR5XHJcblx0XHRcdHZhciB0aWNrV2lkdGggPSBtZS5nZXRQaXhlbEZvclRpY2soMSkgLSBtZS5nZXRQaXhlbEZvclRpY2soMCkgLSA2O1xyXG5cclxuXHRcdFx0Ly8gTWF4IGxhYmVsIHJvdGF0aW9uIGNhbiBiZSBzZXQgb3IgZGVmYXVsdCB0byA5MCAtIGFsc28gYWN0IGFzIGEgbG9vcCBjb3VudGVyXHJcblx0XHRcdHdoaWxlIChsYWJlbFdpZHRoID4gdGlja1dpZHRoICYmIGxhYmVsUm90YXRpb24gPCB0aWNrT3B0cy5tYXhSb3RhdGlvbikge1xyXG5cdFx0XHRcdHZhciBhbmdsZVJhZGlhbnMgPSBoZWxwZXJzLnRvUmFkaWFucyhsYWJlbFJvdGF0aW9uKTtcclxuXHRcdFx0XHRjb3NSb3RhdGlvbiA9IE1hdGguY29zKGFuZ2xlUmFkaWFucyk7XHJcblx0XHRcdFx0c2luUm90YXRpb24gPSBNYXRoLnNpbihhbmdsZVJhZGlhbnMpO1xyXG5cclxuXHRcdFx0XHRpZiAoc2luUm90YXRpb24gKiBvcmlnaW5hbExhYmVsV2lkdGggPiBtZS5tYXhIZWlnaHQpIHtcclxuXHRcdFx0XHRcdC8vIGdvIGJhY2sgb25lIHN0ZXBcclxuXHRcdFx0XHRcdGxhYmVsUm90YXRpb24tLTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bGFiZWxSb3RhdGlvbisrO1xyXG5cdFx0XHRcdGxhYmVsV2lkdGggPSBjb3NSb3RhdGlvbiAqIG9yaWdpbmFsTGFiZWxXaWR0aDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdG1lLmxhYmVsUm90YXRpb24gPSBsYWJlbFJvdGF0aW9uO1xyXG5cdH0sXHJcblx0YWZ0ZXJDYWxjdWxhdGVUaWNrUm90YXRpb246IGZ1bmN0aW9uKCkge1xyXG5cdFx0aGVscGVycy5jYWxsYmFjayh0aGlzLm9wdGlvbnMuYWZ0ZXJDYWxjdWxhdGVUaWNrUm90YXRpb24sIFt0aGlzXSk7XHJcblx0fSxcclxuXHJcblx0Ly9cclxuXHJcblx0YmVmb3JlRml0OiBmdW5jdGlvbigpIHtcclxuXHRcdGhlbHBlcnMuY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZUZpdCwgW3RoaXNdKTtcclxuXHR9LFxyXG5cdGZpdDogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0Ly8gUmVzZXRcclxuXHRcdHZhciBtaW5TaXplID0gbWUubWluU2l6ZSA9IHtcclxuXHRcdFx0d2lkdGg6IDAsXHJcblx0XHRcdGhlaWdodDogMFxyXG5cdFx0fTtcclxuXHJcblx0XHR2YXIgbGFiZWxzID0gbGFiZWxzRnJvbVRpY2tzKG1lLl90aWNrcyk7XHJcblxyXG5cdFx0dmFyIG9wdHMgPSBtZS5vcHRpb25zO1xyXG5cdFx0dmFyIHRpY2tPcHRzID0gb3B0cy50aWNrcztcclxuXHRcdHZhciBzY2FsZUxhYmVsT3B0cyA9IG9wdHMuc2NhbGVMYWJlbDtcclxuXHRcdHZhciBncmlkTGluZU9wdHMgPSBvcHRzLmdyaWRMaW5lcztcclxuXHRcdHZhciBkaXNwbGF5ID0gb3B0cy5kaXNwbGF5O1xyXG5cdFx0dmFyIGlzSG9yaXpvbnRhbCA9IG1lLmlzSG9yaXpvbnRhbCgpO1xyXG5cclxuXHRcdHZhciB0aWNrRm9udCA9IHBhcnNlRm9udE9wdGlvbnModGlja09wdHMpO1xyXG5cdFx0dmFyIHRpY2tNYXJrTGVuZ3RoID0gb3B0cy5ncmlkTGluZXMudGlja01hcmtMZW5ndGg7XHJcblxyXG5cdFx0Ly8gV2lkdGhcclxuXHRcdGlmIChpc0hvcml6b250YWwpIHtcclxuXHRcdFx0Ly8gc3VidHJhY3QgdGhlIG1hcmdpbnMgdG8gbGluZSB1cCB3aXRoIHRoZSBjaGFydEFyZWEgaWYgd2UgYXJlIGEgZnVsbCB3aWR0aCBzY2FsZVxyXG5cdFx0XHRtaW5TaXplLndpZHRoID0gbWUuaXNGdWxsV2lkdGgoKSA/IG1lLm1heFdpZHRoIC0gbWUubWFyZ2lucy5sZWZ0IC0gbWUubWFyZ2lucy5yaWdodCA6IG1lLm1heFdpZHRoO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bWluU2l6ZS53aWR0aCA9IGRpc3BsYXkgJiYgZ3JpZExpbmVPcHRzLmRyYXdUaWNrcyA/IHRpY2tNYXJrTGVuZ3RoIDogMDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBoZWlnaHRcclxuXHRcdGlmIChpc0hvcml6b250YWwpIHtcclxuXHRcdFx0bWluU2l6ZS5oZWlnaHQgPSBkaXNwbGF5ICYmIGdyaWRMaW5lT3B0cy5kcmF3VGlja3MgPyB0aWNrTWFya0xlbmd0aCA6IDA7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtaW5TaXplLmhlaWdodCA9IG1lLm1heEhlaWdodDsgLy8gZmlsbCBhbGwgdGhlIGhlaWdodFxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFyZSB3ZSBzaG93aW5nIGEgdGl0bGUgZm9yIHRoZSBzY2FsZT9cclxuXHRcdGlmIChzY2FsZUxhYmVsT3B0cy5kaXNwbGF5ICYmIGRpc3BsYXkpIHtcclxuXHRcdFx0dmFyIHNjYWxlTGFiZWxMaW5lSGVpZ2h0ID0gcGFyc2VMaW5lSGVpZ2h0KHNjYWxlTGFiZWxPcHRzKTtcclxuXHRcdFx0dmFyIHNjYWxlTGFiZWxQYWRkaW5nID0gaGVscGVycy5vcHRpb25zLnRvUGFkZGluZyhzY2FsZUxhYmVsT3B0cy5wYWRkaW5nKTtcclxuXHRcdFx0dmFyIGRlbHRhSGVpZ2h0ID0gc2NhbGVMYWJlbExpbmVIZWlnaHQgKyBzY2FsZUxhYmVsUGFkZGluZy5oZWlnaHQ7XHJcblxyXG5cdFx0XHRpZiAoaXNIb3Jpem9udGFsKSB7XHJcblx0XHRcdFx0bWluU2l6ZS5oZWlnaHQgKz0gZGVsdGFIZWlnaHQ7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0bWluU2l6ZS53aWR0aCArPSBkZWx0YUhlaWdodDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIERvbid0IGJvdGhlciBmaXR0aW5nIHRoZSB0aWNrcyBpZiB3ZSBhcmUgbm90IHNob3dpbmcgdGhlbVxyXG5cdFx0aWYgKHRpY2tPcHRzLmRpc3BsYXkgJiYgZGlzcGxheSkge1xyXG5cdFx0XHR2YXIgbGFyZ2VzdFRleHRXaWR0aCA9IGhlbHBlcnMubG9uZ2VzdFRleHQobWUuY3R4LCB0aWNrRm9udC5mb250LCBsYWJlbHMsIG1lLmxvbmdlc3RUZXh0Q2FjaGUpO1xyXG5cdFx0XHR2YXIgdGFsbGVzdExhYmVsSGVpZ2h0SW5MaW5lcyA9IGhlbHBlcnMubnVtYmVyT2ZMYWJlbExpbmVzKGxhYmVscyk7XHJcblx0XHRcdHZhciBsaW5lU3BhY2UgPSB0aWNrRm9udC5zaXplICogMC41O1xyXG5cdFx0XHR2YXIgdGlja1BhZGRpbmcgPSBtZS5vcHRpb25zLnRpY2tzLnBhZGRpbmc7XHJcblxyXG5cdFx0XHRpZiAoaXNIb3Jpem9udGFsKSB7XHJcblx0XHRcdFx0Ly8gQSBob3Jpem9udGFsIGF4aXMgaXMgbW9yZSBjb25zdHJhaW5lZCBieSB0aGUgaGVpZ2h0LlxyXG5cdFx0XHRcdG1lLmxvbmdlc3RMYWJlbFdpZHRoID0gbGFyZ2VzdFRleHRXaWR0aDtcclxuXHJcblx0XHRcdFx0dmFyIGFuZ2xlUmFkaWFucyA9IGhlbHBlcnMudG9SYWRpYW5zKG1lLmxhYmVsUm90YXRpb24pO1xyXG5cdFx0XHRcdHZhciBjb3NSb3RhdGlvbiA9IE1hdGguY29zKGFuZ2xlUmFkaWFucyk7XHJcblx0XHRcdFx0dmFyIHNpblJvdGF0aW9uID0gTWF0aC5zaW4oYW5nbGVSYWRpYW5zKTtcclxuXHJcblx0XHRcdFx0Ly8gVE9ETyAtIGltcHJvdmUgdGhpcyBjYWxjdWxhdGlvblxyXG5cdFx0XHRcdHZhciBsYWJlbEhlaWdodCA9IChzaW5Sb3RhdGlvbiAqIGxhcmdlc3RUZXh0V2lkdGgpXHJcblx0XHRcdFx0XHQrICh0aWNrRm9udC5zaXplICogdGFsbGVzdExhYmVsSGVpZ2h0SW5MaW5lcylcclxuXHRcdFx0XHRcdCsgKGxpbmVTcGFjZSAqICh0YWxsZXN0TGFiZWxIZWlnaHRJbkxpbmVzIC0gMSkpXHJcblx0XHRcdFx0XHQrIGxpbmVTcGFjZTsgLy8gcGFkZGluZ1xyXG5cclxuXHRcdFx0XHRtaW5TaXplLmhlaWdodCA9IE1hdGgubWluKG1lLm1heEhlaWdodCwgbWluU2l6ZS5oZWlnaHQgKyBsYWJlbEhlaWdodCArIHRpY2tQYWRkaW5nKTtcclxuXHJcblx0XHRcdFx0bWUuY3R4LmZvbnQgPSB0aWNrRm9udC5mb250O1xyXG5cdFx0XHRcdHZhciBmaXJzdExhYmVsV2lkdGggPSBjb21wdXRlVGV4dFNpemUobWUuY3R4LCBsYWJlbHNbMF0sIHRpY2tGb250LmZvbnQpO1xyXG5cdFx0XHRcdHZhciBsYXN0TGFiZWxXaWR0aCA9IGNvbXB1dGVUZXh0U2l6ZShtZS5jdHgsIGxhYmVsc1tsYWJlbHMubGVuZ3RoIC0gMV0sIHRpY2tGb250LmZvbnQpO1xyXG5cclxuXHRcdFx0XHQvLyBFbnN1cmUgdGhhdCBvdXIgdGlja3MgYXJlIGFsd2F5cyBpbnNpZGUgdGhlIGNhbnZhcy4gV2hlbiByb3RhdGVkLCB0aWNrcyBhcmUgcmlnaHQgYWxpZ25lZFxyXG5cdFx0XHRcdC8vIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHJpZ2h0IHBhZGRpbmcgaXMgZG9taW5hdGVkIGJ5IHRoZSBmb250IGhlaWdodFxyXG5cdFx0XHRcdGlmIChtZS5sYWJlbFJvdGF0aW9uICE9PSAwKSB7XHJcblx0XHRcdFx0XHRtZS5wYWRkaW5nTGVmdCA9IG9wdHMucG9zaXRpb24gPT09ICdib3R0b20nID8gKGNvc1JvdGF0aW9uICogZmlyc3RMYWJlbFdpZHRoKSArIDMgOiAoY29zUm90YXRpb24gKiBsaW5lU3BhY2UpICsgMzsgLy8gYWRkIDMgcHggdG8gbW92ZSBhd2F5IGZyb20gY2FudmFzIGVkZ2VzXHJcblx0XHRcdFx0XHRtZS5wYWRkaW5nUmlnaHQgPSBvcHRzLnBvc2l0aW9uID09PSAnYm90dG9tJyA/IChjb3NSb3RhdGlvbiAqIGxpbmVTcGFjZSkgKyAzIDogKGNvc1JvdGF0aW9uICogbGFzdExhYmVsV2lkdGgpICsgMztcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0bWUucGFkZGluZ0xlZnQgPSBmaXJzdExhYmVsV2lkdGggLyAyICsgMzsgLy8gYWRkIDMgcHggdG8gbW92ZSBhd2F5IGZyb20gY2FudmFzIGVkZ2VzXHJcblx0XHRcdFx0XHRtZS5wYWRkaW5nUmlnaHQgPSBsYXN0TGFiZWxXaWR0aCAvIDIgKyAzO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBBIHZlcnRpY2FsIGF4aXMgaXMgbW9yZSBjb25zdHJhaW5lZCBieSB0aGUgd2lkdGguIExhYmVscyBhcmUgdGhlXHJcblx0XHRcdFx0Ly8gZG9taW5hbnQgZmFjdG9yIGhlcmUsIHNvIGdldCB0aGF0IGxlbmd0aCBmaXJzdCBhbmQgYWNjb3VudCBmb3IgcGFkZGluZ1xyXG5cdFx0XHRcdGlmICh0aWNrT3B0cy5taXJyb3IpIHtcclxuXHRcdFx0XHRcdGxhcmdlc3RUZXh0V2lkdGggPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyB1c2UgbGluZVNwYWNlIGZvciBjb25zaXN0ZW5jeSB3aXRoIGhvcml6b250YWwgYXhpc1xyXG5cdFx0XHRcdFx0Ly8gdGlja1BhZGRpbmcgaXMgbm90IGltcGxlbWVudGVkIGZvciBob3Jpem9udGFsXHJcblx0XHRcdFx0XHRsYXJnZXN0VGV4dFdpZHRoICs9IHRpY2tQYWRkaW5nICsgbGluZVNwYWNlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bWluU2l6ZS53aWR0aCA9IE1hdGgubWluKG1lLm1heFdpZHRoLCBtaW5TaXplLndpZHRoICsgbGFyZ2VzdFRleHRXaWR0aCk7XHJcblxyXG5cdFx0XHRcdG1lLnBhZGRpbmdUb3AgPSB0aWNrRm9udC5zaXplIC8gMjtcclxuXHRcdFx0XHRtZS5wYWRkaW5nQm90dG9tID0gdGlja0ZvbnQuc2l6ZSAvIDI7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRtZS5oYW5kbGVNYXJnaW5zKCk7XHJcblxyXG5cdFx0bWUud2lkdGggPSBtaW5TaXplLndpZHRoO1xyXG5cdFx0bWUuaGVpZ2h0ID0gbWluU2l6ZS5oZWlnaHQ7XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlIG1hcmdpbnMgYW5kIHBhZGRpbmcgaW50ZXJhY3Rpb25zXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRoYW5kbGVNYXJnaW5zOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRpZiAobWUubWFyZ2lucykge1xyXG5cdFx0XHRtZS5wYWRkaW5nTGVmdCA9IE1hdGgubWF4KG1lLnBhZGRpbmdMZWZ0IC0gbWUubWFyZ2lucy5sZWZ0LCAwKTtcclxuXHRcdFx0bWUucGFkZGluZ1RvcCA9IE1hdGgubWF4KG1lLnBhZGRpbmdUb3AgLSBtZS5tYXJnaW5zLnRvcCwgMCk7XHJcblx0XHRcdG1lLnBhZGRpbmdSaWdodCA9IE1hdGgubWF4KG1lLnBhZGRpbmdSaWdodCAtIG1lLm1hcmdpbnMucmlnaHQsIDApO1xyXG5cdFx0XHRtZS5wYWRkaW5nQm90dG9tID0gTWF0aC5tYXgobWUucGFkZGluZ0JvdHRvbSAtIG1lLm1hcmdpbnMuYm90dG9tLCAwKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRhZnRlckZpdDogZnVuY3Rpb24oKSB7XHJcblx0XHRoZWxwZXJzLmNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlckZpdCwgW3RoaXNdKTtcclxuXHR9LFxyXG5cclxuXHQvLyBTaGFyZWQgTWV0aG9kc1xyXG5cdGlzSG9yaXpvbnRhbDogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uID09PSAndG9wJyB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb24gPT09ICdib3R0b20nO1xyXG5cdH0sXHJcblx0aXNGdWxsV2lkdGg6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuICh0aGlzLm9wdGlvbnMuZnVsbFdpZHRoKTtcclxuXHR9LFxyXG5cclxuXHQvLyBHZXQgdGhlIGNvcnJlY3QgdmFsdWUuIE5hTiBiYWQgaW5wdXRzLCBJZiB0aGUgdmFsdWUgdHlwZSBpcyBvYmplY3QgZ2V0IHRoZSB4IG9yIHkgYmFzZWQgb24gd2hldGhlciB3ZSBhcmUgaG9yaXpvbnRhbCBvciBub3RcclxuXHRnZXRSaWdodFZhbHVlOiBmdW5jdGlvbihyYXdWYWx1ZSkge1xyXG5cdFx0Ly8gTnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcyBmaXJzdFxyXG5cdFx0aWYgKGhlbHBlcnMuaXNOdWxsT3JVbmRlZihyYXdWYWx1ZSkpIHtcclxuXHRcdFx0cmV0dXJuIE5hTjtcclxuXHRcdH1cclxuXHRcdC8vIGlzTmFOKG9iamVjdCkgcmV0dXJucyB0cnVlLCBzbyBtYWtlIHN1cmUgTmFOIGlzIGNoZWNraW5nIGZvciBhIG51bWJlcjsgRGlzY2FyZCBJbmZpbml0ZSB2YWx1ZXNcclxuXHRcdGlmICh0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInICYmICFpc0Zpbml0ZShyYXdWYWx1ZSkpIHtcclxuXHRcdFx0cmV0dXJuIE5hTjtcclxuXHRcdH1cclxuXHRcdC8vIElmIGl0IGlzIGluIGZhY3QgYW4gb2JqZWN0LCBkaXZlIGluIG9uZSBtb3JlIGxldmVsXHJcblx0XHRpZiAocmF3VmFsdWUpIHtcclxuXHRcdFx0aWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcclxuXHRcdFx0XHRpZiAocmF3VmFsdWUueCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRSaWdodFZhbHVlKHJhd1ZhbHVlLngpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIGlmIChyYXdWYWx1ZS55ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRSaWdodFZhbHVlKHJhd1ZhbHVlLnkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVmFsdWUgaXMgZ29vZCwgcmV0dXJuIGl0XHJcblx0XHRyZXR1cm4gcmF3VmFsdWU7XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogVXNlZCB0byBnZXQgdGhlIHZhbHVlIHRvIGRpc3BsYXkgaW4gdGhlIHRvb2x0aXAgZm9yIHRoZSBkYXRhIGF0IHRoZSBnaXZlbiBpbmRleFxyXG5cdCAqIEBwYXJhbSBpbmRleFxyXG5cdCAqIEBwYXJhbSBkYXRhc2V0SW5kZXhcclxuXHQgKi9cclxuXHRnZXRMYWJlbEZvckluZGV4OiBoZWxwZXJzLm5vb3AsXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBnaXZlbiBkYXRhIHBvaW50LiBWYWx1ZSBjYW4gZWl0aGVyIGJlIGFuIGluZGV4IG9yIGEgbnVtZXJpY2FsIHZhbHVlXHJcblx0ICogVGhlIGNvb3JkaW5hdGUgKDAsIDApIGlzIGF0IHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgY2FudmFzXHJcblx0ICogQHBhcmFtIHZhbHVlXHJcblx0ICogQHBhcmFtIGluZGV4XHJcblx0ICogQHBhcmFtIGRhdGFzZXRJbmRleFxyXG5cdCAqL1xyXG5cdGdldFBpeGVsRm9yVmFsdWU6IGhlbHBlcnMubm9vcCxcclxuXHJcblx0LyoqXHJcblx0ICogVXNlZCB0byBnZXQgdGhlIGRhdGEgdmFsdWUgZnJvbSBhIGdpdmVuIHBpeGVsLiBUaGlzIGlzIHRoZSBpbnZlcnNlIG9mIGdldFBpeGVsRm9yVmFsdWVcclxuXHQgKiBUaGUgY29vcmRpbmF0ZSAoMCwgMCkgaXMgYXQgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBjYW52YXNcclxuXHQgKiBAcGFyYW0gcGl4ZWxcclxuXHQgKi9cclxuXHRnZXRWYWx1ZUZvclBpeGVsOiBoZWxwZXJzLm5vb3AsXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSB0aWNrIGF0IHRoZSBnaXZlbiBpbmRleFxyXG5cdCAqIFRoZSBjb29yZGluYXRlICgwLCAwKSBpcyBhdCB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIGNhbnZhc1xyXG5cdCAqL1xyXG5cdGdldFBpeGVsRm9yVGljazogZnVuY3Rpb24oaW5kZXgpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHR2YXIgb2Zmc2V0ID0gbWUub3B0aW9ucy5vZmZzZXQ7XHJcblx0XHRpZiAobWUuaXNIb3Jpem9udGFsKCkpIHtcclxuXHRcdFx0dmFyIGlubmVyV2lkdGggPSBtZS53aWR0aCAtIChtZS5wYWRkaW5nTGVmdCArIG1lLnBhZGRpbmdSaWdodCk7XHJcblx0XHRcdHZhciB0aWNrV2lkdGggPSBpbm5lcldpZHRoIC8gTWF0aC5tYXgoKG1lLl90aWNrcy5sZW5ndGggLSAob2Zmc2V0ID8gMCA6IDEpKSwgMSk7XHJcblx0XHRcdHZhciBwaXhlbCA9ICh0aWNrV2lkdGggKiBpbmRleCkgKyBtZS5wYWRkaW5nTGVmdDtcclxuXHJcblx0XHRcdGlmIChvZmZzZXQpIHtcclxuXHRcdFx0XHRwaXhlbCArPSB0aWNrV2lkdGggLyAyO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgZmluYWxWYWwgPSBtZS5sZWZ0ICsgTWF0aC5yb3VuZChwaXhlbCk7XHJcblx0XHRcdGZpbmFsVmFsICs9IG1lLmlzRnVsbFdpZHRoKCkgPyBtZS5tYXJnaW5zLmxlZnQgOiAwO1xyXG5cdFx0XHRyZXR1cm4gZmluYWxWYWw7XHJcblx0XHR9XHJcblx0XHR2YXIgaW5uZXJIZWlnaHQgPSBtZS5oZWlnaHQgLSAobWUucGFkZGluZ1RvcCArIG1lLnBhZGRpbmdCb3R0b20pO1xyXG5cdFx0cmV0dXJuIG1lLnRvcCArIChpbmRleCAqIChpbm5lckhlaWdodCAvIChtZS5fdGlja3MubGVuZ3RoIC0gMSkpKTtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBVdGlsaXR5IGZvciBnZXR0aW5nIHRoZSBwaXhlbCBsb2NhdGlvbiBvZiBhIHBlcmNlbnRhZ2Ugb2Ygc2NhbGVcclxuXHQgKiBUaGUgY29vcmRpbmF0ZSAoMCwgMCkgaXMgYXQgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBjYW52YXNcclxuXHQgKi9cclxuXHRnZXRQaXhlbEZvckRlY2ltYWw6IGZ1bmN0aW9uKGRlY2ltYWwpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRpZiAobWUuaXNIb3Jpem9udGFsKCkpIHtcclxuXHRcdFx0dmFyIGlubmVyV2lkdGggPSBtZS53aWR0aCAtIChtZS5wYWRkaW5nTGVmdCArIG1lLnBhZGRpbmdSaWdodCk7XHJcblx0XHRcdHZhciB2YWx1ZU9mZnNldCA9IChpbm5lcldpZHRoICogZGVjaW1hbCkgKyBtZS5wYWRkaW5nTGVmdDtcclxuXHJcblx0XHRcdHZhciBmaW5hbFZhbCA9IG1lLmxlZnQgKyBNYXRoLnJvdW5kKHZhbHVlT2Zmc2V0KTtcclxuXHRcdFx0ZmluYWxWYWwgKz0gbWUuaXNGdWxsV2lkdGgoKSA/IG1lLm1hcmdpbnMubGVmdCA6IDA7XHJcblx0XHRcdHJldHVybiBmaW5hbFZhbDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtZS50b3AgKyAoZGVjaW1hbCAqIG1lLmhlaWdodCk7XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyB0aGUgcGl4ZWwgZm9yIHRoZSBtaW5pbXVtIGNoYXJ0IHZhbHVlXHJcblx0ICogVGhlIGNvb3JkaW5hdGUgKDAsIDApIGlzIGF0IHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgY2FudmFzXHJcblx0ICovXHJcblx0Z2V0QmFzZVBpeGVsOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLmdldFBpeGVsRm9yVmFsdWUodGhpcy5nZXRCYXNlVmFsdWUoKSk7XHJcblx0fSxcclxuXHJcblx0Z2V0QmFzZVZhbHVlOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHR2YXIgbWluID0gbWUubWluO1xyXG5cdFx0dmFyIG1heCA9IG1lLm1heDtcclxuXHJcblx0XHRyZXR1cm4gbWUuYmVnaW5BdFplcm8gPyAwIDpcclxuXHRcdFx0bWluIDwgMCAmJiBtYXggPCAwID8gbWF4IDpcclxuXHRcdFx0bWluID4gMCAmJiBtYXggPiAwID8gbWluIDpcclxuXHRcdFx0MDtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIGEgc3Vic2V0IG9mIHRpY2tzIHRvIGJlIHBsb3R0ZWQgdG8gYXZvaWQgb3ZlcmxhcHBpbmcgbGFiZWxzLlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0X2F1dG9Ta2lwOiBmdW5jdGlvbih0aWNrcykge1xyXG5cdFx0dmFyIHNraXBSYXRpbztcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHR2YXIgaXNIb3Jpem9udGFsID0gbWUuaXNIb3Jpem9udGFsKCk7XHJcblx0XHR2YXIgb3B0aW9uVGlja3MgPSBtZS5vcHRpb25zLnRpY2tzLm1pbm9yO1xyXG5cdFx0dmFyIHRpY2tDb3VudCA9IHRpY2tzLmxlbmd0aDtcclxuXHRcdHZhciBsYWJlbFJvdGF0aW9uUmFkaWFucyA9IGhlbHBlcnMudG9SYWRpYW5zKG1lLmxhYmVsUm90YXRpb24pO1xyXG5cdFx0dmFyIGNvc1JvdGF0aW9uID0gTWF0aC5jb3MobGFiZWxSb3RhdGlvblJhZGlhbnMpO1xyXG5cdFx0dmFyIGxvbmdlc3RSb3RhdGVkTGFiZWwgPSBtZS5sb25nZXN0TGFiZWxXaWR0aCAqIGNvc1JvdGF0aW9uO1xyXG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xyXG5cdFx0dmFyIGksIHRpY2ssIHNob3VsZFNraXA7XHJcblxyXG5cdFx0Ly8gZmlndXJlIG91dCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZ3JpZGxpbmVzIHRvIHNob3dcclxuXHRcdHZhciBtYXhUaWNrcztcclxuXHRcdGlmIChvcHRpb25UaWNrcy5tYXhUaWNrc0xpbWl0KSB7XHJcblx0XHRcdG1heFRpY2tzID0gb3B0aW9uVGlja3MubWF4VGlja3NMaW1pdDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNIb3Jpem9udGFsKSB7XHJcblx0XHRcdHNraXBSYXRpbyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0aWYgKChsb25nZXN0Um90YXRlZExhYmVsICsgb3B0aW9uVGlja3MuYXV0b1NraXBQYWRkaW5nKSAqIHRpY2tDb3VudCA+IChtZS53aWR0aCAtIChtZS5wYWRkaW5nTGVmdCArIG1lLnBhZGRpbmdSaWdodCkpKSB7XHJcblx0XHRcdFx0c2tpcFJhdGlvID0gMSArIE1hdGguZmxvb3IoKChsb25nZXN0Um90YXRlZExhYmVsICsgb3B0aW9uVGlja3MuYXV0b1NraXBQYWRkaW5nKSAqIHRpY2tDb3VudCkgLyAobWUud2lkdGggLSAobWUucGFkZGluZ0xlZnQgKyBtZS5wYWRkaW5nUmlnaHQpKSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGlmIHRoZXkgZGVmaW5lZCBhIG1heCBudW1iZXIgb2Ygb3B0aW9uVGlja3MsXHJcblx0XHRcdC8vIGluY3JlYXNlIHNraXBSYXRpbyB1bnRpbCB0aGF0IG51bWJlciBpcyBtZXRcclxuXHRcdFx0aWYgKG1heFRpY2tzICYmIHRpY2tDb3VudCA+IG1heFRpY2tzKSB7XHJcblx0XHRcdFx0c2tpcFJhdGlvID0gTWF0aC5tYXgoc2tpcFJhdGlvLCBNYXRoLmZsb29yKHRpY2tDb3VudCAvIG1heFRpY2tzKSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgdGlja0NvdW50OyBpKyspIHtcclxuXHRcdFx0dGljayA9IHRpY2tzW2ldO1xyXG5cclxuXHRcdFx0Ly8gU2luY2Ugd2UgYWx3YXlzIHNob3cgdGhlIGxhc3QgdGljayx3ZSBuZWVkIG1heSBuZWVkIHRvIGhpZGUgdGhlIGxhc3Qgc2hvd24gb25lIGJlZm9yZVxyXG5cdFx0XHRzaG91bGRTa2lwID0gKHNraXBSYXRpbyA+IDEgJiYgaSAlIHNraXBSYXRpbyA+IDApIHx8IChpICUgc2tpcFJhdGlvID09PSAwICYmIGkgKyBza2lwUmF0aW8gPj0gdGlja0NvdW50KTtcclxuXHRcdFx0aWYgKHNob3VsZFNraXAgJiYgaSAhPT0gdGlja0NvdW50IC0gMSkge1xyXG5cdFx0XHRcdC8vIGxlYXZlIHRpY2sgaW4gcGxhY2UgYnV0IG1ha2Ugc3VyZSBpdCdzIG5vdCBkaXNwbGF5ZWQgKCM0NjM1KVxyXG5cdFx0XHRcdGRlbGV0ZSB0aWNrLmxhYmVsO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJlc3VsdC5wdXNoKHRpY2spO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9LFxyXG5cclxuXHQvLyBBY3R1YWxseSBkcmF3IHRoZSBzY2FsZSBvbiB0aGUgY2FudmFzXHJcblx0Ly8gQHBhcmFtIHtyZWN0YW5nbGV9IGNoYXJ0QXJlYSA6IHRoZSBhcmVhIG9mIHRoZSBjaGFydCB0byBkcmF3IGZ1bGwgZ3JpZCBsaW5lcyBvblxyXG5cdGRyYXc6IGZ1bmN0aW9uKGNoYXJ0QXJlYSkge1xyXG5cdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdHZhciBvcHRpb25zID0gbWUub3B0aW9ucztcclxuXHRcdGlmICghb3B0aW9ucy5kaXNwbGF5KSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgY29udGV4dCA9IG1lLmN0eDtcclxuXHRcdHZhciBnbG9iYWxEZWZhdWx0cyA9IGRlZmF1bHRzLmdsb2JhbDtcclxuXHRcdHZhciBvcHRpb25UaWNrcyA9IG9wdGlvbnMudGlja3MubWlub3I7XHJcblx0XHR2YXIgb3B0aW9uTWFqb3JUaWNrcyA9IG9wdGlvbnMudGlja3MubWFqb3IgfHwgb3B0aW9uVGlja3M7XHJcblx0XHR2YXIgZ3JpZExpbmVzID0gb3B0aW9ucy5ncmlkTGluZXM7XHJcblx0XHR2YXIgc2NhbGVMYWJlbCA9IG9wdGlvbnMuc2NhbGVMYWJlbDtcclxuXHJcblx0XHR2YXIgaXNSb3RhdGVkID0gbWUubGFiZWxSb3RhdGlvbiAhPT0gMDtcclxuXHRcdHZhciBpc0hvcml6b250YWwgPSBtZS5pc0hvcml6b250YWwoKTtcclxuXHJcblx0XHR2YXIgdGlja3MgPSBvcHRpb25UaWNrcy5hdXRvU2tpcCA/IG1lLl9hdXRvU2tpcChtZS5nZXRUaWNrcygpKSA6IG1lLmdldFRpY2tzKCk7XHJcblx0XHR2YXIgdGlja0ZvbnRDb2xvciA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQob3B0aW9uVGlja3MuZm9udENvbG9yLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udENvbG9yKTtcclxuXHRcdHZhciB0aWNrRm9udCA9IHBhcnNlRm9udE9wdGlvbnMob3B0aW9uVGlja3MpO1xyXG5cdFx0dmFyIG1ham9yVGlja0ZvbnRDb2xvciA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQob3B0aW9uTWFqb3JUaWNrcy5mb250Q29sb3IsIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250Q29sb3IpO1xyXG5cdFx0dmFyIG1ham9yVGlja0ZvbnQgPSBwYXJzZUZvbnRPcHRpb25zKG9wdGlvbk1ham9yVGlja3MpO1xyXG5cclxuXHRcdHZhciB0bCA9IGdyaWRMaW5lcy5kcmF3VGlja3MgPyBncmlkTGluZXMudGlja01hcmtMZW5ndGggOiAwO1xyXG5cclxuXHRcdHZhciBzY2FsZUxhYmVsRm9udENvbG9yID0gaGVscGVycy52YWx1ZU9yRGVmYXVsdChzY2FsZUxhYmVsLmZvbnRDb2xvciwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRDb2xvcik7XHJcblx0XHR2YXIgc2NhbGVMYWJlbEZvbnQgPSBwYXJzZUZvbnRPcHRpb25zKHNjYWxlTGFiZWwpO1xyXG5cdFx0dmFyIHNjYWxlTGFiZWxQYWRkaW5nID0gaGVscGVycy5vcHRpb25zLnRvUGFkZGluZyhzY2FsZUxhYmVsLnBhZGRpbmcpO1xyXG5cdFx0dmFyIGxhYmVsUm90YXRpb25SYWRpYW5zID0gaGVscGVycy50b1JhZGlhbnMobWUubGFiZWxSb3RhdGlvbik7XHJcblxyXG5cdFx0dmFyIGl0ZW1zVG9EcmF3ID0gW107XHJcblxyXG5cdFx0dmFyIGF4aXNXaWR0aCA9IG1lLm9wdGlvbnMuZ3JpZExpbmVzLmxpbmVXaWR0aDtcclxuXHRcdHZhciB4VGlja1N0YXJ0ID0gb3B0aW9ucy5wb3NpdGlvbiA9PT0gJ3JpZ2h0JyA/IG1lLmxlZnQgOiBtZS5yaWdodCAtIGF4aXNXaWR0aCAtIHRsO1xyXG5cdFx0dmFyIHhUaWNrRW5kID0gb3B0aW9ucy5wb3NpdGlvbiA9PT0gJ3JpZ2h0JyA/IG1lLmxlZnQgKyB0bCA6IG1lLnJpZ2h0O1xyXG5cdFx0dmFyIHlUaWNrU3RhcnQgPSBvcHRpb25zLnBvc2l0aW9uID09PSAnYm90dG9tJyA/IG1lLnRvcCArIGF4aXNXaWR0aCA6IG1lLmJvdHRvbSAtIHRsIC0gYXhpc1dpZHRoO1xyXG5cdFx0dmFyIHlUaWNrRW5kID0gb3B0aW9ucy5wb3NpdGlvbiA9PT0gJ2JvdHRvbScgPyBtZS50b3AgKyBheGlzV2lkdGggKyB0bCA6IG1lLmJvdHRvbSArIGF4aXNXaWR0aDtcclxuXHJcblx0XHRoZWxwZXJzLmVhY2godGlja3MsIGZ1bmN0aW9uKHRpY2ssIGluZGV4KSB7XHJcblx0XHRcdC8vIGF1dG9za2lwcGVyIHNraXBwZWQgdGhpcyB0aWNrICgjNDYzNSlcclxuXHRcdFx0aWYgKGhlbHBlcnMuaXNOdWxsT3JVbmRlZih0aWNrLmxhYmVsKSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIGxhYmVsID0gdGljay5sYWJlbDtcclxuXHRcdFx0dmFyIGxpbmVXaWR0aCwgbGluZUNvbG9yLCBib3JkZXJEYXNoLCBib3JkZXJEYXNoT2Zmc2V0O1xyXG5cdFx0XHRpZiAoaW5kZXggPT09IG1lLnplcm9MaW5lSW5kZXggJiYgb3B0aW9ucy5vZmZzZXQgPT09IGdyaWRMaW5lcy5vZmZzZXRHcmlkTGluZXMpIHtcclxuXHRcdFx0XHQvLyBEcmF3IHRoZSBmaXJzdCBpbmRleCBzcGVjaWFsbHlcclxuXHRcdFx0XHRsaW5lV2lkdGggPSBncmlkTGluZXMuemVyb0xpbmVXaWR0aDtcclxuXHRcdFx0XHRsaW5lQ29sb3IgPSBncmlkTGluZXMuemVyb0xpbmVDb2xvcjtcclxuXHRcdFx0XHRib3JkZXJEYXNoID0gZ3JpZExpbmVzLnplcm9MaW5lQm9yZGVyRGFzaDtcclxuXHRcdFx0XHRib3JkZXJEYXNoT2Zmc2V0ID0gZ3JpZExpbmVzLnplcm9MaW5lQm9yZGVyRGFzaE9mZnNldDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRsaW5lV2lkdGggPSBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChncmlkTGluZXMubGluZVdpZHRoLCBpbmRleCk7XHJcblx0XHRcdFx0bGluZUNvbG9yID0gaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQoZ3JpZExpbmVzLmNvbG9yLCBpbmRleCk7XHJcblx0XHRcdFx0Ym9yZGVyRGFzaCA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQoZ3JpZExpbmVzLmJvcmRlckRhc2gsIGdsb2JhbERlZmF1bHRzLmJvcmRlckRhc2gpO1xyXG5cdFx0XHRcdGJvcmRlckRhc2hPZmZzZXQgPSBoZWxwZXJzLnZhbHVlT3JEZWZhdWx0KGdyaWRMaW5lcy5ib3JkZXJEYXNoT2Zmc2V0LCBnbG9iYWxEZWZhdWx0cy5ib3JkZXJEYXNoT2Zmc2V0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ29tbW9uIHByb3BlcnRpZXNcclxuXHRcdFx0dmFyIHR4MSwgdHkxLCB0eDIsIHR5MiwgeDEsIHkxLCB4MiwgeTIsIGxhYmVsWCwgbGFiZWxZO1xyXG5cdFx0XHR2YXIgdGV4dEFsaWduID0gJ21pZGRsZSc7XHJcblx0XHRcdHZhciB0ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcclxuXHRcdFx0dmFyIHRpY2tQYWRkaW5nID0gb3B0aW9uVGlja3MucGFkZGluZztcclxuXHJcblx0XHRcdGlmIChpc0hvcml6b250YWwpIHtcclxuXHRcdFx0XHR2YXIgbGFiZWxZT2Zmc2V0ID0gdGwgKyB0aWNrUGFkZGluZztcclxuXHJcblx0XHRcdFx0aWYgKG9wdGlvbnMucG9zaXRpb24gPT09ICdib3R0b20nKSB7XHJcblx0XHRcdFx0XHQvLyBib3R0b21cclxuXHRcdFx0XHRcdHRleHRCYXNlbGluZSA9ICFpc1JvdGF0ZWQgPyAndG9wJyA6ICdtaWRkbGUnO1xyXG5cdFx0XHRcdFx0dGV4dEFsaWduID0gIWlzUm90YXRlZCA/ICdjZW50ZXInIDogJ3JpZ2h0JztcclxuXHRcdFx0XHRcdGxhYmVsWSA9IG1lLnRvcCArIGxhYmVsWU9mZnNldDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Ly8gdG9wXHJcblx0XHRcdFx0XHR0ZXh0QmFzZWxpbmUgPSAhaXNSb3RhdGVkID8gJ2JvdHRvbScgOiAnbWlkZGxlJztcclxuXHRcdFx0XHRcdHRleHRBbGlnbiA9ICFpc1JvdGF0ZWQgPyAnY2VudGVyJyA6ICdsZWZ0JztcclxuXHRcdFx0XHRcdGxhYmVsWSA9IG1lLmJvdHRvbSAtIGxhYmVsWU9mZnNldDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHZhciB4TGluZVZhbHVlID0gZ2V0TGluZVZhbHVlKG1lLCBpbmRleCwgZ3JpZExpbmVzLm9mZnNldEdyaWRMaW5lcyAmJiB0aWNrcy5sZW5ndGggPiAxKTtcclxuXHRcdFx0XHRpZiAoeExpbmVWYWx1ZSA8IG1lLmxlZnQpIHtcclxuXHRcdFx0XHRcdGxpbmVDb2xvciA9ICdyZ2JhKDAsMCwwLDApJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0eExpbmVWYWx1ZSArPSBoZWxwZXJzLmFsaWFzUGl4ZWwobGluZVdpZHRoKTtcclxuXHJcblx0XHRcdFx0bGFiZWxYID0gbWUuZ2V0UGl4ZWxGb3JUaWNrKGluZGV4KSArIG9wdGlvblRpY2tzLmxhYmVsT2Zmc2V0OyAvLyB4IHZhbHVlcyBmb3Igb3B0aW9uVGlja3MgKG5lZWQgdG8gY29uc2lkZXIgb2Zmc2V0TGFiZWwgb3B0aW9uKVxyXG5cclxuXHRcdFx0XHR0eDEgPSB0eDIgPSB4MSA9IHgyID0geExpbmVWYWx1ZTtcclxuXHRcdFx0XHR0eTEgPSB5VGlja1N0YXJ0O1xyXG5cdFx0XHRcdHR5MiA9IHlUaWNrRW5kO1xyXG5cdFx0XHRcdHkxID0gY2hhcnRBcmVhLnRvcDtcclxuXHRcdFx0XHR5MiA9IGNoYXJ0QXJlYS5ib3R0b20gKyBheGlzV2lkdGg7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dmFyIGlzTGVmdCA9IG9wdGlvbnMucG9zaXRpb24gPT09ICdsZWZ0JztcclxuXHRcdFx0XHR2YXIgbGFiZWxYT2Zmc2V0O1xyXG5cclxuXHRcdFx0XHRpZiAob3B0aW9uVGlja3MubWlycm9yKSB7XHJcblx0XHRcdFx0XHR0ZXh0QWxpZ24gPSBpc0xlZnQgPyAnbGVmdCcgOiAncmlnaHQnO1xyXG5cdFx0XHRcdFx0bGFiZWxYT2Zmc2V0ID0gdGlja1BhZGRpbmc7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRleHRBbGlnbiA9IGlzTGVmdCA/ICdyaWdodCcgOiAnbGVmdCc7XHJcblx0XHRcdFx0XHRsYWJlbFhPZmZzZXQgPSB0bCArIHRpY2tQYWRkaW5nO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bGFiZWxYID0gaXNMZWZ0ID8gbWUucmlnaHQgLSBsYWJlbFhPZmZzZXQgOiBtZS5sZWZ0ICsgbGFiZWxYT2Zmc2V0O1xyXG5cclxuXHRcdFx0XHR2YXIgeUxpbmVWYWx1ZSA9IGdldExpbmVWYWx1ZShtZSwgaW5kZXgsIGdyaWRMaW5lcy5vZmZzZXRHcmlkTGluZXMgJiYgdGlja3MubGVuZ3RoID4gMSk7XHJcblx0XHRcdFx0aWYgKHlMaW5lVmFsdWUgPCBtZS50b3ApIHtcclxuXHRcdFx0XHRcdGxpbmVDb2xvciA9ICdyZ2JhKDAsMCwwLDApJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0eUxpbmVWYWx1ZSArPSBoZWxwZXJzLmFsaWFzUGl4ZWwobGluZVdpZHRoKTtcclxuXHJcblx0XHRcdFx0bGFiZWxZID0gbWUuZ2V0UGl4ZWxGb3JUaWNrKGluZGV4KSArIG9wdGlvblRpY2tzLmxhYmVsT2Zmc2V0O1xyXG5cclxuXHRcdFx0XHR0eDEgPSB4VGlja1N0YXJ0O1xyXG5cdFx0XHRcdHR4MiA9IHhUaWNrRW5kO1xyXG5cdFx0XHRcdHgxID0gY2hhcnRBcmVhLmxlZnQ7XHJcblx0XHRcdFx0eDIgPSBjaGFydEFyZWEucmlnaHQgKyBheGlzV2lkdGg7XHJcblx0XHRcdFx0dHkxID0gdHkyID0geTEgPSB5MiA9IHlMaW5lVmFsdWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGl0ZW1zVG9EcmF3LnB1c2goe1xyXG5cdFx0XHRcdHR4MTogdHgxLFxyXG5cdFx0XHRcdHR5MTogdHkxLFxyXG5cdFx0XHRcdHR4MjogdHgyLFxyXG5cdFx0XHRcdHR5MjogdHkyLFxyXG5cdFx0XHRcdHgxOiB4MSxcclxuXHRcdFx0XHR5MTogeTEsXHJcblx0XHRcdFx0eDI6IHgyLFxyXG5cdFx0XHRcdHkyOiB5MixcclxuXHRcdFx0XHRsYWJlbFg6IGxhYmVsWCxcclxuXHRcdFx0XHRsYWJlbFk6IGxhYmVsWSxcclxuXHRcdFx0XHRnbFdpZHRoOiBsaW5lV2lkdGgsXHJcblx0XHRcdFx0Z2xDb2xvcjogbGluZUNvbG9yLFxyXG5cdFx0XHRcdGdsQm9yZGVyRGFzaDogYm9yZGVyRGFzaCxcclxuXHRcdFx0XHRnbEJvcmRlckRhc2hPZmZzZXQ6IGJvcmRlckRhc2hPZmZzZXQsXHJcblx0XHRcdFx0cm90YXRpb246IC0xICogbGFiZWxSb3RhdGlvblJhZGlhbnMsXHJcblx0XHRcdFx0bGFiZWw6IGxhYmVsLFxyXG5cdFx0XHRcdG1ham9yOiB0aWNrLm1ham9yLFxyXG5cdFx0XHRcdHRleHRCYXNlbGluZTogdGV4dEJhc2VsaW5lLFxyXG5cdFx0XHRcdHRleHRBbGlnbjogdGV4dEFsaWduXHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gRHJhdyBhbGwgb2YgdGhlIHRpY2sgbGFiZWxzLCB0aWNrIG1hcmtzLCBhbmQgZ3JpZCBsaW5lcyBhdCB0aGUgY29ycmVjdCBwbGFjZXNcclxuXHRcdGhlbHBlcnMuZWFjaChpdGVtc1RvRHJhdywgZnVuY3Rpb24oaXRlbVRvRHJhdykge1xyXG5cdFx0XHRpZiAoZ3JpZExpbmVzLmRpc3BsYXkpIHtcclxuXHRcdFx0XHRjb250ZXh0LnNhdmUoKTtcclxuXHRcdFx0XHRjb250ZXh0LmxpbmVXaWR0aCA9IGl0ZW1Ub0RyYXcuZ2xXaWR0aDtcclxuXHRcdFx0XHRjb250ZXh0LnN0cm9rZVN0eWxlID0gaXRlbVRvRHJhdy5nbENvbG9yO1xyXG5cdFx0XHRcdGlmIChjb250ZXh0LnNldExpbmVEYXNoKSB7XHJcblx0XHRcdFx0XHRjb250ZXh0LnNldExpbmVEYXNoKGl0ZW1Ub0RyYXcuZ2xCb3JkZXJEYXNoKTtcclxuXHRcdFx0XHRcdGNvbnRleHQubGluZURhc2hPZmZzZXQgPSBpdGVtVG9EcmF3LmdsQm9yZGVyRGFzaE9mZnNldDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcblxyXG5cdFx0XHRcdGlmIChncmlkTGluZXMuZHJhd1RpY2tzKSB7XHJcblx0XHRcdFx0XHRjb250ZXh0Lm1vdmVUbyhpdGVtVG9EcmF3LnR4MSwgaXRlbVRvRHJhdy50eTEpO1xyXG5cdFx0XHRcdFx0Y29udGV4dC5saW5lVG8oaXRlbVRvRHJhdy50eDIsIGl0ZW1Ub0RyYXcudHkyKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChncmlkTGluZXMuZHJhd09uQ2hhcnRBcmVhKSB7XHJcblx0XHRcdFx0XHRjb250ZXh0Lm1vdmVUbyhpdGVtVG9EcmF3LngxLCBpdGVtVG9EcmF3LnkxKTtcclxuXHRcdFx0XHRcdGNvbnRleHQubGluZVRvKGl0ZW1Ub0RyYXcueDIsIGl0ZW1Ub0RyYXcueTIpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29udGV4dC5zdHJva2UoKTtcclxuXHRcdFx0XHRjb250ZXh0LnJlc3RvcmUoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKG9wdGlvblRpY2tzLmRpc3BsYXkpIHtcclxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgd2UgZHJhdyB0ZXh0IGluIHRoZSBjb3JyZWN0IGNvbG9yIGFuZCBmb250XHJcblx0XHRcdFx0Y29udGV4dC5zYXZlKCk7XHJcblx0XHRcdFx0Y29udGV4dC50cmFuc2xhdGUoaXRlbVRvRHJhdy5sYWJlbFgsIGl0ZW1Ub0RyYXcubGFiZWxZKTtcclxuXHRcdFx0XHRjb250ZXh0LnJvdGF0ZShpdGVtVG9EcmF3LnJvdGF0aW9uKTtcclxuXHRcdFx0XHRjb250ZXh0LmZvbnQgPSBpdGVtVG9EcmF3Lm1ham9yID8gbWFqb3JUaWNrRm9udC5mb250IDogdGlja0ZvbnQuZm9udDtcclxuXHRcdFx0XHRjb250ZXh0LmZpbGxTdHlsZSA9IGl0ZW1Ub0RyYXcubWFqb3IgPyBtYWpvclRpY2tGb250Q29sb3IgOiB0aWNrRm9udENvbG9yO1xyXG5cdFx0XHRcdGNvbnRleHQudGV4dEJhc2VsaW5lID0gaXRlbVRvRHJhdy50ZXh0QmFzZWxpbmU7XHJcblx0XHRcdFx0Y29udGV4dC50ZXh0QWxpZ24gPSBpdGVtVG9EcmF3LnRleHRBbGlnbjtcclxuXHJcblx0XHRcdFx0dmFyIGxhYmVsID0gaXRlbVRvRHJhdy5sYWJlbDtcclxuXHRcdFx0XHRpZiAoaGVscGVycy5pc0FycmF5KGxhYmVsKSkge1xyXG5cdFx0XHRcdFx0dmFyIGxpbmVDb3VudCA9IGxhYmVsLmxlbmd0aDtcclxuXHRcdFx0XHRcdHZhciBsaW5lSGVpZ2h0ID0gdGlja0ZvbnQuc2l6ZSAqIDEuNTtcclxuXHRcdFx0XHRcdHZhciB5ID0gbWUuaXNIb3Jpem9udGFsKCkgPyAwIDogLWxpbmVIZWlnaHQgKiAobGluZUNvdW50IC0gMSkgLyAyO1xyXG5cclxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGluZUNvdW50OyArK2kpIHtcclxuXHRcdFx0XHRcdFx0Ly8gV2UganVzdCBtYWtlIHN1cmUgdGhlIG11bHRpbGluZSBlbGVtZW50IGlzIGEgc3RyaW5nIGhlcmUuLlxyXG5cdFx0XHRcdFx0XHRjb250ZXh0LmZpbGxUZXh0KCcnICsgbGFiZWxbaV0sIDAsIHkpO1xyXG5cdFx0XHRcdFx0XHQvLyBhcHBseSBzYW1lIGxpbmVTcGFjaW5nIGFzIGNhbGN1bGF0ZWQgQCBMIzMyMFxyXG5cdFx0XHRcdFx0XHR5ICs9IGxpbmVIZWlnaHQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnRleHQuZmlsbFRleHQobGFiZWwsIDAsIDApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb250ZXh0LnJlc3RvcmUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKHNjYWxlTGFiZWwuZGlzcGxheSkge1xyXG5cdFx0XHQvLyBEcmF3IHRoZSBzY2FsZSBsYWJlbFxyXG5cdFx0XHR2YXIgc2NhbGVMYWJlbFg7XHJcblx0XHRcdHZhciBzY2FsZUxhYmVsWTtcclxuXHRcdFx0dmFyIHJvdGF0aW9uID0gMDtcclxuXHRcdFx0dmFyIGhhbGZMaW5lSGVpZ2h0ID0gcGFyc2VMaW5lSGVpZ2h0KHNjYWxlTGFiZWwpIC8gMjtcclxuXHJcblx0XHRcdGlmIChpc0hvcml6b250YWwpIHtcclxuXHRcdFx0XHRzY2FsZUxhYmVsWCA9IG1lLmxlZnQgKyAoKG1lLnJpZ2h0IC0gbWUubGVmdCkgLyAyKTsgLy8gbWlkcG9pbnQgb2YgdGhlIHdpZHRoXHJcblx0XHRcdFx0c2NhbGVMYWJlbFkgPSBvcHRpb25zLnBvc2l0aW9uID09PSAnYm90dG9tJ1xyXG5cdFx0XHRcdFx0PyBtZS5ib3R0b20gLSBoYWxmTGluZUhlaWdodCAtIHNjYWxlTGFiZWxQYWRkaW5nLmJvdHRvbVxyXG5cdFx0XHRcdFx0OiBtZS50b3AgKyBoYWxmTGluZUhlaWdodCArIHNjYWxlTGFiZWxQYWRkaW5nLnRvcDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR2YXIgaXNMZWZ0ID0gb3B0aW9ucy5wb3NpdGlvbiA9PT0gJ2xlZnQnO1xyXG5cdFx0XHRcdHNjYWxlTGFiZWxYID0gaXNMZWZ0XHJcblx0XHRcdFx0XHQ/IG1lLmxlZnQgKyBoYWxmTGluZUhlaWdodCArIHNjYWxlTGFiZWxQYWRkaW5nLnRvcFxyXG5cdFx0XHRcdFx0OiBtZS5yaWdodCAtIGhhbGZMaW5lSGVpZ2h0IC0gc2NhbGVMYWJlbFBhZGRpbmcudG9wO1xyXG5cdFx0XHRcdHNjYWxlTGFiZWxZID0gbWUudG9wICsgKChtZS5ib3R0b20gLSBtZS50b3ApIC8gMik7XHJcblx0XHRcdFx0cm90YXRpb24gPSBpc0xlZnQgPyAtMC41ICogTWF0aC5QSSA6IDAuNSAqIE1hdGguUEk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnRleHQuc2F2ZSgpO1xyXG5cdFx0XHRjb250ZXh0LnRyYW5zbGF0ZShzY2FsZUxhYmVsWCwgc2NhbGVMYWJlbFkpO1xyXG5cdFx0XHRjb250ZXh0LnJvdGF0ZShyb3RhdGlvbik7XHJcblx0XHRcdGNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0XHRcdGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XHJcblx0XHRcdGNvbnRleHQuZmlsbFN0eWxlID0gc2NhbGVMYWJlbEZvbnRDb2xvcjsgLy8gcmVuZGVyIGluIGNvcnJlY3QgY29sb3VyXHJcblx0XHRcdGNvbnRleHQuZm9udCA9IHNjYWxlTGFiZWxGb250LmZvbnQ7XHJcblx0XHRcdGNvbnRleHQuZmlsbFRleHQoc2NhbGVMYWJlbC5sYWJlbFN0cmluZywgMCwgMCk7XHJcblx0XHRcdGNvbnRleHQucmVzdG9yZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChncmlkTGluZXMuZHJhd0JvcmRlcikge1xyXG5cdFx0XHQvLyBEcmF3IHRoZSBsaW5lIGF0IHRoZSBlZGdlIG9mIHRoZSBheGlzXHJcblx0XHRcdGNvbnRleHQubGluZVdpZHRoID0gaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQoZ3JpZExpbmVzLmxpbmVXaWR0aCwgMCk7XHJcblx0XHRcdGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdChncmlkTGluZXMuY29sb3IsIDApO1xyXG5cdFx0XHR2YXIgeDEgPSBtZS5sZWZ0O1xyXG5cdFx0XHR2YXIgeDIgPSBtZS5yaWdodCArIGF4aXNXaWR0aDtcclxuXHRcdFx0dmFyIHkxID0gbWUudG9wO1xyXG5cdFx0XHR2YXIgeTIgPSBtZS5ib3R0b20gKyBheGlzV2lkdGg7XHJcblxyXG5cdFx0XHR2YXIgYWxpYXNQaXhlbCA9IGhlbHBlcnMuYWxpYXNQaXhlbChjb250ZXh0LmxpbmVXaWR0aCk7XHJcblx0XHRcdGlmIChpc0hvcml6b250YWwpIHtcclxuXHRcdFx0XHR5MSA9IHkyID0gb3B0aW9ucy5wb3NpdGlvbiA9PT0gJ3RvcCcgPyBtZS5ib3R0b20gOiBtZS50b3A7XHJcblx0XHRcdFx0eTEgKz0gYWxpYXNQaXhlbDtcclxuXHRcdFx0XHR5MiArPSBhbGlhc1BpeGVsO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHgxID0geDIgPSBvcHRpb25zLnBvc2l0aW9uID09PSAnbGVmdCcgPyBtZS5yaWdodCA6IG1lLmxlZnQ7XHJcblx0XHRcdFx0eDEgKz0gYWxpYXNQaXhlbDtcclxuXHRcdFx0XHR4MiArPSBhbGlhc1BpeGVsO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG5cdFx0XHRjb250ZXh0Lm1vdmVUbyh4MSwgeTEpO1xyXG5cdFx0XHRjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xyXG5cdFx0XHRjb250ZXh0LnN0cm9rZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG59LHtcIjI2XCI6MjYsXCIyN1wiOjI3LFwiMzVcIjozNSxcIjQ2XCI6NDZ9XSwzNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG52YXIgaGVscGVycyA9IHJlcXVpcmUoNDYpO1xyXG52YXIgbGF5b3V0cyA9IHJlcXVpcmUoMzEpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0Ly8gU2NhbGUgcmVnaXN0cmF0aW9uIG9iamVjdC4gRXh0ZW5zaW9ucyBjYW4gcmVnaXN0ZXIgbmV3IHNjYWxlIHR5cGVzIChzdWNoIGFzIGxvZyBvciBEQiBzY2FsZXMpIGFuZCB0aGVuXHJcblx0Ly8gdXNlIHRoZSBuZXcgY2hhcnQgb3B0aW9ucyB0byBncmFiIHRoZSBjb3JyZWN0IHNjYWxlXHJcblx0Y29uc3RydWN0b3JzOiB7fSxcclxuXHQvLyBVc2UgYSByZWdpc3RyYXRpb24gZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gbW92ZSB0byBhbiBFUzYgbWFwIHdoZW4gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gc3VwcG9ydFxyXG5cdC8vIG9sZCBicm93c2Vyc1xyXG5cclxuXHQvLyBTY2FsZSBjb25maWcgZGVmYXVsdHNcclxuXHRkZWZhdWx0czoge30sXHJcblx0cmVnaXN0ZXJTY2FsZVR5cGU6IGZ1bmN0aW9uKHR5cGUsIHNjYWxlQ29uc3RydWN0b3IsIHNjYWxlRGVmYXVsdHMpIHtcclxuXHRcdHRoaXMuY29uc3RydWN0b3JzW3R5cGVdID0gc2NhbGVDb25zdHJ1Y3RvcjtcclxuXHRcdHRoaXMuZGVmYXVsdHNbdHlwZV0gPSBoZWxwZXJzLmNsb25lKHNjYWxlRGVmYXVsdHMpO1xyXG5cdH0sXHJcblx0Z2V0U2NhbGVDb25zdHJ1Y3RvcjogZnVuY3Rpb24odHlwZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3JzLmhhc093blByb3BlcnR5KHR5cGUpID8gdGhpcy5jb25zdHJ1Y3RvcnNbdHlwZV0gOiB1bmRlZmluZWQ7XHJcblx0fSxcclxuXHRnZXRTY2FsZURlZmF1bHRzOiBmdW5jdGlvbih0eXBlKSB7XHJcblx0XHQvLyBSZXR1cm4gdGhlIHNjYWxlIGRlZmF1bHRzIG1lcmdlZCB3aXRoIHRoZSBnbG9iYWwgc2V0dGluZ3Mgc28gdGhhdCB3ZSBhbHdheXMgdXNlIHRoZSBsYXRlc3Qgb25lc1xyXG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdHMuaGFzT3duUHJvcGVydHkodHlwZSkgPyBoZWxwZXJzLm1lcmdlKHt9LCBbZGVmYXVsdHMuc2NhbGUsIHRoaXMuZGVmYXVsdHNbdHlwZV1dKSA6IHt9O1xyXG5cdH0sXHJcblx0dXBkYXRlU2NhbGVEZWZhdWx0czogZnVuY3Rpb24odHlwZSwgYWRkaXRpb25zKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0aWYgKG1lLmRlZmF1bHRzLmhhc093blByb3BlcnR5KHR5cGUpKSB7XHJcblx0XHRcdG1lLmRlZmF1bHRzW3R5cGVdID0gaGVscGVycy5leHRlbmQobWUuZGVmYXVsdHNbdHlwZV0sIGFkZGl0aW9ucyk7XHJcblx0XHR9XHJcblx0fSxcclxuXHRhZGRTY2FsZXNUb0xheW91dDogZnVuY3Rpb24oY2hhcnQpIHtcclxuXHRcdC8vIEFkZHMgZWFjaCBzY2FsZSB0byB0aGUgY2hhcnQuYm94ZXMgYXJyYXkgdG8gYmUgc2l6ZWQgYWNjb3JkaW5nbHlcclxuXHRcdGhlbHBlcnMuZWFjaChjaGFydC5zY2FsZXMsIGZ1bmN0aW9uKHNjYWxlKSB7XHJcblx0XHRcdC8vIFNldCBJTGF5b3V0SXRlbSBwYXJhbWV0ZXJzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxyXG5cdFx0XHRzY2FsZS5mdWxsV2lkdGggPSBzY2FsZS5vcHRpb25zLmZ1bGxXaWR0aDtcclxuXHRcdFx0c2NhbGUucG9zaXRpb24gPSBzY2FsZS5vcHRpb25zLnBvc2l0aW9uO1xyXG5cdFx0XHRzY2FsZS53ZWlnaHQgPSBzY2FsZS5vcHRpb25zLndlaWdodDtcclxuXHRcdFx0bGF5b3V0cy5hZGRCb3goY2hhcnQsIHNjYWxlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufTtcclxuXHJcbn0se1wiMjZcIjoyNixcIjMxXCI6MzEsXCI0NlwiOjQ2fV0sMzU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaGVscGVycyA9IHJlcXVpcmUoNDYpO1xyXG5cclxuLyoqXHJcbiAqIE5hbWVzcGFjZSB0byBob2xkIHN0YXRpYyB0aWNrIGdlbmVyYXRpb24gZnVuY3Rpb25zXHJcbiAqIEBuYW1lc3BhY2UgQ2hhcnQuVGlja3NcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdC8qKlxyXG5cdCAqIE5hbWVzcGFjZSB0byBob2xkIGZvcm1hdHRlcnMgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiB0aWNrc1xyXG5cdCAqIEBuYW1lc3BhY2UgQ2hhcnQuVGlja3MuZm9ybWF0dGVyc1xyXG5cdCAqL1xyXG5cdGZvcm1hdHRlcnM6IHtcclxuXHRcdC8qKlxyXG5cdFx0ICogRm9ybWF0dGVyIGZvciB2YWx1ZSBsYWJlbHNcclxuXHRcdCAqIEBtZXRob2QgQ2hhcnQuVGlja3MuZm9ybWF0dGVycy52YWx1ZXNcclxuXHRcdCAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gZGlzcGxheVxyXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfEFycmF5fSB0aGUgbGFiZWwgdG8gZGlzcGxheVxyXG5cdFx0ICovXHJcblx0XHR2YWx1ZXM6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcblx0XHRcdHJldHVybiBoZWxwZXJzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiAnJyArIHZhbHVlO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEZvcm1hdHRlciBmb3IgbGluZWFyIG51bWVyaWMgdGlja3NcclxuXHRcdCAqIEBtZXRob2QgQ2hhcnQuVGlja3MuZm9ybWF0dGVycy5saW5lYXJcclxuXHRcdCAqIEBwYXJhbSB0aWNrVmFsdWUge051bWJlcn0gdGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZFxyXG5cdFx0ICogQHBhcmFtIGluZGV4IHtOdW1iZXJ9IHRoZSBwb3NpdGlvbiBvZiB0aGUgdGlja1ZhbHVlIHBhcmFtZXRlciBpbiB0aGUgdGlja3MgYXJyYXlcclxuXHRcdCAqIEBwYXJhbSB0aWNrcyB7QXJyYXk8TnVtYmVyPn0gdGhlIGxpc3Qgb2YgdGlja3MgYmVpbmcgY29udmVydGVkXHJcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGlja1ZhbHVlIHBhcmFtZXRlclxyXG5cdFx0ICovXHJcblx0XHRsaW5lYXI6IGZ1bmN0aW9uKHRpY2tWYWx1ZSwgaW5kZXgsIHRpY2tzKSB7XHJcblx0XHRcdC8vIElmIHdlIGhhdmUgbG90cyBvZiB0aWNrcywgZG9uJ3QgdXNlIHRoZSBvbmVzXHJcblx0XHRcdHZhciBkZWx0YSA9IHRpY2tzLmxlbmd0aCA+IDMgPyB0aWNrc1syXSAtIHRpY2tzWzFdIDogdGlja3NbMV0gLSB0aWNrc1swXTtcclxuXHJcblx0XHRcdC8vIElmIHdlIGhhdmUgYSBudW1iZXIgbGlrZSAyLjUgYXMgdGhlIGRlbHRhLCBmaWd1cmUgb3V0IGhvdyBtYW55IGRlY2ltYWwgcGxhY2VzIHdlIG5lZWRcclxuXHRcdFx0aWYgKE1hdGguYWJzKGRlbHRhKSA+IDEpIHtcclxuXHRcdFx0XHRpZiAodGlja1ZhbHVlICE9PSBNYXRoLmZsb29yKHRpY2tWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdC8vIG5vdCBhbiBpbnRlZ2VyXHJcblx0XHRcdFx0XHRkZWx0YSA9IHRpY2tWYWx1ZSAtIE1hdGguZmxvb3IodGlja1ZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBsb2dEZWx0YSA9IGhlbHBlcnMubG9nMTAoTWF0aC5hYnMoZGVsdGEpKTtcclxuXHRcdFx0dmFyIHRpY2tTdHJpbmcgPSAnJztcclxuXHJcblx0XHRcdGlmICh0aWNrVmFsdWUgIT09IDApIHtcclxuXHRcdFx0XHR2YXIgbWF4VGljayA9IE1hdGgubWF4KE1hdGguYWJzKHRpY2tzWzBdKSwgTWF0aC5hYnModGlja3NbdGlja3MubGVuZ3RoIC0gMV0pKTtcclxuXHRcdFx0XHRpZiAobWF4VGljayA8IDFlLTQpIHsgLy8gYWxsIHRpY2tzIGFyZSBzbWFsbCBudW1iZXJzOyB1c2Ugc2NpZW50aWZpYyBub3RhdGlvblxyXG5cdFx0XHRcdFx0dmFyIGxvZ1RpY2sgPSBoZWxwZXJzLmxvZzEwKE1hdGguYWJzKHRpY2tWYWx1ZSkpO1xyXG5cdFx0XHRcdFx0dGlja1N0cmluZyA9IHRpY2tWYWx1ZS50b0V4cG9uZW50aWFsKE1hdGguZmxvb3IobG9nVGljaykgLSBNYXRoLmZsb29yKGxvZ0RlbHRhKSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHZhciBudW1EZWNpbWFsID0gLTEgKiBNYXRoLmZsb29yKGxvZ0RlbHRhKTtcclxuXHRcdFx0XHRcdG51bURlY2ltYWwgPSBNYXRoLm1heChNYXRoLm1pbihudW1EZWNpbWFsLCAyMCksIDApOyAvLyB0b0ZpeGVkIGhhcyBhIG1heCBvZiAyMCBkZWNpbWFsIHBsYWNlc1xyXG5cdFx0XHRcdFx0dGlja1N0cmluZyA9IHRpY2tWYWx1ZS50b0ZpeGVkKG51bURlY2ltYWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aWNrU3RyaW5nID0gJzAnOyAvLyBuZXZlciBzaG93IGRlY2ltYWwgcGxhY2VzIGZvciAwXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0aWNrU3RyaW5nO1xyXG5cdFx0fSxcclxuXHJcblx0XHRsb2dhcml0aG1pYzogZnVuY3Rpb24odGlja1ZhbHVlLCBpbmRleCwgdGlja3MpIHtcclxuXHRcdFx0dmFyIHJlbWFpbiA9IHRpY2tWYWx1ZSAvIChNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihoZWxwZXJzLmxvZzEwKHRpY2tWYWx1ZSkpKSk7XHJcblxyXG5cdFx0XHRpZiAodGlja1ZhbHVlID09PSAwKSB7XHJcblx0XHRcdFx0cmV0dXJuICcwJztcclxuXHRcdFx0fSBlbHNlIGlmIChyZW1haW4gPT09IDEgfHwgcmVtYWluID09PSAyIHx8IHJlbWFpbiA9PT0gNSB8fCBpbmRleCA9PT0gMCB8fCBpbmRleCA9PT0gdGlja3MubGVuZ3RoIC0gMSkge1xyXG5cdFx0XHRcdHJldHVybiB0aWNrVmFsdWUudG9FeHBvbmVudGlhbCgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiAnJztcclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG59LHtcIjQ2XCI6NDZ9XSwzNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG52YXIgRWxlbWVudCA9IHJlcXVpcmUoMjcpO1xyXG52YXIgaGVscGVycyA9IHJlcXVpcmUoNDYpO1xyXG5cclxuZGVmYXVsdHMuX3NldCgnZ2xvYmFsJywge1xyXG5cdHRvb2x0aXBzOiB7XHJcblx0XHRlbmFibGVkOiB0cnVlLFxyXG5cdFx0Y3VzdG9tOiBudWxsLFxyXG5cdFx0bW9kZTogJ25lYXJlc3QnLFxyXG5cdFx0cG9zaXRpb246ICdhdmVyYWdlJyxcclxuXHRcdGludGVyc2VjdDogdHJ1ZSxcclxuXHRcdGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC44KScsXHJcblx0XHR0aXRsZUZvbnRTdHlsZTogJ2JvbGQnLFxyXG5cdFx0dGl0bGVTcGFjaW5nOiAyLFxyXG5cdFx0dGl0bGVNYXJnaW5Cb3R0b206IDYsXHJcblx0XHR0aXRsZUZvbnRDb2xvcjogJyNmZmYnLFxyXG5cdFx0dGl0bGVBbGlnbjogJ2xlZnQnLFxyXG5cdFx0Ym9keVNwYWNpbmc6IDIsXHJcblx0XHRib2R5Rm9udENvbG9yOiAnI2ZmZicsXHJcblx0XHRib2R5QWxpZ246ICdsZWZ0JyxcclxuXHRcdGZvb3RlckZvbnRTdHlsZTogJ2JvbGQnLFxyXG5cdFx0Zm9vdGVyU3BhY2luZzogMixcclxuXHRcdGZvb3Rlck1hcmdpblRvcDogNixcclxuXHRcdGZvb3RlckZvbnRDb2xvcjogJyNmZmYnLFxyXG5cdFx0Zm9vdGVyQWxpZ246ICdsZWZ0JyxcclxuXHRcdHlQYWRkaW5nOiA2LFxyXG5cdFx0eFBhZGRpbmc6IDYsXHJcblx0XHRjYXJldFBhZGRpbmc6IDIsXHJcblx0XHRjYXJldFNpemU6IDUsXHJcblx0XHRjb3JuZXJSYWRpdXM6IDYsXHJcblx0XHRtdWx0aUtleUJhY2tncm91bmQ6ICcjZmZmJyxcclxuXHRcdGRpc3BsYXlDb2xvcnM6IHRydWUsXHJcblx0XHRib3JkZXJDb2xvcjogJ3JnYmEoMCwwLDAsMCknLFxyXG5cdFx0Ym9yZGVyV2lkdGg6IDAsXHJcblx0XHRjYWxsYmFja3M6IHtcclxuXHRcdFx0Ly8gQXJncyBhcmU6ICh0b29sdGlwSXRlbXMsIGRhdGEpXHJcblx0XHRcdGJlZm9yZVRpdGxlOiBoZWxwZXJzLm5vb3AsXHJcblx0XHRcdHRpdGxlOiBmdW5jdGlvbih0b29sdGlwSXRlbXMsIGRhdGEpIHtcclxuXHRcdFx0XHQvLyBQaWNrIGZpcnN0IHhMYWJlbCBmb3Igbm93XHJcblx0XHRcdFx0dmFyIHRpdGxlID0gJyc7XHJcblx0XHRcdFx0dmFyIGxhYmVscyA9IGRhdGEubGFiZWxzO1xyXG5cdFx0XHRcdHZhciBsYWJlbENvdW50ID0gbGFiZWxzID8gbGFiZWxzLmxlbmd0aCA6IDA7XHJcblxyXG5cdFx0XHRcdGlmICh0b29sdGlwSXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0dmFyIGl0ZW0gPSB0b29sdGlwSXRlbXNbMF07XHJcblxyXG5cdFx0XHRcdFx0aWYgKGl0ZW0ueExhYmVsKSB7XHJcblx0XHRcdFx0XHRcdHRpdGxlID0gaXRlbS54TGFiZWw7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGxhYmVsQ291bnQgPiAwICYmIGl0ZW0uaW5kZXggPCBsYWJlbENvdW50KSB7XHJcblx0XHRcdFx0XHRcdHRpdGxlID0gbGFiZWxzW2l0ZW0uaW5kZXhdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRpdGxlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRhZnRlclRpdGxlOiBoZWxwZXJzLm5vb3AsXHJcblxyXG5cdFx0XHQvLyBBcmdzIGFyZTogKHRvb2x0aXBJdGVtcywgZGF0YSlcclxuXHRcdFx0YmVmb3JlQm9keTogaGVscGVycy5ub29wLFxyXG5cclxuXHRcdFx0Ly8gQXJncyBhcmU6ICh0b29sdGlwSXRlbSwgZGF0YSlcclxuXHRcdFx0YmVmb3JlTGFiZWw6IGhlbHBlcnMubm9vcCxcclxuXHRcdFx0bGFiZWw6IGZ1bmN0aW9uKHRvb2x0aXBJdGVtLCBkYXRhKSB7XHJcblx0XHRcdFx0dmFyIGxhYmVsID0gZGF0YS5kYXRhc2V0c1t0b29sdGlwSXRlbS5kYXRhc2V0SW5kZXhdLmxhYmVsIHx8ICcnO1xyXG5cclxuXHRcdFx0XHRpZiAobGFiZWwpIHtcclxuXHRcdFx0XHRcdGxhYmVsICs9ICc6ICc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxhYmVsICs9IHRvb2x0aXBJdGVtLnlMYWJlbDtcclxuXHRcdFx0XHRyZXR1cm4gbGFiZWw7XHJcblx0XHRcdH0sXHJcblx0XHRcdGxhYmVsQ29sb3I6IGZ1bmN0aW9uKHRvb2x0aXBJdGVtLCBjaGFydCkge1xyXG5cdFx0XHRcdHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEodG9vbHRpcEl0ZW0uZGF0YXNldEluZGV4KTtcclxuXHRcdFx0XHR2YXIgYWN0aXZlRWxlbWVudCA9IG1ldGEuZGF0YVt0b29sdGlwSXRlbS5pbmRleF07XHJcblx0XHRcdFx0dmFyIHZpZXcgPSBhY3RpdmVFbGVtZW50Ll92aWV3O1xyXG5cdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRib3JkZXJDb2xvcjogdmlldy5ib3JkZXJDb2xvcixcclxuXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogdmlldy5iYWNrZ3JvdW5kQ29sb3JcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRsYWJlbFRleHRDb2xvcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuX29wdGlvbnMuYm9keUZvbnRDb2xvcjtcclxuXHRcdFx0fSxcclxuXHRcdFx0YWZ0ZXJMYWJlbDogaGVscGVycy5ub29wLFxyXG5cclxuXHRcdFx0Ly8gQXJncyBhcmU6ICh0b29sdGlwSXRlbXMsIGRhdGEpXHJcblx0XHRcdGFmdGVyQm9keTogaGVscGVycy5ub29wLFxyXG5cclxuXHRcdFx0Ly8gQXJncyBhcmU6ICh0b29sdGlwSXRlbXMsIGRhdGEpXHJcblx0XHRcdGJlZm9yZUZvb3RlcjogaGVscGVycy5ub29wLFxyXG5cdFx0XHRmb290ZXI6IGhlbHBlcnMubm9vcCxcclxuXHRcdFx0YWZ0ZXJGb290ZXI6IGhlbHBlcnMubm9vcFxyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG52YXIgcG9zaXRpb25lcnMgPSB7XHJcblx0LyoqXHJcblx0ICogQXZlcmFnZSBtb2RlIHBsYWNlcyB0aGUgdG9vbHRpcCBhdCB0aGUgYXZlcmFnZSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudHMgc2hvd25cclxuXHQgKiBAZnVuY3Rpb24gQ2hhcnQuVG9vbHRpcC5wb3NpdGlvbmVycy5hdmVyYWdlXHJcblx0ICogQHBhcmFtIGVsZW1lbnRzIHtDaGFydEVsZW1lbnRbXX0gdGhlIGVsZW1lbnRzIGJlaW5nIGRpc3BsYXllZCBpbiB0aGUgdG9vbHRpcFxyXG5cdCAqIEByZXR1cm5zIHtQb2ludH0gdG9vbHRpcCBwb3NpdGlvblxyXG5cdCAqL1xyXG5cdGF2ZXJhZ2U6IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XHJcblx0XHRpZiAoIWVsZW1lbnRzLmxlbmd0aCkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGksIGxlbjtcclxuXHRcdHZhciB4ID0gMDtcclxuXHRcdHZhciB5ID0gMDtcclxuXHRcdHZhciBjb3VudCA9IDA7XHJcblxyXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcclxuXHRcdFx0dmFyIGVsID0gZWxlbWVudHNbaV07XHJcblx0XHRcdGlmIChlbCAmJiBlbC5oYXNWYWx1ZSgpKSB7XHJcblx0XHRcdFx0dmFyIHBvcyA9IGVsLnRvb2x0aXBQb3NpdGlvbigpO1xyXG5cdFx0XHRcdHggKz0gcG9zLng7XHJcblx0XHRcdFx0eSArPSBwb3MueTtcclxuXHRcdFx0XHQrK2NvdW50O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0eDogTWF0aC5yb3VuZCh4IC8gY291bnQpLFxyXG5cdFx0XHR5OiBNYXRoLnJvdW5kKHkgLyBjb3VudClcclxuXHRcdH07XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyB0aGUgdG9vbHRpcCBwb3NpdGlvbiBuZWFyZXN0IG9mIHRoZSBpdGVtIG5lYXJlc3QgdG8gdGhlIGV2ZW50IHBvc2l0aW9uXHJcblx0ICogQGZ1bmN0aW9uIENoYXJ0LlRvb2x0aXAucG9zaXRpb25lcnMubmVhcmVzdFxyXG5cdCAqIEBwYXJhbSBlbGVtZW50cyB7Q2hhcnQuRWxlbWVudFtdfSB0aGUgdG9vbHRpcCBlbGVtZW50c1xyXG5cdCAqIEBwYXJhbSBldmVudFBvc2l0aW9uIHtQb2ludH0gdGhlIHBvc2l0aW9uIG9mIHRoZSBldmVudCBpbiBjYW52YXMgY29vcmRpbmF0ZXNcclxuXHQgKiBAcmV0dXJucyB7UG9pbnR9IHRoZSB0b29sdGlwIHBvc2l0aW9uXHJcblx0ICovXHJcblx0bmVhcmVzdDogZnVuY3Rpb24oZWxlbWVudHMsIGV2ZW50UG9zaXRpb24pIHtcclxuXHRcdHZhciB4ID0gZXZlbnRQb3NpdGlvbi54O1xyXG5cdFx0dmFyIHkgPSBldmVudFBvc2l0aW9uLnk7XHJcblx0XHR2YXIgbWluRGlzdGFuY2UgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcblx0XHR2YXIgaSwgbGVuLCBuZWFyZXN0RWxlbWVudDtcclxuXHJcblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xyXG5cdFx0XHR2YXIgZWwgPSBlbGVtZW50c1tpXTtcclxuXHRcdFx0aWYgKGVsICYmIGVsLmhhc1ZhbHVlKCkpIHtcclxuXHRcdFx0XHR2YXIgY2VudGVyID0gZWwuZ2V0Q2VudGVyUG9pbnQoKTtcclxuXHRcdFx0XHR2YXIgZCA9IGhlbHBlcnMuZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKGV2ZW50UG9zaXRpb24sIGNlbnRlcik7XHJcblxyXG5cdFx0XHRcdGlmIChkIDwgbWluRGlzdGFuY2UpIHtcclxuXHRcdFx0XHRcdG1pbkRpc3RhbmNlID0gZDtcclxuXHRcdFx0XHRcdG5lYXJlc3RFbGVtZW50ID0gZWw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKG5lYXJlc3RFbGVtZW50KSB7XHJcblx0XHRcdHZhciB0cCA9IG5lYXJlc3RFbGVtZW50LnRvb2x0aXBQb3NpdGlvbigpO1xyXG5cdFx0XHR4ID0gdHAueDtcclxuXHRcdFx0eSA9IHRwLnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0eDogeCxcclxuXHRcdFx0eTogeVxyXG5cdFx0fTtcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIG1ldGhvZCB0byBtZXJnZSB0aGUgb3BhY2l0eSBpbnRvIGEgY29sb3JcclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3BhY2l0eShjb2xvclN0cmluZywgb3BhY2l0eSkge1xyXG5cdHZhciBjb2xvciA9IGhlbHBlcnMuY29sb3IoY29sb3JTdHJpbmcpO1xyXG5cdHJldHVybiBjb2xvci5hbHBoYShvcGFjaXR5ICogY29sb3IuYWxwaGEoKSkucmdiYVN0cmluZygpO1xyXG59XHJcblxyXG4vLyBIZWxwZXIgdG8gcHVzaCBvciBjb25jYXQgYmFzZWQgb24gaWYgdGhlIDJuZCBwYXJhbWV0ZXIgaXMgYW4gYXJyYXkgb3Igbm90XHJcbmZ1bmN0aW9uIHB1c2hPckNvbmNhdChiYXNlLCB0b1B1c2gpIHtcclxuXHRpZiAodG9QdXNoKSB7XHJcblx0XHRpZiAoaGVscGVycy5pc0FycmF5KHRvUHVzaCkpIHtcclxuXHRcdFx0Ly8gYmFzZSA9IGJhc2UuY29uY2F0KHRvUHVzaCk7XHJcblx0XHRcdEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGJhc2UsIHRvUHVzaCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRiYXNlLnB1c2godG9QdXNoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBiYXNlO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhcnJheSBvZiBzdHJpbmdzIHNwbGl0IGJ5IG5ld2xpbmVcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNwbGl0IGJ5IG5ld2xpbmUuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gdmFsdWUgaWYgbmV3bGluZSBwcmVzZW50IC0gUmV0dXJuZWQgZnJvbSBTdHJpbmcgc3BsaXQoKSBtZXRob2RcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBzcGxpdE5ld2xpbmVzKHN0cikge1xyXG5cdGlmICgodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgfHwgc3RyIGluc3RhbmNlb2YgU3RyaW5nKSAmJiBzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xyXG5cdFx0cmV0dXJuIHN0ci5zcGxpdCgnXFxuJyk7XHJcblx0fVxyXG5cdHJldHVybiBzdHI7XHJcbn1cclxuXHJcblxyXG4vLyBQcml2YXRlIGhlbHBlciB0byBjcmVhdGUgYSB0b29sdGlwIGl0ZW0gbW9kZWxcclxuLy8gQHBhcmFtIGVsZW1lbnQgOiB0aGUgY2hhcnQgZWxlbWVudCAocG9pbnQsIGFyYywgYmFyKSB0byBjcmVhdGUgdGhlIHRvb2x0aXAgaXRlbSBmb3JcclxuLy8gQHJldHVybiA6IG5ldyB0b29sdGlwIGl0ZW1cclxuZnVuY3Rpb24gY3JlYXRlVG9vbHRpcEl0ZW0oZWxlbWVudCkge1xyXG5cdHZhciB4U2NhbGUgPSBlbGVtZW50Ll94U2NhbGU7XHJcblx0dmFyIHlTY2FsZSA9IGVsZW1lbnQuX3lTY2FsZSB8fCBlbGVtZW50Ll9zY2FsZTsgLy8gaGFuZGxlIHJhZGFyIHx8IHBvbGFyQXJlYSBjaGFydHNcclxuXHR2YXIgaW5kZXggPSBlbGVtZW50Ll9pbmRleDtcclxuXHR2YXIgZGF0YXNldEluZGV4ID0gZWxlbWVudC5fZGF0YXNldEluZGV4O1xyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0eExhYmVsOiB4U2NhbGUgPyB4U2NhbGUuZ2V0TGFiZWxGb3JJbmRleChpbmRleCwgZGF0YXNldEluZGV4KSA6ICcnLFxyXG5cdFx0eUxhYmVsOiB5U2NhbGUgPyB5U2NhbGUuZ2V0TGFiZWxGb3JJbmRleChpbmRleCwgZGF0YXNldEluZGV4KSA6ICcnLFxyXG5cdFx0aW5kZXg6IGluZGV4LFxyXG5cdFx0ZGF0YXNldEluZGV4OiBkYXRhc2V0SW5kZXgsXHJcblx0XHR4OiBlbGVtZW50Ll9tb2RlbC54LFxyXG5cdFx0eTogZWxlbWVudC5fbW9kZWwueVxyXG5cdH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgdG8gZ2V0IHRoZSByZXNldCBtb2RlbCBmb3IgdGhlIHRvb2x0aXBcclxuICogQHBhcmFtIHRvb2x0aXBPcHRzIHtPYmplY3R9IHRoZSB0b29sdGlwIG9wdGlvbnNcclxuICovXHJcbmZ1bmN0aW9uIGdldEJhc2VNb2RlbCh0b29sdGlwT3B0cykge1xyXG5cdHZhciBnbG9iYWxEZWZhdWx0cyA9IGRlZmF1bHRzLmdsb2JhbDtcclxuXHR2YXIgdmFsdWVPckRlZmF1bHQgPSBoZWxwZXJzLnZhbHVlT3JEZWZhdWx0O1xyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0Ly8gUG9zaXRpb25pbmdcclxuXHRcdHhQYWRkaW5nOiB0b29sdGlwT3B0cy54UGFkZGluZyxcclxuXHRcdHlQYWRkaW5nOiB0b29sdGlwT3B0cy55UGFkZGluZyxcclxuXHRcdHhBbGlnbjogdG9vbHRpcE9wdHMueEFsaWduLFxyXG5cdFx0eUFsaWduOiB0b29sdGlwT3B0cy55QWxpZ24sXHJcblxyXG5cdFx0Ly8gQm9keVxyXG5cdFx0Ym9keUZvbnRDb2xvcjogdG9vbHRpcE9wdHMuYm9keUZvbnRDb2xvcixcclxuXHRcdF9ib2R5Rm9udEZhbWlseTogdmFsdWVPckRlZmF1bHQodG9vbHRpcE9wdHMuYm9keUZvbnRGYW1pbHksIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250RmFtaWx5KSxcclxuXHRcdF9ib2R5Rm9udFN0eWxlOiB2YWx1ZU9yRGVmYXVsdCh0b29sdGlwT3B0cy5ib2R5Rm9udFN0eWxlLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFN0eWxlKSxcclxuXHRcdF9ib2R5QWxpZ246IHRvb2x0aXBPcHRzLmJvZHlBbGlnbixcclxuXHRcdGJvZHlGb250U2l6ZTogdmFsdWVPckRlZmF1bHQodG9vbHRpcE9wdHMuYm9keUZvbnRTaXplLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFNpemUpLFxyXG5cdFx0Ym9keVNwYWNpbmc6IHRvb2x0aXBPcHRzLmJvZHlTcGFjaW5nLFxyXG5cclxuXHRcdC8vIFRpdGxlXHJcblx0XHR0aXRsZUZvbnRDb2xvcjogdG9vbHRpcE9wdHMudGl0bGVGb250Q29sb3IsXHJcblx0XHRfdGl0bGVGb250RmFtaWx5OiB2YWx1ZU9yRGVmYXVsdCh0b29sdGlwT3B0cy50aXRsZUZvbnRGYW1pbHksIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250RmFtaWx5KSxcclxuXHRcdF90aXRsZUZvbnRTdHlsZTogdmFsdWVPckRlZmF1bHQodG9vbHRpcE9wdHMudGl0bGVGb250U3R5bGUsIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250U3R5bGUpLFxyXG5cdFx0dGl0bGVGb250U2l6ZTogdmFsdWVPckRlZmF1bHQodG9vbHRpcE9wdHMudGl0bGVGb250U2l6ZSwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRTaXplKSxcclxuXHRcdF90aXRsZUFsaWduOiB0b29sdGlwT3B0cy50aXRsZUFsaWduLFxyXG5cdFx0dGl0bGVTcGFjaW5nOiB0b29sdGlwT3B0cy50aXRsZVNwYWNpbmcsXHJcblx0XHR0aXRsZU1hcmdpbkJvdHRvbTogdG9vbHRpcE9wdHMudGl0bGVNYXJnaW5Cb3R0b20sXHJcblxyXG5cdFx0Ly8gRm9vdGVyXHJcblx0XHRmb290ZXJGb250Q29sb3I6IHRvb2x0aXBPcHRzLmZvb3RlckZvbnRDb2xvcixcclxuXHRcdF9mb290ZXJGb250RmFtaWx5OiB2YWx1ZU9yRGVmYXVsdCh0b29sdGlwT3B0cy5mb290ZXJGb250RmFtaWx5LCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udEZhbWlseSksXHJcblx0XHRfZm9vdGVyRm9udFN0eWxlOiB2YWx1ZU9yRGVmYXVsdCh0b29sdGlwT3B0cy5mb290ZXJGb250U3R5bGUsIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250U3R5bGUpLFxyXG5cdFx0Zm9vdGVyRm9udFNpemU6IHZhbHVlT3JEZWZhdWx0KHRvb2x0aXBPcHRzLmZvb3RlckZvbnRTaXplLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFNpemUpLFxyXG5cdFx0X2Zvb3RlckFsaWduOiB0b29sdGlwT3B0cy5mb290ZXJBbGlnbixcclxuXHRcdGZvb3RlclNwYWNpbmc6IHRvb2x0aXBPcHRzLmZvb3RlclNwYWNpbmcsXHJcblx0XHRmb290ZXJNYXJnaW5Ub3A6IHRvb2x0aXBPcHRzLmZvb3Rlck1hcmdpblRvcCxcclxuXHJcblx0XHQvLyBBcHBlYXJhbmNlXHJcblx0XHRjYXJldFNpemU6IHRvb2x0aXBPcHRzLmNhcmV0U2l6ZSxcclxuXHRcdGNvcm5lclJhZGl1czogdG9vbHRpcE9wdHMuY29ybmVyUmFkaXVzLFxyXG5cdFx0YmFja2dyb3VuZENvbG9yOiB0b29sdGlwT3B0cy5iYWNrZ3JvdW5kQ29sb3IsXHJcblx0XHRvcGFjaXR5OiAwLFxyXG5cdFx0bGVnZW5kQ29sb3JCYWNrZ3JvdW5kOiB0b29sdGlwT3B0cy5tdWx0aUtleUJhY2tncm91bmQsXHJcblx0XHRkaXNwbGF5Q29sb3JzOiB0b29sdGlwT3B0cy5kaXNwbGF5Q29sb3JzLFxyXG5cdFx0Ym9yZGVyQ29sb3I6IHRvb2x0aXBPcHRzLmJvcmRlckNvbG9yLFxyXG5cdFx0Ym9yZGVyV2lkdGg6IHRvb2x0aXBPcHRzLmJvcmRlcldpZHRoXHJcblx0fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgdG9vbHRpcFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VG9vbHRpcFNpemUodG9vbHRpcCwgbW9kZWwpIHtcclxuXHR2YXIgY3R4ID0gdG9vbHRpcC5fY2hhcnQuY3R4O1xyXG5cclxuXHR2YXIgaGVpZ2h0ID0gbW9kZWwueVBhZGRpbmcgKiAyOyAvLyBUb29sdGlwIFBhZGRpbmdcclxuXHR2YXIgd2lkdGggPSAwO1xyXG5cclxuXHQvLyBDb3VudCBvZiBhbGwgbGluZXMgaW4gdGhlIGJvZHlcclxuXHR2YXIgYm9keSA9IG1vZGVsLmJvZHk7XHJcblx0dmFyIGNvbWJpbmVkQm9keUxlbmd0aCA9IGJvZHkucmVkdWNlKGZ1bmN0aW9uKGNvdW50LCBib2R5SXRlbSkge1xyXG5cdFx0cmV0dXJuIGNvdW50ICsgYm9keUl0ZW0uYmVmb3JlLmxlbmd0aCArIGJvZHlJdGVtLmxpbmVzLmxlbmd0aCArIGJvZHlJdGVtLmFmdGVyLmxlbmd0aDtcclxuXHR9LCAwKTtcclxuXHRjb21iaW5lZEJvZHlMZW5ndGggKz0gbW9kZWwuYmVmb3JlQm9keS5sZW5ndGggKyBtb2RlbC5hZnRlckJvZHkubGVuZ3RoO1xyXG5cclxuXHR2YXIgdGl0bGVMaW5lQ291bnQgPSBtb2RlbC50aXRsZS5sZW5ndGg7XHJcblx0dmFyIGZvb3RlckxpbmVDb3VudCA9IG1vZGVsLmZvb3Rlci5sZW5ndGg7XHJcblx0dmFyIHRpdGxlRm9udFNpemUgPSBtb2RlbC50aXRsZUZvbnRTaXplO1xyXG5cdHZhciBib2R5Rm9udFNpemUgPSBtb2RlbC5ib2R5Rm9udFNpemU7XHJcblx0dmFyIGZvb3RlckZvbnRTaXplID0gbW9kZWwuZm9vdGVyRm9udFNpemU7XHJcblxyXG5cdGhlaWdodCArPSB0aXRsZUxpbmVDb3VudCAqIHRpdGxlRm9udFNpemU7IC8vIFRpdGxlIExpbmVzXHJcblx0aGVpZ2h0ICs9IHRpdGxlTGluZUNvdW50ID8gKHRpdGxlTGluZUNvdW50IC0gMSkgKiBtb2RlbC50aXRsZVNwYWNpbmcgOiAwOyAvLyBUaXRsZSBMaW5lIFNwYWNpbmdcclxuXHRoZWlnaHQgKz0gdGl0bGVMaW5lQ291bnQgPyBtb2RlbC50aXRsZU1hcmdpbkJvdHRvbSA6IDA7IC8vIFRpdGxlJ3MgYm90dG9tIE1hcmdpblxyXG5cdGhlaWdodCArPSBjb21iaW5lZEJvZHlMZW5ndGggKiBib2R5Rm9udFNpemU7IC8vIEJvZHkgTGluZXNcclxuXHRoZWlnaHQgKz0gY29tYmluZWRCb2R5TGVuZ3RoID8gKGNvbWJpbmVkQm9keUxlbmd0aCAtIDEpICogbW9kZWwuYm9keVNwYWNpbmcgOiAwOyAvLyBCb2R5IExpbmUgU3BhY2luZ1xyXG5cdGhlaWdodCArPSBmb290ZXJMaW5lQ291bnQgPyBtb2RlbC5mb290ZXJNYXJnaW5Ub3AgOiAwOyAvLyBGb290ZXIgTWFyZ2luXHJcblx0aGVpZ2h0ICs9IGZvb3RlckxpbmVDb3VudCAqIChmb290ZXJGb250U2l6ZSk7IC8vIEZvb3RlciBMaW5lc1xyXG5cdGhlaWdodCArPSBmb290ZXJMaW5lQ291bnQgPyAoZm9vdGVyTGluZUNvdW50IC0gMSkgKiBtb2RlbC5mb290ZXJTcGFjaW5nIDogMDsgLy8gRm9vdGVyIExpbmUgU3BhY2luZ1xyXG5cclxuXHQvLyBUaXRsZSB3aWR0aFxyXG5cdHZhciB3aWR0aFBhZGRpbmcgPSAwO1xyXG5cdHZhciBtYXhMaW5lV2lkdGggPSBmdW5jdGlvbihsaW5lKSB7XHJcblx0XHR3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBjdHgubWVhc3VyZVRleHQobGluZSkud2lkdGggKyB3aWR0aFBhZGRpbmcpO1xyXG5cdH07XHJcblxyXG5cdGN0eC5mb250ID0gaGVscGVycy5mb250U3RyaW5nKHRpdGxlRm9udFNpemUsIG1vZGVsLl90aXRsZUZvbnRTdHlsZSwgbW9kZWwuX3RpdGxlRm9udEZhbWlseSk7XHJcblx0aGVscGVycy5lYWNoKG1vZGVsLnRpdGxlLCBtYXhMaW5lV2lkdGgpO1xyXG5cclxuXHQvLyBCb2R5IHdpZHRoXHJcblx0Y3R4LmZvbnQgPSBoZWxwZXJzLmZvbnRTdHJpbmcoYm9keUZvbnRTaXplLCBtb2RlbC5fYm9keUZvbnRTdHlsZSwgbW9kZWwuX2JvZHlGb250RmFtaWx5KTtcclxuXHRoZWxwZXJzLmVhY2gobW9kZWwuYmVmb3JlQm9keS5jb25jYXQobW9kZWwuYWZ0ZXJCb2R5KSwgbWF4TGluZVdpZHRoKTtcclxuXHJcblx0Ly8gQm9keSBsaW5lcyBtYXkgaW5jbHVkZSBzb21lIGV4dHJhIHdpZHRoIGR1ZSB0byB0aGUgY29sb3IgYm94XHJcblx0d2lkdGhQYWRkaW5nID0gbW9kZWwuZGlzcGxheUNvbG9ycyA/IChib2R5Rm9udFNpemUgKyAyKSA6IDA7XHJcblx0aGVscGVycy5lYWNoKGJvZHksIGZ1bmN0aW9uKGJvZHlJdGVtKSB7XHJcblx0XHRoZWxwZXJzLmVhY2goYm9keUl0ZW0uYmVmb3JlLCBtYXhMaW5lV2lkdGgpO1xyXG5cdFx0aGVscGVycy5lYWNoKGJvZHlJdGVtLmxpbmVzLCBtYXhMaW5lV2lkdGgpO1xyXG5cdFx0aGVscGVycy5lYWNoKGJvZHlJdGVtLmFmdGVyLCBtYXhMaW5lV2lkdGgpO1xyXG5cdH0pO1xyXG5cclxuXHQvLyBSZXNldCBiYWNrIHRvIDBcclxuXHR3aWR0aFBhZGRpbmcgPSAwO1xyXG5cclxuXHQvLyBGb290ZXIgd2lkdGhcclxuXHRjdHguZm9udCA9IGhlbHBlcnMuZm9udFN0cmluZyhmb290ZXJGb250U2l6ZSwgbW9kZWwuX2Zvb3RlckZvbnRTdHlsZSwgbW9kZWwuX2Zvb3RlckZvbnRGYW1pbHkpO1xyXG5cdGhlbHBlcnMuZWFjaChtb2RlbC5mb290ZXIsIG1heExpbmVXaWR0aCk7XHJcblxyXG5cdC8vIEFkZCBwYWRkaW5nXHJcblx0d2lkdGggKz0gMiAqIG1vZGVsLnhQYWRkaW5nO1xyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0d2lkdGg6IHdpZHRoLFxyXG5cdFx0aGVpZ2h0OiBoZWlnaHRcclxuXHR9O1xyXG59XHJcblxyXG4vKipcclxuICogSGVscGVyIHRvIGdldCB0aGUgYWxpZ25tZW50IG9mIGEgdG9vbHRpcCBnaXZlbiB0aGUgc2l6ZVxyXG4gKi9cclxuZnVuY3Rpb24gZGV0ZXJtaW5lQWxpZ25tZW50KHRvb2x0aXAsIHNpemUpIHtcclxuXHR2YXIgbW9kZWwgPSB0b29sdGlwLl9tb2RlbDtcclxuXHR2YXIgY2hhcnQgPSB0b29sdGlwLl9jaGFydDtcclxuXHR2YXIgY2hhcnRBcmVhID0gdG9vbHRpcC5fY2hhcnQuY2hhcnRBcmVhO1xyXG5cdHZhciB4QWxpZ24gPSAnY2VudGVyJztcclxuXHR2YXIgeUFsaWduID0gJ2NlbnRlcic7XHJcblxyXG5cdGlmIChtb2RlbC55IDwgc2l6ZS5oZWlnaHQpIHtcclxuXHRcdHlBbGlnbiA9ICd0b3AnO1xyXG5cdH0gZWxzZSBpZiAobW9kZWwueSA+IChjaGFydC5oZWlnaHQgLSBzaXplLmhlaWdodCkpIHtcclxuXHRcdHlBbGlnbiA9ICdib3R0b20nO1xyXG5cdH1cclxuXHJcblx0dmFyIGxmLCByZjsgLy8gZnVuY3Rpb25zIHRvIGRldGVybWluZSBsZWZ0LCByaWdodCBhbGlnbm1lbnRcclxuXHR2YXIgb2xmLCBvcmY7IC8vIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgaWYgbGVmdC9yaWdodCBhbGlnbm1lbnQgY2F1c2VzIHRvb2x0aXAgdG8gZ28gb3V0c2lkZSBjaGFydFxyXG5cdHZhciB5ZjsgLy8gZnVuY3Rpb24gdG8gZ2V0IHRoZSB5IGFsaWdubWVudCBpZiB0aGUgdG9vbHRpcCBnb2VzIG91dHNpZGUgb2YgdGhlIGxlZnQgb3IgcmlnaHQgZWRnZXNcclxuXHR2YXIgbWlkWCA9IChjaGFydEFyZWEubGVmdCArIGNoYXJ0QXJlYS5yaWdodCkgLyAyO1xyXG5cdHZhciBtaWRZID0gKGNoYXJ0QXJlYS50b3AgKyBjaGFydEFyZWEuYm90dG9tKSAvIDI7XHJcblxyXG5cdGlmICh5QWxpZ24gPT09ICdjZW50ZXInKSB7XHJcblx0XHRsZiA9IGZ1bmN0aW9uKHgpIHtcclxuXHRcdFx0cmV0dXJuIHggPD0gbWlkWDtcclxuXHRcdH07XHJcblx0XHRyZiA9IGZ1bmN0aW9uKHgpIHtcclxuXHRcdFx0cmV0dXJuIHggPiBtaWRYO1xyXG5cdFx0fTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0bGYgPSBmdW5jdGlvbih4KSB7XHJcblx0XHRcdHJldHVybiB4IDw9IChzaXplLndpZHRoIC8gMik7XHJcblx0XHR9O1xyXG5cdFx0cmYgPSBmdW5jdGlvbih4KSB7XHJcblx0XHRcdHJldHVybiB4ID49IChjaGFydC53aWR0aCAtIChzaXplLndpZHRoIC8gMikpO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdG9sZiA9IGZ1bmN0aW9uKHgpIHtcclxuXHRcdHJldHVybiB4ICsgc2l6ZS53aWR0aCArIG1vZGVsLmNhcmV0U2l6ZSArIG1vZGVsLmNhcmV0UGFkZGluZyA+IGNoYXJ0LndpZHRoO1xyXG5cdH07XHJcblx0b3JmID0gZnVuY3Rpb24oeCkge1xyXG5cdFx0cmV0dXJuIHggLSBzaXplLndpZHRoIC0gbW9kZWwuY2FyZXRTaXplIC0gbW9kZWwuY2FyZXRQYWRkaW5nIDwgMDtcclxuXHR9O1xyXG5cdHlmID0gZnVuY3Rpb24oeSkge1xyXG5cdFx0cmV0dXJuIHkgPD0gbWlkWSA/ICd0b3AnIDogJ2JvdHRvbSc7XHJcblx0fTtcclxuXHJcblx0aWYgKGxmKG1vZGVsLngpKSB7XHJcblx0XHR4QWxpZ24gPSAnbGVmdCc7XHJcblxyXG5cdFx0Ly8gSXMgdG9vbHRpcCB0b28gd2lkZSBhbmQgZ29lcyBvdmVyIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjaGFydC4/XHJcblx0XHRpZiAob2xmKG1vZGVsLngpKSB7XHJcblx0XHRcdHhBbGlnbiA9ICdjZW50ZXInO1xyXG5cdFx0XHR5QWxpZ24gPSB5Zihtb2RlbC55KTtcclxuXHRcdH1cclxuXHR9IGVsc2UgaWYgKHJmKG1vZGVsLngpKSB7XHJcblx0XHR4QWxpZ24gPSAncmlnaHQnO1xyXG5cclxuXHRcdC8vIElzIHRvb2x0aXAgdG9vIHdpZGUgYW5kIGdvZXMgb3V0c2lkZSBsZWZ0IGVkZ2Ugb2YgY2FudmFzP1xyXG5cdFx0aWYgKG9yZihtb2RlbC54KSkge1xyXG5cdFx0XHR4QWxpZ24gPSAnY2VudGVyJztcclxuXHRcdFx0eUFsaWduID0geWYobW9kZWwueSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR2YXIgb3B0cyA9IHRvb2x0aXAuX29wdGlvbnM7XHJcblx0cmV0dXJuIHtcclxuXHRcdHhBbGlnbjogb3B0cy54QWxpZ24gPyBvcHRzLnhBbGlnbiA6IHhBbGlnbixcclxuXHRcdHlBbGlnbjogb3B0cy55QWxpZ24gPyBvcHRzLnlBbGlnbiA6IHlBbGlnblxyXG5cdH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgdG8gZ2V0IHRoZSBsb2NhdGlvbiBhIHRvb2x0aXAgbmVlZHMgdG8gYmUgcGxhY2VkIGF0IGdpdmVuIHRoZSBpbml0aWFsIHBvc2l0aW9uICh2aWEgdGhlIHZtKSBhbmQgdGhlIHNpemUgYW5kIGFsaWdubWVudFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QmFja2dyb3VuZFBvaW50KHZtLCBzaXplLCBhbGlnbm1lbnQsIGNoYXJ0KSB7XHJcblx0Ly8gQmFja2dyb3VuZCBQb3NpdGlvblxyXG5cdHZhciB4ID0gdm0ueDtcclxuXHR2YXIgeSA9IHZtLnk7XHJcblxyXG5cdHZhciBjYXJldFNpemUgPSB2bS5jYXJldFNpemU7XHJcblx0dmFyIGNhcmV0UGFkZGluZyA9IHZtLmNhcmV0UGFkZGluZztcclxuXHR2YXIgY29ybmVyUmFkaXVzID0gdm0uY29ybmVyUmFkaXVzO1xyXG5cdHZhciB4QWxpZ24gPSBhbGlnbm1lbnQueEFsaWduO1xyXG5cdHZhciB5QWxpZ24gPSBhbGlnbm1lbnQueUFsaWduO1xyXG5cdHZhciBwYWRkaW5nQW5kU2l6ZSA9IGNhcmV0U2l6ZSArIGNhcmV0UGFkZGluZztcclxuXHR2YXIgcmFkaXVzQW5kUGFkZGluZyA9IGNvcm5lclJhZGl1cyArIGNhcmV0UGFkZGluZztcclxuXHJcblx0aWYgKHhBbGlnbiA9PT0gJ3JpZ2h0Jykge1xyXG5cdFx0eCAtPSBzaXplLndpZHRoO1xyXG5cdH0gZWxzZSBpZiAoeEFsaWduID09PSAnY2VudGVyJykge1xyXG5cdFx0eCAtPSAoc2l6ZS53aWR0aCAvIDIpO1xyXG5cdFx0aWYgKHggKyBzaXplLndpZHRoID4gY2hhcnQud2lkdGgpIHtcclxuXHRcdFx0eCA9IGNoYXJ0LndpZHRoIC0gc2l6ZS53aWR0aDtcclxuXHRcdH1cclxuXHRcdGlmICh4IDwgMCkge1xyXG5cdFx0XHR4ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmICh5QWxpZ24gPT09ICd0b3AnKSB7XHJcblx0XHR5ICs9IHBhZGRpbmdBbmRTaXplO1xyXG5cdH0gZWxzZSBpZiAoeUFsaWduID09PSAnYm90dG9tJykge1xyXG5cdFx0eSAtPSBzaXplLmhlaWdodCArIHBhZGRpbmdBbmRTaXplO1xyXG5cdH0gZWxzZSB7XHJcblx0XHR5IC09IChzaXplLmhlaWdodCAvIDIpO1xyXG5cdH1cclxuXHJcblx0aWYgKHlBbGlnbiA9PT0gJ2NlbnRlcicpIHtcclxuXHRcdGlmICh4QWxpZ24gPT09ICdsZWZ0Jykge1xyXG5cdFx0XHR4ICs9IHBhZGRpbmdBbmRTaXplO1xyXG5cdFx0fSBlbHNlIGlmICh4QWxpZ24gPT09ICdyaWdodCcpIHtcclxuXHRcdFx0eCAtPSBwYWRkaW5nQW5kU2l6ZTtcclxuXHRcdH1cclxuXHR9IGVsc2UgaWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XHJcblx0XHR4IC09IHJhZGl1c0FuZFBhZGRpbmc7XHJcblx0fSBlbHNlIGlmICh4QWxpZ24gPT09ICdyaWdodCcpIHtcclxuXHRcdHggKz0gcmFkaXVzQW5kUGFkZGluZztcclxuXHR9XHJcblxyXG5cdHJldHVybiB7XHJcblx0XHR4OiB4LFxyXG5cdFx0eTogeVxyXG5cdH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgdG8gYnVpbGQgYmVmb3JlIGFuZCBhZnRlciBib2R5IGxpbmVzXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRCZWZvcmVBZnRlckJvZHlMaW5lcyhjYWxsYmFjaykge1xyXG5cdHJldHVybiBwdXNoT3JDb25jYXQoW10sIHNwbGl0TmV3bGluZXMoY2FsbGJhY2spKTtcclxufVxyXG5cclxudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnQuZXh0ZW5kKHtcclxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcclxuXHRcdHRoaXMuX21vZGVsID0gZ2V0QmFzZU1vZGVsKHRoaXMuX29wdGlvbnMpO1xyXG5cdFx0dGhpcy5fbGFzdEFjdGl2ZSA9IFtdO1xyXG5cdH0sXHJcblxyXG5cdC8vIEdldCB0aGUgdGl0bGVcclxuXHQvLyBBcmdzIGFyZTogKHRvb2x0aXBJdGVtLCBkYXRhKVxyXG5cdGdldFRpdGxlOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHR2YXIgb3B0cyA9IG1lLl9vcHRpb25zO1xyXG5cdFx0dmFyIGNhbGxiYWNrcyA9IG9wdHMuY2FsbGJhY2tzO1xyXG5cclxuXHRcdHZhciBiZWZvcmVUaXRsZSA9IGNhbGxiYWNrcy5iZWZvcmVUaXRsZS5hcHBseShtZSwgYXJndW1lbnRzKTtcclxuXHRcdHZhciB0aXRsZSA9IGNhbGxiYWNrcy50aXRsZS5hcHBseShtZSwgYXJndW1lbnRzKTtcclxuXHRcdHZhciBhZnRlclRpdGxlID0gY2FsbGJhY2tzLmFmdGVyVGl0bGUuYXBwbHkobWUsIGFyZ3VtZW50cyk7XHJcblxyXG5cdFx0dmFyIGxpbmVzID0gW107XHJcblx0XHRsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhiZWZvcmVUaXRsZSkpO1xyXG5cdFx0bGluZXMgPSBwdXNoT3JDb25jYXQobGluZXMsIHNwbGl0TmV3bGluZXModGl0bGUpKTtcclxuXHRcdGxpbmVzID0gcHVzaE9yQ29uY2F0KGxpbmVzLCBzcGxpdE5ld2xpbmVzKGFmdGVyVGl0bGUpKTtcclxuXHJcblx0XHRyZXR1cm4gbGluZXM7XHJcblx0fSxcclxuXHJcblx0Ly8gQXJncyBhcmU6ICh0b29sdGlwSXRlbSwgZGF0YSlcclxuXHRnZXRCZWZvcmVCb2R5OiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiBnZXRCZWZvcmVBZnRlckJvZHlMaW5lcyh0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5iZWZvcmVCb2R5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xyXG5cdH0sXHJcblxyXG5cdC8vIEFyZ3MgYXJlOiAodG9vbHRpcEl0ZW0sIGRhdGEpXHJcblx0Z2V0Qm9keTogZnVuY3Rpb24odG9vbHRpcEl0ZW1zLCBkYXRhKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0dmFyIGNhbGxiYWNrcyA9IG1lLl9vcHRpb25zLmNhbGxiYWNrcztcclxuXHRcdHZhciBib2R5SXRlbXMgPSBbXTtcclxuXHJcblx0XHRoZWxwZXJzLmVhY2godG9vbHRpcEl0ZW1zLCBmdW5jdGlvbih0b29sdGlwSXRlbSkge1xyXG5cdFx0XHR2YXIgYm9keUl0ZW0gPSB7XHJcblx0XHRcdFx0YmVmb3JlOiBbXSxcclxuXHRcdFx0XHRsaW5lczogW10sXHJcblx0XHRcdFx0YWZ0ZXI6IFtdXHJcblx0XHRcdH07XHJcblx0XHRcdHB1c2hPckNvbmNhdChib2R5SXRlbS5iZWZvcmUsIHNwbGl0TmV3bGluZXMoY2FsbGJhY2tzLmJlZm9yZUxhYmVsLmNhbGwobWUsIHRvb2x0aXBJdGVtLCBkYXRhKSkpO1xyXG5cdFx0XHRwdXNoT3JDb25jYXQoYm9keUl0ZW0ubGluZXMsIGNhbGxiYWNrcy5sYWJlbC5jYWxsKG1lLCB0b29sdGlwSXRlbSwgZGF0YSkpO1xyXG5cdFx0XHRwdXNoT3JDb25jYXQoYm9keUl0ZW0uYWZ0ZXIsIHNwbGl0TmV3bGluZXMoY2FsbGJhY2tzLmFmdGVyTGFiZWwuY2FsbChtZSwgdG9vbHRpcEl0ZW0sIGRhdGEpKSk7XHJcblxyXG5cdFx0XHRib2R5SXRlbXMucHVzaChib2R5SXRlbSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gYm9keUl0ZW1zO1xyXG5cdH0sXHJcblxyXG5cdC8vIEFyZ3MgYXJlOiAodG9vbHRpcEl0ZW0sIGRhdGEpXHJcblx0Z2V0QWZ0ZXJCb2R5OiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiBnZXRCZWZvcmVBZnRlckJvZHlMaW5lcyh0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5hZnRlckJvZHkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XHJcblx0fSxcclxuXHJcblx0Ly8gR2V0IHRoZSBmb290ZXIgYW5kIGJlZm9yZUZvb3RlciBhbmQgYWZ0ZXJGb290ZXIgbGluZXNcclxuXHQvLyBBcmdzIGFyZTogKHRvb2x0aXBJdGVtLCBkYXRhKVxyXG5cdGdldEZvb3RlcjogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0dmFyIGNhbGxiYWNrcyA9IG1lLl9vcHRpb25zLmNhbGxiYWNrcztcclxuXHJcblx0XHR2YXIgYmVmb3JlRm9vdGVyID0gY2FsbGJhY2tzLmJlZm9yZUZvb3Rlci5hcHBseShtZSwgYXJndW1lbnRzKTtcclxuXHRcdHZhciBmb290ZXIgPSBjYWxsYmFja3MuZm9vdGVyLmFwcGx5KG1lLCBhcmd1bWVudHMpO1xyXG5cdFx0dmFyIGFmdGVyRm9vdGVyID0gY2FsbGJhY2tzLmFmdGVyRm9vdGVyLmFwcGx5KG1lLCBhcmd1bWVudHMpO1xyXG5cclxuXHRcdHZhciBsaW5lcyA9IFtdO1xyXG5cdFx0bGluZXMgPSBwdXNoT3JDb25jYXQobGluZXMsIHNwbGl0TmV3bGluZXMoYmVmb3JlRm9vdGVyKSk7XHJcblx0XHRsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhmb290ZXIpKTtcclxuXHRcdGxpbmVzID0gcHVzaE9yQ29uY2F0KGxpbmVzLCBzcGxpdE5ld2xpbmVzKGFmdGVyRm9vdGVyKSk7XHJcblxyXG5cdFx0cmV0dXJuIGxpbmVzO1xyXG5cdH0sXHJcblxyXG5cdHVwZGF0ZTogZnVuY3Rpb24oY2hhbmdlZCkge1xyXG5cdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdHZhciBvcHRzID0gbWUuX29wdGlvbnM7XHJcblxyXG5cdFx0Ly8gTmVlZCB0byByZWdlbmVyYXRlIHRoZSBtb2RlbCBiZWNhdXNlIGl0cyBmYXN0ZXIgdGhhbiB1c2luZyBleHRlbmQgYW5kIGl0IGlzIG5lY2Vzc2FyeSBkdWUgdG8gdGhlIG9wdGltaXphdGlvbiBpbiBDaGFydC5FbGVtZW50LnRyYW5zaXRpb25cclxuXHRcdC8vIHRoYXQgZG9lcyBfdmlldyA9IF9tb2RlbCBpZiBlYXNlID09PSAxLiBUaGlzIGNhdXNlcyB0aGUgMm5kIHRvb2x0aXAgdXBkYXRlIHRvIHNldCBwcm9wZXJ0aWVzIGluIGJvdGggdGhlIHZpZXcgYW5kIG1vZGVsIGF0IHRoZSBzYW1lIHRpbWVcclxuXHRcdC8vIHdoaWNoIGJyZWFrcyBhbnkgYW5pbWF0aW9ucy5cclxuXHRcdHZhciBleGlzdGluZ01vZGVsID0gbWUuX21vZGVsO1xyXG5cdFx0dmFyIG1vZGVsID0gbWUuX21vZGVsID0gZ2V0QmFzZU1vZGVsKG9wdHMpO1xyXG5cdFx0dmFyIGFjdGl2ZSA9IG1lLl9hY3RpdmU7XHJcblxyXG5cdFx0dmFyIGRhdGEgPSBtZS5fZGF0YTtcclxuXHJcblx0XHQvLyBJbiB0aGUgY2FzZSB3aGVyZSBhY3RpdmUubGVuZ3RoID09PSAwIHdlIG5lZWQgdG8ga2VlcCB0aGVzZSBhdCBleGlzdGluZyB2YWx1ZXMgZm9yIGdvb2QgYW5pbWF0aW9uc1xyXG5cdFx0dmFyIGFsaWdubWVudCA9IHtcclxuXHRcdFx0eEFsaWduOiBleGlzdGluZ01vZGVsLnhBbGlnbixcclxuXHRcdFx0eUFsaWduOiBleGlzdGluZ01vZGVsLnlBbGlnblxyXG5cdFx0fTtcclxuXHRcdHZhciBiYWNrZ3JvdW5kUG9pbnQgPSB7XHJcblx0XHRcdHg6IGV4aXN0aW5nTW9kZWwueCxcclxuXHRcdFx0eTogZXhpc3RpbmdNb2RlbC55XHJcblx0XHR9O1xyXG5cdFx0dmFyIHRvb2x0aXBTaXplID0ge1xyXG5cdFx0XHR3aWR0aDogZXhpc3RpbmdNb2RlbC53aWR0aCxcclxuXHRcdFx0aGVpZ2h0OiBleGlzdGluZ01vZGVsLmhlaWdodFxyXG5cdFx0fTtcclxuXHRcdHZhciB0b29sdGlwUG9zaXRpb24gPSB7XHJcblx0XHRcdHg6IGV4aXN0aW5nTW9kZWwuY2FyZXRYLFxyXG5cdFx0XHR5OiBleGlzdGluZ01vZGVsLmNhcmV0WVxyXG5cdFx0fTtcclxuXHJcblx0XHR2YXIgaSwgbGVuO1xyXG5cclxuXHRcdGlmIChhY3RpdmUubGVuZ3RoKSB7XHJcblx0XHRcdG1vZGVsLm9wYWNpdHkgPSAxO1xyXG5cclxuXHRcdFx0dmFyIGxhYmVsQ29sb3JzID0gW107XHJcblx0XHRcdHZhciBsYWJlbFRleHRDb2xvcnMgPSBbXTtcclxuXHRcdFx0dG9vbHRpcFBvc2l0aW9uID0gcG9zaXRpb25lcnNbb3B0cy5wb3NpdGlvbl0uY2FsbChtZSwgYWN0aXZlLCBtZS5fZXZlbnRQb3NpdGlvbik7XHJcblxyXG5cdFx0XHR2YXIgdG9vbHRpcEl0ZW1zID0gW107XHJcblx0XHRcdGZvciAoaSA9IDAsIGxlbiA9IGFjdGl2ZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xyXG5cdFx0XHRcdHRvb2x0aXBJdGVtcy5wdXNoKGNyZWF0ZVRvb2x0aXBJdGVtKGFjdGl2ZVtpXSkpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBJZiB0aGUgdXNlciBwcm92aWRlZCBhIGZpbHRlciBmdW5jdGlvbiwgdXNlIGl0IHRvIG1vZGlmeSB0aGUgdG9vbHRpcCBpdGVtc1xyXG5cdFx0XHRpZiAob3B0cy5maWx0ZXIpIHtcclxuXHRcdFx0XHR0b29sdGlwSXRlbXMgPSB0b29sdGlwSXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGEpIHtcclxuXHRcdFx0XHRcdHJldHVybiBvcHRzLmZpbHRlcihhLCBkYXRhKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSWYgdGhlIHVzZXIgcHJvdmlkZWQgYSBzb3J0aW5nIGZ1bmN0aW9uLCB1c2UgaXQgdG8gbW9kaWZ5IHRoZSB0b29sdGlwIGl0ZW1zXHJcblx0XHRcdGlmIChvcHRzLml0ZW1Tb3J0KSB7XHJcblx0XHRcdFx0dG9vbHRpcEl0ZW1zID0gdG9vbHRpcEl0ZW1zLnNvcnQoZnVuY3Rpb24oYSwgYikge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG9wdHMuaXRlbVNvcnQoYSwgYiwgZGF0YSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIERldGVybWluZSBjb2xvcnMgZm9yIGJveGVzXHJcblx0XHRcdGhlbHBlcnMuZWFjaCh0b29sdGlwSXRlbXMsIGZ1bmN0aW9uKHRvb2x0aXBJdGVtKSB7XHJcblx0XHRcdFx0bGFiZWxDb2xvcnMucHVzaChvcHRzLmNhbGxiYWNrcy5sYWJlbENvbG9yLmNhbGwobWUsIHRvb2x0aXBJdGVtLCBtZS5fY2hhcnQpKTtcclxuXHRcdFx0XHRsYWJlbFRleHRDb2xvcnMucHVzaChvcHRzLmNhbGxiYWNrcy5sYWJlbFRleHRDb2xvci5jYWxsKG1lLCB0b29sdGlwSXRlbSwgbWUuX2NoYXJ0KSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHJcblx0XHRcdC8vIEJ1aWxkIHRoZSBUZXh0IExpbmVzXHJcblx0XHRcdG1vZGVsLnRpdGxlID0gbWUuZ2V0VGl0bGUodG9vbHRpcEl0ZW1zLCBkYXRhKTtcclxuXHRcdFx0bW9kZWwuYmVmb3JlQm9keSA9IG1lLmdldEJlZm9yZUJvZHkodG9vbHRpcEl0ZW1zLCBkYXRhKTtcclxuXHRcdFx0bW9kZWwuYm9keSA9IG1lLmdldEJvZHkodG9vbHRpcEl0ZW1zLCBkYXRhKTtcclxuXHRcdFx0bW9kZWwuYWZ0ZXJCb2R5ID0gbWUuZ2V0QWZ0ZXJCb2R5KHRvb2x0aXBJdGVtcywgZGF0YSk7XHJcblx0XHRcdG1vZGVsLmZvb3RlciA9IG1lLmdldEZvb3Rlcih0b29sdGlwSXRlbXMsIGRhdGEpO1xyXG5cclxuXHRcdFx0Ly8gSW5pdGlhbCBwb3NpdGlvbmluZyBhbmQgY29sb3JzXHJcblx0XHRcdG1vZGVsLnggPSBNYXRoLnJvdW5kKHRvb2x0aXBQb3NpdGlvbi54KTtcclxuXHRcdFx0bW9kZWwueSA9IE1hdGgucm91bmQodG9vbHRpcFBvc2l0aW9uLnkpO1xyXG5cdFx0XHRtb2RlbC5jYXJldFBhZGRpbmcgPSBvcHRzLmNhcmV0UGFkZGluZztcclxuXHRcdFx0bW9kZWwubGFiZWxDb2xvcnMgPSBsYWJlbENvbG9ycztcclxuXHRcdFx0bW9kZWwubGFiZWxUZXh0Q29sb3JzID0gbGFiZWxUZXh0Q29sb3JzO1xyXG5cclxuXHRcdFx0Ly8gZGF0YSBwb2ludHNcclxuXHRcdFx0bW9kZWwuZGF0YVBvaW50cyA9IHRvb2x0aXBJdGVtcztcclxuXHJcblx0XHRcdC8vIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGFsaWdubWVudCBvZiB0aGUgdG9vbHRpcFxyXG5cdFx0XHR0b29sdGlwU2l6ZSA9IGdldFRvb2x0aXBTaXplKHRoaXMsIG1vZGVsKTtcclxuXHRcdFx0YWxpZ25tZW50ID0gZGV0ZXJtaW5lQWxpZ25tZW50KHRoaXMsIHRvb2x0aXBTaXplKTtcclxuXHRcdFx0Ly8gRmluYWwgU2l6ZSBhbmQgUG9zaXRpb25cclxuXHRcdFx0YmFja2dyb3VuZFBvaW50ID0gZ2V0QmFja2dyb3VuZFBvaW50KG1vZGVsLCB0b29sdGlwU2l6ZSwgYWxpZ25tZW50LCBtZS5fY2hhcnQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bW9kZWwub3BhY2l0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0bW9kZWwueEFsaWduID0gYWxpZ25tZW50LnhBbGlnbjtcclxuXHRcdG1vZGVsLnlBbGlnbiA9IGFsaWdubWVudC55QWxpZ247XHJcblx0XHRtb2RlbC54ID0gYmFja2dyb3VuZFBvaW50Lng7XHJcblx0XHRtb2RlbC55ID0gYmFja2dyb3VuZFBvaW50Lnk7XHJcblx0XHRtb2RlbC53aWR0aCA9IHRvb2x0aXBTaXplLndpZHRoO1xyXG5cdFx0bW9kZWwuaGVpZ2h0ID0gdG9vbHRpcFNpemUuaGVpZ2h0O1xyXG5cclxuXHRcdC8vIFBvaW50IHdoZXJlIHRoZSBjYXJldCBvbiB0aGUgdG9vbHRpcCBwb2ludHMgdG9cclxuXHRcdG1vZGVsLmNhcmV0WCA9IHRvb2x0aXBQb3NpdGlvbi54O1xyXG5cdFx0bW9kZWwuY2FyZXRZID0gdG9vbHRpcFBvc2l0aW9uLnk7XHJcblxyXG5cdFx0bWUuX21vZGVsID0gbW9kZWw7XHJcblxyXG5cdFx0aWYgKGNoYW5nZWQgJiYgb3B0cy5jdXN0b20pIHtcclxuXHRcdFx0b3B0cy5jdXN0b20uY2FsbChtZSwgbW9kZWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBtZTtcclxuXHR9LFxyXG5cclxuXHRkcmF3Q2FyZXQ6IGZ1bmN0aW9uKHRvb2x0aXBQb2ludCwgc2l6ZSkge1xyXG5cdFx0dmFyIGN0eCA9IHRoaXMuX2NoYXJ0LmN0eDtcclxuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XHJcblx0XHR2YXIgY2FyZXRQb3NpdGlvbiA9IHRoaXMuZ2V0Q2FyZXRQb3NpdGlvbih0b29sdGlwUG9pbnQsIHNpemUsIHZtKTtcclxuXHJcblx0XHRjdHgubGluZVRvKGNhcmV0UG9zaXRpb24ueDEsIGNhcmV0UG9zaXRpb24ueTEpO1xyXG5cdFx0Y3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngyLCBjYXJldFBvc2l0aW9uLnkyKTtcclxuXHRcdGN0eC5saW5lVG8oY2FyZXRQb3NpdGlvbi54MywgY2FyZXRQb3NpdGlvbi55Myk7XHJcblx0fSxcclxuXHRnZXRDYXJldFBvc2l0aW9uOiBmdW5jdGlvbih0b29sdGlwUG9pbnQsIHNpemUsIHZtKSB7XHJcblx0XHR2YXIgeDEsIHgyLCB4MywgeTEsIHkyLCB5MztcclxuXHRcdHZhciBjYXJldFNpemUgPSB2bS5jYXJldFNpemU7XHJcblx0XHR2YXIgY29ybmVyUmFkaXVzID0gdm0uY29ybmVyUmFkaXVzO1xyXG5cdFx0dmFyIHhBbGlnbiA9IHZtLnhBbGlnbjtcclxuXHRcdHZhciB5QWxpZ24gPSB2bS55QWxpZ247XHJcblx0XHR2YXIgcHRYID0gdG9vbHRpcFBvaW50Lng7XHJcblx0XHR2YXIgcHRZID0gdG9vbHRpcFBvaW50Lnk7XHJcblx0XHR2YXIgd2lkdGggPSBzaXplLndpZHRoO1xyXG5cdFx0dmFyIGhlaWdodCA9IHNpemUuaGVpZ2h0O1xyXG5cclxuXHRcdGlmICh5QWxpZ24gPT09ICdjZW50ZXInKSB7XHJcblx0XHRcdHkyID0gcHRZICsgKGhlaWdodCAvIDIpO1xyXG5cclxuXHRcdFx0aWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XHJcblx0XHRcdFx0eDEgPSBwdFg7XHJcblx0XHRcdFx0eDIgPSB4MSAtIGNhcmV0U2l6ZTtcclxuXHRcdFx0XHR4MyA9IHgxO1xyXG5cclxuXHRcdFx0XHR5MSA9IHkyICsgY2FyZXRTaXplO1xyXG5cdFx0XHRcdHkzID0geTIgLSBjYXJldFNpemU7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0eDEgPSBwdFggKyB3aWR0aDtcclxuXHRcdFx0XHR4MiA9IHgxICsgY2FyZXRTaXplO1xyXG5cdFx0XHRcdHgzID0geDE7XHJcblxyXG5cdFx0XHRcdHkxID0geTIgLSBjYXJldFNpemU7XHJcblx0XHRcdFx0eTMgPSB5MiArIGNhcmV0U2l6ZTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XHJcblx0XHRcdFx0eDIgPSBwdFggKyBjb3JuZXJSYWRpdXMgKyAoY2FyZXRTaXplKTtcclxuXHRcdFx0XHR4MSA9IHgyIC0gY2FyZXRTaXplO1xyXG5cdFx0XHRcdHgzID0geDIgKyBjYXJldFNpemU7XHJcblx0XHRcdH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XHJcblx0XHRcdFx0eDIgPSBwdFggKyB3aWR0aCAtIGNvcm5lclJhZGl1cyAtIGNhcmV0U2l6ZTtcclxuXHRcdFx0XHR4MSA9IHgyIC0gY2FyZXRTaXplO1xyXG5cdFx0XHRcdHgzID0geDIgKyBjYXJldFNpemU7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0eDIgPSB2bS5jYXJldFg7XHJcblx0XHRcdFx0eDEgPSB4MiAtIGNhcmV0U2l6ZTtcclxuXHRcdFx0XHR4MyA9IHgyICsgY2FyZXRTaXplO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh5QWxpZ24gPT09ICd0b3AnKSB7XHJcblx0XHRcdFx0eTEgPSBwdFk7XHJcblx0XHRcdFx0eTIgPSB5MSAtIGNhcmV0U2l6ZTtcclxuXHRcdFx0XHR5MyA9IHkxO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHkxID0gcHRZICsgaGVpZ2h0O1xyXG5cdFx0XHRcdHkyID0geTEgKyBjYXJldFNpemU7XHJcblx0XHRcdFx0eTMgPSB5MTtcclxuXHRcdFx0XHQvLyBpbnZlcnQgZHJhd2luZyBvcmRlclxyXG5cdFx0XHRcdHZhciB0bXAgPSB4MztcclxuXHRcdFx0XHR4MyA9IHgxO1xyXG5cdFx0XHRcdHgxID0gdG1wO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4ge3gxOiB4MSwgeDI6IHgyLCB4MzogeDMsIHkxOiB5MSwgeTI6IHkyLCB5MzogeTN9O1xyXG5cdH0sXHJcblxyXG5cdGRyYXdUaXRsZTogZnVuY3Rpb24ocHQsIHZtLCBjdHgsIG9wYWNpdHkpIHtcclxuXHRcdHZhciB0aXRsZSA9IHZtLnRpdGxlO1xyXG5cclxuXHRcdGlmICh0aXRsZS5sZW5ndGgpIHtcclxuXHRcdFx0Y3R4LnRleHRBbGlnbiA9IHZtLl90aXRsZUFsaWduO1xyXG5cdFx0XHRjdHgudGV4dEJhc2VsaW5lID0gJ3RvcCc7XHJcblxyXG5cdFx0XHR2YXIgdGl0bGVGb250U2l6ZSA9IHZtLnRpdGxlRm9udFNpemU7XHJcblx0XHRcdHZhciB0aXRsZVNwYWNpbmcgPSB2bS50aXRsZVNwYWNpbmc7XHJcblxyXG5cdFx0XHRjdHguZmlsbFN0eWxlID0gbWVyZ2VPcGFjaXR5KHZtLnRpdGxlRm9udENvbG9yLCBvcGFjaXR5KTtcclxuXHRcdFx0Y3R4LmZvbnQgPSBoZWxwZXJzLmZvbnRTdHJpbmcodGl0bGVGb250U2l6ZSwgdm0uX3RpdGxlRm9udFN0eWxlLCB2bS5fdGl0bGVGb250RmFtaWx5KTtcclxuXHJcblx0XHRcdHZhciBpLCBsZW47XHJcblx0XHRcdGZvciAoaSA9IDAsIGxlbiA9IHRpdGxlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XHJcblx0XHRcdFx0Y3R4LmZpbGxUZXh0KHRpdGxlW2ldLCBwdC54LCBwdC55KTtcclxuXHRcdFx0XHRwdC55ICs9IHRpdGxlRm9udFNpemUgKyB0aXRsZVNwYWNpbmc7IC8vIExpbmUgSGVpZ2h0IGFuZCBzcGFjaW5nXHJcblxyXG5cdFx0XHRcdGlmIChpICsgMSA9PT0gdGl0bGUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRwdC55ICs9IHZtLnRpdGxlTWFyZ2luQm90dG9tIC0gdGl0bGVTcGFjaW5nOyAvLyBJZiBMYXN0LCBhZGQgbWFyZ2luLCByZW1vdmUgc3BhY2luZ1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdGRyYXdCb2R5OiBmdW5jdGlvbihwdCwgdm0sIGN0eCwgb3BhY2l0eSkge1xyXG5cdFx0dmFyIGJvZHlGb250U2l6ZSA9IHZtLmJvZHlGb250U2l6ZTtcclxuXHRcdHZhciBib2R5U3BhY2luZyA9IHZtLmJvZHlTcGFjaW5nO1xyXG5cdFx0dmFyIGJvZHkgPSB2bS5ib2R5O1xyXG5cclxuXHRcdGN0eC50ZXh0QWxpZ24gPSB2bS5fYm9keUFsaWduO1xyXG5cdFx0Y3R4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xyXG5cdFx0Y3R4LmZvbnQgPSBoZWxwZXJzLmZvbnRTdHJpbmcoYm9keUZvbnRTaXplLCB2bS5fYm9keUZvbnRTdHlsZSwgdm0uX2JvZHlGb250RmFtaWx5KTtcclxuXHJcblx0XHQvLyBCZWZvcmUgQm9keVxyXG5cdFx0dmFyIHhMaW5lUGFkZGluZyA9IDA7XHJcblx0XHR2YXIgZmlsbExpbmVPZlRleHQgPSBmdW5jdGlvbihsaW5lKSB7XHJcblx0XHRcdGN0eC5maWxsVGV4dChsaW5lLCBwdC54ICsgeExpbmVQYWRkaW5nLCBwdC55KTtcclxuXHRcdFx0cHQueSArPSBib2R5Rm9udFNpemUgKyBib2R5U3BhY2luZztcclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gQmVmb3JlIGJvZHkgbGluZXNcclxuXHRcdGN0eC5maWxsU3R5bGUgPSBtZXJnZU9wYWNpdHkodm0uYm9keUZvbnRDb2xvciwgb3BhY2l0eSk7XHJcblx0XHRoZWxwZXJzLmVhY2godm0uYmVmb3JlQm9keSwgZmlsbExpbmVPZlRleHQpO1xyXG5cclxuXHRcdHZhciBkcmF3Q29sb3JCb3hlcyA9IHZtLmRpc3BsYXlDb2xvcnM7XHJcblx0XHR4TGluZVBhZGRpbmcgPSBkcmF3Q29sb3JCb3hlcyA/IChib2R5Rm9udFNpemUgKyAyKSA6IDA7XHJcblxyXG5cdFx0Ly8gRHJhdyBib2R5IGxpbmVzIG5vd1xyXG5cdFx0aGVscGVycy5lYWNoKGJvZHksIGZ1bmN0aW9uKGJvZHlJdGVtLCBpKSB7XHJcblx0XHRcdHZhciB0ZXh0Q29sb3IgPSBtZXJnZU9wYWNpdHkodm0ubGFiZWxUZXh0Q29sb3JzW2ldLCBvcGFjaXR5KTtcclxuXHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvcjtcclxuXHRcdFx0aGVscGVycy5lYWNoKGJvZHlJdGVtLmJlZm9yZSwgZmlsbExpbmVPZlRleHQpO1xyXG5cclxuXHRcdFx0aGVscGVycy5lYWNoKGJvZHlJdGVtLmxpbmVzLCBmdW5jdGlvbihsaW5lKSB7XHJcblx0XHRcdFx0Ly8gRHJhdyBMZWdlbmQtbGlrZSBib3hlcyBpZiBuZWVkZWRcclxuXHRcdFx0XHRpZiAoZHJhd0NvbG9yQm94ZXMpIHtcclxuXHRcdFx0XHRcdC8vIEZpbGwgYSB3aGl0ZSByZWN0IHNvIHRoYXQgY29sb3VycyBtZXJnZSBuaWNlbHkgaWYgdGhlIG9wYWNpdHkgaXMgPCAxXHJcblx0XHRcdFx0XHRjdHguZmlsbFN0eWxlID0gbWVyZ2VPcGFjaXR5KHZtLmxlZ2VuZENvbG9yQmFja2dyb3VuZCwgb3BhY2l0eSk7XHJcblx0XHRcdFx0XHRjdHguZmlsbFJlY3QocHQueCwgcHQueSwgYm9keUZvbnRTaXplLCBib2R5Rm9udFNpemUpO1xyXG5cclxuXHRcdFx0XHRcdC8vIEJvcmRlclxyXG5cdFx0XHRcdFx0Y3R4LmxpbmVXaWR0aCA9IDE7XHJcblx0XHRcdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBtZXJnZU9wYWNpdHkodm0ubGFiZWxDb2xvcnNbaV0uYm9yZGVyQ29sb3IsIG9wYWNpdHkpO1xyXG5cdFx0XHRcdFx0Y3R4LnN0cm9rZVJlY3QocHQueCwgcHQueSwgYm9keUZvbnRTaXplLCBib2R5Rm9udFNpemUpO1xyXG5cclxuXHRcdFx0XHRcdC8vIElubmVyIHNxdWFyZVxyXG5cdFx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IG1lcmdlT3BhY2l0eSh2bS5sYWJlbENvbG9yc1tpXS5iYWNrZ3JvdW5kQ29sb3IsIG9wYWNpdHkpO1xyXG5cdFx0XHRcdFx0Y3R4LmZpbGxSZWN0KHB0LnggKyAxLCBwdC55ICsgMSwgYm9keUZvbnRTaXplIC0gMiwgYm9keUZvbnRTaXplIC0gMik7XHJcblx0XHRcdFx0XHRjdHguZmlsbFN0eWxlID0gdGV4dENvbG9yO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZmlsbExpbmVPZlRleHQobGluZSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0aGVscGVycy5lYWNoKGJvZHlJdGVtLmFmdGVyLCBmaWxsTGluZU9mVGV4dCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBSZXNldCBiYWNrIHRvIDAgZm9yIGFmdGVyIGJvZHlcclxuXHRcdHhMaW5lUGFkZGluZyA9IDA7XHJcblxyXG5cdFx0Ly8gQWZ0ZXIgYm9keSBsaW5lc1xyXG5cdFx0aGVscGVycy5lYWNoKHZtLmFmdGVyQm9keSwgZmlsbExpbmVPZlRleHQpO1xyXG5cdFx0cHQueSAtPSBib2R5U3BhY2luZzsgLy8gUmVtb3ZlIGxhc3QgYm9keSBzcGFjaW5nXHJcblx0fSxcclxuXHJcblx0ZHJhd0Zvb3RlcjogZnVuY3Rpb24ocHQsIHZtLCBjdHgsIG9wYWNpdHkpIHtcclxuXHRcdHZhciBmb290ZXIgPSB2bS5mb290ZXI7XHJcblxyXG5cdFx0aWYgKGZvb3Rlci5sZW5ndGgpIHtcclxuXHRcdFx0cHQueSArPSB2bS5mb290ZXJNYXJnaW5Ub3A7XHJcblxyXG5cdFx0XHRjdHgudGV4dEFsaWduID0gdm0uX2Zvb3RlckFsaWduO1xyXG5cdFx0XHRjdHgudGV4dEJhc2VsaW5lID0gJ3RvcCc7XHJcblxyXG5cdFx0XHRjdHguZmlsbFN0eWxlID0gbWVyZ2VPcGFjaXR5KHZtLmZvb3RlckZvbnRDb2xvciwgb3BhY2l0eSk7XHJcblx0XHRcdGN0eC5mb250ID0gaGVscGVycy5mb250U3RyaW5nKHZtLmZvb3RlckZvbnRTaXplLCB2bS5fZm9vdGVyRm9udFN0eWxlLCB2bS5fZm9vdGVyRm9udEZhbWlseSk7XHJcblxyXG5cdFx0XHRoZWxwZXJzLmVhY2goZm9vdGVyLCBmdW5jdGlvbihsaW5lKSB7XHJcblx0XHRcdFx0Y3R4LmZpbGxUZXh0KGxpbmUsIHB0LngsIHB0LnkpO1xyXG5cdFx0XHRcdHB0LnkgKz0gdm0uZm9vdGVyRm9udFNpemUgKyB2bS5mb290ZXJTcGFjaW5nO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRkcmF3QmFja2dyb3VuZDogZnVuY3Rpb24ocHQsIHZtLCBjdHgsIHRvb2x0aXBTaXplLCBvcGFjaXR5KSB7XHJcblx0XHRjdHguZmlsbFN0eWxlID0gbWVyZ2VPcGFjaXR5KHZtLmJhY2tncm91bmRDb2xvciwgb3BhY2l0eSk7XHJcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSBtZXJnZU9wYWNpdHkodm0uYm9yZGVyQ29sb3IsIG9wYWNpdHkpO1xyXG5cdFx0Y3R4LmxpbmVXaWR0aCA9IHZtLmJvcmRlcldpZHRoO1xyXG5cdFx0dmFyIHhBbGlnbiA9IHZtLnhBbGlnbjtcclxuXHRcdHZhciB5QWxpZ24gPSB2bS55QWxpZ247XHJcblx0XHR2YXIgeCA9IHB0Lng7XHJcblx0XHR2YXIgeSA9IHB0Lnk7XHJcblx0XHR2YXIgd2lkdGggPSB0b29sdGlwU2l6ZS53aWR0aDtcclxuXHRcdHZhciBoZWlnaHQgPSB0b29sdGlwU2l6ZS5oZWlnaHQ7XHJcblx0XHR2YXIgcmFkaXVzID0gdm0uY29ybmVyUmFkaXVzO1xyXG5cclxuXHRcdGN0eC5iZWdpblBhdGgoKTtcclxuXHRcdGN0eC5tb3ZlVG8oeCArIHJhZGl1cywgeSk7XHJcblx0XHRpZiAoeUFsaWduID09PSAndG9wJykge1xyXG5cdFx0XHR0aGlzLmRyYXdDYXJldChwdCwgdG9vbHRpcFNpemUpO1xyXG5cdFx0fVxyXG5cdFx0Y3R4LmxpbmVUbyh4ICsgd2lkdGggLSByYWRpdXMsIHkpO1xyXG5cdFx0Y3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyByYWRpdXMpO1xyXG5cdFx0aWYgKHlBbGlnbiA9PT0gJ2NlbnRlcicgJiYgeEFsaWduID09PSAncmlnaHQnKSB7XHJcblx0XHRcdHRoaXMuZHJhd0NhcmV0KHB0LCB0b29sdGlwU2l6ZSk7XHJcblx0XHR9XHJcblx0XHRjdHgubGluZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cyk7XHJcblx0XHRjdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCk7XHJcblx0XHRpZiAoeUFsaWduID09PSAnYm90dG9tJykge1xyXG5cdFx0XHR0aGlzLmRyYXdDYXJldChwdCwgdG9vbHRpcFNpemUpO1xyXG5cdFx0fVxyXG5cdFx0Y3R4LmxpbmVUbyh4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0KTtcclxuXHRcdGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHkgKyBoZWlnaHQsIHgsIHkgKyBoZWlnaHQgLSByYWRpdXMpO1xyXG5cdFx0aWYgKHlBbGlnbiA9PT0gJ2NlbnRlcicgJiYgeEFsaWduID09PSAnbGVmdCcpIHtcclxuXHRcdFx0dGhpcy5kcmF3Q2FyZXQocHQsIHRvb2x0aXBTaXplKTtcclxuXHRcdH1cclxuXHRcdGN0eC5saW5lVG8oeCwgeSArIHJhZGl1cyk7XHJcblx0XHRjdHgucXVhZHJhdGljQ3VydmVUbyh4LCB5LCB4ICsgcmFkaXVzLCB5KTtcclxuXHRcdGN0eC5jbG9zZVBhdGgoKTtcclxuXHJcblx0XHRjdHguZmlsbCgpO1xyXG5cclxuXHRcdGlmICh2bS5ib3JkZXJXaWR0aCA+IDApIHtcclxuXHRcdFx0Y3R4LnN0cm9rZSgpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdGRyYXc6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGN0eCA9IHRoaXMuX2NoYXJ0LmN0eDtcclxuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XHJcblxyXG5cdFx0aWYgKHZtLm9wYWNpdHkgPT09IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciB0b29sdGlwU2l6ZSA9IHtcclxuXHRcdFx0d2lkdGg6IHZtLndpZHRoLFxyXG5cdFx0XHRoZWlnaHQ6IHZtLmhlaWdodFxyXG5cdFx0fTtcclxuXHRcdHZhciBwdCA9IHtcclxuXHRcdFx0eDogdm0ueCxcclxuXHRcdFx0eTogdm0ueVxyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBJRTExL0VkZ2UgZG9lcyBub3QgbGlrZSB2ZXJ5IHNtYWxsIG9wYWNpdGllcywgc28gc25hcCB0byAwXHJcblx0XHR2YXIgb3BhY2l0eSA9IE1hdGguYWJzKHZtLm9wYWNpdHkgPCAxZS0zKSA/IDAgOiB2bS5vcGFjaXR5O1xyXG5cclxuXHRcdC8vIFRydXRoeS9mYWxzZXkgdmFsdWUgZm9yIGVtcHR5IHRvb2x0aXBcclxuXHRcdHZhciBoYXNUb29sdGlwQ29udGVudCA9IHZtLnRpdGxlLmxlbmd0aCB8fCB2bS5iZWZvcmVCb2R5Lmxlbmd0aCB8fCB2bS5ib2R5Lmxlbmd0aCB8fCB2bS5hZnRlckJvZHkubGVuZ3RoIHx8IHZtLmZvb3Rlci5sZW5ndGg7XHJcblxyXG5cdFx0aWYgKHRoaXMuX29wdGlvbnMuZW5hYmxlZCAmJiBoYXNUb29sdGlwQ29udGVudCkge1xyXG5cdFx0XHQvLyBEcmF3IEJhY2tncm91bmRcclxuXHRcdFx0dGhpcy5kcmF3QmFja2dyb3VuZChwdCwgdm0sIGN0eCwgdG9vbHRpcFNpemUsIG9wYWNpdHkpO1xyXG5cclxuXHRcdFx0Ly8gRHJhdyBUaXRsZSwgQm9keSwgYW5kIEZvb3RlclxyXG5cdFx0XHRwdC54ICs9IHZtLnhQYWRkaW5nO1xyXG5cdFx0XHRwdC55ICs9IHZtLnlQYWRkaW5nO1xyXG5cclxuXHRcdFx0Ly8gVGl0bGVzXHJcblx0XHRcdHRoaXMuZHJhd1RpdGxlKHB0LCB2bSwgY3R4LCBvcGFjaXR5KTtcclxuXHJcblx0XHRcdC8vIEJvZHlcclxuXHRcdFx0dGhpcy5kcmF3Qm9keShwdCwgdm0sIGN0eCwgb3BhY2l0eSk7XHJcblxyXG5cdFx0XHQvLyBGb290ZXJcclxuXHRcdFx0dGhpcy5kcmF3Rm9vdGVyKHB0LCB2bSwgY3R4LCBvcGFjaXR5KTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGUgYW4gZXZlbnRcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqIEBwYXJhbSB7SUV2ZW50fSBldmVudCAtIFRoZSBldmVudCB0byBoYW5kbGVcclxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgdG9vbHRpcCBjaGFuZ2VkXHJcblx0ICovXHJcblx0aGFuZGxlRXZlbnQ6IGZ1bmN0aW9uKGUpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHR2YXIgb3B0aW9ucyA9IG1lLl9vcHRpb25zO1xyXG5cdFx0dmFyIGNoYW5nZWQgPSBmYWxzZTtcclxuXHJcblx0XHRtZS5fbGFzdEFjdGl2ZSA9IG1lLl9sYXN0QWN0aXZlIHx8IFtdO1xyXG5cclxuXHRcdC8vIEZpbmQgQWN0aXZlIEVsZW1lbnRzIGZvciB0b29sdGlwc1xyXG5cdFx0aWYgKGUudHlwZSA9PT0gJ21vdXNlb3V0Jykge1xyXG5cdFx0XHRtZS5fYWN0aXZlID0gW107XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtZS5fYWN0aXZlID0gbWUuX2NoYXJ0LmdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUoZSwgb3B0aW9ucy5tb2RlLCBvcHRpb25zKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZW1lbWJlciBMYXN0IEFjdGl2ZXNcclxuXHRcdGNoYW5nZWQgPSAhaGVscGVycy5hcnJheUVxdWFscyhtZS5fYWN0aXZlLCBtZS5fbGFzdEFjdGl2ZSk7XHJcblxyXG5cdFx0Ly8gT25seSBoYW5kbGUgdGFyZ2V0IGV2ZW50IG9uIHRvb2x0aXAgY2hhbmdlXHJcblx0XHRpZiAoY2hhbmdlZCkge1xyXG5cdFx0XHRtZS5fbGFzdEFjdGl2ZSA9IG1lLl9hY3RpdmU7XHJcblxyXG5cdFx0XHRpZiAob3B0aW9ucy5lbmFibGVkIHx8IG9wdGlvbnMuY3VzdG9tKSB7XHJcblx0XHRcdFx0bWUuX2V2ZW50UG9zaXRpb24gPSB7XHJcblx0XHRcdFx0XHR4OiBlLngsXHJcblx0XHRcdFx0XHR5OiBlLnlcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRtZS51cGRhdGUodHJ1ZSk7XHJcblx0XHRcdFx0bWUucGl2b3QoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjaGFuZ2VkO1xyXG5cdH1cclxufSk7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBDaGFydC5Ub29sdGlwLnBvc2l0aW9uZXJzXHJcbiAqL1xyXG5leHBvcnRzLnBvc2l0aW9uZXJzID0gcG9zaXRpb25lcnM7XHJcblxyXG5cclxufSx7XCIyNlwiOjI2LFwiMjdcIjoyNyxcIjQ2XCI6NDZ9XSwzNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG52YXIgRWxlbWVudCA9IHJlcXVpcmUoMjcpO1xyXG52YXIgaGVscGVycyA9IHJlcXVpcmUoNDYpO1xyXG5cclxuZGVmYXVsdHMuX3NldCgnZ2xvYmFsJywge1xyXG5cdGVsZW1lbnRzOiB7XHJcblx0XHRhcmM6IHtcclxuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBkZWZhdWx0cy5nbG9iYWwuZGVmYXVsdENvbG9yLFxyXG5cdFx0XHRib3JkZXJDb2xvcjogJyNmZmYnLFxyXG5cdFx0XHRib3JkZXJXaWR0aDogMlxyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnQuZXh0ZW5kKHtcclxuXHRpbkxhYmVsUmFuZ2U6IGZ1bmN0aW9uKG1vdXNlWCkge1xyXG5cdFx0dmFyIHZtID0gdGhpcy5fdmlldztcclxuXHJcblx0XHRpZiAodm0pIHtcclxuXHRcdFx0cmV0dXJuIChNYXRoLnBvdyhtb3VzZVggLSB2bS54LCAyKSA8IE1hdGgucG93KHZtLnJhZGl1cyArIHZtLmhvdmVyUmFkaXVzLCAyKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fSxcclxuXHJcblx0aW5SYW5nZTogZnVuY3Rpb24oY2hhcnRYLCBjaGFydFkpIHtcclxuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XHJcblxyXG5cdFx0aWYgKHZtKSB7XHJcblx0XHRcdHZhciBwb2ludFJlbGF0aXZlUG9zaXRpb24gPSBoZWxwZXJzLmdldEFuZ2xlRnJvbVBvaW50KHZtLCB7eDogY2hhcnRYLCB5OiBjaGFydFl9KTtcclxuXHRcdFx0dmFyXHRhbmdsZSA9IHBvaW50UmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuXHRcdFx0dmFyIGRpc3RhbmNlID0gcG9pbnRSZWxhdGl2ZVBvc2l0aW9uLmRpc3RhbmNlO1xyXG5cclxuXHRcdFx0Ly8gU2FuaXRpc2UgYW5nbGUgcmFuZ2VcclxuXHRcdFx0dmFyIHN0YXJ0QW5nbGUgPSB2bS5zdGFydEFuZ2xlO1xyXG5cdFx0XHR2YXIgZW5kQW5nbGUgPSB2bS5lbmRBbmdsZTtcclxuXHRcdFx0d2hpbGUgKGVuZEFuZ2xlIDwgc3RhcnRBbmdsZSkge1xyXG5cdFx0XHRcdGVuZEFuZ2xlICs9IDIuMCAqIE1hdGguUEk7XHJcblx0XHRcdH1cclxuXHRcdFx0d2hpbGUgKGFuZ2xlID4gZW5kQW5nbGUpIHtcclxuXHRcdFx0XHRhbmdsZSAtPSAyLjAgKiBNYXRoLlBJO1xyXG5cdFx0XHR9XHJcblx0XHRcdHdoaWxlIChhbmdsZSA8IHN0YXJ0QW5nbGUpIHtcclxuXHRcdFx0XHRhbmdsZSArPSAyLjAgKiBNYXRoLlBJO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBDaGVjayBpZiB3aXRoaW4gdGhlIHJhbmdlIG9mIHRoZSBvcGVuL2Nsb3NlIGFuZ2xlXHJcblx0XHRcdHZhciBiZXR3ZWVuQW5nbGVzID0gKGFuZ2xlID49IHN0YXJ0QW5nbGUgJiYgYW5nbGUgPD0gZW5kQW5nbGUpO1xyXG5cdFx0XHR2YXIgd2l0aGluUmFkaXVzID0gKGRpc3RhbmNlID49IHZtLmlubmVyUmFkaXVzICYmIGRpc3RhbmNlIDw9IHZtLm91dGVyUmFkaXVzKTtcclxuXHJcblx0XHRcdHJldHVybiAoYmV0d2VlbkFuZ2xlcyAmJiB3aXRoaW5SYWRpdXMpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH0sXHJcblxyXG5cdGdldENlbnRlclBvaW50OiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XHJcblx0XHR2YXIgaGFsZkFuZ2xlID0gKHZtLnN0YXJ0QW5nbGUgKyB2bS5lbmRBbmdsZSkgLyAyO1xyXG5cdFx0dmFyIGhhbGZSYWRpdXMgPSAodm0uaW5uZXJSYWRpdXMgKyB2bS5vdXRlclJhZGl1cykgLyAyO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0eDogdm0ueCArIE1hdGguY29zKGhhbGZBbmdsZSkgKiBoYWxmUmFkaXVzLFxyXG5cdFx0XHR5OiB2bS55ICsgTWF0aC5zaW4oaGFsZkFuZ2xlKSAqIGhhbGZSYWRpdXNcclxuXHRcdH07XHJcblx0fSxcclxuXHJcblx0Z2V0QXJlYTogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgdm0gPSB0aGlzLl92aWV3O1xyXG5cdFx0cmV0dXJuIE1hdGguUEkgKiAoKHZtLmVuZEFuZ2xlIC0gdm0uc3RhcnRBbmdsZSkgLyAoMiAqIE1hdGguUEkpKSAqIChNYXRoLnBvdyh2bS5vdXRlclJhZGl1cywgMikgLSBNYXRoLnBvdyh2bS5pbm5lclJhZGl1cywgMikpO1xyXG5cdH0sXHJcblxyXG5cdHRvb2x0aXBQb3NpdGlvbjogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgdm0gPSB0aGlzLl92aWV3O1xyXG5cdFx0dmFyIGNlbnRyZUFuZ2xlID0gdm0uc3RhcnRBbmdsZSArICgodm0uZW5kQW5nbGUgLSB2bS5zdGFydEFuZ2xlKSAvIDIpO1xyXG5cdFx0dmFyIHJhbmdlRnJvbUNlbnRyZSA9ICh2bS5vdXRlclJhZGl1cyAtIHZtLmlubmVyUmFkaXVzKSAvIDIgKyB2bS5pbm5lclJhZGl1cztcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR4OiB2bS54ICsgKE1hdGguY29zKGNlbnRyZUFuZ2xlKSAqIHJhbmdlRnJvbUNlbnRyZSksXHJcblx0XHRcdHk6IHZtLnkgKyAoTWF0aC5zaW4oY2VudHJlQW5nbGUpICogcmFuZ2VGcm9tQ2VudHJlKVxyXG5cdFx0fTtcclxuXHR9LFxyXG5cclxuXHRkcmF3OiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBjdHggPSB0aGlzLl9jaGFydC5jdHg7XHJcblx0XHR2YXIgdm0gPSB0aGlzLl92aWV3O1xyXG5cdFx0dmFyIHNBID0gdm0uc3RhcnRBbmdsZTtcclxuXHRcdHZhciBlQSA9IHZtLmVuZEFuZ2xlO1xyXG5cclxuXHRcdGN0eC5iZWdpblBhdGgoKTtcclxuXHJcblx0XHRjdHguYXJjKHZtLngsIHZtLnksIHZtLm91dGVyUmFkaXVzLCBzQSwgZUEpO1xyXG5cdFx0Y3R4LmFyYyh2bS54LCB2bS55LCB2bS5pbm5lclJhZGl1cywgZUEsIHNBLCB0cnVlKTtcclxuXHJcblx0XHRjdHguY2xvc2VQYXRoKCk7XHJcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSB2bS5ib3JkZXJDb2xvcjtcclxuXHRcdGN0eC5saW5lV2lkdGggPSB2bS5ib3JkZXJXaWR0aDtcclxuXHJcblx0XHRjdHguZmlsbFN0eWxlID0gdm0uYmFja2dyb3VuZENvbG9yO1xyXG5cclxuXHRcdGN0eC5maWxsKCk7XHJcblx0XHRjdHgubGluZUpvaW4gPSAnYmV2ZWwnO1xyXG5cclxuXHRcdGlmICh2bS5ib3JkZXJXaWR0aCkge1xyXG5cdFx0XHRjdHguc3Ryb2tlKCk7XHJcblx0XHR9XHJcblx0fVxyXG59KTtcclxuXHJcbn0se1wiMjZcIjoyNixcIjI3XCI6MjcsXCI0NlwiOjQ2fV0sMzg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKDI2KTtcclxudmFyIEVsZW1lbnQgPSByZXF1aXJlKDI3KTtcclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxuXHJcbnZhciBnbG9iYWxEZWZhdWx0cyA9IGRlZmF1bHRzLmdsb2JhbDtcclxuXHJcbmRlZmF1bHRzLl9zZXQoJ2dsb2JhbCcsIHtcclxuXHRlbGVtZW50czoge1xyXG5cdFx0bGluZToge1xyXG5cdFx0XHR0ZW5zaW9uOiAwLjQsXHJcblx0XHRcdGJhY2tncm91bmRDb2xvcjogZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdENvbG9yLFxyXG5cdFx0XHRib3JkZXJXaWR0aDogMyxcclxuXHRcdFx0Ym9yZGVyQ29sb3I6IGdsb2JhbERlZmF1bHRzLmRlZmF1bHRDb2xvcixcclxuXHRcdFx0Ym9yZGVyQ2FwU3R5bGU6ICdidXR0JyxcclxuXHRcdFx0Ym9yZGVyRGFzaDogW10sXHJcblx0XHRcdGJvcmRlckRhc2hPZmZzZXQ6IDAuMCxcclxuXHRcdFx0Ym9yZGVySm9pblN0eWxlOiAnbWl0ZXInLFxyXG5cdFx0XHRjYXBCZXppZXJQb2ludHM6IHRydWUsXHJcblx0XHRcdGZpbGw6IHRydWUsIC8vIGRvIHdlIGZpbGwgaW4gdGhlIGFyZWEgYmV0d2VlbiB0aGUgbGluZSBhbmQgaXRzIGJhc2UgYXhpc1xyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnQuZXh0ZW5kKHtcclxuXHRkcmF3OiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHR2YXIgdm0gPSBtZS5fdmlldztcclxuXHRcdHZhciBjdHggPSBtZS5fY2hhcnQuY3R4O1xyXG5cdFx0dmFyIHNwYW5HYXBzID0gdm0uc3BhbkdhcHM7XHJcblx0XHR2YXIgcG9pbnRzID0gbWUuX2NoaWxkcmVuLnNsaWNlKCk7IC8vIGNsb25lIGFycmF5XHJcblx0XHR2YXIgZ2xvYmFsT3B0aW9uTGluZUVsZW1lbnRzID0gZ2xvYmFsRGVmYXVsdHMuZWxlbWVudHMubGluZTtcclxuXHRcdHZhciBsYXN0RHJhd25JbmRleCA9IC0xO1xyXG5cdFx0dmFyIGluZGV4LCBjdXJyZW50LCBwcmV2aW91cywgY3VycmVudFZNO1xyXG5cclxuXHRcdC8vIElmIHdlIGFyZSBsb29waW5nLCBhZGRpbmcgdGhlIGZpcnN0IHBvaW50IGFnYWluXHJcblx0XHRpZiAobWUuX2xvb3AgJiYgcG9pbnRzLmxlbmd0aCkge1xyXG5cdFx0XHRwb2ludHMucHVzaChwb2ludHNbMF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGN0eC5zYXZlKCk7XHJcblxyXG5cdFx0Ly8gU3Ryb2tlIExpbmUgT3B0aW9uc1xyXG5cdFx0Y3R4LmxpbmVDYXAgPSB2bS5ib3JkZXJDYXBTdHlsZSB8fCBnbG9iYWxPcHRpb25MaW5lRWxlbWVudHMuYm9yZGVyQ2FwU3R5bGU7XHJcblxyXG5cdFx0Ly8gSUUgOSBhbmQgMTAgZG8gbm90IHN1cHBvcnQgbGluZSBkYXNoXHJcblx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XHJcblx0XHRcdGN0eC5zZXRMaW5lRGFzaCh2bS5ib3JkZXJEYXNoIHx8IGdsb2JhbE9wdGlvbkxpbmVFbGVtZW50cy5ib3JkZXJEYXNoKTtcclxuXHRcdH1cclxuXHJcblx0XHRjdHgubGluZURhc2hPZmZzZXQgPSB2bS5ib3JkZXJEYXNoT2Zmc2V0IHx8IGdsb2JhbE9wdGlvbkxpbmVFbGVtZW50cy5ib3JkZXJEYXNoT2Zmc2V0O1xyXG5cdFx0Y3R4LmxpbmVKb2luID0gdm0uYm9yZGVySm9pblN0eWxlIHx8IGdsb2JhbE9wdGlvbkxpbmVFbGVtZW50cy5ib3JkZXJKb2luU3R5bGU7XHJcblx0XHRjdHgubGluZVdpZHRoID0gdm0uYm9yZGVyV2lkdGggfHwgZ2xvYmFsT3B0aW9uTGluZUVsZW1lbnRzLmJvcmRlcldpZHRoO1xyXG5cdFx0Y3R4LnN0cm9rZVN0eWxlID0gdm0uYm9yZGVyQ29sb3IgfHwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdENvbG9yO1xyXG5cclxuXHRcdC8vIFN0cm9rZSBMaW5lXHJcblx0XHRjdHguYmVnaW5QYXRoKCk7XHJcblx0XHRsYXN0RHJhd25JbmRleCA9IC0xO1xyXG5cclxuXHRcdGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBvaW50cy5sZW5ndGg7ICsraW5kZXgpIHtcclxuXHRcdFx0Y3VycmVudCA9IHBvaW50c1tpbmRleF07XHJcblx0XHRcdHByZXZpb3VzID0gaGVscGVycy5wcmV2aW91c0l0ZW0ocG9pbnRzLCBpbmRleCk7XHJcblx0XHRcdGN1cnJlbnRWTSA9IGN1cnJlbnQuX3ZpZXc7XHJcblxyXG5cdFx0XHQvLyBGaXJzdCBwb2ludCBtb3ZlcyB0byBpdCdzIHN0YXJ0aW5nIHBvc2l0aW9uIG5vIG1hdHRlciB3aGF0XHJcblx0XHRcdGlmIChpbmRleCA9PT0gMCkge1xyXG5cdFx0XHRcdGlmICghY3VycmVudFZNLnNraXApIHtcclxuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oY3VycmVudFZNLngsIGN1cnJlbnRWTS55KTtcclxuXHRcdFx0XHRcdGxhc3REcmF3bkluZGV4ID0gaW5kZXg7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHByZXZpb3VzID0gbGFzdERyYXduSW5kZXggPT09IC0xID8gcHJldmlvdXMgOiBwb2ludHNbbGFzdERyYXduSW5kZXhdO1xyXG5cclxuXHRcdFx0XHRpZiAoIWN1cnJlbnRWTS5za2lwKSB7XHJcblx0XHRcdFx0XHRpZiAoKGxhc3REcmF3bkluZGV4ICE9PSAoaW5kZXggLSAxKSAmJiAhc3BhbkdhcHMpIHx8IGxhc3REcmF3bkluZGV4ID09PSAtMSkge1xyXG5cdFx0XHRcdFx0XHQvLyBUaGVyZSB3YXMgYSBnYXAgYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHBvaW50IGFmdGVyIHRoZSBnYXBcclxuXHRcdFx0XHRcdFx0Y3R4Lm1vdmVUbyhjdXJyZW50Vk0ueCwgY3VycmVudFZNLnkpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Ly8gTGluZSB0byBuZXh0IHBvaW50XHJcblx0XHRcdFx0XHRcdGhlbHBlcnMuY2FudmFzLmxpbmVUbyhjdHgsIHByZXZpb3VzLl92aWV3LCBjdXJyZW50Ll92aWV3KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGxhc3REcmF3bkluZGV4ID0gaW5kZXg7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Y3R4LnN0cm9rZSgpO1xyXG5cdFx0Y3R4LnJlc3RvcmUoKTtcclxuXHR9XHJcbn0pO1xyXG5cclxufSx7XCIyNlwiOjI2LFwiMjdcIjoyNyxcIjQ2XCI6NDZ9XSwzOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG52YXIgRWxlbWVudCA9IHJlcXVpcmUoMjcpO1xyXG52YXIgaGVscGVycyA9IHJlcXVpcmUoNDYpO1xyXG5cclxudmFyIGRlZmF1bHRDb2xvciA9IGRlZmF1bHRzLmdsb2JhbC5kZWZhdWx0Q29sb3I7XHJcblxyXG5kZWZhdWx0cy5fc2V0KCdnbG9iYWwnLCB7XHJcblx0ZWxlbWVudHM6IHtcclxuXHRcdHBvaW50OiB7XHJcblx0XHRcdHJhZGl1czogMyxcclxuXHRcdFx0cG9pbnRTdHlsZTogJ2NpcmNsZScsXHJcblx0XHRcdGJhY2tncm91bmRDb2xvcjogZGVmYXVsdENvbG9yLFxyXG5cdFx0XHRib3JkZXJDb2xvcjogZGVmYXVsdENvbG9yLFxyXG5cdFx0XHRib3JkZXJXaWR0aDogMSxcclxuXHRcdFx0Ly8gSG92ZXJcclxuXHRcdFx0aGl0UmFkaXVzOiAxLFxyXG5cdFx0XHRob3ZlclJhZGl1czogNCxcclxuXHRcdFx0aG92ZXJCb3JkZXJXaWR0aDogMVxyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiB4UmFuZ2UobW91c2VYKSB7XHJcblx0dmFyIHZtID0gdGhpcy5fdmlldztcclxuXHRyZXR1cm4gdm0gPyAoTWF0aC5hYnMobW91c2VYIC0gdm0ueCkgPCB2bS5yYWRpdXMgKyB2bS5oaXRSYWRpdXMpIDogZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHlSYW5nZShtb3VzZVkpIHtcclxuXHR2YXIgdm0gPSB0aGlzLl92aWV3O1xyXG5cdHJldHVybiB2bSA/IChNYXRoLmFicyhtb3VzZVkgLSB2bS55KSA8IHZtLnJhZGl1cyArIHZtLmhpdFJhZGl1cykgOiBmYWxzZTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbGVtZW50LmV4dGVuZCh7XHJcblx0aW5SYW5nZTogZnVuY3Rpb24obW91c2VYLCBtb3VzZVkpIHtcclxuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XHJcblx0XHRyZXR1cm4gdm0gPyAoKE1hdGgucG93KG1vdXNlWCAtIHZtLngsIDIpICsgTWF0aC5wb3cobW91c2VZIC0gdm0ueSwgMikpIDwgTWF0aC5wb3codm0uaGl0UmFkaXVzICsgdm0ucmFkaXVzLCAyKSkgOiBmYWxzZTtcclxuXHR9LFxyXG5cclxuXHRpbkxhYmVsUmFuZ2U6IHhSYW5nZSxcclxuXHRpblhSYW5nZTogeFJhbmdlLFxyXG5cdGluWVJhbmdlOiB5UmFuZ2UsXHJcblxyXG5cdGdldENlbnRlclBvaW50OiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR4OiB2bS54LFxyXG5cdFx0XHR5OiB2bS55XHJcblx0XHR9O1xyXG5cdH0sXHJcblxyXG5cdGdldEFyZWE6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIE1hdGguUEkgKiBNYXRoLnBvdyh0aGlzLl92aWV3LnJhZGl1cywgMik7XHJcblx0fSxcclxuXHJcblx0dG9vbHRpcFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR4OiB2bS54LFxyXG5cdFx0XHR5OiB2bS55LFxyXG5cdFx0XHRwYWRkaW5nOiB2bS5yYWRpdXMgKyB2bS5ib3JkZXJXaWR0aFxyXG5cdFx0fTtcclxuXHR9LFxyXG5cclxuXHRkcmF3OiBmdW5jdGlvbihjaGFydEFyZWEpIHtcclxuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XHJcblx0XHR2YXIgbW9kZWwgPSB0aGlzLl9tb2RlbDtcclxuXHRcdHZhciBjdHggPSB0aGlzLl9jaGFydC5jdHg7XHJcblx0XHR2YXIgcG9pbnRTdHlsZSA9IHZtLnBvaW50U3R5bGU7XHJcblx0XHR2YXIgcm90YXRpb24gPSB2bS5yb3RhdGlvbjtcclxuXHRcdHZhciByYWRpdXMgPSB2bS5yYWRpdXM7XHJcblx0XHR2YXIgeCA9IHZtLng7XHJcblx0XHR2YXIgeSA9IHZtLnk7XHJcblx0XHR2YXIgZXJyTWFyZ2luID0gMS4wMTsgLy8gMS4wMSBpcyBtYXJnaW4gZm9yIEFjY3VtdWxhdGVkIGVycm9yLiAoRXNwZWNpYWxseSBFZGdlLCBJRS4pXHJcblxyXG5cdFx0aWYgKHZtLnNraXApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENsaXBwaW5nIGZvciBQb2ludHMuXHJcblx0XHRpZiAoY2hhcnRBcmVhID09PSB1bmRlZmluZWQgfHwgKG1vZGVsLnggPj0gY2hhcnRBcmVhLmxlZnQgJiYgY2hhcnRBcmVhLnJpZ2h0ICogZXJyTWFyZ2luID49IG1vZGVsLnggJiYgbW9kZWwueSA+PSBjaGFydEFyZWEudG9wICYmIGNoYXJ0QXJlYS5ib3R0b20gKiBlcnJNYXJnaW4gPj0gbW9kZWwueSkpIHtcclxuXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gdm0uYm9yZGVyQ29sb3IgfHwgZGVmYXVsdENvbG9yO1xyXG5cdFx0XHRjdHgubGluZVdpZHRoID0gaGVscGVycy52YWx1ZU9yRGVmYXVsdCh2bS5ib3JkZXJXaWR0aCwgZGVmYXVsdHMuZ2xvYmFsLmVsZW1lbnRzLnBvaW50LmJvcmRlcldpZHRoKTtcclxuXHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHZtLmJhY2tncm91bmRDb2xvciB8fCBkZWZhdWx0Q29sb3I7XHJcblx0XHRcdGhlbHBlcnMuY2FudmFzLmRyYXdQb2ludChjdHgsIHBvaW50U3R5bGUsIHJhZGl1cywgeCwgeSwgcm90YXRpb24pO1xyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG59LHtcIjI2XCI6MjYsXCIyN1wiOjI3LFwiNDZcIjo0Nn1dLDQwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgyNik7XHJcbnZhciBFbGVtZW50ID0gcmVxdWlyZSgyNyk7XHJcblxyXG5kZWZhdWx0cy5fc2V0KCdnbG9iYWwnLCB7XHJcblx0ZWxlbWVudHM6IHtcclxuXHRcdHJlY3RhbmdsZToge1xyXG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IGRlZmF1bHRzLmdsb2JhbC5kZWZhdWx0Q29sb3IsXHJcblx0XHRcdGJvcmRlckNvbG9yOiBkZWZhdWx0cy5nbG9iYWwuZGVmYXVsdENvbG9yLFxyXG5cdFx0XHRib3JkZXJTa2lwcGVkOiAnYm90dG9tJyxcclxuXHRcdFx0Ym9yZGVyV2lkdGg6IDBcclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuZnVuY3Rpb24gaXNWZXJ0aWNhbChiYXIpIHtcclxuXHRyZXR1cm4gYmFyLl92aWV3LndpZHRoICE9PSB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIGJhciByZWdhcmRsZXNzIG9mIHRoZSBvcmllbnRhdGlvblxyXG4gKiBAcGFyYW0gYmFyIHtDaGFydC5FbGVtZW50LlJlY3RhbmdsZX0gdGhlIGJhclxyXG4gKiBAcmV0dXJuIHtCb3VuZHN9IGJvdW5kcyBvZiB0aGUgYmFyXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRCYXJCb3VuZHMoYmFyKSB7XHJcblx0dmFyIHZtID0gYmFyLl92aWV3O1xyXG5cdHZhciB4MSwgeDIsIHkxLCB5MjtcclxuXHJcblx0aWYgKGlzVmVydGljYWwoYmFyKSkge1xyXG5cdFx0Ly8gdmVydGljYWxcclxuXHRcdHZhciBoYWxmV2lkdGggPSB2bS53aWR0aCAvIDI7XHJcblx0XHR4MSA9IHZtLnggLSBoYWxmV2lkdGg7XHJcblx0XHR4MiA9IHZtLnggKyBoYWxmV2lkdGg7XHJcblx0XHR5MSA9IE1hdGgubWluKHZtLnksIHZtLmJhc2UpO1xyXG5cdFx0eTIgPSBNYXRoLm1heCh2bS55LCB2bS5iYXNlKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Ly8gaG9yaXpvbnRhbCBiYXJcclxuXHRcdHZhciBoYWxmSGVpZ2h0ID0gdm0uaGVpZ2h0IC8gMjtcclxuXHRcdHgxID0gTWF0aC5taW4odm0ueCwgdm0uYmFzZSk7XHJcblx0XHR4MiA9IE1hdGgubWF4KHZtLngsIHZtLmJhc2UpO1xyXG5cdFx0eTEgPSB2bS55IC0gaGFsZkhlaWdodDtcclxuXHRcdHkyID0gdm0ueSArIGhhbGZIZWlnaHQ7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0bGVmdDogeDEsXHJcblx0XHR0b3A6IHkxLFxyXG5cdFx0cmlnaHQ6IHgyLFxyXG5cdFx0Ym90dG9tOiB5MlxyXG5cdH07XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRWxlbWVudC5leHRlbmQoe1xyXG5cdGRyYXc6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGN0eCA9IHRoaXMuX2NoYXJ0LmN0eDtcclxuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XHJcblx0XHR2YXIgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBzaWduWCwgc2lnblksIGJvcmRlclNraXBwZWQ7XHJcblx0XHR2YXIgYm9yZGVyV2lkdGggPSB2bS5ib3JkZXJXaWR0aDtcclxuXHJcblx0XHRpZiAoIXZtLmhvcml6b250YWwpIHtcclxuXHRcdFx0Ly8gYmFyXHJcblx0XHRcdGxlZnQgPSB2bS54IC0gdm0ud2lkdGggLyAyO1xyXG5cdFx0XHRyaWdodCA9IHZtLnggKyB2bS53aWR0aCAvIDI7XHJcblx0XHRcdHRvcCA9IHZtLnk7XHJcblx0XHRcdGJvdHRvbSA9IHZtLmJhc2U7XHJcblx0XHRcdHNpZ25YID0gMTtcclxuXHRcdFx0c2lnblkgPSBib3R0b20gPiB0b3AgPyAxIDogLTE7XHJcblx0XHRcdGJvcmRlclNraXBwZWQgPSB2bS5ib3JkZXJTa2lwcGVkIHx8ICdib3R0b20nO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gaG9yaXpvbnRhbCBiYXJcclxuXHRcdFx0bGVmdCA9IHZtLmJhc2U7XHJcblx0XHRcdHJpZ2h0ID0gdm0ueDtcclxuXHRcdFx0dG9wID0gdm0ueSAtIHZtLmhlaWdodCAvIDI7XHJcblx0XHRcdGJvdHRvbSA9IHZtLnkgKyB2bS5oZWlnaHQgLyAyO1xyXG5cdFx0XHRzaWduWCA9IHJpZ2h0ID4gbGVmdCA/IDEgOiAtMTtcclxuXHRcdFx0c2lnblkgPSAxO1xyXG5cdFx0XHRib3JkZXJTa2lwcGVkID0gdm0uYm9yZGVyU2tpcHBlZCB8fCAnbGVmdCc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FudmFzIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc3Ryb2tlIGluc2lkZSB0aGUgd2lkdGggc28gd2UgY2FuXHJcblx0XHQvLyBhZGp1c3QgdGhlIHNpemVzIHRvIGZpdCBpZiB3ZSdyZSBzZXR0aW5nIGEgc3Ryb2tlIG9uIHRoZSBsaW5lXHJcblx0XHRpZiAoYm9yZGVyV2lkdGgpIHtcclxuXHRcdFx0Ly8gYm9yZGVyV2lkdGggc2hvbGQgYmUgbGVzcyB0aGFuIGJhciB3aWR0aCBhbmQgYmFyIGhlaWdodC5cclxuXHRcdFx0dmFyIGJhclNpemUgPSBNYXRoLm1pbihNYXRoLmFicyhsZWZ0IC0gcmlnaHQpLCBNYXRoLmFicyh0b3AgLSBib3R0b20pKTtcclxuXHRcdFx0Ym9yZGVyV2lkdGggPSBib3JkZXJXaWR0aCA+IGJhclNpemUgPyBiYXJTaXplIDogYm9yZGVyV2lkdGg7XHJcblx0XHRcdHZhciBoYWxmU3Ryb2tlID0gYm9yZGVyV2lkdGggLyAyO1xyXG5cdFx0XHQvLyBBZGp1c3QgYm9yZGVyV2lkdGggd2hlbiBiYXIgdG9wIHBvc2l0aW9uIGlzIG5lYXIgdm0uYmFzZSh6ZXJvKS5cclxuXHRcdFx0dmFyIGJvcmRlckxlZnQgPSBsZWZ0ICsgKGJvcmRlclNraXBwZWQgIT09ICdsZWZ0JyA/IGhhbGZTdHJva2UgKiBzaWduWCA6IDApO1xyXG5cdFx0XHR2YXIgYm9yZGVyUmlnaHQgPSByaWdodCArIChib3JkZXJTa2lwcGVkICE9PSAncmlnaHQnID8gLWhhbGZTdHJva2UgKiBzaWduWCA6IDApO1xyXG5cdFx0XHR2YXIgYm9yZGVyVG9wID0gdG9wICsgKGJvcmRlclNraXBwZWQgIT09ICd0b3AnID8gaGFsZlN0cm9rZSAqIHNpZ25ZIDogMCk7XHJcblx0XHRcdHZhciBib3JkZXJCb3R0b20gPSBib3R0b20gKyAoYm9yZGVyU2tpcHBlZCAhPT0gJ2JvdHRvbScgPyAtaGFsZlN0cm9rZSAqIHNpZ25ZIDogMCk7XHJcblx0XHRcdC8vIG5vdCBiZWNvbWUgYSB2ZXJ0aWNhbCBsaW5lP1xyXG5cdFx0XHRpZiAoYm9yZGVyTGVmdCAhPT0gYm9yZGVyUmlnaHQpIHtcclxuXHRcdFx0XHR0b3AgPSBib3JkZXJUb3A7XHJcblx0XHRcdFx0Ym90dG9tID0gYm9yZGVyQm90dG9tO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIG5vdCBiZWNvbWUgYSBob3Jpem9udGFsIGxpbmU/XHJcblx0XHRcdGlmIChib3JkZXJUb3AgIT09IGJvcmRlckJvdHRvbSkge1xyXG5cdFx0XHRcdGxlZnQgPSBib3JkZXJMZWZ0O1xyXG5cdFx0XHRcdHJpZ2h0ID0gYm9yZGVyUmlnaHQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRjdHguYmVnaW5QYXRoKCk7XHJcblx0XHRjdHguZmlsbFN0eWxlID0gdm0uYmFja2dyb3VuZENvbG9yO1xyXG5cdFx0Y3R4LnN0cm9rZVN0eWxlID0gdm0uYm9yZGVyQ29sb3I7XHJcblx0XHRjdHgubGluZVdpZHRoID0gYm9yZGVyV2lkdGg7XHJcblxyXG5cdFx0Ly8gQ29ybmVyIHBvaW50cywgZnJvbSBib3R0b20tbGVmdCB0byBib3R0b20tcmlnaHQgY2xvY2t3aXNlXHJcblx0XHQvLyB8IDEgMiB8XHJcblx0XHQvLyB8IDAgMyB8XHJcblx0XHR2YXIgY29ybmVycyA9IFtcclxuXHRcdFx0W2xlZnQsIGJvdHRvbV0sXHJcblx0XHRcdFtsZWZ0LCB0b3BdLFxyXG5cdFx0XHRbcmlnaHQsIHRvcF0sXHJcblx0XHRcdFtyaWdodCwgYm90dG9tXVxyXG5cdFx0XTtcclxuXHJcblx0XHQvLyBGaW5kIGZpcnN0IChzdGFydGluZykgY29ybmVyIHdpdGggZmFsbGJhY2sgdG8gJ2JvdHRvbSdcclxuXHRcdHZhciBib3JkZXJzID0gWydib3R0b20nLCAnbGVmdCcsICd0b3AnLCAncmlnaHQnXTtcclxuXHRcdHZhciBzdGFydENvcm5lciA9IGJvcmRlcnMuaW5kZXhPZihib3JkZXJTa2lwcGVkLCAwKTtcclxuXHRcdGlmIChzdGFydENvcm5lciA9PT0gLTEpIHtcclxuXHRcdFx0c3RhcnRDb3JuZXIgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZ1bmN0aW9uIGNvcm5lckF0KGluZGV4KSB7XHJcblx0XHRcdHJldHVybiBjb3JuZXJzWyhzdGFydENvcm5lciArIGluZGV4KSAlIDRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIERyYXcgcmVjdGFuZ2xlIGZyb20gJ3N0YXJ0Q29ybmVyJ1xyXG5cdFx0dmFyIGNvcm5lciA9IGNvcm5lckF0KDApO1xyXG5cdFx0Y3R4Lm1vdmVUbyhjb3JuZXJbMF0sIGNvcm5lclsxXSk7XHJcblxyXG5cdFx0Zm9yICh2YXIgaSA9IDE7IGkgPCA0OyBpKyspIHtcclxuXHRcdFx0Y29ybmVyID0gY29ybmVyQXQoaSk7XHJcblx0XHRcdGN0eC5saW5lVG8oY29ybmVyWzBdLCBjb3JuZXJbMV0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGN0eC5maWxsKCk7XHJcblx0XHRpZiAoYm9yZGVyV2lkdGgpIHtcclxuXHRcdFx0Y3R4LnN0cm9rZSgpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdGhlaWdodDogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgdm0gPSB0aGlzLl92aWV3O1xyXG5cdFx0cmV0dXJuIHZtLmJhc2UgLSB2bS55O1xyXG5cdH0sXHJcblxyXG5cdGluUmFuZ2U6IGZ1bmN0aW9uKG1vdXNlWCwgbW91c2VZKSB7XHJcblx0XHR2YXIgaW5SYW5nZSA9IGZhbHNlO1xyXG5cclxuXHRcdGlmICh0aGlzLl92aWV3KSB7XHJcblx0XHRcdHZhciBib3VuZHMgPSBnZXRCYXJCb3VuZHModGhpcyk7XHJcblx0XHRcdGluUmFuZ2UgPSBtb3VzZVggPj0gYm91bmRzLmxlZnQgJiYgbW91c2VYIDw9IGJvdW5kcy5yaWdodCAmJiBtb3VzZVkgPj0gYm91bmRzLnRvcCAmJiBtb3VzZVkgPD0gYm91bmRzLmJvdHRvbTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gaW5SYW5nZTtcclxuXHR9LFxyXG5cclxuXHRpbkxhYmVsUmFuZ2U6IGZ1bmN0aW9uKG1vdXNlWCwgbW91c2VZKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0aWYgKCFtZS5fdmlldykge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGluUmFuZ2UgPSBmYWxzZTtcclxuXHRcdHZhciBib3VuZHMgPSBnZXRCYXJCb3VuZHMobWUpO1xyXG5cclxuXHRcdGlmIChpc1ZlcnRpY2FsKG1lKSkge1xyXG5cdFx0XHRpblJhbmdlID0gbW91c2VYID49IGJvdW5kcy5sZWZ0ICYmIG1vdXNlWCA8PSBib3VuZHMucmlnaHQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpblJhbmdlID0gbW91c2VZID49IGJvdW5kcy50b3AgJiYgbW91c2VZIDw9IGJvdW5kcy5ib3R0b207XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGluUmFuZ2U7XHJcblx0fSxcclxuXHJcblx0aW5YUmFuZ2U6IGZ1bmN0aW9uKG1vdXNlWCkge1xyXG5cdFx0dmFyIGJvdW5kcyA9IGdldEJhckJvdW5kcyh0aGlzKTtcclxuXHRcdHJldHVybiBtb3VzZVggPj0gYm91bmRzLmxlZnQgJiYgbW91c2VYIDw9IGJvdW5kcy5yaWdodDtcclxuXHR9LFxyXG5cclxuXHRpbllSYW5nZTogZnVuY3Rpb24obW91c2VZKSB7XHJcblx0XHR2YXIgYm91bmRzID0gZ2V0QmFyQm91bmRzKHRoaXMpO1xyXG5cdFx0cmV0dXJuIG1vdXNlWSA+PSBib3VuZHMudG9wICYmIG1vdXNlWSA8PSBib3VuZHMuYm90dG9tO1xyXG5cdH0sXHJcblxyXG5cdGdldENlbnRlclBvaW50OiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XHJcblx0XHR2YXIgeCwgeTtcclxuXHRcdGlmIChpc1ZlcnRpY2FsKHRoaXMpKSB7XHJcblx0XHRcdHggPSB2bS54O1xyXG5cdFx0XHR5ID0gKHZtLnkgKyB2bS5iYXNlKSAvIDI7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR4ID0gKHZtLnggKyB2bS5iYXNlKSAvIDI7XHJcblx0XHRcdHkgPSB2bS55O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7eDogeCwgeTogeX07XHJcblx0fSxcclxuXHJcblx0Z2V0QXJlYTogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgdm0gPSB0aGlzLl92aWV3O1xyXG5cdFx0cmV0dXJuIHZtLndpZHRoICogTWF0aC5hYnModm0ueSAtIHZtLmJhc2UpO1xyXG5cdH0sXHJcblxyXG5cdHRvb2x0aXBQb3NpdGlvbjogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgdm0gPSB0aGlzLl92aWV3O1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0eDogdm0ueCxcclxuXHRcdFx0eTogdm0ueVxyXG5cdFx0fTtcclxuXHR9XHJcbn0pO1xyXG5cclxufSx7XCIyNlwiOjI2LFwiMjdcIjoyN31dLDQxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7fTtcclxubW9kdWxlLmV4cG9ydHMuQXJjID0gcmVxdWlyZSgzNyk7XHJcbm1vZHVsZS5leHBvcnRzLkxpbmUgPSByZXF1aXJlKDM4KTtcclxubW9kdWxlLmV4cG9ydHMuUG9pbnQgPSByZXF1aXJlKDM5KTtcclxubW9kdWxlLmV4cG9ydHMuUmVjdGFuZ2xlID0gcmVxdWlyZSg0MCk7XHJcblxyXG59LHtcIjM3XCI6MzcsXCIzOFwiOjM4LFwiMzlcIjozOSxcIjQwXCI6NDB9XSw0MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Myk7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBDaGFydC5oZWxwZXJzLmNhbnZhc1xyXG4gKi9cclxudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcclxuXHQvKipcclxuXHQgKiBDbGVhcnMgdGhlIGVudGlyZSBjYW52YXMgYXNzb2NpYXRlZCB0byB0aGUgZ2l2ZW4gYGNoYXJ0YC5cclxuXHQgKiBAcGFyYW0ge0NoYXJ0fSBjaGFydCAtIFRoZSBjaGFydCBmb3Igd2hpY2ggdG8gY2xlYXIgdGhlIGNhbnZhcy5cclxuXHQgKi9cclxuXHRjbGVhcjogZnVuY3Rpb24oY2hhcnQpIHtcclxuXHRcdGNoYXJ0LmN0eC5jbGVhclJlY3QoMCwgMCwgY2hhcnQud2lkdGgsIGNoYXJ0LmhlaWdodCk7XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlcyBhIFwicGF0aFwiIGZvciBhIHJlY3RhbmdsZSB3aXRoIHJvdW5kZWQgY29ybmVycyBhdCBwb3NpdGlvbiAoeCwgeSkgd2l0aCBhXHJcblx0ICogZ2l2ZW4gc2l6ZSAod2lkdGgsIGhlaWdodCkgYW5kIHRoZSBzYW1lIGByYWRpdXNgIGZvciBhbGwgY29ybmVycy5cclxuXHQgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVGhlIGNhbnZhcyAyRCBDb250ZXh0LlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSB4IC0gVGhlIHggYXhpcyBvZiB0aGUgY29vcmRpbmF0ZSBmb3IgdGhlIHJlY3RhbmdsZSBzdGFydGluZyBwb2ludC5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0geSAtIFRoZSB5IGF4aXMgb2YgdGhlIGNvb3JkaW5hdGUgZm9yIHRoZSByZWN0YW5nbGUgc3RhcnRpbmcgcG9pbnQuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IHdpZHRoIC0gVGhlIHJlY3RhbmdsZSdzIHdpZHRoLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBoZWlnaHQgLSBUaGUgcmVjdGFuZ2xlJ3MgaGVpZ2h0LlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSByYWRpdXMgLSBUaGUgcm91bmRlZCBhbW91bnQgKGluIHBpeGVscykgZm9yIHRoZSBmb3VyIGNvcm5lcnMuXHJcblx0ICogQHRvZG8gaGFuZGxlIGByYWRpdXNgIGFzIHRvcC1sZWZ0LCB0b3AtcmlnaHQsIGJvdHRvbS1yaWdodCwgYm90dG9tLWxlZnQgYXJyYXkvb2JqZWN0P1xyXG5cdCAqL1xyXG5cdHJvdW5kZWRSZWN0OiBmdW5jdGlvbihjdHgsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykge1xyXG5cdFx0aWYgKHJhZGl1cykge1xyXG5cdFx0XHQvLyBOT1RFKFNCKSBgZXBzaWxvbmAgaGVscHMgdG8gcHJldmVudCBtaW5vciBhcnRpZmFjdHMgYXBwZWFyaW5nXHJcblx0XHRcdC8vIG9uIENocm9tZSB3aGVuIGByYCBpcyBleGFjdGx5IGhhbGYgdGhlIGhlaWdodCBvciB0aGUgd2lkdGguXHJcblx0XHRcdHZhciBlcHNpbG9uID0gMC4wMDAwMDAxO1xyXG5cdFx0XHR2YXIgciA9IE1hdGgubWluKHJhZGl1cywgKGhlaWdodCAvIDIpIC0gZXBzaWxvbiwgKHdpZHRoIC8gMikgLSBlcHNpbG9uKTtcclxuXHJcblx0XHRcdGN0eC5tb3ZlVG8oeCArIHIsIHkpO1xyXG5cdFx0XHRjdHgubGluZVRvKHggKyB3aWR0aCAtIHIsIHkpO1xyXG5cdFx0XHRjdHguYXJjVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyByLCByKTtcclxuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByKTtcclxuXHRcdFx0Y3R4LmFyY1RvKHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoIC0gciwgeSArIGhlaWdodCwgcik7XHJcblx0XHRcdGN0eC5saW5lVG8oeCArIHIsIHkgKyBoZWlnaHQpO1xyXG5cdFx0XHRjdHguYXJjVG8oeCwgeSArIGhlaWdodCwgeCwgeSArIGhlaWdodCAtIHIsIHIpO1xyXG5cdFx0XHRjdHgubGluZVRvKHgsIHkgKyByKTtcclxuXHRcdFx0Y3R4LmFyY1RvKHgsIHksIHggKyByLCB5LCByKTtcclxuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xyXG5cdFx0XHRjdHgubW92ZVRvKHgsIHkpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y3R4LnJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0ZHJhd1BvaW50OiBmdW5jdGlvbihjdHgsIHN0eWxlLCByYWRpdXMsIHgsIHksIHJvdGF0aW9uKSB7XHJcblx0XHR2YXIgdHlwZSwgZWRnZUxlbmd0aCwgeE9mZnNldCwgeU9mZnNldCwgaGVpZ2h0LCBzaXplO1xyXG5cdFx0cm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xyXG5cclxuXHRcdGlmIChzdHlsZSAmJiB0eXBlb2Ygc3R5bGUgPT09ICdvYmplY3QnKSB7XHJcblx0XHRcdHR5cGUgPSBzdHlsZS50b1N0cmluZygpO1xyXG5cdFx0XHRpZiAodHlwZSA9PT0gJ1tvYmplY3QgSFRNTEltYWdlRWxlbWVudF0nIHx8IHR5cGUgPT09ICdbb2JqZWN0IEhUTUxDYW52YXNFbGVtZW50XScpIHtcclxuXHRcdFx0XHRjdHguZHJhd0ltYWdlKHN0eWxlLCB4IC0gc3R5bGUud2lkdGggLyAyLCB5IC0gc3R5bGUuaGVpZ2h0IC8gMiwgc3R5bGUud2lkdGgsIHN0eWxlLmhlaWdodCk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzTmFOKHJhZGl1cykgfHwgcmFkaXVzIDw9IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGN0eC5zYXZlKCk7XHJcblx0XHRjdHgudHJhbnNsYXRlKHgsIHkpO1xyXG5cdFx0Y3R4LnJvdGF0ZShyb3RhdGlvbiAqIE1hdGguUEkgLyAxODApO1xyXG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xyXG5cclxuXHRcdHN3aXRjaCAoc3R5bGUpIHtcclxuXHRcdC8vIERlZmF1bHQgaW5jbHVkZXMgY2lyY2xlXHJcblx0XHRkZWZhdWx0OlxyXG5cdFx0XHRjdHguYXJjKDAsIDAsIHJhZGl1cywgMCwgTWF0aC5QSSAqIDIpO1xyXG5cdFx0XHRjdHguY2xvc2VQYXRoKCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAndHJpYW5nbGUnOlxyXG5cdFx0XHRlZGdlTGVuZ3RoID0gMyAqIHJhZGl1cyAvIE1hdGguc3FydCgzKTtcclxuXHRcdFx0aGVpZ2h0ID0gZWRnZUxlbmd0aCAqIE1hdGguc3FydCgzKSAvIDI7XHJcblx0XHRcdGN0eC5tb3ZlVG8oLWVkZ2VMZW5ndGggLyAyLCBoZWlnaHQgLyAzKTtcclxuXHRcdFx0Y3R4LmxpbmVUbyhlZGdlTGVuZ3RoIC8gMiwgaGVpZ2h0IC8gMyk7XHJcblx0XHRcdGN0eC5saW5lVG8oMCwgLTIgKiBoZWlnaHQgLyAzKTtcclxuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgJ3JlY3QnOlxyXG5cdFx0XHRzaXplID0gMSAvIE1hdGguU1FSVDIgKiByYWRpdXM7XHJcblx0XHRcdGN0eC5yZWN0KC1zaXplLCAtc2l6ZSwgMiAqIHNpemUsIDIgKiBzaXplKTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlICdyZWN0Um91bmRlZCc6XHJcblx0XHRcdHZhciBvZmZzZXQgPSByYWRpdXMgLyBNYXRoLlNRUlQyO1xyXG5cdFx0XHR2YXIgbGVmdFggPSAtb2Zmc2V0O1xyXG5cdFx0XHR2YXIgdG9wWSA9IC1vZmZzZXQ7XHJcblx0XHRcdHZhciBzaWRlU2l6ZSA9IE1hdGguU1FSVDIgKiByYWRpdXM7XHJcblxyXG5cdFx0XHQvLyBOT1RFKFNCKSB0aGUgcm91bmRlZCByZWN0IGltcGxlbWVudGF0aW9uIGNoYW5nZWQgdG8gdXNlIGBhcmNUb2BcclxuXHRcdFx0Ly8gaW5zdGVhZCBvZiBgcXVhZHJhdGljQ3VydmVUb2Agc2luY2UgaXQgZ2VuZXJhdGVzIGJldHRlciByZXN1bHRzXHJcblx0XHRcdC8vIHdoZW4gcmVjdCBpcyBhbG1vc3QgYSBjaXJjbGUuIDAuNDI1IChpbnN0ZWFkIG9mIDAuNSkgcHJvZHVjZXNcclxuXHRcdFx0Ly8gcmVzdWx0cyB2aXN1YWxseSBjbG9zZXIgdG8gdGhlIHByZXZpb3VzIGltcGwuXHJcblx0XHRcdHRoaXMucm91bmRlZFJlY3QoY3R4LCBsZWZ0WCwgdG9wWSwgc2lkZVNpemUsIHNpZGVTaXplLCByYWRpdXMgKiAwLjQyNSk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAncmVjdFJvdCc6XHJcblx0XHRcdHNpemUgPSAxIC8gTWF0aC5TUVJUMiAqIHJhZGl1cztcclxuXHRcdFx0Y3R4Lm1vdmVUbygtc2l6ZSwgMCk7XHJcblx0XHRcdGN0eC5saW5lVG8oMCwgc2l6ZSk7XHJcblx0XHRcdGN0eC5saW5lVG8oc2l6ZSwgMCk7XHJcblx0XHRcdGN0eC5saW5lVG8oMCwgLXNpemUpO1xyXG5cdFx0XHRjdHguY2xvc2VQYXRoKCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAnY3Jvc3MnOlxyXG5cdFx0XHRjdHgubW92ZVRvKDAsIHJhZGl1cyk7XHJcblx0XHRcdGN0eC5saW5lVG8oMCwgLXJhZGl1cyk7XHJcblx0XHRcdGN0eC5tb3ZlVG8oLXJhZGl1cywgMCk7XHJcblx0XHRcdGN0eC5saW5lVG8ocmFkaXVzLCAwKTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlICdjcm9zc1JvdCc6XHJcblx0XHRcdHhPZmZzZXQgPSBNYXRoLmNvcyhNYXRoLlBJIC8gNCkgKiByYWRpdXM7XHJcblx0XHRcdHlPZmZzZXQgPSBNYXRoLnNpbihNYXRoLlBJIC8gNCkgKiByYWRpdXM7XHJcblx0XHRcdGN0eC5tb3ZlVG8oLXhPZmZzZXQsIC15T2Zmc2V0KTtcclxuXHRcdFx0Y3R4LmxpbmVUbyh4T2Zmc2V0LCB5T2Zmc2V0KTtcclxuXHRcdFx0Y3R4Lm1vdmVUbygteE9mZnNldCwgeU9mZnNldCk7XHJcblx0XHRcdGN0eC5saW5lVG8oeE9mZnNldCwgLXlPZmZzZXQpO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgJ3N0YXInOlxyXG5cdFx0XHRjdHgubW92ZVRvKDAsIHJhZGl1cyk7XHJcblx0XHRcdGN0eC5saW5lVG8oMCwgLXJhZGl1cyk7XHJcblx0XHRcdGN0eC5tb3ZlVG8oLXJhZGl1cywgMCk7XHJcblx0XHRcdGN0eC5saW5lVG8ocmFkaXVzLCAwKTtcclxuXHRcdFx0eE9mZnNldCA9IE1hdGguY29zKE1hdGguUEkgLyA0KSAqIHJhZGl1cztcclxuXHRcdFx0eU9mZnNldCA9IE1hdGguc2luKE1hdGguUEkgLyA0KSAqIHJhZGl1cztcclxuXHRcdFx0Y3R4Lm1vdmVUbygteE9mZnNldCwgLXlPZmZzZXQpO1xyXG5cdFx0XHRjdHgubGluZVRvKHhPZmZzZXQsIHlPZmZzZXQpO1xyXG5cdFx0XHRjdHgubW92ZVRvKC14T2Zmc2V0LCB5T2Zmc2V0KTtcclxuXHRcdFx0Y3R4LmxpbmVUbyh4T2Zmc2V0LCAteU9mZnNldCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSAnbGluZSc6XHJcblx0XHRcdGN0eC5tb3ZlVG8oLXJhZGl1cywgMCk7XHJcblx0XHRcdGN0eC5saW5lVG8ocmFkaXVzLCAwKTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlICdkYXNoJzpcclxuXHRcdFx0Y3R4Lm1vdmVUbygwLCAwKTtcclxuXHRcdFx0Y3R4LmxpbmVUbyhyYWRpdXMsIDApO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHJcblx0XHRjdHguZmlsbCgpO1xyXG5cdFx0Y3R4LnN0cm9rZSgpO1xyXG5cdFx0Y3R4LnJlc3RvcmUoKTtcclxuXHR9LFxyXG5cclxuXHRjbGlwQXJlYTogZnVuY3Rpb24oY3R4LCBhcmVhKSB7XHJcblx0XHRjdHguc2F2ZSgpO1xyXG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xyXG5cdFx0Y3R4LnJlY3QoYXJlYS5sZWZ0LCBhcmVhLnRvcCwgYXJlYS5yaWdodCAtIGFyZWEubGVmdCwgYXJlYS5ib3R0b20gLSBhcmVhLnRvcCk7XHJcblx0XHRjdHguY2xpcCgpO1xyXG5cdH0sXHJcblxyXG5cdHVuY2xpcEFyZWE6IGZ1bmN0aW9uKGN0eCkge1xyXG5cdFx0Y3R4LnJlc3RvcmUoKTtcclxuXHR9LFxyXG5cclxuXHRsaW5lVG86IGZ1bmN0aW9uKGN0eCwgcHJldmlvdXMsIHRhcmdldCwgZmxpcCkge1xyXG5cdFx0aWYgKHRhcmdldC5zdGVwcGVkTGluZSkge1xyXG5cdFx0XHRpZiAoKHRhcmdldC5zdGVwcGVkTGluZSA9PT0gJ2FmdGVyJyAmJiAhZmxpcCkgfHwgKHRhcmdldC5zdGVwcGVkTGluZSAhPT0gJ2FmdGVyJyAmJiBmbGlwKSkge1xyXG5cdFx0XHRcdGN0eC5saW5lVG8ocHJldmlvdXMueCwgdGFyZ2V0LnkpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGN0eC5saW5lVG8odGFyZ2V0LngsIHByZXZpb3VzLnkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGN0eC5saW5lVG8odGFyZ2V0LngsIHRhcmdldC55KTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghdGFyZ2V0LnRlbnNpb24pIHtcclxuXHRcdFx0Y3R4LmxpbmVUbyh0YXJnZXQueCwgdGFyZ2V0LnkpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y3R4LmJlemllckN1cnZlVG8oXHJcblx0XHRcdGZsaXAgPyBwcmV2aW91cy5jb250cm9sUG9pbnRQcmV2aW91c1ggOiBwcmV2aW91cy5jb250cm9sUG9pbnROZXh0WCxcclxuXHRcdFx0ZmxpcCA/IHByZXZpb3VzLmNvbnRyb2xQb2ludFByZXZpb3VzWSA6IHByZXZpb3VzLmNvbnRyb2xQb2ludE5leHRZLFxyXG5cdFx0XHRmbGlwID8gdGFyZ2V0LmNvbnRyb2xQb2ludE5leHRYIDogdGFyZ2V0LmNvbnRyb2xQb2ludFByZXZpb3VzWCxcclxuXHRcdFx0ZmxpcCA/IHRhcmdldC5jb250cm9sUG9pbnROZXh0WSA6IHRhcmdldC5jb250cm9sUG9pbnRQcmV2aW91c1ksXHJcblx0XHRcdHRhcmdldC54LFxyXG5cdFx0XHR0YXJnZXQueSk7XHJcblx0fVxyXG59O1xyXG5cclxuLy8gREVQUkVDQVRJT05TXHJcblxyXG4vKipcclxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5oZWxwZXJzLmNhbnZhcy5jbGVhciBpbnN0ZWFkLlxyXG4gKiBAbmFtZXNwYWNlIENoYXJ0LmhlbHBlcnMuY2xlYXJcclxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjcuMFxyXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5oZWxwZXJzLmNsZWFyID0gZXhwb3J0cy5jbGVhcjtcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIENoYXJ0LmhlbHBlcnMuY2FudmFzLnJvdW5kZWRSZWN0IGluc3RlYWQuXHJcbiAqIEBuYW1lc3BhY2UgQ2hhcnQuaGVscGVycy5kcmF3Um91bmRlZFJlY3RhbmdsZVxyXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuNy4wXHJcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcclxuICogQHByaXZhdGVcclxuICovXHJcbmhlbHBlcnMuZHJhd1JvdW5kZWRSZWN0YW5nbGUgPSBmdW5jdGlvbihjdHgpIHtcclxuXHRjdHguYmVnaW5QYXRoKCk7XHJcblx0ZXhwb3J0cy5yb3VuZGVkUmVjdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxufSx7XCI0M1wiOjQzfV0sNDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBDaGFydC5oZWxwZXJzXHJcbiAqL1xyXG52YXIgaGVscGVycyA9IHtcclxuXHQvKipcclxuXHQgKiBBbiBlbXB0eSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgZm9yIG9wdGlvbmFsIGNhbGxiYWNrLlxyXG5cdCAqL1xyXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgYSB1bmlxdWUgaWQsIHNlcXVlbnRpYWxseSBnZW5lcmF0ZWQgZnJvbSBhIGdsb2JhbCB2YXJpYWJsZS5cclxuXHQgKiBAcmV0dXJucyB7TnVtYmVyfVxyXG5cdCAqIEBmdW5jdGlvblxyXG5cdCAqL1xyXG5cdHVpZDogKGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGlkID0gMDtcclxuXHRcdHJldHVybiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIGlkKys7XHJcblx0XHR9O1xyXG5cdH0oKSksXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiBgdmFsdWVgIGlzIG5laXRoZXIgbnVsbCBub3IgdW5kZWZpbmVkLCBlbHNlIHJldHVybnMgZmFsc2UuXHJcblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxyXG5cdCAqIEByZXR1cm5zIHtCb29sZWFufVxyXG5cdCAqIEBzaW5jZSAyLjcuMFxyXG5cdCAqL1xyXG5cdGlzTnVsbE9yVW5kZWY6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJztcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSByZXR1cm5zIGZhbHNlLlxyXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdGVzdC5cclxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuXHQgKiBAZnVuY3Rpb25cclxuXHQgKi9cclxuXHRpc0FycmF5OiBBcnJheS5pc0FycmF5ID8gQXJyYXkuaXNBcnJheSA6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QgKGV4Y2x1ZGluZyBudWxsKSwgZWxzZSByZXR1cm5zIGZhbHNlLlxyXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdGVzdC5cclxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuXHQgKiBAc2luY2UgMi43LjBcclxuXHQgKi9cclxuXHRpc09iamVjdDogZnVuY3Rpb24odmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJztcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIGB2YWx1ZWAgaWYgZGVmaW5lZCwgZWxzZSByZXR1cm5zIGBkZWZhdWx0VmFsdWVgLlxyXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGRlZmluZWQuXHJcblx0ICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGB2YWx1ZWAgaXMgdW5kZWZpbmVkLlxyXG5cdCAqIEByZXR1cm5zIHsqfVxyXG5cdCAqL1xyXG5cdHZhbHVlT3JEZWZhdWx0OiBmdW5jdGlvbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xyXG5cdH0sXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgdmFsdWUgYXQgdGhlIGdpdmVuIGBpbmRleGAgaW4gYXJyYXkgaWYgZGVmaW5lZCwgZWxzZSByZXR1cm5zIGBkZWZhdWx0VmFsdWVgLlxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlIC0gVGhlIGFycmF5IHRvIGxvb2t1cCBmb3IgdmFsdWUgYXQgYGluZGV4YC5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggaW4gYHZhbHVlYCB0byBsb29rdXAgZm9yIHZhbHVlLlxyXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIC0gVGhlIHZhbHVlIHRvIHJldHVybiBpZiBgdmFsdWVbaW5kZXhdYCBpcyB1bmRlZmluZWQuXHJcblx0ICogQHJldHVybnMgeyp9XHJcblx0ICovXHJcblx0dmFsdWVBdEluZGV4T3JEZWZhdWx0OiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGRlZmF1bHRWYWx1ZSkge1xyXG5cdFx0cmV0dXJuIGhlbHBlcnMudmFsdWVPckRlZmF1bHQoaGVscGVycy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlW2luZGV4XSA6IHZhbHVlLCBkZWZhdWx0VmFsdWUpO1xyXG5cdH0sXHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbGxzIGBmbmAgd2l0aCB0aGUgZ2l2ZW4gYGFyZ3NgIGluIHRoZSBzY29wZSBkZWZpbmVkIGJ5IGB0aGlzQXJnYCBhbmQgcmV0dXJucyB0aGVcclxuXHQgKiB2YWx1ZSByZXR1cm5lZCBieSBgZm5gLiBJZiBgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uLCB0aGlzIG1ldGhvZCByZXR1cm5zIHVuZGVmaW5lZC5cclxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsLlxyXG5cdCAqIEBwYXJhbSB7QXJyYXl8dW5kZWZpbmVkfG51bGx9IGFyZ3MgLSBUaGUgYXJndW1lbnRzIHdpdGggd2hpY2ggYGZuYCBzaG91bGQgYmUgY2FsbGVkLlxyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbdGhpc0FyZ10gLSBUaGUgdmFsdWUgb2YgYHRoaXNgIHByb3ZpZGVkIGZvciB0aGUgY2FsbCB0byBgZm5gLlxyXG5cdCAqIEByZXR1cm5zIHsqfVxyXG5cdCAqL1xyXG5cdGNhbGxiYWNrOiBmdW5jdGlvbihmbiwgYXJncywgdGhpc0FyZykge1xyXG5cdFx0aWYgKGZuICYmIHR5cGVvZiBmbi5jYWxsID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBOb3RlKFNCKSBmb3IgcGVyZm9ybWFuY2Ugc2FrZSwgdGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGxvb3BhYmxlIHR5cGVcclxuXHQgKiBpcyB1bmtub3duIG9yIGluIG5vbmUgaW50ZW5zaXZlIGNvZGUgKG5vdCBjYWxsZWQgb2Z0ZW4gYW5kIHNtYWxsIGxvb3BhYmxlKS4gRWxzZVxyXG5cdCAqIGl0J3MgcHJlZmVyYWJsZSB0byB1c2UgYSByZWd1bGFyIGZvcigpIGxvb3AgYW5kIHNhdmUgZXh0cmEgZnVuY3Rpb24gY2FsbHMuXHJcblx0ICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IGxvb3BhYmxlIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSBpdGVyYXRlZC5cclxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGl0ZW0uXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IFt0aGlzQXJnXSAtIFRoZSB2YWx1ZSBvZiBgdGhpc2AgcHJvdmlkZWQgZm9yIHRoZSBjYWxsIHRvIGBmbmAuXHJcblx0ICogQHBhcmFtIHtCb29sZWFufSBbcmV2ZXJzZV0gLSBJZiB0cnVlLCBpdGVyYXRlcyBiYWNrd2FyZCBvbiB0aGUgbG9vcGFibGUuXHJcblx0ICovXHJcblx0ZWFjaDogZnVuY3Rpb24obG9vcGFibGUsIGZuLCB0aGlzQXJnLCByZXZlcnNlKSB7XHJcblx0XHR2YXIgaSwgbGVuLCBrZXlzO1xyXG5cdFx0aWYgKGhlbHBlcnMuaXNBcnJheShsb29wYWJsZSkpIHtcclxuXHRcdFx0bGVuID0gbG9vcGFibGUubGVuZ3RoO1xyXG5cdFx0XHRpZiAocmV2ZXJzZSkge1xyXG5cdFx0XHRcdGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcblx0XHRcdFx0XHRmbi5jYWxsKHRoaXNBcmcsIGxvb3BhYmxlW2ldLCBpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcblx0XHRcdFx0XHRmbi5jYWxsKHRoaXNBcmcsIGxvb3BhYmxlW2ldLCBpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoaGVscGVycy5pc09iamVjdChsb29wYWJsZSkpIHtcclxuXHRcdFx0a2V5cyA9IE9iamVjdC5rZXlzKGxvb3BhYmxlKTtcclxuXHRcdFx0bGVuID0ga2V5cy5sZW5ndGg7XHJcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG5cdFx0XHRcdGZuLmNhbGwodGhpc0FyZywgbG9vcGFibGVba2V5c1tpXV0sIGtleXNbaV0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBgYTBgIGFuZCBgYTFgIGFycmF5cyBoYXZlIHRoZSBzYW1lIGNvbnRlbnQsIGVsc2UgcmV0dXJucyBmYWxzZS5cclxuXHQgKiBAc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE0ODUzOTc0XHJcblx0ICogQHBhcmFtIHtBcnJheX0gYTAgLSBUaGUgYXJyYXkgdG8gY29tcGFyZVxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGExIC0gVGhlIGFycmF5IHRvIGNvbXBhcmVcclxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuXHQgKi9cclxuXHRhcnJheUVxdWFsczogZnVuY3Rpb24oYTAsIGExKSB7XHJcblx0XHR2YXIgaSwgaWxlbiwgdjAsIHYxO1xyXG5cclxuXHRcdGlmICghYTAgfHwgIWExIHx8IGEwLmxlbmd0aCAhPT0gYTEubGVuZ3RoKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGkgPSAwLCBpbGVuID0gYTAubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRcdHYwID0gYTBbaV07XHJcblx0XHRcdHYxID0gYTFbaV07XHJcblxyXG5cdFx0XHRpZiAodjAgaW5zdGFuY2VvZiBBcnJheSAmJiB2MSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcblx0XHRcdFx0aWYgKCFoZWxwZXJzLmFycmF5RXF1YWxzKHYwLCB2MSkpIHtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSBpZiAodjAgIT09IHYxKSB7XHJcblx0XHRcdFx0Ly8gTk9URTogdHdvIGRpZmZlcmVudCBvYmplY3QgaW5zdGFuY2VzIHdpbGwgbmV2ZXIgYmUgZXF1YWw6IHt4OjIwfSAhPSB7eDoyMH1cclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIGEgZGVlcCBjb3B5IG9mIGBzb3VyY2VgIHdpdGhvdXQga2VlcGluZyByZWZlcmVuY2VzIG9uIG9iamVjdHMgYW5kIGFycmF5cy5cclxuXHQgKiBAcGFyYW0geyp9IHNvdXJjZSAtIFRoZSB2YWx1ZSB0byBjbG9uZS5cclxuXHQgKiBAcmV0dXJucyB7Kn1cclxuXHQgKi9cclxuXHRjbG9uZTogZnVuY3Rpb24oc291cmNlKSB7XHJcblx0XHRpZiAoaGVscGVycy5pc0FycmF5KHNvdXJjZSkpIHtcclxuXHRcdFx0cmV0dXJuIHNvdXJjZS5tYXAoaGVscGVycy5jbG9uZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGhlbHBlcnMuaXNPYmplY3Qoc291cmNlKSkge1xyXG5cdFx0XHR2YXIgdGFyZ2V0ID0ge307XHJcblx0XHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcclxuXHRcdFx0dmFyIGtsZW4gPSBrZXlzLmxlbmd0aDtcclxuXHRcdFx0dmFyIGsgPSAwO1xyXG5cclxuXHRcdFx0Zm9yICg7IGsgPCBrbGVuOyArK2spIHtcclxuXHRcdFx0XHR0YXJnZXRba2V5c1trXV0gPSBoZWxwZXJzLmNsb25lKHNvdXJjZVtrZXlzW2tdXSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0YXJnZXQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHNvdXJjZTtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgZGVmYXVsdCBtZXJnZXIgd2hlbiBDaGFydC5oZWxwZXJzLm1lcmdlIGlzIGNhbGxlZCB3aXRob3V0IG1lcmdlciBvcHRpb24uXHJcblx0ICogTm90ZShTQik6IHRoaXMgbWV0aG9kIGlzIGFsc28gdXNlZCBieSBjb25maWdNZXJnZSBhbmQgc2NhbGVNZXJnZSBhcyBmYWxsYmFjay5cclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdF9tZXJnZXI6IGZ1bmN0aW9uKGtleSwgdGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcclxuXHRcdHZhciB0dmFsID0gdGFyZ2V0W2tleV07XHJcblx0XHR2YXIgc3ZhbCA9IHNvdXJjZVtrZXldO1xyXG5cclxuXHRcdGlmIChoZWxwZXJzLmlzT2JqZWN0KHR2YWwpICYmIGhlbHBlcnMuaXNPYmplY3Qoc3ZhbCkpIHtcclxuXHRcdFx0aGVscGVycy5tZXJnZSh0dmFsLCBzdmFsLCBvcHRpb25zKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRhcmdldFtrZXldID0gaGVscGVycy5jbG9uZShzdmFsKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBNZXJnZXMgc291cmNlW2tleV0gaW4gdGFyZ2V0W2tleV0gb25seSBpZiB0YXJnZXRba2V5XSBpcyB1bmRlZmluZWQuXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRfbWVyZ2VySWY6IGZ1bmN0aW9uKGtleSwgdGFyZ2V0LCBzb3VyY2UpIHtcclxuXHRcdHZhciB0dmFsID0gdGFyZ2V0W2tleV07XHJcblx0XHR2YXIgc3ZhbCA9IHNvdXJjZVtrZXldO1xyXG5cclxuXHRcdGlmIChoZWxwZXJzLmlzT2JqZWN0KHR2YWwpICYmIGhlbHBlcnMuaXNPYmplY3Qoc3ZhbCkpIHtcclxuXHRcdFx0aGVscGVycy5tZXJnZUlmKHR2YWwsIHN2YWwpO1xyXG5cdFx0fSBlbHNlIGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0dGFyZ2V0W2tleV0gPSBoZWxwZXJzLmNsb25lKHN2YWwpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlY3Vyc2l2ZWx5IGRlZXAgY29waWVzIGBzb3VyY2VgIHByb3BlcnRpZXMgaW50byBgdGFyZ2V0YCB3aXRoIHRoZSBnaXZlbiBgb3B0aW9uc2AuXHJcblx0ICogSU1QT1JUQU5UOiBgdGFyZ2V0YCBpcyBub3QgY2xvbmVkIGFuZCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCBgc291cmNlYCBwcm9wZXJ0aWVzLlxyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCBpbiB3aGljaCBhbGwgc291cmNlcyBhcmUgbWVyZ2VkIGludG8uXHJcblx0ICogQHBhcmFtIHtPYmplY3R8QXJyYXkoT2JqZWN0KX0gc291cmNlIC0gT2JqZWN0KHMpIHRvIG1lcmdlIGludG8gYHRhcmdldGAuXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIE1lcmdpbmcgb3B0aW9uczpcclxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5tZXJnZXJdIC0gVGhlIG1lcmdlIG1ldGhvZCAoa2V5LCB0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucylcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgYHRhcmdldGAgb2JqZWN0LlxyXG5cdCAqL1xyXG5cdG1lcmdlOiBmdW5jdGlvbih0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xyXG5cdFx0dmFyIHNvdXJjZXMgPSBoZWxwZXJzLmlzQXJyYXkoc291cmNlKSA/IHNvdXJjZSA6IFtzb3VyY2VdO1xyXG5cdFx0dmFyIGlsZW4gPSBzb3VyY2VzLmxlbmd0aDtcclxuXHRcdHZhciBtZXJnZSwgaSwga2V5cywga2xlbiwgaztcclxuXHJcblx0XHRpZiAoIWhlbHBlcnMuaXNPYmplY3QodGFyZ2V0KSkge1xyXG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xyXG5cdFx0fVxyXG5cclxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cdFx0bWVyZ2UgPSBvcHRpb25zLm1lcmdlciB8fCBoZWxwZXJzLl9tZXJnZXI7XHJcblxyXG5cdFx0Zm9yIChpID0gMDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHRzb3VyY2UgPSBzb3VyY2VzW2ldO1xyXG5cdFx0XHRpZiAoIWhlbHBlcnMuaXNPYmplY3Qoc291cmNlKSkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcclxuXHRcdFx0Zm9yIChrID0gMCwga2xlbiA9IGtleXMubGVuZ3RoOyBrIDwga2xlbjsgKytrKSB7XHJcblx0XHRcdFx0bWVyZ2Uoa2V5c1trXSwgdGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRhcmdldDtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBSZWN1cnNpdmVseSBkZWVwIGNvcGllcyBgc291cmNlYCBwcm9wZXJ0aWVzIGludG8gYHRhcmdldGAgKm9ubHkqIGlmIG5vdCBkZWZpbmVkIGluIHRhcmdldC5cclxuXHQgKiBJTVBPUlRBTlQ6IGB0YXJnZXRgIGlzIG5vdCBjbG9uZWQgYW5kIHdpbGwgYmUgdXBkYXRlZCB3aXRoIGBzb3VyY2VgIHByb3BlcnRpZXMuXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IGluIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSBtZXJnZWQgaW50by5cclxuXHQgKiBAcGFyYW0ge09iamVjdHxBcnJheShPYmplY3QpfSBzb3VyY2UgLSBPYmplY3QocykgdG8gbWVyZ2UgaW50byBgdGFyZ2V0YC5cclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgYHRhcmdldGAgb2JqZWN0LlxyXG5cdCAqL1xyXG5cdG1lcmdlSWY6IGZ1bmN0aW9uKHRhcmdldCwgc291cmNlKSB7XHJcblx0XHRyZXR1cm4gaGVscGVycy5tZXJnZSh0YXJnZXQsIHNvdXJjZSwge21lcmdlcjogaGVscGVycy5fbWVyZ2VySWZ9KTtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBBcHBsaWVzIHRoZSBjb250ZW50cyBvZiB0d28gb3IgbW9yZSBvYmplY3RzIHRvZ2V0aGVyIGludG8gdGhlIGZpcnN0IG9iamVjdC5cclxuXHQgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IC0gVGhlIHRhcmdldCBvYmplY3QgaW4gd2hpY2ggYWxsIG9iamVjdHMgYXJlIG1lcmdlZCBpbnRvLlxyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBhcmcxIC0gT2JqZWN0IGNvbnRhaW5pbmcgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIG1lcmdlIGluIHRhcmdldC5cclxuXHQgKiBAcGFyYW0ge09iamVjdH0gYXJnTiAtIEFkZGl0aW9uYWwgb2JqZWN0cyBjb250YWluaW5nIHByb3BlcnRpZXMgdG8gbWVyZ2UgaW4gdGFyZ2V0LlxyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBgdGFyZ2V0YCBvYmplY3QuXHJcblx0ICovXHJcblx0ZXh0ZW5kOiBmdW5jdGlvbih0YXJnZXQpIHtcclxuXHRcdHZhciBzZXRGbiA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcclxuXHRcdFx0dGFyZ2V0W2tleV0gPSB2YWx1ZTtcclxuXHRcdH07XHJcblx0XHRmb3IgKHZhciBpID0gMSwgaWxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdFx0aGVscGVycy5lYWNoKGFyZ3VtZW50c1tpXSwgc2V0Rm4pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRhcmdldDtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBCYXNpYyBqYXZhc2NyaXB0IGluaGVyaXRhbmNlIGJhc2VkIG9uIHRoZSBtb2RlbCBjcmVhdGVkIGluIEJhY2tib25lLmpzXHJcblx0ICovXHJcblx0aW5oZXJpdHM6IGZ1bmN0aW9uKGV4dGVuc2lvbnMpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHR2YXIgQ2hhcnRFbGVtZW50ID0gKGV4dGVuc2lvbnMgJiYgZXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eSgnY29uc3RydWN0b3InKSkgPyBleHRlbnNpb25zLmNvbnN0cnVjdG9yIDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiBtZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG5cdFx0fTtcclxuXHJcblx0XHR2YXIgU3Vycm9nYXRlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdHRoaXMuY29uc3RydWN0b3IgPSBDaGFydEVsZW1lbnQ7XHJcblx0XHR9O1xyXG5cclxuXHRcdFN1cnJvZ2F0ZS5wcm90b3R5cGUgPSBtZS5wcm90b3R5cGU7XHJcblx0XHRDaGFydEVsZW1lbnQucHJvdG90eXBlID0gbmV3IFN1cnJvZ2F0ZSgpO1xyXG5cdFx0Q2hhcnRFbGVtZW50LmV4dGVuZCA9IGhlbHBlcnMuaW5oZXJpdHM7XHJcblxyXG5cdFx0aWYgKGV4dGVuc2lvbnMpIHtcclxuXHRcdFx0aGVscGVycy5leHRlbmQoQ2hhcnRFbGVtZW50LnByb3RvdHlwZSwgZXh0ZW5zaW9ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Q2hhcnRFbGVtZW50Ll9fc3VwZXJfXyA9IG1lLnByb3RvdHlwZTtcclxuXHRcdHJldHVybiBDaGFydEVsZW1lbnQ7XHJcblx0fVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBoZWxwZXJzO1xyXG5cclxuLy8gREVQUkVDQVRJT05TXHJcblxyXG4vKipcclxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5oZWxwZXJzLmNhbGxiYWNrIGluc3RlYWQuXHJcbiAqIEBmdW5jdGlvbiBDaGFydC5oZWxwZXJzLmNhbGxDYWxsYmFja1xyXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuNi4wXHJcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcclxuICogQHByaXZhdGVcclxuICovXHJcbmhlbHBlcnMuY2FsbENhbGxiYWNrID0gaGVscGVycy5jYWxsYmFjaztcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIEFycmF5LnByb3RvdHlwZS5pbmRleE9mIGluc3RlYWQuXHJcbiAqIEFycmF5LnByb3RvdHlwZS5pbmRleE9mIGNvbXBhdGliaWxpdHk6IENocm9tZSwgT3BlcmEsIFNhZmFyaSwgRkYxLjUrLCBJRTkrXHJcbiAqIEBmdW5jdGlvbiBDaGFydC5oZWxwZXJzLmluZGV4T2ZcclxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjcuMFxyXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5oZWxwZXJzLmluZGV4T2YgPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgZnJvbUluZGV4KSB7XHJcblx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYXJyYXksIGl0ZW0sIGZyb21JbmRleCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5oZWxwZXJzLnZhbHVlT3JEZWZhdWx0IGluc3RlYWQuXHJcbiAqIEBmdW5jdGlvbiBDaGFydC5oZWxwZXJzLmdldFZhbHVlT3JEZWZhdWx0XHJcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi43LjBcclxuICogQHRvZG8gcmVtb3ZlIGF0IHZlcnNpb24gM1xyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuaGVscGVycy5nZXRWYWx1ZU9yRGVmYXVsdCA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQ7XHJcblxyXG4vKipcclxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5oZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdCBpbnN0ZWFkLlxyXG4gKiBAZnVuY3Rpb24gQ2hhcnQuaGVscGVycy5nZXRWYWx1ZUF0SW5kZXhPckRlZmF1bHRcclxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjcuMFxyXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5oZWxwZXJzLmdldFZhbHVlQXRJbmRleE9yRGVmYXVsdCA9IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0O1xyXG5cclxufSx7fV0sNDQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaGVscGVycyA9IHJlcXVpcmUoNDMpO1xyXG5cclxuLyoqXHJcbiAqIEVhc2luZyBmdW5jdGlvbnMgYWRhcHRlZCBmcm9tIFJvYmVydCBQZW5uZXIncyBlYXNpbmcgZXF1YXRpb25zLlxyXG4gKiBAbmFtZXNwYWNlIENoYXJ0LmhlbHBlcnMuZWFzaW5nRWZmZWN0c1xyXG4gKiBAc2VlIGh0dHA6Ly93d3cucm9iZXJ0cGVubmVyLmNvbS9lYXNpbmcvXHJcbiAqL1xyXG52YXIgZWZmZWN0cyA9IHtcclxuXHRsaW5lYXI6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdHJldHVybiB0O1xyXG5cdH0sXHJcblxyXG5cdGVhc2VJblF1YWQ6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdHJldHVybiB0ICogdDtcclxuXHR9LFxyXG5cclxuXHRlYXNlT3V0UXVhZDogZnVuY3Rpb24odCkge1xyXG5cdFx0cmV0dXJuIC10ICogKHQgLSAyKTtcclxuXHR9LFxyXG5cclxuXHRlYXNlSW5PdXRRdWFkOiBmdW5jdGlvbih0KSB7XHJcblx0XHRpZiAoKHQgLz0gMC41KSA8IDEpIHtcclxuXHRcdFx0cmV0dXJuIDAuNSAqIHQgKiB0O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIC0wLjUgKiAoKC0tdCkgKiAodCAtIDIpIC0gMSk7XHJcblx0fSxcclxuXHJcblx0ZWFzZUluQ3ViaWM6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdHJldHVybiB0ICogdCAqIHQ7XHJcblx0fSxcclxuXHJcblx0ZWFzZU91dEN1YmljOiBmdW5jdGlvbih0KSB7XHJcblx0XHRyZXR1cm4gKHQgPSB0IC0gMSkgKiB0ICogdCArIDE7XHJcblx0fSxcclxuXHJcblx0ZWFzZUluT3V0Q3ViaWM6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdGlmICgodCAvPSAwLjUpIDwgMSkge1xyXG5cdFx0XHRyZXR1cm4gMC41ICogdCAqIHQgKiB0O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDAuNSAqICgodCAtPSAyKSAqIHQgKiB0ICsgMik7XHJcblx0fSxcclxuXHJcblx0ZWFzZUluUXVhcnQ6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG5cdH0sXHJcblxyXG5cdGVhc2VPdXRRdWFydDogZnVuY3Rpb24odCkge1xyXG5cdFx0cmV0dXJuIC0oKHQgPSB0IC0gMSkgKiB0ICogdCAqIHQgLSAxKTtcclxuXHR9LFxyXG5cclxuXHRlYXNlSW5PdXRRdWFydDogZnVuY3Rpb24odCkge1xyXG5cdFx0aWYgKCh0IC89IDAuNSkgPCAxKSB7XHJcblx0XHRcdHJldHVybiAwLjUgKiB0ICogdCAqIHQgKiB0O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIC0wLjUgKiAoKHQgLT0gMikgKiB0ICogdCAqIHQgLSAyKTtcclxuXHR9LFxyXG5cclxuXHRlYXNlSW5RdWludDogZnVuY3Rpb24odCkge1xyXG5cdFx0cmV0dXJuIHQgKiB0ICogdCAqIHQgKiB0O1xyXG5cdH0sXHJcblxyXG5cdGVhc2VPdXRRdWludDogZnVuY3Rpb24odCkge1xyXG5cdFx0cmV0dXJuICh0ID0gdCAtIDEpICogdCAqIHQgKiB0ICogdCArIDE7XHJcblx0fSxcclxuXHJcblx0ZWFzZUluT3V0UXVpbnQ6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdGlmICgodCAvPSAwLjUpIDwgMSkge1xyXG5cdFx0XHRyZXR1cm4gMC41ICogdCAqIHQgKiB0ICogdCAqIHQ7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gMC41ICogKCh0IC09IDIpICogdCAqIHQgKiB0ICogdCArIDIpO1xyXG5cdH0sXHJcblxyXG5cdGVhc2VJblNpbmU6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdHJldHVybiAtTWF0aC5jb3ModCAqIChNYXRoLlBJIC8gMikpICsgMTtcclxuXHR9LFxyXG5cclxuXHRlYXNlT3V0U2luZTogZnVuY3Rpb24odCkge1xyXG5cdFx0cmV0dXJuIE1hdGguc2luKHQgKiAoTWF0aC5QSSAvIDIpKTtcclxuXHR9LFxyXG5cclxuXHRlYXNlSW5PdXRTaW5lOiBmdW5jdGlvbih0KSB7XHJcblx0XHRyZXR1cm4gLTAuNSAqIChNYXRoLmNvcyhNYXRoLlBJICogdCkgLSAxKTtcclxuXHR9LFxyXG5cclxuXHRlYXNlSW5FeHBvOiBmdW5jdGlvbih0KSB7XHJcblx0XHRyZXR1cm4gKHQgPT09IDApID8gMCA6IE1hdGgucG93KDIsIDEwICogKHQgLSAxKSk7XHJcblx0fSxcclxuXHJcblx0ZWFzZU91dEV4cG86IGZ1bmN0aW9uKHQpIHtcclxuXHRcdHJldHVybiAodCA9PT0gMSkgPyAxIDogLU1hdGgucG93KDIsIC0xMCAqIHQpICsgMTtcclxuXHR9LFxyXG5cclxuXHRlYXNlSW5PdXRFeHBvOiBmdW5jdGlvbih0KSB7XHJcblx0XHRpZiAodCA9PT0gMCkge1xyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHRcdH1cclxuXHRcdGlmICh0ID09PSAxKSB7XHJcblx0XHRcdHJldHVybiAxO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCh0IC89IDAuNSkgPCAxKSB7XHJcblx0XHRcdHJldHVybiAwLjUgKiBNYXRoLnBvdygyLCAxMCAqICh0IC0gMSkpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDAuNSAqICgtTWF0aC5wb3coMiwgLTEwICogLS10KSArIDIpO1xyXG5cdH0sXHJcblxyXG5cdGVhc2VJbkNpcmM6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdGlmICh0ID49IDEpIHtcclxuXHRcdFx0cmV0dXJuIHQ7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gLShNYXRoLnNxcnQoMSAtIHQgKiB0KSAtIDEpO1xyXG5cdH0sXHJcblxyXG5cdGVhc2VPdXRDaXJjOiBmdW5jdGlvbih0KSB7XHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KDEgLSAodCA9IHQgLSAxKSAqIHQpO1xyXG5cdH0sXHJcblxyXG5cdGVhc2VJbk91dENpcmM6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdGlmICgodCAvPSAwLjUpIDwgMSkge1xyXG5cdFx0XHRyZXR1cm4gLTAuNSAqIChNYXRoLnNxcnQoMSAtIHQgKiB0KSAtIDEpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDAuNSAqIChNYXRoLnNxcnQoMSAtICh0IC09IDIpICogdCkgKyAxKTtcclxuXHR9LFxyXG5cclxuXHRlYXNlSW5FbGFzdGljOiBmdW5jdGlvbih0KSB7XHJcblx0XHR2YXIgcyA9IDEuNzAxNTg7XHJcblx0XHR2YXIgcCA9IDA7XHJcblx0XHR2YXIgYSA9IDE7XHJcblx0XHRpZiAodCA9PT0gMCkge1xyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHRcdH1cclxuXHRcdGlmICh0ID09PSAxKSB7XHJcblx0XHRcdHJldHVybiAxO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFwKSB7XHJcblx0XHRcdHAgPSAwLjM7XHJcblx0XHR9XHJcblx0XHRpZiAoYSA8IDEpIHtcclxuXHRcdFx0YSA9IDE7XHJcblx0XHRcdHMgPSBwIC8gNDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbigxIC8gYSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gLShhICogTWF0aC5wb3coMiwgMTAgKiAodCAtPSAxKSkgKiBNYXRoLnNpbigodCAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcclxuXHR9LFxyXG5cclxuXHRlYXNlT3V0RWxhc3RpYzogZnVuY3Rpb24odCkge1xyXG5cdFx0dmFyIHMgPSAxLjcwMTU4O1xyXG5cdFx0dmFyIHAgPSAwO1xyXG5cdFx0dmFyIGEgPSAxO1xyXG5cdFx0aWYgKHQgPT09IDApIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblx0XHRpZiAodCA9PT0gMSkge1xyXG5cdFx0XHRyZXR1cm4gMTtcclxuXHRcdH1cclxuXHRcdGlmICghcCkge1xyXG5cdFx0XHRwID0gMC4zO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGEgPCAxKSB7XHJcblx0XHRcdGEgPSAxO1xyXG5cdFx0XHRzID0gcCAvIDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRzID0gcCAvICgyICogTWF0aC5QSSkgKiBNYXRoLmFzaW4oMSAvIGEpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiB0KSAqIE1hdGguc2luKCh0IC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkgKyAxO1xyXG5cdH0sXHJcblxyXG5cdGVhc2VJbk91dEVsYXN0aWM6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdHZhciBzID0gMS43MDE1ODtcclxuXHRcdHZhciBwID0gMDtcclxuXHRcdHZhciBhID0gMTtcclxuXHRcdGlmICh0ID09PSAwKSB7XHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCh0IC89IDAuNSkgPT09IDIpIHtcclxuXHRcdFx0cmV0dXJuIDE7XHJcblx0XHR9XHJcblx0XHRpZiAoIXApIHtcclxuXHRcdFx0cCA9IDAuNDU7XHJcblx0XHR9XHJcblx0XHRpZiAoYSA8IDEpIHtcclxuXHRcdFx0YSA9IDE7XHJcblx0XHRcdHMgPSBwIC8gNDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbigxIC8gYSk7XHJcblx0XHR9XHJcblx0XHRpZiAodCA8IDEpIHtcclxuXHRcdFx0cmV0dXJuIC0wLjUgKiAoYSAqIE1hdGgucG93KDIsIDEwICogKHQgLT0gMSkpICogTWF0aC5zaW4oKHQgLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqICh0IC09IDEpKSAqIE1hdGguc2luKCh0IC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkgKiAwLjUgKyAxO1xyXG5cdH0sXHJcblx0ZWFzZUluQmFjazogZnVuY3Rpb24odCkge1xyXG5cdFx0dmFyIHMgPSAxLjcwMTU4O1xyXG5cdFx0cmV0dXJuIHQgKiB0ICogKChzICsgMSkgKiB0IC0gcyk7XHJcblx0fSxcclxuXHJcblx0ZWFzZU91dEJhY2s6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdHZhciBzID0gMS43MDE1ODtcclxuXHRcdHJldHVybiAodCA9IHQgLSAxKSAqIHQgKiAoKHMgKyAxKSAqIHQgKyBzKSArIDE7XHJcblx0fSxcclxuXHJcblx0ZWFzZUluT3V0QmFjazogZnVuY3Rpb24odCkge1xyXG5cdFx0dmFyIHMgPSAxLjcwMTU4O1xyXG5cdFx0aWYgKCh0IC89IDAuNSkgPCAxKSB7XHJcblx0XHRcdHJldHVybiAwLjUgKiAodCAqIHQgKiAoKChzICo9ICgxLjUyNSkpICsgMSkgKiB0IC0gcykpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDAuNSAqICgodCAtPSAyKSAqIHQgKiAoKChzICo9ICgxLjUyNSkpICsgMSkgKiB0ICsgcykgKyAyKTtcclxuXHR9LFxyXG5cclxuXHRlYXNlSW5Cb3VuY2U6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdHJldHVybiAxIC0gZWZmZWN0cy5lYXNlT3V0Qm91bmNlKDEgLSB0KTtcclxuXHR9LFxyXG5cclxuXHRlYXNlT3V0Qm91bmNlOiBmdW5jdGlvbih0KSB7XHJcblx0XHRpZiAodCA8ICgxIC8gMi43NSkpIHtcclxuXHRcdFx0cmV0dXJuIDcuNTYyNSAqIHQgKiB0O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHQgPCAoMiAvIDIuNzUpKSB7XHJcblx0XHRcdHJldHVybiA3LjU2MjUgKiAodCAtPSAoMS41IC8gMi43NSkpICogdCArIDAuNzU7XHJcblx0XHR9XHJcblx0XHRpZiAodCA8ICgyLjUgLyAyLjc1KSkge1xyXG5cdFx0XHRyZXR1cm4gNy41NjI1ICogKHQgLT0gKDIuMjUgLyAyLjc1KSkgKiB0ICsgMC45Mzc1O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDcuNTYyNSAqICh0IC09ICgyLjYyNSAvIDIuNzUpKSAqIHQgKyAwLjk4NDM3NTtcclxuXHR9LFxyXG5cclxuXHRlYXNlSW5PdXRCb3VuY2U6IGZ1bmN0aW9uKHQpIHtcclxuXHRcdGlmICh0IDwgMC41KSB7XHJcblx0XHRcdHJldHVybiBlZmZlY3RzLmVhc2VJbkJvdW5jZSh0ICogMikgKiAwLjU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZWZmZWN0cy5lYXNlT3V0Qm91bmNlKHQgKiAyIC0gMSkgKiAwLjUgKyAwLjU7XHJcblx0fVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0ZWZmZWN0czogZWZmZWN0c1xyXG59O1xyXG5cclxuLy8gREVQUkVDQVRJT05TXHJcblxyXG4vKipcclxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5oZWxwZXJzLmVhc2luZy5lZmZlY3RzIGluc3RlYWQuXHJcbiAqIEBmdW5jdGlvbiBDaGFydC5oZWxwZXJzLmVhc2luZ0VmZmVjdHNcclxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjcuMFxyXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5oZWxwZXJzLmVhc2luZ0VmZmVjdHMgPSBlZmZlY3RzO1xyXG5cclxufSx7XCI0M1wiOjQzfV0sNDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaGVscGVycyA9IHJlcXVpcmUoNDMpO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBDaGFydC5oZWxwZXJzLm9wdGlvbnNcclxuICogQG5hbWVzcGFjZVxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0LyoqXHJcblx0ICogQ29udmVydHMgdGhlIGdpdmVuIGxpbmUgaGVpZ2h0IGB2YWx1ZWAgaW4gcGl4ZWxzIGZvciBhIHNwZWNpZmljIGZvbnQgYHNpemVgLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gdmFsdWUgLSBUaGUgbGluZUhlaWdodCB0byBwYXJzZSAoZWcuIDEuNiwgJzE0cHgnLCAnNzUlJywgJzEuNmVtJykuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IHNpemUgLSBUaGUgZm9udCBzaXplIChpbiBwaXhlbHMpIHVzZWQgdG8gcmVzb2x2ZSByZWxhdGl2ZSBgdmFsdWVgLlxyXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBlZmZlY3RpdmUgbGluZSBoZWlnaHQgaW4gcGl4ZWxzIChzaXplICogMS4yIGlmIHZhbHVlIGlzIGludmFsaWQpLlxyXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2xpbmUtaGVpZ2h0XHJcblx0ICogQHNpbmNlIDIuNy4wXHJcblx0ICovXHJcblx0dG9MaW5lSGVpZ2h0OiBmdW5jdGlvbih2YWx1ZSwgc2l6ZSkge1xyXG5cdFx0dmFyIG1hdGNoZXMgPSAoJycgKyB2YWx1ZSkubWF0Y2goL14obm9ybWFsfChcXGQrKD86XFwuXFxkKyk/KShweHxlbXwlKT8pJC8pO1xyXG5cdFx0aWYgKCFtYXRjaGVzIHx8IG1hdGNoZXNbMV0gPT09ICdub3JtYWwnKSB7XHJcblx0XHRcdHJldHVybiBzaXplICogMS4yO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhbHVlID0gK21hdGNoZXNbMl07XHJcblxyXG5cdFx0c3dpdGNoIChtYXRjaGVzWzNdKSB7XHJcblx0XHRjYXNlICdweCc6XHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdGNhc2UgJyUnOlxyXG5cdFx0XHR2YWx1ZSAvPSAxMDA7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0ZGVmYXVsdDpcclxuXHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHNpemUgKiB2YWx1ZTtcclxuXHR9LFxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gdmFsdWUgaW50byBhIHBhZGRpbmcgb2JqZWN0IHdpdGggcHJlLWNvbXB1dGVkIHdpZHRoL2hlaWdodC5cclxuXHQgKiBAcGFyYW0ge051bWJlcnxPYmplY3R9IHZhbHVlIC0gSWYgYSBudW1iZXIsIHNldCB0aGUgdmFsdWUgdG8gYWxsIFRSQkwgY29tcG9uZW50LFxyXG5cdCAqICBlbHNlLCBpZiBhbmQgb2JqZWN0LCB1c2UgZGVmaW5lZCBwcm9wZXJ0aWVzIGFuZCBzZXRzIHVuZGVmaW5lZCBvbmVzIHRvIDAuXHJcblx0ICogQHJldHVybnMge09iamVjdH0gVGhlIHBhZGRpbmcgdmFsdWVzICh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHdpZHRoLCBoZWlnaHQpXHJcblx0ICogQHNpbmNlIDIuNy4wXHJcblx0ICovXHJcblx0dG9QYWRkaW5nOiBmdW5jdGlvbih2YWx1ZSkge1xyXG5cdFx0dmFyIHQsIHIsIGIsIGw7XHJcblxyXG5cdFx0aWYgKGhlbHBlcnMuaXNPYmplY3QodmFsdWUpKSB7XHJcblx0XHRcdHQgPSArdmFsdWUudG9wIHx8IDA7XHJcblx0XHRcdHIgPSArdmFsdWUucmlnaHQgfHwgMDtcclxuXHRcdFx0YiA9ICt2YWx1ZS5ib3R0b20gfHwgMDtcclxuXHRcdFx0bCA9ICt2YWx1ZS5sZWZ0IHx8IDA7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0ID0gciA9IGIgPSBsID0gK3ZhbHVlIHx8IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0dG9wOiB0LFxyXG5cdFx0XHRyaWdodDogcixcclxuXHRcdFx0Ym90dG9tOiBiLFxyXG5cdFx0XHRsZWZ0OiBsLFxyXG5cdFx0XHRoZWlnaHQ6IHQgKyBiLFxyXG5cdFx0XHR3aWR0aDogbCArIHJcclxuXHRcdH07XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogRXZhbHVhdGVzIHRoZSBnaXZlbiBgaW5wdXRzYCBzZXF1ZW50aWFsbHkgYW5kIHJldHVybnMgdGhlIGZpcnN0IGRlZmluZWQgdmFsdWUuXHJcblx0ICogQHBhcmFtIHtBcnJheVtdfSBpbnB1dHMgLSBBbiBhcnJheSBvZiB2YWx1ZXMsIGZhbGxpbmcgYmFjayB0byB0aGUgbGFzdCB2YWx1ZS5cclxuXHQgKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdIC0gSWYgZGVmaW5lZCBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYSBmdW5jdGlvbiwgdGhlIHZhbHVlXHJcblx0ICogaXMgY2FsbGVkIHdpdGggYGNvbnRleHRgIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCB0aGUgcmVzdWx0IGJlY29tZXMgdGhlIG5ldyBpbnB1dC5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2luZGV4XSAtIElmIGRlZmluZWQgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIGFuIGFycmF5LCB0aGUgdmFsdWVcclxuXHQgKiBhdCBgaW5kZXhgIGJlY29tZSB0aGUgbmV3IGlucHV0LlxyXG5cdCAqIEBzaW5jZSAyLjcuMFxyXG5cdCAqL1xyXG5cdHJlc29sdmU6IGZ1bmN0aW9uKGlucHV0cywgY29udGV4dCwgaW5kZXgpIHtcclxuXHRcdHZhciBpLCBpbGVuLCB2YWx1ZTtcclxuXHJcblx0XHRmb3IgKGkgPSAwLCBpbGVuID0gaW5wdXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHR2YWx1ZSA9IGlucHV0c1tpXTtcclxuXHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoY29udGV4dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRcdHZhbHVlID0gdmFsdWUoY29udGV4dCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgaGVscGVycy5pc0FycmF5KHZhbHVlKSkge1xyXG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbaW5kZXhdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59O1xyXG5cclxufSx7XCI0M1wiOjQzfV0sNDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoNDMpO1xyXG5tb2R1bGUuZXhwb3J0cy5lYXNpbmcgPSByZXF1aXJlKDQ0KTtcclxubW9kdWxlLmV4cG9ydHMuY2FudmFzID0gcmVxdWlyZSg0Mik7XHJcbm1vZHVsZS5leHBvcnRzLm9wdGlvbnMgPSByZXF1aXJlKDQ1KTtcclxuXHJcbn0se1wiNDJcIjo0MixcIjQzXCI6NDMsXCI0NFwiOjQ0LFwiNDVcIjo0NX1dLDQ3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuLyoqXHJcbiAqIFBsYXRmb3JtIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIChtaW5pbWFsKS5cclxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9wdWxsLzQ1OTEjaXNzdWVjb21tZW50LTMxOTU3NTkzOVxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdGFjcXVpcmVDb250ZXh0OiBmdW5jdGlvbihpdGVtKSB7XHJcblx0XHRpZiAoaXRlbSAmJiBpdGVtLmNhbnZhcykge1xyXG5cdFx0XHQvLyBTdXBwb3J0IGZvciBhbnkgb2JqZWN0IGFzc29jaWF0ZWQgdG8gYSBjYW52YXMgKGluY2x1ZGluZyBhIGNvbnRleHQyZClcclxuXHRcdFx0aXRlbSA9IGl0ZW0uY2FudmFzO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpdGVtICYmIGl0ZW0uZ2V0Q29udGV4dCgnMmQnKSB8fCBudWxsO1xyXG5cdH1cclxufTtcclxuXHJcbn0se31dLDQ4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuLyoqXHJcbiAqIENoYXJ0LlBsYXRmb3JtIGltcGxlbWVudGF0aW9uIGZvciB0YXJnZXRpbmcgYSB3ZWIgYnJvd3NlclxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Nik7XHJcblxyXG52YXIgRVhQQU5ET19LRVkgPSAnJGNoYXJ0anMnO1xyXG52YXIgQ1NTX1BSRUZJWCA9ICdjaGFydGpzLSc7XHJcbnZhciBDU1NfUkVOREVSX01PTklUT1IgPSBDU1NfUFJFRklYICsgJ3JlbmRlci1tb25pdG9yJztcclxudmFyIENTU19SRU5ERVJfQU5JTUFUSU9OID0gQ1NTX1BSRUZJWCArICdyZW5kZXItYW5pbWF0aW9uJztcclxudmFyIEFOSU1BVElPTl9TVEFSVF9FVkVOVFMgPSBbJ2FuaW1hdGlvbnN0YXJ0JywgJ3dlYmtpdEFuaW1hdGlvblN0YXJ0J107XHJcblxyXG4vKipcclxuICogRE9NIGV2ZW50IHR5cGVzIC0+IENoYXJ0LmpzIGV2ZW50IHR5cGVzLlxyXG4gKiBOb3RlOiBvbmx5IGV2ZW50cyB3aXRoIGRpZmZlcmVudCB0eXBlcyBhcmUgbWFwcGVkLlxyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50c1xyXG4gKi9cclxudmFyIEVWRU5UX1RZUEVTID0ge1xyXG5cdHRvdWNoc3RhcnQ6ICdtb3VzZWRvd24nLFxyXG5cdHRvdWNobW92ZTogJ21vdXNlbW92ZScsXHJcblx0dG91Y2hlbmQ6ICdtb3VzZXVwJyxcclxuXHRwb2ludGVyZW50ZXI6ICdtb3VzZWVudGVyJyxcclxuXHRwb2ludGVyZG93bjogJ21vdXNlZG93bicsXHJcblx0cG9pbnRlcm1vdmU6ICdtb3VzZW1vdmUnLFxyXG5cdHBvaW50ZXJ1cDogJ21vdXNldXAnLFxyXG5cdHBvaW50ZXJsZWF2ZTogJ21vdXNlb3V0JyxcclxuXHRwb2ludGVyb3V0OiAnbW91c2VvdXQnXHJcbn07XHJcblxyXG4vKipcclxuICogVGhlIFwidXNlZFwiIHNpemUgaXMgdGhlIGZpbmFsIHZhbHVlIG9mIGEgZGltZW5zaW9uIHByb3BlcnR5IGFmdGVyIGFsbCBjYWxjdWxhdGlvbnMgaGF2ZVxyXG4gKiBiZWVuIHBlcmZvcm1lZC4gVGhpcyBtZXRob2QgdXNlcyB0aGUgY29tcHV0ZWQgc3R5bGUgb2YgYGVsZW1lbnRgIGJ1dCByZXR1cm5zIHVuZGVmaW5lZFxyXG4gKiBpZiB0aGUgY29tcHV0ZWQgc3R5bGUgaXMgbm90IGV4cHJlc3NlZCBpbiBwaXhlbHMuIFRoYXQgY2FuIGhhcHBlbiBpbiBzb21lIGNhc2VzIHdoZXJlXHJcbiAqIGBlbGVtZW50YCBoYXMgYSBzaXplIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgYW5kIHRoaXMgbGFzdCBvbmUgaXMgbm90IHlldCBkaXNwbGF5ZWQsXHJcbiAqIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgYGRpc3BsYXk6IG5vbmVgIG9uIGEgcGFyZW50IG5vZGUuXHJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3VzZWRfdmFsdWVcclxuICogQHJldHVybnMge051bWJlcn0gU2l6ZSBpbiBwaXhlbHMgb3IgdW5kZWZpbmVkIGlmIHVua25vd24uXHJcbiAqL1xyXG5mdW5jdGlvbiByZWFkVXNlZFNpemUoZWxlbWVudCwgcHJvcGVydHkpIHtcclxuXHR2YXIgdmFsdWUgPSBoZWxwZXJzLmdldFN0eWxlKGVsZW1lbnQsIHByb3BlcnR5KTtcclxuXHR2YXIgbWF0Y2hlcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKC9eKFxcZCspKFxcLlxcZCspP3B4JC8pO1xyXG5cdHJldHVybiBtYXRjaGVzID8gTnVtYmVyKG1hdGNoZXNbMV0pIDogdW5kZWZpbmVkO1xyXG59XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZXMgdGhlIGNhbnZhcyBzdHlsZSBhbmQgcmVuZGVyIHNpemUgd2l0aG91dCBtb2RpZnlpbmcgdGhlIGNhbnZhcyBkaXNwbGF5IHNpemUsXHJcbiAqIHNpbmNlIHJlc3BvbnNpdmVuZXNzIGlzIGhhbmRsZWQgYnkgdGhlIGNvbnRyb2xsZXIucmVzaXplKCkgbWV0aG9kLiBUaGUgY29uZmlnIGlzIHVzZWRcclxuICogdG8gZGV0ZXJtaW5lIHRoZSBhc3BlY3QgcmF0aW8gdG8gYXBwbHkgaW4gY2FzZSBubyBleHBsaWNpdCBoZWlnaHQgaGFzIGJlZW4gc3BlY2lmaWVkLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5pdENhbnZhcyhjYW52YXMsIGNvbmZpZykge1xyXG5cdHZhciBzdHlsZSA9IGNhbnZhcy5zdHlsZTtcclxuXHJcblx0Ly8gTk9URShTQikgY2FudmFzLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSAhPT0gY2FudmFzLndpZHRoOiBpbiB0aGUgZmlyc3QgY2FzZSBpdFxyXG5cdC8vIHJldHVybnMgbnVsbCBvciAnJyBpZiBubyBleHBsaWNpdCB2YWx1ZSBoYXMgYmVlbiBzZXQgdG8gdGhlIGNhbnZhcyBhdHRyaWJ1dGUuXHJcblx0dmFyIHJlbmRlckhlaWdodCA9IGNhbnZhcy5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpO1xyXG5cdHZhciByZW5kZXJXaWR0aCA9IGNhbnZhcy5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyk7XHJcblxyXG5cdC8vIENoYXJ0LmpzIG1vZGlmaWVzIHNvbWUgY2FudmFzIHZhbHVlcyB0aGF0IHdlIHdhbnQgdG8gcmVzdG9yZSBvbiBkZXN0cm95XHJcblx0Y2FudmFzW0VYUEFORE9fS0VZXSA9IHtcclxuXHRcdGluaXRpYWw6IHtcclxuXHRcdFx0aGVpZ2h0OiByZW5kZXJIZWlnaHQsXHJcblx0XHRcdHdpZHRoOiByZW5kZXJXaWR0aCxcclxuXHRcdFx0c3R5bGU6IHtcclxuXHRcdFx0XHRkaXNwbGF5OiBzdHlsZS5kaXNwbGF5LFxyXG5cdFx0XHRcdGhlaWdodDogc3R5bGUuaGVpZ2h0LFxyXG5cdFx0XHRcdHdpZHRoOiBzdHlsZS53aWR0aFxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Ly8gRm9yY2UgY2FudmFzIHRvIGRpc3BsYXkgYXMgYmxvY2sgdG8gYXZvaWQgZXh0cmEgc3BhY2UgY2F1c2VkIGJ5IGlubGluZVxyXG5cdC8vIGVsZW1lbnRzLCB3aGljaCB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgcmVzcG9uc2l2ZSByZXNpemUgcHJvY2Vzcy5cclxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvMjUzOFxyXG5cdHN0eWxlLmRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5IHx8ICdibG9jayc7XHJcblxyXG5cdGlmIChyZW5kZXJXaWR0aCA9PT0gbnVsbCB8fCByZW5kZXJXaWR0aCA9PT0gJycpIHtcclxuXHRcdHZhciBkaXNwbGF5V2lkdGggPSByZWFkVXNlZFNpemUoY2FudmFzLCAnd2lkdGgnKTtcclxuXHRcdGlmIChkaXNwbGF5V2lkdGggIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjYW52YXMud2lkdGggPSBkaXNwbGF5V2lkdGg7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAocmVuZGVySGVpZ2h0ID09PSBudWxsIHx8IHJlbmRlckhlaWdodCA9PT0gJycpIHtcclxuXHRcdGlmIChjYW52YXMuc3R5bGUuaGVpZ2h0ID09PSAnJykge1xyXG5cdFx0XHQvLyBJZiBubyBleHBsaWNpdCByZW5kZXIgaGVpZ2h0IGFuZCBzdHlsZSBoZWlnaHQsIGxldCdzIGFwcGx5IHRoZSBhc3BlY3QgcmF0aW8sXHJcblx0XHRcdC8vIHdoaWNoIG9uZSBjYW4gYmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIGJ1dCBhbHNvIGJ5IGNoYXJ0cyBhcyBkZWZhdWx0IG9wdGlvblxyXG5cdFx0XHQvLyAoaS5lLiBvcHRpb25zLmFzcGVjdFJhdGlvKS4gSWYgbm90IHNwZWNpZmllZCwgdXNlIGNhbnZhcyBhc3BlY3QgcmF0aW8gb2YgMi5cclxuXHRcdFx0Y2FudmFzLmhlaWdodCA9IGNhbnZhcy53aWR0aCAvIChjb25maWcub3B0aW9ucy5hc3BlY3RSYXRpbyB8fCAyKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHZhciBkaXNwbGF5SGVpZ2h0ID0gcmVhZFVzZWRTaXplKGNhbnZhcywgJ2hlaWdodCcpO1xyXG5cdFx0XHRpZiAoZGlzcGxheVdpZHRoICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRjYW52YXMuaGVpZ2h0ID0gZGlzcGxheUhlaWdodDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGNhbnZhcztcclxufVxyXG5cclxuLyoqXHJcbiAqIERldGVjdHMgc3VwcG9ydCBmb3Igb3B0aW9ucyBvYmplY3QgYXJndW1lbnQgaW4gYWRkRXZlbnRMaXN0ZW5lci5cclxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXIjU2FmZWx5X2RldGVjdGluZ19vcHRpb25fc3VwcG9ydFxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxudmFyIHN1cHBvcnRzRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSAoZnVuY3Rpb24oKSB7XHJcblx0dmFyIHN1cHBvcnRzID0gZmFsc2U7XHJcblx0dHJ5IHtcclxuXHRcdHZhciBvcHRpb25zID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRzdXBwb3J0cyA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2UnLCBudWxsLCBvcHRpb25zKTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHQvLyBjb250aW51ZSByZWdhcmRsZXNzIG9mIGVycm9yXHJcblx0fVxyXG5cdHJldHVybiBzdXBwb3J0cztcclxufSgpKTtcclxuXHJcbi8vIERlZmF1bHQgcGFzc2l2ZSB0byB0cnVlIGFzIGV4cGVjdGVkIGJ5IENocm9tZSBmb3IgJ3RvdWNoc3RhcnQnIGFuZCAndG91Y2hlbmQnIGV2ZW50cy5cclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzQyODdcclxudmFyIGV2ZW50TGlzdGVuZXJPcHRpb25zID0gc3VwcG9ydHNFdmVudExpc3RlbmVyT3B0aW9ucyA/IHtwYXNzaXZlOiB0cnVlfSA6IGZhbHNlO1xyXG5cclxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihub2RlLCB0eXBlLCBsaXN0ZW5lcikge1xyXG5cdG5vZGUuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgZXZlbnRMaXN0ZW5lck9wdGlvbnMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKG5vZGUsIHR5cGUsIGxpc3RlbmVyKSB7XHJcblx0bm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBldmVudExpc3RlbmVyT3B0aW9ucyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50KHR5cGUsIGNoYXJ0LCB4LCB5LCBuYXRpdmVFdmVudCkge1xyXG5cdHJldHVybiB7XHJcblx0XHR0eXBlOiB0eXBlLFxyXG5cdFx0Y2hhcnQ6IGNoYXJ0LFxyXG5cdFx0bmF0aXZlOiBuYXRpdmVFdmVudCB8fCBudWxsLFxyXG5cdFx0eDogeCAhPT0gdW5kZWZpbmVkID8geCA6IG51bGwsXHJcblx0XHR5OiB5ICE9PSB1bmRlZmluZWQgPyB5IDogbnVsbCxcclxuXHR9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmcm9tTmF0aXZlRXZlbnQoZXZlbnQsIGNoYXJ0KSB7XHJcblx0dmFyIHR5cGUgPSBFVkVOVF9UWVBFU1tldmVudC50eXBlXSB8fCBldmVudC50eXBlO1xyXG5cdHZhciBwb3MgPSBoZWxwZXJzLmdldFJlbGF0aXZlUG9zaXRpb24oZXZlbnQsIGNoYXJ0KTtcclxuXHRyZXR1cm4gY3JlYXRlRXZlbnQodHlwZSwgY2hhcnQsIHBvcy54LCBwb3MueSwgZXZlbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0aHJvdHRsZWQoZm4sIHRoaXNBcmcpIHtcclxuXHR2YXIgdGlja2luZyA9IGZhbHNlO1xyXG5cdHZhciBhcmdzID0gW107XHJcblxyXG5cdHJldHVybiBmdW5jdGlvbigpIHtcclxuXHRcdGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG5cdFx0dGhpc0FyZyA9IHRoaXNBcmcgfHwgdGhpcztcclxuXHJcblx0XHRpZiAoIXRpY2tpbmcpIHtcclxuXHRcdFx0dGlja2luZyA9IHRydWU7XHJcblx0XHRcdGhlbHBlcnMucmVxdWVzdEFuaW1GcmFtZS5jYWxsKHdpbmRvdywgZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0dGlja2luZyA9IGZhbHNlO1xyXG5cdFx0XHRcdGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9O1xyXG59XHJcblxyXG4vLyBJbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbWFyY2ovY3NzLWVsZW1lbnQtcXVlcmllc1xyXG5mdW5jdGlvbiBjcmVhdGVSZXNpemVyKGhhbmRsZXIpIHtcclxuXHR2YXIgcmVzaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cdHZhciBjbHMgPSBDU1NfUFJFRklYICsgJ3NpemUtbW9uaXRvcic7XHJcblx0dmFyIG1heFNpemUgPSAxMDAwMDAwO1xyXG5cdHZhciBzdHlsZSA9XHJcblx0XHQncG9zaXRpb246YWJzb2x1dGU7JyArXHJcblx0XHQnbGVmdDowOycgK1xyXG5cdFx0J3RvcDowOycgK1xyXG5cdFx0J3JpZ2h0OjA7JyArXHJcblx0XHQnYm90dG9tOjA7JyArXHJcblx0XHQnb3ZlcmZsb3c6aGlkZGVuOycgK1xyXG5cdFx0J3BvaW50ZXItZXZlbnRzOm5vbmU7JyArXHJcblx0XHQndmlzaWJpbGl0eTpoaWRkZW47JyArXHJcblx0XHQnei1pbmRleDotMTsnO1xyXG5cclxuXHRyZXNpemVyLnN0eWxlLmNzc1RleHQgPSBzdHlsZTtcclxuXHRyZXNpemVyLmNsYXNzTmFtZSA9IGNscztcclxuXHRyZXNpemVyLmlubmVySFRNTCA9XHJcblx0XHQnPGRpdiBjbGFzcz1cIicgKyBjbHMgKyAnLWV4cGFuZFwiIHN0eWxlPVwiJyArIHN0eWxlICsgJ1wiPicgK1xyXG5cdFx0XHQnPGRpdiBzdHlsZT1cIicgK1xyXG5cdFx0XHRcdCdwb3NpdGlvbjphYnNvbHV0ZTsnICtcclxuXHRcdFx0XHQnd2lkdGg6JyArIG1heFNpemUgKyAncHg7JyArXHJcblx0XHRcdFx0J2hlaWdodDonICsgbWF4U2l6ZSArICdweDsnICtcclxuXHRcdFx0XHQnbGVmdDowOycgK1xyXG5cdFx0XHRcdCd0b3A6MFwiPicgK1xyXG5cdFx0XHQnPC9kaXY+JyArXHJcblx0XHQnPC9kaXY+JyArXHJcblx0XHQnPGRpdiBjbGFzcz1cIicgKyBjbHMgKyAnLXNocmlua1wiIHN0eWxlPVwiJyArIHN0eWxlICsgJ1wiPicgK1xyXG5cdFx0XHQnPGRpdiBzdHlsZT1cIicgK1xyXG5cdFx0XHRcdCdwb3NpdGlvbjphYnNvbHV0ZTsnICtcclxuXHRcdFx0XHQnd2lkdGg6MjAwJTsnICtcclxuXHRcdFx0XHQnaGVpZ2h0OjIwMCU7JyArXHJcblx0XHRcdFx0J2xlZnQ6MDsgJyArXHJcblx0XHRcdFx0J3RvcDowXCI+JyArXHJcblx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdCc8L2Rpdj4nO1xyXG5cclxuXHR2YXIgZXhwYW5kID0gcmVzaXplci5jaGlsZE5vZGVzWzBdO1xyXG5cdHZhciBzaHJpbmsgPSByZXNpemVyLmNoaWxkTm9kZXNbMV07XHJcblxyXG5cdHJlc2l6ZXIuX3Jlc2V0ID0gZnVuY3Rpb24oKSB7XHJcblx0XHRleHBhbmQuc2Nyb2xsTGVmdCA9IG1heFNpemU7XHJcblx0XHRleHBhbmQuc2Nyb2xsVG9wID0gbWF4U2l6ZTtcclxuXHRcdHNocmluay5zY3JvbGxMZWZ0ID0gbWF4U2l6ZTtcclxuXHRcdHNocmluay5zY3JvbGxUb3AgPSBtYXhTaXplO1xyXG5cdH07XHJcblx0dmFyIG9uU2Nyb2xsID0gZnVuY3Rpb24oKSB7XHJcblx0XHRyZXNpemVyLl9yZXNldCgpO1xyXG5cdFx0aGFuZGxlcigpO1xyXG5cdH07XHJcblxyXG5cdGFkZEV2ZW50TGlzdGVuZXIoZXhwYW5kLCAnc2Nyb2xsJywgb25TY3JvbGwuYmluZChleHBhbmQsICdleHBhbmQnKSk7XHJcblx0YWRkRXZlbnRMaXN0ZW5lcihzaHJpbmssICdzY3JvbGwnLCBvblNjcm9sbC5iaW5kKHNocmluaywgJ3NocmluaycpKTtcclxuXHJcblx0cmV0dXJuIHJlc2l6ZXI7XHJcbn1cclxuXHJcbi8vIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2RldGVjdC1ub2RlLWluc2VydGlvblxyXG5mdW5jdGlvbiB3YXRjaEZvclJlbmRlcihub2RlLCBoYW5kbGVyKSB7XHJcblx0dmFyIGV4cGFuZG8gPSBub2RlW0VYUEFORE9fS0VZXSB8fCAobm9kZVtFWFBBTkRPX0tFWV0gPSB7fSk7XHJcblx0dmFyIHByb3h5ID0gZXhwYW5kby5yZW5kZXJQcm94eSA9IGZ1bmN0aW9uKGUpIHtcclxuXHRcdGlmIChlLmFuaW1hdGlvbk5hbWUgPT09IENTU19SRU5ERVJfQU5JTUFUSU9OKSB7XHJcblx0XHRcdGhhbmRsZXIoKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRoZWxwZXJzLmVhY2goQU5JTUFUSU9OX1NUQVJUX0VWRU5UUywgZnVuY3Rpb24odHlwZSkge1xyXG5cdFx0YWRkRXZlbnRMaXN0ZW5lcihub2RlLCB0eXBlLCBwcm94eSk7XHJcblx0fSk7XHJcblxyXG5cdC8vICM0NzM3OiBDaHJvbWUgbWlnaHQgc2tpcCB0aGUgQ1NTIGFuaW1hdGlvbiB3aGVuIHRoZSBDU1NfUkVOREVSX01PTklUT1IgY2xhc3NcclxuXHQvLyBpcyByZW1vdmVkIHRoZW4gYWRkZWQgYmFjayBpbW1lZGlhdGVseSAoc2FtZSBhbmltYXRpb24gZnJhbWU/KS4gQWNjZXNzaW5nIHRoZVxyXG5cdC8vIGBvZmZzZXRQYXJlbnRgIHByb3BlcnR5IHdpbGwgZm9yY2UgYSByZWZsb3cgYW5kIHJlLWV2YWx1YXRlIHRoZSBDU1MgYW5pbWF0aW9uLlxyXG5cdC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BhdWxpcmlzaC81ZDUyZmIwODFiMzU3MGM4MWUzYSNib3gtbWV0cmljc1xyXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy80NzM3XHJcblx0ZXhwYW5kby5yZWZsb3cgPSAhIW5vZGUub2Zmc2V0UGFyZW50O1xyXG5cclxuXHRub2RlLmNsYXNzTGlzdC5hZGQoQ1NTX1JFTkRFUl9NT05JVE9SKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdW53YXRjaEZvclJlbmRlcihub2RlKSB7XHJcblx0dmFyIGV4cGFuZG8gPSBub2RlW0VYUEFORE9fS0VZXSB8fCB7fTtcclxuXHR2YXIgcHJveHkgPSBleHBhbmRvLnJlbmRlclByb3h5O1xyXG5cclxuXHRpZiAocHJveHkpIHtcclxuXHRcdGhlbHBlcnMuZWFjaChBTklNQVRJT05fU1RBUlRfRVZFTlRTLCBmdW5jdGlvbih0eXBlKSB7XHJcblx0XHRcdHJlbW92ZUV2ZW50TGlzdGVuZXIobm9kZSwgdHlwZSwgcHJveHkpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZGVsZXRlIGV4cGFuZG8ucmVuZGVyUHJveHk7XHJcblx0fVxyXG5cclxuXHRub2RlLmNsYXNzTGlzdC5yZW1vdmUoQ1NTX1JFTkRFUl9NT05JVE9SKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkUmVzaXplTGlzdGVuZXIobm9kZSwgbGlzdGVuZXIsIGNoYXJ0KSB7XHJcblx0dmFyIGV4cGFuZG8gPSBub2RlW0VYUEFORE9fS0VZXSB8fCAobm9kZVtFWFBBTkRPX0tFWV0gPSB7fSk7XHJcblxyXG5cdC8vIExldCdzIGtlZXAgdHJhY2sgb2YgdGhpcyBhZGRlZCByZXNpemVyIGFuZCB0aHVzIGF2b2lkIERPTSBxdWVyeSB3aGVuIHJlbW92aW5nIGl0LlxyXG5cdHZhciByZXNpemVyID0gZXhwYW5kby5yZXNpemVyID0gY3JlYXRlUmVzaXplcih0aHJvdHRsZWQoZnVuY3Rpb24oKSB7XHJcblx0XHRpZiAoZXhwYW5kby5yZXNpemVyKSB7XHJcblx0XHRcdHJldHVybiBsaXN0ZW5lcihjcmVhdGVFdmVudCgncmVzaXplJywgY2hhcnQpKTtcclxuXHRcdH1cclxuXHR9KSk7XHJcblxyXG5cdC8vIFRoZSByZXNpemVyIG5lZWRzIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBub2RlIHBhcmVudCwgc28gd2UgZmlyc3QgbmVlZCB0byBiZVxyXG5cdC8vIHN1cmUgdGhhdCBgbm9kZWAgaXMgYXR0YWNoZWQgdG8gdGhlIERPTSBiZWZvcmUgaW5qZWN0aW5nIHRoZSByZXNpemVyIGVsZW1lbnQuXHJcblx0d2F0Y2hGb3JSZW5kZXIobm9kZSwgZnVuY3Rpb24oKSB7XHJcblx0XHRpZiAoZXhwYW5kby5yZXNpemVyKSB7XHJcblx0XHRcdHZhciBjb250YWluZXIgPSBub2RlLnBhcmVudE5vZGU7XHJcblx0XHRcdGlmIChjb250YWluZXIgJiYgY29udGFpbmVyICE9PSByZXNpemVyLnBhcmVudE5vZGUpIHtcclxuXHRcdFx0XHRjb250YWluZXIuaW5zZXJ0QmVmb3JlKHJlc2l6ZXIsIGNvbnRhaW5lci5maXJzdENoaWxkKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVGhlIGNvbnRhaW5lciBzaXplIG1pZ2h0IGhhdmUgY2hhbmdlZCwgbGV0J3MgcmVzZXQgdGhlIHJlc2l6ZXIgc3RhdGUuXHJcblx0XHRcdHJlc2l6ZXIuX3Jlc2V0KCk7XHJcblx0XHR9XHJcblx0fSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZVJlc2l6ZUxpc3RlbmVyKG5vZGUpIHtcclxuXHR2YXIgZXhwYW5kbyA9IG5vZGVbRVhQQU5ET19LRVldIHx8IHt9O1xyXG5cdHZhciByZXNpemVyID0gZXhwYW5kby5yZXNpemVyO1xyXG5cclxuXHRkZWxldGUgZXhwYW5kby5yZXNpemVyO1xyXG5cdHVud2F0Y2hGb3JSZW5kZXIobm9kZSk7XHJcblxyXG5cdGlmIChyZXNpemVyICYmIHJlc2l6ZXIucGFyZW50Tm9kZSkge1xyXG5cdFx0cmVzaXplci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlc2l6ZXIpO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gaW5qZWN0Q1NTKHBsYXRmb3JtLCBjc3MpIHtcclxuXHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8zOTIyMTM5XHJcblx0dmFyIHN0eWxlID0gcGxhdGZvcm0uX3N0eWxlIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XHJcblx0aWYgKCFwbGF0Zm9ybS5fc3R5bGUpIHtcclxuXHRcdHBsYXRmb3JtLl9zdHlsZSA9IHN0eWxlO1xyXG5cdFx0Y3NzID0gJy8qIENoYXJ0LmpzICovXFxuJyArIGNzcztcclxuXHRcdHN0eWxlLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xyXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzdHlsZSk7XHJcblx0fVxyXG5cclxuXHRzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0LyoqXHJcblx0ICogVGhpcyBwcm9wZXJ0eSBob2xkcyB3aGV0aGVyIHRoaXMgcGxhdGZvcm0gaXMgZW5hYmxlZCBmb3IgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuXHJcblx0ICogQ3VycmVudGx5IHVzZWQgYnkgcGxhdGZvcm0uanMgdG8gc2VsZWN0IHRoZSBwcm9wZXIgaW1wbGVtZW50YXRpb24uXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRfZW5hYmxlZDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyxcclxuXHJcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIga2V5ZnJhbWVzID0gJ2Zyb217b3BhY2l0eTowLjk5fXRve29wYWNpdHk6MX0nO1xyXG5cclxuXHRcdGluamVjdENTUyh0aGlzLFxyXG5cdFx0XHQvLyBET00gcmVuZGVyaW5nIGRldGVjdGlvblxyXG5cdFx0XHQvLyBodHRwczovL2Rhdmlkd2Fsc2gubmFtZS9kZXRlY3Qtbm9kZS1pbnNlcnRpb25cclxuXHRcdFx0J0Atd2Via2l0LWtleWZyYW1lcyAnICsgQ1NTX1JFTkRFUl9BTklNQVRJT04gKyAneycgKyBrZXlmcmFtZXMgKyAnfScgK1xyXG5cdFx0XHQnQGtleWZyYW1lcyAnICsgQ1NTX1JFTkRFUl9BTklNQVRJT04gKyAneycgKyBrZXlmcmFtZXMgKyAnfScgK1xyXG5cdFx0XHQnLicgKyBDU1NfUkVOREVSX01PTklUT1IgKyAneycgK1xyXG5cdFx0XHRcdCctd2Via2l0LWFuaW1hdGlvbjonICsgQ1NTX1JFTkRFUl9BTklNQVRJT04gKyAnIDAuMDAxczsnICtcclxuXHRcdFx0XHQnYW5pbWF0aW9uOicgKyBDU1NfUkVOREVSX0FOSU1BVElPTiArICcgMC4wMDFzOycgK1xyXG5cdFx0XHQnfSdcclxuXHRcdCk7XHJcblx0fSxcclxuXHJcblx0YWNxdWlyZUNvbnRleHQ6IGZ1bmN0aW9uKGl0ZW0sIGNvbmZpZykge1xyXG5cdFx0aWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaXRlbSk7XHJcblx0XHR9IGVsc2UgaWYgKGl0ZW0ubGVuZ3RoKSB7XHJcblx0XHRcdC8vIFN1cHBvcnQgZm9yIGFycmF5IGJhc2VkIHF1ZXJpZXMgKHN1Y2ggYXMgalF1ZXJ5KVxyXG5cdFx0XHRpdGVtID0gaXRlbVswXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXRlbSAmJiBpdGVtLmNhbnZhcykge1xyXG5cdFx0XHQvLyBTdXBwb3J0IGZvciBhbnkgb2JqZWN0IGFzc29jaWF0ZWQgdG8gYSBjYW52YXMgKGluY2x1ZGluZyBhIGNvbnRleHQyZClcclxuXHRcdFx0aXRlbSA9IGl0ZW0uY2FudmFzO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFRvIHByZXZlbnQgY2FudmFzIGZpbmdlcnByaW50aW5nLCBzb21lIGFkZC1vbnMgdW5kZWZpbmUgdGhlIGdldENvbnRleHRcclxuXHRcdC8vIG1ldGhvZCwgZm9yIGV4YW1wbGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ra2Fwc25lci9DYW52YXNCbG9ja2VyXHJcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvMjgwN1xyXG5cdFx0dmFyIGNvbnRleHQgPSBpdGVtICYmIGl0ZW0uZ2V0Q29udGV4dCAmJiBpdGVtLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG5cdFx0Ly8gYGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEYCBmYWlscyB3aGVuIHRoZSBpdGVtIGlzXHJcblx0XHQvLyBpbnNpZGUgYW4gaWZyYW1lIG9yIHdoZW4gcnVubmluZyBpbiBhIHByb3RlY3RlZCBlbnZpcm9ubWVudC4gV2UgY291bGQgZ3Vlc3MgdGhlXHJcblx0XHQvLyB0eXBlcyBmcm9tIHRoZWlyIHRvU3RyaW5nKCkgdmFsdWUgYnV0IGxldCdzIGtlZXAgdGhpbmdzIGZsZXhpYmxlIGFuZCBhc3N1bWUgaXQnc1xyXG5cdFx0Ly8gYSBzdWZmaWNpZW50IGNvbmRpdGlvbiBpZiB0aGUgaXRlbSBoYXMgYSBjb250ZXh0MkQgd2hpY2ggaGFzIGl0ZW0gYXMgYGNhbnZhc2AuXHJcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvMzg4N1xyXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzQxMDJcclxuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy80MTUyXHJcblx0XHRpZiAoY29udGV4dCAmJiBjb250ZXh0LmNhbnZhcyA9PT0gaXRlbSkge1xyXG5cdFx0XHRpbml0Q2FudmFzKGl0ZW0sIGNvbmZpZyk7XHJcblx0XHRcdHJldHVybiBjb250ZXh0O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH0sXHJcblxyXG5cdHJlbGVhc2VDb250ZXh0OiBmdW5jdGlvbihjb250ZXh0KSB7XHJcblx0XHR2YXIgY2FudmFzID0gY29udGV4dC5jYW52YXM7XHJcblx0XHRpZiAoIWNhbnZhc1tFWFBBTkRPX0tFWV0pIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBpbml0aWFsID0gY2FudmFzW0VYUEFORE9fS0VZXS5pbml0aWFsO1xyXG5cdFx0WydoZWlnaHQnLCAnd2lkdGgnXS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcclxuXHRcdFx0dmFyIHZhbHVlID0gaW5pdGlhbFtwcm9wXTtcclxuXHRcdFx0aWYgKGhlbHBlcnMuaXNOdWxsT3JVbmRlZih2YWx1ZSkpIHtcclxuXHRcdFx0XHRjYW52YXMucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNhbnZhcy5zZXRBdHRyaWJ1dGUocHJvcCwgdmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRoZWxwZXJzLmVhY2goaW5pdGlhbC5zdHlsZSB8fCB7fSwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xyXG5cdFx0XHRjYW52YXMuc3R5bGVba2V5XSA9IHZhbHVlO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gVGhlIGNhbnZhcyByZW5kZXIgc2l6ZSBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCAoYW5kIHRodXMgdGhlIHN0YXRlIHN0YWNrIGRpc2NhcmRlZCksXHJcblx0XHQvLyB3ZSBjYW4ndCB1c2Ugc2F2ZSgpIGFuZCByZXN0b3JlKCkgdG8gcmVzdG9yZSB0aGUgaW5pdGlhbCBzdGF0ZS4gU28gbWFrZSBzdXJlIHRoYXQgYXRcclxuXHRcdC8vIGxlYXN0IHRoZSBjYW52YXMgY29udGV4dCBpcyByZXNldCB0byB0aGUgZGVmYXVsdCBzdGF0ZSBieSBzZXR0aW5nIHRoZSBjYW52YXMgd2lkdGguXHJcblx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1odG1sNS0yMDExMDUyNS90aGUtY2FudmFzLWVsZW1lbnQuaHRtbFxyXG5cdFx0Y2FudmFzLndpZHRoID0gY2FudmFzLndpZHRoO1xyXG5cclxuXHRcdGRlbGV0ZSBjYW52YXNbRVhQQU5ET19LRVldO1xyXG5cdH0sXHJcblxyXG5cdGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge1xyXG5cdFx0dmFyIGNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcclxuXHRcdGlmICh0eXBlID09PSAncmVzaXplJykge1xyXG5cdFx0XHQvLyBOb3RlOiB0aGUgcmVzaXplIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgb24gYWxsIGJyb3dzZXJzLlxyXG5cdFx0XHRhZGRSZXNpemVMaXN0ZW5lcihjYW52YXMsIGxpc3RlbmVyLCBjaGFydCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgZXhwYW5kbyA9IGxpc3RlbmVyW0VYUEFORE9fS0VZXSB8fCAobGlzdGVuZXJbRVhQQU5ET19LRVldID0ge30pO1xyXG5cdFx0dmFyIHByb3hpZXMgPSBleHBhbmRvLnByb3hpZXMgfHwgKGV4cGFuZG8ucHJveGllcyA9IHt9KTtcclxuXHRcdHZhciBwcm94eSA9IHByb3hpZXNbY2hhcnQuaWQgKyAnXycgKyB0eXBlXSA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdGxpc3RlbmVyKGZyb21OYXRpdmVFdmVudChldmVudCwgY2hhcnQpKTtcclxuXHRcdH07XHJcblxyXG5cdFx0YWRkRXZlbnRMaXN0ZW5lcihjYW52YXMsIHR5cGUsIHByb3h5KTtcclxuXHR9LFxyXG5cclxuXHRyZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbihjaGFydCwgdHlwZSwgbGlzdGVuZXIpIHtcclxuXHRcdHZhciBjYW52YXMgPSBjaGFydC5jYW52YXM7XHJcblx0XHRpZiAodHlwZSA9PT0gJ3Jlc2l6ZScpIHtcclxuXHRcdFx0Ly8gTm90ZTogdGhlIHJlc2l6ZSBldmVudCBpcyBub3Qgc3VwcG9ydGVkIG9uIGFsbCBicm93c2Vycy5cclxuXHRcdFx0cmVtb3ZlUmVzaXplTGlzdGVuZXIoY2FudmFzLCBsaXN0ZW5lcik7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgZXhwYW5kbyA9IGxpc3RlbmVyW0VYUEFORE9fS0VZXSB8fCB7fTtcclxuXHRcdHZhciBwcm94aWVzID0gZXhwYW5kby5wcm94aWVzIHx8IHt9O1xyXG5cdFx0dmFyIHByb3h5ID0gcHJveGllc1tjaGFydC5pZCArICdfJyArIHR5cGVdO1xyXG5cdFx0aWYgKCFwcm94eSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0cmVtb3ZlRXZlbnRMaXN0ZW5lcihjYW52YXMsIHR5cGUsIHByb3h5KTtcclxuXHR9XHJcbn07XHJcblxyXG4vLyBERVBSRUNBVElPTlNcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIEV2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIgaW5zdGVhZC5cclxuICogRXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lciBjb21wYXRpYmlsaXR5OiBDaHJvbWUsIE9wZXJhIDcsIFNhZmFyaSwgRkYxLjUrLCBJRTkrXHJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXJcclxuICogQGZ1bmN0aW9uIENoYXJ0LmhlbHBlcnMuYWRkRXZlbnRcclxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjcuMFxyXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5oZWxwZXJzLmFkZEV2ZW50ID0gYWRkRXZlbnRMaXN0ZW5lcjtcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIEV2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIgaW5zdGVhZC5cclxuICogRXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lciBjb21wYXRpYmlsaXR5OiBDaHJvbWUsIE9wZXJhIDcsIFNhZmFyaSwgRkYxLjUrLCBJRTkrXHJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L3JlbW92ZUV2ZW50TGlzdGVuZXJcclxuICogQGZ1bmN0aW9uIENoYXJ0LmhlbHBlcnMucmVtb3ZlRXZlbnRcclxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjcuMFxyXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5oZWxwZXJzLnJlbW92ZUV2ZW50ID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcjtcclxuXHJcbn0se1wiNDZcIjo0Nn1dLDQ5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxudmFyIGJhc2ljID0gcmVxdWlyZSg0Nyk7XHJcbnZhciBkb20gPSByZXF1aXJlKDQ4KTtcclxuXHJcbi8vIEBUT0RPIE1ha2UgcG9zc2libGUgdG8gc2VsZWN0IGFub3RoZXIgcGxhdGZvcm0gYXQgYnVpbGQgdGltZS5cclxudmFyIGltcGxlbWVudGF0aW9uID0gZG9tLl9lbmFibGVkID8gZG9tIDogYmFzaWM7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZSBDaGFydC5wbGF0Zm9ybVxyXG4gKiBAc2VlIGh0dHBzOi8vY2hhcnRqcy5naXRib29rcy5pby9wcm9wb3NhbHMvY29udGVudC9QbGF0Zm9ybS5odG1sXHJcbiAqIEBzaW5jZSAyLjQuMFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBoZWxwZXJzLmV4dGVuZCh7XHJcblx0LyoqXHJcblx0ICogQHNpbmNlIDIuNy4wXHJcblx0ICovXHJcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7fSxcclxuXHJcblx0LyoqXHJcblx0ICogQ2FsbGVkIGF0IGNoYXJ0IGNvbnN0cnVjdGlvbiB0aW1lLCByZXR1cm5zIGEgY29udGV4dDJkIGluc3RhbmNlIGltcGxlbWVudGluZ1xyXG5cdCAqIHRoZSBbVzNDIENhbnZhcyAyRCBDb250ZXh0IEFQSSBzdGFuZGFyZF17QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSLzJkY29udGV4dC99LlxyXG5cdCAqIEBwYXJhbSB7Kn0gaXRlbSAtIFRoZSBuYXRpdmUgaXRlbSBmcm9tIHdoaWNoIHRvIGFjcXVpcmUgY29udGV4dCAocGxhdGZvcm0gc3BlY2lmaWMpXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgY2hhcnQgb3B0aW9uc1xyXG5cdCAqIEByZXR1cm5zIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGNvbnRleHQyZCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGFjcXVpcmVDb250ZXh0OiBmdW5jdGlvbigpIHt9LFxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYXQgY2hhcnQgZGVzdHJ1Y3Rpb24gdGltZSwgcmVsZWFzZXMgYW55IHJlc291cmNlcyBhc3NvY2lhdGVkIHRvIHRoZSBjb250ZXh0XHJcblx0ICogcHJldmlvdXNseSByZXR1cm5lZCBieSB0aGUgYWNxdWlyZUNvbnRleHQoKSBtZXRob2QuXHJcblx0ICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGNvbnRleHQgLSBUaGUgY29udGV4dDJkIGluc3RhbmNlXHJcblx0ICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIG1ldGhvZCBzdWNjZWVkZWQsIGVsc2UgZmFsc2VcclxuXHQgKi9cclxuXHRyZWxlYXNlQ29udGV4dDogZnVuY3Rpb24oKSB7fSxcclxuXHJcblx0LyoqXHJcblx0ICogUmVnaXN0ZXJzIHRoZSBzcGVjaWZpZWQgbGlzdGVuZXIgb24gdGhlIGdpdmVuIGNoYXJ0LlxyXG5cdCAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gQ2hhcnQgZnJvbSB3aGljaCB0byBsaXN0ZW4gZm9yIGV2ZW50XHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgLSBUaGUgKHtAbGluayBJRXZlbnR9KSB0eXBlIHRvIGxpc3RlbiBmb3JcclxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIFJlY2VpdmVzIGEgbm90aWZpY2F0aW9uIChhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzXHJcblx0ICogdGhlIHtAbGluayBJRXZlbnR9IGludGVyZmFjZSkgd2hlbiBhbiBldmVudCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgb2NjdXJzLlxyXG5cdCAqL1xyXG5cdGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKCkge30sXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBsaXN0ZW5lciBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgd2l0aCBhZGRFdmVudExpc3RlbmVyLlxyXG5cdCAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC1DaGFydCBmcm9tIHdoaWNoIHRvIHJlbW92ZSB0aGUgbGlzdGVuZXJcclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIFRoZSAoe0BsaW5rIElFdmVudH0pIHR5cGUgdG8gcmVtb3ZlXHJcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gcmVtb3ZlIGZyb20gdGhlIGV2ZW50IHRhcmdldC5cclxuXHQgKi9cclxuXHRyZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbigpIHt9XHJcblxyXG59LCBpbXBsZW1lbnRhdGlvbik7XHJcblxyXG4vKipcclxuICogQGludGVyZmFjZSBJUGxhdGZvcm1cclxuICogQWxsb3dzIGFic3RyYWN0aW5nIHBsYXRmb3JtIGRlcGVuZGVuY2llcyBhd2F5IGZyb20gdGhlIGNoYXJ0XHJcbiAqIEBib3Jyb3dzIENoYXJ0LnBsYXRmb3JtLmFjcXVpcmVDb250ZXh0IGFzIGFjcXVpcmVDb250ZXh0XHJcbiAqIEBib3Jyb3dzIENoYXJ0LnBsYXRmb3JtLnJlbGVhc2VDb250ZXh0IGFzIHJlbGVhc2VDb250ZXh0XHJcbiAqIEBib3Jyb3dzIENoYXJ0LnBsYXRmb3JtLmFkZEV2ZW50TGlzdGVuZXIgYXMgYWRkRXZlbnRMaXN0ZW5lclxyXG4gKiBAYm9ycm93cyBDaGFydC5wbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyIGFzIHJlbW92ZUV2ZW50TGlzdGVuZXJcclxuICovXHJcblxyXG4vKipcclxuICogQGludGVyZmFjZSBJRXZlbnRcclxuICogQHByb3Age1N0cmluZ30gdHlwZSAtIFRoZSBldmVudCB0eXBlIG5hbWUsIHBvc3NpYmxlIHZhbHVlcyBhcmU6XHJcbiAqICdjb250ZXh0bWVudScsICdtb3VzZWVudGVyJywgJ21vdXNlZG93bicsICdtb3VzZW1vdmUnLCAnbW91c2V1cCcsICdtb3VzZW91dCcsXHJcbiAqICdjbGljaycsICdkYmxjbGljaycsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJyBhbmQgJ3Jlc2l6ZSdcclxuICogQHByb3Ageyp9IG5hdGl2ZSAtIFRoZSBvcmlnaW5hbCBuYXRpdmUgZXZlbnQgKG51bGwgZm9yIGVtdWxhdGVkIGV2ZW50cywgZS5nLiAncmVzaXplJylcclxuICogQHByb3Age051bWJlcn0geCAtIFRoZSBtb3VzZSB4IHBvc2l0aW9uLCByZWxhdGl2ZSB0byB0aGUgY2FudmFzIChudWxsIGZvciBpbmNvbXBhdGlibGUgZXZlbnRzKVxyXG4gKiBAcHJvcCB7TnVtYmVyfSB5IC0gVGhlIG1vdXNlIHkgcG9zaXRpb24sIHJlbGF0aXZlIHRvIHRoZSBjYW52YXMgKG51bGwgZm9yIGluY29tcGF0aWJsZSBldmVudHMpXHJcbiAqL1xyXG5cclxufSx7XCI0NlwiOjQ2LFwiNDdcIjo0NyxcIjQ4XCI6NDh9XSw1MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge307XHJcbm1vZHVsZS5leHBvcnRzLmZpbGxlciA9IHJlcXVpcmUoNTEpO1xyXG5tb2R1bGUuZXhwb3J0cy5sZWdlbmQgPSByZXF1aXJlKDUyKTtcclxubW9kdWxlLmV4cG9ydHMudGl0bGUgPSByZXF1aXJlKDUzKTtcclxuXHJcbn0se1wiNTFcIjo1MSxcIjUyXCI6NTIsXCI1M1wiOjUzfV0sNTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4vKipcclxuICogUGx1Z2luIGJhc2VkIG9uIGRpc2N1c3Npb24gZnJvbSB0aGUgZm9sbG93aW5nIENoYXJ0LmpzIGlzc3VlczpcclxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvMjM4MCNpc3N1ZWNvbW1lbnQtMjc5OTYxNTY5XHJcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzI0NDAjaXNzdWVjb21tZW50LTI1NjQ2MTg5N1xyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG52YXIgZWxlbWVudHMgPSByZXF1aXJlKDQxKTtcclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxuXHJcbmRlZmF1bHRzLl9zZXQoJ2dsb2JhbCcsIHtcclxuXHRwbHVnaW5zOiB7XHJcblx0XHRmaWxsZXI6IHtcclxuXHRcdFx0cHJvcGFnYXRlOiB0cnVlXHJcblx0XHR9XHJcblx0fVxyXG59KTtcclxuXHJcbnZhciBtYXBwZXJzID0ge1xyXG5cdGRhdGFzZXQ6IGZ1bmN0aW9uKHNvdXJjZSkge1xyXG5cdFx0dmFyIGluZGV4ID0gc291cmNlLmZpbGw7XHJcblx0XHR2YXIgY2hhcnQgPSBzb3VyY2UuY2hhcnQ7XHJcblx0XHR2YXIgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGluZGV4KTtcclxuXHRcdHZhciB2aXNpYmxlID0gbWV0YSAmJiBjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGluZGV4KTtcclxuXHRcdHZhciBwb2ludHMgPSAodmlzaWJsZSAmJiBtZXRhLmRhdGFzZXQuX2NoaWxkcmVuKSB8fCBbXTtcclxuXHRcdHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIHx8IDA7XHJcblxyXG5cdFx0cmV0dXJuICFsZW5ndGggPyBudWxsIDogZnVuY3Rpb24ocG9pbnQsIGkpIHtcclxuXHRcdFx0cmV0dXJuIChpIDwgbGVuZ3RoICYmIHBvaW50c1tpXS5fdmlldykgfHwgbnVsbDtcclxuXHRcdH07XHJcblx0fSxcclxuXHJcblx0Ym91bmRhcnk6IGZ1bmN0aW9uKHNvdXJjZSkge1xyXG5cdFx0dmFyIGJvdW5kYXJ5ID0gc291cmNlLmJvdW5kYXJ5O1xyXG5cdFx0dmFyIHggPSBib3VuZGFyeSA/IGJvdW5kYXJ5LnggOiBudWxsO1xyXG5cdFx0dmFyIHkgPSBib3VuZGFyeSA/IGJvdW5kYXJ5LnkgOiBudWxsO1xyXG5cclxuXHRcdHJldHVybiBmdW5jdGlvbihwb2ludCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHg6IHggPT09IG51bGwgPyBwb2ludC54IDogeCxcclxuXHRcdFx0XHR5OiB5ID09PSBudWxsID8gcG9pbnQueSA6IHksXHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cdH1cclxufTtcclxuXHJcbi8vIEB0b2RvIGlmIChmaWxsWzBdID09PSAnIycpXHJcbmZ1bmN0aW9uIGRlY29kZUZpbGwoZWwsIGluZGV4LCBjb3VudCkge1xyXG5cdHZhciBtb2RlbCA9IGVsLl9tb2RlbCB8fCB7fTtcclxuXHR2YXIgZmlsbCA9IG1vZGVsLmZpbGw7XHJcblx0dmFyIHRhcmdldDtcclxuXHJcblx0aWYgKGZpbGwgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZmlsbCA9ICEhbW9kZWwuYmFja2dyb3VuZENvbG9yO1xyXG5cdH1cclxuXHJcblx0aWYgKGZpbGwgPT09IGZhbHNlIHx8IGZpbGwgPT09IG51bGwpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGlmIChmaWxsID09PSB0cnVlKSB7XHJcblx0XHRyZXR1cm4gJ29yaWdpbic7XHJcblx0fVxyXG5cclxuXHR0YXJnZXQgPSBwYXJzZUZsb2F0KGZpbGwsIDEwKTtcclxuXHRpZiAoaXNGaW5pdGUodGFyZ2V0KSAmJiBNYXRoLmZsb29yKHRhcmdldCkgPT09IHRhcmdldCkge1xyXG5cdFx0aWYgKGZpbGxbMF0gPT09ICctJyB8fCBmaWxsWzBdID09PSAnKycpIHtcclxuXHRcdFx0dGFyZ2V0ID0gaW5kZXggKyB0YXJnZXQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRhcmdldCA9PT0gaW5kZXggfHwgdGFyZ2V0IDwgMCB8fCB0YXJnZXQgPj0gY291bnQpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0YXJnZXQ7XHJcblx0fVxyXG5cclxuXHRzd2l0Y2ggKGZpbGwpIHtcclxuXHQvLyBjb21wYXRpYmlsaXR5XHJcblx0Y2FzZSAnYm90dG9tJzpcclxuXHRcdHJldHVybiAnc3RhcnQnO1xyXG5cdGNhc2UgJ3RvcCc6XHJcblx0XHRyZXR1cm4gJ2VuZCc7XHJcblx0Y2FzZSAnemVybyc6XHJcblx0XHRyZXR1cm4gJ29yaWdpbic7XHJcblx0Ly8gc3VwcG9ydGVkIGJvdW5kYXJpZXNcclxuXHRjYXNlICdvcmlnaW4nOlxyXG5cdGNhc2UgJ3N0YXJ0JzpcclxuXHRjYXNlICdlbmQnOlxyXG5cdFx0cmV0dXJuIGZpbGw7XHJcblx0Ly8gaW52YWxpZCBmaWxsIHZhbHVlc1xyXG5cdGRlZmF1bHQ6XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBjb21wdXRlQm91bmRhcnkoc291cmNlKSB7XHJcblx0dmFyIG1vZGVsID0gc291cmNlLmVsLl9tb2RlbCB8fCB7fTtcclxuXHR2YXIgc2NhbGUgPSBzb3VyY2UuZWwuX3NjYWxlIHx8IHt9O1xyXG5cdHZhciBmaWxsID0gc291cmNlLmZpbGw7XHJcblx0dmFyIHRhcmdldCA9IG51bGw7XHJcblx0dmFyIGhvcml6b250YWw7XHJcblxyXG5cdGlmIChpc0Zpbml0ZShmaWxsKSkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHQvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5OiB1bnRpbCB2Mywgd2Ugc3RpbGwgbmVlZCB0byBzdXBwb3J0IGJvdW5kYXJ5IHZhbHVlcyBzZXQgb25cclxuXHQvLyB0aGUgbW9kZWwgKHNjYWxlVG9wLCBzY2FsZUJvdHRvbSBhbmQgc2NhbGVaZXJvKSBiZWNhdXNlIHNvbWUgZXh0ZXJuYWwgcGx1Z2lucyBhbmRcclxuXHQvLyBjb250cm9sbGVycyBtaWdodCBzdGlsbCB1c2UgaXQgKGUuZy4gdGhlIFNtaXRoIGNoYXJ0KS5cclxuXHJcblx0aWYgKGZpbGwgPT09ICdzdGFydCcpIHtcclxuXHRcdHRhcmdldCA9IG1vZGVsLnNjYWxlQm90dG9tID09PSB1bmRlZmluZWQgPyBzY2FsZS5ib3R0b20gOiBtb2RlbC5zY2FsZUJvdHRvbTtcclxuXHR9IGVsc2UgaWYgKGZpbGwgPT09ICdlbmQnKSB7XHJcblx0XHR0YXJnZXQgPSBtb2RlbC5zY2FsZVRvcCA9PT0gdW5kZWZpbmVkID8gc2NhbGUudG9wIDogbW9kZWwuc2NhbGVUb3A7XHJcblx0fSBlbHNlIGlmIChtb2RlbC5zY2FsZVplcm8gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0dGFyZ2V0ID0gbW9kZWwuc2NhbGVaZXJvO1xyXG5cdH0gZWxzZSBpZiAoc2NhbGUuZ2V0QmFzZVBvc2l0aW9uKSB7XHJcblx0XHR0YXJnZXQgPSBzY2FsZS5nZXRCYXNlUG9zaXRpb24oKTtcclxuXHR9IGVsc2UgaWYgKHNjYWxlLmdldEJhc2VQaXhlbCkge1xyXG5cdFx0dGFyZ2V0ID0gc2NhbGUuZ2V0QmFzZVBpeGVsKCk7XHJcblx0fVxyXG5cclxuXHRpZiAodGFyZ2V0ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0ICE9PSBudWxsKSB7XHJcblx0XHRpZiAodGFyZ2V0LnggIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQueSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiB0YXJnZXQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiB0YXJnZXQgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHRhcmdldCkpIHtcclxuXHRcdFx0aG9yaXpvbnRhbCA9IHNjYWxlLmlzSG9yaXpvbnRhbCgpO1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHg6IGhvcml6b250YWwgPyB0YXJnZXQgOiBudWxsLFxyXG5cdFx0XHRcdHk6IGhvcml6b250YWwgPyBudWxsIDogdGFyZ2V0XHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZVRhcmdldChzb3VyY2VzLCBpbmRleCwgcHJvcGFnYXRlKSB7XHJcblx0dmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xyXG5cdHZhciBmaWxsID0gc291cmNlLmZpbGw7XHJcblx0dmFyIHZpc2l0ZWQgPSBbaW5kZXhdO1xyXG5cdHZhciB0YXJnZXQ7XHJcblxyXG5cdGlmICghcHJvcGFnYXRlKSB7XHJcblx0XHRyZXR1cm4gZmlsbDtcclxuXHR9XHJcblxyXG5cdHdoaWxlIChmaWxsICE9PSBmYWxzZSAmJiB2aXNpdGVkLmluZGV4T2YoZmlsbCkgPT09IC0xKSB7XHJcblx0XHRpZiAoIWlzRmluaXRlKGZpbGwpKSB7XHJcblx0XHRcdHJldHVybiBmaWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRhcmdldCA9IHNvdXJjZXNbZmlsbF07XHJcblx0XHRpZiAoIXRhcmdldCkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRhcmdldC52aXNpYmxlKSB7XHJcblx0XHRcdHJldHVybiBmaWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZpc2l0ZWQucHVzaChmaWxsKTtcclxuXHRcdGZpbGwgPSB0YXJnZXQuZmlsbDtcclxuXHR9XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTWFwcGVyKHNvdXJjZSkge1xyXG5cdHZhciBmaWxsID0gc291cmNlLmZpbGw7XHJcblx0dmFyIHR5cGUgPSAnZGF0YXNldCc7XHJcblxyXG5cdGlmIChmaWxsID09PSBmYWxzZSkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRpZiAoIWlzRmluaXRlKGZpbGwpKSB7XHJcblx0XHR0eXBlID0gJ2JvdW5kYXJ5JztcclxuXHR9XHJcblxyXG5cdHJldHVybiBtYXBwZXJzW3R5cGVdKHNvdXJjZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRHJhd2FibGUocG9pbnQpIHtcclxuXHRyZXR1cm4gcG9pbnQgJiYgIXBvaW50LnNraXA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRyYXdBcmVhKGN0eCwgY3VydmUwLCBjdXJ2ZTEsIGxlbjAsIGxlbjEpIHtcclxuXHR2YXIgaTtcclxuXHJcblx0aWYgKCFsZW4wIHx8ICFsZW4xKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHQvLyBidWlsZGluZyBmaXJzdCBhcmVhIGN1cnZlIChub3JtYWwpXHJcblx0Y3R4Lm1vdmVUbyhjdXJ2ZTBbMF0ueCwgY3VydmUwWzBdLnkpO1xyXG5cdGZvciAoaSA9IDE7IGkgPCBsZW4wOyArK2kpIHtcclxuXHRcdGhlbHBlcnMuY2FudmFzLmxpbmVUbyhjdHgsIGN1cnZlMFtpIC0gMV0sIGN1cnZlMFtpXSk7XHJcblx0fVxyXG5cclxuXHQvLyBqb2luaW5nIHRoZSB0d28gYXJlYSBjdXJ2ZXNcclxuXHRjdHgubGluZVRvKGN1cnZlMVtsZW4xIC0gMV0ueCwgY3VydmUxW2xlbjEgLSAxXS55KTtcclxuXHJcblx0Ly8gYnVpbGRpbmcgb3Bwb3NpdGUgYXJlYSBjdXJ2ZSAocmV2ZXJzZSlcclxuXHRmb3IgKGkgPSBsZW4xIC0gMTsgaSA+IDA7IC0taSkge1xyXG5cdFx0aGVscGVycy5jYW52YXMubGluZVRvKGN0eCwgY3VydmUxW2ldLCBjdXJ2ZTFbaSAtIDFdLCB0cnVlKTtcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRvRmlsbChjdHgsIHBvaW50cywgbWFwcGVyLCB2aWV3LCBjb2xvciwgbG9vcCkge1xyXG5cdHZhciBjb3VudCA9IHBvaW50cy5sZW5ndGg7XHJcblx0dmFyIHNwYW4gPSB2aWV3LnNwYW5HYXBzO1xyXG5cdHZhciBjdXJ2ZTAgPSBbXTtcclxuXHR2YXIgY3VydmUxID0gW107XHJcblx0dmFyIGxlbjAgPSAwO1xyXG5cdHZhciBsZW4xID0gMDtcclxuXHR2YXIgaSwgaWxlbiwgaW5kZXgsIHAwLCBwMSwgZDAsIGQxO1xyXG5cclxuXHRjdHguYmVnaW5QYXRoKCk7XHJcblxyXG5cdGZvciAoaSA9IDAsIGlsZW4gPSAoY291bnQgKyAhIWxvb3ApOyBpIDwgaWxlbjsgKytpKSB7XHJcblx0XHRpbmRleCA9IGkgJSBjb3VudDtcclxuXHRcdHAwID0gcG9pbnRzW2luZGV4XS5fdmlldztcclxuXHRcdHAxID0gbWFwcGVyKHAwLCBpbmRleCwgdmlldyk7XHJcblx0XHRkMCA9IGlzRHJhd2FibGUocDApO1xyXG5cdFx0ZDEgPSBpc0RyYXdhYmxlKHAxKTtcclxuXHJcblx0XHRpZiAoZDAgJiYgZDEpIHtcclxuXHRcdFx0bGVuMCA9IGN1cnZlMC5wdXNoKHAwKTtcclxuXHRcdFx0bGVuMSA9IGN1cnZlMS5wdXNoKHAxKTtcclxuXHRcdH0gZWxzZSBpZiAobGVuMCAmJiBsZW4xKSB7XHJcblx0XHRcdGlmICghc3Bhbikge1xyXG5cdFx0XHRcdGRyYXdBcmVhKGN0eCwgY3VydmUwLCBjdXJ2ZTEsIGxlbjAsIGxlbjEpO1xyXG5cdFx0XHRcdGxlbjAgPSBsZW4xID0gMDtcclxuXHRcdFx0XHRjdXJ2ZTAgPSBbXTtcclxuXHRcdFx0XHRjdXJ2ZTEgPSBbXTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoZDApIHtcclxuXHRcdFx0XHRcdGN1cnZlMC5wdXNoKHAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGQxKSB7XHJcblx0XHRcdFx0XHRjdXJ2ZTEucHVzaChwMSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRkcmF3QXJlYShjdHgsIGN1cnZlMCwgY3VydmUxLCBsZW4wLCBsZW4xKTtcclxuXHJcblx0Y3R4LmNsb3NlUGF0aCgpO1xyXG5cdGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcclxuXHRjdHguZmlsbCgpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHRpZDogJ2ZpbGxlcicsXHJcblxyXG5cdGFmdGVyRGF0YXNldHNVcGRhdGU6IGZ1bmN0aW9uKGNoYXJ0LCBvcHRpb25zKSB7XHJcblx0XHR2YXIgY291bnQgPSAoY2hhcnQuZGF0YS5kYXRhc2V0cyB8fCBbXSkubGVuZ3RoO1xyXG5cdFx0dmFyIHByb3BhZ2F0ZSA9IG9wdGlvbnMucHJvcGFnYXRlO1xyXG5cdFx0dmFyIHNvdXJjZXMgPSBbXTtcclxuXHRcdHZhciBtZXRhLCBpLCBlbCwgc291cmNlO1xyXG5cclxuXHRcdGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XHJcblx0XHRcdG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcclxuXHRcdFx0ZWwgPSBtZXRhLmRhdGFzZXQ7XHJcblx0XHRcdHNvdXJjZSA9IG51bGw7XHJcblxyXG5cdFx0XHRpZiAoZWwgJiYgZWwuX21vZGVsICYmIGVsIGluc3RhbmNlb2YgZWxlbWVudHMuTGluZSkge1xyXG5cdFx0XHRcdHNvdXJjZSA9IHtcclxuXHRcdFx0XHRcdHZpc2libGU6IGNoYXJ0LmlzRGF0YXNldFZpc2libGUoaSksXHJcblx0XHRcdFx0XHRmaWxsOiBkZWNvZGVGaWxsKGVsLCBpLCBjb3VudCksXHJcblx0XHRcdFx0XHRjaGFydDogY2hhcnQsXHJcblx0XHRcdFx0XHRlbDogZWxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRtZXRhLiRmaWxsZXIgPSBzb3VyY2U7XHJcblx0XHRcdHNvdXJjZXMucHVzaChzb3VyY2UpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XHJcblx0XHRcdHNvdXJjZSA9IHNvdXJjZXNbaV07XHJcblx0XHRcdGlmICghc291cmNlKSB7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHNvdXJjZS5maWxsID0gcmVzb2x2ZVRhcmdldChzb3VyY2VzLCBpLCBwcm9wYWdhdGUpO1xyXG5cdFx0XHRzb3VyY2UuYm91bmRhcnkgPSBjb21wdXRlQm91bmRhcnkoc291cmNlKTtcclxuXHRcdFx0c291cmNlLm1hcHBlciA9IGNyZWF0ZU1hcHBlcihzb3VyY2UpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdGJlZm9yZURhdGFzZXREcmF3OiBmdW5jdGlvbihjaGFydCwgYXJncykge1xyXG5cdFx0dmFyIG1ldGEgPSBhcmdzLm1ldGEuJGZpbGxlcjtcclxuXHRcdGlmICghbWV0YSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGN0eCA9IGNoYXJ0LmN0eDtcclxuXHRcdHZhciBlbCA9IG1ldGEuZWw7XHJcblx0XHR2YXIgdmlldyA9IGVsLl92aWV3O1xyXG5cdFx0dmFyIHBvaW50cyA9IGVsLl9jaGlsZHJlbiB8fCBbXTtcclxuXHRcdHZhciBtYXBwZXIgPSBtZXRhLm1hcHBlcjtcclxuXHRcdHZhciBjb2xvciA9IHZpZXcuYmFja2dyb3VuZENvbG9yIHx8IGRlZmF1bHRzLmdsb2JhbC5kZWZhdWx0Q29sb3I7XHJcblxyXG5cdFx0aWYgKG1hcHBlciAmJiBjb2xvciAmJiBwb2ludHMubGVuZ3RoKSB7XHJcblx0XHRcdGhlbHBlcnMuY2FudmFzLmNsaXBBcmVhKGN0eCwgY2hhcnQuY2hhcnRBcmVhKTtcclxuXHRcdFx0ZG9GaWxsKGN0eCwgcG9pbnRzLCBtYXBwZXIsIHZpZXcsIGNvbG9yLCBlbC5fbG9vcCk7XHJcblx0XHRcdGhlbHBlcnMuY2FudmFzLnVuY2xpcEFyZWEoY3R4KTtcclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG59LHtcIjI2XCI6MjYsXCI0MVwiOjQxLFwiNDZcIjo0Nn1dLDUyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgyNik7XHJcbnZhciBFbGVtZW50ID0gcmVxdWlyZSgyNyk7XHJcbnZhciBoZWxwZXJzID0gcmVxdWlyZSg0Nik7XHJcbnZhciBsYXlvdXRzID0gcmVxdWlyZSgzMSk7XHJcblxyXG52YXIgbm9vcCA9IGhlbHBlcnMubm9vcDtcclxuXHJcbmRlZmF1bHRzLl9zZXQoJ2dsb2JhbCcsIHtcclxuXHRsZWdlbmQ6IHtcclxuXHRcdGRpc3BsYXk6IHRydWUsXHJcblx0XHRwb3NpdGlvbjogJ3RvcCcsXHJcblx0XHRmdWxsV2lkdGg6IHRydWUsXHJcblx0XHRyZXZlcnNlOiBmYWxzZSxcclxuXHRcdHdlaWdodDogMTAwMCxcclxuXHJcblx0XHQvLyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBoYW5kbGVcclxuXHRcdG9uQ2xpY2s6IGZ1bmN0aW9uKGUsIGxlZ2VuZEl0ZW0pIHtcclxuXHRcdFx0dmFyIGluZGV4ID0gbGVnZW5kSXRlbS5kYXRhc2V0SW5kZXg7XHJcblx0XHRcdHZhciBjaSA9IHRoaXMuY2hhcnQ7XHJcblx0XHRcdHZhciBtZXRhID0gY2kuZ2V0RGF0YXNldE1ldGEoaW5kZXgpO1xyXG5cclxuXHRcdFx0Ly8gU2VlIGNvbnRyb2xsZXIuaXNEYXRhc2V0VmlzaWJsZSBjb21tZW50XHJcblx0XHRcdG1ldGEuaGlkZGVuID0gbWV0YS5oaWRkZW4gPT09IG51bGwgPyAhY2kuZGF0YS5kYXRhc2V0c1tpbmRleF0uaGlkZGVuIDogbnVsbDtcclxuXHJcblx0XHRcdC8vIFdlIGhpZCBhIGRhdGFzZXQgLi4uIHJlcmVuZGVyIHRoZSBjaGFydFxyXG5cdFx0XHRjaS51cGRhdGUoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0b25Ib3ZlcjogbnVsbCxcclxuXHJcblx0XHRsYWJlbHM6IHtcclxuXHRcdFx0Ym94V2lkdGg6IDQwLFxyXG5cdFx0XHRwYWRkaW5nOiAxMCxcclxuXHRcdFx0Ly8gR2VuZXJhdGVzIGxhYmVscyBzaG93biBpbiB0aGUgbGVnZW5kXHJcblx0XHRcdC8vIFZhbGlkIHByb3BlcnRpZXMgdG8gcmV0dXJuOlxyXG5cdFx0XHQvLyB0ZXh0IDogdGV4dCB0byBkaXNwbGF5XHJcblx0XHRcdC8vIGZpbGxTdHlsZSA6IGZpbGwgb2YgY29sb3VyZWQgYm94XHJcblx0XHRcdC8vIHN0cm9rZVN0eWxlOiBzdHJva2Ugb2YgY29sb3VyZWQgYm94XHJcblx0XHRcdC8vIGhpZGRlbiA6IGlmIHRoaXMgbGVnZW5kIGl0ZW0gcmVmZXJzIHRvIGEgaGlkZGVuIGl0ZW1cclxuXHRcdFx0Ly8gbGluZUNhcCA6IGNhcCBzdHlsZSBmb3IgbGluZVxyXG5cdFx0XHQvLyBsaW5lRGFzaFxyXG5cdFx0XHQvLyBsaW5lRGFzaE9mZnNldCA6XHJcblx0XHRcdC8vIGxpbmVKb2luIDpcclxuXHRcdFx0Ly8gbGluZVdpZHRoIDpcclxuXHRcdFx0Z2VuZXJhdGVMYWJlbHM6IGZ1bmN0aW9uKGNoYXJ0KSB7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSBjaGFydC5kYXRhO1xyXG5cdFx0XHRcdHJldHVybiBoZWxwZXJzLmlzQXJyYXkoZGF0YS5kYXRhc2V0cykgPyBkYXRhLmRhdGFzZXRzLm1hcChmdW5jdGlvbihkYXRhc2V0LCBpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHR0ZXh0OiBkYXRhc2V0LmxhYmVsLFxyXG5cdFx0XHRcdFx0XHRmaWxsU3R5bGU6ICghaGVscGVycy5pc0FycmF5KGRhdGFzZXQuYmFja2dyb3VuZENvbG9yKSA/IGRhdGFzZXQuYmFja2dyb3VuZENvbG9yIDogZGF0YXNldC5iYWNrZ3JvdW5kQ29sb3JbMF0pLFxyXG5cdFx0XHRcdFx0XHRoaWRkZW46ICFjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGkpLFxyXG5cdFx0XHRcdFx0XHRsaW5lQ2FwOiBkYXRhc2V0LmJvcmRlckNhcFN0eWxlLFxyXG5cdFx0XHRcdFx0XHRsaW5lRGFzaDogZGF0YXNldC5ib3JkZXJEYXNoLFxyXG5cdFx0XHRcdFx0XHRsaW5lRGFzaE9mZnNldDogZGF0YXNldC5ib3JkZXJEYXNoT2Zmc2V0LFxyXG5cdFx0XHRcdFx0XHRsaW5lSm9pbjogZGF0YXNldC5ib3JkZXJKb2luU3R5bGUsXHJcblx0XHRcdFx0XHRcdGxpbmVXaWR0aDogZGF0YXNldC5ib3JkZXJXaWR0aCxcclxuXHRcdFx0XHRcdFx0c3Ryb2tlU3R5bGU6IGRhdGFzZXQuYm9yZGVyQ29sb3IsXHJcblx0XHRcdFx0XHRcdHBvaW50U3R5bGU6IGRhdGFzZXQucG9pbnRTdHlsZSxcclxuXHJcblx0XHRcdFx0XHRcdC8vIEJlbG93IGlzIGV4dHJhIGRhdGEgdXNlZCBmb3IgdG9nZ2xpbmcgdGhlIGRhdGFzZXRzXHJcblx0XHRcdFx0XHRcdGRhdGFzZXRJbmRleDogaVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9LCB0aGlzKSA6IFtdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0bGVnZW5kQ2FsbGJhY2s6IGZ1bmN0aW9uKGNoYXJ0KSB7XHJcblx0XHR2YXIgdGV4dCA9IFtdO1xyXG5cdFx0dGV4dC5wdXNoKCc8dWwgY2xhc3M9XCInICsgY2hhcnQuaWQgKyAnLWxlZ2VuZFwiPicpO1xyXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGFydC5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHRleHQucHVzaCgnPGxpPjxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjonICsgY2hhcnQuZGF0YS5kYXRhc2V0c1tpXS5iYWNrZ3JvdW5kQ29sb3IgKyAnXCI+PC9zcGFuPicpO1xyXG5cdFx0XHRpZiAoY2hhcnQuZGF0YS5kYXRhc2V0c1tpXS5sYWJlbCkge1xyXG5cdFx0XHRcdHRleHQucHVzaChjaGFydC5kYXRhLmRhdGFzZXRzW2ldLmxhYmVsKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0ZXh0LnB1c2goJzwvbGk+Jyk7XHJcblx0XHR9XHJcblx0XHR0ZXh0LnB1c2goJzwvdWw+Jyk7XHJcblx0XHRyZXR1cm4gdGV4dC5qb2luKCcnKTtcclxuXHR9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJveCB3aWR0aCBiYXNlZCBvbiB0aGUgdXNlUG9pbnRTdHlsZSBvcHRpb25cclxuICogQHBhcmFtIGxhYmVsb3B0cyB7T2JqZWN0fSB0aGUgbGFiZWwgb3B0aW9ucyBvbiB0aGUgbGVnZW5kXHJcbiAqIEBwYXJhbSBmb250U2l6ZSB7TnVtYmVyfSB0aGUgbGFiZWwgZm9udCBzaXplXHJcbiAqIEByZXR1cm4ge051bWJlcn0gd2lkdGggb2YgdGhlIGNvbG9yIGJveCBhcmVhXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRCb3hXaWR0aChsYWJlbE9wdHMsIGZvbnRTaXplKSB7XHJcblx0cmV0dXJuIGxhYmVsT3B0cy51c2VQb2ludFN0eWxlID9cclxuXHRcdGZvbnRTaXplICogTWF0aC5TUVJUMiA6XHJcblx0XHRsYWJlbE9wdHMuYm94V2lkdGg7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJTVBPUlRBTlQ6IHRoaXMgY2xhc3MgaXMgZXhwb3NlZCBwdWJsaWNseSBhcyBDaGFydC5MZWdlbmQsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVxdWlyZWQhXHJcbiAqL1xyXG52YXIgTGVnZW5kID0gRWxlbWVudC5leHRlbmQoe1xyXG5cclxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihjb25maWcpIHtcclxuXHRcdGhlbHBlcnMuZXh0ZW5kKHRoaXMsIGNvbmZpZyk7XHJcblxyXG5cdFx0Ly8gQ29udGFpbnMgaGl0IGJveGVzIGZvciBlYWNoIGRhdGFzZXQgKGluIGRhdGFzZXQgb3JkZXIpXHJcblx0XHR0aGlzLmxlZ2VuZEhpdEJveGVzID0gW107XHJcblxyXG5cdFx0Ly8gQXJlIHdlIGluIGRvdWdobnV0IG1vZGUgd2hpY2ggaGFzIGEgZGlmZmVyZW50IGRhdGEgdHlwZVxyXG5cdFx0dGhpcy5kb3VnaG51dE1vZGUgPSBmYWxzZTtcclxuXHR9LFxyXG5cclxuXHQvLyBUaGVzZSBtZXRob2RzIGFyZSBvcmRlcmVkIGJ5IGxpZmVjeWNsZS4gVXRpbGl0aWVzIHRoZW4gZm9sbG93LlxyXG5cdC8vIEFueSBmdW5jdGlvbiBkZWZpbmVkIGhlcmUgaXMgaW5oZXJpdGVkIGJ5IGFsbCBsZWdlbmQgdHlwZXMuXHJcblx0Ly8gQW55IGZ1bmN0aW9uIGNhbiBiZSBleHRlbmRlZCBieSB0aGUgbGVnZW5kIHR5cGVcclxuXHJcblx0YmVmb3JlVXBkYXRlOiBub29wLFxyXG5cdHVwZGF0ZTogZnVuY3Rpb24obWF4V2lkdGgsIG1heEhlaWdodCwgbWFyZ2lucykge1xyXG5cdFx0dmFyIG1lID0gdGhpcztcclxuXHJcblx0XHQvLyBVcGRhdGUgTGlmZWN5Y2xlIC0gUHJvYmFibHkgZG9uJ3Qgd2FudCB0byBldmVyIGV4dGVuZCBvciBvdmVyd3JpdGUgdGhpcyBmdW5jdGlvbiA7KVxyXG5cdFx0bWUuYmVmb3JlVXBkYXRlKCk7XHJcblxyXG5cdFx0Ly8gQWJzb3JiIHRoZSBtYXN0ZXIgbWVhc3VyZW1lbnRzXHJcblx0XHRtZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xyXG5cdFx0bWUubWF4SGVpZ2h0ID0gbWF4SGVpZ2h0O1xyXG5cdFx0bWUubWFyZ2lucyA9IG1hcmdpbnM7XHJcblxyXG5cdFx0Ly8gRGltZW5zaW9uc1xyXG5cdFx0bWUuYmVmb3JlU2V0RGltZW5zaW9ucygpO1xyXG5cdFx0bWUuc2V0RGltZW5zaW9ucygpO1xyXG5cdFx0bWUuYWZ0ZXJTZXREaW1lbnNpb25zKCk7XHJcblx0XHQvLyBMYWJlbHNcclxuXHRcdG1lLmJlZm9yZUJ1aWxkTGFiZWxzKCk7XHJcblx0XHRtZS5idWlsZExhYmVscygpO1xyXG5cdFx0bWUuYWZ0ZXJCdWlsZExhYmVscygpO1xyXG5cclxuXHRcdC8vIEZpdFxyXG5cdFx0bWUuYmVmb3JlRml0KCk7XHJcblx0XHRtZS5maXQoKTtcclxuXHRcdG1lLmFmdGVyRml0KCk7XHJcblx0XHQvL1xyXG5cdFx0bWUuYWZ0ZXJVcGRhdGUoKTtcclxuXHJcblx0XHRyZXR1cm4gbWUubWluU2l6ZTtcclxuXHR9LFxyXG5cdGFmdGVyVXBkYXRlOiBub29wLFxyXG5cclxuXHQvL1xyXG5cclxuXHRiZWZvcmVTZXREaW1lbnNpb25zOiBub29wLFxyXG5cdHNldERpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdC8vIFNldCB0aGUgdW5jb25zdHJhaW5lZCBkaW1lbnNpb24gYmVmb3JlIGxhYmVsIHJvdGF0aW9uXHJcblx0XHRpZiAobWUuaXNIb3Jpem9udGFsKCkpIHtcclxuXHRcdFx0Ly8gUmVzZXQgcG9zaXRpb24gYmVmb3JlIGNhbGN1bGF0aW5nIHJvdGF0aW9uXHJcblx0XHRcdG1lLndpZHRoID0gbWUubWF4V2lkdGg7XHJcblx0XHRcdG1lLmxlZnQgPSAwO1xyXG5cdFx0XHRtZS5yaWdodCA9IG1lLndpZHRoO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bWUuaGVpZ2h0ID0gbWUubWF4SGVpZ2h0O1xyXG5cclxuXHRcdFx0Ly8gUmVzZXQgcG9zaXRpb24gYmVmb3JlIGNhbGN1bGF0aW5nIHJvdGF0aW9uXHJcblx0XHRcdG1lLnRvcCA9IDA7XHJcblx0XHRcdG1lLmJvdHRvbSA9IG1lLmhlaWdodDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZXNldCBwYWRkaW5nXHJcblx0XHRtZS5wYWRkaW5nTGVmdCA9IDA7XHJcblx0XHRtZS5wYWRkaW5nVG9wID0gMDtcclxuXHRcdG1lLnBhZGRpbmdSaWdodCA9IDA7XHJcblx0XHRtZS5wYWRkaW5nQm90dG9tID0gMDtcclxuXHJcblx0XHQvLyBSZXNldCBtaW5TaXplXHJcblx0XHRtZS5taW5TaXplID0ge1xyXG5cdFx0XHR3aWR0aDogMCxcclxuXHRcdFx0aGVpZ2h0OiAwXHJcblx0XHR9O1xyXG5cdH0sXHJcblx0YWZ0ZXJTZXREaW1lbnNpb25zOiBub29wLFxyXG5cclxuXHQvL1xyXG5cclxuXHRiZWZvcmVCdWlsZExhYmVsczogbm9vcCxcclxuXHRidWlsZExhYmVsczogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0dmFyIGxhYmVsT3B0cyA9IG1lLm9wdGlvbnMubGFiZWxzIHx8IHt9O1xyXG5cdFx0dmFyIGxlZ2VuZEl0ZW1zID0gaGVscGVycy5jYWxsYmFjayhsYWJlbE9wdHMuZ2VuZXJhdGVMYWJlbHMsIFttZS5jaGFydF0sIG1lKSB8fCBbXTtcclxuXHJcblx0XHRpZiAobGFiZWxPcHRzLmZpbHRlcikge1xyXG5cdFx0XHRsZWdlbmRJdGVtcyA9IGxlZ2VuZEl0ZW1zLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcblx0XHRcdFx0cmV0dXJuIGxhYmVsT3B0cy5maWx0ZXIoaXRlbSwgbWUuY2hhcnQuZGF0YSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChtZS5vcHRpb25zLnJldmVyc2UpIHtcclxuXHRcdFx0bGVnZW5kSXRlbXMucmV2ZXJzZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdG1lLmxlZ2VuZEl0ZW1zID0gbGVnZW5kSXRlbXM7XHJcblx0fSxcclxuXHRhZnRlckJ1aWxkTGFiZWxzOiBub29wLFxyXG5cclxuXHQvL1xyXG5cclxuXHRiZWZvcmVGaXQ6IG5vb3AsXHJcblx0Zml0OiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHR2YXIgb3B0cyA9IG1lLm9wdGlvbnM7XHJcblx0XHR2YXIgbGFiZWxPcHRzID0gb3B0cy5sYWJlbHM7XHJcblx0XHR2YXIgZGlzcGxheSA9IG9wdHMuZGlzcGxheTtcclxuXHJcblx0XHR2YXIgY3R4ID0gbWUuY3R4O1xyXG5cclxuXHRcdHZhciBnbG9iYWxEZWZhdWx0ID0gZGVmYXVsdHMuZ2xvYmFsO1xyXG5cdFx0dmFyIHZhbHVlT3JEZWZhdWx0ID0gaGVscGVycy52YWx1ZU9yRGVmYXVsdDtcclxuXHRcdHZhciBmb250U2l6ZSA9IHZhbHVlT3JEZWZhdWx0KGxhYmVsT3B0cy5mb250U2l6ZSwgZ2xvYmFsRGVmYXVsdC5kZWZhdWx0Rm9udFNpemUpO1xyXG5cdFx0dmFyIGZvbnRTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KGxhYmVsT3B0cy5mb250U3R5bGUsIGdsb2JhbERlZmF1bHQuZGVmYXVsdEZvbnRTdHlsZSk7XHJcblx0XHR2YXIgZm9udEZhbWlseSA9IHZhbHVlT3JEZWZhdWx0KGxhYmVsT3B0cy5mb250RmFtaWx5LCBnbG9iYWxEZWZhdWx0LmRlZmF1bHRGb250RmFtaWx5KTtcclxuXHRcdHZhciBsYWJlbEZvbnQgPSBoZWxwZXJzLmZvbnRTdHJpbmcoZm9udFNpemUsIGZvbnRTdHlsZSwgZm9udEZhbWlseSk7XHJcblxyXG5cdFx0Ly8gUmVzZXQgaGl0IGJveGVzXHJcblx0XHR2YXIgaGl0Ym94ZXMgPSBtZS5sZWdlbmRIaXRCb3hlcyA9IFtdO1xyXG5cclxuXHRcdHZhciBtaW5TaXplID0gbWUubWluU2l6ZTtcclxuXHRcdHZhciBpc0hvcml6b250YWwgPSBtZS5pc0hvcml6b250YWwoKTtcclxuXHJcblx0XHRpZiAoaXNIb3Jpem9udGFsKSB7XHJcblx0XHRcdG1pblNpemUud2lkdGggPSBtZS5tYXhXaWR0aDsgLy8gZmlsbCBhbGwgdGhlIHdpZHRoXHJcblx0XHRcdG1pblNpemUuaGVpZ2h0ID0gZGlzcGxheSA/IDEwIDogMDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1pblNpemUud2lkdGggPSBkaXNwbGF5ID8gMTAgOiAwO1xyXG5cdFx0XHRtaW5TaXplLmhlaWdodCA9IG1lLm1heEhlaWdodDsgLy8gZmlsbCBhbGwgdGhlIGhlaWdodFxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEluY3JlYXNlIHNpemVzIGhlcmVcclxuXHRcdGlmIChkaXNwbGF5KSB7XHJcblx0XHRcdGN0eC5mb250ID0gbGFiZWxGb250O1xyXG5cclxuXHRcdFx0aWYgKGlzSG9yaXpvbnRhbCkge1xyXG5cdFx0XHRcdC8vIExhYmVsc1xyXG5cclxuXHRcdFx0XHQvLyBXaWR0aCBvZiBlYWNoIGxpbmUgb2YgbGVnZW5kIGJveGVzLiBMYWJlbHMgd3JhcCBvbnRvIG11bHRpcGxlIGxpbmVzIHdoZW4gdGhlcmUgYXJlIHRvbyBtYW55IHRvIGZpdCBvbiBvbmVcclxuXHRcdFx0XHR2YXIgbGluZVdpZHRocyA9IG1lLmxpbmVXaWR0aHMgPSBbMF07XHJcblx0XHRcdFx0dmFyIHRvdGFsSGVpZ2h0ID0gbWUubGVnZW5kSXRlbXMubGVuZ3RoID8gZm9udFNpemUgKyAobGFiZWxPcHRzLnBhZGRpbmcpIDogMDtcclxuXHJcblx0XHRcdFx0Y3R4LnRleHRBbGlnbiA9ICdsZWZ0JztcclxuXHRcdFx0XHRjdHgudGV4dEJhc2VsaW5lID0gJ3RvcCc7XHJcblxyXG5cdFx0XHRcdGhlbHBlcnMuZWFjaChtZS5sZWdlbmRJdGVtcywgZnVuY3Rpb24obGVnZW5kSXRlbSwgaSkge1xyXG5cdFx0XHRcdFx0dmFyIGJveFdpZHRoID0gZ2V0Qm94V2lkdGgobGFiZWxPcHRzLCBmb250U2l6ZSk7XHJcblx0XHRcdFx0XHR2YXIgd2lkdGggPSBib3hXaWR0aCArIChmb250U2l6ZSAvIDIpICsgY3R4Lm1lYXN1cmVUZXh0KGxlZ2VuZEl0ZW0udGV4dCkud2lkdGg7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGxpbmVXaWR0aHNbbGluZVdpZHRocy5sZW5ndGggLSAxXSArIHdpZHRoICsgbGFiZWxPcHRzLnBhZGRpbmcgPj0gbWUud2lkdGgpIHtcclxuXHRcdFx0XHRcdFx0dG90YWxIZWlnaHQgKz0gZm9udFNpemUgKyAobGFiZWxPcHRzLnBhZGRpbmcpO1xyXG5cdFx0XHRcdFx0XHRsaW5lV2lkdGhzW2xpbmVXaWR0aHMubGVuZ3RoXSA9IG1lLmxlZnQ7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gU3RvcmUgdGhlIGhpdGJveCB3aWR0aCBhbmQgaGVpZ2h0IGhlcmUuIEZpbmFsIHBvc2l0aW9uIHdpbGwgYmUgdXBkYXRlZCBpbiBgZHJhd2BcclxuXHRcdFx0XHRcdGhpdGJveGVzW2ldID0ge1xyXG5cdFx0XHRcdFx0XHRsZWZ0OiAwLFxyXG5cdFx0XHRcdFx0XHR0b3A6IDAsXHJcblx0XHRcdFx0XHRcdHdpZHRoOiB3aWR0aCxcclxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBmb250U2l6ZVxyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRsaW5lV2lkdGhzW2xpbmVXaWR0aHMubGVuZ3RoIC0gMV0gKz0gd2lkdGggKyBsYWJlbE9wdHMucGFkZGluZztcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0bWluU2l6ZS5oZWlnaHQgKz0gdG90YWxIZWlnaHQ7XHJcblxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHZhciB2UGFkZGluZyA9IGxhYmVsT3B0cy5wYWRkaW5nO1xyXG5cdFx0XHRcdHZhciBjb2x1bW5XaWR0aHMgPSBtZS5jb2x1bW5XaWR0aHMgPSBbXTtcclxuXHRcdFx0XHR2YXIgdG90YWxXaWR0aCA9IGxhYmVsT3B0cy5wYWRkaW5nO1xyXG5cdFx0XHRcdHZhciBjdXJyZW50Q29sV2lkdGggPSAwO1xyXG5cdFx0XHRcdHZhciBjdXJyZW50Q29sSGVpZ2h0ID0gMDtcclxuXHRcdFx0XHR2YXIgaXRlbUhlaWdodCA9IGZvbnRTaXplICsgdlBhZGRpbmc7XHJcblxyXG5cdFx0XHRcdGhlbHBlcnMuZWFjaChtZS5sZWdlbmRJdGVtcywgZnVuY3Rpb24obGVnZW5kSXRlbSwgaSkge1xyXG5cdFx0XHRcdFx0dmFyIGJveFdpZHRoID0gZ2V0Qm94V2lkdGgobGFiZWxPcHRzLCBmb250U2l6ZSk7XHJcblx0XHRcdFx0XHR2YXIgaXRlbVdpZHRoID0gYm94V2lkdGggKyAoZm9udFNpemUgLyAyKSArIGN0eC5tZWFzdXJlVGV4dChsZWdlbmRJdGVtLnRleHQpLndpZHRoO1xyXG5cclxuXHRcdFx0XHRcdC8vIElmIHRvbyB0YWxsLCBnbyB0byBuZXcgY29sdW1uXHJcblx0XHRcdFx0XHRpZiAoY3VycmVudENvbEhlaWdodCArIGl0ZW1IZWlnaHQgPiBtaW5TaXplLmhlaWdodCkge1xyXG5cdFx0XHRcdFx0XHR0b3RhbFdpZHRoICs9IGN1cnJlbnRDb2xXaWR0aCArIGxhYmVsT3B0cy5wYWRkaW5nO1xyXG5cdFx0XHRcdFx0XHRjb2x1bW5XaWR0aHMucHVzaChjdXJyZW50Q29sV2lkdGgpOyAvLyBwcmV2aW91cyBjb2x1bW4gd2lkdGhcclxuXHJcblx0XHRcdFx0XHRcdGN1cnJlbnRDb2xXaWR0aCA9IDA7XHJcblx0XHRcdFx0XHRcdGN1cnJlbnRDb2xIZWlnaHQgPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIEdldCBtYXggd2lkdGhcclxuXHRcdFx0XHRcdGN1cnJlbnRDb2xXaWR0aCA9IE1hdGgubWF4KGN1cnJlbnRDb2xXaWR0aCwgaXRlbVdpZHRoKTtcclxuXHRcdFx0XHRcdGN1cnJlbnRDb2xIZWlnaHQgKz0gaXRlbUhlaWdodDtcclxuXHJcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgaGl0Ym94IHdpZHRoIGFuZCBoZWlnaHQgaGVyZS4gRmluYWwgcG9zaXRpb24gd2lsbCBiZSB1cGRhdGVkIGluIGBkcmF3YFxyXG5cdFx0XHRcdFx0aGl0Ym94ZXNbaV0gPSB7XHJcblx0XHRcdFx0XHRcdGxlZnQ6IDAsXHJcblx0XHRcdFx0XHRcdHRvcDogMCxcclxuXHRcdFx0XHRcdFx0d2lkdGg6IGl0ZW1XaWR0aCxcclxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBmb250U2l6ZVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0dG90YWxXaWR0aCArPSBjdXJyZW50Q29sV2lkdGg7XHJcblx0XHRcdFx0Y29sdW1uV2lkdGhzLnB1c2goY3VycmVudENvbFdpZHRoKTtcclxuXHRcdFx0XHRtaW5TaXplLndpZHRoICs9IHRvdGFsV2lkdGg7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRtZS53aWR0aCA9IG1pblNpemUud2lkdGg7XHJcblx0XHRtZS5oZWlnaHQgPSBtaW5TaXplLmhlaWdodDtcclxuXHR9LFxyXG5cdGFmdGVyRml0OiBub29wLFxyXG5cclxuXHQvLyBTaGFyZWQgTWV0aG9kc1xyXG5cdGlzSG9yaXpvbnRhbDogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uID09PSAndG9wJyB8fCB0aGlzLm9wdGlvbnMucG9zaXRpb24gPT09ICdib3R0b20nO1xyXG5cdH0sXHJcblxyXG5cdC8vIEFjdHVhbGx5IGRyYXcgdGhlIGxlZ2VuZCBvbiB0aGUgY2FudmFzXHJcblx0ZHJhdzogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0dmFyIG9wdHMgPSBtZS5vcHRpb25zO1xyXG5cdFx0dmFyIGxhYmVsT3B0cyA9IG9wdHMubGFiZWxzO1xyXG5cdFx0dmFyIGdsb2JhbERlZmF1bHQgPSBkZWZhdWx0cy5nbG9iYWw7XHJcblx0XHR2YXIgbGluZURlZmF1bHQgPSBnbG9iYWxEZWZhdWx0LmVsZW1lbnRzLmxpbmU7XHJcblx0XHR2YXIgbGVnZW5kV2lkdGggPSBtZS53aWR0aDtcclxuXHRcdHZhciBsaW5lV2lkdGhzID0gbWUubGluZVdpZHRocztcclxuXHJcblx0XHRpZiAob3B0cy5kaXNwbGF5KSB7XHJcblx0XHRcdHZhciBjdHggPSBtZS5jdHg7XHJcblx0XHRcdHZhciB2YWx1ZU9yRGVmYXVsdCA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQ7XHJcblx0XHRcdHZhciBmb250Q29sb3IgPSB2YWx1ZU9yRGVmYXVsdChsYWJlbE9wdHMuZm9udENvbG9yLCBnbG9iYWxEZWZhdWx0LmRlZmF1bHRGb250Q29sb3IpO1xyXG5cdFx0XHR2YXIgZm9udFNpemUgPSB2YWx1ZU9yRGVmYXVsdChsYWJlbE9wdHMuZm9udFNpemUsIGdsb2JhbERlZmF1bHQuZGVmYXVsdEZvbnRTaXplKTtcclxuXHRcdFx0dmFyIGZvbnRTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KGxhYmVsT3B0cy5mb250U3R5bGUsIGdsb2JhbERlZmF1bHQuZGVmYXVsdEZvbnRTdHlsZSk7XHJcblx0XHRcdHZhciBmb250RmFtaWx5ID0gdmFsdWVPckRlZmF1bHQobGFiZWxPcHRzLmZvbnRGYW1pbHksIGdsb2JhbERlZmF1bHQuZGVmYXVsdEZvbnRGYW1pbHkpO1xyXG5cdFx0XHR2YXIgbGFiZWxGb250ID0gaGVscGVycy5mb250U3RyaW5nKGZvbnRTaXplLCBmb250U3R5bGUsIGZvbnRGYW1pbHkpO1xyXG5cdFx0XHR2YXIgY3Vyc29yO1xyXG5cclxuXHRcdFx0Ly8gQ2FudmFzIHNldHVwXHJcblx0XHRcdGN0eC50ZXh0QWxpZ24gPSAnbGVmdCc7XHJcblx0XHRcdGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcclxuXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IDAuNTtcclxuXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gZm9udENvbG9yOyAvLyBmb3Igc3RyaWtldGhyb3VnaCBlZmZlY3RcclxuXHRcdFx0Y3R4LmZpbGxTdHlsZSA9IGZvbnRDb2xvcjsgLy8gcmVuZGVyIGluIGNvcnJlY3QgY29sb3VyXHJcblx0XHRcdGN0eC5mb250ID0gbGFiZWxGb250O1xyXG5cclxuXHRcdFx0dmFyIGJveFdpZHRoID0gZ2V0Qm94V2lkdGgobGFiZWxPcHRzLCBmb250U2l6ZSk7XHJcblx0XHRcdHZhciBoaXRib3hlcyA9IG1lLmxlZ2VuZEhpdEJveGVzO1xyXG5cclxuXHRcdFx0Ly8gY3VycmVudCBwb3NpdGlvblxyXG5cdFx0XHR2YXIgZHJhd0xlZ2VuZEJveCA9IGZ1bmN0aW9uKHgsIHksIGxlZ2VuZEl0ZW0pIHtcclxuXHRcdFx0XHRpZiAoaXNOYU4oYm94V2lkdGgpIHx8IGJveFdpZHRoIDw9IDApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFNldCB0aGUgY3R4IGZvciB0aGUgYm94XHJcblx0XHRcdFx0Y3R4LnNhdmUoKTtcclxuXHJcblx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0uZmlsbFN0eWxlLCBnbG9iYWxEZWZhdWx0LmRlZmF1bHRDb2xvcik7XHJcblx0XHRcdFx0Y3R4LmxpbmVDYXAgPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVDYXAsIGxpbmVEZWZhdWx0LmJvcmRlckNhcFN0eWxlKTtcclxuXHRcdFx0XHRjdHgubGluZURhc2hPZmZzZXQgPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVEYXNoT2Zmc2V0LCBsaW5lRGVmYXVsdC5ib3JkZXJEYXNoT2Zmc2V0KTtcclxuXHRcdFx0XHRjdHgubGluZUpvaW4gPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVKb2luLCBsaW5lRGVmYXVsdC5ib3JkZXJKb2luU3R5bGUpO1xyXG5cdFx0XHRcdGN0eC5saW5lV2lkdGggPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVXaWR0aCwgbGluZURlZmF1bHQuYm9yZGVyV2lkdGgpO1xyXG5cdFx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0uc3Ryb2tlU3R5bGUsIGdsb2JhbERlZmF1bHQuZGVmYXVsdENvbG9yKTtcclxuXHRcdFx0XHR2YXIgaXNMaW5lV2lkdGhaZXJvID0gKHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0ubGluZVdpZHRoLCBsaW5lRGVmYXVsdC5ib3JkZXJXaWR0aCkgPT09IDApO1xyXG5cclxuXHRcdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XHJcblx0XHRcdFx0XHQvLyBJRSA5IGFuZCAxMCBkbyBub3Qgc3VwcG9ydCBsaW5lIGRhc2hcclxuXHRcdFx0XHRcdGN0eC5zZXRMaW5lRGFzaCh2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVEYXNoLCBsaW5lRGVmYXVsdC5ib3JkZXJEYXNoKSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAob3B0cy5sYWJlbHMgJiYgb3B0cy5sYWJlbHMudXNlUG9pbnRTdHlsZSkge1xyXG5cdFx0XHRcdFx0Ly8gUmVjYWxjdWxhdGUgeCBhbmQgeSBmb3IgZHJhd1BvaW50KCkgYmVjYXVzZSBpdHMgZXhwZWN0aW5nXHJcblx0XHRcdFx0XHQvLyB4IGFuZCB5IHRvIGJlIGNlbnRlciBvZiBmaWd1cmUgKGluc3RlYWQgb2YgdG9wIGxlZnQpXHJcblx0XHRcdFx0XHR2YXIgcmFkaXVzID0gZm9udFNpemUgKiBNYXRoLlNRUlQyIC8gMjtcclxuXHRcdFx0XHRcdHZhciBvZmZTZXQgPSByYWRpdXMgLyBNYXRoLlNRUlQyO1xyXG5cdFx0XHRcdFx0dmFyIGNlbnRlclggPSB4ICsgb2ZmU2V0O1xyXG5cdFx0XHRcdFx0dmFyIGNlbnRlclkgPSB5ICsgb2ZmU2V0O1xyXG5cclxuXHRcdFx0XHRcdC8vIERyYXcgcG9pbnRTdHlsZSBhcyBsZWdlbmQgc3ltYm9sXHJcblx0XHRcdFx0XHRoZWxwZXJzLmNhbnZhcy5kcmF3UG9pbnQoY3R4LCBsZWdlbmRJdGVtLnBvaW50U3R5bGUsIHJhZGl1cywgY2VudGVyWCwgY2VudGVyWSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIERyYXcgYm94IGFzIGxlZ2VuZCBzeW1ib2xcclxuXHRcdFx0XHRcdGlmICghaXNMaW5lV2lkdGhaZXJvKSB7XHJcblx0XHRcdFx0XHRcdGN0eC5zdHJva2VSZWN0KHgsIHksIGJveFdpZHRoLCBmb250U2l6ZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjdHguZmlsbFJlY3QoeCwgeSwgYm94V2lkdGgsIGZvbnRTaXplKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGN0eC5yZXN0b3JlKCk7XHJcblx0XHRcdH07XHJcblx0XHRcdHZhciBmaWxsVGV4dCA9IGZ1bmN0aW9uKHgsIHksIGxlZ2VuZEl0ZW0sIHRleHRXaWR0aCkge1xyXG5cdFx0XHRcdHZhciBoYWxmRm9udFNpemUgPSBmb250U2l6ZSAvIDI7XHJcblx0XHRcdFx0dmFyIHhMZWZ0ID0gYm94V2lkdGggKyBoYWxmRm9udFNpemUgKyB4O1xyXG5cdFx0XHRcdHZhciB5TWlkZGxlID0geSArIGhhbGZGb250U2l6ZTtcclxuXHJcblx0XHRcdFx0Y3R4LmZpbGxUZXh0KGxlZ2VuZEl0ZW0udGV4dCwgeExlZnQsIHlNaWRkbGUpO1xyXG5cclxuXHRcdFx0XHRpZiAobGVnZW5kSXRlbS5oaWRkZW4pIHtcclxuXHRcdFx0XHRcdC8vIFN0cmlrZXRocm91Z2ggdGhlIHRleHQgaWYgaGlkZGVuXHJcblx0XHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XHJcblx0XHRcdFx0XHRjdHgubGluZVdpZHRoID0gMjtcclxuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oeExlZnQsIHlNaWRkbGUpO1xyXG5cdFx0XHRcdFx0Y3R4LmxpbmVUbyh4TGVmdCArIHRleHRXaWR0aCwgeU1pZGRsZSk7XHJcblx0XHRcdFx0XHRjdHguc3Ryb2tlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gSG9yaXpvbnRhbFxyXG5cdFx0XHR2YXIgaXNIb3Jpem9udGFsID0gbWUuaXNIb3Jpem9udGFsKCk7XHJcblx0XHRcdGlmIChpc0hvcml6b250YWwpIHtcclxuXHRcdFx0XHRjdXJzb3IgPSB7XHJcblx0XHRcdFx0XHR4OiBtZS5sZWZ0ICsgKChsZWdlbmRXaWR0aCAtIGxpbmVXaWR0aHNbMF0pIC8gMiksXHJcblx0XHRcdFx0XHR5OiBtZS50b3AgKyBsYWJlbE9wdHMucGFkZGluZyxcclxuXHRcdFx0XHRcdGxpbmU6IDBcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGN1cnNvciA9IHtcclxuXHRcdFx0XHRcdHg6IG1lLmxlZnQgKyBsYWJlbE9wdHMucGFkZGluZyxcclxuXHRcdFx0XHRcdHk6IG1lLnRvcCArIGxhYmVsT3B0cy5wYWRkaW5nLFxyXG5cdFx0XHRcdFx0bGluZTogMFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBpdGVtSGVpZ2h0ID0gZm9udFNpemUgKyBsYWJlbE9wdHMucGFkZGluZztcclxuXHRcdFx0aGVscGVycy5lYWNoKG1lLmxlZ2VuZEl0ZW1zLCBmdW5jdGlvbihsZWdlbmRJdGVtLCBpKSB7XHJcblx0XHRcdFx0dmFyIHRleHRXaWR0aCA9IGN0eC5tZWFzdXJlVGV4dChsZWdlbmRJdGVtLnRleHQpLndpZHRoO1xyXG5cdFx0XHRcdHZhciB3aWR0aCA9IGJveFdpZHRoICsgKGZvbnRTaXplIC8gMikgKyB0ZXh0V2lkdGg7XHJcblx0XHRcdFx0dmFyIHggPSBjdXJzb3IueDtcclxuXHRcdFx0XHR2YXIgeSA9IGN1cnNvci55O1xyXG5cclxuXHRcdFx0XHRpZiAoaXNIb3Jpem9udGFsKSB7XHJcblx0XHRcdFx0XHRpZiAoeCArIHdpZHRoID49IGxlZ2VuZFdpZHRoKSB7XHJcblx0XHRcdFx0XHRcdHkgPSBjdXJzb3IueSArPSBpdGVtSGVpZ2h0O1xyXG5cdFx0XHRcdFx0XHRjdXJzb3IubGluZSsrO1xyXG5cdFx0XHRcdFx0XHR4ID0gY3Vyc29yLnggPSBtZS5sZWZ0ICsgKChsZWdlbmRXaWR0aCAtIGxpbmVXaWR0aHNbY3Vyc29yLmxpbmVdKSAvIDIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoeSArIGl0ZW1IZWlnaHQgPiBtZS5ib3R0b20pIHtcclxuXHRcdFx0XHRcdHggPSBjdXJzb3IueCA9IHggKyBtZS5jb2x1bW5XaWR0aHNbY3Vyc29yLmxpbmVdICsgbGFiZWxPcHRzLnBhZGRpbmc7XHJcblx0XHRcdFx0XHR5ID0gY3Vyc29yLnkgPSBtZS50b3AgKyBsYWJlbE9wdHMucGFkZGluZztcclxuXHRcdFx0XHRcdGN1cnNvci5saW5lKys7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRkcmF3TGVnZW5kQm94KHgsIHksIGxlZ2VuZEl0ZW0pO1xyXG5cclxuXHRcdFx0XHRoaXRib3hlc1tpXS5sZWZ0ID0geDtcclxuXHRcdFx0XHRoaXRib3hlc1tpXS50b3AgPSB5O1xyXG5cclxuXHRcdFx0XHQvLyBGaWxsIHRoZSBhY3R1YWwgbGFiZWxcclxuXHRcdFx0XHRmaWxsVGV4dCh4LCB5LCBsZWdlbmRJdGVtLCB0ZXh0V2lkdGgpO1xyXG5cclxuXHRcdFx0XHRpZiAoaXNIb3Jpem9udGFsKSB7XHJcblx0XHRcdFx0XHRjdXJzb3IueCArPSB3aWR0aCArIChsYWJlbE9wdHMucGFkZGluZyk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGN1cnNvci55ICs9IGl0ZW1IZWlnaHQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlIGFuIGV2ZW50XHJcblx0ICogQHByaXZhdGVcclxuXHQgKiBAcGFyYW0ge0lFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgdG8gaGFuZGxlXHJcblx0ICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBhIGNoYW5nZSBvY2N1cmVkXHJcblx0ICovXHJcblx0aGFuZGxlRXZlbnQ6IGZ1bmN0aW9uKGUpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHR2YXIgb3B0cyA9IG1lLm9wdGlvbnM7XHJcblx0XHR2YXIgdHlwZSA9IGUudHlwZSA9PT0gJ21vdXNldXAnID8gJ2NsaWNrJyA6IGUudHlwZTtcclxuXHRcdHZhciBjaGFuZ2VkID0gZmFsc2U7XHJcblxyXG5cdFx0aWYgKHR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XHJcblx0XHRcdGlmICghb3B0cy5vbkhvdmVyKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKHR5cGUgPT09ICdjbGljaycpIHtcclxuXHRcdFx0aWYgKCFvcHRzLm9uQ2xpY2spIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDaGFydCBldmVudCBhbHJlYWR5IGhhcyByZWxhdGl2ZSBwb3NpdGlvbiBpbiBpdFxyXG5cdFx0dmFyIHggPSBlLng7XHJcblx0XHR2YXIgeSA9IGUueTtcclxuXHJcblx0XHRpZiAoeCA+PSBtZS5sZWZ0ICYmIHggPD0gbWUucmlnaHQgJiYgeSA+PSBtZS50b3AgJiYgeSA8PSBtZS5ib3R0b20pIHtcclxuXHRcdFx0Ly8gU2VlIGlmIHdlIGFyZSB0b3VjaGluZyBvbmUgb2YgdGhlIGRhdGFzZXQgYm94ZXNcclxuXHRcdFx0dmFyIGxoID0gbWUubGVnZW5kSGl0Qm94ZXM7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGgubGVuZ3RoOyArK2kpIHtcclxuXHRcdFx0XHR2YXIgaGl0Qm94ID0gbGhbaV07XHJcblxyXG5cdFx0XHRcdGlmICh4ID49IGhpdEJveC5sZWZ0ICYmIHggPD0gaGl0Qm94LmxlZnQgKyBoaXRCb3gud2lkdGggJiYgeSA+PSBoaXRCb3gudG9wICYmIHkgPD0gaGl0Qm94LnRvcCArIGhpdEJveC5oZWlnaHQpIHtcclxuXHRcdFx0XHRcdC8vIFRvdWNoaW5nIGFuIGVsZW1lbnRcclxuXHRcdFx0XHRcdGlmICh0eXBlID09PSAnY2xpY2snKSB7XHJcblx0XHRcdFx0XHRcdC8vIHVzZSBlLm5hdGl2ZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcclxuXHRcdFx0XHRcdFx0b3B0cy5vbkNsaWNrLmNhbGwobWUsIGUubmF0aXZlLCBtZS5sZWdlbmRJdGVtc1tpXSk7XHJcblx0XHRcdFx0XHRcdGNoYW5nZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuXHRcdFx0XHRcdFx0Ly8gdXNlIGUubmF0aXZlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxyXG5cdFx0XHRcdFx0XHRvcHRzLm9uSG92ZXIuY2FsbChtZSwgZS5uYXRpdmUsIG1lLmxlZ2VuZEl0ZW1zW2ldKTtcclxuXHRcdFx0XHRcdFx0Y2hhbmdlZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjaGFuZ2VkO1xyXG5cdH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVOZXdMZWdlbmRBbmRBdHRhY2goY2hhcnQsIGxlZ2VuZE9wdHMpIHtcclxuXHR2YXIgbGVnZW5kID0gbmV3IExlZ2VuZCh7XHJcblx0XHRjdHg6IGNoYXJ0LmN0eCxcclxuXHRcdG9wdGlvbnM6IGxlZ2VuZE9wdHMsXHJcblx0XHRjaGFydDogY2hhcnRcclxuXHR9KTtcclxuXHJcblx0bGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIGxlZ2VuZCwgbGVnZW5kT3B0cyk7XHJcblx0bGF5b3V0cy5hZGRCb3goY2hhcnQsIGxlZ2VuZCk7XHJcblx0Y2hhcnQubGVnZW5kID0gbGVnZW5kO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHRpZDogJ2xlZ2VuZCcsXHJcblxyXG5cdC8qKlxyXG5cdCAqIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IHNpbmNlIDIuMS41LCB0aGUgbGVnZW5kIGlzIHJlZ2lzdGVyZWQgYXMgYSBwbHVnaW4sIG1ha2luZ1xyXG5cdCAqIENoYXJ0LkxlZ2VuZCBvYnNvbGV0ZS4gVG8gYXZvaWQgYSBicmVha2luZyBjaGFuZ2UsIHdlIGV4cG9ydCB0aGUgTGVnZW5kIGFzIHBhcnQgb2ZcclxuXHQgKiB0aGUgcGx1Z2luLCB3aGljaCBvbmUgd2lsbCBiZSByZS1leHBvc2VkIGluIHRoZSBjaGFydC5qcyBmaWxlLlxyXG5cdCAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL3B1bGwvMjY0MFxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0X2VsZW1lbnQ6IExlZ2VuZCxcclxuXHJcblx0YmVmb3JlSW5pdDogZnVuY3Rpb24oY2hhcnQpIHtcclxuXHRcdHZhciBsZWdlbmRPcHRzID0gY2hhcnQub3B0aW9ucy5sZWdlbmQ7XHJcblxyXG5cdFx0aWYgKGxlZ2VuZE9wdHMpIHtcclxuXHRcdFx0Y3JlYXRlTmV3TGVnZW5kQW5kQXR0YWNoKGNoYXJ0LCBsZWdlbmRPcHRzKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRiZWZvcmVVcGRhdGU6IGZ1bmN0aW9uKGNoYXJ0KSB7XHJcblx0XHR2YXIgbGVnZW5kT3B0cyA9IGNoYXJ0Lm9wdGlvbnMubGVnZW5kO1xyXG5cdFx0dmFyIGxlZ2VuZCA9IGNoYXJ0LmxlZ2VuZDtcclxuXHJcblx0XHRpZiAobGVnZW5kT3B0cykge1xyXG5cdFx0XHRoZWxwZXJzLm1lcmdlSWYobGVnZW5kT3B0cywgZGVmYXVsdHMuZ2xvYmFsLmxlZ2VuZCk7XHJcblxyXG5cdFx0XHRpZiAobGVnZW5kKSB7XHJcblx0XHRcdFx0bGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIGxlZ2VuZCwgbGVnZW5kT3B0cyk7XHJcblx0XHRcdFx0bGVnZW5kLm9wdGlvbnMgPSBsZWdlbmRPcHRzO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNyZWF0ZU5ld0xlZ2VuZEFuZEF0dGFjaChjaGFydCwgbGVnZW5kT3B0cyk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAobGVnZW5kKSB7XHJcblx0XHRcdGxheW91dHMucmVtb3ZlQm94KGNoYXJ0LCBsZWdlbmQpO1xyXG5cdFx0XHRkZWxldGUgY2hhcnQubGVnZW5kO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdGFmdGVyRXZlbnQ6IGZ1bmN0aW9uKGNoYXJ0LCBlKSB7XHJcblx0XHR2YXIgbGVnZW5kID0gY2hhcnQubGVnZW5kO1xyXG5cdFx0aWYgKGxlZ2VuZCkge1xyXG5cdFx0XHRsZWdlbmQuaGFuZGxlRXZlbnQoZSk7XHJcblx0XHR9XHJcblx0fVxyXG59O1xyXG5cclxufSx7XCIyNlwiOjI2LFwiMjdcIjoyNyxcIjMxXCI6MzEsXCI0NlwiOjQ2fV0sNTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKDI2KTtcclxudmFyIEVsZW1lbnQgPSByZXF1aXJlKDI3KTtcclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxudmFyIGxheW91dHMgPSByZXF1aXJlKDMxKTtcclxuXHJcbnZhciBub29wID0gaGVscGVycy5ub29wO1xyXG5cclxuZGVmYXVsdHMuX3NldCgnZ2xvYmFsJywge1xyXG5cdHRpdGxlOiB7XHJcblx0XHRkaXNwbGF5OiBmYWxzZSxcclxuXHRcdGZvbnRTdHlsZTogJ2JvbGQnLFxyXG5cdFx0ZnVsbFdpZHRoOiB0cnVlLFxyXG5cdFx0bGluZUhlaWdodDogMS4yLFxyXG5cdFx0cGFkZGluZzogMTAsXHJcblx0XHRwb3NpdGlvbjogJ3RvcCcsXHJcblx0XHR0ZXh0OiAnJyxcclxuXHRcdHdlaWdodDogMjAwMCAgICAgICAgIC8vIGJ5IGRlZmF1bHQgZ3JlYXRlciB0aGFuIGxlZ2VuZCAoMTAwMCkgdG8gYmUgYWJvdmVcclxuXHR9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIElNUE9SVEFOVDogdGhpcyBjbGFzcyBpcyBleHBvc2VkIHB1YmxpY2x5IGFzIENoYXJ0LkxlZ2VuZCwgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZXF1aXJlZCFcclxuICovXHJcbnZhciBUaXRsZSA9IEVsZW1lbnQuZXh0ZW5kKHtcclxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihjb25maWcpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRoZWxwZXJzLmV4dGVuZChtZSwgY29uZmlnKTtcclxuXHJcblx0XHQvLyBDb250YWlucyBoaXQgYm94ZXMgZm9yIGVhY2ggZGF0YXNldCAoaW4gZGF0YXNldCBvcmRlcilcclxuXHRcdG1lLmxlZ2VuZEhpdEJveGVzID0gW107XHJcblx0fSxcclxuXHJcblx0Ly8gVGhlc2UgbWV0aG9kcyBhcmUgb3JkZXJlZCBieSBsaWZlY3ljbGUuIFV0aWxpdGllcyB0aGVuIGZvbGxvdy5cclxuXHJcblx0YmVmb3JlVXBkYXRlOiBub29wLFxyXG5cdHVwZGF0ZTogZnVuY3Rpb24obWF4V2lkdGgsIG1heEhlaWdodCwgbWFyZ2lucykge1xyXG5cdFx0dmFyIG1lID0gdGhpcztcclxuXHJcblx0XHQvLyBVcGRhdGUgTGlmZWN5Y2xlIC0gUHJvYmFibHkgZG9uJ3Qgd2FudCB0byBldmVyIGV4dGVuZCBvciBvdmVyd3JpdGUgdGhpcyBmdW5jdGlvbiA7KVxyXG5cdFx0bWUuYmVmb3JlVXBkYXRlKCk7XHJcblxyXG5cdFx0Ly8gQWJzb3JiIHRoZSBtYXN0ZXIgbWVhc3VyZW1lbnRzXHJcblx0XHRtZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xyXG5cdFx0bWUubWF4SGVpZ2h0ID0gbWF4SGVpZ2h0O1xyXG5cdFx0bWUubWFyZ2lucyA9IG1hcmdpbnM7XHJcblxyXG5cdFx0Ly8gRGltZW5zaW9uc1xyXG5cdFx0bWUuYmVmb3JlU2V0RGltZW5zaW9ucygpO1xyXG5cdFx0bWUuc2V0RGltZW5zaW9ucygpO1xyXG5cdFx0bWUuYWZ0ZXJTZXREaW1lbnNpb25zKCk7XHJcblx0XHQvLyBMYWJlbHNcclxuXHRcdG1lLmJlZm9yZUJ1aWxkTGFiZWxzKCk7XHJcblx0XHRtZS5idWlsZExhYmVscygpO1xyXG5cdFx0bWUuYWZ0ZXJCdWlsZExhYmVscygpO1xyXG5cclxuXHRcdC8vIEZpdFxyXG5cdFx0bWUuYmVmb3JlRml0KCk7XHJcblx0XHRtZS5maXQoKTtcclxuXHRcdG1lLmFmdGVyRml0KCk7XHJcblx0XHQvL1xyXG5cdFx0bWUuYWZ0ZXJVcGRhdGUoKTtcclxuXHJcblx0XHRyZXR1cm4gbWUubWluU2l6ZTtcclxuXHJcblx0fSxcclxuXHRhZnRlclVwZGF0ZTogbm9vcCxcclxuXHJcblx0Ly9cclxuXHJcblx0YmVmb3JlU2V0RGltZW5zaW9uczogbm9vcCxcclxuXHRzZXREaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHQvLyBTZXQgdGhlIHVuY29uc3RyYWluZWQgZGltZW5zaW9uIGJlZm9yZSBsYWJlbCByb3RhdGlvblxyXG5cdFx0aWYgKG1lLmlzSG9yaXpvbnRhbCgpKSB7XHJcblx0XHRcdC8vIFJlc2V0IHBvc2l0aW9uIGJlZm9yZSBjYWxjdWxhdGluZyByb3RhdGlvblxyXG5cdFx0XHRtZS53aWR0aCA9IG1lLm1heFdpZHRoO1xyXG5cdFx0XHRtZS5sZWZ0ID0gMDtcclxuXHRcdFx0bWUucmlnaHQgPSBtZS53aWR0aDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1lLmhlaWdodCA9IG1lLm1heEhlaWdodDtcclxuXHJcblx0XHRcdC8vIFJlc2V0IHBvc2l0aW9uIGJlZm9yZSBjYWxjdWxhdGluZyByb3RhdGlvblxyXG5cdFx0XHRtZS50b3AgPSAwO1xyXG5cdFx0XHRtZS5ib3R0b20gPSBtZS5oZWlnaHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVzZXQgcGFkZGluZ1xyXG5cdFx0bWUucGFkZGluZ0xlZnQgPSAwO1xyXG5cdFx0bWUucGFkZGluZ1RvcCA9IDA7XHJcblx0XHRtZS5wYWRkaW5nUmlnaHQgPSAwO1xyXG5cdFx0bWUucGFkZGluZ0JvdHRvbSA9IDA7XHJcblxyXG5cdFx0Ly8gUmVzZXQgbWluU2l6ZVxyXG5cdFx0bWUubWluU2l6ZSA9IHtcclxuXHRcdFx0d2lkdGg6IDAsXHJcblx0XHRcdGhlaWdodDogMFxyXG5cdFx0fTtcclxuXHR9LFxyXG5cdGFmdGVyU2V0RGltZW5zaW9uczogbm9vcCxcclxuXHJcblx0Ly9cclxuXHJcblx0YmVmb3JlQnVpbGRMYWJlbHM6IG5vb3AsXHJcblx0YnVpbGRMYWJlbHM6IG5vb3AsXHJcblx0YWZ0ZXJCdWlsZExhYmVsczogbm9vcCxcclxuXHJcblx0Ly9cclxuXHJcblx0YmVmb3JlRml0OiBub29wLFxyXG5cdGZpdDogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0dmFyIHZhbHVlT3JEZWZhdWx0ID0gaGVscGVycy52YWx1ZU9yRGVmYXVsdDtcclxuXHRcdHZhciBvcHRzID0gbWUub3B0aW9ucztcclxuXHRcdHZhciBkaXNwbGF5ID0gb3B0cy5kaXNwbGF5O1xyXG5cdFx0dmFyIGZvbnRTaXplID0gdmFsdWVPckRlZmF1bHQob3B0cy5mb250U2l6ZSwgZGVmYXVsdHMuZ2xvYmFsLmRlZmF1bHRGb250U2l6ZSk7XHJcblx0XHR2YXIgbWluU2l6ZSA9IG1lLm1pblNpemU7XHJcblx0XHR2YXIgbGluZUNvdW50ID0gaGVscGVycy5pc0FycmF5KG9wdHMudGV4dCkgPyBvcHRzLnRleHQubGVuZ3RoIDogMTtcclxuXHRcdHZhciBsaW5lSGVpZ2h0ID0gaGVscGVycy5vcHRpb25zLnRvTGluZUhlaWdodChvcHRzLmxpbmVIZWlnaHQsIGZvbnRTaXplKTtcclxuXHRcdHZhciB0ZXh0U2l6ZSA9IGRpc3BsYXkgPyAobGluZUNvdW50ICogbGluZUhlaWdodCkgKyAob3B0cy5wYWRkaW5nICogMikgOiAwO1xyXG5cclxuXHRcdGlmIChtZS5pc0hvcml6b250YWwoKSkge1xyXG5cdFx0XHRtaW5TaXplLndpZHRoID0gbWUubWF4V2lkdGg7IC8vIGZpbGwgYWxsIHRoZSB3aWR0aFxyXG5cdFx0XHRtaW5TaXplLmhlaWdodCA9IHRleHRTaXplO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bWluU2l6ZS53aWR0aCA9IHRleHRTaXplO1xyXG5cdFx0XHRtaW5TaXplLmhlaWdodCA9IG1lLm1heEhlaWdodDsgLy8gZmlsbCBhbGwgdGhlIGhlaWdodFxyXG5cdFx0fVxyXG5cclxuXHRcdG1lLndpZHRoID0gbWluU2l6ZS53aWR0aDtcclxuXHRcdG1lLmhlaWdodCA9IG1pblNpemUuaGVpZ2h0O1xyXG5cclxuXHR9LFxyXG5cdGFmdGVyRml0OiBub29wLFxyXG5cclxuXHQvLyBTaGFyZWQgTWV0aG9kc1xyXG5cdGlzSG9yaXpvbnRhbDogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgcG9zID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uO1xyXG5cdFx0cmV0dXJuIHBvcyA9PT0gJ3RvcCcgfHwgcG9zID09PSAnYm90dG9tJztcclxuXHR9LFxyXG5cclxuXHQvLyBBY3R1YWxseSBkcmF3IHRoZSB0aXRsZSBibG9jayBvbiB0aGUgY2FudmFzXHJcblx0ZHJhdzogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0dmFyIGN0eCA9IG1lLmN0eDtcclxuXHRcdHZhciB2YWx1ZU9yRGVmYXVsdCA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQ7XHJcblx0XHR2YXIgb3B0cyA9IG1lLm9wdGlvbnM7XHJcblx0XHR2YXIgZ2xvYmFsRGVmYXVsdHMgPSBkZWZhdWx0cy5nbG9iYWw7XHJcblxyXG5cdFx0aWYgKG9wdHMuZGlzcGxheSkge1xyXG5cdFx0XHR2YXIgZm9udFNpemUgPSB2YWx1ZU9yRGVmYXVsdChvcHRzLmZvbnRTaXplLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFNpemUpO1xyXG5cdFx0XHR2YXIgZm9udFN0eWxlID0gdmFsdWVPckRlZmF1bHQob3B0cy5mb250U3R5bGUsIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250U3R5bGUpO1xyXG5cdFx0XHR2YXIgZm9udEZhbWlseSA9IHZhbHVlT3JEZWZhdWx0KG9wdHMuZm9udEZhbWlseSwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRGYW1pbHkpO1xyXG5cdFx0XHR2YXIgdGl0bGVGb250ID0gaGVscGVycy5mb250U3RyaW5nKGZvbnRTaXplLCBmb250U3R5bGUsIGZvbnRGYW1pbHkpO1xyXG5cdFx0XHR2YXIgbGluZUhlaWdodCA9IGhlbHBlcnMub3B0aW9ucy50b0xpbmVIZWlnaHQob3B0cy5saW5lSGVpZ2h0LCBmb250U2l6ZSk7XHJcblx0XHRcdHZhciBvZmZzZXQgPSBsaW5lSGVpZ2h0IC8gMiArIG9wdHMucGFkZGluZztcclxuXHRcdFx0dmFyIHJvdGF0aW9uID0gMDtcclxuXHRcdFx0dmFyIHRvcCA9IG1lLnRvcDtcclxuXHRcdFx0dmFyIGxlZnQgPSBtZS5sZWZ0O1xyXG5cdFx0XHR2YXIgYm90dG9tID0gbWUuYm90dG9tO1xyXG5cdFx0XHR2YXIgcmlnaHQgPSBtZS5yaWdodDtcclxuXHRcdFx0dmFyIG1heFdpZHRoLCB0aXRsZVgsIHRpdGxlWTtcclxuXHJcblx0XHRcdGN0eC5maWxsU3R5bGUgPSB2YWx1ZU9yRGVmYXVsdChvcHRzLmZvbnRDb2xvciwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRDb2xvcik7IC8vIHJlbmRlciBpbiBjb3JyZWN0IGNvbG91clxyXG5cdFx0XHRjdHguZm9udCA9IHRpdGxlRm9udDtcclxuXHJcblx0XHRcdC8vIEhvcml6b250YWxcclxuXHRcdFx0aWYgKG1lLmlzSG9yaXpvbnRhbCgpKSB7XHJcblx0XHRcdFx0dGl0bGVYID0gbGVmdCArICgocmlnaHQgLSBsZWZ0KSAvIDIpOyAvLyBtaWRwb2ludCBvZiB0aGUgd2lkdGhcclxuXHRcdFx0XHR0aXRsZVkgPSB0b3AgKyBvZmZzZXQ7XHJcblx0XHRcdFx0bWF4V2lkdGggPSByaWdodCAtIGxlZnQ7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGl0bGVYID0gb3B0cy5wb3NpdGlvbiA9PT0gJ2xlZnQnID8gbGVmdCArIG9mZnNldCA6IHJpZ2h0IC0gb2Zmc2V0O1xyXG5cdFx0XHRcdHRpdGxlWSA9IHRvcCArICgoYm90dG9tIC0gdG9wKSAvIDIpO1xyXG5cdFx0XHRcdG1heFdpZHRoID0gYm90dG9tIC0gdG9wO1xyXG5cdFx0XHRcdHJvdGF0aW9uID0gTWF0aC5QSSAqIChvcHRzLnBvc2l0aW9uID09PSAnbGVmdCcgPyAtMC41IDogMC41KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y3R4LnNhdmUoKTtcclxuXHRcdFx0Y3R4LnRyYW5zbGF0ZSh0aXRsZVgsIHRpdGxlWSk7XHJcblx0XHRcdGN0eC5yb3RhdGUocm90YXRpb24pO1xyXG5cdFx0XHRjdHgudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0XHRcdGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcclxuXHJcblx0XHRcdHZhciB0ZXh0ID0gb3B0cy50ZXh0O1xyXG5cdFx0XHRpZiAoaGVscGVycy5pc0FycmF5KHRleHQpKSB7XHJcblx0XHRcdFx0dmFyIHkgPSAwO1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7ICsraSkge1xyXG5cdFx0XHRcdFx0Y3R4LmZpbGxUZXh0KHRleHRbaV0sIDAsIHksIG1heFdpZHRoKTtcclxuXHRcdFx0XHRcdHkgKz0gbGluZUhlaWdodDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y3R4LmZpbGxUZXh0KHRleHQsIDAsIDAsIG1heFdpZHRoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y3R4LnJlc3RvcmUoKTtcclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlTmV3VGl0bGVCbG9ja0FuZEF0dGFjaChjaGFydCwgdGl0bGVPcHRzKSB7XHJcblx0dmFyIHRpdGxlID0gbmV3IFRpdGxlKHtcclxuXHRcdGN0eDogY2hhcnQuY3R4LFxyXG5cdFx0b3B0aW9uczogdGl0bGVPcHRzLFxyXG5cdFx0Y2hhcnQ6IGNoYXJ0XHJcblx0fSk7XHJcblxyXG5cdGxheW91dHMuY29uZmlndXJlKGNoYXJ0LCB0aXRsZSwgdGl0bGVPcHRzKTtcclxuXHRsYXlvdXRzLmFkZEJveChjaGFydCwgdGl0bGUpO1xyXG5cdGNoYXJ0LnRpdGxlQmxvY2sgPSB0aXRsZTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0aWQ6ICd0aXRsZScsXHJcblxyXG5cdC8qKlxyXG5cdCAqIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IHNpbmNlIDIuMS41LCB0aGUgdGl0bGUgaXMgcmVnaXN0ZXJlZCBhcyBhIHBsdWdpbiwgbWFraW5nXHJcblx0ICogQ2hhcnQuVGl0bGUgb2Jzb2xldGUuIFRvIGF2b2lkIGEgYnJlYWtpbmcgY2hhbmdlLCB3ZSBleHBvcnQgdGhlIFRpdGxlIGFzIHBhcnQgb2ZcclxuXHQgKiB0aGUgcGx1Z2luLCB3aGljaCBvbmUgd2lsbCBiZSByZS1leHBvc2VkIGluIHRoZSBjaGFydC5qcyBmaWxlLlxyXG5cdCAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL3B1bGwvMjY0MFxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0X2VsZW1lbnQ6IFRpdGxlLFxyXG5cclxuXHRiZWZvcmVJbml0OiBmdW5jdGlvbihjaGFydCkge1xyXG5cdFx0dmFyIHRpdGxlT3B0cyA9IGNoYXJ0Lm9wdGlvbnMudGl0bGU7XHJcblxyXG5cdFx0aWYgKHRpdGxlT3B0cykge1xyXG5cdFx0XHRjcmVhdGVOZXdUaXRsZUJsb2NrQW5kQXR0YWNoKGNoYXJ0LCB0aXRsZU9wdHMpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdGJlZm9yZVVwZGF0ZTogZnVuY3Rpb24oY2hhcnQpIHtcclxuXHRcdHZhciB0aXRsZU9wdHMgPSBjaGFydC5vcHRpb25zLnRpdGxlO1xyXG5cdFx0dmFyIHRpdGxlQmxvY2sgPSBjaGFydC50aXRsZUJsb2NrO1xyXG5cclxuXHRcdGlmICh0aXRsZU9wdHMpIHtcclxuXHRcdFx0aGVscGVycy5tZXJnZUlmKHRpdGxlT3B0cywgZGVmYXVsdHMuZ2xvYmFsLnRpdGxlKTtcclxuXHJcblx0XHRcdGlmICh0aXRsZUJsb2NrKSB7XHJcblx0XHRcdFx0bGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIHRpdGxlQmxvY2ssIHRpdGxlT3B0cyk7XHJcblx0XHRcdFx0dGl0bGVCbG9jay5vcHRpb25zID0gdGl0bGVPcHRzO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNyZWF0ZU5ld1RpdGxlQmxvY2tBbmRBdHRhY2goY2hhcnQsIHRpdGxlT3B0cyk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAodGl0bGVCbG9jaykge1xyXG5cdFx0XHRsYXlvdXRzLnJlbW92ZUJveChjaGFydCwgdGl0bGVCbG9jayk7XHJcblx0XHRcdGRlbGV0ZSBjaGFydC50aXRsZUJsb2NrO1xyXG5cdFx0fVxyXG5cdH1cclxufTtcclxuXHJcbn0se1wiMjZcIjoyNixcIjI3XCI6MjcsXCIzMVwiOjMxLFwiNDZcIjo0Nn1dLDU0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFNjYWxlID0gcmVxdWlyZSgzMyk7XHJcbnZhciBzY2FsZVNlcnZpY2UgPSByZXF1aXJlKDM0KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcblxyXG5cdC8vIERlZmF1bHQgY29uZmlnIGZvciBhIGNhdGVnb3J5IHNjYWxlXHJcblx0dmFyIGRlZmF1bHRDb25maWcgPSB7XHJcblx0XHRwb3NpdGlvbjogJ2JvdHRvbSdcclxuXHR9O1xyXG5cclxuXHR2YXIgRGF0YXNldFNjYWxlID0gU2NhbGUuZXh0ZW5kKHtcclxuXHRcdC8qKlxyXG5cdFx0KiBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZXQgdGhlIGNvcnJlY3QgbGFiZWxzLiBJZiBkYXRhLnhMYWJlbHMgb3IgZGF0YS55TGFiZWxzIGFyZSBkZWZpbmVkLCB1c2UgdGhvc2VcclxuXHRcdCogZWxzZSBmYWxsIGJhY2sgdG8gZGF0YS5sYWJlbHNcclxuXHRcdCogQHByaXZhdGVcclxuXHRcdCovXHJcblx0XHRnZXRMYWJlbHM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgZGF0YSA9IHRoaXMuY2hhcnQuZGF0YTtcclxuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbHMgfHwgKHRoaXMuaXNIb3Jpem9udGFsKCkgPyBkYXRhLnhMYWJlbHMgOiBkYXRhLnlMYWJlbHMpIHx8IGRhdGEubGFiZWxzO1xyXG5cdFx0fSxcclxuXHJcblx0XHRkZXRlcm1pbmVEYXRhTGltaXRzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIGxhYmVscyA9IG1lLmdldExhYmVscygpO1xyXG5cdFx0XHRtZS5taW5JbmRleCA9IDA7XHJcblx0XHRcdG1lLm1heEluZGV4ID0gbGFiZWxzLmxlbmd0aCAtIDE7XHJcblx0XHRcdHZhciBmaW5kSW5kZXg7XHJcblxyXG5cdFx0XHRpZiAobWUub3B0aW9ucy50aWNrcy5taW4gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdC8vIHVzZXIgc3BlY2lmaWVkIG1pbiB2YWx1ZVxyXG5cdFx0XHRcdGZpbmRJbmRleCA9IGxhYmVscy5pbmRleE9mKG1lLm9wdGlvbnMudGlja3MubWluKTtcclxuXHRcdFx0XHRtZS5taW5JbmRleCA9IGZpbmRJbmRleCAhPT0gLTEgPyBmaW5kSW5kZXggOiBtZS5taW5JbmRleDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKG1lLm9wdGlvbnMudGlja3MubWF4ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHQvLyB1c2VyIHNwZWNpZmllZCBtYXggdmFsdWVcclxuXHRcdFx0XHRmaW5kSW5kZXggPSBsYWJlbHMuaW5kZXhPZihtZS5vcHRpb25zLnRpY2tzLm1heCk7XHJcblx0XHRcdFx0bWUubWF4SW5kZXggPSBmaW5kSW5kZXggIT09IC0xID8gZmluZEluZGV4IDogbWUubWF4SW5kZXg7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG1lLm1pbiA9IGxhYmVsc1ttZS5taW5JbmRleF07XHJcblx0XHRcdG1lLm1heCA9IGxhYmVsc1ttZS5tYXhJbmRleF07XHJcblx0XHR9LFxyXG5cclxuXHRcdGJ1aWxkVGlja3M6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgbGFiZWxzID0gbWUuZ2V0TGFiZWxzKCk7XHJcblx0XHRcdC8vIElmIHdlIGFyZSB2aWV3aW5nIHNvbWUgc3Vic2V0IG9mIGxhYmVscywgc2xpY2UgdGhlIG9yaWdpbmFsIGFycmF5XHJcblx0XHRcdG1lLnRpY2tzID0gKG1lLm1pbkluZGV4ID09PSAwICYmIG1lLm1heEluZGV4ID09PSBsYWJlbHMubGVuZ3RoIC0gMSkgPyBsYWJlbHMgOiBsYWJlbHMuc2xpY2UobWUubWluSW5kZXgsIG1lLm1heEluZGV4ICsgMSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGdldExhYmVsRm9ySW5kZXg6IGZ1bmN0aW9uKGluZGV4LCBkYXRhc2V0SW5kZXgpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIGRhdGEgPSBtZS5jaGFydC5kYXRhO1xyXG5cdFx0XHR2YXIgaXNIb3Jpem9udGFsID0gbWUuaXNIb3Jpem9udGFsKCk7XHJcblxyXG5cdFx0XHRpZiAoZGF0YS55TGFiZWxzICYmICFpc0hvcml6b250YWwpIHtcclxuXHRcdFx0XHRyZXR1cm4gbWUuZ2V0UmlnaHRWYWx1ZShkYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uZGF0YVtpbmRleF0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBtZS50aWNrc1tpbmRleCAtIG1lLm1pbkluZGV4XTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gVXNlZCB0byBnZXQgZGF0YSB2YWx1ZSBsb2NhdGlvbnMuICBWYWx1ZSBjYW4gZWl0aGVyIGJlIGFuIGluZGV4IG9yIGEgbnVtZXJpY2FsIHZhbHVlXHJcblx0XHRnZXRQaXhlbEZvclZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIG9mZnNldCA9IG1lLm9wdGlvbnMub2Zmc2V0O1xyXG5cdFx0XHQvLyAxIGlzIGFkZGVkIGJlY2F1c2Ugd2UgbmVlZCB0aGUgbGVuZ3RoIGJ1dCB3ZSBoYXZlIHRoZSBpbmRleGVzXHJcblx0XHRcdHZhciBvZmZzZXRBbXQgPSBNYXRoLm1heCgobWUubWF4SW5kZXggKyAxIC0gbWUubWluSW5kZXggLSAob2Zmc2V0ID8gMCA6IDEpKSwgMSk7XHJcblxyXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGRhdGEgb2JqZWN0LCB0aGVuIGluZGV4IGlzIHRoZSBpbmRleCBpbiB0aGUgZGF0YSBhcnJheSxcclxuXHRcdFx0Ly8gbm90IHRoZSBpbmRleCBvZiB0aGUgc2NhbGUuIFdlIG5lZWQgdG8gY2hhbmdlIHRoYXQuXHJcblx0XHRcdHZhciB2YWx1ZUNhdGVnb3J5O1xyXG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdHZhbHVlQ2F0ZWdvcnkgPSBtZS5pc0hvcml6b250YWwoKSA/IHZhbHVlLnggOiB2YWx1ZS55O1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh2YWx1ZUNhdGVnb3J5ICE9PSB1bmRlZmluZWQgfHwgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXNOYU4oaW5kZXgpKSkge1xyXG5cdFx0XHRcdHZhciBsYWJlbHMgPSBtZS5nZXRMYWJlbHMoKTtcclxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlQ2F0ZWdvcnkgfHwgdmFsdWU7XHJcblx0XHRcdFx0dmFyIGlkeCA9IGxhYmVscy5pbmRleE9mKHZhbHVlKTtcclxuXHRcdFx0XHRpbmRleCA9IGlkeCAhPT0gLTEgPyBpZHggOiBpbmRleDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKG1lLmlzSG9yaXpvbnRhbCgpKSB7XHJcblx0XHRcdFx0dmFyIHZhbHVlV2lkdGggPSBtZS53aWR0aCAvIG9mZnNldEFtdDtcclxuXHRcdFx0XHR2YXIgd2lkdGhPZmZzZXQgPSAodmFsdWVXaWR0aCAqIChpbmRleCAtIG1lLm1pbkluZGV4KSk7XHJcblxyXG5cdFx0XHRcdGlmIChvZmZzZXQpIHtcclxuXHRcdFx0XHRcdHdpZHRoT2Zmc2V0ICs9ICh2YWx1ZVdpZHRoIC8gMik7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gbWUubGVmdCArIE1hdGgucm91bmQod2lkdGhPZmZzZXQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciB2YWx1ZUhlaWdodCA9IG1lLmhlaWdodCAvIG9mZnNldEFtdDtcclxuXHRcdFx0dmFyIGhlaWdodE9mZnNldCA9ICh2YWx1ZUhlaWdodCAqIChpbmRleCAtIG1lLm1pbkluZGV4KSk7XHJcblxyXG5cdFx0XHRpZiAob2Zmc2V0KSB7XHJcblx0XHRcdFx0aGVpZ2h0T2Zmc2V0ICs9ICh2YWx1ZUhlaWdodCAvIDIpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gbWUudG9wICsgTWF0aC5yb3VuZChoZWlnaHRPZmZzZXQpO1xyXG5cdFx0fSxcclxuXHRcdGdldFBpeGVsRm9yVGljazogZnVuY3Rpb24oaW5kZXgpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLnRpY2tzW2luZGV4XSwgaW5kZXggKyB0aGlzLm1pbkluZGV4LCBudWxsKTtcclxuXHRcdH0sXHJcblx0XHRnZXRWYWx1ZUZvclBpeGVsOiBmdW5jdGlvbihwaXhlbCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgb2Zmc2V0ID0gbWUub3B0aW9ucy5vZmZzZXQ7XHJcblx0XHRcdHZhciB2YWx1ZTtcclxuXHRcdFx0dmFyIG9mZnNldEFtdCA9IE1hdGgubWF4KChtZS5fdGlja3MubGVuZ3RoIC0gKG9mZnNldCA/IDAgOiAxKSksIDEpO1xyXG5cdFx0XHR2YXIgaG9yeiA9IG1lLmlzSG9yaXpvbnRhbCgpO1xyXG5cdFx0XHR2YXIgdmFsdWVEaW1lbnNpb24gPSAoaG9yeiA/IG1lLndpZHRoIDogbWUuaGVpZ2h0KSAvIG9mZnNldEFtdDtcclxuXHJcblx0XHRcdHBpeGVsIC09IGhvcnogPyBtZS5sZWZ0IDogbWUudG9wO1xyXG5cclxuXHRcdFx0aWYgKG9mZnNldCkge1xyXG5cdFx0XHRcdHBpeGVsIC09ICh2YWx1ZURpbWVuc2lvbiAvIDIpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAocGl4ZWwgPD0gMCkge1xyXG5cdFx0XHRcdHZhbHVlID0gMDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR2YWx1ZSA9IE1hdGgucm91bmQocGl4ZWwgLyB2YWx1ZURpbWVuc2lvbik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB2YWx1ZSArIG1lLm1pbkluZGV4O1xyXG5cdFx0fSxcclxuXHRcdGdldEJhc2VQaXhlbDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmJvdHRvbTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0c2NhbGVTZXJ2aWNlLnJlZ2lzdGVyU2NhbGVUeXBlKCdjYXRlZ29yeScsIERhdGFzZXRTY2FsZSwgZGVmYXVsdENvbmZpZyk7XHJcbn07XHJcblxyXG59LHtcIjMzXCI6MzMsXCIzNFwiOjM0fV0sNTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKDI2KTtcclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxudmFyIHNjYWxlU2VydmljZSA9IHJlcXVpcmUoMzQpO1xyXG52YXIgVGlja3MgPSByZXF1aXJlKDM1KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ2hhcnQpIHtcclxuXHJcblx0dmFyIGRlZmF1bHRDb25maWcgPSB7XHJcblx0XHRwb3NpdGlvbjogJ2xlZnQnLFxyXG5cdFx0dGlja3M6IHtcclxuXHRcdFx0Y2FsbGJhY2s6IFRpY2tzLmZvcm1hdHRlcnMubGluZWFyXHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0dmFyIExpbmVhclNjYWxlID0gQ2hhcnQuTGluZWFyU2NhbGVCYXNlLmV4dGVuZCh7XHJcblxyXG5cdFx0ZGV0ZXJtaW5lRGF0YUxpbWl0czogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBvcHRzID0gbWUub3B0aW9ucztcclxuXHRcdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XHJcblx0XHRcdHZhciBkYXRhID0gY2hhcnQuZGF0YTtcclxuXHRcdFx0dmFyIGRhdGFzZXRzID0gZGF0YS5kYXRhc2V0cztcclxuXHRcdFx0dmFyIGlzSG9yaXpvbnRhbCA9IG1lLmlzSG9yaXpvbnRhbCgpO1xyXG5cdFx0XHR2YXIgREVGQVVMVF9NSU4gPSAwO1xyXG5cdFx0XHR2YXIgREVGQVVMVF9NQVggPSAxO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gSURNYXRjaGVzKG1ldGEpIHtcclxuXHRcdFx0XHRyZXR1cm4gaXNIb3Jpem9udGFsID8gbWV0YS54QXhpc0lEID09PSBtZS5pZCA6IG1ldGEueUF4aXNJRCA9PT0gbWUuaWQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZpcnN0IENhbGN1bGF0ZSB0aGUgcmFuZ2VcclxuXHRcdFx0bWUubWluID0gbnVsbDtcclxuXHRcdFx0bWUubWF4ID0gbnVsbDtcclxuXHJcblx0XHRcdHZhciBoYXNTdGFja3MgPSBvcHRzLnN0YWNrZWQ7XHJcblx0XHRcdGlmIChoYXNTdGFja3MgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XHJcblx0XHRcdFx0XHRpZiAoaGFzU3RhY2tzKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR2YXIgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XHJcblx0XHRcdFx0XHRpZiAoY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShkYXRhc2V0SW5kZXgpICYmIElETWF0Y2hlcyhtZXRhKSAmJlxyXG5cdFx0XHRcdFx0XHRtZXRhLnN0YWNrICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0aGFzU3RhY2tzID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKG9wdHMuc3RhY2tlZCB8fCBoYXNTdGFja3MpIHtcclxuXHRcdFx0XHR2YXIgdmFsdWVzUGVyU3RhY2sgPSB7fTtcclxuXHJcblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXRzLCBmdW5jdGlvbihkYXRhc2V0LCBkYXRhc2V0SW5kZXgpIHtcclxuXHRcdFx0XHRcdHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcclxuXHRcdFx0XHRcdHZhciBrZXkgPSBbXHJcblx0XHRcdFx0XHRcdG1ldGEudHlwZSxcclxuXHRcdFx0XHRcdFx0Ly8gd2UgaGF2ZSBhIHNlcGFyYXRlIHN0YWNrIGZvciBzdGFjaz11bmRlZmluZWQgZGF0YXNldHMgd2hlbiB0aGUgb3B0cy5zdGFja2VkIGlzIHVuZGVmaW5lZFxyXG5cdFx0XHRcdFx0XHQoKG9wdHMuc3RhY2tlZCA9PT0gdW5kZWZpbmVkICYmIG1ldGEuc3RhY2sgPT09IHVuZGVmaW5lZCkgPyBkYXRhc2V0SW5kZXggOiAnJyksXHJcblx0XHRcdFx0XHRcdG1ldGEuc3RhY2tcclxuXHRcdFx0XHRcdF0uam9pbignLicpO1xyXG5cclxuXHRcdFx0XHRcdGlmICh2YWx1ZXNQZXJTdGFja1trZXldID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzUGVyU3RhY2tba2V5XSA9IHtcclxuXHRcdFx0XHRcdFx0XHRwb3NpdGl2ZVZhbHVlczogW10sXHJcblx0XHRcdFx0XHRcdFx0bmVnYXRpdmVWYWx1ZXM6IFtdXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gU3RvcmUgdGhlc2UgcGVyIHR5cGVcclxuXHRcdFx0XHRcdHZhciBwb3NpdGl2ZVZhbHVlcyA9IHZhbHVlc1BlclN0YWNrW2tleV0ucG9zaXRpdmVWYWx1ZXM7XHJcblx0XHRcdFx0XHR2YXIgbmVnYXRpdmVWYWx1ZXMgPSB2YWx1ZXNQZXJTdGFja1trZXldLm5lZ2F0aXZlVmFsdWVzO1xyXG5cclxuXHRcdFx0XHRcdGlmIChjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGRhdGFzZXRJbmRleCkgJiYgSURNYXRjaGVzKG1ldGEpKSB7XHJcblx0XHRcdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0LmRhdGEsIGZ1bmN0aW9uKHJhd1ZhbHVlLCBpbmRleCkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9ICttZS5nZXRSaWdodFZhbHVlKHJhd1ZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoaXNOYU4odmFsdWUpIHx8IG1ldGEuZGF0YVtpbmRleF0uaGlkZGVuKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRwb3NpdGl2ZVZhbHVlc1tpbmRleF0gPSBwb3NpdGl2ZVZhbHVlc1tpbmRleF0gfHwgMDtcclxuXHRcdFx0XHRcdFx0XHRuZWdhdGl2ZVZhbHVlc1tpbmRleF0gPSBuZWdhdGl2ZVZhbHVlc1tpbmRleF0gfHwgMDtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKG9wdHMucmVsYXRpdmVQb2ludHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHBvc2l0aXZlVmFsdWVzW2luZGV4XSA9IDEwMDtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHZhbHVlIDwgMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bmVnYXRpdmVWYWx1ZXNbaW5kZXhdICs9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRwb3NpdGl2ZVZhbHVlc1tpbmRleF0gKz0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aGVscGVycy5lYWNoKHZhbHVlc1BlclN0YWNrLCBmdW5jdGlvbih2YWx1ZXNGb3JUeXBlKSB7XHJcblx0XHRcdFx0XHR2YXIgdmFsdWVzID0gdmFsdWVzRm9yVHlwZS5wb3NpdGl2ZVZhbHVlcy5jb25jYXQodmFsdWVzRm9yVHlwZS5uZWdhdGl2ZVZhbHVlcyk7XHJcblx0XHRcdFx0XHR2YXIgbWluVmFsID0gaGVscGVycy5taW4odmFsdWVzKTtcclxuXHRcdFx0XHRcdHZhciBtYXhWYWwgPSBoZWxwZXJzLm1heCh2YWx1ZXMpO1xyXG5cdFx0XHRcdFx0bWUubWluID0gbWUubWluID09PSBudWxsID8gbWluVmFsIDogTWF0aC5taW4obWUubWluLCBtaW5WYWwpO1xyXG5cdFx0XHRcdFx0bWUubWF4ID0gbWUubWF4ID09PSBudWxsID8gbWF4VmFsIDogTWF0aC5tYXgobWUubWF4LCBtYXhWYWwpO1xyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldHMsIGZ1bmN0aW9uKGRhdGFzZXQsIGRhdGFzZXRJbmRleCkge1xyXG5cdFx0XHRcdFx0dmFyIG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xyXG5cdFx0XHRcdFx0aWYgKGNoYXJ0LmlzRGF0YXNldFZpc2libGUoZGF0YXNldEluZGV4KSAmJiBJRE1hdGNoZXMobWV0YSkpIHtcclxuXHRcdFx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQuZGF0YSwgZnVuY3Rpb24ocmF3VmFsdWUsIGluZGV4KSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gK21lLmdldFJpZ2h0VmFsdWUocmF3VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpc05hTih2YWx1ZSkgfHwgbWV0YS5kYXRhW2luZGV4XS5oaWRkZW4pIHtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChtZS5taW4gPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG1lLm1pbiA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodmFsdWUgPCBtZS5taW4pIHtcclxuXHRcdFx0XHRcdFx0XHRcdG1lLm1pbiA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKG1lLm1heCA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bWUubWF4ID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICh2YWx1ZSA+IG1lLm1heCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bWUubWF4ID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bWUubWluID0gaXNGaW5pdGUobWUubWluKSAmJiAhaXNOYU4obWUubWluKSA/IG1lLm1pbiA6IERFRkFVTFRfTUlOO1xyXG5cdFx0XHRtZS5tYXggPSBpc0Zpbml0ZShtZS5tYXgpICYmICFpc05hTihtZS5tYXgpID8gbWUubWF4IDogREVGQVVMVF9NQVg7XHJcblxyXG5cdFx0XHQvLyBDb21tb24gYmFzZSBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgdGlja3MubWluLCB0aWNrcy5tYXgsIHRpY2tzLmJlZ2luQXRaZXJvXHJcblx0XHRcdHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpO1xyXG5cdFx0fSxcclxuXHRcdGdldFRpY2tMaW1pdDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtYXhUaWNrcztcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIHRpY2tPcHRzID0gbWUub3B0aW9ucy50aWNrcztcclxuXHJcblx0XHRcdGlmIChtZS5pc0hvcml6b250YWwoKSkge1xyXG5cdFx0XHRcdG1heFRpY2tzID0gTWF0aC5taW4odGlja09wdHMubWF4VGlja3NMaW1pdCA/IHRpY2tPcHRzLm1heFRpY2tzTGltaXQgOiAxMSwgTWF0aC5jZWlsKG1lLndpZHRoIC8gNTApKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBUaGUgZmFjdG9yIG9mIDIgdXNlZCB0byBzY2FsZSB0aGUgZm9udCBzaXplIGhhcyBiZWVuIGV4cGVyaW1lbnRhbGx5IGRldGVybWluZWQuXHJcblx0XHRcdFx0dmFyIHRpY2tGb250U2l6ZSA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQodGlja09wdHMuZm9udFNpemUsIGRlZmF1bHRzLmdsb2JhbC5kZWZhdWx0Rm9udFNpemUpO1xyXG5cdFx0XHRcdG1heFRpY2tzID0gTWF0aC5taW4odGlja09wdHMubWF4VGlja3NMaW1pdCA/IHRpY2tPcHRzLm1heFRpY2tzTGltaXQgOiAxMSwgTWF0aC5jZWlsKG1lLmhlaWdodCAvICgyICogdGlja0ZvbnRTaXplKSkpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gbWF4VGlja3M7XHJcblx0XHR9LFxyXG5cdFx0Ly8gQ2FsbGVkIGFmdGVyIHRoZSB0aWNrcyBhcmUgYnVpbHQuIFdlIG5lZWRcclxuXHRcdGhhbmRsZURpcmVjdGlvbmFsQ2hhbmdlczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmICghdGhpcy5pc0hvcml6b250YWwoKSkge1xyXG5cdFx0XHRcdC8vIFdlIGFyZSBpbiBhIHZlcnRpY2FsIG9yaWVudGF0aW9uLiBUaGUgdG9wIHZhbHVlIGlzIHRoZSBoaWdoZXN0LiBTbyByZXZlcnNlIHRoZSBhcnJheVxyXG5cdFx0XHRcdHRoaXMudGlja3MucmV2ZXJzZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0Z2V0TGFiZWxGb3JJbmRleDogZnVuY3Rpb24oaW5kZXgsIGRhdGFzZXRJbmRleCkge1xyXG5cdFx0XHRyZXR1cm4gK3RoaXMuZ2V0UmlnaHRWYWx1ZSh0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XS5kYXRhW2luZGV4XSk7XHJcblx0XHR9LFxyXG5cdFx0Ly8gVXRpbHNcclxuXHRcdGdldFBpeGVsRm9yVmFsdWU6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcblx0XHRcdC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgZml0IGhhcyBiZWVuIHJ1biBzbyB0aGF0XHJcblx0XHRcdC8vIHRoaXMubGVmdCwgdGhpcy50b3AsIHRoaXMucmlnaHQsIGFuZCB0aGlzLmJvdHRvbSBoYXZlIGJlZW4gZGVmaW5lZFxyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgc3RhcnQgPSBtZS5zdGFydDtcclxuXHJcblx0XHRcdHZhciByaWdodFZhbHVlID0gK21lLmdldFJpZ2h0VmFsdWUodmFsdWUpO1xyXG5cdFx0XHR2YXIgcGl4ZWw7XHJcblx0XHRcdHZhciByYW5nZSA9IG1lLmVuZCAtIHN0YXJ0O1xyXG5cclxuXHRcdFx0aWYgKG1lLmlzSG9yaXpvbnRhbCgpKSB7XHJcblx0XHRcdFx0cGl4ZWwgPSBtZS5sZWZ0ICsgKG1lLndpZHRoIC8gcmFuZ2UgKiAocmlnaHRWYWx1ZSAtIHN0YXJ0KSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cGl4ZWwgPSBtZS5ib3R0b20gLSAobWUuaGVpZ2h0IC8gcmFuZ2UgKiAocmlnaHRWYWx1ZSAtIHN0YXJ0KSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHBpeGVsO1xyXG5cdFx0fSxcclxuXHRcdGdldFZhbHVlRm9yUGl4ZWw6IGZ1bmN0aW9uKHBpeGVsKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBpc0hvcml6b250YWwgPSBtZS5pc0hvcml6b250YWwoKTtcclxuXHRcdFx0dmFyIGlubmVyRGltZW5zaW9uID0gaXNIb3Jpem9udGFsID8gbWUud2lkdGggOiBtZS5oZWlnaHQ7XHJcblx0XHRcdHZhciBvZmZzZXQgPSAoaXNIb3Jpem9udGFsID8gcGl4ZWwgLSBtZS5sZWZ0IDogbWUuYm90dG9tIC0gcGl4ZWwpIC8gaW5uZXJEaW1lbnNpb247XHJcblx0XHRcdHJldHVybiBtZS5zdGFydCArICgobWUuZW5kIC0gbWUuc3RhcnQpICogb2Zmc2V0KTtcclxuXHRcdH0sXHJcblx0XHRnZXRQaXhlbEZvclRpY2s6IGZ1bmN0aW9uKGluZGV4KSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmdldFBpeGVsRm9yVmFsdWUodGhpcy50aWNrc0FzTnVtYmVyc1tpbmRleF0pO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHRzY2FsZVNlcnZpY2UucmVnaXN0ZXJTY2FsZVR5cGUoJ2xpbmVhcicsIExpbmVhclNjYWxlLCBkZWZhdWx0Q29uZmlnKTtcclxufTtcclxuXHJcbn0se1wiMjZcIjoyNixcIjM0XCI6MzQsXCIzNVwiOjM1LFwiNDZcIjo0Nn1dLDU2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxudmFyIFNjYWxlID0gcmVxdWlyZSgzMyk7XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgYSBzZXQgb2YgbGluZWFyIHRpY2tzXHJcbiAqIEBwYXJhbSBnZW5lcmF0aW9uT3B0aW9ucyB0aGUgb3B0aW9ucyB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0aWNrc1xyXG4gKiBAcGFyYW0gZGF0YVJhbmdlIHRoZSByYW5nZSBvZiB0aGUgZGF0YVxyXG4gKiBAcmV0dXJucyB7QXJyYXk8TnVtYmVyPn0gYXJyYXkgb2YgdGljayB2YWx1ZXNcclxuICovXHJcbmZ1bmN0aW9uIGdlbmVyYXRlVGlja3MoZ2VuZXJhdGlvbk9wdGlvbnMsIGRhdGFSYW5nZSkge1xyXG5cdHZhciB0aWNrcyA9IFtdO1xyXG5cdC8vIFRvIGdldCBhIFwibmljZVwiIHZhbHVlIGZvciB0aGUgdGljayBzcGFjaW5nLCB3ZSB3aWxsIHVzZSB0aGUgYXBwcm9wcmlhdGVseSBuYW1lZFxyXG5cdC8vIFwibmljZSBudW1iZXJcIiBhbGdvcml0aG0uIFNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg1MDY4ODEvbmljZS1sYWJlbC1hbGdvcml0aG0tZm9yLWNoYXJ0cy13aXRoLW1pbmltdW0tdGlja3NcclxuXHQvLyBmb3IgZGV0YWlscy5cclxuXHJcblx0dmFyIGZhY3RvcjtcclxuXHR2YXIgcHJlY2lzaW9uO1xyXG5cdHZhciBzcGFjaW5nO1xyXG5cclxuXHRpZiAoZ2VuZXJhdGlvbk9wdGlvbnMuc3RlcFNpemUgJiYgZ2VuZXJhdGlvbk9wdGlvbnMuc3RlcFNpemUgPiAwKSB7XHJcblx0XHRzcGFjaW5nID0gZ2VuZXJhdGlvbk9wdGlvbnMuc3RlcFNpemU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHZhciBuaWNlUmFuZ2UgPSBoZWxwZXJzLm5pY2VOdW0oZGF0YVJhbmdlLm1heCAtIGRhdGFSYW5nZS5taW4sIGZhbHNlKTtcclxuXHRcdHNwYWNpbmcgPSBoZWxwZXJzLm5pY2VOdW0obmljZVJhbmdlIC8gKGdlbmVyYXRpb25PcHRpb25zLm1heFRpY2tzIC0gMSksIHRydWUpO1xyXG5cclxuXHRcdHByZWNpc2lvbiA9IGdlbmVyYXRpb25PcHRpb25zLnByZWNpc2lvbjtcclxuXHRcdGlmIChwcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHQvLyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBwcmVjaXNpb24sIHJvdW5kIHRvIHRoYXQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzXHJcblx0XHRcdGZhY3RvciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xyXG5cdFx0XHRzcGFjaW5nID0gTWF0aC5jZWlsKHNwYWNpbmcgKiBmYWN0b3IpIC8gZmFjdG9yO1xyXG5cdFx0fVxyXG5cdH1cclxuXHR2YXIgbmljZU1pbiA9IE1hdGguZmxvb3IoZGF0YVJhbmdlLm1pbiAvIHNwYWNpbmcpICogc3BhY2luZztcclxuXHR2YXIgbmljZU1heCA9IE1hdGguY2VpbChkYXRhUmFuZ2UubWF4IC8gc3BhY2luZykgKiBzcGFjaW5nO1xyXG5cclxuXHQvLyBJZiBtaW4sIG1heCBhbmQgc3RlcFNpemUgaXMgc2V0IGFuZCB0aGV5IG1ha2UgYW4gZXZlbmx5IHNwYWNlZCBzY2FsZSB1c2UgaXQuXHJcblx0aWYgKCFoZWxwZXJzLmlzTnVsbE9yVW5kZWYoZ2VuZXJhdGlvbk9wdGlvbnMubWluKSAmJiAhaGVscGVycy5pc051bGxPclVuZGVmKGdlbmVyYXRpb25PcHRpb25zLm1heCkgJiYgZ2VuZXJhdGlvbk9wdGlvbnMuc3RlcFNpemUpIHtcclxuXHRcdC8vIElmIHZlcnkgY2xvc2UgdG8gb3VyIHdob2xlIG51bWJlciwgdXNlIGl0LlxyXG5cdFx0aWYgKGhlbHBlcnMuYWxtb3N0V2hvbGUoKGdlbmVyYXRpb25PcHRpb25zLm1heCAtIGdlbmVyYXRpb25PcHRpb25zLm1pbikgLyBnZW5lcmF0aW9uT3B0aW9ucy5zdGVwU2l6ZSwgc3BhY2luZyAvIDEwMDApKSB7XHJcblx0XHRcdG5pY2VNaW4gPSBnZW5lcmF0aW9uT3B0aW9ucy5taW47XHJcblx0XHRcdG5pY2VNYXggPSBnZW5lcmF0aW9uT3B0aW9ucy5tYXg7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR2YXIgbnVtU3BhY2VzID0gKG5pY2VNYXggLSBuaWNlTWluKSAvIHNwYWNpbmc7XHJcblx0Ly8gSWYgdmVyeSBjbG9zZSB0byBvdXIgcm91bmRlZCB2YWx1ZSwgdXNlIGl0LlxyXG5cdGlmIChoZWxwZXJzLmFsbW9zdEVxdWFscyhudW1TcGFjZXMsIE1hdGgucm91bmQobnVtU3BhY2VzKSwgc3BhY2luZyAvIDEwMDApKSB7XHJcblx0XHRudW1TcGFjZXMgPSBNYXRoLnJvdW5kKG51bVNwYWNlcyk7XHJcblx0fSBlbHNlIHtcclxuXHRcdG51bVNwYWNlcyA9IE1hdGguY2VpbChudW1TcGFjZXMpO1xyXG5cdH1cclxuXHJcblx0cHJlY2lzaW9uID0gMTtcclxuXHRpZiAoc3BhY2luZyA8IDEpIHtcclxuXHRcdHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCAxIC0gTWF0aC5mbG9vcihoZWxwZXJzLmxvZzEwKHNwYWNpbmcpKSk7XHJcblx0XHRuaWNlTWluID0gTWF0aC5yb3VuZChuaWNlTWluICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcclxuXHRcdG5pY2VNYXggPSBNYXRoLnJvdW5kKG5pY2VNYXggKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xyXG5cdH1cclxuXHR0aWNrcy5wdXNoKGdlbmVyYXRpb25PcHRpb25zLm1pbiAhPT0gdW5kZWZpbmVkID8gZ2VuZXJhdGlvbk9wdGlvbnMubWluIDogbmljZU1pbik7XHJcblx0Zm9yICh2YXIgaiA9IDE7IGogPCBudW1TcGFjZXM7ICsraikge1xyXG5cdFx0dGlja3MucHVzaChNYXRoLnJvdW5kKChuaWNlTWluICsgaiAqIHNwYWNpbmcpICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbik7XHJcblx0fVxyXG5cdHRpY2tzLnB1c2goZ2VuZXJhdGlvbk9wdGlvbnMubWF4ICE9PSB1bmRlZmluZWQgPyBnZW5lcmF0aW9uT3B0aW9ucy5tYXggOiBuaWNlTWF4KTtcclxuXHJcblx0cmV0dXJuIHRpY2tzO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKENoYXJ0KSB7XHJcblxyXG5cdHZhciBub29wID0gaGVscGVycy5ub29wO1xyXG5cclxuXHRDaGFydC5MaW5lYXJTY2FsZUJhc2UgPSBTY2FsZS5leHRlbmQoe1xyXG5cdFx0Z2V0UmlnaHRWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcclxuXHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRyZXR1cm4gK3ZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBTY2FsZS5wcm90b3R5cGUuZ2V0UmlnaHRWYWx1ZS5jYWxsKHRoaXMsIHZhbHVlKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0aGFuZGxlVGlja1JhbmdlT3B0aW9uczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBvcHRzID0gbWUub3B0aW9ucztcclxuXHRcdFx0dmFyIHRpY2tPcHRzID0gb3B0cy50aWNrcztcclxuXHJcblx0XHRcdC8vIElmIHdlIGFyZSBmb3JjaW5nIGl0IHRvIGJlZ2luIGF0IDAsIGJ1dCAwIHdpbGwgYWxyZWFkeSBiZSByZW5kZXJlZCBvbiB0aGUgY2hhcnQsXHJcblx0XHRcdC8vIGRvIG5vdGhpbmcgc2luY2UgdGhhdCB3b3VsZCBtYWtlIHRoZSBjaGFydCB3ZWlyZC4gSWYgdGhlIHVzZXIgcmVhbGx5IHdhbnRzIGEgd2VpcmQgY2hhcnRcclxuXHRcdFx0Ly8gYXhpcywgdGhleSBjYW4gbWFudWFsbHkgb3ZlcnJpZGUgaXRcclxuXHRcdFx0aWYgKHRpY2tPcHRzLmJlZ2luQXRaZXJvKSB7XHJcblx0XHRcdFx0dmFyIG1pblNpZ24gPSBoZWxwZXJzLnNpZ24obWUubWluKTtcclxuXHRcdFx0XHR2YXIgbWF4U2lnbiA9IGhlbHBlcnMuc2lnbihtZS5tYXgpO1xyXG5cclxuXHRcdFx0XHRpZiAobWluU2lnbiA8IDAgJiYgbWF4U2lnbiA8IDApIHtcclxuXHRcdFx0XHRcdC8vIG1vdmUgdGhlIHRvcCB1cCB0byAwXHJcblx0XHRcdFx0XHRtZS5tYXggPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAobWluU2lnbiA+IDAgJiYgbWF4U2lnbiA+IDApIHtcclxuXHRcdFx0XHRcdC8vIG1vdmUgdGhlIGJvdHRvbSBkb3duIHRvIDBcclxuXHRcdFx0XHRcdG1lLm1pbiA9IDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgc2V0TWluID0gdGlja09wdHMubWluICE9PSB1bmRlZmluZWQgfHwgdGlja09wdHMuc3VnZ2VzdGVkTWluICE9PSB1bmRlZmluZWQ7XHJcblx0XHRcdHZhciBzZXRNYXggPSB0aWNrT3B0cy5tYXggIT09IHVuZGVmaW5lZCB8fCB0aWNrT3B0cy5zdWdnZXN0ZWRNYXggIT09IHVuZGVmaW5lZDtcclxuXHJcblx0XHRcdGlmICh0aWNrT3B0cy5taW4gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdG1lLm1pbiA9IHRpY2tPcHRzLm1pbjtcclxuXHRcdFx0fSBlbHNlIGlmICh0aWNrT3B0cy5zdWdnZXN0ZWRNaW4gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGlmIChtZS5taW4gPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdG1lLm1pbiA9IHRpY2tPcHRzLnN1Z2dlc3RlZE1pbjtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0bWUubWluID0gTWF0aC5taW4obWUubWluLCB0aWNrT3B0cy5zdWdnZXN0ZWRNaW4pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHRpY2tPcHRzLm1heCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bWUubWF4ID0gdGlja09wdHMubWF4O1xyXG5cdFx0XHR9IGVsc2UgaWYgKHRpY2tPcHRzLnN1Z2dlc3RlZE1heCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aWYgKG1lLm1heCA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0bWUubWF4ID0gdGlja09wdHMuc3VnZ2VzdGVkTWF4O1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRtZS5tYXggPSBNYXRoLm1heChtZS5tYXgsIHRpY2tPcHRzLnN1Z2dlc3RlZE1heCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoc2V0TWluICE9PSBzZXRNYXgpIHtcclxuXHRcdFx0XHQvLyBXZSBzZXQgdGhlIG1pbiBvciB0aGUgbWF4IGJ1dCBub3QgYm90aC5cclxuXHRcdFx0XHQvLyBTbyBlbnN1cmUgdGhhdCBvdXIgcmFuZ2UgaXMgZ29vZFxyXG5cdFx0XHRcdC8vIEludmVydGVkIG9yIDAgbGVuZ3RoIHJhbmdlIGNhbiBoYXBwZW4gd2hlblxyXG5cdFx0XHRcdC8vIHRpY2tzLm1pbiBpcyBzZXQsIGFuZCBubyBkYXRhc2V0cyBhcmUgdmlzaWJsZVxyXG5cdFx0XHRcdGlmIChtZS5taW4gPj0gbWUubWF4KSB7XHJcblx0XHRcdFx0XHRpZiAoc2V0TWluKSB7XHJcblx0XHRcdFx0XHRcdG1lLm1heCA9IG1lLm1pbiArIDE7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRtZS5taW4gPSBtZS5tYXggLSAxO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKG1lLm1pbiA9PT0gbWUubWF4KSB7XHJcblx0XHRcdFx0bWUubWF4Kys7XHJcblxyXG5cdFx0XHRcdGlmICghdGlja09wdHMuYmVnaW5BdFplcm8pIHtcclxuXHRcdFx0XHRcdG1lLm1pbi0tO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGdldFRpY2tMaW1pdDogbm9vcCxcclxuXHRcdGhhbmRsZURpcmVjdGlvbmFsQ2hhbmdlczogbm9vcCxcclxuXHJcblx0XHRidWlsZFRpY2tzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIG9wdHMgPSBtZS5vcHRpb25zO1xyXG5cdFx0XHR2YXIgdGlja09wdHMgPSBvcHRzLnRpY2tzO1xyXG5cclxuXHRcdFx0Ly8gRmlndXJlIG91dCB3aGF0IHRoZSBtYXggbnVtYmVyIG9mIHRpY2tzIHdlIGNhbiBzdXBwb3J0IGl0IGlzIGJhc2VkIG9uIHRoZSBzaXplIG9mXHJcblx0XHRcdC8vIHRoZSBheGlzIGFyZWEuIEZvciBub3csIHdlIHNheSB0aGF0IHRoZSBtaW5pbXVtIHRpY2sgc3BhY2luZyBpbiBwaXhlbHMgbXVzdCBiZSA1MFxyXG5cdFx0XHQvLyBXZSBhbHNvIGxpbWl0IHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aWNrcyB0byAxMSB3aGljaCBnaXZlcyBhIG5pY2UgMTAgc3F1YXJlcyBvblxyXG5cdFx0XHQvLyB0aGUgZ3JhcGguIE1ha2Ugc3VyZSB3ZSBhbHdheXMgaGF2ZSBhdCBsZWFzdCAyIHRpY2tzXHJcblx0XHRcdHZhciBtYXhUaWNrcyA9IG1lLmdldFRpY2tMaW1pdCgpO1xyXG5cdFx0XHRtYXhUaWNrcyA9IE1hdGgubWF4KDIsIG1heFRpY2tzKTtcclxuXHJcblx0XHRcdHZhciBudW1lcmljR2VuZXJhdG9yT3B0aW9ucyA9IHtcclxuXHRcdFx0XHRtYXhUaWNrczogbWF4VGlja3MsXHJcblx0XHRcdFx0bWluOiB0aWNrT3B0cy5taW4sXHJcblx0XHRcdFx0bWF4OiB0aWNrT3B0cy5tYXgsXHJcblx0XHRcdFx0cHJlY2lzaW9uOiB0aWNrT3B0cy5wcmVjaXNpb24sXHJcblx0XHRcdFx0c3RlcFNpemU6IGhlbHBlcnMudmFsdWVPckRlZmF1bHQodGlja09wdHMuZml4ZWRTdGVwU2l6ZSwgdGlja09wdHMuc3RlcFNpemUpXHJcblx0XHRcdH07XHJcblx0XHRcdHZhciB0aWNrcyA9IG1lLnRpY2tzID0gZ2VuZXJhdGVUaWNrcyhudW1lcmljR2VuZXJhdG9yT3B0aW9ucywgbWUpO1xyXG5cclxuXHRcdFx0bWUuaGFuZGxlRGlyZWN0aW9uYWxDaGFuZ2VzKCk7XHJcblxyXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCB3ZSBuZWVkIHRvIHVwZGF0ZSBvdXIgbWF4IGFuZCBtaW4gZ2l2ZW4gdGhlIHRpY2sgdmFsdWVzIHNpbmNlIHdlIGhhdmUgZXhwYW5kZWQgdGhlXHJcblx0XHRcdC8vIHJhbmdlIG9mIHRoZSBzY2FsZVxyXG5cdFx0XHRtZS5tYXggPSBoZWxwZXJzLm1heCh0aWNrcyk7XHJcblx0XHRcdG1lLm1pbiA9IGhlbHBlcnMubWluKHRpY2tzKTtcclxuXHJcblx0XHRcdGlmICh0aWNrT3B0cy5yZXZlcnNlKSB7XHJcblx0XHRcdFx0dGlja3MucmV2ZXJzZSgpO1xyXG5cclxuXHRcdFx0XHRtZS5zdGFydCA9IG1lLm1heDtcclxuXHRcdFx0XHRtZS5lbmQgPSBtZS5taW47XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0bWUuc3RhcnQgPSBtZS5taW47XHJcblx0XHRcdFx0bWUuZW5kID0gbWUubWF4O1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0Y29udmVydFRpY2tzVG9MYWJlbHM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHRtZS50aWNrc0FzTnVtYmVycyA9IG1lLnRpY2tzLnNsaWNlKCk7XHJcblx0XHRcdG1lLnplcm9MaW5lSW5kZXggPSBtZS50aWNrcy5pbmRleE9mKDApO1xyXG5cclxuXHRcdFx0U2NhbGUucHJvdG90eXBlLmNvbnZlcnRUaWNrc1RvTGFiZWxzLmNhbGwobWUpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG59O1xyXG5cclxufSx7XCIzM1wiOjMzLFwiNDZcIjo0Nn1dLDU3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxudmFyIFNjYWxlID0gcmVxdWlyZSgzMyk7XHJcbnZhciBzY2FsZVNlcnZpY2UgPSByZXF1aXJlKDM0KTtcclxudmFyIFRpY2tzID0gcmVxdWlyZSgzNSk7XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgYSBzZXQgb2YgbG9nYXJpdGhtaWMgdGlja3NcclxuICogQHBhcmFtIGdlbmVyYXRpb25PcHRpb25zIHRoZSBvcHRpb25zIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2tzXHJcbiAqIEBwYXJhbSBkYXRhUmFuZ2UgdGhlIHJhbmdlIG9mIHRoZSBkYXRhXHJcbiAqIEByZXR1cm5zIHtBcnJheTxOdW1iZXI+fSBhcnJheSBvZiB0aWNrIHZhbHVlc1xyXG4gKi9cclxuZnVuY3Rpb24gZ2VuZXJhdGVUaWNrcyhnZW5lcmF0aW9uT3B0aW9ucywgZGF0YVJhbmdlKSB7XHJcblx0dmFyIHRpY2tzID0gW107XHJcblx0dmFyIHZhbHVlT3JEZWZhdWx0ID0gaGVscGVycy52YWx1ZU9yRGVmYXVsdDtcclxuXHJcblx0Ly8gRmlndXJlIG91dCB3aGF0IHRoZSBtYXggbnVtYmVyIG9mIHRpY2tzIHdlIGNhbiBzdXBwb3J0IGl0IGlzIGJhc2VkIG9uIHRoZSBzaXplIG9mXHJcblx0Ly8gdGhlIGF4aXMgYXJlYS4gRm9yIG5vdywgd2Ugc2F5IHRoYXQgdGhlIG1pbmltdW0gdGljayBzcGFjaW5nIGluIHBpeGVscyBtdXN0IGJlIDUwXHJcblx0Ly8gV2UgYWxzbyBsaW1pdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGlja3MgdG8gMTEgd2hpY2ggZ2l2ZXMgYSBuaWNlIDEwIHNxdWFyZXMgb25cclxuXHQvLyB0aGUgZ3JhcGhcclxuXHR2YXIgdGlja1ZhbCA9IHZhbHVlT3JEZWZhdWx0KGdlbmVyYXRpb25PcHRpb25zLm1pbiwgTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoaGVscGVycy5sb2cxMChkYXRhUmFuZ2UubWluKSkpKTtcclxuXHJcblx0dmFyIGVuZEV4cCA9IE1hdGguZmxvb3IoaGVscGVycy5sb2cxMChkYXRhUmFuZ2UubWF4KSk7XHJcblx0dmFyIGVuZFNpZ25pZmljYW5kID0gTWF0aC5jZWlsKGRhdGFSYW5nZS5tYXggLyBNYXRoLnBvdygxMCwgZW5kRXhwKSk7XHJcblx0dmFyIGV4cCwgc2lnbmlmaWNhbmQ7XHJcblxyXG5cdGlmICh0aWNrVmFsID09PSAwKSB7XHJcblx0XHRleHAgPSBNYXRoLmZsb29yKGhlbHBlcnMubG9nMTAoZGF0YVJhbmdlLm1pbk5vdFplcm8pKTtcclxuXHRcdHNpZ25pZmljYW5kID0gTWF0aC5mbG9vcihkYXRhUmFuZ2UubWluTm90WmVybyAvIE1hdGgucG93KDEwLCBleHApKTtcclxuXHJcblx0XHR0aWNrcy5wdXNoKHRpY2tWYWwpO1xyXG5cdFx0dGlja1ZhbCA9IHNpZ25pZmljYW5kICogTWF0aC5wb3coMTAsIGV4cCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGV4cCA9IE1hdGguZmxvb3IoaGVscGVycy5sb2cxMCh0aWNrVmFsKSk7XHJcblx0XHRzaWduaWZpY2FuZCA9IE1hdGguZmxvb3IodGlja1ZhbCAvIE1hdGgucG93KDEwLCBleHApKTtcclxuXHR9XHJcblx0dmFyIHByZWNpc2lvbiA9IGV4cCA8IDAgPyBNYXRoLnBvdygxMCwgTWF0aC5hYnMoZXhwKSkgOiAxO1xyXG5cclxuXHRkbyB7XHJcblx0XHR0aWNrcy5wdXNoKHRpY2tWYWwpO1xyXG5cclxuXHRcdCsrc2lnbmlmaWNhbmQ7XHJcblx0XHRpZiAoc2lnbmlmaWNhbmQgPT09IDEwKSB7XHJcblx0XHRcdHNpZ25pZmljYW5kID0gMTtcclxuXHRcdFx0KytleHA7XHJcblx0XHRcdHByZWNpc2lvbiA9IGV4cCA+PSAwID8gMSA6IHByZWNpc2lvbjtcclxuXHRcdH1cclxuXHJcblx0XHR0aWNrVmFsID0gTWF0aC5yb3VuZChzaWduaWZpY2FuZCAqIE1hdGgucG93KDEwLCBleHApICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcclxuXHR9IHdoaWxlIChleHAgPCBlbmRFeHAgfHwgKGV4cCA9PT0gZW5kRXhwICYmIHNpZ25pZmljYW5kIDwgZW5kU2lnbmlmaWNhbmQpKTtcclxuXHJcblx0dmFyIGxhc3RUaWNrID0gdmFsdWVPckRlZmF1bHQoZ2VuZXJhdGlvbk9wdGlvbnMubWF4LCB0aWNrVmFsKTtcclxuXHR0aWNrcy5wdXNoKGxhc3RUaWNrKTtcclxuXHJcblx0cmV0dXJuIHRpY2tzO1xyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDaGFydCkge1xyXG5cclxuXHR2YXIgZGVmYXVsdENvbmZpZyA9IHtcclxuXHRcdHBvc2l0aW9uOiAnbGVmdCcsXHJcblxyXG5cdFx0Ly8gbGFiZWwgc2V0dGluZ3NcclxuXHRcdHRpY2tzOiB7XHJcblx0XHRcdGNhbGxiYWNrOiBUaWNrcy5mb3JtYXR0ZXJzLmxvZ2FyaXRobWljXHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0dmFyIExvZ2FyaXRobWljU2NhbGUgPSBTY2FsZS5leHRlbmQoe1xyXG5cdFx0ZGV0ZXJtaW5lRGF0YUxpbWl0czogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBvcHRzID0gbWUub3B0aW9ucztcclxuXHRcdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XHJcblx0XHRcdHZhciBkYXRhID0gY2hhcnQuZGF0YTtcclxuXHRcdFx0dmFyIGRhdGFzZXRzID0gZGF0YS5kYXRhc2V0cztcclxuXHRcdFx0dmFyIGlzSG9yaXpvbnRhbCA9IG1lLmlzSG9yaXpvbnRhbCgpO1xyXG5cdFx0XHRmdW5jdGlvbiBJRE1hdGNoZXMobWV0YSkge1xyXG5cdFx0XHRcdHJldHVybiBpc0hvcml6b250YWwgPyBtZXRhLnhBeGlzSUQgPT09IG1lLmlkIDogbWV0YS55QXhpc0lEID09PSBtZS5pZDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ2FsY3VsYXRlIFJhbmdlXHJcblx0XHRcdG1lLm1pbiA9IG51bGw7XHJcblx0XHRcdG1lLm1heCA9IG51bGw7XHJcblx0XHRcdG1lLm1pbk5vdFplcm8gPSBudWxsO1xyXG5cclxuXHRcdFx0dmFyIGhhc1N0YWNrcyA9IG9wdHMuc3RhY2tlZDtcclxuXHRcdFx0aWYgKGhhc1N0YWNrcyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXRzLCBmdW5jdGlvbihkYXRhc2V0LCBkYXRhc2V0SW5kZXgpIHtcclxuXHRcdFx0XHRcdGlmIChoYXNTdGFja3MpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcclxuXHRcdFx0XHRcdGlmIChjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGRhdGFzZXRJbmRleCkgJiYgSURNYXRjaGVzKG1ldGEpICYmXHJcblx0XHRcdFx0XHRcdG1ldGEuc3RhY2sgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRoYXNTdGFja3MgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAob3B0cy5zdGFja2VkIHx8IGhhc1N0YWNrcykge1xyXG5cdFx0XHRcdHZhciB2YWx1ZXNQZXJTdGFjayA9IHt9O1xyXG5cclxuXHRcdFx0XHRoZWxwZXJzLmVhY2goZGF0YXNldHMsIGZ1bmN0aW9uKGRhdGFzZXQsIGRhdGFzZXRJbmRleCkge1xyXG5cdFx0XHRcdFx0dmFyIG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xyXG5cdFx0XHRcdFx0dmFyIGtleSA9IFtcclxuXHRcdFx0XHRcdFx0bWV0YS50eXBlLFxyXG5cdFx0XHRcdFx0XHQvLyB3ZSBoYXZlIGEgc2VwYXJhdGUgc3RhY2sgZm9yIHN0YWNrPXVuZGVmaW5lZCBkYXRhc2V0cyB3aGVuIHRoZSBvcHRzLnN0YWNrZWQgaXMgdW5kZWZpbmVkXHJcblx0XHRcdFx0XHRcdCgob3B0cy5zdGFja2VkID09PSB1bmRlZmluZWQgJiYgbWV0YS5zdGFjayA9PT0gdW5kZWZpbmVkKSA/IGRhdGFzZXRJbmRleCA6ICcnKSxcclxuXHRcdFx0XHRcdFx0bWV0YS5zdGFja1xyXG5cdFx0XHRcdFx0XS5qb2luKCcuJyk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGNoYXJ0LmlzRGF0YXNldFZpc2libGUoZGF0YXNldEluZGV4KSAmJiBJRE1hdGNoZXMobWV0YSkpIHtcclxuXHRcdFx0XHRcdFx0aWYgKHZhbHVlc1BlclN0YWNrW2tleV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdHZhbHVlc1BlclN0YWNrW2tleV0gPSBbXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXQuZGF0YSwgZnVuY3Rpb24ocmF3VmFsdWUsIGluZGV4KSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlcyA9IHZhbHVlc1BlclN0YWNrW2tleV07XHJcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gK21lLmdldFJpZ2h0VmFsdWUocmF3VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdC8vIGludmFsaWQsIGhpZGRlbiBhbmQgbmVnYXRpdmUgdmFsdWVzIGFyZSBpZ25vcmVkXHJcblx0XHRcdFx0XHRcdFx0aWYgKGlzTmFOKHZhbHVlKSB8fCBtZXRhLmRhdGFbaW5kZXhdLmhpZGRlbiB8fCB2YWx1ZSA8IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dmFsdWVzW2luZGV4XSA9IHZhbHVlc1tpbmRleF0gfHwgMDtcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZXNbaW5kZXhdICs9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aGVscGVycy5lYWNoKHZhbHVlc1BlclN0YWNrLCBmdW5jdGlvbih2YWx1ZXNGb3JUeXBlKSB7XHJcblx0XHRcdFx0XHRpZiAodmFsdWVzRm9yVHlwZS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdHZhciBtaW5WYWwgPSBoZWxwZXJzLm1pbih2YWx1ZXNGb3JUeXBlKTtcclxuXHRcdFx0XHRcdFx0dmFyIG1heFZhbCA9IGhlbHBlcnMubWF4KHZhbHVlc0ZvclR5cGUpO1xyXG5cdFx0XHRcdFx0XHRtZS5taW4gPSBtZS5taW4gPT09IG51bGwgPyBtaW5WYWwgOiBNYXRoLm1pbihtZS5taW4sIG1pblZhbCk7XHJcblx0XHRcdFx0XHRcdG1lLm1heCA9IG1lLm1heCA9PT0gbnVsbCA/IG1heFZhbCA6IE1hdGgubWF4KG1lLm1heCwgbWF4VmFsKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aGVscGVycy5lYWNoKGRhdGFzZXRzLCBmdW5jdGlvbihkYXRhc2V0LCBkYXRhc2V0SW5kZXgpIHtcclxuXHRcdFx0XHRcdHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcclxuXHRcdFx0XHRcdGlmIChjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGRhdGFzZXRJbmRleCkgJiYgSURNYXRjaGVzKG1ldGEpKSB7XHJcblx0XHRcdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0LmRhdGEsIGZ1bmN0aW9uKHJhd1ZhbHVlLCBpbmRleCkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9ICttZS5nZXRSaWdodFZhbHVlKHJhd1ZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHQvLyBpbnZhbGlkLCBoaWRkZW4gYW5kIG5lZ2F0aXZlIHZhbHVlcyBhcmUgaWdub3JlZFxyXG5cdFx0XHRcdFx0XHRcdGlmIChpc05hTih2YWx1ZSkgfHwgbWV0YS5kYXRhW2luZGV4XS5oaWRkZW4gfHwgdmFsdWUgPCAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRpZiAobWUubWluID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRtZS5taW4gPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHZhbHVlIDwgbWUubWluKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRtZS5taW4gPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChtZS5tYXggPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG1lLm1heCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodmFsdWUgPiBtZS5tYXgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG1lLm1heCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlICE9PSAwICYmIChtZS5taW5Ob3RaZXJvID09PSBudWxsIHx8IHZhbHVlIDwgbWUubWluTm90WmVybykpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG1lLm1pbk5vdFplcm8gPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBDb21tb24gYmFzZSBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgdGlja3MubWluLCB0aWNrcy5tYXhcclxuXHRcdFx0dGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCk7XHJcblx0XHR9LFxyXG5cdFx0aGFuZGxlVGlja1JhbmdlT3B0aW9uczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBvcHRzID0gbWUub3B0aW9ucztcclxuXHRcdFx0dmFyIHRpY2tPcHRzID0gb3B0cy50aWNrcztcclxuXHRcdFx0dmFyIHZhbHVlT3JEZWZhdWx0ID0gaGVscGVycy52YWx1ZU9yRGVmYXVsdDtcclxuXHRcdFx0dmFyIERFRkFVTFRfTUlOID0gMTtcclxuXHRcdFx0dmFyIERFRkFVTFRfTUFYID0gMTA7XHJcblxyXG5cdFx0XHRtZS5taW4gPSB2YWx1ZU9yRGVmYXVsdCh0aWNrT3B0cy5taW4sIG1lLm1pbik7XHJcblx0XHRcdG1lLm1heCA9IHZhbHVlT3JEZWZhdWx0KHRpY2tPcHRzLm1heCwgbWUubWF4KTtcclxuXHJcblx0XHRcdGlmIChtZS5taW4gPT09IG1lLm1heCkge1xyXG5cdFx0XHRcdGlmIChtZS5taW4gIT09IDAgJiYgbWUubWluICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRtZS5taW4gPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihoZWxwZXJzLmxvZzEwKG1lLm1pbikpIC0gMSk7XHJcblx0XHRcdFx0XHRtZS5tYXggPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihoZWxwZXJzLmxvZzEwKG1lLm1heCkpICsgMSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdG1lLm1pbiA9IERFRkFVTFRfTUlOO1xyXG5cdFx0XHRcdFx0bWUubWF4ID0gREVGQVVMVF9NQVg7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChtZS5taW4gPT09IG51bGwpIHtcclxuXHRcdFx0XHRtZS5taW4gPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihoZWxwZXJzLmxvZzEwKG1lLm1heCkpIC0gMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKG1lLm1heCA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdG1lLm1heCA9IG1lLm1pbiAhPT0gMFxyXG5cdFx0XHRcdFx0PyBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihoZWxwZXJzLmxvZzEwKG1lLm1pbikpICsgMSlcclxuXHRcdFx0XHRcdDogREVGQVVMVF9NQVg7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKG1lLm1pbk5vdFplcm8gPT09IG51bGwpIHtcclxuXHRcdFx0XHRpZiAobWUubWluID4gMCkge1xyXG5cdFx0XHRcdFx0bWUubWluTm90WmVybyA9IG1lLm1pbjtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKG1lLm1heCA8IDEpIHtcclxuXHRcdFx0XHRcdG1lLm1pbk5vdFplcm8gPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihoZWxwZXJzLmxvZzEwKG1lLm1heCkpKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0bWUubWluTm90WmVybyA9IERFRkFVTFRfTUlOO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGJ1aWxkVGlja3M6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgb3B0cyA9IG1lLm9wdGlvbnM7XHJcblx0XHRcdHZhciB0aWNrT3B0cyA9IG9wdHMudGlja3M7XHJcblx0XHRcdHZhciByZXZlcnNlID0gIW1lLmlzSG9yaXpvbnRhbCgpO1xyXG5cclxuXHRcdFx0dmFyIGdlbmVyYXRpb25PcHRpb25zID0ge1xyXG5cdFx0XHRcdG1pbjogdGlja09wdHMubWluLFxyXG5cdFx0XHRcdG1heDogdGlja09wdHMubWF4XHJcblx0XHRcdH07XHJcblx0XHRcdHZhciB0aWNrcyA9IG1lLnRpY2tzID0gZ2VuZXJhdGVUaWNrcyhnZW5lcmF0aW9uT3B0aW9ucywgbWUpO1xyXG5cclxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgd2UgbmVlZCB0byB1cGRhdGUgb3VyIG1heCBhbmQgbWluIGdpdmVuIHRoZSB0aWNrIHZhbHVlcyBzaW5jZSB3ZSBoYXZlIGV4cGFuZGVkIHRoZVxyXG5cdFx0XHQvLyByYW5nZSBvZiB0aGUgc2NhbGVcclxuXHRcdFx0bWUubWF4ID0gaGVscGVycy5tYXgodGlja3MpO1xyXG5cdFx0XHRtZS5taW4gPSBoZWxwZXJzLm1pbih0aWNrcyk7XHJcblxyXG5cdFx0XHRpZiAodGlja09wdHMucmV2ZXJzZSkge1xyXG5cdFx0XHRcdHJldmVyc2UgPSAhcmV2ZXJzZTtcclxuXHRcdFx0XHRtZS5zdGFydCA9IG1lLm1heDtcclxuXHRcdFx0XHRtZS5lbmQgPSBtZS5taW47XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0bWUuc3RhcnQgPSBtZS5taW47XHJcblx0XHRcdFx0bWUuZW5kID0gbWUubWF4O1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChyZXZlcnNlKSB7XHJcblx0XHRcdFx0dGlja3MucmV2ZXJzZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0Y29udmVydFRpY2tzVG9MYWJlbHM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR0aGlzLnRpY2tWYWx1ZXMgPSB0aGlzLnRpY2tzLnNsaWNlKCk7XHJcblxyXG5cdFx0XHRTY2FsZS5wcm90b3R5cGUuY29udmVydFRpY2tzVG9MYWJlbHMuY2FsbCh0aGlzKTtcclxuXHRcdH0sXHJcblx0XHQvLyBHZXQgdGhlIGNvcnJlY3QgdG9vbHRpcCBsYWJlbFxyXG5cdFx0Z2V0TGFiZWxGb3JJbmRleDogZnVuY3Rpb24oaW5kZXgsIGRhdGFzZXRJbmRleCkge1xyXG5cdFx0XHRyZXR1cm4gK3RoaXMuZ2V0UmlnaHRWYWx1ZSh0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XS5kYXRhW2luZGV4XSk7XHJcblx0XHR9LFxyXG5cdFx0Z2V0UGl4ZWxGb3JUaWNrOiBmdW5jdGlvbihpbmRleCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRQaXhlbEZvclZhbHVlKHRoaXMudGlja1ZhbHVlc1tpbmRleF0pO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IHRpY2suXHJcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gdmFsdWUgLSBUaGUgbWluaW11bSBub3QgemVybyB2YWx1ZS5cclxuXHRcdCAqIEByZXR1cm4ge051bWJlcn0gVGhlIGZpcnN0IHRpY2sgdmFsdWUuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRfZ2V0Rmlyc3RUaWNrVmFsdWU6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcblx0XHRcdHZhciBleHAgPSBNYXRoLmZsb29yKGhlbHBlcnMubG9nMTAodmFsdWUpKTtcclxuXHRcdFx0dmFyIHNpZ25pZmljYW5kID0gTWF0aC5mbG9vcih2YWx1ZSAvIE1hdGgucG93KDEwLCBleHApKTtcclxuXHJcblx0XHRcdHJldHVybiBzaWduaWZpY2FuZCAqIE1hdGgucG93KDEwLCBleHApO1xyXG5cdFx0fSxcclxuXHRcdGdldFBpeGVsRm9yVmFsdWU6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciByZXZlcnNlID0gbWUub3B0aW9ucy50aWNrcy5yZXZlcnNlO1xyXG5cdFx0XHR2YXIgbG9nMTAgPSBoZWxwZXJzLmxvZzEwO1xyXG5cdFx0XHR2YXIgZmlyc3RUaWNrVmFsdWUgPSBtZS5fZ2V0Rmlyc3RUaWNrVmFsdWUobWUubWluTm90WmVybyk7XHJcblx0XHRcdHZhciBvZmZzZXQgPSAwO1xyXG5cdFx0XHR2YXIgaW5uZXJEaW1lbnNpb24sIHBpeGVsLCBzdGFydCwgZW5kLCBzaWduO1xyXG5cclxuXHRcdFx0dmFsdWUgPSArbWUuZ2V0UmlnaHRWYWx1ZSh2YWx1ZSk7XHJcblx0XHRcdGlmIChyZXZlcnNlKSB7XHJcblx0XHRcdFx0c3RhcnQgPSBtZS5lbmQ7XHJcblx0XHRcdFx0ZW5kID0gbWUuc3RhcnQ7XHJcblx0XHRcdFx0c2lnbiA9IC0xO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHN0YXJ0ID0gbWUuc3RhcnQ7XHJcblx0XHRcdFx0ZW5kID0gbWUuZW5kO1xyXG5cdFx0XHRcdHNpZ24gPSAxO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChtZS5pc0hvcml6b250YWwoKSkge1xyXG5cdFx0XHRcdGlubmVyRGltZW5zaW9uID0gbWUud2lkdGg7XHJcblx0XHRcdFx0cGl4ZWwgPSByZXZlcnNlID8gbWUucmlnaHQgOiBtZS5sZWZ0O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlubmVyRGltZW5zaW9uID0gbWUuaGVpZ2h0O1xyXG5cdFx0XHRcdHNpZ24gKj0gLTE7IC8vIGludmVydCwgc2luY2UgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBjYW52YXMgaXMgYXQgcGl4ZWwgKDAsIDApXHJcblx0XHRcdFx0cGl4ZWwgPSByZXZlcnNlID8gbWUudG9wIDogbWUuYm90dG9tO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh2YWx1ZSAhPT0gc3RhcnQpIHtcclxuXHRcdFx0XHRpZiAoc3RhcnQgPT09IDApIHsgLy8gaW5jbHVkZSB6ZXJvIHRpY2tcclxuXHRcdFx0XHRcdG9mZnNldCA9IGhlbHBlcnMuZ2V0VmFsdWVPckRlZmF1bHQoXHJcblx0XHRcdFx0XHRcdG1lLm9wdGlvbnMudGlja3MuZm9udFNpemUsXHJcblx0XHRcdFx0XHRcdENoYXJ0LmRlZmF1bHRzLmdsb2JhbC5kZWZhdWx0Rm9udFNpemVcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRpbm5lckRpbWVuc2lvbiAtPSBvZmZzZXQ7XHJcblx0XHRcdFx0XHRzdGFydCA9IGZpcnN0VGlja1ZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodmFsdWUgIT09IDApIHtcclxuXHRcdFx0XHRcdG9mZnNldCArPSBpbm5lckRpbWVuc2lvbiAvIChsb2cxMChlbmQpIC0gbG9nMTAoc3RhcnQpKSAqIChsb2cxMCh2YWx1ZSkgLSBsb2cxMChzdGFydCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRwaXhlbCArPSBzaWduICogb2Zmc2V0O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBwaXhlbDtcclxuXHRcdH0sXHJcblx0XHRnZXRWYWx1ZUZvclBpeGVsOiBmdW5jdGlvbihwaXhlbCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgcmV2ZXJzZSA9IG1lLm9wdGlvbnMudGlja3MucmV2ZXJzZTtcclxuXHRcdFx0dmFyIGxvZzEwID0gaGVscGVycy5sb2cxMDtcclxuXHRcdFx0dmFyIGZpcnN0VGlja1ZhbHVlID0gbWUuX2dldEZpcnN0VGlja1ZhbHVlKG1lLm1pbk5vdFplcm8pO1xyXG5cdFx0XHR2YXIgaW5uZXJEaW1lbnNpb24sIHN0YXJ0LCBlbmQsIHZhbHVlO1xyXG5cclxuXHRcdFx0aWYgKHJldmVyc2UpIHtcclxuXHRcdFx0XHRzdGFydCA9IG1lLmVuZDtcclxuXHRcdFx0XHRlbmQgPSBtZS5zdGFydDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRzdGFydCA9IG1lLnN0YXJ0O1xyXG5cdFx0XHRcdGVuZCA9IG1lLmVuZDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobWUuaXNIb3Jpem9udGFsKCkpIHtcclxuXHRcdFx0XHRpbm5lckRpbWVuc2lvbiA9IG1lLndpZHRoO1xyXG5cdFx0XHRcdHZhbHVlID0gcmV2ZXJzZSA/IG1lLnJpZ2h0IC0gcGl4ZWwgOiBwaXhlbCAtIG1lLmxlZnQ7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aW5uZXJEaW1lbnNpb24gPSBtZS5oZWlnaHQ7XHJcblx0XHRcdFx0dmFsdWUgPSByZXZlcnNlID8gcGl4ZWwgLSBtZS50b3AgOiBtZS5ib3R0b20gLSBwaXhlbDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodmFsdWUgIT09IHN0YXJ0KSB7XHJcblx0XHRcdFx0aWYgKHN0YXJ0ID09PSAwKSB7IC8vIGluY2x1ZGUgemVybyB0aWNrXHJcblx0XHRcdFx0XHR2YXIgb2Zmc2V0ID0gaGVscGVycy5nZXRWYWx1ZU9yRGVmYXVsdChcclxuXHRcdFx0XHRcdFx0bWUub3B0aW9ucy50aWNrcy5mb250U2l6ZSxcclxuXHRcdFx0XHRcdFx0Q2hhcnQuZGVmYXVsdHMuZ2xvYmFsLmRlZmF1bHRGb250U2l6ZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHZhbHVlIC09IG9mZnNldDtcclxuXHRcdFx0XHRcdGlubmVyRGltZW5zaW9uIC09IG9mZnNldDtcclxuXHRcdFx0XHRcdHN0YXJ0ID0gZmlyc3RUaWNrVmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhbHVlICo9IGxvZzEwKGVuZCkgLSBsb2cxMChzdGFydCk7XHJcblx0XHRcdFx0dmFsdWUgLz0gaW5uZXJEaW1lbnNpb247XHJcblx0XHRcdFx0dmFsdWUgPSBNYXRoLnBvdygxMCwgbG9nMTAoc3RhcnQpICsgdmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0c2NhbGVTZXJ2aWNlLnJlZ2lzdGVyU2NhbGVUeXBlKCdsb2dhcml0aG1pYycsIExvZ2FyaXRobWljU2NhbGUsIGRlZmF1bHRDb25maWcpO1xyXG59O1xyXG5cclxufSx7XCIzM1wiOjMzLFwiMzRcIjozNCxcIjM1XCI6MzUsXCI0NlwiOjQ2fV0sNTg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKDI2KTtcclxudmFyIGhlbHBlcnMgPSByZXF1aXJlKDQ2KTtcclxudmFyIHNjYWxlU2VydmljZSA9IHJlcXVpcmUoMzQpO1xyXG52YXIgVGlja3MgPSByZXF1aXJlKDM1KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ2hhcnQpIHtcclxuXHJcblx0dmFyIGdsb2JhbERlZmF1bHRzID0gZGVmYXVsdHMuZ2xvYmFsO1xyXG5cclxuXHR2YXIgZGVmYXVsdENvbmZpZyA9IHtcclxuXHRcdGRpc3BsYXk6IHRydWUsXHJcblxyXG5cdFx0Ly8gQm9vbGVhbiAtIFdoZXRoZXIgdG8gYW5pbWF0ZSBzY2FsaW5nIHRoZSBjaGFydCBmcm9tIHRoZSBjZW50cmVcclxuXHRcdGFuaW1hdGU6IHRydWUsXHJcblx0XHRwb3NpdGlvbjogJ2NoYXJ0QXJlYScsXHJcblxyXG5cdFx0YW5nbGVMaW5lczoge1xyXG5cdFx0XHRkaXNwbGF5OiB0cnVlLFxyXG5cdFx0XHRjb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4xKScsXHJcblx0XHRcdGxpbmVXaWR0aDogMVxyXG5cdFx0fSxcclxuXHJcblx0XHRncmlkTGluZXM6IHtcclxuXHRcdFx0Y2lyY3VsYXI6IGZhbHNlXHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIGxhYmVsIHNldHRpbmdzXHJcblx0XHR0aWNrczoge1xyXG5cdFx0XHQvLyBCb29sZWFuIC0gU2hvdyBhIGJhY2tkcm9wIHRvIHRoZSBzY2FsZSBsYWJlbFxyXG5cdFx0XHRzaG93TGFiZWxCYWNrZHJvcDogdHJ1ZSxcclxuXHJcblx0XHRcdC8vIFN0cmluZyAtIFRoZSBjb2xvdXIgb2YgdGhlIGxhYmVsIGJhY2tkcm9wXHJcblx0XHRcdGJhY2tkcm9wQ29sb3I6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuNzUpJyxcclxuXHJcblx0XHRcdC8vIE51bWJlciAtIFRoZSBiYWNrZHJvcCBwYWRkaW5nIGFib3ZlICYgYmVsb3cgdGhlIGxhYmVsIGluIHBpeGVsc1xyXG5cdFx0XHRiYWNrZHJvcFBhZGRpbmdZOiAyLFxyXG5cclxuXHRcdFx0Ly8gTnVtYmVyIC0gVGhlIGJhY2tkcm9wIHBhZGRpbmcgdG8gdGhlIHNpZGUgb2YgdGhlIGxhYmVsIGluIHBpeGVsc1xyXG5cdFx0XHRiYWNrZHJvcFBhZGRpbmdYOiAyLFxyXG5cclxuXHRcdFx0Y2FsbGJhY2s6IFRpY2tzLmZvcm1hdHRlcnMubGluZWFyXHJcblx0XHR9LFxyXG5cclxuXHRcdHBvaW50TGFiZWxzOiB7XHJcblx0XHRcdC8vIEJvb2xlYW4gLSBpZiB0cnVlLCBzaG93IHBvaW50IGxhYmVsc1xyXG5cdFx0XHRkaXNwbGF5OiB0cnVlLFxyXG5cclxuXHRcdFx0Ly8gTnVtYmVyIC0gUG9pbnQgbGFiZWwgZm9udCBzaXplIGluIHBpeGVsc1xyXG5cdFx0XHRmb250U2l6ZTogMTAsXHJcblxyXG5cdFx0XHQvLyBGdW5jdGlvbiAtIFVzZWQgdG8gY29udmVydCBwb2ludCBsYWJlbHNcclxuXHRcdFx0Y2FsbGJhY2s6IGZ1bmN0aW9uKGxhYmVsKSB7XHJcblx0XHRcdFx0cmV0dXJuIGxhYmVsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0ZnVuY3Rpb24gZ2V0VmFsdWVDb3VudChzY2FsZSkge1xyXG5cdFx0dmFyIG9wdHMgPSBzY2FsZS5vcHRpb25zO1xyXG5cdFx0cmV0dXJuIG9wdHMuYW5nbGVMaW5lcy5kaXNwbGF5IHx8IG9wdHMucG9pbnRMYWJlbHMuZGlzcGxheSA/IHNjYWxlLmNoYXJ0LmRhdGEubGFiZWxzLmxlbmd0aCA6IDA7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRQb2ludExhYmVsRm9udE9wdGlvbnMoc2NhbGUpIHtcclxuXHRcdHZhciBwb2ludExhYmVsT3B0aW9ucyA9IHNjYWxlLm9wdGlvbnMucG9pbnRMYWJlbHM7XHJcblx0XHR2YXIgZm9udFNpemUgPSBoZWxwZXJzLnZhbHVlT3JEZWZhdWx0KHBvaW50TGFiZWxPcHRpb25zLmZvbnRTaXplLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFNpemUpO1xyXG5cdFx0dmFyIGZvbnRTdHlsZSA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQocG9pbnRMYWJlbE9wdGlvbnMuZm9udFN0eWxlLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFN0eWxlKTtcclxuXHRcdHZhciBmb250RmFtaWx5ID0gaGVscGVycy52YWx1ZU9yRGVmYXVsdChwb2ludExhYmVsT3B0aW9ucy5mb250RmFtaWx5LCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udEZhbWlseSk7XHJcblx0XHR2YXIgZm9udCA9IGhlbHBlcnMuZm9udFN0cmluZyhmb250U2l6ZSwgZm9udFN0eWxlLCBmb250RmFtaWx5KTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRzaXplOiBmb250U2l6ZSxcclxuXHRcdFx0c3R5bGU6IGZvbnRTdHlsZSxcclxuXHRcdFx0ZmFtaWx5OiBmb250RmFtaWx5LFxyXG5cdFx0XHRmb250OiBmb250XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gbWVhc3VyZUxhYmVsU2l6ZShjdHgsIGZvbnRTaXplLCBsYWJlbCkge1xyXG5cdFx0aWYgKGhlbHBlcnMuaXNBcnJheShsYWJlbCkpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR3OiBoZWxwZXJzLmxvbmdlc3RUZXh0KGN0eCwgY3R4LmZvbnQsIGxhYmVsKSxcclxuXHRcdFx0XHRoOiAobGFiZWwubGVuZ3RoICogZm9udFNpemUpICsgKChsYWJlbC5sZW5ndGggLSAxKSAqIDEuNSAqIGZvbnRTaXplKVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHc6IGN0eC5tZWFzdXJlVGV4dChsYWJlbCkud2lkdGgsXHJcblx0XHRcdGg6IGZvbnRTaXplXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZGV0ZXJtaW5lTGltaXRzKGFuZ2xlLCBwb3MsIHNpemUsIG1pbiwgbWF4KSB7XHJcblx0XHRpZiAoYW5nbGUgPT09IG1pbiB8fCBhbmdsZSA9PT0gbWF4KSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0c3RhcnQ6IHBvcyAtIChzaXplIC8gMiksXHJcblx0XHRcdFx0ZW5kOiBwb3MgKyAoc2l6ZSAvIDIpXHJcblx0XHRcdH07XHJcblx0XHR9IGVsc2UgaWYgKGFuZ2xlIDwgbWluIHx8IGFuZ2xlID4gbWF4KSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0c3RhcnQ6IHBvcyAtIHNpemUgLSA1LFxyXG5cdFx0XHRcdGVuZDogcG9zXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0c3RhcnQ6IHBvcyxcclxuXHRcdFx0ZW5kOiBwb3MgKyBzaXplICsgNVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhlbHBlciBmdW5jdGlvbiB0byBmaXQgYSByYWRpYWwgbGluZWFyIHNjYWxlIHdpdGggcG9pbnQgbGFiZWxzXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gZml0V2l0aFBvaW50TGFiZWxzKHNjYWxlKSB7XHJcblx0XHQvKlxyXG5cdFx0ICogUmlnaHQsIHRoaXMgaXMgcmVhbGx5IGNvbmZ1c2luZyBhbmQgdGhlcmUgaXMgYSBsb3Qgb2YgbWF0aHMgZ29pbmcgb24gaGVyZVxyXG5cdFx0ICogVGhlIGdpc3Qgb2YgdGhlIHByb2JsZW0gaXMgaGVyZTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbm5uaWNrLzY5NmNjOWM1NWY0YjBiZWI4ZmU5XHJcblx0XHQgKlxyXG5cdFx0ICogUmVhY3Rpb246IGh0dHBzOi8vZGwuZHJvcGJveHVzZXJjb250ZW50LmNvbS91LzM0NjAxMzYzL3Rvb211Y2hzY2llbmNlLmdpZlxyXG5cdFx0ICpcclxuXHRcdCAqIFNvbHV0aW9uOlxyXG5cdFx0ICpcclxuXHRcdCAqIFdlIGFzc3VtZSB0aGUgcmFkaXVzIG9mIHRoZSBwb2x5Z29uIGlzIGhhbGYgdGhlIHNpemUgb2YgdGhlIGNhbnZhcyBhdCBmaXJzdFxyXG5cdFx0ICogYXQgZWFjaCBpbmRleCB3ZSBjaGVjayBpZiB0aGUgdGV4dCBvdmVybGFwcy5cclxuXHRcdCAqXHJcblx0XHQgKiBXaGVyZSBpdCBkb2VzLCB3ZSBzdG9yZSB0aGF0IGFuZ2xlIGFuZCB0aGF0IGluZGV4LlxyXG5cdFx0ICpcclxuXHRcdCAqIEFmdGVyIGZpbmRpbmcgdGhlIGxhcmdlc3QgaW5kZXggYW5kIGFuZ2xlIHdlIGNhbGN1bGF0ZSBob3cgbXVjaCB3ZSBuZWVkIHRvIHJlbW92ZVxyXG5cdFx0ICogZnJvbSB0aGUgc2hhcGUgcmFkaXVzIHRvIG1vdmUgdGhlIHBvaW50IGlud2FyZHMgYnkgdGhhdCB4LlxyXG5cdFx0ICpcclxuXHRcdCAqIFdlIGF2ZXJhZ2UgdGhlIGxlZnQgYW5kIHJpZ2h0IGRpc3RhbmNlcyB0byBnZXQgdGhlIG1heGltdW0gc2hhcGUgcmFkaXVzIHRoYXQgY2FuIGZpdCBpbiB0aGUgYm94XHJcblx0XHQgKiBhbG9uZyB3aXRoIGxhYmVscy5cclxuXHRcdCAqXHJcblx0XHQgKiBPbmNlIHdlIGhhdmUgdGhhdCwgd2UgY2FuIGZpbmQgdGhlIGNlbnRyZSBwb2ludCBmb3IgdGhlIGNoYXJ0LCBieSB0YWtpbmcgdGhlIHggdGV4dCBwcm90cnVzaW9uXHJcblx0XHQgKiBvbiBlYWNoIHNpZGUsIHJlbW92aW5nIHRoYXQgZnJvbSB0aGUgc2l6ZSwgaGFsdmluZyBpdCBhbmQgYWRkaW5nIHRoZSBsZWZ0IHggcHJvdHJ1c2lvbiB3aWR0aC5cclxuXHRcdCAqXHJcblx0XHQgKiBUaGlzIHdpbGwgbWVhbiB3ZSBoYXZlIGEgc2hhcGUgZml0dGVkIHRvIHRoZSBjYW52YXMsIGFzIGxhcmdlIGFzIGl0IGNhbiBiZSB3aXRoIHRoZSBsYWJlbHNcclxuXHRcdCAqIGFuZCBwb3NpdGlvbiBpdCBpbiB0aGUgbW9zdCBzcGFjZSBlZmZpY2llbnQgbWFubmVyXHJcblx0XHQgKlxyXG5cdFx0ICogaHR0cHM6Ly9kbC5kcm9wYm94dXNlcmNvbnRlbnQuY29tL3UvMzQ2MDEzNjMveWVhaHNjaWVuY2UuZ2lmXHJcblx0XHQgKi9cclxuXHJcblx0XHR2YXIgcGxGb250ID0gZ2V0UG9pbnRMYWJlbEZvbnRPcHRpb25zKHNjYWxlKTtcclxuXHJcblx0XHQvLyBHZXQgbWF4aW11bSByYWRpdXMgb2YgdGhlIHBvbHlnb24uIEVpdGhlciBoYWxmIHRoZSBoZWlnaHQgKG1pbnVzIHRoZSB0ZXh0IHdpZHRoKSBvciBoYWxmIHRoZSB3aWR0aC5cclxuXHRcdC8vIFVzZSB0aGlzIHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0ICsgY2hhbmdlLiAtIE1ha2Ugc3VyZSBML1IgcHJvdHJ1c2lvbiBpcyBhdCBsZWFzdCAwIHRvIHN0b3AgaXNzdWVzIHdpdGggY2VudHJlIHBvaW50c1xyXG5cdFx0dmFyIGxhcmdlc3RQb3NzaWJsZVJhZGl1cyA9IE1hdGgubWluKHNjYWxlLmhlaWdodCAvIDIsIHNjYWxlLndpZHRoIC8gMik7XHJcblx0XHR2YXIgZnVydGhlc3RMaW1pdHMgPSB7XHJcblx0XHRcdHI6IHNjYWxlLndpZHRoLFxyXG5cdFx0XHRsOiAwLFxyXG5cdFx0XHR0OiBzY2FsZS5oZWlnaHQsXHJcblx0XHRcdGI6IDBcclxuXHRcdH07XHJcblx0XHR2YXIgZnVydGhlc3RBbmdsZXMgPSB7fTtcclxuXHRcdHZhciBpLCB0ZXh0U2l6ZSwgcG9pbnRQb3NpdGlvbjtcclxuXHJcblx0XHRzY2FsZS5jdHguZm9udCA9IHBsRm9udC5mb250O1xyXG5cdFx0c2NhbGUuX3BvaW50TGFiZWxTaXplcyA9IFtdO1xyXG5cclxuXHRcdHZhciB2YWx1ZUNvdW50ID0gZ2V0VmFsdWVDb3VudChzY2FsZSk7XHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgdmFsdWVDb3VudDsgaSsrKSB7XHJcblx0XHRcdHBvaW50UG9zaXRpb24gPSBzY2FsZS5nZXRQb2ludFBvc2l0aW9uKGksIGxhcmdlc3RQb3NzaWJsZVJhZGl1cyk7XHJcblx0XHRcdHRleHRTaXplID0gbWVhc3VyZUxhYmVsU2l6ZShzY2FsZS5jdHgsIHBsRm9udC5zaXplLCBzY2FsZS5wb2ludExhYmVsc1tpXSB8fCAnJyk7XHJcblx0XHRcdHNjYWxlLl9wb2ludExhYmVsU2l6ZXNbaV0gPSB0ZXh0U2l6ZTtcclxuXHJcblx0XHRcdC8vIEFkZCBxdWFydGVyIGNpcmNsZSB0byBtYWtlIGRlZ3JlZSAwIG1lYW4gdG9wIG9mIGNpcmNsZVxyXG5cdFx0XHR2YXIgYW5nbGVSYWRpYW5zID0gc2NhbGUuZ2V0SW5kZXhBbmdsZShpKTtcclxuXHRcdFx0dmFyIGFuZ2xlID0gaGVscGVycy50b0RlZ3JlZXMoYW5nbGVSYWRpYW5zKSAlIDM2MDtcclxuXHRcdFx0dmFyIGhMaW1pdHMgPSBkZXRlcm1pbmVMaW1pdHMoYW5nbGUsIHBvaW50UG9zaXRpb24ueCwgdGV4dFNpemUudywgMCwgMTgwKTtcclxuXHRcdFx0dmFyIHZMaW1pdHMgPSBkZXRlcm1pbmVMaW1pdHMoYW5nbGUsIHBvaW50UG9zaXRpb24ueSwgdGV4dFNpemUuaCwgOTAsIDI3MCk7XHJcblxyXG5cdFx0XHRpZiAoaExpbWl0cy5zdGFydCA8IGZ1cnRoZXN0TGltaXRzLmwpIHtcclxuXHRcdFx0XHRmdXJ0aGVzdExpbWl0cy5sID0gaExpbWl0cy5zdGFydDtcclxuXHRcdFx0XHRmdXJ0aGVzdEFuZ2xlcy5sID0gYW5nbGVSYWRpYW5zO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoaExpbWl0cy5lbmQgPiBmdXJ0aGVzdExpbWl0cy5yKSB7XHJcblx0XHRcdFx0ZnVydGhlc3RMaW1pdHMuciA9IGhMaW1pdHMuZW5kO1xyXG5cdFx0XHRcdGZ1cnRoZXN0QW5nbGVzLnIgPSBhbmdsZVJhZGlhbnM7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh2TGltaXRzLnN0YXJ0IDwgZnVydGhlc3RMaW1pdHMudCkge1xyXG5cdFx0XHRcdGZ1cnRoZXN0TGltaXRzLnQgPSB2TGltaXRzLnN0YXJ0O1xyXG5cdFx0XHRcdGZ1cnRoZXN0QW5nbGVzLnQgPSBhbmdsZVJhZGlhbnM7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh2TGltaXRzLmVuZCA+IGZ1cnRoZXN0TGltaXRzLmIpIHtcclxuXHRcdFx0XHRmdXJ0aGVzdExpbWl0cy5iID0gdkxpbWl0cy5lbmQ7XHJcblx0XHRcdFx0ZnVydGhlc3RBbmdsZXMuYiA9IGFuZ2xlUmFkaWFucztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHNjYWxlLnNldFJlZHVjdGlvbnMobGFyZ2VzdFBvc3NpYmxlUmFkaXVzLCBmdXJ0aGVzdExpbWl0cywgZnVydGhlc3RBbmdsZXMpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGVscGVyIGZ1bmN0aW9uIHRvIGZpdCBhIHJhZGlhbCBsaW5lYXIgc2NhbGUgd2l0aCBubyBwb2ludCBsYWJlbHNcclxuXHQgKi9cclxuXHRmdW5jdGlvbiBmaXQoc2NhbGUpIHtcclxuXHRcdHZhciBsYXJnZXN0UG9zc2libGVSYWRpdXMgPSBNYXRoLm1pbihzY2FsZS5oZWlnaHQgLyAyLCBzY2FsZS53aWR0aCAvIDIpO1xyXG5cdFx0c2NhbGUuZHJhd2luZ0FyZWEgPSBNYXRoLnJvdW5kKGxhcmdlc3RQb3NzaWJsZVJhZGl1cyk7XHJcblx0XHRzY2FsZS5zZXRDZW50ZXJQb2ludCgwLCAwLCAwLCAwKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldFRleHRBbGlnbkZvckFuZ2xlKGFuZ2xlKSB7XHJcblx0XHRpZiAoYW5nbGUgPT09IDAgfHwgYW5nbGUgPT09IDE4MCkge1xyXG5cdFx0XHRyZXR1cm4gJ2NlbnRlcic7XHJcblx0XHR9IGVsc2UgaWYgKGFuZ2xlIDwgMTgwKSB7XHJcblx0XHRcdHJldHVybiAnbGVmdCc7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuICdyaWdodCc7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBmaWxsVGV4dChjdHgsIHRleHQsIHBvc2l0aW9uLCBmb250U2l6ZSkge1xyXG5cdFx0aWYgKGhlbHBlcnMuaXNBcnJheSh0ZXh0KSkge1xyXG5cdFx0XHR2YXIgeSA9IHBvc2l0aW9uLnk7XHJcblx0XHRcdHZhciBzcGFjaW5nID0gMS41ICogZm9udFNpemU7XHJcblxyXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyArK2kpIHtcclxuXHRcdFx0XHRjdHguZmlsbFRleHQodGV4dFtpXSwgcG9zaXRpb24ueCwgeSk7XHJcblx0XHRcdFx0eSArPSBzcGFjaW5nO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjdHguZmlsbFRleHQodGV4dCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBhZGp1c3RQb2ludFBvc2l0aW9uRm9yTGFiZWxIZWlnaHQoYW5nbGUsIHRleHRTaXplLCBwb3NpdGlvbikge1xyXG5cdFx0aWYgKGFuZ2xlID09PSA5MCB8fCBhbmdsZSA9PT0gMjcwKSB7XHJcblx0XHRcdHBvc2l0aW9uLnkgLT0gKHRleHRTaXplLmggLyAyKTtcclxuXHRcdH0gZWxzZSBpZiAoYW5nbGUgPiAyNzAgfHwgYW5nbGUgPCA5MCkge1xyXG5cdFx0XHRwb3NpdGlvbi55IC09IHRleHRTaXplLmg7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBkcmF3UG9pbnRMYWJlbHMoc2NhbGUpIHtcclxuXHRcdHZhciBjdHggPSBzY2FsZS5jdHg7XHJcblx0XHR2YXIgb3B0cyA9IHNjYWxlLm9wdGlvbnM7XHJcblx0XHR2YXIgYW5nbGVMaW5lT3B0cyA9IG9wdHMuYW5nbGVMaW5lcztcclxuXHRcdHZhciBwb2ludExhYmVsT3B0cyA9IG9wdHMucG9pbnRMYWJlbHM7XHJcblxyXG5cdFx0Y3R4LmxpbmVXaWR0aCA9IGFuZ2xlTGluZU9wdHMubGluZVdpZHRoO1xyXG5cdFx0Y3R4LnN0cm9rZVN0eWxlID0gYW5nbGVMaW5lT3B0cy5jb2xvcjtcclxuXHJcblx0XHR2YXIgb3V0ZXJEaXN0YW5jZSA9IHNjYWxlLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKG9wdHMudGlja3MucmV2ZXJzZSA/IHNjYWxlLm1pbiA6IHNjYWxlLm1heCk7XHJcblxyXG5cdFx0Ly8gUG9pbnQgTGFiZWwgRm9udFxyXG5cdFx0dmFyIHBsRm9udCA9IGdldFBvaW50TGFiZWxGb250T3B0aW9ucyhzY2FsZSk7XHJcblxyXG5cdFx0Y3R4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xyXG5cclxuXHRcdGZvciAodmFyIGkgPSBnZXRWYWx1ZUNvdW50KHNjYWxlKSAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcblx0XHRcdGlmIChhbmdsZUxpbmVPcHRzLmRpc3BsYXkpIHtcclxuXHRcdFx0XHR2YXIgb3V0ZXJQb3NpdGlvbiA9IHNjYWxlLmdldFBvaW50UG9zaXRpb24oaSwgb3V0ZXJEaXN0YW5jZSk7XHJcblx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xyXG5cdFx0XHRcdGN0eC5tb3ZlVG8oc2NhbGUueENlbnRlciwgc2NhbGUueUNlbnRlcik7XHJcblx0XHRcdFx0Y3R4LmxpbmVUbyhvdXRlclBvc2l0aW9uLngsIG91dGVyUG9zaXRpb24ueSk7XHJcblx0XHRcdFx0Y3R4LnN0cm9rZSgpO1xyXG5cdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHBvaW50TGFiZWxPcHRzLmRpc3BsYXkpIHtcclxuXHRcdFx0XHQvLyBFeHRyYSAzcHggb3V0IGZvciBzb21lIGxhYmVsIHNwYWNpbmdcclxuXHRcdFx0XHR2YXIgcG9pbnRMYWJlbFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbihpLCBvdXRlckRpc3RhbmNlICsgNSk7XHJcblxyXG5cdFx0XHRcdC8vIEtlZXAgdGhpcyBpbiBsb29wIHNpbmNlIHdlIG1heSBzdXBwb3J0IGFycmF5IHByb3BlcnRpZXMgaGVyZVxyXG5cdFx0XHRcdHZhciBwb2ludExhYmVsRm9udENvbG9yID0gaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQocG9pbnRMYWJlbE9wdHMuZm9udENvbG9yLCBpLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udENvbG9yKTtcclxuXHRcdFx0XHRjdHguZm9udCA9IHBsRm9udC5mb250O1xyXG5cdFx0XHRcdGN0eC5maWxsU3R5bGUgPSBwb2ludExhYmVsRm9udENvbG9yO1xyXG5cclxuXHRcdFx0XHR2YXIgYW5nbGVSYWRpYW5zID0gc2NhbGUuZ2V0SW5kZXhBbmdsZShpKTtcclxuXHRcdFx0XHR2YXIgYW5nbGUgPSBoZWxwZXJzLnRvRGVncmVlcyhhbmdsZVJhZGlhbnMpO1xyXG5cdFx0XHRcdGN0eC50ZXh0QWxpZ24gPSBnZXRUZXh0QWxpZ25Gb3JBbmdsZShhbmdsZSk7XHJcblx0XHRcdFx0YWRqdXN0UG9pbnRQb3NpdGlvbkZvckxhYmVsSGVpZ2h0KGFuZ2xlLCBzY2FsZS5fcG9pbnRMYWJlbFNpemVzW2ldLCBwb2ludExhYmVsUG9zaXRpb24pO1xyXG5cdFx0XHRcdGZpbGxUZXh0KGN0eCwgc2NhbGUucG9pbnRMYWJlbHNbaV0gfHwgJycsIHBvaW50TGFiZWxQb3NpdGlvbiwgcGxGb250LnNpemUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBkcmF3UmFkaXVzTGluZShzY2FsZSwgZ3JpZExpbmVPcHRzLCByYWRpdXMsIGluZGV4KSB7XHJcblx0XHR2YXIgY3R4ID0gc2NhbGUuY3R4O1xyXG5cdFx0Y3R4LnN0cm9rZVN0eWxlID0gaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQoZ3JpZExpbmVPcHRzLmNvbG9yLCBpbmRleCAtIDEpO1xyXG5cdFx0Y3R4LmxpbmVXaWR0aCA9IGhlbHBlcnMudmFsdWVBdEluZGV4T3JEZWZhdWx0KGdyaWRMaW5lT3B0cy5saW5lV2lkdGgsIGluZGV4IC0gMSk7XHJcblxyXG5cdFx0aWYgKHNjYWxlLm9wdGlvbnMuZ3JpZExpbmVzLmNpcmN1bGFyKSB7XHJcblx0XHRcdC8vIERyYXcgY2lyY3VsYXIgYXJjcyBiZXR3ZWVuIHRoZSBwb2ludHNcclxuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xyXG5cdFx0XHRjdHguYXJjKHNjYWxlLnhDZW50ZXIsIHNjYWxlLnlDZW50ZXIsIHJhZGl1cywgMCwgTWF0aC5QSSAqIDIpO1xyXG5cdFx0XHRjdHguY2xvc2VQYXRoKCk7XHJcblx0XHRcdGN0eC5zdHJva2UoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIERyYXcgc3RyYWlnaHQgbGluZXMgY29ubmVjdGluZyBlYWNoIGluZGV4XHJcblx0XHRcdHZhciB2YWx1ZUNvdW50ID0gZ2V0VmFsdWVDb3VudChzY2FsZSk7XHJcblxyXG5cdFx0XHRpZiAodmFsdWVDb3VudCA9PT0gMCkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xyXG5cdFx0XHR2YXIgcG9pbnRQb3NpdGlvbiA9IHNjYWxlLmdldFBvaW50UG9zaXRpb24oMCwgcmFkaXVzKTtcclxuXHRcdFx0Y3R4Lm1vdmVUbyhwb2ludFBvc2l0aW9uLngsIHBvaW50UG9zaXRpb24ueSk7XHJcblxyXG5cdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8IHZhbHVlQ291bnQ7IGkrKykge1xyXG5cdFx0XHRcdHBvaW50UG9zaXRpb24gPSBzY2FsZS5nZXRQb2ludFBvc2l0aW9uKGksIHJhZGl1cyk7XHJcblx0XHRcdFx0Y3R4LmxpbmVUbyhwb2ludFBvc2l0aW9uLngsIHBvaW50UG9zaXRpb24ueSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcclxuXHRcdFx0Y3R4LnN0cm9rZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gbnVtYmVyT3JaZXJvKHBhcmFtKSB7XHJcblx0XHRyZXR1cm4gaGVscGVycy5pc051bWJlcihwYXJhbSkgPyBwYXJhbSA6IDA7XHJcblx0fVxyXG5cclxuXHR2YXIgTGluZWFyUmFkaWFsU2NhbGUgPSBDaGFydC5MaW5lYXJTY2FsZUJhc2UuZXh0ZW5kKHtcclxuXHRcdHNldERpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgb3B0cyA9IG1lLm9wdGlvbnM7XHJcblx0XHRcdHZhciB0aWNrT3B0cyA9IG9wdHMudGlja3M7XHJcblx0XHRcdC8vIFNldCB0aGUgdW5jb25zdHJhaW5lZCBkaW1lbnNpb24gYmVmb3JlIGxhYmVsIHJvdGF0aW9uXHJcblx0XHRcdG1lLndpZHRoID0gbWUubWF4V2lkdGg7XHJcblx0XHRcdG1lLmhlaWdodCA9IG1lLm1heEhlaWdodDtcclxuXHRcdFx0bWUueENlbnRlciA9IE1hdGgucm91bmQobWUud2lkdGggLyAyKTtcclxuXHRcdFx0bWUueUNlbnRlciA9IE1hdGgucm91bmQobWUuaGVpZ2h0IC8gMik7XHJcblxyXG5cdFx0XHR2YXIgbWluU2l6ZSA9IGhlbHBlcnMubWluKFttZS5oZWlnaHQsIG1lLndpZHRoXSk7XHJcblx0XHRcdHZhciB0aWNrRm9udFNpemUgPSBoZWxwZXJzLnZhbHVlT3JEZWZhdWx0KHRpY2tPcHRzLmZvbnRTaXplLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFNpemUpO1xyXG5cdFx0XHRtZS5kcmF3aW5nQXJlYSA9IG9wdHMuZGlzcGxheSA/IChtaW5TaXplIC8gMikgLSAodGlja0ZvbnRTaXplIC8gMiArIHRpY2tPcHRzLmJhY2tkcm9wUGFkZGluZ1kpIDogKG1pblNpemUgLyAyKTtcclxuXHRcdH0sXHJcblx0XHRkZXRlcm1pbmVEYXRhTGltaXRzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XHJcblx0XHRcdHZhciBtaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcblx0XHRcdHZhciBtYXggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XHJcblxyXG5cdFx0XHRoZWxwZXJzLmVhY2goY2hhcnQuZGF0YS5kYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XHJcblx0XHRcdFx0aWYgKGNoYXJ0LmlzRGF0YXNldFZpc2libGUoZGF0YXNldEluZGV4KSkge1xyXG5cdFx0XHRcdFx0dmFyIG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xyXG5cclxuXHRcdFx0XHRcdGhlbHBlcnMuZWFjaChkYXRhc2V0LmRhdGEsIGZ1bmN0aW9uKHJhd1ZhbHVlLCBpbmRleCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSArbWUuZ2V0UmlnaHRWYWx1ZShyYXdWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdGlmIChpc05hTih2YWx1ZSkgfHwgbWV0YS5kYXRhW2luZGV4XS5oaWRkZW4pIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdG1pbiA9IE1hdGgubWluKHZhbHVlLCBtaW4pO1xyXG5cdFx0XHRcdFx0XHRtYXggPSBNYXRoLm1heCh2YWx1ZSwgbWF4KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRtZS5taW4gPSAobWluID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgPyAwIDogbWluKTtcclxuXHRcdFx0bWUubWF4ID0gKG1heCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID8gMCA6IG1heCk7XHJcblxyXG5cdFx0XHQvLyBDb21tb24gYmFzZSBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgdGlja3MubWluLCB0aWNrcy5tYXgsIHRpY2tzLmJlZ2luQXRaZXJvXHJcblx0XHRcdG1lLmhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKTtcclxuXHRcdH0sXHJcblx0XHRnZXRUaWNrTGltaXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgdGlja09wdHMgPSB0aGlzLm9wdGlvbnMudGlja3M7XHJcblx0XHRcdHZhciB0aWNrRm9udFNpemUgPSBoZWxwZXJzLnZhbHVlT3JEZWZhdWx0KHRpY2tPcHRzLmZvbnRTaXplLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFNpemUpO1xyXG5cdFx0XHRyZXR1cm4gTWF0aC5taW4odGlja09wdHMubWF4VGlja3NMaW1pdCA/IHRpY2tPcHRzLm1heFRpY2tzTGltaXQgOiAxMSwgTWF0aC5jZWlsKHRoaXMuZHJhd2luZ0FyZWEgLyAoMS41ICogdGlja0ZvbnRTaXplKSkpO1xyXG5cdFx0fSxcclxuXHRcdGNvbnZlcnRUaWNrc1RvTGFiZWxzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHJcblx0XHRcdENoYXJ0LkxpbmVhclNjYWxlQmFzZS5wcm90b3R5cGUuY29udmVydFRpY2tzVG9MYWJlbHMuY2FsbChtZSk7XHJcblxyXG5cdFx0XHQvLyBQb2ludCBsYWJlbHNcclxuXHRcdFx0bWUucG9pbnRMYWJlbHMgPSBtZS5jaGFydC5kYXRhLmxhYmVscy5tYXAobWUub3B0aW9ucy5wb2ludExhYmVscy5jYWxsYmFjaywgbWUpO1xyXG5cdFx0fSxcclxuXHRcdGdldExhYmVsRm9ySW5kZXg6IGZ1bmN0aW9uKGluZGV4LCBkYXRhc2V0SW5kZXgpIHtcclxuXHRcdFx0cmV0dXJuICt0aGlzLmdldFJpZ2h0VmFsdWUodGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uZGF0YVtpbmRleF0pO1xyXG5cdFx0fSxcclxuXHRcdGZpdDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmICh0aGlzLm9wdGlvbnMucG9pbnRMYWJlbHMuZGlzcGxheSkge1xyXG5cdFx0XHRcdGZpdFdpdGhQb2ludExhYmVscyh0aGlzKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmaXQodGhpcyk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIFNldCByYWRpdXMgcmVkdWN0aW9ucyBhbmQgZGV0ZXJtaW5lIG5ldyByYWRpdXMgYW5kIGNlbnRlciBwb2ludFxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0c2V0UmVkdWN0aW9uczogZnVuY3Rpb24obGFyZ2VzdFBvc3NpYmxlUmFkaXVzLCBmdXJ0aGVzdExpbWl0cywgZnVydGhlc3RBbmdsZXMpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIHJhZGl1c1JlZHVjdGlvbkxlZnQgPSBmdXJ0aGVzdExpbWl0cy5sIC8gTWF0aC5zaW4oZnVydGhlc3RBbmdsZXMubCk7XHJcblx0XHRcdHZhciByYWRpdXNSZWR1Y3Rpb25SaWdodCA9IE1hdGgubWF4KGZ1cnRoZXN0TGltaXRzLnIgLSBtZS53aWR0aCwgMCkgLyBNYXRoLnNpbihmdXJ0aGVzdEFuZ2xlcy5yKTtcclxuXHRcdFx0dmFyIHJhZGl1c1JlZHVjdGlvblRvcCA9IC1mdXJ0aGVzdExpbWl0cy50IC8gTWF0aC5jb3MoZnVydGhlc3RBbmdsZXMudCk7XHJcblx0XHRcdHZhciByYWRpdXNSZWR1Y3Rpb25Cb3R0b20gPSAtTWF0aC5tYXgoZnVydGhlc3RMaW1pdHMuYiAtIG1lLmhlaWdodCwgMCkgLyBNYXRoLmNvcyhmdXJ0aGVzdEFuZ2xlcy5iKTtcclxuXHJcblx0XHRcdHJhZGl1c1JlZHVjdGlvbkxlZnQgPSBudW1iZXJPclplcm8ocmFkaXVzUmVkdWN0aW9uTGVmdCk7XHJcblx0XHRcdHJhZGl1c1JlZHVjdGlvblJpZ2h0ID0gbnVtYmVyT3JaZXJvKHJhZGl1c1JlZHVjdGlvblJpZ2h0KTtcclxuXHRcdFx0cmFkaXVzUmVkdWN0aW9uVG9wID0gbnVtYmVyT3JaZXJvKHJhZGl1c1JlZHVjdGlvblRvcCk7XHJcblx0XHRcdHJhZGl1c1JlZHVjdGlvbkJvdHRvbSA9IG51bWJlck9yWmVybyhyYWRpdXNSZWR1Y3Rpb25Cb3R0b20pO1xyXG5cclxuXHRcdFx0bWUuZHJhd2luZ0FyZWEgPSBNYXRoLm1pbihcclxuXHRcdFx0XHRNYXRoLnJvdW5kKGxhcmdlc3RQb3NzaWJsZVJhZGl1cyAtIChyYWRpdXNSZWR1Y3Rpb25MZWZ0ICsgcmFkaXVzUmVkdWN0aW9uUmlnaHQpIC8gMiksXHJcblx0XHRcdFx0TWF0aC5yb3VuZChsYXJnZXN0UG9zc2libGVSYWRpdXMgLSAocmFkaXVzUmVkdWN0aW9uVG9wICsgcmFkaXVzUmVkdWN0aW9uQm90dG9tKSAvIDIpKTtcclxuXHRcdFx0bWUuc2V0Q2VudGVyUG9pbnQocmFkaXVzUmVkdWN0aW9uTGVmdCwgcmFkaXVzUmVkdWN0aW9uUmlnaHQsIHJhZGl1c1JlZHVjdGlvblRvcCwgcmFkaXVzUmVkdWN0aW9uQm90dG9tKTtcclxuXHRcdH0sXHJcblx0XHRzZXRDZW50ZXJQb2ludDogZnVuY3Rpb24obGVmdE1vdmVtZW50LCByaWdodE1vdmVtZW50LCB0b3BNb3ZlbWVudCwgYm90dG9tTW92ZW1lbnQpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIG1heFJpZ2h0ID0gbWUud2lkdGggLSByaWdodE1vdmVtZW50IC0gbWUuZHJhd2luZ0FyZWE7XHJcblx0XHRcdHZhciBtYXhMZWZ0ID0gbGVmdE1vdmVtZW50ICsgbWUuZHJhd2luZ0FyZWE7XHJcblx0XHRcdHZhciBtYXhUb3AgPSB0b3BNb3ZlbWVudCArIG1lLmRyYXdpbmdBcmVhO1xyXG5cdFx0XHR2YXIgbWF4Qm90dG9tID0gbWUuaGVpZ2h0IC0gYm90dG9tTW92ZW1lbnQgLSBtZS5kcmF3aW5nQXJlYTtcclxuXHJcblx0XHRcdG1lLnhDZW50ZXIgPSBNYXRoLnJvdW5kKCgobWF4TGVmdCArIG1heFJpZ2h0KSAvIDIpICsgbWUubGVmdCk7XHJcblx0XHRcdG1lLnlDZW50ZXIgPSBNYXRoLnJvdW5kKCgobWF4VG9wICsgbWF4Qm90dG9tKSAvIDIpICsgbWUudG9wKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Z2V0SW5kZXhBbmdsZTogZnVuY3Rpb24oaW5kZXgpIHtcclxuXHRcdFx0dmFyIGFuZ2xlTXVsdGlwbGllciA9IChNYXRoLlBJICogMikgLyBnZXRWYWx1ZUNvdW50KHRoaXMpO1xyXG5cdFx0XHR2YXIgc3RhcnRBbmdsZSA9IHRoaXMuY2hhcnQub3B0aW9ucyAmJiB0aGlzLmNoYXJ0Lm9wdGlvbnMuc3RhcnRBbmdsZSA/XHJcblx0XHRcdFx0dGhpcy5jaGFydC5vcHRpb25zLnN0YXJ0QW5nbGUgOlxyXG5cdFx0XHRcdDA7XHJcblxyXG5cdFx0XHR2YXIgc3RhcnRBbmdsZVJhZGlhbnMgPSBzdGFydEFuZ2xlICogTWF0aC5QSSAqIDIgLyAzNjA7XHJcblxyXG5cdFx0XHQvLyBTdGFydCBmcm9tIHRoZSB0b3AgaW5zdGVhZCBvZiByaWdodCwgc28gcmVtb3ZlIGEgcXVhcnRlciBvZiB0aGUgY2lyY2xlXHJcblx0XHRcdHJldHVybiBpbmRleCAqIGFuZ2xlTXVsdGlwbGllciArIHN0YXJ0QW5nbGVSYWRpYW5zO1xyXG5cdFx0fSxcclxuXHRcdGdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlOiBmdW5jdGlvbih2YWx1ZSkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XHJcblx0XHRcdFx0cmV0dXJuIDA7IC8vIG51bGwgYWx3YXlzIGluIGNlbnRlclxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBUYWtlIGludG8gYWNjb3VudCBoYWxmIGZvbnQgc2l6ZSArIHRoZSB5UGFkZGluZyBvZiB0aGUgdG9wIHZhbHVlXHJcblx0XHRcdHZhciBzY2FsaW5nRmFjdG9yID0gbWUuZHJhd2luZ0FyZWEgLyAobWUubWF4IC0gbWUubWluKTtcclxuXHRcdFx0aWYgKG1lLm9wdGlvbnMudGlja3MucmV2ZXJzZSkge1xyXG5cdFx0XHRcdHJldHVybiAobWUubWF4IC0gdmFsdWUpICogc2NhbGluZ0ZhY3RvcjtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gKHZhbHVlIC0gbWUubWluKSAqIHNjYWxpbmdGYWN0b3I7XHJcblx0XHR9LFxyXG5cdFx0Z2V0UG9pbnRQb3NpdGlvbjogZnVuY3Rpb24oaW5kZXgsIGRpc3RhbmNlRnJvbUNlbnRlcikge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgdGhpc0FuZ2xlID0gbWUuZ2V0SW5kZXhBbmdsZShpbmRleCkgLSAoTWF0aC5QSSAvIDIpO1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHg6IE1hdGgucm91bmQoTWF0aC5jb3ModGhpc0FuZ2xlKSAqIGRpc3RhbmNlRnJvbUNlbnRlcikgKyBtZS54Q2VudGVyLFxyXG5cdFx0XHRcdHk6IE1hdGgucm91bmQoTWF0aC5zaW4odGhpc0FuZ2xlKSAqIGRpc3RhbmNlRnJvbUNlbnRlcikgKyBtZS55Q2VudGVyXHJcblx0XHRcdH07XHJcblx0XHR9LFxyXG5cdFx0Z2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlOiBmdW5jdGlvbihpbmRleCwgdmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0UG9pbnRQb3NpdGlvbihpbmRleCwgdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh2YWx1ZSkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHRnZXRCYXNlUG9zaXRpb246IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgbWluID0gbWUubWluO1xyXG5cdFx0XHR2YXIgbWF4ID0gbWUubWF4O1xyXG5cclxuXHRcdFx0cmV0dXJuIG1lLmdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZSgwLFxyXG5cdFx0XHRcdG1lLmJlZ2luQXRaZXJvID8gMCA6XHJcblx0XHRcdFx0bWluIDwgMCAmJiBtYXggPCAwID8gbWF4IDpcclxuXHRcdFx0XHRtaW4gPiAwICYmIG1heCA+IDAgPyBtaW4gOlxyXG5cdFx0XHRcdDApO1xyXG5cdFx0fSxcclxuXHJcblx0XHRkcmF3OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIG9wdHMgPSBtZS5vcHRpb25zO1xyXG5cdFx0XHR2YXIgZ3JpZExpbmVPcHRzID0gb3B0cy5ncmlkTGluZXM7XHJcblx0XHRcdHZhciB0aWNrT3B0cyA9IG9wdHMudGlja3M7XHJcblx0XHRcdHZhciB2YWx1ZU9yRGVmYXVsdCA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQ7XHJcblxyXG5cdFx0XHRpZiAob3B0cy5kaXNwbGF5KSB7XHJcblx0XHRcdFx0dmFyIGN0eCA9IG1lLmN0eDtcclxuXHRcdFx0XHR2YXIgc3RhcnRBbmdsZSA9IHRoaXMuZ2V0SW5kZXhBbmdsZSgwKTtcclxuXHJcblx0XHRcdFx0Ly8gVGljayBGb250XHJcblx0XHRcdFx0dmFyIHRpY2tGb250U2l6ZSA9IHZhbHVlT3JEZWZhdWx0KHRpY2tPcHRzLmZvbnRTaXplLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFNpemUpO1xyXG5cdFx0XHRcdHZhciB0aWNrRm9udFN0eWxlID0gdmFsdWVPckRlZmF1bHQodGlja09wdHMuZm9udFN0eWxlLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFN0eWxlKTtcclxuXHRcdFx0XHR2YXIgdGlja0ZvbnRGYW1pbHkgPSB2YWx1ZU9yRGVmYXVsdCh0aWNrT3B0cy5mb250RmFtaWx5LCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udEZhbWlseSk7XHJcblx0XHRcdFx0dmFyIHRpY2tMYWJlbEZvbnQgPSBoZWxwZXJzLmZvbnRTdHJpbmcodGlja0ZvbnRTaXplLCB0aWNrRm9udFN0eWxlLCB0aWNrRm9udEZhbWlseSk7XHJcblxyXG5cdFx0XHRcdGhlbHBlcnMuZWFjaChtZS50aWNrcywgZnVuY3Rpb24obGFiZWwsIGluZGV4KSB7XHJcblx0XHRcdFx0XHQvLyBEb24ndCBkcmF3IGEgY2VudHJlIHZhbHVlIChpZiBpdCBpcyBtaW5pbXVtKVxyXG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gMCB8fCB0aWNrT3B0cy5yZXZlcnNlKSB7XHJcblx0XHRcdFx0XHRcdHZhciB5Q2VudGVyT2Zmc2V0ID0gbWUuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUobWUudGlja3NBc051bWJlcnNbaW5kZXhdKTtcclxuXHJcblx0XHRcdFx0XHRcdC8vIERyYXcgY2lyY3VsYXIgbGluZXMgYXJvdW5kIHRoZSBzY2FsZVxyXG5cdFx0XHRcdFx0XHRpZiAoZ3JpZExpbmVPcHRzLmRpc3BsYXkgJiYgaW5kZXggIT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRkcmF3UmFkaXVzTGluZShtZSwgZ3JpZExpbmVPcHRzLCB5Q2VudGVyT2Zmc2V0LCBpbmRleCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmICh0aWNrT3B0cy5kaXNwbGF5KSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHRpY2tGb250Q29sb3IgPSB2YWx1ZU9yRGVmYXVsdCh0aWNrT3B0cy5mb250Q29sb3IsIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250Q29sb3IpO1xyXG5cdFx0XHRcdFx0XHRcdGN0eC5mb250ID0gdGlja0xhYmVsRm9udDtcclxuXHJcblx0XHRcdFx0XHRcdFx0Y3R4LnNhdmUoKTtcclxuXHRcdFx0XHRcdFx0XHRjdHgudHJhbnNsYXRlKG1lLnhDZW50ZXIsIG1lLnlDZW50ZXIpO1xyXG5cdFx0XHRcdFx0XHRcdGN0eC5yb3RhdGUoc3RhcnRBbmdsZSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmICh0aWNrT3B0cy5zaG93TGFiZWxCYWNrZHJvcCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGxhYmVsV2lkdGggPSBjdHgubWVhc3VyZVRleHQobGFiZWwpLndpZHRoO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHRpY2tPcHRzLmJhY2tkcm9wQ29sb3I7XHJcblx0XHRcdFx0XHRcdFx0XHRjdHguZmlsbFJlY3QoXHJcblx0XHRcdFx0XHRcdFx0XHRcdC1sYWJlbFdpZHRoIC8gMiAtIHRpY2tPcHRzLmJhY2tkcm9wUGFkZGluZ1gsXHJcblx0XHRcdFx0XHRcdFx0XHRcdC15Q2VudGVyT2Zmc2V0IC0gdGlja0ZvbnRTaXplIC8gMiAtIHRpY2tPcHRzLmJhY2tkcm9wUGFkZGluZ1ksXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsV2lkdGggKyB0aWNrT3B0cy5iYWNrZHJvcFBhZGRpbmdYICogMixcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGlja0ZvbnRTaXplICsgdGlja09wdHMuYmFja2Ryb3BQYWRkaW5nWSAqIDJcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRjdHgudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0XHRcdFx0XHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xyXG5cdFx0XHRcdFx0XHRcdGN0eC5maWxsU3R5bGUgPSB0aWNrRm9udENvbG9yO1xyXG5cdFx0XHRcdFx0XHRcdGN0eC5maWxsVGV4dChsYWJlbCwgMCwgLXlDZW50ZXJPZmZzZXQpO1xyXG5cdFx0XHRcdFx0XHRcdGN0eC5yZXN0b3JlKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aWYgKG9wdHMuYW5nbGVMaW5lcy5kaXNwbGF5IHx8IG9wdHMucG9pbnRMYWJlbHMuZGlzcGxheSkge1xyXG5cdFx0XHRcdFx0ZHJhd1BvaW50TGFiZWxzKG1lKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0c2NhbGVTZXJ2aWNlLnJlZ2lzdGVyU2NhbGVUeXBlKCdyYWRpYWxMaW5lYXInLCBMaW5lYXJSYWRpYWxTY2FsZSwgZGVmYXVsdENvbmZpZyk7XHJcbn07XHJcblxyXG59LHtcIjI2XCI6MjYsXCIzNFwiOjM0LFwiMzVcIjozNSxcIjQ2XCI6NDZ9XSw1OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XHJcbi8qIGdsb2JhbCB3aW5kb3c6IGZhbHNlICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBtb21lbnQgPSByZXF1aXJlKDEpO1xyXG5tb21lbnQgPSB0eXBlb2YgbW9tZW50ID09PSAnZnVuY3Rpb24nID8gbW9tZW50IDogd2luZG93Lm1vbWVudDtcclxuXHJcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoMjYpO1xyXG52YXIgaGVscGVycyA9IHJlcXVpcmUoNDYpO1xyXG52YXIgU2NhbGUgPSByZXF1aXJlKDMzKTtcclxudmFyIHNjYWxlU2VydmljZSA9IHJlcXVpcmUoMzQpO1xyXG5cclxuLy8gSW50ZWdlciBjb25zdGFudHMgYXJlIGZyb20gdGhlIEVTNiBzcGVjLlxyXG52YXIgTUlOX0lOVEVHRVIgPSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiB8fCAtOTAwNzE5OTI1NDc0MDk5MTtcclxudmFyIE1BWF9JTlRFR0VSID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHwgOTAwNzE5OTI1NDc0MDk5MTtcclxuXHJcbnZhciBJTlRFUlZBTFMgPSB7XHJcblx0bWlsbGlzZWNvbmQ6IHtcclxuXHRcdGNvbW1vbjogdHJ1ZSxcclxuXHRcdHNpemU6IDEsXHJcblx0XHRzdGVwczogWzEsIDIsIDUsIDEwLCAyMCwgNTAsIDEwMCwgMjUwLCA1MDBdXHJcblx0fSxcclxuXHRzZWNvbmQ6IHtcclxuXHRcdGNvbW1vbjogdHJ1ZSxcclxuXHRcdHNpemU6IDEwMDAsXHJcblx0XHRzdGVwczogWzEsIDIsIDUsIDEwLCAxNSwgMzBdXHJcblx0fSxcclxuXHRtaW51dGU6IHtcclxuXHRcdGNvbW1vbjogdHJ1ZSxcclxuXHRcdHNpemU6IDYwMDAwLFxyXG5cdFx0c3RlcHM6IFsxLCAyLCA1LCAxMCwgMTUsIDMwXVxyXG5cdH0sXHJcblx0aG91cjoge1xyXG5cdFx0Y29tbW9uOiB0cnVlLFxyXG5cdFx0c2l6ZTogMzYwMDAwMCxcclxuXHRcdHN0ZXBzOiBbMSwgMiwgMywgNiwgMTJdXHJcblx0fSxcclxuXHRkYXk6IHtcclxuXHRcdGNvbW1vbjogdHJ1ZSxcclxuXHRcdHNpemU6IDg2NDAwMDAwLFxyXG5cdFx0c3RlcHM6IFsxLCAyLCA1XVxyXG5cdH0sXHJcblx0d2Vlazoge1xyXG5cdFx0Y29tbW9uOiBmYWxzZSxcclxuXHRcdHNpemU6IDYwNDgwMDAwMCxcclxuXHRcdHN0ZXBzOiBbMSwgMiwgMywgNF1cclxuXHR9LFxyXG5cdG1vbnRoOiB7XHJcblx0XHRjb21tb246IHRydWUsXHJcblx0XHRzaXplOiAyLjYyOGU5LFxyXG5cdFx0c3RlcHM6IFsxLCAyLCAzXVxyXG5cdH0sXHJcblx0cXVhcnRlcjoge1xyXG5cdFx0Y29tbW9uOiBmYWxzZSxcclxuXHRcdHNpemU6IDcuODg0ZTksXHJcblx0XHRzdGVwczogWzEsIDIsIDMsIDRdXHJcblx0fSxcclxuXHR5ZWFyOiB7XHJcblx0XHRjb21tb246IHRydWUsXHJcblx0XHRzaXplOiAzLjE1NGUxMFxyXG5cdH1cclxufTtcclxuXHJcbnZhciBVTklUUyA9IE9iamVjdC5rZXlzKElOVEVSVkFMUyk7XHJcblxyXG5mdW5jdGlvbiBzb3J0ZXIoYSwgYikge1xyXG5cdHJldHVybiBhIC0gYjtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJyYXlVbmlxdWUoaXRlbXMpIHtcclxuXHR2YXIgaGFzaCA9IHt9O1xyXG5cdHZhciBvdXQgPSBbXTtcclxuXHR2YXIgaSwgaWxlbiwgaXRlbTtcclxuXHJcblx0Zm9yIChpID0gMCwgaWxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0aXRlbSA9IGl0ZW1zW2ldO1xyXG5cdFx0aWYgKCFoYXNoW2l0ZW1dKSB7XHJcblx0XHRcdGhhc2hbaXRlbV0gPSB0cnVlO1xyXG5cdFx0XHRvdXQucHVzaChpdGVtKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIHt0aW1lLCBwb3N9IG9iamVjdHMgdXNlZCB0byBpbnRlcnBvbGF0ZSBhIHNwZWNpZmljIGB0aW1lYCBvciBwb3NpdGlvblxyXG4gKiAoYHBvc2ApIG9uIHRoZSBzY2FsZSwgYnkgc2VhcmNoaW5nIGVudHJpZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgcmVxdWVzdGVkIHZhbHVlLiBgcG9zYCBpc1xyXG4gKiBhIGRlY2ltYWwgYmV0d2VlbiAwIGFuZCAxOiAwIGJlaW5nIHRoZSBzdGFydCBvZiB0aGUgc2NhbGUgKGxlZnQgb3IgdG9wKSBhbmQgMSB0aGUgb3RoZXJcclxuICogZXh0cmVtaXR5IChsZWZ0ICsgd2lkdGggb3IgdG9wICsgaGVpZ2h0KS4gTm90ZSB0aGF0IGl0IHdvdWxkIGJlIG1vcmUgb3B0aW1pemVkIHRvIGRpcmVjdGx5XHJcbiAqIHN0b3JlIHByZS1jb21wdXRlZCBwaXhlbHMsIGJ1dCB0aGUgc2NhbGUgZGltZW5zaW9ucyBhcmUgbm90IGd1YXJhbnRlZWQgYXQgdGhlIHRpbWUgd2UgbmVlZFxyXG4gKiB0byBjcmVhdGUgdGhlIGxvb2t1cCB0YWJsZS4gVGhlIHRhYmxlIEFMV0FZUyBjb250YWlucyBhdCBsZWFzdCB0d28gaXRlbXM6IG1pbiBhbmQgbWF4LlxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcltdfSB0aW1lc3RhbXBzIC0gdGltZXN0YW1wcyBzb3J0ZWQgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdC5cclxuICogQHBhcmFtIHtTdHJpbmd9IGRpc3RyaWJ1dGlvbiAtIElmICdsaW5lYXInLCB0aW1lc3RhbXBzIHdpbGwgYmUgc3ByZWFkIGxpbmVhcmx5IGFsb25nIHRoZSBtaW5cclxuICogYW5kIG1heCByYW5nZSwgc28gYmFzaWNhbGx5LCB0aGUgdGFibGUgd2lsbCBjb250YWlucyBvbmx5IHR3byBpdGVtczoge21pbiwgMH0gYW5kIHttYXgsIDF9LlxyXG4gKiBJZiAnc2VyaWVzJywgdGltZXN0YW1wcyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSBlYWNoIG90aGVyLiBJbiB0aGlzXHJcbiAqIGNhc2UsIG9ubHkgdGltZXN0YW1wcyB0aGF0IGJyZWFrIHRoZSB0aW1lIGxpbmVhcml0eSBhcmUgcmVnaXN0ZXJlZCwgbWVhbmluZyB0aGF0IGluIHRoZVxyXG4gKiBiZXN0IGNhc2UsIGFsbCB0aW1lc3RhbXBzIGFyZSBsaW5lYXIsIHRoZSB0YWJsZSBjb250YWlucyBvbmx5IG1pbiBhbmQgbWF4LlxyXG4gKi9cclxuZnVuY3Rpb24gYnVpbGRMb29rdXBUYWJsZSh0aW1lc3RhbXBzLCBtaW4sIG1heCwgZGlzdHJpYnV0aW9uKSB7XHJcblx0aWYgKGRpc3RyaWJ1dGlvbiA9PT0gJ2xpbmVhcicgfHwgIXRpbWVzdGFtcHMubGVuZ3RoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7dGltZTogbWluLCBwb3M6IDB9LFxyXG5cdFx0XHR7dGltZTogbWF4LCBwb3M6IDF9XHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0dmFyIHRhYmxlID0gW107XHJcblx0dmFyIGl0ZW1zID0gW21pbl07XHJcblx0dmFyIGksIGlsZW4sIHByZXYsIGN1cnIsIG5leHQ7XHJcblxyXG5cdGZvciAoaSA9IDAsIGlsZW4gPSB0aW1lc3RhbXBzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0Y3VyciA9IHRpbWVzdGFtcHNbaV07XHJcblx0XHRpZiAoY3VyciA+IG1pbiAmJiBjdXJyIDwgbWF4KSB7XHJcblx0XHRcdGl0ZW1zLnB1c2goY3Vycik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpdGVtcy5wdXNoKG1heCk7XHJcblxyXG5cdGZvciAoaSA9IDAsIGlsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdG5leHQgPSBpdGVtc1tpICsgMV07XHJcblx0XHRwcmV2ID0gaXRlbXNbaSAtIDFdO1xyXG5cdFx0Y3VyciA9IGl0ZW1zW2ldO1xyXG5cclxuXHRcdC8vIG9ubHkgYWRkIHBvaW50cyB0aGF0IGJyZWFrcyB0aGUgc2NhbGUgbGluZWFyaXR5XHJcblx0XHRpZiAocHJldiA9PT0gdW5kZWZpbmVkIHx8IG5leHQgPT09IHVuZGVmaW5lZCB8fCBNYXRoLnJvdW5kKChuZXh0ICsgcHJldikgLyAyKSAhPT0gY3Vycikge1xyXG5cdFx0XHR0YWJsZS5wdXNoKHt0aW1lOiBjdXJyLCBwb3M6IGkgLyAoaWxlbiAtIDEpfSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdGFibGU7XHJcbn1cclxuXHJcbi8vIEBzZWUgYWRhcHRlZCBmcm9tIGh0dHA6Ly93d3cuYW51amdha2hhci5jb20vMjAxNC8wMy8wMS9iaW5hcnktc2VhcmNoLWluLWphdmFzY3JpcHQvXHJcbmZ1bmN0aW9uIGxvb2t1cCh0YWJsZSwga2V5LCB2YWx1ZSkge1xyXG5cdHZhciBsbyA9IDA7XHJcblx0dmFyIGhpID0gdGFibGUubGVuZ3RoIC0gMTtcclxuXHR2YXIgbWlkLCBpMCwgaTE7XHJcblxyXG5cdHdoaWxlIChsbyA+PSAwICYmIGxvIDw9IGhpKSB7XHJcblx0XHRtaWQgPSAobG8gKyBoaSkgPj4gMTtcclxuXHRcdGkwID0gdGFibGVbbWlkIC0gMV0gfHwgbnVsbDtcclxuXHRcdGkxID0gdGFibGVbbWlkXTtcclxuXHJcblx0XHRpZiAoIWkwKSB7XHJcblx0XHRcdC8vIGdpdmVuIHZhbHVlIGlzIG91dHNpZGUgdGFibGUgKGJlZm9yZSBmaXJzdCBpdGVtKVxyXG5cdFx0XHRyZXR1cm4ge2xvOiBudWxsLCBoaTogaTF9O1xyXG5cdFx0fSBlbHNlIGlmIChpMVtrZXldIDwgdmFsdWUpIHtcclxuXHRcdFx0bG8gPSBtaWQgKyAxO1xyXG5cdFx0fSBlbHNlIGlmIChpMFtrZXldID4gdmFsdWUpIHtcclxuXHRcdFx0aGkgPSBtaWQgLSAxO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHtsbzogaTAsIGhpOiBpMX07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBnaXZlbiB2YWx1ZSBpcyBvdXRzaWRlIHRhYmxlIChhZnRlciBsYXN0IGl0ZW0pXHJcblx0cmV0dXJuIHtsbzogaTEsIGhpOiBudWxsfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExpbmVhcmx5IGludGVycG9sYXRlcyB0aGUgZ2l2ZW4gc291cmNlIGB2YWx1ZWAgdXNpbmcgdGhlIHRhYmxlIGl0ZW1zIGBza2V5YCB2YWx1ZXMgYW5kXHJcbiAqIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgYHRrZXlgIHZhbHVlLiBGb3IgZXhhbXBsZSwgaW50ZXJwb2xhdGUodGFibGUsICd0aW1lJywgNDIsICdwb3MnKVxyXG4gKiByZXR1cm5zIHRoZSBwb3NpdGlvbiBmb3IgYSB0aW1lc3RhbXAgZXF1YWwgdG8gNDIuIElmIHZhbHVlIGlzIG91dCBvZiBib3VuZHMsIHZhbHVlcyBhdFxyXG4gKiBpbmRleCBbMCwgMV0gb3IgW24gLSAxLCBuXSBhcmUgdXNlZCBmb3IgdGhlIGludGVycG9sYXRpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZSh0YWJsZSwgc2tleSwgc3ZhbCwgdGtleSkge1xyXG5cdHZhciByYW5nZSA9IGxvb2t1cCh0YWJsZSwgc2tleSwgc3ZhbCk7XHJcblxyXG5cdC8vIE5vdGU6IHRoZSBsb29rdXAgdGFibGUgQUxXQVlTIGNvbnRhaW5zIGF0IGxlYXN0IDIgaXRlbXMgKG1pbiBhbmQgbWF4KVxyXG5cdHZhciBwcmV2ID0gIXJhbmdlLmxvID8gdGFibGVbMF0gOiAhcmFuZ2UuaGkgPyB0YWJsZVt0YWJsZS5sZW5ndGggLSAyXSA6IHJhbmdlLmxvO1xyXG5cdHZhciBuZXh0ID0gIXJhbmdlLmxvID8gdGFibGVbMV0gOiAhcmFuZ2UuaGkgPyB0YWJsZVt0YWJsZS5sZW5ndGggLSAxXSA6IHJhbmdlLmhpO1xyXG5cclxuXHR2YXIgc3BhbiA9IG5leHRbc2tleV0gLSBwcmV2W3NrZXldO1xyXG5cdHZhciByYXRpbyA9IHNwYW4gPyAoc3ZhbCAtIHByZXZbc2tleV0pIC8gc3BhbiA6IDA7XHJcblx0dmFyIG9mZnNldCA9IChuZXh0W3RrZXldIC0gcHJldlt0a2V5XSkgKiByYXRpbztcclxuXHJcblx0cmV0dXJuIHByZXZbdGtleV0gKyBvZmZzZXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiB2YWx1ZSB0byBhIG1vbWVudCBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIHRpbWUgb3B0aW9ucy5cclxuICogQHNlZSBodHRwOi8vbW9tZW50anMuY29tL2RvY3MvIy9wYXJzaW5nL1xyXG4gKi9cclxuZnVuY3Rpb24gbW9tZW50aWZ5KHZhbHVlLCBvcHRpb25zKSB7XHJcblx0dmFyIHBhcnNlciA9IG9wdGlvbnMucGFyc2VyO1xyXG5cdHZhciBmb3JtYXQgPSBvcHRpb25zLnBhcnNlciB8fCBvcHRpb25zLmZvcm1hdDtcclxuXHJcblx0aWYgKHR5cGVvZiBwYXJzZXIgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdHJldHVybiBwYXJzZXIodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGZvcm1hdCA9PT0gJ3N0cmluZycpIHtcclxuXHRcdHJldHVybiBtb21lbnQodmFsdWUsIGZvcm1hdCk7XHJcblx0fVxyXG5cclxuXHRpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIG1vbWVudCkpIHtcclxuXHRcdHZhbHVlID0gbW9tZW50KHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGlmICh2YWx1ZS5pc1ZhbGlkKCkpIHtcclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8vIExhYmVscyBhcmUgaW4gYW4gaW5jb21wYXRpYmxlIG1vbWVudCBmb3JtYXQgYW5kIG5vIGBwYXJzZXJgIGhhcyBiZWVuIHByb3ZpZGVkLlxyXG5cdC8vIFRoZSB1c2VyIG1pZ2h0IHN0aWxsIHVzZSB0aGUgZGVwcmVjYXRlZCBgZm9ybWF0YCBvcHRpb24gdG8gY29udmVydCBoaXMgaW5wdXRzLlxyXG5cdGlmICh0eXBlb2YgZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRyZXR1cm4gZm9ybWF0KHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2UoaW5wdXQsIHNjYWxlKSB7XHJcblx0aWYgKGhlbHBlcnMuaXNOdWxsT3JVbmRlZihpbnB1dCkpIHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0dmFyIG9wdGlvbnMgPSBzY2FsZS5vcHRpb25zLnRpbWU7XHJcblx0dmFyIHZhbHVlID0gbW9tZW50aWZ5KHNjYWxlLmdldFJpZ2h0VmFsdWUoaW5wdXQpLCBvcHRpb25zKTtcclxuXHRpZiAoIXZhbHVlLmlzVmFsaWQoKSkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRpZiAob3B0aW9ucy5yb3VuZCkge1xyXG5cdFx0dmFsdWUuc3RhcnRPZihvcHRpb25zLnJvdW5kKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB2YWx1ZS52YWx1ZU9mKCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5pdCB0byBza2lwIHRvIGJlIGFibGUgdG8gZGlzcGxheSB1cCB0byBgY2FwYWNpdHlgIG51bWJlciBvZiB0aWNrc1xyXG4gKiBpbiBgdW5pdGAgZm9yIHRoZSBnaXZlbiBgbWluYCAvIGBtYXhgIHJhbmdlIGFuZCByZXNwZWN0aW5nIHRoZSBpbnRlcnZhbCBzdGVwcyBjb25zdHJhaW50cy5cclxuICovXHJcbmZ1bmN0aW9uIGRldGVybWluZVN0ZXBTaXplKG1pbiwgbWF4LCB1bml0LCBjYXBhY2l0eSkge1xyXG5cdHZhciByYW5nZSA9IG1heCAtIG1pbjtcclxuXHR2YXIgaW50ZXJ2YWwgPSBJTlRFUlZBTFNbdW5pdF07XHJcblx0dmFyIG1pbGxpc2Vjb25kcyA9IGludGVydmFsLnNpemU7XHJcblx0dmFyIHN0ZXBzID0gaW50ZXJ2YWwuc3RlcHM7XHJcblx0dmFyIGksIGlsZW4sIGZhY3RvcjtcclxuXHJcblx0aWYgKCFzdGVwcykge1xyXG5cdFx0cmV0dXJuIE1hdGguY2VpbChyYW5nZSAvIChjYXBhY2l0eSAqIG1pbGxpc2Vjb25kcykpO1xyXG5cdH1cclxuXHJcblx0Zm9yIChpID0gMCwgaWxlbiA9IHN0ZXBzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0ZmFjdG9yID0gc3RlcHNbaV07XHJcblx0XHRpZiAoTWF0aC5jZWlsKHJhbmdlIC8gKG1pbGxpc2Vjb25kcyAqIGZhY3RvcikpIDw9IGNhcGFjaXR5KSB7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGZhY3RvcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZpZ3VyZXMgb3V0IHdoYXQgdW5pdCByZXN1bHRzIGluIGFuIGFwcHJvcHJpYXRlIG51bWJlciBvZiBhdXRvLWdlbmVyYXRlZCB0aWNrc1xyXG4gKi9cclxuZnVuY3Rpb24gZGV0ZXJtaW5lVW5pdEZvckF1dG9UaWNrcyhtaW5Vbml0LCBtaW4sIG1heCwgY2FwYWNpdHkpIHtcclxuXHR2YXIgaWxlbiA9IFVOSVRTLmxlbmd0aDtcclxuXHR2YXIgaSwgaW50ZXJ2YWwsIGZhY3RvcjtcclxuXHJcblx0Zm9yIChpID0gVU5JVFMuaW5kZXhPZihtaW5Vbml0KTsgaSA8IGlsZW4gLSAxOyArK2kpIHtcclxuXHRcdGludGVydmFsID0gSU5URVJWQUxTW1VOSVRTW2ldXTtcclxuXHRcdGZhY3RvciA9IGludGVydmFsLnN0ZXBzID8gaW50ZXJ2YWwuc3RlcHNbaW50ZXJ2YWwuc3RlcHMubGVuZ3RoIC0gMV0gOiBNQVhfSU5URUdFUjtcclxuXHJcblx0XHRpZiAoaW50ZXJ2YWwuY29tbW9uICYmIE1hdGguY2VpbCgobWF4IC0gbWluKSAvIChmYWN0b3IgKiBpbnRlcnZhbC5zaXplKSkgPD0gY2FwYWNpdHkpIHtcclxuXHRcdFx0cmV0dXJuIFVOSVRTW2ldO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIFVOSVRTW2lsZW4gLSAxXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZpZ3VyZXMgb3V0IHdoYXQgdW5pdCB0byBmb3JtYXQgYSBzZXQgb2YgdGlja3Mgd2l0aFxyXG4gKi9cclxuZnVuY3Rpb24gZGV0ZXJtaW5lVW5pdEZvckZvcm1hdHRpbmcodGlja3MsIG1pblVuaXQsIG1pbiwgbWF4KSB7XHJcblx0dmFyIGR1cmF0aW9uID0gbW9tZW50LmR1cmF0aW9uKG1vbWVudChtYXgpLmRpZmYobW9tZW50KG1pbikpKTtcclxuXHR2YXIgaWxlbiA9IFVOSVRTLmxlbmd0aDtcclxuXHR2YXIgaSwgdW5pdDtcclxuXHJcblx0Zm9yIChpID0gaWxlbiAtIDE7IGkgPj0gVU5JVFMuaW5kZXhPZihtaW5Vbml0KTsgaS0tKSB7XHJcblx0XHR1bml0ID0gVU5JVFNbaV07XHJcblx0XHRpZiAoSU5URVJWQUxTW3VuaXRdLmNvbW1vbiAmJiBkdXJhdGlvbi5hcyh1bml0KSA+PSB0aWNrcy5sZW5ndGgpIHtcclxuXHRcdFx0cmV0dXJuIHVuaXQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gVU5JVFNbbWluVW5pdCA/IFVOSVRTLmluZGV4T2YobWluVW5pdCkgOiAwXTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGV0ZXJtaW5lTWFqb3JVbml0KHVuaXQpIHtcclxuXHRmb3IgKHZhciBpID0gVU5JVFMuaW5kZXhPZih1bml0KSArIDEsIGlsZW4gPSBVTklUUy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdGlmIChJTlRFUlZBTFNbVU5JVFNbaV1dLmNvbW1vbikge1xyXG5cdFx0XHRyZXR1cm4gVU5JVFNbaV07XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgbWF4aW11bSBvZiBgY2FwYWNpdHlgIHRpbWVzdGFtcHMgYmV0d2VlbiBtaW4gYW5kIG1heCwgcm91bmRlZCB0byB0aGVcclxuICogYG1pbm9yYCB1bml0LCBhbGlnbmVkIG9uIHRoZSBgbWFqb3JgIHVuaXQgYW5kIHVzaW5nIHRoZSBnaXZlbiBzY2FsZSB0aW1lIGBvcHRpb25zYC5cclxuICogSW1wb3J0YW50OiB0aGlzIG1ldGhvZCBjYW4gcmV0dXJuIHRpY2tzIG91dHNpZGUgdGhlIG1pbiBhbmQgbWF4IHJhbmdlLCBpdCdzIHRoZVxyXG4gKiByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGluZyBjb2RlIHRvIGNsYW1wIHZhbHVlcyBpZiBuZWVkZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZW5lcmF0ZShtaW4sIG1heCwgY2FwYWNpdHksIG9wdGlvbnMpIHtcclxuXHR2YXIgdGltZU9wdHMgPSBvcHRpb25zLnRpbWU7XHJcblx0dmFyIG1pbm9yID0gdGltZU9wdHMudW5pdCB8fCBkZXRlcm1pbmVVbml0Rm9yQXV0b1RpY2tzKHRpbWVPcHRzLm1pblVuaXQsIG1pbiwgbWF4LCBjYXBhY2l0eSk7XHJcblx0dmFyIG1ham9yID0gZGV0ZXJtaW5lTWFqb3JVbml0KG1pbm9yKTtcclxuXHR2YXIgc3RlcFNpemUgPSBoZWxwZXJzLnZhbHVlT3JEZWZhdWx0KHRpbWVPcHRzLnN0ZXBTaXplLCB0aW1lT3B0cy51bml0U3RlcFNpemUpO1xyXG5cdHZhciB3ZWVrZGF5ID0gbWlub3IgPT09ICd3ZWVrJyA/IHRpbWVPcHRzLmlzb1dlZWtkYXkgOiBmYWxzZTtcclxuXHR2YXIgbWFqb3JUaWNrc0VuYWJsZWQgPSBvcHRpb25zLnRpY2tzLm1ham9yLmVuYWJsZWQ7XHJcblx0dmFyIGludGVydmFsID0gSU5URVJWQUxTW21pbm9yXTtcclxuXHR2YXIgZmlyc3QgPSBtb21lbnQobWluKTtcclxuXHR2YXIgbGFzdCA9IG1vbWVudChtYXgpO1xyXG5cdHZhciB0aWNrcyA9IFtdO1xyXG5cdHZhciB0aW1lO1xyXG5cclxuXHRpZiAoIXN0ZXBTaXplKSB7XHJcblx0XHRzdGVwU2l6ZSA9IGRldGVybWluZVN0ZXBTaXplKG1pbiwgbWF4LCBtaW5vciwgY2FwYWNpdHkpO1xyXG5cdH1cclxuXHJcblx0Ly8gRm9yICd3ZWVrJyB1bml0LCBoYW5kbGUgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIG9wdGlvblxyXG5cdGlmICh3ZWVrZGF5KSB7XHJcblx0XHRmaXJzdCA9IGZpcnN0Lmlzb1dlZWtkYXkod2Vla2RheSk7XHJcblx0XHRsYXN0ID0gbGFzdC5pc29XZWVrZGF5KHdlZWtkYXkpO1xyXG5cdH1cclxuXHJcblx0Ly8gQWxpZ24gZmlyc3QvbGFzdCB0aWNrcyBvbiB1bml0XHJcblx0Zmlyc3QgPSBmaXJzdC5zdGFydE9mKHdlZWtkYXkgPyAnZGF5JyA6IG1pbm9yKTtcclxuXHRsYXN0ID0gbGFzdC5zdGFydE9mKHdlZWtkYXkgPyAnZGF5JyA6IG1pbm9yKTtcclxuXHJcblx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGxhc3QgdGljayBpbmNsdWRlIG1heFxyXG5cdGlmIChsYXN0IDwgbWF4KSB7XHJcblx0XHRsYXN0LmFkZCgxLCBtaW5vcik7XHJcblx0fVxyXG5cclxuXHR0aW1lID0gbW9tZW50KGZpcnN0KTtcclxuXHJcblx0aWYgKG1ham9yVGlja3NFbmFibGVkICYmIG1ham9yICYmICF3ZWVrZGF5ICYmICF0aW1lT3B0cy5yb3VuZCkge1xyXG5cdFx0Ly8gQWxpZ24gdGhlIGZpcnN0IHRpY2sgb24gdGhlIHByZXZpb3VzIGBtaW5vcmAgdW5pdCBhbGlnbmVkIG9uIHRoZSBgbWFqb3JgIHVuaXQ6XHJcblx0XHQvLyB3ZSBmaXJzdCBhbGlnbmVkIHRpbWUgb24gdGhlIHByZXZpb3VzIGBtYWpvcmAgdW5pdCB0aGVuIGFkZCB0aGUgbnVtYmVyIG9mIGZ1bGxcclxuXHRcdC8vIHN0ZXBTaXplIHRoZXJlIGlzIGJldHdlZW4gZmlyc3QgYW5kIHRoZSBwcmV2aW91cyBtYWpvciB0aW1lLlxyXG5cdFx0dGltZS5zdGFydE9mKG1ham9yKTtcclxuXHRcdHRpbWUuYWRkKH5+KChmaXJzdCAtIHRpbWUpIC8gKGludGVydmFsLnNpemUgKiBzdGVwU2l6ZSkpICogc3RlcFNpemUsIG1pbm9yKTtcclxuXHR9XHJcblxyXG5cdGZvciAoOyB0aW1lIDwgbGFzdDsgdGltZS5hZGQoc3RlcFNpemUsIG1pbm9yKSkge1xyXG5cdFx0dGlja3MucHVzaCgrdGltZSk7XHJcblx0fVxyXG5cclxuXHR0aWNrcy5wdXNoKCt0aW1lKTtcclxuXHJcblx0cmV0dXJuIHRpY2tzO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgcmlnaHQgYW5kIGxlZnQgb2Zmc2V0cyBmcm9tIGVkZ2VzIGluIHRoZSBmb3JtIG9mIHtsZWZ0LCByaWdodH0uXHJcbiAqIE9mZnNldHMgYXJlIGFkZGVkIHdoZW4gdGhlIGBvZmZzZXRgIG9wdGlvbiBpcyB0cnVlLlxyXG4gKi9cclxuZnVuY3Rpb24gY29tcHV0ZU9mZnNldHModGFibGUsIHRpY2tzLCBtaW4sIG1heCwgb3B0aW9ucykge1xyXG5cdHZhciBsZWZ0ID0gMDtcclxuXHR2YXIgcmlnaHQgPSAwO1xyXG5cdHZhciB1cHBlciwgbG93ZXI7XHJcblxyXG5cdGlmIChvcHRpb25zLm9mZnNldCAmJiB0aWNrcy5sZW5ndGgpIHtcclxuXHRcdGlmICghb3B0aW9ucy50aW1lLm1pbikge1xyXG5cdFx0XHR1cHBlciA9IHRpY2tzLmxlbmd0aCA+IDEgPyB0aWNrc1sxXSA6IG1heDtcclxuXHRcdFx0bG93ZXIgPSB0aWNrc1swXTtcclxuXHRcdFx0bGVmdCA9IChcclxuXHRcdFx0XHRpbnRlcnBvbGF0ZSh0YWJsZSwgJ3RpbWUnLCB1cHBlciwgJ3BvcycpIC1cclxuXHRcdFx0XHRpbnRlcnBvbGF0ZSh0YWJsZSwgJ3RpbWUnLCBsb3dlciwgJ3BvcycpXHJcblx0XHRcdCkgLyAyO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFvcHRpb25zLnRpbWUubWF4KSB7XHJcblx0XHRcdHVwcGVyID0gdGlja3NbdGlja3MubGVuZ3RoIC0gMV07XHJcblx0XHRcdGxvd2VyID0gdGlja3MubGVuZ3RoID4gMSA/IHRpY2tzW3RpY2tzLmxlbmd0aCAtIDJdIDogbWluO1xyXG5cdFx0XHRyaWdodCA9IChcclxuXHRcdFx0XHRpbnRlcnBvbGF0ZSh0YWJsZSwgJ3RpbWUnLCB1cHBlciwgJ3BvcycpIC1cclxuXHRcdFx0XHRpbnRlcnBvbGF0ZSh0YWJsZSwgJ3RpbWUnLCBsb3dlciwgJ3BvcycpXHJcblx0XHRcdCkgLyAyO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHtsZWZ0OiBsZWZ0LCByaWdodDogcmlnaHR9O1xyXG59XHJcblxyXG5mdW5jdGlvbiB0aWNrc0Zyb21UaW1lc3RhbXBzKHZhbHVlcywgbWFqb3JVbml0KSB7XHJcblx0dmFyIHRpY2tzID0gW107XHJcblx0dmFyIGksIGlsZW4sIHZhbHVlLCBtYWpvcjtcclxuXHJcblx0Zm9yIChpID0gMCwgaWxlbiA9IHZhbHVlcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdHZhbHVlID0gdmFsdWVzW2ldO1xyXG5cdFx0bWFqb3IgPSBtYWpvclVuaXQgPyB2YWx1ZSA9PT0gK21vbWVudCh2YWx1ZSkuc3RhcnRPZihtYWpvclVuaXQpIDogZmFsc2U7XHJcblxyXG5cdFx0dGlja3MucHVzaCh7XHJcblx0XHRcdHZhbHVlOiB2YWx1ZSxcclxuXHRcdFx0bWFqb3I6IG1ham9yXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB0aWNrcztcclxufVxyXG5cclxuZnVuY3Rpb24gZGV0ZXJtaW5lTGFiZWxGb3JtYXQoZGF0YSwgdGltZU9wdHMpIHtcclxuXHR2YXIgaSwgbW9tZW50RGF0ZSwgaGFzVGltZTtcclxuXHR2YXIgaWxlbiA9IGRhdGEubGVuZ3RoO1xyXG5cclxuXHQvLyBmaW5kIHRoZSBsYWJlbCB3aXRoIHRoZSBtb3N0IHBhcnRzIChtaWxsaXNlY29uZHMsIG1pbnV0ZXMsIGV0Yy4pXHJcblx0Ly8gZm9ybWF0IGFsbCBsYWJlbHMgd2l0aCB0aGUgc2FtZSBsZXZlbCBvZiBkZXRhaWwgYXMgdGhlIG1vc3Qgc3BlY2lmaWMgbGFiZWxcclxuXHRmb3IgKGkgPSAwOyBpIDwgaWxlbjsgaSsrKSB7XHJcblx0XHRtb21lbnREYXRlID0gbW9tZW50aWZ5KGRhdGFbaV0sIHRpbWVPcHRzKTtcclxuXHRcdGlmIChtb21lbnREYXRlLm1pbGxpc2Vjb25kKCkgIT09IDApIHtcclxuXHRcdFx0cmV0dXJuICdNTU0gRCwgWVlZWSBoOm1tOnNzLlNTUyBhJztcclxuXHRcdH1cclxuXHRcdGlmIChtb21lbnREYXRlLnNlY29uZCgpICE9PSAwIHx8IG1vbWVudERhdGUubWludXRlKCkgIT09IDAgfHwgbW9tZW50RGF0ZS5ob3VyKCkgIT09IDApIHtcclxuXHRcdFx0aGFzVGltZSA9IHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmIChoYXNUaW1lKSB7XHJcblx0XHRyZXR1cm4gJ01NTSBELCBZWVlZIGg6bW06c3MgYSc7XHJcblx0fVxyXG5cdHJldHVybiAnTU1NIEQsIFlZWVknO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuXHR2YXIgZGVmYXVsdENvbmZpZyA9IHtcclxuXHRcdHBvc2l0aW9uOiAnYm90dG9tJyxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERhdGEgZGlzdHJpYnV0aW9uIGFsb25nIHRoZSBzY2FsZTpcclxuXHRcdCAqIC0gJ2xpbmVhcic6IGRhdGEgYXJlIHNwcmVhZCBhY2NvcmRpbmcgdG8gdGhlaXIgdGltZSAoZGlzdGFuY2VzIGNhbiB2YXJ5KSxcclxuXHRcdCAqIC0gJ3Nlcmllcyc6IGRhdGEgYXJlIHNwcmVhZCBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIGVhY2ggb3RoZXIuXHJcblx0XHQgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL3B1bGwvNDUwN1xyXG5cdFx0ICogQHNpbmNlIDIuNy4wXHJcblx0XHQgKi9cclxuXHRcdGRpc3RyaWJ1dGlvbjogJ2xpbmVhcicsXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTY2FsZSBib3VuZGFyeSBzdHJhdGVneSAoYnlwYXNzZWQgYnkgbWluL21heCB0aW1lIG9wdGlvbnMpXHJcblx0XHQgKiAtIGBkYXRhYDogbWFrZSBzdXJlIGRhdGEgYXJlIGZ1bGx5IHZpc2libGUsIHRpY2tzIG91dHNpZGUgYXJlIHJlbW92ZWRcclxuXHRcdCAqIC0gYHRpY2tzYDogbWFrZSBzdXJlIHRpY2tzIGFyZSBmdWxseSB2aXNpYmxlLCBkYXRhIG91dHNpZGUgYXJlIHRydW5jYXRlZFxyXG5cdFx0ICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9wdWxsLzQ1NTZcclxuXHRcdCAqIEBzaW5jZSAyLjcuMFxyXG5cdFx0ICovXHJcblx0XHRib3VuZHM6ICdkYXRhJyxcclxuXHJcblx0XHR0aW1lOiB7XHJcblx0XHRcdHBhcnNlcjogZmFsc2UsIC8vIGZhbHNlID09IGEgcGF0dGVybiBzdHJpbmcgZnJvbSBodHRwOi8vbW9tZW50anMuY29tL2RvY3MvIy9wYXJzaW5nL3N0cmluZy1mb3JtYXQvIG9yIGEgY3VzdG9tIGNhbGxiYWNrIHRoYXQgY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgbW9tZW50XHJcblx0XHRcdGZvcm1hdDogZmFsc2UsIC8vIERFUFJFQ0FURUQgZmFsc2UgPT0gZGF0ZSBvYmplY3RzLCBtb21lbnQgb2JqZWN0LCBjYWxsYmFjayBvciBhIHBhdHRlcm4gc3RyaW5nIGZyb20gaHR0cDovL21vbWVudGpzLmNvbS9kb2NzLyMvcGFyc2luZy9zdHJpbmctZm9ybWF0L1xyXG5cdFx0XHR1bml0OiBmYWxzZSwgLy8gZmFsc2UgPT0gYXV0b21hdGljIG9yIG92ZXJyaWRlIHdpdGggd2VlaywgbW9udGgsIHllYXIsIGV0Yy5cclxuXHRcdFx0cm91bmQ6IGZhbHNlLCAvLyBub25lLCBvciBvdmVycmlkZSB3aXRoIHdlZWssIG1vbnRoLCB5ZWFyLCBldGMuXHJcblx0XHRcdGRpc3BsYXlGb3JtYXQ6IGZhbHNlLCAvLyBERVBSRUNBVEVEXHJcblx0XHRcdGlzb1dlZWtkYXk6IGZhbHNlLCAvLyBvdmVycmlkZSB3ZWVrIHN0YXJ0IGRheSAtIHNlZSBodHRwOi8vbW9tZW50anMuY29tL2RvY3MvIy9nZXQtc2V0L2lzby13ZWVrZGF5L1xyXG5cdFx0XHRtaW5Vbml0OiAnbWlsbGlzZWNvbmQnLFxyXG5cclxuXHRcdFx0Ly8gZGVmYXVsdHMgdG8gdW5pdCdzIGNvcnJlc3BvbmRpbmcgdW5pdEZvcm1hdCBiZWxvdyBvciBvdmVycmlkZSB1c2luZyBwYXR0ZXJuIHN0cmluZyBmcm9tIGh0dHA6Ly9tb21lbnRqcy5jb20vZG9jcy8jL2Rpc3BsYXlpbmcvZm9ybWF0L1xyXG5cdFx0XHRkaXNwbGF5Rm9ybWF0czoge1xyXG5cdFx0XHRcdG1pbGxpc2Vjb25kOiAnaDptbTpzcy5TU1MgYScsIC8vIDExOjIwOjAxLjEyMyBBTSxcclxuXHRcdFx0XHRzZWNvbmQ6ICdoOm1tOnNzIGEnLCAvLyAxMToyMDowMSBBTVxyXG5cdFx0XHRcdG1pbnV0ZTogJ2g6bW0gYScsIC8vIDExOjIwIEFNXHJcblx0XHRcdFx0aG91cjogJ2hBJywgLy8gNVBNXHJcblx0XHRcdFx0ZGF5OiAnTU1NIEQnLCAvLyBTZXAgNFxyXG5cdFx0XHRcdHdlZWs6ICdsbCcsIC8vIFdlZWsgNDYsIG9yIG1heWJlIFwiW1ddV1cgLSBZWVlZXCIgP1xyXG5cdFx0XHRcdG1vbnRoOiAnTU1NIFlZWVknLCAvLyBTZXB0IDIwMTVcclxuXHRcdFx0XHRxdWFydGVyOiAnW1FdUSAtIFlZWVknLCAvLyBRM1xyXG5cdFx0XHRcdHllYXI6ICdZWVlZJyAvLyAyMDE1XHJcblx0XHRcdH0sXHJcblx0XHR9LFxyXG5cdFx0dGlja3M6IHtcclxuXHRcdFx0YXV0b1NraXA6IGZhbHNlLFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIFRpY2tzIGdlbmVyYXRpb24gaW5wdXQgdmFsdWVzOlxyXG5cdFx0XHQgKiAtICdhdXRvJzogZ2VuZXJhdGVzIFwib3B0aW1hbFwiIHRpY2tzIGJhc2VkIG9uIHNjYWxlIHNpemUgYW5kIHRpbWUgb3B0aW9ucy5cclxuXHRcdFx0ICogLSAnZGF0YSc6IGdlbmVyYXRlcyB0aWNrcyBmcm9tIGRhdGEgKGluY2x1ZGluZyBsYWJlbHMgZnJvbSBkYXRhIHt0fHh8eX0gb2JqZWN0cykuXHJcblx0XHRcdCAqIC0gJ2xhYmVscyc6IGdlbmVyYXRlcyB0aWNrcyBmcm9tIHVzZXIgZ2l2ZW4gYGRhdGEubGFiZWxzYCB2YWx1ZXMgT05MWS5cclxuXHRcdFx0ICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9wdWxsLzQ1MDdcclxuXHRcdFx0ICogQHNpbmNlIDIuNy4wXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRzb3VyY2U6ICdhdXRvJyxcclxuXHJcblx0XHRcdG1ham9yOiB7XHJcblx0XHRcdFx0ZW5hYmxlZDogZmFsc2VcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdHZhciBUaW1lU2NhbGUgPSBTY2FsZS5leHRlbmQoe1xyXG5cdFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmICghbW9tZW50KSB7XHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDaGFydC5qcyAtIE1vbWVudC5qcyBjb3VsZCBub3QgYmUgZm91bmQhIFlvdSBtdXN0IGluY2x1ZGUgaXQgYmVmb3JlIENoYXJ0LmpzIHRvIHVzZSB0aGUgdGltZSBzY2FsZS4gRG93bmxvYWQgYXQgaHR0cHM6Ly9tb21lbnRqcy5jb20nKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5tZXJnZVRpY2tzT3B0aW9ucygpO1xyXG5cclxuXHRcdFx0U2NhbGUucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0dXBkYXRlOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIG9wdGlvbnMgPSBtZS5vcHRpb25zO1xyXG5cclxuXHRcdFx0Ly8gREVQUkVDQVRJT05TOiBvdXRwdXQgYSBtZXNzYWdlIG9ubHkgb25lIHRpbWUgcGVyIHVwZGF0ZVxyXG5cdFx0XHRpZiAob3B0aW9ucy50aW1lICYmIG9wdGlvbnMudGltZS5mb3JtYXQpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oJ29wdGlvbnMudGltZS5mb3JtYXQgaXMgZGVwcmVjYXRlZCBhbmQgcmVwbGFjZWQgYnkgb3B0aW9ucy50aW1lLnBhcnNlci4nKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIFNjYWxlLnByb3RvdHlwZS51cGRhdGUuYXBwbHkobWUsIGFyZ3VtZW50cyk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQWxsb3dzIGRhdGEgdG8gYmUgcmVmZXJlbmNlZCB2aWEgJ3QnIGF0dHJpYnV0ZVxyXG5cdFx0ICovXHJcblx0XHRnZXRSaWdodFZhbHVlOiBmdW5jdGlvbihyYXdWYWx1ZSkge1xyXG5cdFx0XHRpZiAocmF3VmFsdWUgJiYgcmF3VmFsdWUudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0cmF3VmFsdWUgPSByYXdWYWx1ZS50O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBTY2FsZS5wcm90b3R5cGUuZ2V0UmlnaHRWYWx1ZS5jYWxsKHRoaXMsIHJhd1ZhbHVlKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0ZGV0ZXJtaW5lRGF0YUxpbWl0czogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciBjaGFydCA9IG1lLmNoYXJ0O1xyXG5cdFx0XHR2YXIgdGltZU9wdHMgPSBtZS5vcHRpb25zLnRpbWU7XHJcblx0XHRcdHZhciB1bml0ID0gdGltZU9wdHMudW5pdCB8fCAnZGF5JztcclxuXHRcdFx0dmFyIG1pbiA9IE1BWF9JTlRFR0VSO1xyXG5cdFx0XHR2YXIgbWF4ID0gTUlOX0lOVEVHRVI7XHJcblx0XHRcdHZhciB0aW1lc3RhbXBzID0gW107XHJcblx0XHRcdHZhciBkYXRhc2V0cyA9IFtdO1xyXG5cdFx0XHR2YXIgbGFiZWxzID0gW107XHJcblx0XHRcdHZhciBpLCBqLCBpbGVuLCBqbGVuLCBkYXRhLCB0aW1lc3RhbXA7XHJcblxyXG5cdFx0XHQvLyBDb252ZXJ0IGxhYmVscyB0byB0aW1lc3RhbXBzXHJcblx0XHRcdGZvciAoaSA9IDAsIGlsZW4gPSBjaGFydC5kYXRhLmxhYmVscy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdFx0XHRsYWJlbHMucHVzaChwYXJzZShjaGFydC5kYXRhLmxhYmVsc1tpXSwgbWUpKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ29udmVydCBkYXRhIHRvIHRpbWVzdGFtcHNcclxuXHRcdFx0Zm9yIChpID0gMCwgaWxlbiA9IChjaGFydC5kYXRhLmRhdGFzZXRzIHx8IFtdKS5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdFx0XHRpZiAoY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSkge1xyXG5cdFx0XHRcdFx0ZGF0YSA9IGNoYXJ0LmRhdGEuZGF0YXNldHNbaV0uZGF0YTtcclxuXHJcblx0XHRcdFx0XHQvLyBMZXQncyBjb25zaWRlciB0aGF0IGFsbCBkYXRhIGhhdmUgdGhlIHNhbWUgZm9ybWF0LlxyXG5cdFx0XHRcdFx0aWYgKGhlbHBlcnMuaXNPYmplY3QoZGF0YVswXSkpIHtcclxuXHRcdFx0XHRcdFx0ZGF0YXNldHNbaV0gPSBbXTtcclxuXHJcblx0XHRcdFx0XHRcdGZvciAoaiA9IDAsIGpsZW4gPSBkYXRhLmxlbmd0aDsgaiA8IGpsZW47ICsraikge1xyXG5cdFx0XHRcdFx0XHRcdHRpbWVzdGFtcCA9IHBhcnNlKGRhdGFbal0sIG1lKTtcclxuXHRcdFx0XHRcdFx0XHR0aW1lc3RhbXBzLnB1c2godGltZXN0YW1wKTtcclxuXHRcdFx0XHRcdFx0XHRkYXRhc2V0c1tpXVtqXSA9IHRpbWVzdGFtcDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGltZXN0YW1wcy5wdXNoLmFwcGx5KHRpbWVzdGFtcHMsIGxhYmVscyk7XHJcblx0XHRcdFx0XHRcdGRhdGFzZXRzW2ldID0gbGFiZWxzLnNsaWNlKDApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRkYXRhc2V0c1tpXSA9IFtdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGxhYmVscy5sZW5ndGgpIHtcclxuXHRcdFx0XHQvLyBTb3J0IGxhYmVscyAqKmFmdGVyKiogZGF0YSBoYXZlIGJlZW4gY29udmVydGVkXHJcblx0XHRcdFx0bGFiZWxzID0gYXJyYXlVbmlxdWUobGFiZWxzKS5zb3J0KHNvcnRlcik7XHJcblx0XHRcdFx0bWluID0gTWF0aC5taW4obWluLCBsYWJlbHNbMF0pO1xyXG5cdFx0XHRcdG1heCA9IE1hdGgubWF4KG1heCwgbGFiZWxzW2xhYmVscy5sZW5ndGggLSAxXSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aW1lc3RhbXBzLmxlbmd0aCkge1xyXG5cdFx0XHRcdHRpbWVzdGFtcHMgPSBhcnJheVVuaXF1ZSh0aW1lc3RhbXBzKS5zb3J0KHNvcnRlcik7XHJcblx0XHRcdFx0bWluID0gTWF0aC5taW4obWluLCB0aW1lc3RhbXBzWzBdKTtcclxuXHRcdFx0XHRtYXggPSBNYXRoLm1heChtYXgsIHRpbWVzdGFtcHNbdGltZXN0YW1wcy5sZW5ndGggLSAxXSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG1pbiA9IHBhcnNlKHRpbWVPcHRzLm1pbiwgbWUpIHx8IG1pbjtcclxuXHRcdFx0bWF4ID0gcGFyc2UodGltZU9wdHMubWF4LCBtZSkgfHwgbWF4O1xyXG5cclxuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBubyB2YWxpZCBtaW4vbWF4LCBzZXQgbGltaXRzIGJhc2VkIG9uIHVuaXQgdGltZSBvcHRpb25cclxuXHRcdFx0bWluID0gbWluID09PSBNQVhfSU5URUdFUiA/ICttb21lbnQoKS5zdGFydE9mKHVuaXQpIDogbWluO1xyXG5cdFx0XHRtYXggPSBtYXggPT09IE1JTl9JTlRFR0VSID8gK21vbWVudCgpLmVuZE9mKHVuaXQpICsgMSA6IG1heDtcclxuXHJcblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG1heCBpcyBzdHJpY3RseSBoaWdoZXIgdGhhbiBtaW4gKHJlcXVpcmVkIGJ5IHRoZSBsb29rdXAgdGFibGUpXHJcblx0XHRcdG1lLm1pbiA9IE1hdGgubWluKG1pbiwgbWF4KTtcclxuXHRcdFx0bWUubWF4ID0gTWF0aC5tYXgobWluICsgMSwgbWF4KTtcclxuXHJcblx0XHRcdC8vIFBSSVZBVEVcclxuXHRcdFx0bWUuX2hvcml6b250YWwgPSBtZS5pc0hvcml6b250YWwoKTtcclxuXHRcdFx0bWUuX3RhYmxlID0gW107XHJcblx0XHRcdG1lLl90aW1lc3RhbXBzID0ge1xyXG5cdFx0XHRcdGRhdGE6IHRpbWVzdGFtcHMsXHJcblx0XHRcdFx0ZGF0YXNldHM6IGRhdGFzZXRzLFxyXG5cdFx0XHRcdGxhYmVsczogbGFiZWxzXHJcblx0XHRcdH07XHJcblx0XHR9LFxyXG5cclxuXHRcdGJ1aWxkVGlja3M6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgbWluID0gbWUubWluO1xyXG5cdFx0XHR2YXIgbWF4ID0gbWUubWF4O1xyXG5cdFx0XHR2YXIgb3B0aW9ucyA9IG1lLm9wdGlvbnM7XHJcblx0XHRcdHZhciB0aW1lT3B0cyA9IG9wdGlvbnMudGltZTtcclxuXHRcdFx0dmFyIHRpbWVzdGFtcHMgPSBbXTtcclxuXHRcdFx0dmFyIHRpY2tzID0gW107XHJcblx0XHRcdHZhciBpLCBpbGVuLCB0aW1lc3RhbXA7XHJcblxyXG5cdFx0XHRzd2l0Y2ggKG9wdGlvbnMudGlja3Muc291cmNlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGEnOlxyXG5cdFx0XHRcdHRpbWVzdGFtcHMgPSBtZS5fdGltZXN0YW1wcy5kYXRhO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdsYWJlbHMnOlxyXG5cdFx0XHRcdHRpbWVzdGFtcHMgPSBtZS5fdGltZXN0YW1wcy5sYWJlbHM7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ2F1dG8nOlxyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRpbWVzdGFtcHMgPSBnZW5lcmF0ZShtaW4sIG1heCwgbWUuZ2V0TGFiZWxDYXBhY2l0eShtaW4pLCBvcHRpb25zKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKG9wdGlvbnMuYm91bmRzID09PSAndGlja3MnICYmIHRpbWVzdGFtcHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0bWluID0gdGltZXN0YW1wc1swXTtcclxuXHRcdFx0XHRtYXggPSB0aW1lc3RhbXBzW3RpbWVzdGFtcHMubGVuZ3RoIC0gMV07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEVuZm9yY2UgbGltaXRzIHdpdGggdXNlciBtaW4vbWF4IG9wdGlvbnNcclxuXHRcdFx0bWluID0gcGFyc2UodGltZU9wdHMubWluLCBtZSkgfHwgbWluO1xyXG5cdFx0XHRtYXggPSBwYXJzZSh0aW1lT3B0cy5tYXgsIG1lKSB8fCBtYXg7XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgdGlja3Mgb3V0c2lkZSB0aGUgbWluL21heCByYW5nZVxyXG5cdFx0XHRmb3IgKGkgPSAwLCBpbGVuID0gdGltZXN0YW1wcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcclxuXHRcdFx0XHR0aW1lc3RhbXAgPSB0aW1lc3RhbXBzW2ldO1xyXG5cdFx0XHRcdGlmICh0aW1lc3RhbXAgPj0gbWluICYmIHRpbWVzdGFtcCA8PSBtYXgpIHtcclxuXHRcdFx0XHRcdHRpY2tzLnB1c2godGltZXN0YW1wKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG1lLm1pbiA9IG1pbjtcclxuXHRcdFx0bWUubWF4ID0gbWF4O1xyXG5cclxuXHRcdFx0Ly8gUFJJVkFURVxyXG5cdFx0XHRtZS5fdW5pdCA9IHRpbWVPcHRzLnVuaXQgfHwgZGV0ZXJtaW5lVW5pdEZvckZvcm1hdHRpbmcodGlja3MsIHRpbWVPcHRzLm1pblVuaXQsIG1lLm1pbiwgbWUubWF4KTtcclxuXHRcdFx0bWUuX21ham9yVW5pdCA9IGRldGVybWluZU1ham9yVW5pdChtZS5fdW5pdCk7XHJcblx0XHRcdG1lLl90YWJsZSA9IGJ1aWxkTG9va3VwVGFibGUobWUuX3RpbWVzdGFtcHMuZGF0YSwgbWluLCBtYXgsIG9wdGlvbnMuZGlzdHJpYnV0aW9uKTtcclxuXHRcdFx0bWUuX29mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyhtZS5fdGFibGUsIHRpY2tzLCBtaW4sIG1heCwgb3B0aW9ucyk7XHJcblx0XHRcdG1lLl9sYWJlbEZvcm1hdCA9IGRldGVybWluZUxhYmVsRm9ybWF0KG1lLl90aW1lc3RhbXBzLmRhdGEsIHRpbWVPcHRzKTtcclxuXHJcblx0XHRcdHJldHVybiB0aWNrc0Zyb21UaW1lc3RhbXBzKHRpY2tzLCBtZS5fbWFqb3JVbml0KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Z2V0TGFiZWxGb3JJbmRleDogZnVuY3Rpb24oaW5kZXgsIGRhdGFzZXRJbmRleCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgZGF0YSA9IG1lLmNoYXJ0LmRhdGE7XHJcblx0XHRcdHZhciB0aW1lT3B0cyA9IG1lLm9wdGlvbnMudGltZTtcclxuXHRcdFx0dmFyIGxhYmVsID0gZGF0YS5sYWJlbHMgJiYgaW5kZXggPCBkYXRhLmxhYmVscy5sZW5ndGggPyBkYXRhLmxhYmVsc1tpbmRleF0gOiAnJztcclxuXHRcdFx0dmFyIHZhbHVlID0gZGF0YS5kYXRhc2V0c1tkYXRhc2V0SW5kZXhdLmRhdGFbaW5kZXhdO1xyXG5cclxuXHRcdFx0aWYgKGhlbHBlcnMuaXNPYmplY3QodmFsdWUpKSB7XHJcblx0XHRcdFx0bGFiZWwgPSBtZS5nZXRSaWdodFZhbHVlKHZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGltZU9wdHMudG9vbHRpcEZvcm1hdCkge1xyXG5cdFx0XHRcdHJldHVybiBtb21lbnRpZnkobGFiZWwsIHRpbWVPcHRzKS5mb3JtYXQodGltZU9wdHMudG9vbHRpcEZvcm1hdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHR5cGVvZiBsYWJlbCA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRyZXR1cm4gbGFiZWw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBtb21lbnRpZnkobGFiZWwsIHRpbWVPcHRzKS5mb3JtYXQobWUuX2xhYmVsRm9ybWF0KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBGdW5jdGlvbiB0byBmb3JtYXQgYW4gaW5kaXZpZHVhbCB0aWNrIG1hcmtcclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdHRpY2tGb3JtYXRGdW5jdGlvbjogZnVuY3Rpb24odGljaywgaW5kZXgsIHRpY2tzLCBmb3JtYXRPdmVycmlkZSkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgb3B0aW9ucyA9IG1lLm9wdGlvbnM7XHJcblx0XHRcdHZhciB0aW1lID0gdGljay52YWx1ZU9mKCk7XHJcblx0XHRcdHZhciBmb3JtYXRzID0gb3B0aW9ucy50aW1lLmRpc3BsYXlGb3JtYXRzO1xyXG5cdFx0XHR2YXIgbWlub3JGb3JtYXQgPSBmb3JtYXRzW21lLl91bml0XTtcclxuXHRcdFx0dmFyIG1ham9yVW5pdCA9IG1lLl9tYWpvclVuaXQ7XHJcblx0XHRcdHZhciBtYWpvckZvcm1hdCA9IGZvcm1hdHNbbWFqb3JVbml0XTtcclxuXHRcdFx0dmFyIG1ham9yVGltZSA9IHRpY2suY2xvbmUoKS5zdGFydE9mKG1ham9yVW5pdCkudmFsdWVPZigpO1xyXG5cdFx0XHR2YXIgbWFqb3JUaWNrT3B0cyA9IG9wdGlvbnMudGlja3MubWFqb3I7XHJcblx0XHRcdHZhciBtYWpvciA9IG1ham9yVGlja09wdHMuZW5hYmxlZCAmJiBtYWpvclVuaXQgJiYgbWFqb3JGb3JtYXQgJiYgdGltZSA9PT0gbWFqb3JUaW1lO1xyXG5cdFx0XHR2YXIgbGFiZWwgPSB0aWNrLmZvcm1hdChmb3JtYXRPdmVycmlkZSA/IGZvcm1hdE92ZXJyaWRlIDogbWFqb3IgPyBtYWpvckZvcm1hdCA6IG1pbm9yRm9ybWF0KTtcclxuXHRcdFx0dmFyIHRpY2tPcHRzID0gbWFqb3IgPyBtYWpvclRpY2tPcHRzIDogb3B0aW9ucy50aWNrcy5taW5vcjtcclxuXHRcdFx0dmFyIGZvcm1hdHRlciA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQodGlja09wdHMuY2FsbGJhY2ssIHRpY2tPcHRzLnVzZXJDYWxsYmFjayk7XHJcblxyXG5cdFx0XHRyZXR1cm4gZm9ybWF0dGVyID8gZm9ybWF0dGVyKGxhYmVsLCBpbmRleCwgdGlja3MpIDogbGFiZWw7XHJcblx0XHR9LFxyXG5cclxuXHRcdGNvbnZlcnRUaWNrc1RvTGFiZWxzOiBmdW5jdGlvbih0aWNrcykge1xyXG5cdFx0XHR2YXIgbGFiZWxzID0gW107XHJcblx0XHRcdHZhciBpLCBpbGVuO1xyXG5cclxuXHRcdFx0Zm9yIChpID0gMCwgaWxlbiA9IHRpY2tzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xyXG5cdFx0XHRcdGxhYmVscy5wdXNoKHRoaXMudGlja0Zvcm1hdEZ1bmN0aW9uKG1vbWVudCh0aWNrc1tpXS52YWx1ZSksIGksIHRpY2tzKSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBsYWJlbHM7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0Z2V0UGl4ZWxGb3JPZmZzZXQ6IGZ1bmN0aW9uKHRpbWUpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIHNpemUgPSBtZS5faG9yaXpvbnRhbCA/IG1lLndpZHRoIDogbWUuaGVpZ2h0O1xyXG5cdFx0XHR2YXIgc3RhcnQgPSBtZS5faG9yaXpvbnRhbCA/IG1lLmxlZnQgOiBtZS50b3A7XHJcblx0XHRcdHZhciBwb3MgPSBpbnRlcnBvbGF0ZShtZS5fdGFibGUsICd0aW1lJywgdGltZSwgJ3BvcycpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHN0YXJ0ICsgc2l6ZSAqIChtZS5fb2Zmc2V0cy5sZWZ0ICsgcG9zKSAvIChtZS5fb2Zmc2V0cy5sZWZ0ICsgMSArIG1lLl9vZmZzZXRzLnJpZ2h0KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Z2V0UGl4ZWxGb3JWYWx1ZTogZnVuY3Rpb24odmFsdWUsIGluZGV4LCBkYXRhc2V0SW5kZXgpIHtcclxuXHRcdFx0dmFyIG1lID0gdGhpcztcclxuXHRcdFx0dmFyIHRpbWUgPSBudWxsO1xyXG5cclxuXHRcdFx0aWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgZGF0YXNldEluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHR0aW1lID0gbWUuX3RpbWVzdGFtcHMuZGF0YXNldHNbZGF0YXNldEluZGV4XVtpbmRleF07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aW1lID09PSBudWxsKSB7XHJcblx0XHRcdFx0dGltZSA9IHBhcnNlKHZhbHVlLCBtZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aW1lICE9PSBudWxsKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1lLmdldFBpeGVsRm9yT2Zmc2V0KHRpbWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdGdldFBpeGVsRm9yVGljazogZnVuY3Rpb24oaW5kZXgpIHtcclxuXHRcdFx0dmFyIHRpY2tzID0gdGhpcy5nZXRUaWNrcygpO1xyXG5cdFx0XHRyZXR1cm4gaW5kZXggPj0gMCAmJiBpbmRleCA8IHRpY2tzLmxlbmd0aCA/XHJcblx0XHRcdFx0dGhpcy5nZXRQaXhlbEZvck9mZnNldCh0aWNrc1tpbmRleF0udmFsdWUpIDpcclxuXHRcdFx0XHRudWxsO1xyXG5cdFx0fSxcclxuXHJcblx0XHRnZXRWYWx1ZUZvclBpeGVsOiBmdW5jdGlvbihwaXhlbCkge1xyXG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xyXG5cdFx0XHR2YXIgc2l6ZSA9IG1lLl9ob3Jpem9udGFsID8gbWUud2lkdGggOiBtZS5oZWlnaHQ7XHJcblx0XHRcdHZhciBzdGFydCA9IG1lLl9ob3Jpem9udGFsID8gbWUubGVmdCA6IG1lLnRvcDtcclxuXHRcdFx0dmFyIHBvcyA9IChzaXplID8gKHBpeGVsIC0gc3RhcnQpIC8gc2l6ZSA6IDApICogKG1lLl9vZmZzZXRzLmxlZnQgKyAxICsgbWUuX29mZnNldHMubGVmdCkgLSBtZS5fb2Zmc2V0cy5yaWdodDtcclxuXHRcdFx0dmFyIHRpbWUgPSBpbnRlcnBvbGF0ZShtZS5fdGFibGUsICdwb3MnLCBwb3MsICd0aW1lJyk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbW9tZW50KHRpbWUpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENydWRlIGFwcHJveGltYXRpb24gb2Ygd2hhdCB0aGUgbGFiZWwgd2lkdGggbWlnaHQgYmVcclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdGdldExhYmVsV2lkdGg6IGZ1bmN0aW9uKGxhYmVsKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblx0XHRcdHZhciB0aWNrc09wdHMgPSBtZS5vcHRpb25zLnRpY2tzO1xyXG5cdFx0XHR2YXIgdGlja0xhYmVsV2lkdGggPSBtZS5jdHgubWVhc3VyZVRleHQobGFiZWwpLndpZHRoO1xyXG5cdFx0XHR2YXIgYW5nbGUgPSBoZWxwZXJzLnRvUmFkaWFucyh0aWNrc09wdHMubWF4Um90YXRpb24pO1xyXG5cdFx0XHR2YXIgY29zUm90YXRpb24gPSBNYXRoLmNvcyhhbmdsZSk7XHJcblx0XHRcdHZhciBzaW5Sb3RhdGlvbiA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHRcdFx0dmFyIHRpY2tGb250U2l6ZSA9IGhlbHBlcnMudmFsdWVPckRlZmF1bHQodGlja3NPcHRzLmZvbnRTaXplLCBkZWZhdWx0cy5nbG9iYWwuZGVmYXVsdEZvbnRTaXplKTtcclxuXHJcblx0XHRcdHJldHVybiAodGlja0xhYmVsV2lkdGggKiBjb3NSb3RhdGlvbikgKyAodGlja0ZvbnRTaXplICogc2luUm90YXRpb24pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdGdldExhYmVsQ2FwYWNpdHk6IGZ1bmN0aW9uKGV4YW1wbGVUaW1lKSB7XHJcblx0XHRcdHZhciBtZSA9IHRoaXM7XHJcblxyXG5cdFx0XHR2YXIgZm9ybWF0T3ZlcnJpZGUgPSBtZS5vcHRpb25zLnRpbWUuZGlzcGxheUZvcm1hdHMubWlsbGlzZWNvbmQ7XHQvLyBQaWNrIHRoZSBsb25nZXN0IGZvcm1hdCBmb3IgZ3Vlc3RpbWF0aW9uXHJcblxyXG5cdFx0XHR2YXIgZXhhbXBsZUxhYmVsID0gbWUudGlja0Zvcm1hdEZ1bmN0aW9uKG1vbWVudChleGFtcGxlVGltZSksIDAsIFtdLCBmb3JtYXRPdmVycmlkZSk7XHJcblx0XHRcdHZhciB0aWNrTGFiZWxXaWR0aCA9IG1lLmdldExhYmVsV2lkdGgoZXhhbXBsZUxhYmVsKTtcclxuXHRcdFx0dmFyIGlubmVyV2lkdGggPSBtZS5pc0hvcml6b250YWwoKSA/IG1lLndpZHRoIDogbWUuaGVpZ2h0O1xyXG5cclxuXHRcdFx0dmFyIGNhcGFjaXR5ID0gTWF0aC5mbG9vcihpbm5lcldpZHRoIC8gdGlja0xhYmVsV2lkdGgpO1xyXG5cdFx0XHRyZXR1cm4gY2FwYWNpdHkgPiAwID8gY2FwYWNpdHkgOiAxO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHRzY2FsZVNlcnZpY2UucmVnaXN0ZXJTY2FsZVR5cGUoJ3RpbWUnLCBUaW1lU2NhbGUsIGRlZmF1bHRDb25maWcpO1xyXG59O1xyXG5cclxufSx7XCIxXCI6MSxcIjI2XCI6MjYsXCIzM1wiOjMzLFwiMzRcIjozNCxcIjQ2XCI6NDZ9XX0se30sWzddKSg3KVxyXG59KTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVzb3VyY2VzL2pzL0NoYXJ0LmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n"); - -/***/ }) - -/******/ }); \ No newline at end of file diff --git a/public/js/ajax.js b/public/js/ajax.js deleted file mode 100644 index d3cb99d..0000000 --- a/public/js/ajax.js +++ /dev/null @@ -1,83 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "/"; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 4); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ 4: -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(5); - - -/***/ }), - -/***/ 5: -/***/ (function(module, exports) { - -eval("$('#addCoupons').on('click', function (event) {\n event.preventDefault();\n var ids = [];\n var campid = $(this).parent().find('#camp_id').val();\n $(this).parent().find('.inputGroup input').each(function (event) {\n if ($(this).is(':checked')) {\n ids.push($(this).val());\n }\n });\n $.ajaxSetup({\n headers: {\n 'X-CSRF-TOKEN': $(this).parent().find('#csrf').val()\n }\n });\n\n $.ajax({\n url: '/add-coupons-ajax',\n type: 'POST',\n data: {\n ids: ids,\n campid: campid\n },\n dataType: 'JSON',\n success: function success(reponse) {\n $.each(reponse, function (index, coupon) {\n var html = '';\n html += '' + coupon.coupon_code + '';\n html += '' + coupon.coupon_name + '';\n html += '';\n html += '';\n $('.no-result').remove();\n $('.coupons-wrapper table').append(html);\n $('#addCoupons').parent().find('.inputGroup input').each(function (event) {\n if ($(this).val() == coupon.coupon_id) {\n $(this).parent('.inputGroup').remove();\n }\n });\n $.fancybox.close();\n });\n },\n error: function error(e) {\n console.log(e.responseText);\n }\n });\n});\n\n$('body').on('click', '.delete-coupon', function (event) {\n var campid = $(this).attr('data-campid');\n var couponid = $(this).attr('data-couponid');\n var trLinked = $(this).parent().parent();\n $.fancyConfirm({\n title: \" Retrait\",\n message: \"Êtes-vous sûr de vouloir retirer ce coupon de cette campagne ?\",\n okButton: 'Retirer',\n noButton: 'Annuler',\n callback: function callback(value) {\n if (value) {\n event.preventDefault();\n\n $.ajaxSetup({\n headers: {\n 'X-CSRF-TOKEN': $('#csrf').val()\n }\n });\n $.ajax({\n url: '/remove-coupons-ajax',\n type: 'POST',\n data: {\n couponid: couponid,\n campid: campid\n },\n dataType: 'JSON',\n success: function success(reponse) {\n trLinked.remove();\n var html = \"
\";\n html += \"\";\n html += \"\";\n html += \"
\";\n $(\"#camp_id\").before(html);\n },\n error: function error(e) {\n console.log(e.responseText);\n }\n });\n }\n }\n });\n});\n\n$('body').on('click', '.unpublish', function (event) {\n event.preventDefault();\n var couponid = $(this).attr('data-couponid');\n var element = $(this).parent();\n $.fancyConfirm({\n title: \" Dépublier\",\n message: \"Êtes-vous sûr de vouloir dépublier ce coupon ?\",\n okButton: 'Dépublier',\n noButton: 'Annuler',\n callback: function callback(value) {\n if (value) {\n $.ajaxSetup({\n headers: {\n 'X-CSRF-TOKEN': $('#csrf').val()\n }\n });\n $.ajax({\n url: '/unpublish-coupons-ajax',\n type: 'POST',\n data: {\n couponid: couponid\n },\n dataType: 'JSON',\n success: function success(reponse) {\n element.empty().html('');\n }\n });\n }\n }\n });\n});\n\n$('body').on('click', '.publish', function (event) {\n event.preventDefault();\n var couponid = $(this).attr('data-couponid');\n var element = $(this).parent();\n $.fancyInfo({\n title: \" Publier\",\n message: \"Êtes-vous sûr de vouloir publier ce coupon ?\",\n okButton: 'Publier',\n noButton: 'Annuler',\n callback: function callback(value) {\n if (value) {\n $.ajaxSetup({\n headers: {\n 'X-CSRF-TOKEN': $('#csrf').val()\n }\n });\n $.ajax({\n url: '/publish-coupons-ajax',\n type: 'POST',\n data: {\n couponid: couponid\n },\n dataType: 'JSON',\n success: function success(reponse) {\n element.empty().html('');\n }\n });\n }\n }\n });\n});\n\n$('body').on('click', '.unpublishcamp', function (event) {\n event.preventDefault();\n var campid = $(this).attr('data-campid');\n var element = $(this).parent();\n $.fancyConfirm({\n title: \" Dépublier\",\n message: \"Êtes-vous sûr de vouloir dépublier cette campagne ?\",\n okButton: 'Dépublier',\n noButton: 'Annuler',\n callback: function callback(value) {\n if (value) {\n $.ajaxSetup({\n headers: {\n 'X-CSRF-TOKEN': $('#csrf').val()\n }\n });\n $.ajax({\n url: '/unpublish-camp-ajax',\n type: 'POST',\n data: {\n campid: campid\n },\n dataType: 'JSON',\n success: function success(reponse) {\n element.empty().html('');\n }\n });\n }\n }\n });\n});\n\n$('body').on('click', '.publishcamp', function (event) {\n event.preventDefault();\n var campid = $(this).attr('data-campid');\n var element = $(this).parent();\n $.fancyInfo({\n title: \" Publier\",\n message: \"Êtes-vous sûr de vouloir publier cette campagne ?\",\n okButton: 'Publier',\n noButton: 'Annuler',\n callback: function callback(value) {\n if (value) {\n $.ajaxSetup({\n headers: {\n 'X-CSRF-TOKEN': $('#csrf').val()\n }\n });\n $.ajax({\n url: '/publish-camp-ajax',\n type: 'POST',\n data: {\n campid: campid\n },\n dataType: 'JSON',\n success: function success(reponse) {\n element.empty().html('');\n }\n });\n }\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWpheC5qcz9hOGJiIl0sIm5hbWVzIjpbIiQiLCJvbiIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJpZHMiLCJjYW1waWQiLCJwYXJlbnQiLCJmaW5kIiwidmFsIiwiZWFjaCIsImlzIiwicHVzaCIsImFqYXhTZXR1cCIsImhlYWRlcnMiLCJhamF4IiwidXJsIiwidHlwZSIsImRhdGEiLCJkYXRhVHlwZSIsInN1Y2Nlc3MiLCJyZXBvbnNlIiwiaW5kZXgiLCJjb3Vwb24iLCJodG1sIiwiY291cG9uX2NvZGUiLCJjb3Vwb25fbmFtZSIsImNvdXBvbl9pZCIsInJlbW92ZSIsImFwcGVuZCIsImZhbmN5Ym94IiwiY2xvc2UiLCJlcnJvciIsImUiLCJjb25zb2xlIiwibG9nIiwicmVzcG9uc2VUZXh0IiwiYXR0ciIsImNvdXBvbmlkIiwidHJMaW5rZWQiLCJmYW5jeUNvbmZpcm0iLCJ0aXRsZSIsIm1lc3NhZ2UiLCJva0J1dHRvbiIsIm5vQnV0dG9uIiwiY2FsbGJhY2siLCJ2YWx1ZSIsImJlZm9yZSIsImVsZW1lbnQiLCJlbXB0eSIsImZhbmN5SW5mbyJdLCJtYXBwaW5ncyI6IkFBQUFBLEVBQUUsYUFBRixFQUFpQkMsRUFBakIsQ0FBb0IsT0FBcEIsRUFBNkIsVUFBU0MsS0FBVCxFQUFlO0FBQ3hDQSxVQUFNQyxjQUFOO0FBQ0EsUUFBSUMsTUFBTSxFQUFWO0FBQ0EsUUFBSUMsU0FBU0wsRUFBRSxJQUFGLEVBQVFNLE1BQVIsR0FBaUJDLElBQWpCLENBQXNCLFVBQXRCLEVBQWtDQyxHQUFsQyxFQUFiO0FBQ0FSLE1BQUUsSUFBRixFQUFRTSxNQUFSLEdBQWlCQyxJQUFqQixDQUFzQixtQkFBdEIsRUFBMkNFLElBQTNDLENBQWdELFVBQVNQLEtBQVQsRUFBZTtBQUMzRCxZQUFHRixFQUFFLElBQUYsRUFBUVUsRUFBUixDQUFXLFVBQVgsQ0FBSCxFQUEwQjtBQUN0Qk4sZ0JBQUlPLElBQUosQ0FBU1gsRUFBRSxJ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d0NBQWdCYixFQUFFLE9BQUYsRUFBV1EsR0FBWDtBQURYO0FBREQsaUJBQVo7QUFLQVIsa0JBQUVjLElBQUYsQ0FBTztBQUNIQyx5QkFBSyxvQkFERjtBQUVIQywwQkFBTSxNQUZIO0FBR0hDLDBCQUFNO0FBQ0ZaLGdDQUFRQTtBQUROLHFCQUhIO0FBTUhhLDhCQUFVLE1BTlA7QUFPSEMsNkJBQVMsaUJBQVVDLE9BQVYsRUFBbUI7QUFDeEIyQixnQ0FBUUMsS0FBUixHQUFnQnpCLElBQWhCLENBQXFCLHFCQUFtQmxCLE1BQW5CLEdBQTBCLHdEQUEvQztBQUNIO0FBVEUsaUJBQVA7QUFXRDtBQUNGO0FBeEJPLEtBQVo7QUEyQkgsQ0EvQkQiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiQoJyNhZGRDb3Vwb25zJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGxldCBpZHMgPSBbXTtcclxuICAgIHZhciBjYW1waWQgPSAkKHRoaXMpLnBhcmVudCgpLmZpbmQoJyNjYW1wX2lkJykudmFsKCk7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgpLmZpbmQoJy5pbnB1dEdyb3VwIGlucHV0JykuZWFjaChmdW5jdGlvbihldmVudCl7XHJcbiAgICAgICAgaWYoJCh0aGlzKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgICAgIGlkcy5wdXNoKCQodGhpcykudmFsKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH0pXHJcbiAgICAkLmFqYXhTZXR1cCh7XHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogJCh0aGlzKS5wYXJlbnQoKS5maW5kKCcjY3NyZicpLnZhbCgpXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB1cmw6ICcvYWRkLWNvdXBvbnMtYWpheCcsXHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgaWRzOiBpZHMgLCBcclxuICAgICAgICAgICAgY2FtcGlkOiBjYW1waWRcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGFUeXBlOiAnSlNPTicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcG9uc2UpIHsgICAgXHJcbiAgICAgICAgICAgICQuZWFjaChyZXBvbnNlLCBmdW5jdGlvbihpbmRleCwgY291cG9uKXtcclxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gJzx0cj4nO1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPHRkPicrY291cG9uLmNvdXBvbl9jb2RlKyc8L3RkPic7XHJcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8dGQ+Jytjb3Vwb24uY291cG9uX25hbWUrJzwvdGQ+JztcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0ZD48aSBjbGFzcz1cImZhcyBmYS10aW1lcyBkZWxldGUtY291cG9uXCIgZGF0YS1jYW1waWQ9XCInK2NhbXBpZCsnXCIgZGF0YS1jb3Vwb25pZD1cIicrY291cG9uLmNvdXBvbl9pZCsnXCI+PC9pPjwvdGQ+JztcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzwvdHI+JztcclxuICAgICAgICAgICAgICAgICQoJy5uby1yZXN1bHQnKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICQoJy5jb3Vwb25zLXdyYXBwZXIgdGFibGUnKS5hcHBlbmQoaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAkKCcjYWRkQ291cG9ucycpLnBhcmVudCgpLmZpbmQoJy5pbnB1dEdyb3VwIGlucHV0JykuZWFjaChmdW5jdGlvbihldmVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJCh0aGlzKS52YWwoKSA9PSBjb3Vwb24uY291cG9uX2lkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoJy5pbnB1dEdyb3VwJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgJC5mYW5jeWJveC5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pICBcclxuXHJcblxyXG5cclxuJCgnYm9keScpLm9uKCdjbGljaycsICcuZGVsZXRlLWNvdXBvbicsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIHZhciBjYW1waWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtY2FtcGlkJyk7XHJcbiAgICB2YXIgY291cG9uaWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtY291cG9uaWQnKTtcclxuICAgIHZhciB0ckxpbmtlZCA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICAkLmZhbmN5Q29uZmlybSh7XHJcbiAgICAgICAgdGl0bGUgICAgIDogXCI8aSBjbGFzcz0nZmFzIGZhLXRpbWVzLWNpcmNsZSc+PC9pPiBSZXRyYWl0XCIsXHJcbiAgICAgICAgbWVzc2FnZSAgIDogXCLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciByZXRpcmVyIGNlIGNvdXBvbiBkZSBjZXR0ZSBjYW1wYWduZSA/XCIsXHJcbiAgICAgICAgb2tCdXR0b24gIDogJ1JldGlyZXInLFxyXG4gICAgICAgIG5vQnV0dG9uICA6ICdBbm51bGVyJyxcclxuICAgICAgICBjYWxsYmFjayAgOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgJC5hamF4U2V0dXAoe1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiAkKCcjY3NyZicpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnL3JlbW92ZS1jb3Vwb25zLWFqYXgnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdXBvbmlkOiBjb3Vwb25pZCxcclxuICAgICAgICAgICAgICAgICAgICBjYW1waWQ6IGNhbXBpZFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnSlNPTicsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVwb25zZSkgeyBcclxuICAgICAgICAgICAgICAgICAgICB0ckxpbmtlZC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IFwiPGRpdiBjbGFzcz0naW5wdXRHcm91cCc+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBcIjxpbnB1dCBpZD0nY291cG9uW1wiK3JlcG9uc2UuY291cG9uX2lkK1wiXScgbmFtZT0nY291cG9uW1wiK3JlcG9uc2UuY291cG9uX2lkK1wiXScgdHlwZT0nY2hlY2tib3gnIHZhbHVlPSdcIityZXBvbnNlLmNvdXBvbl9pZCtcIicgPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gXCI8bGFiZWwgZm9yPSdjb3Vwb25bXCIrcmVwb25zZS5jb3Vwb25faWQrXCJdJz5cIityZXBvbnNlLmNvdXBvbl9uYW1lK1wiPC9sYWJlbD5cIjtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9IFwiPC9kaXY+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIiNjYW1wX2lkXCIpLmJlZm9yZShodG1sKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pOyAgIFxyXG59KVxyXG5cclxuXHJcbiQoJ2JvZHknKS5vbignY2xpY2snLCAnLnVucHVibGlzaCcsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB2YXIgY291cG9uaWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtY291cG9uaWQnKTtcclxuICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKS5wYXJlbnQoKTtcclxuICAgICQuZmFuY3lDb25maXJtKHtcclxuICAgICAgICB0aXRsZSAgICAgOiBcIjxpIGNsYXNzPSdmYXMgZmEtdGltZXMtY2lyY2xlJz48L2k+IETDqXB1YmxpZXJcIixcclxuICAgICAgICBtZXNzYWdlICAgOiBcIsOKdGVzLXZvdXMgc8O7ciBkZSB2b3Vsb2lyIGTDqXB1YmxpZXIgY2UgY291cG9uID9cIixcclxuICAgICAgICBva0J1dHRvbiAgOiAnRMOpcHVibGllcicsXHJcbiAgICAgICAgbm9CdXR0b24gIDogJ0FubnVsZXInLFxyXG4gICAgICAgIGNhbGxiYWNrICA6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICQuYWpheFNldHVwKHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogJCgnI2NzcmYnKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDogJy91bnB1Ymxpc2gtY291cG9ucy1hamF4JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb3Vwb25pZDogY291cG9uaWRcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ0pTT04nLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcG9uc2UpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbXB0eSgpLmh0bWwoJzxpIGRhdGEtY291cG9uaWQ9XCInK2NvdXBvbmlkKydcIiBjbGFzcz1cImZhcyBmYS10aW1lcy1jaXJjbGUgcmVkIHB1Ymxpc2hcIj48L2k+JylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBcclxufSlcclxuXHJcbiQoJ2JvZHknKS5vbignY2xpY2snLCAnLnB1Ymxpc2gnLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdmFyIGNvdXBvbmlkID0gJCh0aGlzKS5hdHRyKCdkYXRhLWNvdXBvbmlkJyk7XHJcbiAgICB2YXIgZWxlbWVudCA9ICQodGhpcykucGFyZW50KCk7XHJcbiAgICAkLmZhbmN5SW5mbyh7XHJcbiAgICAgICAgdGl0bGUgICAgIDogXCI8aSBjbGFzcz0nZmFzIGZhLWNoZWNrLWNpcmNsZSc+PC9pPiBQdWJsaWVyXCIsXHJcbiAgICAgICAgbWVzc2FnZSAgIDogXCLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBwdWJsaWVyIGNlIGNvdXBvbiA/XCIsXHJcbiAgICAgICAgb2tCdXR0b24gIDogJ1B1YmxpZXInLFxyXG4gICAgICAgIG5vQnV0dG9uICA6ICdBbm51bGVyJyxcclxuICAgICAgICBjYWxsYmFjayAgOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAkLmFqYXhTZXR1cCh7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6ICQoJyNjc3JmJykudmFsKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvcHVibGlzaC1jb3Vwb25zLWFqYXgnLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdXBvbmlkOiBjb3Vwb25pZFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnSlNPTicsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVwb25zZSkgeyBcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVtcHR5KCkuaHRtbCgnPGkgZGF0YS1jb3Vwb25pZD1cIicrY291cG9uaWQrJ1wiIGNsYXNzPVwiZmFzIGZhLWNoZWNrLWNpcmNsZSBncmVlbiB1bnB1Ymxpc2hcIj48L2k+JylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBcclxufSlcclxuXHJcblxyXG4kKCdib2R5Jykub24oJ2NsaWNrJywgJy51bnB1Ymxpc2hjYW1wJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHZhciBjYW1waWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtY2FtcGlkJyk7XHJcbiAgICB2YXIgZWxlbWVudCA9ICQodGhpcykucGFyZW50KCk7XHJcbiAgICAkLmZhbmN5Q29uZmlybSh7XHJcbiAgICAgICAgdGl0bGUgICAgIDogXCI8aSBjbGFzcz0nZmFzIGZhLXRpbWVzLWNpcmNsZSc+PC9pPiBEw6lwdWJsaWVyXCIsXHJcbiAgICAgICAgbWVzc2FnZSAgIDogXCLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBkw6lwdWJsaWVyIGNldHRlIGNhbXBhZ25lID9cIixcclxuICAgICAgICBva0J1dHRvbiAgOiAnRMOpcHVibGllcicsXHJcbiAgICAgICAgbm9CdXR0b24gIDogJ0FubnVsZXInLFxyXG4gICAgICAgIGNhbGxiYWNrICA6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICQuYWpheFNldHVwKHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogJCgnI2NzcmYnKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDogJy91bnB1Ymxpc2gtY2FtcC1hamF4JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICBjYW1waWQ6IGNhbXBpZFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnSlNPTicsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVwb25zZSkgeyBcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVtcHR5KCkuaHRtbCgnPGkgZGF0YS1jYW1waWQ9XCInK2NhbXBpZCsnXCIgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIHJlZCBwdWJsaXNoY2FtcFwiPjwvaT4nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIFxyXG59KVxyXG5cclxuJCgnYm9keScpLm9uKCdjbGljaycsICcucHVibGlzaGNhbXAnLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdmFyIGNhbXBpZCA9ICQodGhpcykuYXR0cignZGF0YS1jYW1waWQnKTtcclxuICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKS5wYXJlbnQoKTtcclxuICAgICQuZmFuY3lJbmZvKHtcclxuICAgICAgICB0aXRsZSAgICAgOiBcIjxpIGNsYXNzPSdmYXMgZmEtY2hlY2stY2lyY2xlJz48L2k+IFB1YmxpZXJcIixcclxuICAgICAgICBtZXNzYWdlICAgOiBcIsOKdGVzLXZvdXMgc8O7ciBkZSB2b3Vsb2lyIHB1YmxpZXIgY2V0dGUgY2FtcGFnbmUgP1wiLFxyXG4gICAgICAgIG9rQnV0dG9uICA6ICdQdWJsaWVyJyxcclxuICAgICAgICBub0J1dHRvbiAgOiAnQW5udWxlcicsXHJcbiAgICAgICAgY2FsbGJhY2sgIDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgJC5hamF4U2V0dXAoe1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiAkKCcjY3NyZicpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnL3B1Ymxpc2gtY2FtcC1hamF4JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICBjYW1waWQ6IGNhbXBpZFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnSlNPTicsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVwb25zZSkgeyBcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVtcHR5KCkuaHRtbCgnPGkgZGF0YS1jYW1waWQ9XCInK2NhbXBpZCsnXCIgY2xhc3M9XCJmYXMgZmEtY2hlY2stY2lyY2xlIGdyZWVuIHVucHVibGlzaGNhbXBcIj48L2k+JylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBcclxufSlcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9yZXNvdXJjZXMvanMvYWpheC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n"); - -/***/ }) - -/******/ }); \ No newline at end of file diff --git a/public/js/app.js b/public/js/app.js deleted file mode 100644 index a096d3f..0000000 --- a/public/js/app.js +++ /dev/null @@ -1,94 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "/"; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(1); -module.exports = __webpack_require__(3); - - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("/**\r\n * First we will load all of this project's JavaScript dependencies which\r\n * includes Vue and other libraries. It is a great starting point when\r\n * building robust, powerful web applications using Vue and Laravel.\r\n */\n\n/*\r\nrequire('./bootstrap');\r\n\r\nwindow.Vue = require('vue');\r\n\r\n/**\r\n * Next, we will create a fresh Vue application instance and attach it to\r\n * the page. Then, you may begin adding components to this application\r\n * or customize the JavaScript scaffolding to fit your unique needs.\r\n */\n\n/*\r\nVue.component('example-component', require('./components/ExampleComponent.vue'));\r\n\r\nconst app = new Vue({\r\n el: '#app'\r\n});\r\n*/\n\n\n\ntry {\n window.$ = window.jQuery = __webpack_require__(2);\n} catch (e) {}\n\nvar changeIcon = $('.marque');\nvar dropDownMarque = $('.marque-select');\n\n// FancyBox Communes\n// Confirmation \n$.fancyConfirm = function (opts) {\n opts = $.extend(true, {\n title: 'Are you sure?',\n message: '',\n okButton: 'OK',\n noButton: 'Cancel',\n callback: $.noop\n }, opts || {});\n\n $.fancybox.open({\n type: 'html',\n src: '
' + '

' + opts.title + '

' + '

' + opts.message + '

' + '

' + '' + opts.noButton + '' + '' + '

' + '
',\n opts: {\n animationDuration: 350,\n animationEffect: 'material',\n modal: true,\n baseTpl: '
' + '
' + '
' + '
' + '
' + '
',\n afterClose: function afterClose(instance, current, e) {\n var button = e ? e.target || e.currentTarget : null;\n var value = button ? $(button).data('value') : 0;\n\n opts.callback(value);\n }\n }\n });\n};\n\n// Informations\n$.fancyInfo = function (opts) {\n opts = $.extend(true, {\n title: 'Are you sure?',\n message: '',\n okButton: 'OK',\n noButton: 'Cancel',\n callback: $.noop\n }, opts || {});\n\n $.fancybox.open({\n type: 'html',\n src: '
' + '

' + opts.title + '

' + '

' + opts.message + '

' + '

' + '' + opts.noButton + '' + '' + '

' + '
',\n opts: {\n animationDuration: 350,\n animationEffect: 'material',\n modal: true,\n baseTpl: '
' + '
' + '
' + '
' + '
' + '
',\n afterClose: function afterClose(instance, current, e) {\n var button = e ? e.target || e.currentTarget : null;\n var value = button ? $(button).data('value') : 0;\n opts.callback(value);\n }\n }\n });\n};\n\nchangeIcon.on('click', function () {\n if (dropDownMarque.css('display') == \"none\") {\n dropDownMarque.slideDown('fast');\n } else {\n dropDownMarque.slideUp('fast');\n }\n});\n\nvar deleteIcons = document.querySelectorAll('.delete-icon');\n\nvar confirmDelete = function confirmDelete(e) {\n e.preventDefault();\n var url = e.target.parentElement.href;\n var form = document.querySelector('#delete-hidden');\n\n $.fancyConfirm({\n title: \" Suppression\",\n message: \"Êtes-vous sûr de vouloir effacer cet élément ?\",\n okButton: 'Supprimer',\n noButton: 'Annuler',\n callback: function callback(value) {\n if (value) {\n form.action = url;\n form.submit();\n }\n }\n });\n};\n\ndeleteIcons.forEach(function (el) {\n el.addEventListener('click', confirmDelete);\n});\n\n$('.burger').on('click', function (e) {\n e.preventDefault();\n $(this).parent('nav').css('left', '0');\n $(this).css('display', 'none');\n $('.close').css('display', 'block');\n});\n\n$('.close').on('click', function (e) {\n e.preventDefault();\n $(this).parent('nav').css('left', '-75px');\n $(this).css('display', 'none');\n $('.burger').css('display', 'block');\n});\n\n$(window).resize(function () {\n if (window.matchMedia(\"(min-width: 768px)\").matches) {\n $('.burger').css('display', 'none');\n $('.close').css('display', 'none');\n $('nav').css('left', '0');\n } else {\n $('nav').css('left', '-75px');\n $('.burger').css('display', 'block');\n $('.close').css('display', 'none');\n }\n});\n\n$('#camp_type').on('change', function (event) {\n if ($(this).val() == 1 || $(this).val() == 3) {\n $('.limitPrinting').css('opacity', '1');\n } else {\n $('.limitPrinting').css('opacity', '0');\n }\n});\n\n$('#coupon_enablelimitquantity').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.enablelimitquantity').css('opacity', '1');\n } else {\n $('.enablelimitquantity').css('opacity', '0');\n }\n});\n\n$('#coupon_enablelimitperiod').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.enablelimitperiod').css('opacity', '1');\n } else {\n $('.enablelimitperiod').css('opacity', '0');\n }\n});\n\n$('#coupon_norme').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.gs1code').css('opacity', '1');\n } else {\n $('.gs1code').css('opacity', '0');\n }\n});\n\n$(document).ready(function () {\n if ($('#camp_type').val() == 1 || $('#camp_type').val() == 3) {\n $('.limitPrinting').css('opacity', '1');\n }\n if ($('#coupon_enablelimitquantity').is(':checked')) {\n $('.enablelimitquantity').css('opacity', '1');\n }\n if ($('#coupon_enablelimitperiod').is(':checked')) {\n $('.enablelimitperiod').css('opacity', '1');\n }\n if ($('#coupon_norme').is(':checked')) {\n $('.gs1code').css('opacity', '1');\n }\n});\n\n$('.addcalendar').on('click', function (event) {\n event.preventDefault();\n $('.calendar').append('
');\n});\n\n$('.calendar').on('click', '.removecalendar', function (event) {\n $(this).parent('.form-field-calendar').remove();\n});\n\n$('.add-mouvement-btn').on('click', function (event) {\n event.preventDefault();\n var element = $(this).parent().parent();\n var mouvementDate = element.find('#add-mouvement-date').val();\n var mouvementNbre = element.find('#add-mouvement-nbre').val();\n var html = \"\";\n html += \"\" + mouvementDate.split('-').reverse().join('/') + \"\";\n html += \"\" + mouvementNbre + \"\";\n html += \"\";\n $('.add-mouvement').before(html);\n});\n\n$('.contactWidgets').on('click', '.copy-url', function (event) {\n var animElement = $(this).parent().parent().find('.link-copied');\n var $tempElement = $(\"\");\n $(\"body\").append($tempElement);\n $tempElement.val($(this).text()).select();\n document.execCommand(\"Copy\");\n $tempElement.remove();\n animElement.animate({ opacity: 1 }, 200, function () {\n setTimeout(function () {\n animElement.animate({ opacity: 0 }, 1000);\n }, 500);\n });\n});\n\n// ---- DASHBOARD BUTTONS\n\n$('.campDetail .fa-angle-down').on('click', function (event) {\n var cpDiv = $(this).parent().parent().parent().find('.coupons');\n if (cpDiv.css('display') == 'none') {\n cpDiv.slideDown(500);\n } else {\n cpDiv.slideUp(500);\n }\n});\n\n$('.open-all').on('click', function (event) {\n event.preventDefault();\n $('.coupons').each(function () {\n $(this).slideDown(500);\n });\n});\n\n$('.close-all').on('click', function (event) {\n event.preventDefault();\n $('.coupons').each(function () {\n $(this).slideUp(500);\n });\n});\n\n// ---- ALERTE sur Campagne\n\n$('.couponDetail').each(function () {\n if ($(this).attr('data-printable') == 0) {\n console.log();\n $(this).parent().parent().parent().parent().find('.fa-exclamation-triangle').show();\n }\n});\n\n$('body').on('click', '.expand', function (event) {\n event.preventDefault();\n var contentDiv = $(this).parent().parent().find('.content');\n\n if (contentDiv.css('display') == 'none') {\n contentDiv.slideDown();\n } else {\n contentDiv.slideUp();\n }\n});\n\n$('.open-all-stats').on('click', function (event) {\n event.preventDefault();\n $('.couponStats .content').each(function () {\n $(this).slideDown(500);\n });\n});\n\n$('.close-all-stats').on('click', function (event) {\n event.preventDefault();\n $('.couponStats .content').each(function () {\n $(this).slideUp(500);\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYXBwLmpzPzE3NTkiXSwibmFtZXMiOlsid2luZG93IiwiJCIsImpRdWVyeSIsInJlcXVpcmUiLCJlIiwiY2hhbmdlSWNvbiIsImRyb3BEb3duTWFycXVlIiwiZmFuY3lDb25maXJtIiwib3B0cyIsImV4dGVuZCIsInRpdGxlIiwibWVzc2FnZSIsIm9rQnV0dG9uIiwibm9CdXR0b24iLCJjYWxsYmFjayIsIm5vb3AiLCJmYW5jeWJveCIsIm9wZW4iLCJ0eXBlIiwic3JjIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJhbmltYXRpb25FZmZlY3QiLCJtb2RhbCIsImJhc2VUcGwiLCJhZnRlckNsb3NlIiwiaW5zdGFuY2UiLCJjdXJyZW50IiwiYnV0dG9uIiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsInZhbHVlIiwiZGF0YSIsImZhbmN5SW5mbyIsIm9uIiwiY3NzIiwic2xpZGVEb3duIiwic2xpZGVVcCIsImRlbGV0ZUljb25zIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY29uZmlybURlbGV0ZSIsInByZXZlbnREZWZhdWx0IiwidXJsIiwicGFyZW50RWxlbWVudCIsImhyZWYiLCJmb3JtIiwicXVlcnlTZWxlY3RvciIsImFjdGlvbiIsInN1Ym1pdCIsImZvckVhY2giLCJlbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJwYXJlbnQiLCJyZXNpemUiLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImV2ZW50IiwidmFsIiwiaXMiLCJyZWFkeSIsImFwcGVuZCIsInJlbW92ZSIsImVsZW1lbnQiLCJtb3V2ZW1lbnREYXRlIiwiZmluZCIsIm1vdXZlbWVudE5icmUiLCJodG1sIiwic3BsaXQiLCJyZXZlcnNlIiwiam9pbiIsImJlZm9yZSIsImFuaW1FbGVtZW50IiwiJHRlbXBFbGVtZW50IiwidGV4dCIsInNlbGVjdCIsImV4ZWNDb21tYW5kIiwiYW5pbWF0ZSIsIm9wYWNpdHkiLCJzZXRUaW1lb3V0IiwiY3BEaXYi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TWYsY0FBTjtBQUNBeEMsTUFBRSx1QkFBRixFQUEyQitFLElBQTNCLENBQWdDLFlBQVU7QUFDdEMvRSxVQUFFLElBQUYsRUFBUWtDLFNBQVIsQ0FBa0IsR0FBbEI7QUFDSCxLQUZEO0FBR0gsQ0FMRDs7QUFPQWxDLEVBQUUsa0JBQUYsRUFBc0JnQyxFQUF0QixDQUF5QixPQUF6QixFQUFrQyxVQUFTdUIsS0FBVCxFQUFlO0FBQzdDQSxVQUFNZixjQUFOO0FBQ0F4QyxNQUFFLHVCQUFGLEVBQTJCK0UsSUFBM0IsQ0FBZ0MsWUFBVTtBQUN0Qy9FLFVBQUUsSUFBRixFQUFRbUMsT0FBUixDQUFnQixHQUFoQjtBQUNILEtBRkQ7QUFHSCxDQUxEIiwiZmlsZSI6IjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRmlyc3Qgd2Ugd2lsbCBsb2FkIGFsbCBvZiB0aGlzIHByb2plY3QncyBKYXZhU2NyaXB0IGRlcGVuZGVuY2llcyB3aGljaFxyXG4gKiBpbmNsdWRlcyBWdWUgYW5kIG90aGVyIGxpYnJhcmllcy4gSXQgaXMgYSBncmVhdCBzdGFydGluZyBwb2ludCB3aGVuXHJcbiAqIGJ1aWxkaW5nIHJvYnVzdCwgcG93ZXJmdWwgd2ViIGFwcGxpY2F0aW9ucyB1c2luZyBWdWUgYW5kIExhcmF2ZWwuXHJcbiAqL1xyXG5cclxuLypcclxucmVxdWlyZSgnLi9ib290c3RyYXAnKTtcclxuXHJcbndpbmRvdy5WdWUgPSByZXF1aXJlKCd2dWUnKTtcclxuXHJcbi8qKlxyXG4gKiBOZXh0LCB3ZSB3aWxsIGNyZWF0ZSBhIGZyZXNoIFZ1ZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSBhbmQgYXR0YWNoIGl0IHRvXHJcbiAqIHRoZSBwYWdlLiBUaGVuLCB5b3UgbWF5IGJlZ2luIGFkZGluZyBjb21wb25lbnRzIHRvIHRoaXMgYXBwbGljYXRpb25cclxuICogb3IgY3VzdG9taXplIHRoZSBKYXZhU2NyaXB0IHNjYWZmb2xkaW5nIHRvIGZpdCB5b3VyIHVuaXF1ZSBuZWVkcy5cclxuICovXHJcblxyXG4vKlxyXG5WdWUuY29tcG9uZW50KCdleGFtcGxlLWNvbXBvbmVudCcsIHJlcXVpcmUoJy4vY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZScpKTtcclxuXHJcbmNvbnN0IGFwcCA9IG5ldyBWdWUoe1xyXG4gICAgZWw6ICcjYXBwJ1xyXG59KTtcclxuKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnRyeSB7XHJcbiAgICB3aW5kb3cuJCA9IHdpbmRvdy5qUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKVxyXG59IGNhdGNoIChlKSB7fVxyXG5cclxuY29uc3QgY2hhbmdlSWNvbiA9ICQoJy5tYXJxdWUnKVxyXG5jb25zdCBkcm9wRG93bk1hcnF1ZSA9ICQoJy5tYXJxdWUtc2VsZWN0JylcclxuXHJcbi8vIEZhbmN5Qm94IENvbW11bmVzXHJcbi8vIENvbmZpcm1hdGlvbiBcclxuJC5mYW5jeUNvbmZpcm0gPSBmdW5jdGlvbiggb3B0cyApIHtcclxuICAgIG9wdHMgID0gJC5leHRlbmQoIHRydWUsIHtcclxuICAgICAgdGl0bGUgICAgIDogJ0FyZSB5b3Ugc3VyZT8nLFxyXG4gICAgICBtZXNzYWdlICAgOiAnJyxcclxuICAgICAgb2tCdXR0b24gIDogJ09LJyxcclxuICAgICAgbm9CdXR0b24gIDogJ0NhbmNlbCcsXHJcbiAgICAgIGNhbGxiYWNrICA6ICQubm9vcFxyXG4gICAgfSwgb3B0cyB8fCB7fSApO1xyXG4gIFxyXG4gICAgJC5mYW5jeWJveC5vcGVuKHtcclxuICAgICAgdHlwZSA6ICdodG1sJyxcclxuICAgICAgc3JjICA6XHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiZmMtY29udGVudFwiPicgK1xyXG4gICAgICAnPGgzPicgKyBvcHRzLnRpdGxlICAgKyAnPC9oMz4nICtcclxuICAgICAgJzxwPicgICsgb3B0cy5tZXNzYWdlICsgJzwvcD4nICtcclxuICAgICAgJzxwIGNsYXNzPVwidHJpZ2h0XCI+JyArXHJcbiAgICAgICc8YSBkYXRhLXZhbHVlPVwiMFwiIGRhdGEtZmFuY3lib3gtY2xvc2U+JyArIG9wdHMubm9CdXR0b24gKyAnPC9hPicgK1xyXG4gICAgICAnPGJ1dHRvbiBkYXRhLXZhbHVlPVwiMVwiIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJidG5cIj4nICsgb3B0cy5va0J1dHRvbiArICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvcD4nICtcclxuICAgICAgJzwvZGl2PicsXHJcbiAgICAgIG9wdHMgOiB7XHJcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb24gOiAzNTAsXHJcbiAgICAgICAgYW5pbWF0aW9uRWZmZWN0ICAgOiAnbWF0ZXJpYWwnLFxyXG4gICAgICAgIG1vZGFsIDogdHJ1ZSxcclxuICAgICAgICBiYXNlVHBsIDpcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWNvbnRhaW5lciBmYy1jb250YWluZXJcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtYmdcIj48L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWlubmVyXCI+JyArXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1zdGFnZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9kaXY+JyxcclxuICAgICAgICBhZnRlckNsb3NlIDogZnVuY3Rpb24oIGluc3RhbmNlLCBjdXJyZW50LCBlICkge1xyXG4gICAgICAgICAgdmFyIGJ1dHRvbiA9IGUgPyBlLnRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQgOiBudWxsO1xyXG4gICAgICAgICAgdmFyIHZhbHVlICA9IGJ1dHRvbiA/ICQoYnV0dG9uKS5kYXRhKCd2YWx1ZScpIDogMDtcclxuICBcclxuICAgICAgICAgIG9wdHMuY2FsbGJhY2soIHZhbHVlICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4vLyBJbmZvcm1hdGlvbnNcclxuICAkLmZhbmN5SW5mbyA9IGZ1bmN0aW9uKCBvcHRzICkge1xyXG4gICAgb3B0cyAgPSAkLmV4dGVuZCggdHJ1ZSwge1xyXG4gICAgICB0aXRsZSAgICAgOiAnQXJlIHlvdSBzdXJlPycsXHJcbiAgICAgIG1lc3NhZ2UgICA6ICcnLFxyXG4gICAgICBva0J1dHRvbiAgOiAnT0snLFxyXG4gICAgICBub0J1dHRvbiAgOiAnQ2FuY2VsJyxcclxuICAgICAgY2FsbGJhY2sgIDogJC5ub29wXHJcbiAgICB9LCBvcHRzIHx8IHt9ICk7XHJcbiAgXHJcbiAgICAkLmZhbmN5Ym94Lm9wZW4oe1xyXG4gICAgICB0eXBlIDogJ2h0bWwnLFxyXG4gICAgICBzcmMgIDpcclxuICAgICAgJzxkaXYgY2xhc3M9XCJmYy1jb250ZW50XCI+JyArXHJcbiAgICAgICc8aDMgY2xhc3M9XCJpbmZvXCI+JyArIG9wdHMudGl0bGUgICArICc8L2gzPicgK1xyXG4gICAgICAnPHA+JyAgKyBvcHRzLm1lc3NhZ2UgKyAnPC9wPicgK1xyXG4gICAgICAnPHAgY2xhc3M9XCJ0cmlnaHRcIj4nICtcclxuICAgICAgJzxhIGRhdGEtdmFsdWU9XCIwXCIgZGF0YS1mYW5jeWJveC1jbG9zZT4nICsgb3B0cy5ub0J1dHRvbiArICc8L2E+JyArIFxyXG4gICAgICAnPGJ1dHRvbiBkYXRhLXZhbHVlPVwiMVwiIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJidG5cIj4nICsgb3B0cy5va0J1dHRvbiArICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvcD4nICtcclxuICAgICAgJzwvZGl2PicsXHJcbiAgICAgIG9wdHMgOiB7XHJcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb24gOiAzNTAsXHJcbiAgICAgICAgYW5pbWF0aW9uRWZmZWN0ICAgOiAnbWF0ZXJpYWwnLFxyXG4gICAgICAgIG1vZGFsIDogdHJ1ZSxcclxuICAgICAgICBiYXNlVHBsIDpcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWNvbnRhaW5lciBmYy1jb250YWluZXJcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtYmdcIj48L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWlubmVyXCI+JyArXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1zdGFnZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9kaXY+JyxcclxuICAgICAgICBhZnRlckNsb3NlIDogZnVuY3Rpb24oIGluc3RhbmNlLCBjdXJyZW50LCBlICkge1xyXG4gICAgICAgICAgdmFyIGJ1dHRvbiA9IGUgPyBlLnRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQgOiBudWxsO1xyXG4gICAgICAgICAgdmFyIHZhbHVlICA9IGJ1dHRvbiA/ICQoYnV0dG9uKS5kYXRhKCd2YWx1ZScpIDogMDtcclxuICAgICAgICAgIG9wdHMuY2FsbGJhY2soIHZhbHVlICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuY2hhbmdlSWNvbi5vbignY2xpY2snLCAoKSA9PiB7XHJcbiAgICBpZihkcm9wRG93bk1hcnF1ZS5jc3MoJ2Rpc3BsYXknKSA9PSBcIm5vbmVcIil7XHJcbiAgICAgICAgZHJvcERvd25NYXJxdWUuc2xpZGVEb3duKCdmYXN0Jyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRyb3BEb3duTWFycXVlLnNsaWRlVXAoJ2Zhc3QnKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBkZWxldGVJY29ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZWxldGUtaWNvbicpXHJcblxyXG5sZXQgY29uZmlybURlbGV0ZSA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgIGxldCB1cmwgPSBlLnRhcmdldC5wYXJlbnRFbGVtZW50LmhyZWZcclxuICAgIGxldCBmb3JtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RlbGV0ZS1oaWRkZW4nKVxyXG5cclxuICAgICQuZmFuY3lDb25maXJtKHtcclxuICAgICAgICB0aXRsZSAgICAgOiBcIjxpIGNsYXNzPSdmYXMgZmEtdGltZXMtY2lyY2xlJz48L2k+IFN1cHByZXNzaW9uXCIsXHJcbiAgICAgICAgbWVzc2FnZSAgIDogXCLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBlZmZhY2VyIGNldCDDqWzDqW1lbnQgP1wiLFxyXG4gICAgICAgIG9rQnV0dG9uICA6ICdTdXBwcmltZXInLFxyXG4gICAgICAgIG5vQnV0dG9uICA6ICdBbm51bGVyJyxcclxuICAgICAgICBjYWxsYmFjayAgOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBmb3JtLmFjdGlvbiA9IHVybFxyXG4gICAgICAgICAgICBmb3JtLnN1Ym1pdCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxufVxyXG5cclxuZGVsZXRlSWNvbnMuZm9yRWFjaCgoZWwpID0+IHtcclxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY29uZmlybURlbGV0ZSlcclxufSlcclxuXHJcblxyXG4kKCcuYnVyZ2VyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnbmF2JykuY3NzKCdsZWZ0JywgJzAnKTtcclxuICAgICQodGhpcykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICQoJy5jbG9zZScpLmNzcygnZGlzcGxheScsICdibG9jaycpO1xyXG59KVxyXG5cclxuJCgnLmNsb3NlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnbmF2JykuY3NzKCdsZWZ0JywgJy03NXB4Jyk7XHJcbiAgICAkKHRoaXMpLmNzcygnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAkKCcuYnVyZ2VyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbn0pXHJcblxyXG4kKCB3aW5kb3cgKS5yZXNpemUoZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEoXCIobWluLXdpZHRoOiA3NjhweClcIikubWF0Y2hlcykge1xyXG4gICAgICAgICQoJy5idXJnZXInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICAgICQoJy5jbG9zZScpLmNzcygnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAgICAgJCgnbmF2JykuY3NzKCdsZWZ0JywgJzAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkKCduYXYnKS5jc3MoJ2xlZnQnLCAnLTc1cHgnKTtcclxuICAgICAgICAkKCcuYnVyZ2VyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICAgICAgJCgnLmNsb3NlJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICAgfVxyXG59KTtcclxuXHJcbiQoJyNjYW1wX3R5cGUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgaWYoJCh0aGlzKS52YWwoKSA9PSAxIHx8ICQodGhpcykudmFsKCkgPT0gMyl7XHJcbiAgICAgICAgJCgnLmxpbWl0UHJpbnRpbmcnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAkKCcubGltaXRQcmludGluZycpLmNzcygnb3BhY2l0eScsICcwJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuJCgnI2NvdXBvbl9lbmFibGVsaW1pdHF1YW50aXR5Jykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5lbmFibGVsaW1pdHF1YW50aXR5JykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cXVhbnRpdHknKS5jc3MoJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbiQoJyNjb3Vwb25fZW5hYmxlbGltaXRwZXJpb2QnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgaWYoJCh0aGlzKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzAnKTtcclxuICAgIH1cclxufSk7XHJcblxyXG4kKCcjY291cG9uX25vcm1lJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5nczFjb2RlJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmdzMWNvZGUnKS5jc3MoJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XHJcbiAgICBpZigkKCcjY2FtcF90eXBlJykudmFsKCkgPT0gMSB8fCAkKCcjY2FtcF90eXBlJykudmFsKCkgPT0gMyl7XHJcbiAgICAgICAgJCgnLmxpbWl0UHJpbnRpbmcnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfVxyXG4gICAgaWYoJCgnI2NvdXBvbl9lbmFibGVsaW1pdHF1YW50aXR5JykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5lbmFibGVsaW1pdHF1YW50aXR5JykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH1cclxuICAgIGlmKCQoJyNjb3Vwb25fZW5hYmxlbGltaXRwZXJpb2QnKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH1cclxuICAgIGlmKCQoJyNjb3Vwb25fbm9ybWUnKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmdzMWNvZGUnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuJCgnLmFkZGNhbGVuZGFyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jYWxlbmRhcicpLmFwcGVuZCgnPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtY2FsZW5kYXJcIj48aW5wdXQgdHlwZT1cImRhdGVcIiBuYW1lPVwic3RhcnRkYXRlW11cIj48aW5wdXQgdHlwZT1cImRhdGVcIiBuYW1lPVwiZW5kZGF0ZVtdXCI+PGkgY2xhc3M9XCJmYXMgZmEtbWludXMtc3F1YXJlIHJlbW92ZWNhbGVuZGFyXCI+PC9pPjwvZGl2PicpO1xyXG59KTtcclxuXHJcbiQoJy5jYWxlbmRhcicpLm9uKCdjbGljaycsICcucmVtb3ZlY2FsZW5kYXInLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnLmZvcm0tZmllbGQtY2FsZW5kYXInKS5yZW1vdmUoKTtcclxufSlcclxuXHJcbiQoJy5hZGQtbW91dmVtZW50LWJ0bicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB2YXIgZWxlbWVudCA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICB2YXIgbW91dmVtZW50RGF0ZSA9IGVsZW1lbnQuZmluZCgnI2FkZC1tb3V2ZW1lbnQtZGF0ZScpLnZhbCgpO1xyXG4gICAgdmFyIG1vdXZlbWVudE5icmUgPSBlbGVtZW50LmZpbmQoJyNhZGQtbW91dmVtZW50LW5icmUnKS52YWwoKTtcclxuICAgIHZhciBodG1sID0gXCI8dHI+XCI7XHJcbiAgICBodG1sICs9IFwiPHRoPlwiK21vdXZlbWVudERhdGUuc3BsaXQoJy0nKS5yZXZlcnNlKCkuam9pbignLycpK1wiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nbW91dmVtZW50RGF0ZVtdJyB2YWx1ZT0nXCIrbW91dmVtZW50RGF0ZStcIic+PC90aD5cIjtcclxuICAgIGh0bWwgKz0gXCI8dGg+XCIrbW91dmVtZW50TmJyZStcIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J21vdXZlbWVudE5icmVbXScgdmFsdWU9J1wiK21vdXZlbWVudE5icmUrXCInPjwvdGg+XCI7XHJcbiAgICBodG1sICs9IFwiPHRoPjwvdGg+PC90cj5cIjtcclxuICAgICQoJy5hZGQtbW91dmVtZW50JykuYmVmb3JlKGh0bWwpO1xyXG59KVxyXG5cclxuXHJcbiQoJy5jb250YWN0V2lkZ2V0cycpLm9uKCdjbGljaycsICcuY29weS11cmwnLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICB2YXIgYW5pbUVsZW1lbnQgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5saW5rLWNvcGllZCcpO1xyXG4gICAgdmFyICR0ZW1wRWxlbWVudCA9ICQoXCI8aW5wdXQ+XCIpO1xyXG4gICAgJChcImJvZHlcIikuYXBwZW5kKCR0ZW1wRWxlbWVudCk7XHJcbiAgICAkdGVtcEVsZW1lbnQudmFsKCQodGhpcykudGV4dCgpKS5zZWxlY3QoKTtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiQ29weVwiKTtcclxuICAgICR0ZW1wRWxlbWVudC5yZW1vdmUoKTtcclxuICAgIGFuaW1FbGVtZW50LmFuaW1hdGUoe29wYWNpdHk6IDF9LCAyMDAsIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBhbmltRWxlbWVudC5hbmltYXRlKHtvcGFjaXR5OiAwfSwgMTAwMCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG5cclxuLy8gLS0tLSBEQVNIQk9BUkQgQlVUVE9OU1xyXG5cclxuJCgnLmNhbXBEZXRhaWwgLmZhLWFuZ2xlLWRvd24nKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICB2YXIgY3BEaXYgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5jb3Vwb25zJyk7XHJcbiAgICBpZihjcERpdi5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpe1xyXG4gICAgICAgIGNwRGl2LnNsaWRlRG93big1MDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjcERpdi5zbGlkZVVwKDUwMCk7XHJcbiAgICB9XHJcbn0pXHJcblxyXG4kKCcub3Blbi1hbGwnKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgJCgnLmNvdXBvbnMnKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgJCh0aGlzKS5zbGlkZURvd24oNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4kKCcuY2xvc2UtYWxsJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jb3Vwb25zJykuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICQodGhpcykuc2xpZGVVcCg1MDApO1xyXG4gICAgfSlcclxufSlcclxuXHJcbi8vIC0tLS0gQUxFUlRFIHN1ciBDYW1wYWduZVxyXG5cclxuJCgnLmNvdXBvbkRldGFpbCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgIGlmKCQodGhpcykuYXR0cignZGF0YS1wcmludGFibGUnKSA9PSAwKXtcclxuICAgICAgICBjb25zb2xlLmxvZygpO1xyXG4gICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkuZmluZCgnLmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJykuc2hvdygpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuXHJcbiQoJ2JvZHknKS5vbignY2xpY2snLCAnLmV4cGFuZCcsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB2YXIgY29udGVudERpdiA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCkuZmluZCgnLmNvbnRlbnQnKVxyXG5cclxuICAgIGlmKGNvbnRlbnREaXYuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnKXtcclxuICAgICAgICBjb250ZW50RGl2LnNsaWRlRG93bigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb250ZW50RGl2LnNsaWRlVXAoKTtcclxuICAgIH1cclxufSlcclxuXHJcbiQoJy5vcGVuLWFsbC1zdGF0cycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKCcuY291cG9uU3RhdHMgLmNvbnRlbnQnKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgJCh0aGlzKS5zbGlkZURvd24oNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4kKCcuY2xvc2UtYWxsLXN0YXRzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jb3Vwb25TdGF0cyAuY29udGVudCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgICAgICAkKHRoaXMpLnNsaWRlVXAoNTAwKTtcclxuICAgIH0pXHJcbn0pXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVzb3VyY2VzL2pzL2FwcC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n"); - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - -eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n if ( nodeName( elem, \"iframe\" ) ) {\n return elem.contentDocument;\n }\n\n // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n if ( nodeName( elem, \"template\" ) ) {\n elem = elem.content || elem;\n }\n\n return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, \"\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \" - + + - - + + - + +
- -
@yield('content')
+ diff --git a/resources/views/layouts/main.blade.php b/resources/views/layouts/main.blade.php index 559e346..3d77f94 100644 --- a/resources/views/layouts/main.blade.php +++ b/resources/views/layouts/main.blade.php @@ -1,5 +1,6 @@ + @@ -9,11 +10,11 @@ {{ config('app.name', 'Laravel') }} - - - + + +
@auth @@ -32,8 +33,9 @@
- - - + + + @yield('scripts') + diff --git a/resources/views/maintenance/index.blade.php b/resources/views/maintenance/index.blade.php index cd9452f..c9c76b8 100644 --- a/resources/views/maintenance/index.blade.php +++ b/resources/views/maintenance/index.blade.php @@ -2,94 +2,103 @@ @section('content') -

Maintenance

+

Maintenance

-
-
-
Gestion des utilisateurs
- Ajouter -
- - @if(isset($users) && count($users)>0) - - - - - - - - - @foreach ($users as $user) - - - - - - @if (Auth::user()->id == $user->id) - - @else - - @endif - - - @endforeach - +
+
+
Gestion des utilisateurs
+ Ajouter +
+ + @if (isset($users) && count($users) > 0) +
NomEmailRôleSite liés
{{ $user->name }}{{ $user->email }}{{ $user->roles }}{!! $user->linkedSites !!}
+ + + + + + + + @foreach ($users as $user) + + + + + + @if (Auth::user()->id == $user->id) + + @else + + @endif + + + @endforeach + -
NomEmailRôleSite liés
{{ $user->name }}{{ $user->email }}{{ $user->roles }}{!! $user->linkedSites !!}
- +
- {!! Form::open(['id' => 'delete-hidden']) !!} + + {!! Form::open(['id' => 'delete-hidden']) !!} @method('DELETE') - {!! Form::close() !!} - @endif -
-
-
Nettoyage de la base
-
-

Nettoyer les murs (datant de plus d'un an)

-
-
-
-
- Nettoyer -
+ {!! Form::close() !!} + @endif
-
-

Nettoyer les paniers (qui ont été imprimés et datant de plus de deux mois)

-
-
-
+
+
Nettoyage de la base
+
+

Nettoyer les murs (datant de plus d'un an)

+
+
+
+
+
+
+
+ Nettoyer
- Nettoyer
-
-
-

Nettoyer les contacts (qui n'ont pas de paniers ni de murs liés et datant de plus d'un mois)

-
-
-
+
+

Nettoyer les paniers (qui ont été imprimés et datant de plus de deux mois)

+
+
+
+
+
+
+
+ Nettoyer
- Nettoyer
+
+

Nettoyer les contacts (qui n'ont pas de paniers ni de murs liés et datant de plus d'un mois)

+
+
+
+
+
+
+
+ Nettoyer +
+
+ +
+
+
Erreur d'appels :
+
- -
-
-
Erreur d'appels :
- -
@endsection @section('scripts') - + -@endsection \ No newline at end of file +@endsection diff --git a/resources/views/stats/detail.blade.php b/resources/views/stats/detail.blade.php index 7059113..e84f784 100644 --- a/resources/views/stats/detail.blade.php +++ b/resources/views/stats/detail.blade.php @@ -2,16 +2,17 @@ @section('content')
-

Statistiques de la campagne

+

Statistiques de la campagne

Période :

- - - - Charger + + + + Charger
- +
@@ -32,17 +33,17 @@ @@ -50,11 +51,11 @@ Publiée ?
Impression limité - @if ( $campagne->camp_limitedPrinting === 1) + @if ($campagne->camp_limitedPrinting === 1) Oui @else Non - @endif + @endif
Date de création - {{ date('d/m/Y', strtotime($campagne->camp_createdate)) }} + {{ date('d/m/Y', strtotime($campagne->camp_createdate)) }}
- @if ( $campagne->camp_published === 1) + @if ($campagne->camp_published === 1) @else - @endif + @endif
@@ -68,50 +69,55 @@ @foreach ($campagne->coupons as $coupon)
-

{{ $coupon->coupon_name }}

+

{{ $coupon->coupon_name }}

- +

Code de traitement : {{ $coupon->coupon_code }}

-

Valeur : {{ str_replace('.', ',', number_format($coupon->coupon_value, 2))}} €

-

Quantité Totale : {{$coupon->quantity}}

-

Quantité Restante : {{$coupon->remain}}

-

Quantité Diffusé : {{$coupon->diffused}}

-

Quantité Imprimé : {{$coupon->quantity - $coupon->remain}}

- @if($coupon->coupon_mindatediffusion != null) -

Date de début de diffusion : {{ date('d/m/Y', strtotime($coupon->coupon_mindatediffusion)) }}

+

Valeur : {{ str_replace('.', ',', number_format($coupon->coupon_value, 2)) }} €

+

Quantité Totale : {{ $coupon->quantity }}

+

Quantité Restante : {{ $coupon->remain }}

+

Quantité Diffusé : {{ $coupon->diffused }}

+

Quantité Imprimé : {{ $coupon->quantity - $coupon->remain }}

+ @if ($coupon->coupon_mindatediffusion != null) +

Date de début de diffusion : + {{ date('d/m/Y', strtotime($coupon->coupon_mindatediffusion)) }}

@else

Date de début de diffusion : n/c

@endif - @if($coupon->coupon_maxdatediffusion != null) -

Date de fin de diffusion : {{ date('d/m/Y', strtotime($coupon->coupon_maxdatediffusion)) }}

+ @if ($coupon->coupon_maxdatediffusion != null) +

Date de fin de diffusion : + {{ date('d/m/Y', strtotime($coupon->coupon_maxdatediffusion)) }}

@else

Date de fin de diffusion : n/c

@endif - @if ( $coupon->coupon_published == 1) + @if ($coupon->coupon_published == 1)

Publié ?

@else -

Publié ?

+

Publié ?

@endif - @if ( $coupon->isPrintable == 1) + @if ($coupon->isPrintable == 1)

Imprimable ?

@else - @if ( $coupon->isPaused == 1) + @if ($coupon->isPaused == 1)

Imprimable ?

@else

Imprimable ?

@endif @endif - +
- +
@endforeach
@@ -123,198 +129,195 @@ @endsection @section('scripts') - - + -@endsection \ No newline at end of file + window.onload = function() { + load_graphs($('#reloader').attr('data-campid'), $('#startdate').val(), $('#enddate').val()); + + // ---- SHOW ALL + $('.fa-eye').on('click', function() { + $('.couponLegend').each(function() { + $(this).find('.line').remove(); + }) + myLine.data.datasets.forEach(function(ds) { + ds.hidden = false; + }); + myLine.update(); + }) + // ---- HIDE ALL + $('.fa-eye-slash').on('click', function() { + $('.couponLegend').each(function() { + $(this).append('
'); + }) + myLine.data.datasets.forEach(function(ds) { + ds.hidden = true; + }); + myLine.update(); + }) + + $('.couponStats').on('click', '.couponLegend', function(e) { + if ($(this).find('.line').length) { + $(this).find('.line').remove(); + } else { + $(this).append('
'); + } + var label = $(this).attr('data-label'); + myLine.data.datasets.forEach(function(ds) { + if (ds.label == label) { + ds.hidden = !ds.hidden; + } + }); + myLine.update(); + }) + } + + + $('.reload-stats').on('click', function(event) { + var campid = $(this).attr('data-campid'); + var startdate = $('#startdate').val(); + var enddate = $('#enddate').val(); + event.preventDefault(); + + //console.log(enddate); + if (startdate != "" && enddate != "") { + teststartdate = new Date(startdate); + testenddate = new Date(enddate); + if (teststartdate < testenddate) { + myLine.destroy(); + myLineGlobal.destroy(); + load_graphs(campid, startdate, enddate); + } else { + $.fancyConfirm({ + title: " Erreur", + message: "La date de fin doit être supérieure à la date de début.", + okButton: 'Valider', + noButton: "", + callback: function(value) {} + }); + } + + } else { + $.fancyConfirm({ + title: " Erreur", + message: "Veuillez remplir les deux dates pour voir les données associées.", + okButton: 'Valider', + noButton: "", + callback: function(value) {} + }); + } + }) + +@endsection diff --git a/resources/views/template/mur/imprimer.blade.php b/resources/views/template/mur/imprimer.blade.php index ae2aec7..993922a 100644 --- a/resources/views/template/mur/imprimer.blade.php +++ b/resources/views/template/mur/imprimer.blade.php @@ -4,56 +4,56 @@ Vos bons de réduction - - + + - +
- +

Impression de vos bons de réduction

- +

- +

1 - Vérifiez que votre imprimante est allumée et reliée à l'ordinateur
2 - Vérifiez qu'elle contient du papier blanc et de l'encre
3 - Cliquez ci-dessous pour lancer l'impression

- +
- -
Chargement...
+ +
Chargement...
- +
- - + + - \ No newline at end of file + diff --git a/resources/views/template/mur/index.blade.php b/resources/views/template/mur/index.blade.php index 2fc7e38..ccc6ba2 100644 --- a/resources/views/template/mur/index.blade.php +++ b/resources/views/template/mur/index.blade.php @@ -4,17 +4,17 @@ Découvrez nos bons de réduction - + @@ -55,7 +55,7 @@
@csrf - +

Vous avez {{ $nb }} coupon disponible

@@ -65,8 +65,8 @@
- - + +
@foreach ($coupons as $coupon) @@ -83,8 +83,8 @@ @endforeach
-
+
- \ No newline at end of file + diff --git a/resources/views/template/mur/merci.blade.php b/resources/views/template/mur/merci.blade.php index 449a698..5730dc3 100644 --- a/resources/views/template/mur/merci.blade.php +++ b/resources/views/template/mur/merci.blade.php @@ -4,9 +4,9 @@ Vos bons de réduction - + - +
@@ -16,4 +16,4 @@
- \ No newline at end of file + diff --git a/resources/views/template/murnoselection/index.blade.php b/resources/views/template/murnoselection/index.blade.php index 20dcbbc..dc1ebb3 100644 --- a/resources/views/template/murnoselection/index.blade.php +++ b/resources/views/template/murnoselection/index.blade.php @@ -3,16 +3,16 @@ Votre bon de réduction Réghalal - - - - - + + + + +

Votre bon de réduction

- +

{{$contact->contact_prenom}},

LDC a le plaisir de vous offrir un bon de réduction

@@ -20,17 +20,17 @@ 1 - Vérifiez que votre imprimante est allumée et reliée à l'ordinateur.
2 - Vérifiez qu'elle contient du papier blanc et de l'encre.
3 - Cliquez ci-dessous pour lancer l'impression.

- - + + Imprimer mon bon -
Chargement...
-
+
Chargement...
+

{{$contact->contact_prenom}},

Vous n'avez plus de bon à imprimer.

-
+
-
+
@@ -40,22 +40,22 @@ function impressionexe() { var total = document.getElementsByTagName("img").length; var compteur = 0, i; compteur = 0; - + for(i=0; i - \ No newline at end of file + diff --git a/resources/views/template/murnoselection/merci.blade.php b/resources/views/template/murnoselection/merci.blade.php index f12b9cc..36f0663 100644 --- a/resources/views/template/murnoselection/merci.blade.php +++ b/resources/views/template/murnoselection/merci.blade.php @@ -3,10 +3,10 @@ Votre bon de réduction Reghalal - - - - + + + +

Votre bon de réduction

@@ -15,4 +15,4 @@ Retour aux offres
- \ No newline at end of file + diff --git a/resources/views/template/panier/index.blade.php b/resources/views/template/panier/index.blade.php index 59453d7..dce1515 100644 --- a/resources/views/template/panier/index.blade.php +++ b/resources/views/template/panier/index.blade.php @@ -4,10 +4,10 @@ Votre bon de réduction - - - - + + + + - +
@@ -16,4 +16,4 @@
- \ No newline at end of file + diff --git a/resources/views/template/panierselection/imprimer.blade.php b/resources/views/template/panierselection/imprimer.blade.php index a5c9b0b..afc0af2 100644 --- a/resources/views/template/panierselection/imprimer.blade.php +++ b/resources/views/template/panierselection/imprimer.blade.php @@ -4,55 +4,55 @@ Vos bons de réduction - - + + - +
- +

Impression de vos bons de réduction

- - + +

1 - Vérifiez que votre imprimante est allumée et reliée à l'ordinateur
2 - Vérifiez qu'elle contient du papier blanc et de l'encre
3 - Cliquez ci-dessous pour lancer l'impression

- +
- -
Chargement...
+ +
Chargement...
- +
- - + + - \ No newline at end of file + diff --git a/resources/views/template/panierselection/index.blade.php b/resources/views/template/panierselection/index.blade.php index 80fe90b..b64d34b 100644 --- a/resources/views/template/panierselection/index.blade.php +++ b/resources/views/template/panierselection/index.blade.php @@ -4,17 +4,17 @@ Découvrez nos bons de réduction - + @@ -55,7 +55,7 @@
@csrf - +

Vous avez {{ $nb }} coupon disponible

@@ -65,8 +65,8 @@
- - + +
@foreach ($coupons as $coupon) @@ -77,8 +77,8 @@ @endforeach
-
+
- \ No newline at end of file + diff --git a/resources/views/template/panierselection/merci.blade.php b/resources/views/template/panierselection/merci.blade.php index 449a698..5730dc3 100644 --- a/resources/views/template/panierselection/merci.blade.php +++ b/resources/views/template/panierselection/merci.blade.php @@ -4,9 +4,9 @@ Vos bons de réduction - + - +
@@ -16,4 +16,4 @@
- \ No newline at end of file + diff --git a/webpack.mix.js b/webpack.mix.js index bbc73d6..239a412 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -1,4 +1,52 @@ -const mix = require('laravel-mix'); +const path = require("path"); +const mix = require("laravel-mix"); + +mix.setPublicPath("public/build"); +mix.setResourceRoot("/build"); + +require("laravel-mix-polyfill"); +require("laravel-mix-clean"); +require("laravel-mix-eslint"); +require("laravel-mix-stylelint"); + +const assetDir = "assets"; +const polyfill = { + enabled: true, + bugfixes: true, + useBuiltIns: "usage", + targets: "last 3 version, not dead, >0.3%", +}; + +mix.webpackConfig({ + resolve: { + extensions: ["*", ".js"], + alias: { + "@": path.resolve("resources/assets"), + }, + }, +}); + +mix.options({ + fileLoaderDirs: { + fonts: `${assetDir}/fonts`, + images: `${assetDir}/images`, + }, + postCss: [ + require("postcss-discard-comments")({ + removeAll: true, + }), + ], +}); + +mix.clean({ + cleanOnceBeforeBuildPatterns: [ + "css/*", + "js/*", + "images/*", + "fonts/*", + "assets/*", + ], +}); /* |-------------------------------------------------------------------------- @@ -11,12 +59,13 @@ const mix = require('laravel-mix'); | */ -mix.js('resources/js/app.js', 'public/js') - .js('resources/js/ajax.js', 'public/js') - .js('resources/js/Chart.js', 'public/js') - .sass('resources/sass/app.scss', 'public/css') - .options({ - processCssUrls: false - }) - .browserSync('mesbr.test') - .sourceMaps(); +mix.js("resources/js/app.js", "js") + .js("resources/js/ajax.js", "js") + .js("resources/js/Chart.js", "js") + .js("resources/js/jquery.fancybox.min.js", "js") + .css("resources/css/jquery.fancybox.min.css", "css") + .sass("resources/sass/app.scss", "css") + .copyDirectory("resources/assets", "public/build/assets") + .polyfill(polyfill) + .sourceMaps(false, "inline-source-map") + .version(); diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 2c58298..0000000 --- a/yarn.lock +++ /dev/null @@ -1,6423 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -accepts@~1.3.4, accepts@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -acorn-dynamic-import@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" - dependencies: - acorn "^4.0.3" - -acorn@^4.0.3: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - -acorn@^5.0.0: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - -adjust-sourcemap-loader@^1.1.0: - version "1.2.0" - resolved "http://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz#e33fde95e50db9f2a802e3647e311d2fc5000c69" - dependencies: - assert "^1.3.0" - camelcase "^1.2.1" - loader-utils "^1.1.0" - lodash.assign "^4.0.1" - lodash.defaults "^3.1.2" - object-path "^0.9.2" - regex-parser "^2.2.9" - -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - -ajv-keywords@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" - -ajv@^5.0.0, ajv@^5.1.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.1.0: - version "6.5.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.4.tgz#247d5274110db653706b550fcc2b797ca28cfc59" - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -array-flatten@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert@^1.1.1, assert@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -ast-types@0.9.6: - version "0.9.6" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" - -async-each-series@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/async-each-series/-/async-each-series-0.1.1.tgz#7617c1917401fd8ca4a28aadce3dbae98afeb432" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - -async@1.5.2, async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.2, async@^2.4.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - dependencies: - lodash "^4.17.10" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -autoprefixer@^7.2.6: - version "7.2.6" - resolved "http://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz#256672f86f7c735da849c4f07d008abb056067dc" - dependencies: - browserslist "^2.11.3" - caniuse-lite "^1.0.30000805" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^6.0.17" - postcss-value-parser "^3.2.3" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.6.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - -axios@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.1.tgz#2d8e3e5d0bdbd7327f91bc814f5c57660f81824d" - dependencies: - follow-redirects "^1.2.5" - is-buffer "^1.1.5" - -axios@^0.18: - version "0.18.0" - resolved "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" - dependencies: - follow-redirects "^1.3.0" - is-buffer "^1.1.5" - -babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.24.1, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-loader@^7.1.1: - version "7.1.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" - dependencies: - find-cache-dir "^1.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - -babel-plugin-transform-async-to-generator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-runtime@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-env@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^3.2.6" - invariant "^2.2.2" - semver "^5.3.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - -base64-js@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - dependencies: - tweetnacl "^0.14.3" - -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - dependencies: - callsite "1.0.0" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - -binary-extensions@^1.0.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" - -blob@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -bluebird@^3.1.1, bluebird@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a" - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - -body-parser@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" - on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -bootstrap@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.1.3.tgz#0eb371af2c8448e8c210411d0cb824a6409a12be" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.0, braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -browser-sync-ui@v1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-sync-ui/-/browser-sync-ui-1.0.1.tgz#9740527b26d1d7ace259acc0c79e5b5e37d0fdf2" - dependencies: - async-each-series "0.1.1" - connect-history-api-fallback "^1.1.0" - immutable "^3.7.6" - server-destroy "1.0.1" - socket.io-client "2.0.4" - stream-throttle "^0.1.3" - -browser-sync-webpack-plugin@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/browser-sync-webpack-plugin/-/browser-sync-webpack-plugin-2.0.1.tgz#267cbd73b16c7ba5d92a0ebab17e62b13002ab7b" - dependencies: - lodash "^4" - -browser-sync@^2.24.7: - version "2.24.7" - resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.24.7.tgz#0f93bcaabfb84a35a5c98e07682c9e45c6251a93" - dependencies: - browser-sync-ui v1.0.1 - bs-recipes "1.3.4" - chokidar "1.7.0" - connect "3.6.6" - connect-history-api-fallback "^1.5.0" - dev-ip "^1.0.1" - easy-extender "^2.3.4" - eazy-logger "3.0.2" - etag "^1.8.1" - fresh "^0.5.2" - fs-extra "3.0.1" - http-proxy "1.15.2" - immutable "3.8.2" - localtunnel "1.9.0" - micromatch "2.3.11" - opn "5.3.0" - portscanner "2.1.1" - qs "6.2.3" - raw-body "^2.3.2" - resp-modifier "6.0.2" - rx "4.1.0" - serve-index "1.9.1" - serve-static "1.13.2" - server-destroy "1.0.1" - socket.io "2.1.1" - ua-parser-js "0.7.17" - yargs "6.4.0" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - dependencies: - pako "~1.0.5" - -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - -browserslist@^2.11.3: - version "2.11.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" - dependencies: - caniuse-lite "^1.0.30000792" - electron-to-chromium "^1.3.30" - -browserslist@^3.2.6: - version "3.2.8" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" - dependencies: - caniuse-lite "^1.0.30000844" - electron-to-chromium "^1.3.47" - -bs-recipes@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/bs-recipes/-/bs-recipes-1.3.4.tgz#0d2d4d48a718c8c044769fdc4f89592dc8b69585" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -buffer@^4.3.0: - version "4.9.1" - resolved "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -cacache@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^1.0.2, camelcase@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000887" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000887.tgz#9abf538610e3349870ed525f7062de649cc3c570" - -caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000844: - version "1.0.30000887" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000887.tgz#1769458c27bbdcf61b0cb6b5072bb6cd11fd9c23" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -charenc@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - -chokidar@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" - dependencies: - anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" - glob-parent "^3.1.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - lodash.debounce "^4.0.8" - normalize-path "^2.1.1" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.5" - optionalDependencies: - fsevents "^1.2.2" - -chownr@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - dependencies: - chalk "^1.1.3" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@4.2.x, clean-css@^4.1.3: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - dependencies: - source-map "~0.6.0" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -clone-deep@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" - dependencies: - for-own "^1.0.0" - is-plain-object "^2.0.4" - kind-of "^6.0.0" - shallow-clone "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - dependencies: - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - dependencies: - color-name "1.1.3" - -color-name@1.1.3, color-name@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - dependencies: - color-name "^1.0.0" - -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - -combined-stream@1.0.6: - version "1.0.6" - resolved "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -combined-stream@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" - dependencies: - delayed-stream "~1.0.0" - -commander@2.17.x, commander@~2.17.1: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - -commander@^2.2.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" - -commander@~2.14.1: - version "2.14.1" - resolved "http://registry.npmjs.org/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - -component-emitter@1.2.1, component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - -compressible@~2.0.14: - version "2.0.15" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212" - dependencies: - mime-db ">= 1.36.0 < 2" - -compression@^1.5.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.14" - debug "2.6.9" - on-headers "~1.0.1" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concatenate@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/concatenate/-/concatenate-0.0.2.tgz#0b49d6e8c41047d7728cdc8d62a086623397b49f" - dependencies: - globs "^0.1.2" - -connect-history-api-fallback@^1.1.0, connect-history-api-fallback@^1.3.0, connect-history-api-fallback@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" - -connect@3.6.6: - version "3.6.6" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" - dependencies: - debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" - utils-merge "1.0.1" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -consolidate@^0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.14.5.tgz#5a25047bc76f73072667c8cb52c989888f494c63" - dependencies: - bluebird "^3.1.1" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - -convert-source-map@^0.3.3: - version "0.3.5" - resolved "http://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" - -convert-source-map@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -core-js@^2.4.0, core-js@^2.5.0: - version "2.5.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.1.0" - os-homedir "^1.0.1" - parse-json "^2.2.0" - require-from-string "^1.1.0" - -cosmiconfig@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - require-from-string "^2.0.1" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-env@^5.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" - dependencies: - cross-spawn "^6.0.5" - is-windows "^1.0.0" - -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -crypt@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - -css-loader@^0.28.9: - version "0.28.11" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" - dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - cssnano "^3.10.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - object-assign "^4.1.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-selector-tokenizer@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css@^2.0.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - dependencies: - inherits "^2.0.3" - source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - -cssnano@^3.10.0: - version "3.10.0" - resolved "http://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - -debug@2.6.8: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" - dependencies: - ms "2.0.0" - -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9, debug@~2.6.4: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@=3.1.0, debug@^3.1.0, debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - -deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -depd@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - -depd@~1.1.1, depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -detect-node@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - -dev-ip@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dev-ip/-/dev-ip-1.0.1.tgz#a76a3ed1855be7a012bb8ac16cb80f3c00dc28f0" - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - dependencies: - buffer-indexof "^1.0.0" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - -dotenv-expand@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" - -dotenv@^4.0.0: - version "4.0.0" - resolved "http://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -easy-extender@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/easy-extender/-/easy-extender-2.3.4.tgz#298789b64f9aaba62169c77a2b3b64b4c9589b8f" - dependencies: - lodash "^4.17.10" - -eazy-logger@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/eazy-logger/-/eazy-logger-3.0.2.tgz#a325aa5e53d13a2225889b2ac4113b2b9636f4fc" - dependencies: - tfunk "^3.0.1" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.47: - version "1.3.70" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.70.tgz#ded377256d92d81b4257d36c65aa890274afcfd2" - -elliptic@^6.0.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - -encodeurl@~1.0.1, encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - dependencies: - once "^1.4.0" - -engine.io-client@~3.1.0: - version "3.1.6" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.6.tgz#5bdeb130f8b94a50ac5cbeb72583e7a4a063ddfd" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-client@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.2.tgz#4c0f4cff79aaeecbbdcfdea66a823c6085409196" - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.4" - has-binary2 "~1.0.2" - -engine.io@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.0.tgz#54332506f42f2edc71690d2f2a42349359f3bf7d" - dependencies: - accepts "~1.3.4" - base64id "1.0.0" - cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~3.3.1" - -enhanced-resolve@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - object-assign "^4.0.1" - tapable "^0.2.7" - -errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.2.tgz#4ae8dbaa2bf90a8b450707b9149dcabca135520d" - dependencies: - stackframe "^1.0.4" - -es-abstract@^1.7.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.46" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572" - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "1" - -es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-templates@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4" - dependencies: - recast "~0.11.12" - through "~2.3.6" - -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - -esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - dependencies: - estraverse "^4.1.0" - -estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@^1.8.1, etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" - -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - -eventsource@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" - dependencies: - original ">=0.0.5" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -express@^4.16.2: - version "4.16.3" - resolved "http://registry.npmjs.org/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" - dependencies: - accepts "~1.3.5" - array-flatten "1.1.1" - body-parser "1.18.2" - content-disposition "0.5.2" - content-type "~1.0.4" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.1.1" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" - path-to-regexp "0.1.7" - proxy-addr "~2.0.3" - qs "6.5.1" - range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-text-webpack-plugin@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" - dependencies: - async "^2.4.1" - loader-utils "^1.1.0" - schema-utils "^0.3.0" - webpack-sources "^1.0.1" - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - dependencies: - websocket-driver ">=0.5.1" - -file-loader@^0.11.2: - version "0.11.2" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.2.tgz#4ff1df28af38719a6098093b88c82c71d1794a34" - dependencies: - loader-utils "^1.0.2" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - dependencies: - debug "2.6.9" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" - unpipe "~1.0.0" - -finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.4.0" - unpipe "~1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - -flush-write-stream@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" - -follow-redirects@^1.0.0, follow-redirects@^1.2.5, follow-redirects@^1.3.0: - version "1.5.8" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.8.tgz#1dbfe13e45ad969f813e86c00e5296f525c885a1" - dependencies: - debug "=3.1.0" - -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" - dependencies: - asynckit "^0.4.0" - combined-stream "1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2, fresh@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - -friendly-errors-webpack-plugin@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz#efc86cbb816224565861a1be7a9d84d0aafea136" - dependencies: - chalk "^1.1.3" - error-stack-parser "^2.0.0" - string-width "^2.0.0" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@3.0.1, fs-extra@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - dependencies: - minipass "^2.2.1" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.0.0, fsevents@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" - -fstream@^1.0.0, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gaze@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - dependencies: - globule "^1.0.0" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globs@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globs/-/globs-0.1.4.tgz#1d13639f6174e4ae73a7f936da7d9a079f657c1c" - dependencies: - glob "^7.1.1" - -globule@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" - dependencies: - glob "~7.1.1" - lodash "~4.17.10" - minimatch "~3.0.2" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -handle-thing@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.1.x: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - -he@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" - -html-entities@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - -html-loader@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.4.5.tgz#5fbcd87cd63a5c49a7fce2fe56f425e05729c68c" - dependencies: - es6-templates "^0.2.2" - fastparse "^1.1.1" - html-minifier "^3.0.1" - loader-utils "^1.0.2" - object-assign "^4.1.0" - -html-minifier@^3.0.1: - version "3.5.20" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.20.tgz#7b19fd3caa0cb79f7cde5ee5c3abdf8ecaa6bb14" - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.1.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - -http-errors@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" - dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" - -http-errors@1.6.3, http-errors@~1.6.2: - version "1.6.3" - resolved "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.4.0: - version "0.4.13" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" - -http-proxy-middleware@~0.17.4: - version "0.17.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" - dependencies: - http-proxy "^1.16.2" - is-glob "^3.1.0" - lodash "^4.17.2" - micromatch "^2.3.11" - -http-proxy@1.15.2: - version "1.15.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.15.2.tgz#642fdcaffe52d3448d2bda3b0079e9409064da31" - dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" - -http-proxy@^1.16.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - dependencies: - eventemitter3 "^3.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - -iconv-lite@0.4.19, iconv-lite@^0.4.4: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - dependencies: - postcss "^6.0.1" - -ieee754@^1.1.4: - version "1.1.12" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" - -img-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/img-loader/-/img-loader-3.0.0.tgz#1543ced809b1ec9b4d5e77d2584159282f1c4dd6" - dependencies: - loader-utils "^1.1.0" - -immutable@3.8.2, immutable@^3.7.6: - version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - dependencies: - import-from "^2.1.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - dependencies: - resolve-from "^3.0.0" - -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -internal-ip@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" - dependencies: - meow "^3.3.0" - -interpret@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" - -invariant@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - -ipaddr.js@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5, is-buffer@~1.1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-number-like@^1.0.3: - version "1.0.8" - resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" - dependencies: - lodash.isfinite "^3.3.2" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - dependencies: - has-symbols "^1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-windows@^1.0.0, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -jquery@^3.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" - -js-base64@^2.1.8, js-base64@^2.1.9: - version "2.4.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-yaml@^3.4.3, js-yaml@^3.9.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-loader@^0.5.4: - version "0.5.7" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -killable@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - -laravel-mix@^2.0: - version "2.1.14" - resolved "https://registry.yarnpkg.com/laravel-mix/-/laravel-mix-2.1.14.tgz#5c3c778b888e21120aa9d8900c318411da2ec911" - dependencies: - autoprefixer "^7.2.6" - babel-core "^6.24.1" - babel-loader "^7.1.1" - babel-plugin-transform-object-rest-spread "^6.26.0" - babel-plugin-transform-runtime "^6.23.0" - babel-preset-env "^1.5.1" - chokidar "^2.0.3" - clean-css "^4.1.3" - concatenate "0.0.2" - css-loader "^0.28.9" - dotenv "^4.0.0" - dotenv-expand "^4.2.0" - extract-text-webpack-plugin "^3.0.2" - file-loader "^0.11.2" - friendly-errors-webpack-plugin "^1.6.1" - fs-extra "^3.0.1" - glob "^7.1.2" - html-loader "^0.4.5" - img-loader "^3.0.0" - lodash "^4.17.5" - md5 "^2.2.1" - node-sass "^4.9.0" - postcss-loader "^2.1.0" - resolve-url-loader "^2.2.1" - sass-loader "^6.0.5" - style-loader "^0.18.2" - uglify-js "^2.8.29" - uglifyjs-webpack-plugin "^1.1.8" - vue-loader "^13.7.1" - vue-template-compiler "^2.5.13" - webpack "^3.11.0" - webpack-chunk-hash "^0.4.0" - webpack-dev-server "^2.11.1" - webpack-merge "^4.1.0" - webpack-notifier "^1.5.1" - yargs "^8.0.2" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -limiter@^1.0.5: - version "1.1.3" - resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.3.tgz#32e2eb55b2324076943e5d04c1185ffb387968ef" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -loader-runner@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.1.tgz#026f12fe7c3115992896ac02ba022ba92971b979" - -loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -localtunnel@1.9.0: - version "1.9.0" - resolved "http://registry.npmjs.org/localtunnel/-/localtunnel-1.9.0.tgz#8ffecdcf8c8a14f62df1056cf9d54acbb0bb9a8f" - dependencies: - axios "0.17.1" - debug "2.6.8" - openurl "1.1.1" - yargs "6.6.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._bindcallback@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._createassigner@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" - dependencies: - lodash._bindcallback "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash.restparam "^3.0.0" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash.assign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" - dependencies: - lodash._baseassign "^3.0.0" - lodash._createassigner "^3.0.0" - lodash.keys "^3.0.0" - -lodash.assign@^4.0.1, lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - -lodash.clonedeep@^4.3.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - -lodash.defaults@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" - dependencies: - lodash.assign "^3.0.0" - lodash.restparam "^3.0.0" - -lodash.defaults@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isfinite@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - -lodash.mergewith@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" - -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - -lodash.tail@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -lodash@^4, lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.10: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - -loglevel@^1.4.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - -lru-cache@^4.0.1, lru-cache@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - dependencies: - pify "^3.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - dependencies: - object-visit "^1.0.0" - -math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - -math-random@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" - -md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -md5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" - dependencies: - charenc "~0.0.1" - crypt "~0.0.1" - is-buffer "~1.1.1" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" - -memory-fs@^0.4.0, memory-fs@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^3.3.0, meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micromatch@2.3.11, micromatch@^2.1.5, micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -"mime-db@>= 1.36.0 < 2", mime-db@~1.36.0: - version "1.36.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18: - version "2.1.20" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" - dependencies: - mime-db "~1.36.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - -mime@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minipass@^2.2.1, minipass@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" - dependencies: - minipass "^2.2.1" - -mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: - version "0.5.1" - resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -nan@^2.10.0, nan@^2.9.2: - version "2.11.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -needle@^2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -neo-async@^2.5.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.2.tgz#489105ce7bc54e709d736b195f82135048c50fcc" - -next-tick@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - dependencies: - lower-case "^1.1.1" - -node-forge@0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" - -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - -node-libs-browser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^1.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.0" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" - -node-notifier@^5.1.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" - dependencies: - growly "^1.3.0" - semver "^5.4.1" - shellwords "^0.1.1" - which "^1.3.0" - -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-sass@^4.9.0: - version "4.9.3" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.3.tgz#f407cf3d66f78308bb1e346b24fa428703196224" - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash.assign "^4.2.0" - lodash.clonedeep "^4.3.2" - lodash.mergewith "^4.6.0" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.10.0" - node-gyp "^3.8.0" - npmlog "^4.0.0" - request "2.87.0" - sass-graph "^2.2.4" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - -normalize-url@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -npm-bundled@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" - -npm-packlist@^1.1.6: - version "1.1.11" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - -object-path@^0.9.0, object-path@^0.9.2: - version "0.9.2" - resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -obuf@^1.0.0, obuf@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -openurl@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/openurl/-/openurl-1.1.1.tgz#3875b4b0ef7a52c156f0db41d4609dbb0f94b387" - -opn@5.3.0: - version "5.3.0" - resolved "http://registry.npmjs.org/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" - dependencies: - is-wsl "^1.1.0" - -opn@^5.1.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035" - dependencies: - is-wsl "^1.1.0" - -original@>=0.0.5: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - -os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^1.4.0: - version "1.4.0" - resolved "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@0, osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - -pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" - -parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - dependencies: - no-case "^2.2.0" - -parse-asn1@^5.0.0: - version "5.1.1" - resolved "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - dependencies: - better-assert "~1.0.0" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -path-parse@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - -pbkdf2@^3.0.3: - version "3.0.16" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - -popper.js@^1.12: - version "1.14.4" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.4.tgz#8eec1d8ff02a5a3a152dd43414a15c7b79fd69b6" - -portfinder@^1.0.9: - version "1.0.17" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.17.tgz#a8a1691143e46c4735edefcf4fbcccedad26456a" - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -portscanner@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.1.1.tgz#eabb409e4de24950f5a2a516d35ae769343fbb96" - dependencies: - async "1.5.2" - is-number-like "^1.0.3" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "http://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - dependencies: - postcss "^5.0.14" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - dependencies: - postcss "^5.0.4" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "http://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - dependencies: - postcss "^5.0.14" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "http://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - dependencies: - postcss "^5.0.16" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "http://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" - dependencies: - postcss "^5.0.4" - -postcss-load-config@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - postcss-load-options "^1.2.0" - postcss-load-plugins "^2.3.0" - -postcss-load-config@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" - dependencies: - cosmiconfig "^4.0.0" - import-cwd "^2.0.0" - -postcss-load-options@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - -postcss-load-plugins@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" - dependencies: - cosmiconfig "^2.1.1" - object-assign "^4.1.0" - -postcss-loader@^2.1.0: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.6.tgz#1d7dd7b17c6ba234b9bed5af13e0bea40a42d740" - dependencies: - loader-utils "^1.1.0" - postcss "^6.0.0" - postcss-load-config "^2.0.0" - schema-utils "^0.4.0" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "http://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - dependencies: - postcss "^5.0.4" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "http://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "http://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "http://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "http://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-modules-extract-imports@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "http://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - dependencies: - postcss "^5.0.5" - -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "http://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "http://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "http://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - dependencies: - postcss "^5.0.4" - -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "http://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "http://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "http://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "http://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.17, postcss@^6.0.8: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -prettier@^1.7.0: - version "1.14.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.3.tgz#90238dd4c0684b7edce5f83b0fb7328e48bd0895" - -private@^0.1.6, private@^0.1.8, private@~0.1.5: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - -proxy-addr@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.8.0" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -public-encrypt@^4.0.0: - version "4.0.2" - resolved "http://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - -pump@^2.0.0, pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - -qs@6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" - -qs@6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -qs@~6.5.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -querystringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755" - -randomatic@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.0.3, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" - dependencies: - bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" - unpipe "1.0.0" - -raw-body@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" - unpipe "1.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6: - version "2.3.6" - resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -recast@~0.11.12: - version "0.11.23" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" - dependencies: - ast-types "0.9.6" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "http://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" - dependencies: - balanced-match "^0.4.2" - -regenerate@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regex-parser@^2.2.9: - version "2.2.9" - resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.9.tgz#a372f45a248b62976a568037c1b6e60a60599192" - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -request@2.87.0, request@^2.87.0: - version "2.87.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - -require-from-string@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - -requires-port@1.x.x, requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - dependencies: - resolve-from "^3.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve-url-loader@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-2.3.1.tgz#b462fc7a78a22baf3ee462568d8ff5d766f7f1da" - dependencies: - adjust-sourcemap-loader "^1.1.0" - camelcase "^4.1.0" - convert-source-map "^1.5.1" - loader-utils "^1.1.0" - lodash.defaults "^4.0.0" - rework "^1.0.1" - rework-visit "^1.0.0" - source-map "^0.5.7" - urix "^0.1.0" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@^1.4.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - dependencies: - path-parse "^1.0.5" - -resp-modifier@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/resp-modifier/-/resp-modifier-6.0.2.tgz#b124de5c4fbafcba541f48ffa73970f4aa456b4f" - dependencies: - debug "^2.2.0" - minimatch "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -rework-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" - -rework@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" - dependencies: - convert-source-map "^0.3.3" - css "^2.0.0" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - dependencies: - aproba "^1.1.1" - -rx@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" - -safe-buffer@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^7.0.0" - -sass-loader@^6.0.5: - version "6.0.7" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.7.tgz#dd2fdb3e7eeff4a53f35ba6ac408715488353d00" - dependencies: - clone-deep "^2.0.1" - loader-utils "^1.0.1" - lodash.tail "^4.1.1" - neo-async "^2.5.0" - pify "^3.0.0" - -sax@^1.2.4, sax@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -schema-utils@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" - dependencies: - ajv "^5.0.0" - -schema-utils@^0.4.0, schema-utils@^0.4.5: - version "0.4.7" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - -selfsigned@^1.9.1: - version "1.10.3" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.3.tgz#d628ecf9e3735f84e8bafba936b3cf85bea43823" - dependencies: - node-forge "0.7.5" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" - -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" - -serialize-javascript@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" - -serve-index@1.9.1, serve-index@^1.7.2: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - -server-destroy@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/server-destroy/-/server-destroy-1.0.1.tgz#f13bf928e42b9c3e79383e61cc3998b5d14e6cdd" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" - dependencies: - is-extendable "^0.1.1" - kind-of "^5.0.0" - mixin-object "^2.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - -socket.io-client@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~2.6.4" - engine.io-client "~3.1.0" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.1.1" - to-array "0.1.4" - -socket.io-client@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~3.1.0" - engine.io-client "~3.2.0" - has-binary2 "~1.0.2" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.2.0" - to-array "0.1.4" - -socket.io-parser@~3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.3.tgz#ed2da5ee79f10955036e3da413bfd7f1e4d86c8e" - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - has-binary2 "~1.0.2" - isarray "2.0.1" - -socket.io-parser@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - isarray "2.0.1" - -socket.io@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" - dependencies: - debug "~3.1.0" - engine.io "~3.2.0" - has-binary2 "~1.0.2" - socket.io-adapter "~1.1.0" - socket.io-client "2.1.1" - socket.io-parser "~3.2.0" - -sockjs-client@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" - dependencies: - debug "^2.6.6" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" - json3 "^3.3.2" - url-parse "^1.1.8" - -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - dependencies: - faye-websocket "^0.10.0" - uuid "^3.0.1" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" - -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.1: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f" - -spdy-transport@^2.0.18: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1" - dependencies: - debug "^2.6.8" - detect-node "^2.0.3" - hpack.js "^2.1.6" - obuf "^1.1.1" - readable-stream "^2.2.9" - safe-buffer "^5.0.1" - wbuf "^1.7.2" - -spdy@^3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" - dependencies: - debug "^2.6.8" - handle-thing "^1.2.5" - http-deceiver "^1.2.7" - safe-buffer "^5.0.1" - select-hose "^2.0.0" - spdy-transport "^2.0.18" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.14.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - safer-buffer "^2.0.2" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -ssri@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - dependencies: - safe-buffer "^5.1.1" - -stackframe@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2", statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" - dependencies: - readable-stream "^2.0.1" - -stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - -stream-throttle@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/stream-throttle/-/stream-throttle-0.1.3.tgz#add57c8d7cc73a81630d31cd55d3961cfafba9c3" - dependencies: - commander "^2.2.0" - limiter "^1.0.5" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@^1.0.0, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -style-loader@^0.18.2: - version "0.18.2" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.18.2.tgz#cc31459afbcd6d80b7220ee54b291a9fd66ff5eb" - dependencies: - loader-utils "^1.0.2" - schema-utils "^0.3.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -supports-color@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - dependencies: - has-flag "^2.0.0" - -supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - dependencies: - has-flag "^3.0.0" - -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -tapable@^0.2.7: - version "0.2.8" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" - -tar@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -tar@^4: - version "4.4.6" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" - dependencies: - chownr "^1.0.1" - fs-minipass "^1.2.5" - minipass "^2.3.3" - minizlib "^1.1.0" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -tfunk@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/tfunk/-/tfunk-3.1.0.tgz#38e4414fc64977d87afdaa72facb6d29f82f7b5b" - dependencies: - chalk "^1.1.1" - object-path "^0.9.0" - -through2@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - -through@~2.3.6: - version "2.3.8" - resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -thunky@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" - -time-stamp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.1.0.tgz#6c5c0b2bc835a244616abcfddf81ce13a1975c9f" - -timers-browserify@^2.0.4: - version "2.0.10" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" - dependencies: - setimmediate "^1.0.4" - -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@~2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - dependencies: - punycode "^1.4.1" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -"true-case-path@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" - dependencies: - glob "^7.1.2" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-is@~1.6.15, type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.18" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -ua-parser-js@0.7.17: - version "0.7.17" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" - -uglify-es@^3.3.4: - version "3.3.10" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.10.tgz#8b0b7992cebe20edc26de1bf325cef797b8f3fa5" - dependencies: - commander "~2.14.1" - source-map "~0.6.1" - -uglify-js@3.4.x: - version "3.4.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" - dependencies: - commander "~2.17.1" - source-map "~0.6.1" - -uglify-js@^2.8.29: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -uglifyjs-webpack-plugin@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" - dependencies: - source-map "^0.5.6" - uglify-js "^2.8.29" - webpack-sources "^1.0.1" - -uglifyjs-webpack-plugin@^1.1.8: - version "1.3.0" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de" - dependencies: - cacache "^10.0.4" - find-cache-dir "^1.0.0" - schema-utils "^0.4.5" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - uglify-es "^3.3.4" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - -unique-filename@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" - dependencies: - imurmurhash "^0.1.4" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - -url-parse@^1.1.8, url-parse@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.3.tgz#bfaee455c889023219d757e045fa6a684ec36c15" - dependencies: - querystringify "^2.0.0" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -util@^0.10.3: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - dependencies: - inherits "2.0.3" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@^3.0.1, uuid@^3.1.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -vendors@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - dependencies: - indexof "0.0.1" - -vue-hot-reload-api@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.1.tgz#b2d3d95402a811602380783ea4f566eb875569a2" - -vue-loader@^13.7.1: - version "13.7.3" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-13.7.3.tgz#e07440f78230a639d00ada4da7b96d0e9d62037f" - dependencies: - consolidate "^0.14.0" - hash-sum "^1.0.2" - loader-utils "^1.1.0" - lru-cache "^4.1.1" - postcss "^6.0.8" - postcss-load-config "^1.1.0" - postcss-selector-parser "^2.0.0" - prettier "^1.7.0" - resolve "^1.4.0" - source-map "^0.6.1" - vue-hot-reload-api "^2.2.0" - vue-style-loader "^3.0.0" - vue-template-es2015-compiler "^1.6.0" - -vue-style-loader@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-3.1.2.tgz#6b66ad34998fc9520c2f1e4d5fa4091641c1597a" - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue-template-compiler@^2.5.13: - version "2.5.17" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz#52a4a078c327deb937482a509ae85c06f346c3cb" - dependencies: - de-indent "^1.0.2" - he "^1.1.0" - -vue-template-es2015-compiler@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18" - -vue@^2.5.7: - version "2.5.17" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.17.tgz#0f8789ad718be68ca1872629832ed533589c6ada" - -watchpack@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - dependencies: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" - -wbuf@^1.1.0, wbuf@^1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - dependencies: - minimalistic-assert "^1.0.0" - -webpack-chunk-hash@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/webpack-chunk-hash/-/webpack-chunk-hash-0.4.0.tgz#6b40c3070fbc9ff0cfe0fe781c7174af6c7c16a4" - -webpack-dev-middleware@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" - dependencies: - memory-fs "~0.4.1" - mime "^1.5.0" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - time-stamp "^2.0.0" - -webpack-dev-server@^2.11.1: - version "2.11.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.3.tgz#3fd48a402164a6569d94d3d17f131432631b4873" - dependencies: - ansi-html "0.0.7" - array-includes "^3.0.3" - bonjour "^3.5.0" - chokidar "^2.0.0" - compression "^1.5.2" - connect-history-api-fallback "^1.3.0" - debug "^3.1.0" - del "^3.0.0" - express "^4.16.2" - html-entities "^1.2.0" - http-proxy-middleware "~0.17.4" - import-local "^1.0.0" - internal-ip "1.2.0" - ip "^1.1.5" - killable "^1.0.0" - loglevel "^1.4.1" - opn "^5.1.0" - portfinder "^1.0.9" - selfsigned "^1.9.1" - serve-index "^1.7.2" - sockjs "0.3.19" - sockjs-client "1.1.5" - spdy "^3.4.1" - strip-ansi "^3.0.0" - supports-color "^5.1.0" - webpack-dev-middleware "1.12.2" - yargs "6.6.0" - -webpack-merge@^4.1.0: - version "4.1.4" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.4.tgz#0fde38eabf2d5fd85251c24a5a8c48f8a3f4eb7b" - dependencies: - lodash "^4.17.5" - -webpack-notifier@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/webpack-notifier/-/webpack-notifier-1.6.0.tgz#ffac8e55ff8c469752b8c1bbb011a16f10986e02" - dependencies: - node-notifier "^5.1.2" - object-assign "^4.1.0" - strip-ansi "^3.0.1" - -webpack-sources@^1.0.1, webpack-sources@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74" - dependencies: - acorn "^5.0.0" - acorn-dynamic-import "^2.0.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - async "^2.1.2" - enhanced-resolve "^3.4.0" - escope "^3.6.0" - interpret "^1.0.0" - json-loader "^0.5.4" - json5 "^0.5.1" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - mkdirp "~0.5.0" - node-libs-browser "^2.0.0" - source-map "^0.5.3" - supports-color "^4.2.1" - tapable "^0.2.7" - uglifyjs-webpack-plugin "^0.4.6" - watchpack "^1.4.0" - webpack-sources "^1.0.1" - yargs "^8.0.2" - -websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - dependencies: - http-parser-js ">=0.4.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - -which@1, which@^1.2.9, which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - dependencies: - string-width "^1.0.2 || 2" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -worker-farm@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - dependencies: - errno "~0.1.7" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -ws@~3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" - -yargs-parser@^4.1.0, yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - dependencies: - camelcase "^4.1.0" - -yargs@6.4.0: - version "6.4.0" - resolved "http://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz#816e1a866d5598ccf34e5596ddce22d92da490d4" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^4.1.0" - -yargs@6.6.0: - version "6.6.0" - resolved "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^4.2.0" - -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" - -yargs@~3.10.0: - version "3.10.0" - resolved "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"