diff --git a/.changeset/silly-eyes-worry.md b/.changeset/silly-eyes-worry.md new file mode 100644 index 00000000..c1f1333f --- /dev/null +++ b/.changeset/silly-eyes-worry.md @@ -0,0 +1,5 @@ +--- +"permissionless": patch +--- + +Added to7702KernelSmartAccount diff --git a/bun.lock b/bun.lock index c9ca9dbb..e83bd9b0 100644 --- a/bun.lock +++ b/bun.lock @@ -8,7 +8,7 @@ "@changesets/changelog-github": "^0.4.8", "@changesets/cli": "^2.26.2", "@permissionless/wagmi": "workspace:packages/wagmi", - "@pimlico/alto": "^0.0.18", + "@pimlico/alto": "0.0.0-main.20250527T165035", "@pimlico/mock-paymaster": "workspace:packages/mock-paymaster", "@size-limit/esbuild-why": "^9.0.0", "@size-limit/preset-small-lib": "^9.0.0", @@ -53,7 +53,7 @@ }, "packages/permissionless": { "name": "permissionless", - "version": "0.2.45", + "version": "0.2.47", "peerDependencies": { "ox": "0.6.7", "viem": "^2.28.1", @@ -335,7 +335,7 @@ "@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.52.1", "", { "dependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A=="], - "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@1.25.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ=="], + "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@1.30.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA=="], "@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], @@ -349,14 +349,52 @@ "@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.52.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.52.1", "@types/shimmer": "^1.0.2", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw=="], + "@opentelemetry/instrumentation-amqplib": ["@opentelemetry/instrumentation-amqplib@0.46.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ=="], + + "@opentelemetry/instrumentation-connect": ["@opentelemetry/instrumentation-connect@0.43.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/connect": "3.4.38" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw=="], + + "@opentelemetry/instrumentation-dataloader": ["@opentelemetry/instrumentation-dataloader@0.16.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ=="], + + "@opentelemetry/instrumentation-express": ["@opentelemetry/instrumentation-express@0.47.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw=="], + "@opentelemetry/instrumentation-fastify": ["@opentelemetry/instrumentation-fastify@0.38.0", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw=="], + "@opentelemetry/instrumentation-fs": ["@opentelemetry/instrumentation-fs@0.19.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A=="], + + "@opentelemetry/instrumentation-generic-pool": ["@opentelemetry/instrumentation-generic-pool@0.43.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww=="], + + "@opentelemetry/instrumentation-graphql": ["@opentelemetry/instrumentation-graphql@0.47.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ=="], + + "@opentelemetry/instrumentation-hapi": ["@opentelemetry/instrumentation-hapi@0.45.2", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ=="], + "@opentelemetry/instrumentation-http": ["@opentelemetry/instrumentation-http@0.52.1", "", { "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/instrumentation": "0.52.1", "@opentelemetry/semantic-conventions": "1.25.1", "semver": "^7.5.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q=="], "@opentelemetry/instrumentation-ioredis": ["@opentelemetry/instrumentation-ioredis@0.42.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/redis-common": "^0.36.2", "@opentelemetry/semantic-conventions": "^1.23.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw=="], + "@opentelemetry/instrumentation-kafkajs": ["@opentelemetry/instrumentation-kafkajs@0.7.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ=="], + + "@opentelemetry/instrumentation-knex": ["@opentelemetry/instrumentation-knex@0.44.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ=="], + + "@opentelemetry/instrumentation-koa": ["@opentelemetry/instrumentation-koa@0.47.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A=="], + + "@opentelemetry/instrumentation-lru-memoizer": ["@opentelemetry/instrumentation-lru-memoizer@0.44.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg=="], + + "@opentelemetry/instrumentation-mongodb": ["@opentelemetry/instrumentation-mongodb@0.52.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g=="], + + "@opentelemetry/instrumentation-mongoose": ["@opentelemetry/instrumentation-mongoose@0.46.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg=="], + + "@opentelemetry/instrumentation-mysql": ["@opentelemetry/instrumentation-mysql@0.45.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/mysql": "2.15.26" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg=="], + + "@opentelemetry/instrumentation-mysql2": ["@opentelemetry/instrumentation-mysql2@0.45.2", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0", "@opentelemetry/sql-common": "^0.40.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ=="], + + "@opentelemetry/instrumentation-pg": ["@opentelemetry/instrumentation-pg@0.51.1", "", { "dependencies": { "@opentelemetry/core": "^1.26.0", "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0", "@opentelemetry/sql-common": "^0.40.1", "@types/pg": "8.6.1", "@types/pg-pool": "2.0.6" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q=="], + "@opentelemetry/instrumentation-pino": ["@opentelemetry/instrumentation-pino@0.41.0", "", { "dependencies": { "@opentelemetry/api-logs": "^0.52.0", "@opentelemetry/core": "^1.25.0", "@opentelemetry/instrumentation": "^0.52.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Kpv0fJRk/8iMzMk5Ue5BsUJfHkBJ2wQoIi/qduU1a1Wjx9GLj6J2G17PHjPK5mnZjPNzkFOXFADZMfgDioliQw=="], + "@opentelemetry/instrumentation-redis-4": ["@opentelemetry/instrumentation-redis-4@0.46.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/redis-common": "^0.36.2", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ=="], + + "@opentelemetry/instrumentation-tedious": ["@opentelemetry/instrumentation-tedious@0.18.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/tedious": "^4.0.14" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg=="], + "@opentelemetry/instrumentation-undici": ["@opentelemetry/instrumentation-undici@0.4.0", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0" }, "peerDependencies": { "@opentelemetry/api": "^1.7.0" } }, "sha512-UdMQBpz11SqtWlmDnk5SoqF5QDom4VmW8SVDt9Q2xuMWVh8lc0kVROfoo2pl7zU6H6gFR8eudb3eFXIdrFn0ew=="], "@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.52.1", "", { "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/otlp-transformer": "0.52.1" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ=="], @@ -385,11 +423,13 @@ "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.30.0", "", {}, "sha512-4VlGgo32k2EQ2wcCY3vEU28A0O13aOtHz3Xt2/2U5FAh9EfhD6t6DqL5Z6yAnRCntbTFDU4YfbpyzSlHNWycPw=="], + "@opentelemetry/sql-common": ["@opentelemetry/sql-common@0.40.1", "", { "dependencies": { "@opentelemetry/core": "^1.1.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0" } }, "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg=="], + "@paulmillr/qr": ["@paulmillr/qr@0.2.1", "", {}, "sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ=="], "@permissionless/wagmi": ["@permissionless/wagmi@workspace:packages/wagmi"], - "@pimlico/alto": ["@pimlico/alto@0.0.18", "", { "dependencies": { "@fastify/websocket": "^10.0.1", "@opentelemetry/api": "^1.9.0", "@opentelemetry/core": "^1.25.1", "@opentelemetry/exporter-trace-otlp-proto": "^0.52.1", "@opentelemetry/instrumentation-fastify": "^0.38.0", "@opentelemetry/instrumentation-http": "^0.52.1", "@opentelemetry/instrumentation-ioredis": "^0.42.0", "@opentelemetry/instrumentation-pino": "^0.41.0", "@opentelemetry/instrumentation-undici": "^0.4.0", "@opentelemetry/sdk-node": "^0.52.1", "@opentelemetry/sdk-trace-base": "^1.25.1", "@opentelemetry/semantic-conventions": "^1.25.1", "@pimlico/opentelemetry-instrumentation-viem": "^0.0.4", "@sentry/node": "^7.83.0", "@types/node": "^18.16.3", "@types/ws": "^8.5.10", "abitype": "^0.8.0", "async-mutex": "^0.4.0", "bull": "^4.15.1", "dotenv": "^16.0.3", "fastify": "^4.25.2", "ioredis": "^5.4.1", "opentelemetry-instrumentation-fetch-node": "^1.2.3", "pino": "^8.15.0", "pino-http": "^8.4.0", "pino-pretty": "^10.0.0", "prom-client": "^14.2.0", "type-fest": "^4.35.0", "viem": "^2.24.3", "yargs": "^17.7.1", "zod": "^3.21.4", "zod-validation-error": "^1.3.0" }, "bin": { "alto": "esm/cli/alto.js" } }, "sha512-JIDEEYgdnkT7+wdxk0OBLSVwhm2CaLSbCw4474C9ZFmBggKBOByzaYCeIAJPb+Tag3WVBDXrXb2lYi2aRT9phQ=="], + "@pimlico/alto": ["@pimlico/alto@0.0.0-main.20250527T165035", "", { "dependencies": { "@fastify/websocket": "^10.0.1", "@opentelemetry/api": "^1.9.0", "@opentelemetry/core": "^1.25.1", "@opentelemetry/exporter-trace-otlp-proto": "^0.52.1", "@opentelemetry/instrumentation-fastify": "^0.38.0", "@opentelemetry/instrumentation-http": "^0.52.1", "@opentelemetry/instrumentation-ioredis": "^0.42.0", "@opentelemetry/instrumentation-pino": "^0.41.0", "@opentelemetry/instrumentation-undici": "^0.4.0", "@opentelemetry/sdk-node": "^0.52.1", "@opentelemetry/sdk-trace-base": "^1.25.1", "@opentelemetry/semantic-conventions": "^1.25.1", "@pimlico/opentelemetry-instrumentation-viem": "^0.0.4", "@sentry/node": "^9.15.0", "@types/node": "^18.16.3", "@types/ws": "^8.5.10", "abitype": "^0.8.0", "async-mutex": "^0.4.0", "bull": "^4.15.1", "dotenv": "^16.0.3", "fastify": "^4.25.2", "ioredis": "^5.4.1", "opentelemetry-instrumentation-fetch-node": "^1.2.3", "pino": "^8.15.0", "pino-http": "^8.4.0", "pino-pretty": "^10.0.0", "prom-client": "^14.2.0", "type-fest": "^4.35.0", "viem": "^2.24.3", "yargs": "^17.7.1", "zod": "^3.21.4", "zod-validation-error": "^1.3.0" }, "bin": { "alto": "esm/cli/alto.js" } }, "sha512-wW4IStXcdeE5ct6lYAfL2hb9D4igh2lgxgjBPf/Cjz881V4ziBocQ4yqIR4lkoPU+wpgIWvb9UGH100oy59meg=="], "@pimlico/mock-paymaster": ["@pimlico/mock-paymaster@workspace:packages/mock-paymaster"], @@ -397,6 +437,8 @@ "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + "@prisma/instrumentation": ["@prisma/instrumentation@6.7.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" }, "peerDependencies": { "@opentelemetry/api": "^1.8" } }, "sha512-3NuxWlbzYNevgPZbV0ktA2z6r0bfh0g22ONTxcK09a6+6MdIPjHsYx1Hnyu4yOq+j7LmupO5J69hhuOnuvj8oQ=="], + "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], "@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="], @@ -485,17 +527,11 @@ "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], - "@sentry-internal/tracing": ["@sentry-internal/tracing@7.120.3", "", { "dependencies": { "@sentry/core": "7.120.3", "@sentry/types": "7.120.3", "@sentry/utils": "7.120.3" } }, "sha512-Ausx+Jw1pAMbIBHStoQ6ZqDZR60PsCByvHdw/jdH9AqPrNE9xlBSf9EwcycvmrzwyKspSLaB52grlje2cRIUMg=="], - - "@sentry/core": ["@sentry/core@7.120.3", "", { "dependencies": { "@sentry/types": "7.120.3", "@sentry/utils": "7.120.3" } }, "sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA=="], - - "@sentry/integrations": ["@sentry/integrations@7.120.3", "", { "dependencies": { "@sentry/core": "7.120.3", "@sentry/types": "7.120.3", "@sentry/utils": "7.120.3", "localforage": "^1.8.1" } }, "sha512-6i/lYp0BubHPDTg91/uxHvNui427df9r17SsIEXa2eKDwQ9gW2qRx5IWgvnxs2GV/GfSbwcx4swUB3RfEWrXrQ=="], + "@sentry/core": ["@sentry/core@9.22.0", "", {}, "sha512-ixvtKmPF42Y6ckGUbFlB54OWI75H2gO5UYHojO6eXFpS7xO3ZGgV/QH6wb40mWK+0w5XZ0233FuU9VpsuE6mKA=="], - "@sentry/node": ["@sentry/node@7.120.3", "", { "dependencies": { "@sentry-internal/tracing": "7.120.3", "@sentry/core": "7.120.3", "@sentry/integrations": "7.120.3", "@sentry/types": "7.120.3", "@sentry/utils": "7.120.3" } }, "sha512-t+QtekZedEfiZjbkRAk1QWJPnJlFBH/ti96tQhEq7wmlk3VszDXraZvLWZA0P2vXyglKzbWRGkT31aD3/kX+5Q=="], + "@sentry/node": ["@sentry/node@9.22.0", "", { "dependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1", "@opentelemetry/core": "^1.30.1", "@opentelemetry/instrumentation": "^0.57.2", "@opentelemetry/instrumentation-amqplib": "^0.46.1", "@opentelemetry/instrumentation-connect": "0.43.1", "@opentelemetry/instrumentation-dataloader": "0.16.1", "@opentelemetry/instrumentation-express": "0.47.1", "@opentelemetry/instrumentation-fs": "0.19.1", "@opentelemetry/instrumentation-generic-pool": "0.43.1", "@opentelemetry/instrumentation-graphql": "0.47.1", "@opentelemetry/instrumentation-hapi": "0.45.2", "@opentelemetry/instrumentation-http": "0.57.2", "@opentelemetry/instrumentation-ioredis": "0.47.1", "@opentelemetry/instrumentation-kafkajs": "0.7.1", "@opentelemetry/instrumentation-knex": "0.44.1", "@opentelemetry/instrumentation-koa": "0.47.1", "@opentelemetry/instrumentation-lru-memoizer": "0.44.1", "@opentelemetry/instrumentation-mongodb": "0.52.0", "@opentelemetry/instrumentation-mongoose": "0.46.1", "@opentelemetry/instrumentation-mysql": "0.45.1", "@opentelemetry/instrumentation-mysql2": "0.45.2", "@opentelemetry/instrumentation-pg": "0.51.1", "@opentelemetry/instrumentation-redis-4": "0.46.1", "@opentelemetry/instrumentation-tedious": "0.18.1", "@opentelemetry/instrumentation-undici": "0.10.1", "@opentelemetry/resources": "^1.30.1", "@opentelemetry/sdk-trace-base": "^1.30.1", "@opentelemetry/semantic-conventions": "^1.30.0", "@prisma/instrumentation": "6.7.0", "@sentry/core": "9.22.0", "@sentry/opentelemetry": "9.22.0", "import-in-the-middle": "^1.13.1", "minimatch": "^9.0.0" } }, "sha512-89r2p6n0xeT2eiqIB0WXgz/rJzUgiOgZex7NvYwzEGeP0GoteDIf0Kbth/gCOy1md/ngiW+0X+S2Ed/uRw4XEQ=="], - "@sentry/types": ["@sentry/types@7.120.3", "", {}, "sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow=="], - - "@sentry/utils": ["@sentry/utils@7.120.3", "", { "dependencies": { "@sentry/types": "7.120.3" } }, "sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ=="], + "@sentry/opentelemetry": ["@sentry/opentelemetry@9.22.0", "", { "dependencies": { "@sentry/core": "9.22.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.0.0", "@opentelemetry/core": "^1.30.1 || ^2.0.0", "@opentelemetry/instrumentation": "^0.57.1 || ^0.200.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.0.0", "@opentelemetry/semantic-conventions": "^1.30.0" } }, "sha512-m6JI2LUCm4FT34OQgh7or2Y9chKn8BrqawNqu7BEqbsGADE5VPwtdu7DwPOD7pC6KN9lGHVf0bqS7197e8Kz/A=="], "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], @@ -521,14 +557,22 @@ "@types/babel__traverse": ["@types/babel__traverse@7.20.6", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg=="], + "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], + "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], "@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], + "@types/mysql": ["@types/mysql@2.15.26", "", { "dependencies": { "@types/node": "*" } }, "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ=="], + "@types/node": ["@types/node@18.19.80", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ=="], + "@types/pg": ["@types/pg@8.6.1", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w=="], + + "@types/pg-pool": ["@types/pg-pool@2.0.6", "", { "dependencies": { "@types/pg": "*" } }, "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ=="], + "@types/prop-types": ["@types/prop-types@15.7.14", "", {}, "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ=="], "@types/react": ["@types/react@18.3.18", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ=="], @@ -537,6 +581,8 @@ "@types/shimmer": ["@types/shimmer@1.2.0", "", {}, "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg=="], + "@types/tedious": ["@types/tedious@4.0.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw=="], + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], "@types/ws": ["@types/ws@8.18.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw=="], @@ -909,6 +955,8 @@ "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], + "forwarded-parse": ["forwarded-parse@2.1.2", "", {}, "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw=="], + "fs-extra": ["fs-extra@7.0.1", "", { "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], @@ -969,8 +1017,6 @@ "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], - "import-in-the-middle": ["import-in-the-middle@1.13.1", "", { "dependencies": { "acorn": "^8.14.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" } }, "sha512-k2V9wNm9B+ysuelDTHjI9d5KPc4l8zAZTGqj+pcynvWkypZd857ryzN8jNC7Pg2YZXNMJcHRPpaDyCBbNyVRpA=="], "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], @@ -1057,8 +1103,6 @@ "keyvaluestorage-interface": ["keyvaluestorage-interface@1.0.0", "", {}, "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g=="], - "lie": ["lie@3.1.1", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw=="], - "light-my-request": ["light-my-request@5.14.0", "", { "dependencies": { "cookie": "^0.7.0", "process-warning": "^3.0.0", "set-cookie-parser": "^2.4.1" } }, "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA=="], "lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], @@ -1071,8 +1115,6 @@ "load-tsconfig": ["load-tsconfig@0.2.5", "", {}, "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg=="], - "localforage": ["localforage@1.10.0", "", { "dependencies": { "lie": "3.1.1" } }, "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg=="], - "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], @@ -1213,6 +1255,12 @@ "permissionless": ["permissionless@workspace:packages/permissionless"], + "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], + + "pg-protocol": ["pg-protocol@1.10.0", "", {}, "sha512-IpdytjudNuLv8nhlHs/UrVBhU0e78J0oIS/0AVdTbWxSOkFUVdsHC/NrorO6nXsQNDTT1kzDSOMJubBQviX18Q=="], + + "pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@3.0.1", "", {}, "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag=="], @@ -1239,6 +1287,14 @@ "postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="], + "postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], + + "postgres-bytea": ["postgres-bytea@1.0.0", "", {}, "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w=="], + + "postgres-date": ["postgres-date@1.0.7", "", {}, "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="], + + "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], + "preact": ["preact@10.26.4", "", {}, "sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w=="], "prettier": ["prettier@3.5.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], @@ -1619,10 +1675,48 @@ "@opentelemetry/exporter-zipkin/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.25.1", "", {}, "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ=="], + "@opentelemetry/instrumentation-amqplib/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-connect/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-dataloader/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-express/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-fs/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-generic-pool/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-graphql/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-hapi/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + "@opentelemetry/instrumentation-http/@opentelemetry/core": ["@opentelemetry/core@1.25.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.25.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ=="], "@opentelemetry/instrumentation-http/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.25.1", "", {}, "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ=="], + "@opentelemetry/instrumentation-kafkajs/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-knex/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-koa/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-lru-memoizer/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-mongodb/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-mongoose/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-mysql/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-mysql2/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-pg/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-redis-4/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@opentelemetry/instrumentation-tedious/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + "@opentelemetry/otlp-exporter-base/@opentelemetry/core": ["@opentelemetry/core@1.25.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.25.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ=="], "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/core": ["@opentelemetry/core@1.25.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.25.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ=="], @@ -1653,6 +1747,8 @@ "@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + "@opentelemetry/sdk-trace-node/@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@1.25.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ=="], + "@opentelemetry/sdk-trace-node/@opentelemetry/core": ["@opentelemetry/core@1.25.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.25.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ=="], "@opentelemetry/sdk-trace-node/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@1.25.1", "", { "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/resources": "1.25.1", "@opentelemetry/semantic-conventions": "1.25.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw=="], @@ -1663,6 +1759,8 @@ "@pimlico/opentelemetry-instrumentation-viem/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], + "@prisma/instrumentation/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + "@reown/appkit/@walletconnect/types": ["@walletconnect/types@2.19.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "events": "3.3.0" } }, "sha512-/LZWhkVCUN+fcTgQUxArxhn2R8DF+LSd/6Wh9FnpjeK/Sdupx1EPS8okWG6WPAqq2f404PRoNAfQytQ82Xdl3g=="], "@reown/appkit/@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.19.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/jsonrpc-http-connection": "1.0.8", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/sign-client": "2.19.2", "@walletconnect/types": "2.19.2", "@walletconnect/utils": "2.19.2", "es-toolkit": "1.33.0", "events": "3.3.0" } }, "sha512-LkKg+EjcSUpPUhhvRANgkjPL38wJPIWumAYD8OK/g4OFuJ4W3lS/XTCKthABQfFqmiNbNbVllmywiyE44KdpQg=="], @@ -1675,6 +1773,18 @@ "@safe-global/safe-apps-sdk/viem": ["viem@2.23.2", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA=="], + "@sentry/node/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="], + + "@sentry/node/@opentelemetry/instrumentation-http": ["@opentelemetry/instrumentation-http@0.57.2", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/instrumentation": "0.57.2", "@opentelemetry/semantic-conventions": "1.28.0", "forwarded-parse": "2.1.2", "semver": "^7.5.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg=="], + + "@sentry/node/@opentelemetry/instrumentation-ioredis": ["@opentelemetry/instrumentation-ioredis@0.47.1", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/redis-common": "^0.36.2", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA=="], + + "@sentry/node/@opentelemetry/instrumentation-undici": ["@opentelemetry/instrumentation-undici@0.10.1", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.57.1" }, "peerDependencies": { "@opentelemetry/api": "^1.7.0" } }, "sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ=="], + + "@sentry/node/@opentelemetry/resources": ["@opentelemetry/resources@1.30.1", "", { "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA=="], + + "@sentry/opentelemetry/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], + "@size-limit/file/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], "@wagmi/cli/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], @@ -1817,6 +1927,44 @@ "@opentelemetry/exporter-trace-otlp-proto/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.25.1", "", {}, "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ=="], + "@opentelemetry/instrumentation-amqplib/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-connect/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-dataloader/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-express/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-fs/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-generic-pool/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-graphql/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-hapi/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-kafkajs/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-knex/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-koa/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-lru-memoizer/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-mongodb/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-mongoose/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-mysql/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-mysql2/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-pg/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-redis-4/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@opentelemetry/instrumentation-tedious/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + "@opentelemetry/otlp-exporter-base/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.25.1", "", {}, "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ=="], "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.25.1", "", {}, "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ=="], @@ -1839,6 +1987,8 @@ "@pimlico/opentelemetry-instrumentation-viem/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.200.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q=="], + "@prisma/instrumentation/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + "@reown/appkit-controllers/@walletconnect/universal-provider/@walletconnect/sign-client": ["@walletconnect/sign-client@2.19.2", "", { "dependencies": { "@walletconnect/core": "2.19.2", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "2.1.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.19.2", "@walletconnect/utils": "2.19.2", "events": "3.3.0" } }, "sha512-a/K5PRIFPCjfHq5xx3WYKHAAF8Ft2I1LtxloyibqiQOoUtNLfKgFB1r8sdMvXM7/PADNPe4iAw4uSE6PrARrfg=="], "@reown/appkit-controllers/@walletconnect/universal-provider/@walletconnect/types": ["@walletconnect/types@2.19.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "events": "3.3.0" } }, "sha512-/LZWhkVCUN+fcTgQUxArxhn2R8DF+LSd/6Wh9FnpjeK/Sdupx1EPS8okWG6WPAqq2f404PRoNAfQytQ82Xdl3g=="], @@ -1859,6 +2009,14 @@ "@safe-global/safe-apps-sdk/viem/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + "@sentry/node/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="], + + "@sentry/node/@opentelemetry/instrumentation-http/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + + "@sentry/node/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], + + "@sentry/opentelemetry/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.200.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q=="], + "@wagmi/cli/viem/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], "@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], diff --git a/bun.lockb b/bun.lockb index 1acb1905..181a3520 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 557ea6a6..df418cfc 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@changesets/cli": "^2.26.2", "@permissionless/wagmi": "workspace:packages/wagmi", "@pimlico/mock-paymaster": "workspace:packages/mock-paymaster", - "@pimlico/alto": "^0.0.18", + "@pimlico/alto": "0.0.0-main.20250527T165035", "@size-limit/esbuild-why": "^9.0.0", "@size-limit/preset-small-lib": "^9.0.0", "@tanstack/react-query": "5.45.1", diff --git a/packages/mock-paymaster/helpers/schema.ts b/packages/mock-paymaster/helpers/schema.ts index fe8ff27c..a488cacf 100644 --- a/packages/mock-paymaster/helpers/schema.ts +++ b/packages/mock-paymaster/helpers/schema.ts @@ -60,6 +60,27 @@ export const hexDataSchema = z .regex(hexDataPattern, { message: "not valid hex data" }) .transform((val) => val.toLowerCase() as Hex) +const signedAuthorizationSchema = z.union([ + z.object({ + contractAddress: addressSchema, + chainId: hexNumberSchema.transform((val) => Number(val)), + nonce: hexNumberSchema.transform((val) => Number(val)), + r: hexDataSchema.transform((val) => val as Hex), + s: hexDataSchema.transform((val) => val as Hex), + v: hexNumberSchema.optional(), + yParity: hexNumberSchema.transform((val) => Number(val)) + }), + z.object({ + address: addressSchema, + chainId: hexNumberSchema.transform((val) => Number(val)), + nonce: hexNumberSchema.transform((val) => Number(val)), + r: hexDataSchema.transform((val) => val as Hex), + s: hexDataSchema.transform((val) => val as Hex), + v: hexNumberSchema.optional(), + yParity: hexNumberSchema.transform((val) => Number(val)) + }) +]) + const userOperationSchemaPaymasterV6 = z .object({ sender: addressSchema, @@ -80,7 +101,8 @@ const userOperationSchemaPaymasterV6 = z return "0x" } return val - }) + }), + eip7702Auth: signedAuthorizationSchema.optional().nullable() }) .strict() .transform((val) => { @@ -122,7 +144,8 @@ const userOperationSchemaPaymasterV7 = z return "0x" } return val - }) + }), + eip7702Auth: signedAuthorizationSchema.optional().nullable() }) .strict() .transform((val) => { @@ -173,7 +196,8 @@ const eip7677UserOperationSchemaV6 = z .optional() .transform((_) => { return "0x" as Hex - }) + }), + eip7702Auth: signedAuthorizationSchema.optional().nullable() }) .strict() .transform((val) => { @@ -219,7 +243,8 @@ const eip7677UserOperationSchemaV7 = z return "0x" } return val - }) + }), + eip7702Auth: signedAuthorizationSchema.optional().nullable() }) .strict() .transform((val) => { diff --git a/packages/permissionless-test/mock-aa-infra/alto/constants/accounts/kernel.ts b/packages/permissionless-test/mock-aa-infra/alto/constants/accounts/kernel.ts index a579d114..75d22d7a 100644 --- a/packages/permissionless-test/mock-aa-infra/alto/constants/accounts/kernel.ts +++ b/packages/permissionless-test/mock-aa-infra/alto/constants/accounts/kernel.ts @@ -54,9 +54,9 @@ export const KERNEL_V07_V3_2_ACCOUNT_V3_LOGIC_CREATECALL: Hex = "0x0000000000000000000000000000000000000000000000000000000000000000610140806040523461020357602081615e4a80380380916100208285610207565b83398101031261020357516001600160a01b038116810361020357306080524660a05260a0604051610053604082610207565b6006815260208101906512d95c9b995b60d21b825260405191610077604084610207565b60058352602083019164181719971960d91b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052604051602081019063deadbeef60e01b825260048152610101602482610207565b5190516001600160581b031981169190601582106101e3575b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b031916605885901c179055604051615c0b908161023f82396080518161472c015260a0518161474f015260c051816147bf015260e051816147e50152610100518161470b0152610120518181816103b40152818161069d0152818161084301528181610a9f01528181610e1e01528181611136015281816112aa015281816113000152818161182d0152818161195d015281816125ac0152612ff30152f35b6001600160581b031960159290920360031b82901b161690505f8061011a565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761022a57604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001d575b36612ea15761001b612e70565b005b5f3560e01c8063112d3a7d1461020c578063150b7a02146102075780631626ba7e1461020257806319822f7c146101fd5780631f1b92e3146101f85780633659cfe6146101f35780633c3b752b146101ee57806352141cd9146101e957806357b3a5f4146101e45780636e6fa0c6146101df578063721e67f4146101da57806384b0196e146101d55780638dd7712f146101d057806390ef8862146101cb5780639198bdf5146101c65780639517e29f146101c15780639cfd7cff146101bc578063a65d69d4146101b7578063a71763a8146101b2578063adb610a3146101ad578063b8afe17d146101a8578063bc197c81146101a3578063c3e589781461019e578063d03c791414610199578063d691c96414610194578063e6f3d50a1461018f578063e9ae5c531461018a578063f1f7f0f914610185578063f23a6e6114610180578063f2dc691d1461017b5763fc9c5dec0361000e57611b12565b611af4565b611a9a565b611a64565b611936565b6117b8565b6116d6565b611689565b6115b6565b6114a5565b611439565b611407565b6112d9565b611295565b61123d565b61110f565b610ff8565b610ee9565b610dee565b610d50565b610cca565b610c6f565b610bbc565b610a1e565b610988565b61080d565b610665565b610380565b61031f565b6102c5565b61029f565b6001600160a01b0381160361022257565b5f80fd5b359061023182610211565b565b9181601f84011215610222578235916001600160401b038311610222576020838186019501011161022257565b6060600319820112610222576004359160243561027c81610211565b91604435906001600160401b0382116102225761029b91600401610233565b9091565b346102225760206102bb6102b236610260565b92919091611d65565b6040519015158152f35b34610222576080366003190112610222576102e1600435610211565b6102ec602435610211565b6064356001600160401b0381116102225761030b903690600401610233565b5050604051630a85bd0160e11b8152602090f35b34610222576040366003190112610222576004356024356001600160401b0381116102225760209161035861035e923690600401610233565b91611f2a565b6040516001600160e01b03199091168152f35b90816101209103126102225790565b6060366003190112610222576004356001600160401b038111610222576103ab903690600401610371565b602435604435917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632576103ef6020820135613212565b9092919084836001600160f81b0319861615610619575b82610411939461340b565b9361043661042661042184611cf7565b6120ca565b946001600160f81b031916151590565b9384806105d8575b6105c957602001516001600160a01b031690819081156104d15760019261046f61048e925f525f60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b0361053c57826104e0575b50506104d157816104bb925b6104bf575b506040519081529081906020820190565b0390f35b3490349034903490335af1505f6104aa565b631a0a9b9f60e21b5f5260045ffd5b61053592506105319161051561050f6105096104fe61052a95611d2e565b9360608101906120f6565b90611b72565b90611cc1565b63ffffffff60e01b165f5260205260405f2090565b5460ff1690565b1590565b5f80610499565b82919291610596575b506104d15761050981606061055b9301906120f6565b638dd7712f60e01b916001600160e01b03199161057791611cc1565b160361058757816104bb926104a5565b63dbbb044b60e01b5f5260045ffd5b6105c3915061052a6105aa61053192611d2e565b61051561050f6105bd60608801886120f6565b90611b61565b5f610545565b633ab3447f60e11b5f5260045ffd5b50805163ffffffff1663ffffffff6106116106085f516020615beb5f395f51905f525463ffffffff9060c81c1690565b63ffffffff1690565b91161061043e565b5f516020615beb5f395f51905f525460581b9250610406565b6348f5c3ed60e01b5f5260045ffd5b6004359063ffffffff8216820361022257565b359063ffffffff8216820361022257565b602036600319011261022257610679610641565b61069a6106945f516020615beb5f395f51905f525460581b90565b60581c90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610803575b156107f95760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f916107ca575b50156106325760405163d68f602560e01b8152915f838061072f363433600485016121bd565b038183865af192831561079d575f936107a2575b5061074d90613624565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061077990600483016121e2565b03925af1801561079d5761078957005b806107975f61001b93610fa1565b80610d22565b611f1f565b61074d9193506107c3903d805f833e6107bb8183610fa1565b81019061215b565b9290610743565b6107ec915060203d6020116107f2575b6107e48183610fa1565b810190612128565b5f610709565b503d6107da565b5061001b90613624565b50303314156106cd565b60203660031901126102225760043561082581610211565b6108406106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061093c575b156109325760405163ecd0596160e01b81526004808201526001600160a01b039190911690602081602481855afa90811561079d575f91610913575b50156106325760405163d68f602560e01b8152915f83806108d5363433600485016121bd565b038183865af192831561079d575f936108f3575b5061074d906121f3565b61074d91935061090c903d805f833e6107bb8183610fa1565b92906108e9565b61092c915060203d6020116107f2576107e48183610fa1565b5f6108af565b5061001b906121f3565b5030331415610873565b6001600160581b031981160361022257565b9181601f84011215610222578235916001600160401b038311610222576020808501948460051b01011161022257565b346102225760a0366003190112610222576004356109a581610946565b6024356109b181610211565b6044356001600160401b038111610222576109d0903690600401610233565b6064939193356001600160401b038111610222576109f2903690600401610233565b91608435956001600160401b03871161022257610a1661001b973690600401610958565b969095612339565b608036600319011261022257600435610a3681610946565b602435610a4281610211565b6044356001600160401b03811161022257610a61903690600401610233565b6064356001600160401b03811161022257610a80903690600401610233565b91610a9c6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ba0575b15610b915760405163ecd0596160e01b81526004808201526001600160a01b03919091169490602081602481895afa90811561079d575f91610b72575b50156106325760405163d68f602560e01b8152955f8780610b32363433600485016121bd565b0381838a5af196871561079d575f97610b52575b5061074d959697612482565b61074d969750610b6b903d805f833e6107bb8183610fa1565b9695610b46565b610b8b915060203d6020116107f2576107e48183610fa1565b5f610b0c565b50919361001b95939193612482565b5030331415610acf565b6001600160e01b031981160361022257565b34610222576020366003190112610222576104bb610bfd600435610bdf81610baa565b5f60408051610bed81610f2f565b8281528260208201520152611e57565b600160405191610c0c83610f2f565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b3461022257604036600319011261022257602060ff610cbe600435610c9381610946565b610ca860243591610ca383610baa565b611d2e565b9063ffffffff60e01b165f5260205260405f2090565b54166040519015158152f35b34610222576020366003190112610222576020610cff600435610cec81610211565b5f604051610cf981610f4f565b5261304f565b60405190610d0c82610f4f565b546001600160a01b031690819052604051908152f35b5f91031261022257565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610222575f36600319011261022257610d8f610d9d610d6e613971565b604092919251938493600f60f81b855260e0602086015260e0850190610d2c565b908382036040850152610d2c565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610dd5575050500390f35b8251845285945060209384019390920191600101610dc7565b6040366003190112610222576004356001600160401b03811161022257610e19903690600401610371565b6024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610632575f908152602081905260409020546001600160a01b03169060609060018314159081610eb9575b610e8e610e87826060610e959401906120f6565b8091611b80565b9030613a59565b5015610eaa57610ea157005b61001b91613a7e565b63f21e646b60e01b5f5260045ffd5b9150610e95610e8e610e87610edf610ed7610e8760608801886120f6565b903489613a0e565b9492505050610e73565b34610222575f36600319011261022257602063ffffffff5f516020615beb5f395f51905f525460c81c16604051908152f35b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117610f4a57604052565b610f1b565b602081019081106001600160401b03821117610f4a57604052565b604081019081106001600160401b03821117610f4a57604052565b61012081019081106001600160401b03821117610f4a57604052565b90601f801991011681019081106001600160401b03821117610f4a57604052565b60405190610231604083610fa1565b6040519061023161012083610fa1565b6001600160401b038111610f4a5760051b60200190565b6080366003190112610222576004356001600160401b03811161022257611023903690600401610958565b602435916001600160401b038311610222573660238401121561022257826004013561104e81610fe1565b9361105c6040519586610fa1565b8185526024602086019260061b8201019036821161022257602401915b8183106110ce575050506044356001600160401b038111610222576110a2903690600401610958565b90606435946001600160401b038611610222576110c661001b963690600401610958565b959094612587565b60408336031261022257602060409182516110e881610f6a565b6110f186610654565b81528286013561110081610211565b83820152815201920191611079565b61111836610260565b6111336106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611233575b156112285760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f91611209575b50156106325760405163d68f602560e01b8152935f85806111c9363433600485016121bd565b038183885af194851561079d575f956111e9575b5061074d939495612754565b61074d949550611202903d805f833e6107bb8183610fa1565b94936111dd565b611222915060203d6020116107f2576107e48183610fa1565b5f6111a3565b509161001b93612754565b5030331415611166565b34610222575f366003190112610222576104bb60405161125e604082610fa1565b601681527535b2b93732b61730b23b30b731b2b2173b181719971960511b6020820152604051918291602083526020830190610d2c565b34610222575f366003190112610222576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6112e236610260565b6112fd6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806113fd575b156113f25760405163ecd0596160e01b81526004808201526001600160a01b03919091169290602081602481875afa90811561079d575f916113d3575b50156106325760405163d68f602560e01b8152935f8580611393363433600485016121bd565b038183885af194851561079d575f956113b3575b5061074d939495612aad565b61074d9495506113cc903d805f833e6107bb8183610fa1565b94936113a7565b6113ec915060203d6020116107f2576107e48183610fa1565b5f61136d565b509161001b93612aad565b5030331415611330565b34610222575f36600319011261022257602063ffffffff5f516020615beb5f395f51905f525460a81c16604051908152f35b3461022257602036600319011261022257604061146960043561145b81610946565b611463612c55565b50611cf7565b81519061147582610f6a565b5463ffffffff81168083526001600160a01b03602092831c81169383019384528451918252925190921690820152f35b346102225760a0366003190112610222576114c1600435610211565b6114cc602435610211565b6044356001600160401b038111610222576114eb903690600401610958565b50506064356001600160401b0381116102225761150c903690600401610958565b50506084356001600160401b0381116102225761152d903690600401610233565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a09092019201905f5b8181106115965750505090565b82516001600160501b031916845260209384019390920191600101611589565b34610222576020366003190112610222576115f56004356115d681610baa565b6060604080516115e581610f2f565b5f81525f60208201520152611e8d565b60016040519161160483610f2f565b805461ffff60f01b8160f01b168452828060a01b039060101c16602084015201906040519182602082549182815201915f5260205f20905f5b818110611666576104bb858761165581880382610fa1565b604082015260405191829182611541565b825460501b6001600160501b03191684526020909301926001928301920161163d565b346102225760203660031901126102225760206102bb600435612c6d565b9060406003198301126102225760043591602435906001600160401b0382116102225761029b91600401610233565b6116df366116a7565b90916001600160a01b036116f23361304f565b54169182156117a95760609060018414159485611792575b61171492936142f0565b92611782575b50506040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061175357505050500390f35b919360019193955060206117728192603f198a82030186528851610d2c565b9601920192018594939192611744565b61178b91613a7e565b5f8061171a565b61171492506117a23634876139b5565b925061170a565b63710c949760e01b5f5260045ffd5b6060366003190112610222576004356117d081610946565b6024356001600160401b038111610222576117ef903690600401610233565b6044356001600160401b0381116102225761180e903690600401610233565b9061182a6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061192c575b1561191f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169390602081602481885afa90811561079d575f91611900575b50156106325760405163d68f602560e01b8152945f86806118c0363433600485016121bd565b038183895af195861561079d575f966118e0575b5061074d949596612d45565b61074d9596506118f9903d805f833e6107bb8183610fa1565b95946118d4565b611919915060203d6020116107f2576107e48183610fa1565b5f61189a565b5091909261001b94612d45565b503033141561185d565b61193f366116a7565b61195a6106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611a5a575b15611a4f5760405163ecd0596160e01b81526004808201526001600160a01b03919091169190602081602481865afa90811561079d575f91611a30575b50156106325760405163d68f602560e01b8152925f84806119f0363433600485016121bd565b038183875af193841561079d575f94611a10575b5061074d929394612d5a565b61074d939450611a29903d805f833e6107bb8183610fa1565b9392611a04565b611a49915060203d6020116107f2576107e48183610fa1565b5f6119ca565b509061001b92612d5a565b503033141561198d565b34610222575f3660031901126102225760205f516020615beb5f395f51905f525460581b604051906001600160581b0319168152f35b346102225760a036600319011261022257611ab6600435610211565b611ac1602435610211565b6084356001600160401b03811161022257611ae0903690600401610233565b505060405163f23a6e6160e01b8152602090f35b346102225760203660031901126102225760206102bb600435612d65565b34610222576040366003190112610222576004356001600160401b03811161022257611b59611b476020923690600401610371565b60243590611b5482610211565b612d72565b604051908152f35b906008116102225760040190600490565b906004116102225790600490565b909291928360041161022257831161022257600401916003190190565b906020116102225790602090565b90929192836020116102225783116102225760200191601f190190565b906018116102225760040190601490565b906014116102225790601490565b909291928360011161022257831161022257600101915f190190565b906009116102225760010190600890565b909291928360091161022257831161022257600901916008190190565b906016116102225790601690565b906016116102225760020190601490565b909291928360161161022257831161022257601601916015190190565b906002116102225790600290565b909291928360141161022257831161022257601401916013190190565b90602c116102225760180190601490565b90939293848311610222578411610222578101920390565b356001600160e01b0319811692919060048210611cdc575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85060205260405f2090565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85160205260405f2090565b90929060018103611db457506001600160a01b0392611dae9250611d9e915060581b600160581b600160f81b0316600160f81b17611cf7565b5460201c6001600160a01b031690565b16151590565b60028103611df457506001600160a01b0392611dae9250611de89150611ddb90841661304f565b546001600160a01b031690565b6001600160a01b031690565b600303611e3457611e15611e1061050f600193611e2395611b72565b611e57565b01546001600160a01b031690565b6001600160a01b0390811691161490565b5050505f90565b359060208110611e49575090565b5f199060200360031b1b1690565b63ffffffff60e01b165f527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b60205260405f2090565b63ffffffff60e01b165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85260205260405f2090565b908160209103126102225751611ed881610baa565b90565b908060209392818452848401375f828201840152601f01601f1916010190565b611ed8949260609260018060a01b0316825260208201528160408201520191611edb565b6040513d5f823e3d90fd5b91611f3491613087565b919080836001600160f81b03198416156120aa575b6020811015918261206d575b82612057575b506001600160a01b039050611f75611de8611d9e86611cf7565b16156104d1576001600160f81b03198316600160f81b0361200a5790611fa26020949392611fc0966131b8565b604051637aa8f17760e11b8152958694859384933360048601611efb565b039160581c6001600160a01b03165afa90811561079d575f91611fe1575090565b611ed8915060203d602011612003575b611ffb8183610fa1565b810190611ec3565b503d611ff1565b929160081b93600160f11b61203861202b61202488611e8d565b5460f01b90565b6001600160f01b03191690565b1661204857611ed8943390613104565b635b71057960e01b5f5260045ffd5b819295506120659350611bab565b925f80611f5b565b91507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a6120a361209d8385611b9d565b90611e3b565b1491611f55565b92506120c45f516020615beb5f395f51905f525460581b90565b92611f49565b906040516120d781610f6a565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561022257018035906001600160401b0382116102225760200191813603831361022257565b90816020910312610222575180151581036102225790565b6001600160401b038111610f4a57601f01601f191660200190565b602081830312610222578051906001600160401b038211610222570181601f820112156102225780519061218e82612140565b9261219c6040519485610fa1565b8284526020838301011161022257815f9260208093018386015e8301015290565b611ed8939260609260018060a01b03168252602082015281604082015201905f611edb565b906020611ed8928181520190610d2c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2565b1561224d57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b5f516020615beb5f395f51905f52805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b5f52603260045260245ffd5b908210156122e45761029b9160051b8101906120f6565b6122b9565b908092918237015f815290565b60405190612305602083610fa1565b5f8252565b3d15612334573d9061231b82612140565b916123296040519384610fa1565b82523d5f602084013e565b606090565b949392919096959661237c6001600160581b03196123756123685f516020615beb5f395f51905f525460581b90565b6001600160581b03191690565b1615612246565b6001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061246a575b61245b57856123b5612402976136e9565b6123d66123c0610fc2565b60018152925b6001600160a01b03166020840152565b5f516020615beb5f395f51905f52805463ffffffff60a81b1916600160a81b17905561374f565b61374f565b5f5b81811061241057505050565b5f8061241d8385876122cd565b9061242d604051809381936122e9565b039082305af161243b61230a565b501561244957600101612404565b636534eae560e11b5f5260045260245ffd5b6361c4e91b60e11b5f5260045ffd5b506001600160f81b03198616600160f91b14156123a4565b94939291906001600160581b03198616156104d1576001600160f81b03198616600160f81b14158061252d575b61245b576124bc866136e9565b6001600160a01b036124d0611d9e88611cf7565b16156124df575b505050505050565b612522956123fd6125055f516020615beb5f395f51905f525463ffffffff9060a81c1690565b926123c660405194612518604087610fa1565b63ffffffff168552565b5f80808080806124d7565b506001600160f81b03198616600160f91b14156124af565b9060405161255281610f2f565b82546001600160a01b03908116825260019390930154928316602082015260589290921b6001600160f81b0319166040830152565b959294919390946125a96106945f516020615beb5f395f51905f525460581b90565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806126f9575b156126ea5760405163ecd0596160e01b81526004808201526001600160a01b039190911695906020816024818a5afa90811561079d575f916126cb575b50156106325760405163d68f602560e01b8152965f888061263f363433600485016121bd565b0381838b5af197881561079d575f986126ab575b5061265f969798613af7565b803b1561022257604051630b9dfbed60e11b8152915f91839182908490829061268b90600483016121e2565b03925af1801561079d5761269d575b50565b806107975f61023193610fa1565b61265f9798506126c4903d805f833e6107bb8183610fa1565b9796612653565b6126e4915060203d6020116107f2576107e48183610fa1565b5f612619565b50919390929461023196613af7565b50303314156125dc565b916020611ed8938181520191611edb565b356bffffffffffffffffffffffff19811692919060148210612734575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b9091906001810361289957509060549060581b600160581b600160f81b0316600160f81b179161279061278684611cf7565b5463ffffffff1690565b5f516020615beb5f395f51905f525460a81c63ffffffff169063ffffffff808316911614612881575b506128226127fb611de86127f56127ef6127e85f516020615beb5f395f51905f525463ffffffff9060a81c1690565b9886611bd9565b90612714565b60601c90565b612812612806610fc2565b63ffffffff9097168752565b6001600160a01b03166020860152565b61284d601482019461283486806120f6565b61284460348694939401896120f6565b9390928861374f565b0191600461285b84836120f6565b905014612868575b505050565b61050f6105096102319461287b936120f6565b90613f3b565b6128939060010163ffffffff16612288565b5f6127b9565b600281036128ee5750610231926034826128e16128c6611de86127f56127ef60146128e899019786611bd9565b80966128d286806120f6565b916001600160a01b0316613eaa565b01906120f6565b91613cec565b9091906003810361295957506128e8906038612951611de86127f56127ef6102319861294b60188a01978a612939611de86127f56127ef8761293361050f8288611b72565b95611bc8565b6129438b806120f6565b939092613b64565b88611bc8565b9301906120f6565b9091600482036129ee576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b03925af192831561079d575f516020615bab5f395f51905f52936129da575b50604080519182526001600160a01b03909216602082015290819081015b0390a1565b806107975f6129e893610fa1565b5f6129b7565b60058203612a2b576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b60068203612a68576001600160a01b03831693843b1561022257612998945f92836040518098819582946306d61fe760e41b845260048401612703565b631092ef5760e11b5f5260045ffd5b929192612a8382612140565b91612a916040519384610fa1565b829481845281830111610222578281602093845f960137010152565b60018103612ad6575061269a92919060581b600160581b600160f81b0316600160f81b1761418f565b60028103612af3575061269a9291906001600160a01b031661410c565b60038103612b1e575050612b188280612b1261050f61269a9686611b72565b93611b80565b9161405e565b909160048203612bb057612b7d6129b7915f516020615bcb5f395f51905f5295612b565f516020615beb5f395f51905f525460581b90565b612b62611d9e82611cf7565b6001600160a01b03888116911614612b83575b503691612a77565b83613fa0565b612b8f612baa91611cf7565b8054640100000000600160c01b031916640100000000179055565b5f612b75565b60058203612c36575f516020615beb5f395f51905f525460581b5b612bd861209d8684611b9d565b906001600160f81b03198116600160f91b14612c0e575b5050612b7d6129b7915f516020615bcb5f395f51905f52953691612a77565b60081b6001600160e01b03191614612c27575f80612bef565b6313002bdd60e31b5f5260045ffd5b60068203612a68575f516020615beb5f395f51905f525460581b612bcb565b60405190612c6282610f6a565b5f6020838281520152565b612c81818060081b918160301b9160501b90565b929091906001600160f81b03198116600160f81b14159081612d31575b81612d1c575b81612d03575b50611e345760ff60f81b16600160f81b8114159081612cf9575b50612cf3576001600160e01b031916612cee576001600160501b031916612cea57600190565b5f90565b505f90565b50505f90565b905015155f612cc4565b6001600160f81b031916607f60f91b141590505f612caa565b6001600160f81b031980821614159150612ca4565b6001600160f81b0319811615159150612c9e565b91612d559161023195949361418f565b61450f565b9061269a92916142f0565b60071115612cea57600190565b612e2e90612e6a90612d8d6001600160a01b03823516611de8565b90612e3c6020820135612e2e612daf612da960408601866120f6565b906145a1565b93612dc0612da960608301836120f6565b90608081013560a082013590612de2612da960c08501359460e08101906120f6565b93604051988997602089019b8c94919260e0969399989794919961010087019a60018060a01b03168752602087015260408601526060850152608084015260a083015260c08201520152565b03601f198101835282610fa1565b51902060408051602081019283526001600160a01b03909516908501525f6060850152929182906080820190565b51902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b612ebd612eb85f356001600160e01b031916611e57565b612545565b80516001600160a01b0390612ed3908216611de8565b16156130405780516060906001600160a01b0390612ef2908216611de8565b1660018114158061302f575b15612fe35750508051612f1d906001600160a01b0316369034906139b5565b60408201516001600160f81b03191680612fa357506020820151612f49906001600160a01b03166145ac565b92905b15612f9b57516001600160a01b03169060018214158281612f86575b50612f76575b825160208401f35b612f7f91613a7e565b5f80612f6e565b6001600160a01b03908116141590505f612f68565b825160208401fd5b6001600160f81b031990811603612fd4576020820151612fcd906001600160a01b03163690613a34565b9290612f4c565b632d6a6bb760e01b5f5260045ffd5b6001600160a01b0303612f1d57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612f1d576348f5c3ed60e01b5f5260045ffd5b506001600160a01b03811415612efe565b631cd4b64760e21b5f5260045ffd5b6001600160a01b03165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b9182358060f81c805f146130cb57806001146130be576002146130a8575f80fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b505060015f9301915f190190565b9092608092611ed89694835260018060a01b0316602083015260408201528160608201520191611edb565b61311d65ffffffffffff939561312997958785856145ee565b969295919890986146dd565b50911642109081156131a6575b506131925761314a613174916020976131b8565b60405163392dffaf60e01b8152978896879586959193916001600160e01b031916600487016130d9565b03916001600160a01b03165afa90811561079d575f91611fe1575090565b506001600160e01b03199695505050505050565b65ffffffffffff91501642115f613136565b60405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8383526040820152604081526131f7606082610fa1565b519020901561320957611ed89061481b565b611ed890614709565b90818060081b9160ff839260f01c1660021461322a57565b6001600160d81b031983169150565b9080601f8301121561022257816020611ed893359101612a77565b919091610120818403126102225761326a610fd1565b9261327482610226565b84526020820135602085015260408201356001600160401b038111610222578161329f918401613239565b604085015260608201356001600160401b03811161022257816132c3918401613239565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b0381116102225781613305918401613239565b60e08501526101008201356001600160401b038111610222576133289201613239565b610100830152565b90816020910312610222575190565b80516001600160a01b03168252611ed891602082015160208201526101006133c061339061337e60408601516101206040870152610120860190610d2c565b60608601518582036060870152610d2c565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610d2c565b92015190610100818403910152610d2c565b9392916133ef90604092865260606020870152606086019061333f565b930152565b9291906133ef60209160408652604086019061333f565b9290925f9261341a3682613254565b916134296101008301836120f6565b918193835f936020821015806135ef575b6135b0575b5050506001600160f81b031916600160f81b145b613589575b506001600160f81b03198616600160f81b036134ef575050604051639700320360e01b815293602092859283915f91839161349691600484016133f4565b039260581c6001600160a01b03165af190811561079d57611ed8925f926134be575b50614c75565b6134e191925060203d6020116134e8575b6134d98183610fa1565b810190613330565b905f6134b8565b503d6134cf565b909460081b93909291600160f01b61350c61202b61202488611e8d565b1661357a575f61352c61352660209661355699858a614a96565b94614c75565b604051630ccab7a160e01b8152979096889586948593926001600160e01b031916600485016133d2565b03926001600160a01b03165af190811561079d57611ed8925f926134be5750614c75565b6314b9743f60e01b5f5260045ffd5b9161359693955086614890565b9193916135a4368284612a77565b6101008401525f613458565b9195509250829196506135c39350611bab565b90916135d0368385612a77565b6101008501526134536135e66001923390612d72565b95905f8061343f565b507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a61361e61209d8484611b9d565b1461343a565b5f516020615beb5f395f51905f5254600a63ffffffff8260a81c16019063ffffffff82116136d55763ffffffff838116921682116136c65761366e9060c81c63ffffffff16610608565b10156105c9575f516020615beb5f395f51905f52805463ffffffff60c81b60c893841b1663ffffffff60c81b1990911617908190559081901c63ffffffff9081169160a81c1681116136bd5750565b61023190612288565b63e60fd64760e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88918060581c6001600160581b0360a81b5f516020615beb5f395f51905f525416175f516020615beb5f395f51905f5255604051906001600160581b0319168152a1565b92949093919361376161278685611cf7565b5f516020615beb5f395f51905f525460a81c63ffffffff169063ffffffff808316911614613959575b506020810180516001600160a01b031615613950575b5f516020615beb5f395f51905f525460a81c63ffffffff1663ffffffff6137ce610608855163ffffffff1690565b911614801590613924575b6105c957613827613834926137ed87611cf7565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b915f196001600160a01b03841601613913575b5050506001600160f81b03198116600160f81b036138f05760581c6001600160a01b031690813b15610222576040516306d61fe760e41b8152925f9184918291613895919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d5926138dc575b5060408051600181526001600160a01b03909216602083015290918291820190565b806107975f6138ea93610fa1565b5f6138ba565b91506001600160f81b03198216600160f91b0361245b576102319160081b614e5d565b61391c92613cec565b5f8080613847565b5061393161278686611cf7565b63ffffffff613947610608855163ffffffff1690565b911610156137d9565b600181526137a0565b61396b9060010163ffffffff16612288565b5f61378a565b60409081516139808382610fa1565b600681526512d95c9b995b60d21b6020820152916139a081519182610fa1565b6005815264181719971960d91b602082015290565b916139dc925f8080946040519687958694859363d68f602560e01b85523360048601611efb565b03926001600160a01b03165af190811561079d575f916139fa575090565b611ed891503d805f833e6107bb8183610fa1565b5f92836139dc95936040519687958694859363d68f602560e01b85523360048601611efb565b5f9060405192808385378338925af4913d82523d5f602084013e60203d830101604052565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b6001600160a01b0316803b1561022257604051630b9dfbed60e11b815260206004820152915f918391829084908290613abb906024830190610d2c565b03925af1801561079d57613acc5750565b5f61023191610fa1565b8051156122e45760200190565b80518210156122e45760209160051b010190565b909593919492965f5b87811015613b5057600190613b4a8a89613b368489613b2f828060051b8c013595613b2a87610946565b613ae3565b51946122cd565b90613b42868d8d6122cd565b94909361374f565b01613b00565b509650505050505050565b90156122e45790565b9293929091906001600160a01b03821615613cdd575b613b8390611e57565b93613baf613ba2613b948684613b5b565b356001600160f81b03191690565b6001600160f81b03191690565b936001600160f81b03198516613cb5576001600160a01b03841691613bd691908190611be7565b823b1561022257613c00925f92836040518096819582946306d61fe760e41b845260048401612703565b03925af194851561079d57613c64613c849360019361023198613ca1575b5060408051600381526001600160a01b03881660208201525f516020615bab5f395f51905f529190a15b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107975f613caf93610fa1565b5f613c1e565b50909390506001600160f81b031980841603612fd4576001613c8491613c6461023196613c48565b6001600160a01b039150613b7a565b6001600160a01b0316919082158015613ea0575b6128635760405163d60b347f60e01b8152306004820152602081602481875afa90811561079d575f91613e81575b50613dc5579080613d3e92611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613d69919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592613db1575b505b60408051600481526001600160a01b03909216602083015290918291820190565b806107975f613dbf93610fa1565b5f613d8e565b81151580613e62575b613dec575b50506129d55f516020615bab5f395f51905f5291613d90565b9080613df792611be7565b9190813b15610222576040516306d61fe760e41b8152925f9184918291613e22919060048401612703565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592613e4e575b5091613dd3565b806107975f613e5c93610fa1565b5f613e47565b506001600160f81b031980613e7a613b948585613b5b565b1614613dce565b613e9a915060203d6020116107f2576107e48183610fa1565b5f613d2e565b5060018314613d00565b92613eb59084615169565b81613f045750505f80916040518260208201916306d61fe760e41b8352613eee81612e2e60248201604090602081525f60208201520190565b51926001600160a01b03165af15061269a61230a565b6001600160a01b039092169190823b156102225761268b925f92836040518096819582946306d61fe760e41b845260048401612703565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091613f6d82610ca883611d2e565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b91907f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3905a905f806040519361400085613ff26020820196638a91b0e360e01b88526020602484018181520190610d2c565b03601f198101875286610fa1565b6040519361400f602086610fa1565b828552602085019583908a905f368a375193f1913d9081614056575b815f9293523e604080516001600160a01b0390951685528115156020860152909390819081016129d5565b5f915061402b565b61406b9093929193611e57565b80546001600160a01b031981168255600190910180546001600160a01b039092169490929091906001600160f81b0319605883901b16156140bb575b505081546001600160a81b03191690915550565b6140d9926140ca913691612a77565b906001600160a01b0316613fa0565b50805460408051600381526001600160a01b0390921660208301525f516020615bcb5f395f51905f5291a15f80806140a7565b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205260409081902080546001600160a01b0319811690915590921694935f516020615bcb5f395f51905f529361417f9161417991369190612a77565b82613fa0565b50815190600282526020820152a1565b9291906141bf6141ad5f516020615beb5f395f51905f525460581b90565b6001600160581b031980871691161490565b612c27576141cf611d9e85611cf7565b936141f06141dc82611cf7565b8054640100000000600160c01b0319169055565b6001600160f81b03198116600160f81b0361423357916138ba6141796129d5935f516020615bcb5f395f51905f529560018060a01b039060581c16933691612a77565b91506001600160f81b03198216600160f91b0361245b576102319160081b6151ef565b604080519091906142678382610fa1565b6001815291601f1901825f5b82811061427f57505050565b806060602080938501015201614273565b9061429a82610fe1565b6142a76040519182610fa1565b82815280926142b8601f1991610fe1565b01905f5b8281106142c857505050565b8060606020809385010152016142bc565b906040611ed8925f81528160208201520190610d2c565b600881901b9291906001600160f81b03198116600160f81b036143835750906143189161542d565b90916001600160f81b031981166143335750611ed891615545565b6001600160f81b031916600160f81b0361435057611ed891615499565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b9293926001600160f81b0319811661443b5750906143a0916153af565b916143a9614256565b956001600160f81b031981166143d657506143c3936153f7565b6143cc83613ad6565b5261269a82613ad6565b6001600160f81b031916600160f81b03614350576143f3936153d0565b6143fc84613ad6565b52610231577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129d561442e84613ad6565b51604051918291826142d9565b909391906001600160f81b0319908116036143505761446561446b9161445f614256565b95615387565b91613a59565b61447785939293613ad6565b526001600160f81b03198116600160f81b036144c257501561449557565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76129d561442e84613ad6565b6001600160f81b031916614350576102315760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b9091906001600160a01b031680158015614597575b6128635781156122e4575f516020615bcb5f395f51905f52926129d5926001600160f81b03198235811614614577575b505060408051600481526001600160a01b03909216602083015290918291820190565b614588816141799261458f94611be7565b3691612a77565b505f80614554565b5060018114614524565b816040519182372090565b5f809160405136810160405236838237604051601481016040523360601b90528260143601925af190604051903d82523d5f602084013e60203d830101604052565b9491848461466f92969593966040519061460782610f85565b5f82525f602083015260408201995f8b52614669606084019a8b925f84525f60808701525f60a0870152606060c087015261465a60e08701915f83526101008801955f87529063ffffffff60e01b169052565b6001600160a01b039091169052565b526155d0565b60ff80614688614682613b948786613b5b565b60f81c90565b16036146ce576146b76146a2846146b2956146c794611be7565b9490955163ffffffff60e01b1690565b611e8d565b5460101c6001600160a01b031690565b9351929190565b63b32eeb6960e01b5f5260045ffd5b8065ffffffffffff8260a01c169182156001146146fb575b60d01c92565b65ffffffffffff92506146f5565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615614794575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220614777565b60a0614825613971565b90602081519101209060208151910120604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352602083015260408201525f6060820152306080820152206719010000000000005f52601a52603a526042601820905f603a52565b9190939293601481019160141161022257803560601c928291906148b2612c55565b602081018690525f516020615beb5f395f51905f525460a81c63ffffffff168082526001600160a01b03909616979091906148ed85806120f6565b6148f6916145a1565b9860348501996149068b886120f6565b61490f916145a1565b90605487019961491f8b8a6120f6565b614928916145a1565b604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c505602082019081526001600160581b03198a169282019290925263ffffffff9390931660608401526001600160a01b0395909516608083015260a082019290925260c081019290925260e08083019190915281526149ac61010082610fa1565b519020905f1461050961029b98614a0d6094986128e1976149ee61287b9761050f97614a26576149db9061481b565b6149e860748d01856120f6565b9161583e565b9e614a046149fc84806120f6565b9290946120f6565b9390928a61374f565b614a20614a1a828b6120f6565b906159dd565b886120f6565b614a2f90614709565b6149db565b80548210156122e4575f5260205f2001905f90565b356001600160c01b0319811692919060088210614a64575050565b6001600160c01b031960089290920360031b82901b16169150565b604090611ed893928152816020820152019061333f565b93929190935f926001614aa883611e8d565b015f5b8154811015614c3857614ad9614ad1614ac48385614a34565b90549060031b1c60501b90565b908160501c90565b939095614af5614aef614682613b948585613b5b565b60ff1690565b808403614c0a5750908181614b2e614b22614b1c614b1684614b4c98611c03565b90614a49565b60c01c90565b6001600160401b031690565b600901918c610100614b44614588868686611c14565b910152611ca9565b939093955b600160f01b1615614b69575b50600101939193614aab565b604051633894f6e760e11b81529196906020908390815f81614b998f6001600160e01b03198d1660048401614a7f565b03926001600160a01b03165af191821561079d575f92614bea575b506001600160a01b038216614bd657600191614bcf91614c75565b9590614b5d565b631f24c1fb60e11b5f52600487905260245ffd5b614c0391925060203d81116134e8576134d98183610fa1565b905f614bb4565b9196909491831115614c2557630760bdcf60e11b5f5260045ffd5b614c2d6122f6565b6101008b0152614b51565b505091929460ff80614c50614682613b948789613b5b565b16036146ce57610100614c6d614588856146b796611ed898611be7565b910152611e8d565b908082186001600160a01b031615606083811b838501821b9081149184901b141717600114614ca5575050600190565b65ffffffffffff60a01b8216916001600160d01b03198082169083168415614d25575b65ffffffffffff60a01b84168015614d15575b858110908618028086189514614d04575b81811190821802189160018060a01b03911716171790565b65ffffffffffff60a01b9450614cec565b5065ffffffffffff60a01b614cdb565b65ffffffffffff60a01b9450614cc8565b903590601e198136030182121561022257018035906001600160401b03821161022257602001918160051b3603831361022257565b8054905f815581614d7a575050565b5f5260205f20908101905b818110614d90575050565b5f8155600101614d85565b356001600160501b0319811692919060168210614db6575050565b6001600160501b031960169290920360031b82901b16169150565b805468010000000000000000811015610f4a57614df391600182018155614a34565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701015f815290565b356001600160f01b0319811692919060028210614e42575050565b6001600160f01b031960029290920360031b82901b16169150565b9190614e699080614d36565b9260fe84118015615161575b615152576001614e8482611e8d565b0154615139575b5f1984015f5b818110614ffb575090614f50614f498387614ee9614f3a614f2161202b614f1b614f1587614f6c9e9f8e614f10614f7a9f8f90611de86127f56127ef614edb614ee19489896122cd565b90611c3f565b9a8b91611e8d565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6122cd565b90611c6d565b90614e27565b614f2a88611e8d565b9060f01c61ffff19825416179055565b6001600160a01b0316966122cd565b8091611c50565b6040519586939092906001600160e01b03191660208501614e12565b03601f198101845283610fa1565b803b15610222575f614fa092604051809481926306d61fe760e41b8352600483016121e2565b038183855af190811561079d575f516020615bab5f395f51905f52926129d592614fe7575b5060408051600681526001600160a01b03909216602083015290918291820190565b806107975f614ff593610fa1565b5f614fc5565b61509690615041600161500d86611e8d565b0161503b61502e615028615022868d8c6122cd565b90611c31565b90614d9b565b6001600160501b03191690565b90614dd1565b61505b611de8611de86127f56127ef614edb868d8c6122cd565b615069614f49838a896122cd565b60405194918591615088916001600160e01b03198a1660208501614e12565b03601f198101855284610fa1565b803b15610222576040516306d61fe760e41b8152925f9184918290849082906150c290600483016121e2565b03925af191821561079d57600192615125575b505f516020615bab5f395f51905f5261511c6150fb6127f56127ef614edb868d8c6122cd565b60408051600581526001600160a01b03909216602083015290918291820190565b0390a101614e91565b806107975f61513393610fa1565b5f6150d5565b61514d600161514783611e8d565b01614d6b565b614e8b565b63b62d956d60e01b5f5260045ffd5b508315614e75565b5f516020615bab5f395f51905f52916040916001600160a01b038216156151e6575b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205284902080546001600160a01b03191693909216929092179055815190600282526020820152a1565b6001915061518b565b91906151fa83611e8d565b916152058280614d36565b9190506001840191600183540103615378575f5b82548110156152b657805f516020615bcb5f395f51905f526152ad8661528b612e2e6141798c61526f88615269615259614ad18f60019e614ac491614a34565b90508c8060a01b03169780614d36565b906122cd565b6040519485939092906001600160e01b03191660208501614e12565b5060408051600581526001600160a01b03909216602083015290918291820190565b0390a101615219565b509361531991506102319392615314614f6c926152d7600161514783611e8d565b8554614f50906152f29060101c6001600160a01b0316611de8565b936153096153008280614d36565b91909280614d36565b5f19019290506122cd565b613fa0565b5080545f516020615bcb5f395f51905f5290615365906153449060101c6001600160a01b0316611de8565b60408051600681526001600160a01b03909216602083015290918291820190565b0390a180546001600160b01b0319169055565b63013dcc8d60e31b5f5260045ffd5b9160138211156153a257823560601c92601401916013190190565b63ba597e7e5f526004601cfd5b9060338111156153a257813560601c92601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af115615424573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b918235826020118160401c176153a257830160208101938135938461545157505050565b01601f190190835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c176153a2578061545957505050565b91906154a481614290565b925f5b8281106154b357505050565b806154dd60019260051b8401358401604081013581019060208235920190602081013590356153d0565b6154e78389613ae3565b52156154f4575b016154a7565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb761553d6155228389613ae3565b51604051918291858352604060208401526040830190610d2c565b0390a16154ee565b919061555081614290565b925f5b82811061555f57505050565b8061558960019260051b8401358401604081013581019060208235920190602081013590356153f7565b6155938288613ae3565b5261559e8187613ae3565b5001615553565b9092608092611ed89594835260018060a01b0316602083015260408201528160608201520190610d2c565b91606083019060016156256155ec845163ffffffff60e01b1690565b6001600160e01b0319165f9081527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f8526020526040902090565b01805493905f5b85811061563c5750505050505050565b61564c614ad1614ac48385614a34565b6001600160a01b031660a0890190815260808901949091615675906001600160f01b0319168652565b61568f615688614682613b948985613b5b565b60ff168a52565b61569d614aef8a5160ff1690565b80840361580c57508581816156c2614b22614b1c614b166157179b9c6156ea98611c03565b8c60c06156dd61458860208401948086526009018688611c14565b9101525160090191611ca9565b949094955b51600160f11b90615709906001600160f01b03191661202b565b166001600160f01b03191690565b15615726575b5060010161562c565b51615739906001600160a01b0316611de8565b602061575f615752615752895163ffffffff60e01b1690565b6001600160e01b03191690565b60e08a01516101008b015160c08c015160405163184dfdbb60e11b815295869490938593849361579e9390926001600160a01b031690600486016155a5565b03915afa90811561079d575f916157ee575b506001600160a01b0381166157da57906001916157d260408a01918251614c75565b90529061571d565b631f24c1fb60e11b5f52600482905260245ffd5b615806915060203d81116134e8576134d98183610fa1565b5f6157b0565b90949083111561582557630760bdcf60e11b5f5260045ffd5b61571790615834365f88612a77565b60c08b01526156ef565b5f516020615beb5f395f51905f52545f9493929060581b6001600160f81b03198116600160f81b036158f9579161589e939161587f611de860209560581c90565b9160405195869485938493637aa8f17760e11b85523060048601611efb565b03915afa90811561079d575f916158da575b505b6001600160e01b0319166374eca2c160e11b016158cb57565b6362467c7760e11b5f5260045ffd5b6158f3915060203d60201161200357611ffb8183610fa1565b5f6158b0565b9094509091906001600160f81b03198116600160f91b0361245b576020916159279160081b958430886145ee565b60405163392dffaf60e01b8152929792958694938593849361595a93909230906001600160e01b031916600487016130d9565b03916001600160a01b03165afa90811561079d575f9161597b575b506158b2565b615994915060203d60201161200357611ffb8183610fa1565b5f615975565b156159a157565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b6159ea61050f8383611b72565b9160048110156159f957505050565b602c8110615b9b57602c820190615a19611de86127f56127ef8487611bc8565b615a43615a35613ba2613b94615a2f87806120f6565b90613b5b565b6001600160f81b0319161590565b80615af6575b611de86127f56127ef85615a9e6102319a87615a82611de86127f56127ef8f9d6128e89f9e8f604c9f6129519f615aa4575b5050611c98565b615a8c8b806120f6565b9390926001600160a01b031690613b64565b88611c98565b6128e8615ae8615aef93606c860190615ae3615ad2611de86127f56127ef615acc87876120f6565b90611bd9565b9586906001600160a01b0316615169565b6120f6565b8091611c7b565b8f87615a7b565b5060405163ecd0596160e01b81526002600482015290949291906020816024816001600160a01b038a165afa93841561079d576127f56127ef84615a9e611de8948b615a82611de86127f56102319f8f9c6128e89f9d8f604c9f936129519f946127ef955f91615b7c575b509f50505050505050505097509a5050959650505050615a49565b615b95915060203d6020116107f2576107e48183610fa1565b5f615b61565b6102319250600491501461599a56fed21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032" export const KERNEL_V07_V3_3_ACCOUNT_V3_LOGIC_CREATECALL: Hex = - "0x0000000000000000000000000000000000000000000000000000000000000000610140806040523461020a576020816162458038038091610020828561020e565b83398101031261020a57516001600160a01b038116810361020a57306080524660a05260a060405161005360408261020e565b6006815260208101906512d95c9b995b60d21b82526040519161007760408461020e565b60058352602083019164181719971960d91b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052604051602081019063deadbeef60e01b82526004815261010160248261020e565b5190516001600160581b031981169190601582106101ea575b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b031916605885901c179055604051615fff9081610246823960805181615765015260a05181615788015260c051816157f8015260e0518161581e015261010051816157440152610120518181816103c4015281816106ac0152818161086601528181610ac401528181610e600152818161115d015281816112ee0152818161132901528181611528015281816119b901528181611aeb015281816125b701526132100152f35b6001600160581b031960159290920360031b82901b161690505f8061011a565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761023157604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001d575b366131b65761001b613185565b005b5f3560e01c8063112d3a7d1461021c578063150b7a02146102175780631626ba7e1461021257806319822f7c1461020d5780631f1b92e3146102085780633659cfe6146102035780633c3b752b146101fe57806352141cd9146101f957806357b3a5f4146101f45780636e6fa0c6146101ef578063721e67f4146101ea57806384b0196e146101e55780638dd7712f146101e057806390ef8862146101db5780639198bdf5146101d65780639517e29f146101d15780639cfd7cff146101cc578063a65d69d4146101c7578063a71763a8146101c2578063adb610a3146101bd578063b8afe17d146101b8578063b9b82941146101b3578063bc197c81146101ae578063c3e58978146101a9578063d03c7914146101a4578063d691c9641461019f578063e6f3d50a1461019a578063e9ae5c5314610195578063f1f7f0f914610190578063f23a6e611461018b578063f2dc691d146101865763fc9c5dec0361000e57611cbd565b611c9f565b611c45565b611c0f565b611adf565b61195f565b61187d565b611830565b61175d565b61164c565b6114f5565b61147f565b61144d565b61131d565b6112d9565b611281565b611151565b61103a565b610f2b565b610e30565b610d92565b610d0c565b610cb1565b610bfe565b610a5e565b6109c8565b61084b565b610695565b610390565b61032f565b6102d5565b6102af565b6001600160a01b0381160361023257565b5f80fd5b359061024182610221565b565b9181601f84011215610232578235916001600160401b038311610232576020838186019501011161023257565b6060600319820112610232576004359160243561028c81610221565b91604435906001600160401b038211610232576102ab91600401610243565b9091565b346102325760206102cb6102c236610270565b92919091611f10565b6040519015158152f35b34610232576080366003190112610232576102f1600435610221565b6102fc602435610221565b6064356001600160401b0381116102325761031b903690600401610243565b5050604051630a85bd0160e11b8152602090f35b34610232576040366003190112610232576004356024356001600160401b0381116102325760209161036861036e923690600401610243565b91613382565b6040516001600160e01b03199091168152f35b90816101209103126102325790565b6060366003190112610232576004356001600160401b038111610232576103bb903690600401610381565b602435604435917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610662576103ff60208201356135ce565b9092919084836001600160f81b0319861615610649575b8261042193946137c7565b9361044661043661043184611ea2565b611fda565b946001600160f81b031916151590565b938480610608575b6105f957602001516001600160a01b0316801591819083806105f2575b6104f2576001926104866104a5925f525f60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b149081156105ea575b501561055d5782610501575b50506104f257816104dc925b6104e0575b506040519081529081906020820190565b0390f35b3490349034903490335af1505f6104cb565b631a0a9b9f60e21b5f5260045ffd5b61055692506105529161053661053061052a61051f61054b95611ed9565b936060810190612006565b90611d1d565b90611e6c565b63ffffffff60e01b165f5260205260405f2090565b5460ff1690565b1590565b5f806104ba565b829192916105b7575b506104f25761052a81606061057c930190612006565b638dd7712f60e01b916001600160e01b03199161059891611e6c565b16036105a857816104dc926104c6565b63dbbb044b60e01b5f5260045ffd5b6105e4915061054b6105cb61055292611ed9565b6105366105306105de6060880188612006565b90611d0c565b5f610566565b90505f6104ae565b508661046b565b633ab3447f60e11b5f5260045ffd5b50805163ffffffff1663ffffffff6106416106385f516020615fdf5f395f51905f525463ffffffff9060c81c1690565b63ffffffff1690565b91161061044e565b5f516020615fdf5f395f51905f525460581b9250610416565b6348f5c3ed60e01b5f5260045ffd5b6004359063ffffffff8216820361023257565b359063ffffffff8216820361023257565b6020366003190112610232576106a9610671565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610841575b15610838576107116107056106ff5f516020615fdf5f395f51905f525460581b90565b60581c90565b6001600160a01b031690565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91610809575b50156106625760405163d68f602560e01b8152916001600160a01b0391909116905f838061076e36343360048501612164565b038183865af19283156107dc575f936107e1575b5061078c90613a5b565b803b1561023257604051630b9dfbed60e11b8152915f9183918290849082906107b890600483016121ad565b03925af180156107dc576107c857005b806107d65f61001b93610fe3565b80610d64565b6120bc565b61078c919350610802903d805f833e6107fa8183610fe3565b8101906120e2565b9290610782565b61082b915060203d602011610831575b6108238183610fe3565b8101906120a4565b5f61073b565b503d610819565b61001b90613a5b565b50303314156106dc565b60203660031901126102325760043561086381610221565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061097c575b15610973576108b96107056106ff5f516020615fdf5f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91610954575b50156106625760405163d68f602560e01b8152916001600160a01b0391909116905f838061091636343360048501612164565b038183865af19283156107dc575f93610934575b5061078c906121be565b61078c91935061094d903d805f833e6107fa8183610fe3565b929061092a565b61096d915060203d602011610831576108238183610fe3565b5f6108e3565b61001b906121be565b5030331415610896565b6001600160581b031981160361023257565b9181601f84011215610232578235916001600160401b038311610232576020808501948460051b01011161023257565b346102325760a0366003190112610232576004356109e581610986565b6024356109f181610221565b6044356001600160401b03811161023257610a10903690600401610243565b6064939193356001600160401b03811161023257610a32903690600401610243565b91608435956001600160401b03871161023257610a5661001b973690600401610998565b969095612325565b608036600319011261023257600435610a7681610986565b602435610a8281610221565b6044356001600160401b03811161023257610aa1903690600401610243565b6064356001600160401b03811161023257610ac0903690600401610243565b91337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610be2575b15610bd457610b176107056106ff5f516020615fdf5f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91610bb5575b50156106625760405163d68f602560e01b8152956001600160a01b039190911694905f8780610b7536343360048501612164565b0381838a5af19687156107dc575f97610b95575b5061078c9596976124a8565b61078c969750610bae903d805f833e6107fa8183610fe3565b9695610b89565b610bce915060203d602011610831576108238183610fe3565b5f610b41565b919361001b959391936124a8565b5030331415610af4565b6001600160e01b031981160361023257565b34610232576020366003190112610232576104dc610c3f600435610c2181610bec565b5f60408051610c2f81610f71565b8281528260208201520152612038565b600160405191610c4e83610f71565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b3461023257604036600319011261023257602060ff610d00600435610cd581610986565b610cea60243591610ce583610bec565b611ed9565b9063ffffffff60e01b165f5260205260405f2090565b54166040519015158152f35b34610232576020366003190112610232576020610d41600435610d2e81610221565b5f604051610d3b81610f91565b52613335565b60405190610d4e82610f91565b546001600160a01b031690819052604051908152f35b5f91031261023257565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610232575f36600319011261023257610dd1610ddf610db0613da7565b604092919251938493600f60f81b855260e0602086015260e0850190610d6e565b908382036040850152610d6e565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610e17575050500390f35b8251845285945060209384019390920191600101610e09565b6040366003190112610232576004356001600160401b03811161023257610e5b903690600401610381565b6024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610662575f908152602081905260409020546001600160a01b03169060609060018314159081610efb575b610ed0610ec9826060610ed7940190612006565b8091611d2b565b9030613e8f565b5015610eec57610ee357005b61001b91613eb4565b63f21e646b60e01b5f5260045ffd5b9150610ed7610ed0610ec9610f21610f19610ec96060880188612006565b903489613e44565b9492505050610eb5565b34610232575f36600319011261023257602063ffffffff5f516020615fdf5f395f51905f525460c81c16604051908152f35b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117610f8c57604052565b610f5d565b602081019081106001600160401b03821117610f8c57604052565b604081019081106001600160401b03821117610f8c57604052565b61012081019081106001600160401b03821117610f8c57604052565b90601f801991011681019081106001600160401b03821117610f8c57604052565b60405190610241604083610fe3565b6040519061024161012083610fe3565b6001600160401b038111610f8c5760051b60200190565b6080366003190112610232576004356001600160401b03811161023257611065903690600401610998565b602435916001600160401b038311610232573660238401121561023257826004013561109081611023565b9361109e6040519586610fe3565b8185526024602086019260061b8201019036821161023257602401915b818310611110575050506044356001600160401b038111610232576110e4903690600401610998565b90606435946001600160401b0386116102325761110861001b963690600401610998565b9590946125ad565b604083360312610232576020604091825161112a81610fac565b61113386610684565b81528286013561114281610221565b838201528152019201916110bb565b61115a36610270565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611277575b1561126d576111b06107056106ff5f516020615fdf5f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f9161124e575b50156106625760405163d68f602560e01b8152936001600160a01b039190911692905f858061120e36343360048501612164565b038183885af19485156107dc575f9561122e575b5061078c93949561277c565b61078c949550611247903d805f833e6107fa8183610fe3565b9493611222565b611267915060203d602011610831576108238183610fe3565b5f6111da565b9161001b9361277c565b503033141561118d565b34610232575f366003190112610232576104dc6040516112a2604082610fe3565b601681527535b2b93732b61730b23b30b731b2b2173b181719971960511b6020820152604051918291602083526020830190610d6e565b34610232575f366003190112610232576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b61132636610270565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611443575b156114395761137c6107056106ff5f516020615fdf5f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f9161141a575b50156106625760405163d68f602560e01b8152936001600160a01b039190911692905f85806113da36343360048501612164565b038183885af19485156107dc575f956113fa575b5061078c939495612ad0565b61078c949550611413903d805f833e6107fa8183610fe3565b94936113ee565b611433915060203d602011610831576108238183610fe3565b5f6113a6565b9161001b93612ad0565b5030331415611359565b34610232575f36600319011261023257602063ffffffff5f516020615fdf5f395f51905f525460a81c16604051908152f35b346102325760203660031901126102325760406114af6004356114a181610986565b6114a9612cfa565b50611ea2565b8151906114bb82610fac565b5463ffffffff81168083526001600160a01b03602092831c81169383019384528451918252925190921690820152f35b8015150361023257565b60603660031901126102325760043561150d81610986565b60243561151981610bec565b604435611525816114eb565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611642575b156116385761157b6107056106ff5f516020615fdf5f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91611619575b50156106625760405163d68f602560e01b8152926001600160a01b039190911691905f84806115d936343360048501612164565b038183875af19384156107dc575f946115f9575b5061078c9293946143db565b61078c939450611612903d805f833e6107fa8183610fe3565b93926115ed565b611632915060203d602011610831576108238183610fe3565b5f6115a5565b9061001b926143db565b5030331415611558565b346102325760a036600319011261023257611668600435610221565b611673602435610221565b6044356001600160401b03811161023257611692903690600401610998565b50506064356001600160401b038111610232576116b3903690600401610998565b50506084356001600160401b038111610232576116d4903690600401610243565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a09092019201905f5b81811061173d5750505090565b82516001600160501b031916845260209384019390920191600101611730565b346102325760203660031901126102325761179c60043561177d81610bec565b60606040805161178c81610f71565b5f81525f6020820152015261206e565b6001604051916117ab83610f71565b805461ffff60f01b8160f01b168452828060a01b039060101c16602084015201906040519182602082549182815201915f5260205f20905f5b81811061180d576104dc85876117fc81880382610fe3565b6040820152604051918291826116e8565b825460501b6001600160501b0319168452602090930192600192830192016117e4565b346102325760203660031901126102325760206102cb600435612d12565b9060406003198301126102325760043591602435906001600160401b038211610232576102ab91600401610243565b6118863661184e565b90916001600160a01b0361189933613335565b54169182156119505760609060018414159485611939575b6118bb9293614661565b92611929575b50506040518091602082016020835281518091526040830190602060408260051b8601019301915f905b8282106118fa57505050500390f35b919360019193955060206119198192603f198a82030186528851610d6e565b96019201920185949391926118eb565b61193291613eb4565b5f806118c1565b6118bb9250611949363487613deb565b92506118b1565b63710c949760e01b5f5260045ffd5b60603660031901126102325760043561197781610986565b6024356001600160401b03811161023257611996903690600401610243565b6044356001600160401b038111610232576119b5903690600401610243565b90337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611ad5575b15611ac957611a0c6107056106ff5f516020615fdf5f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91611aaa575b50156106625760405163d68f602560e01b8152946001600160a01b039190911693905f8680611a6a36343360048501612164565b038183895af19586156107dc575f96611a8a575b5061078c949596612dea565b61078c959650611aa3903d805f833e6107fa8183610fe3565b9594611a7e565b611ac3915060203d602011610831576108238183610fe3565b5f611a36565b91909261001b94612dea565b50303314156119e9565b611ae83661184e565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611c05575b15611bfb57611b3e6107056106ff5f516020615fdf5f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91611bdc575b50156106625760405163d68f602560e01b8152926001600160a01b039190911691905f8480611b9c36343360048501612164565b038183875af19384156107dc575f94611bbc575b5061078c92939461307d565b61078c939450611bd5903d805f833e6107fa8183610fe3565b9392611bb0565b611bf5915060203d602011610831576108238183610fe3565b5f611b68565b9061001b9261307d565b5030331415611b1b565b34610232575f3660031901126102325760205f516020615fdf5f395f51905f525460581b604051906001600160581b0319168152f35b346102325760a036600319011261023257611c61600435610221565b611c6c602435610221565b6084356001600160401b03811161023257611c8b903690600401610243565b505060405163f23a6e6160e01b8152602090f35b346102325760203660031901126102325760206102cb600435613088565b34610232576040366003190112610232576004356001600160401b03811161023257611d04611cf26020923690600401610381565b60243590611cff82610221565b613095565b604051908152f35b906008116102325760040190600490565b906004116102325790600490565b909291928360041161023257831161023257600401916003190190565b906018116102325760040190601490565b906014116102325790601490565b906020116102325790602090565b90929192836020116102325783116102325760200191601f190190565b909291928360011161023257831161023257600101915f190190565b906009116102325760010190600890565b909291928360091161023257831161023257600901916008190190565b906016116102325790601690565b906016116102325760020190601490565b909291928360161161023257831161023257601601916015190190565b906002116102325790600290565b909291928360141161023257831161023257601401916013190190565b90602c116102325760180190601490565b90939293848311610232578411610232578101920390565b356001600160e01b0319811692919060048210611e87575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85060205260405f2090565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85160205260405f2090565b90929060018103611f5f57506001600160a01b0392611f599250611f49915060581b600160581b600160f81b0316600160f81b17611ea2565b5460201c6001600160a01b031690565b16151590565b60028103611f9357506001600160a01b0392611f5992506107059150611f86908416613335565b546001600160a01b031690565b600303611fd357611fb4611faf610530600193611fc295611d1d565b612038565b01546001600160a01b031690565b6001600160a01b0390811691161490565b5050505f90565b90604051611fe781610fac565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561023257018035906001600160401b0382116102325760200191813603831361023257565b63ffffffff60e01b165f527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b60205260405f2090565b63ffffffff60e01b165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85260205260405f2090565b9081602091031261023257516120b9816114eb565b90565b6040513d5f823e3d90fd5b6001600160401b038111610f8c57601f01601f191660200190565b602081830312610232578051906001600160401b038211610232570181601f8201121561023257805190612115826120c7565b926121236040519485610fe3565b8284526020838301011161023257815f9260208093018386015e8301015290565b908060209392818452848401375f828201840152601f01601f1916010190565b6120b9939260609260018060a01b03168252602082015281604082015201905f612144565b6120b9949260609260018060a01b0316825260208201528160408201520191612144565b9060206120b9928181520190610d6e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2565b60405190612220602083610fe3565b5f8252565b90813b5f612232826120c7565b936122406040519586610fe3565b82855260208501903c565b80516020909101516001600160f01b031981169291906002821061226d575050565b6001600160f01b031960029290920360031b82901b16169150565b5f516020615fdf5f395f51905f52805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b5f52603260045260245ffd5b908210156122e4576102ab9160051b810190612006565b6122b9565b908092918237015f815290565b3d15612320573d90612307826120c7565b916123156040519384610fe3565b82523d5f602084013e565b606090565b94939291909695966001600160581b031961235e6123515f516020615fdf5f395f51905f525460581b90565b6001600160581b03191690565b1615801590612480575b612472576001600160581b03198616156104f2576001600160f81b03198616600160f81b14158061245a575b61244b57856123a56123f297613b20565b6123c66123b0611004565b60018152925b6001600160a01b03166020840152565b5f516020615fdf5f395f51905f52805463ffffffff60a81b1916600160a81b179055613b86565b613b86565b5f5b81811061240057505050565b5f8061240d8385876122cd565b9061241d604051809381936122e9565b039082305af161242b6122f6565b5015612439576001016123f4565b636534eae560e11b5f5260045260245ffd5b6361c4e91b60e11b5f5260045ffd5b506001600160f81b03198616600160f91b1415612394565b62dc149f60e41b5f5260045ffd5b5061ef0160f01b6001600160f01b03196124a161249c30612225565b61224b565b1614612368565b94939291906001600160581b03198616156104f2576001600160f81b03198616600160f81b141580612553575b61244b576124e286613b20565b6001600160a01b036124f6611f4988611ea2565b1615612505575b505050505050565b612548956123ed61252b5f516020615fdf5f395f51905f525463ffffffff9060a81c1690565b926123b66040519461253e604087610fe3565b63ffffffff168552565b5f80808080806124fd565b506001600160f81b03198616600160f91b14156124d5565b9060405161257881610f71565b82546001600160a01b03908116825260019390930154928316602082015260589290921b6001600160f81b0319166040830152565b95909491939092337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580612721575b156127135761260a6107056106ff5f516020615fdf5f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f916126f4575b50156106625760405163d68f602560e01b8152966001600160a01b039190911695905f888061266836343360048501612164565b0381838b5af19788156107dc575f986126d4575b50612688969798613f2d565b803b1561023257604051630b9dfbed60e11b8152915f9183918290849082906126b490600483016121ad565b03925af180156107dc576126c6575b50565b806107d65f61024193610fe3565b6126889798506126ed903d805f833e6107fa8183610fe3565b979661267c565b61270d915060203d602011610831576108238183610fe3565b5f612634565b919390929461024196613f2d565b50303314156125e7565b9160206120b9938181520191612144565b356bffffffffffffffffffffffff1981169291906014821061275c575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b9091600182036128f8575f516020615f9f5f395f51905f5293906054600160f81b600160581b600160f81b03605887901b1617916127c66127bc84611ea2565b5463ffffffff1690565b5f516020615fdf5f395f51905f525460a81c63ffffffff169063ffffffff8083169116146128e0575b5061285861283161070561282b61282561281e5f516020615fdf5f395f51905f525463ffffffff9060a81c1690565b9886611d59565b9061273c565b60601c90565b61284861283c611004565b63ffffffff9097168752565b6001600160a01b03166020860152565b612883601482019461286a8680612006565b61287a6034869493940189612006565b93909288613b86565b019160046128918483612006565b9050146128bf575b5050505b604080519182526001600160a01b03909216602082015290819081015b0390a1565b61053061052a6128d8946128d293612006565b90614376565b5f8080612899565b6128f29060010163ffffffff16612288565b5f6127ef565b6002820361296057806129555f516020615f9f5f395f51905f5295603461292f61070561282b612825601461295b99019588611d59565b9361294e8561293e8580612006565b906001600160a01b038c166142e5565b0190612006565b91614122565b61289d565b600382036129d657806129555f516020615f9f5f395f51905f529560386129ce61070561282b612825601861295b9901956129c88c8a6129b661070561282b612825876129b06105308288611d1d565b95611d48565b6129c08b80612006565b939092613f9a565b88611d48565b930190612006565b600482148015612a74575b8015612a6a575b15612a5b576001600160a01b03831693843b1561023257612a22945f92836040518098819582946306d61fe760e41b84526004840161272b565b03925af19283156107dc575f516020615f9f5f395f51905f5293612a47575b5061289d565b806107d65f612a5593610fe3565b5f612a41565b631092ef5760e11b5f5260045ffd5b50600682146129e8565b50600582146129e1565b359060208110612a8c575090565b5f199060200360031b1b1690565b929192612aa6826120c7565b91612ab46040519384610fe3565b829481845281830111610232578281602093845f960137010152565b909160018203612b41575f516020615fbf5f395f51905f5293612b1f91612b1991612b10600160f81b600160581b600160f81b03605889901b16176144a9565b505b3691612a9a565b83614509565b50604080519182526001600160a01b03909216602082015290819081016128ba565b60028203612bb1576001600160a01b038381165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902080546001600160a01b031981169091555f516020615fbf5f395f51905f5295612b1f93612b19939092165b50612b12565b919060038103612bd6575050610530612bd292612bcd92611d1d565b614445565b5050565b909160048203612c5f57612b19612b1f915f516020615fbf5f395f51905f5295612c0e5f516020615fdf5f395f51905f525460581b90565b612c1a611f4982611ea2565b6001600160a01b03888116911614612c325750612b12565b612c3e612c5991611ea2565b8054640100000000600160c01b031916640100000000179055565b5f612bab565b600582148015612cf0575b15612a5b575f516020615fdf5f395f51905f525460581b612c94612c8e8684611d67565b90612a7e565b906001600160f81b03198116600160f91b14612cc8575b5050612b19612b1f915f516020615fbf5f395f51905f5295612b12565b60081b6001600160e01b03191614612ce1575f80612cab565b6313002bdd60e31b5f5260045ffd5b5060068214612c6a565b60405190612d0782610fac565b5f6020838281520152565b612d26818060081b918160301b9160501b90565b929091906001600160f81b03198116600160f81b14159081612dd6575b81612dc1575b81612da8575b50611fd35760ff60f81b16600160f81b8114159081612d9e575b50612d98576001600160e01b031916612d93576001600160501b031916612d8f57600190565b5f90565b505f90565b50505f90565b905015155f612d69565b6001600160f81b031916607f60f91b141590505f612d4f565b6001600160f81b031980821614159150612d49565b6001600160f81b0319811615159150612d43565b9094939291612df8826144a9565b916001600160f81b03198116600160f81b03612e70575f516020615fbf5f395f51905f5291612e46612e406102419899612e689460018060a01b039060581c16933691612a9a565b82614509565b5060408051600181526001600160a01b03909216602083015290918291820190565b0390a161490f565b9294919290506001600160f81b03198116600160f91b0361244b5760081b92612e988461206e565b94612ea38780614880565b949050600187019460018654010361306e5794956001600160e01b0319871695905f5b8654811015612f7c57805f516020615fbf5f395f51905f52612f738c612f51612f43612e408e612f318f99612f2b612f1b612f13612f068460019f6148b5565b90549060031b1c60501b90565b908160501c90565b90508c8060a01b03169780614880565b906122cd565b604094919451948593602085016148ca565b03601f198101835282610fe3565b5060408051600581526001600160a01b03909216602083015290918291820190565b0390a101612ec6565b509194509296612ff761300a916130056130699598612fa86001612fa26102419d61206e565b016148df565b8554612fe590612fc39060101c6001600160a01b0316610705565b93612fda612fd18280614880565b91909280614880565b5f19019290506122cd565b604095919551958693602085016148ca565b03601f198101845283610fe3565b614509565b5080545f516020615fbf5f395f51905f5290613056906130359060101c6001600160a01b0316610705565b60408051600681526001600160a01b03909216602083015290918291820190565b0390a180546001600160b01b0319169055565b61490f565b63013dcc8d60e31b5f5260045ffd5b906126c39291614661565b60071115612d8f57600190565b612f439061317f906130b06001600160a01b03823516610705565b906131516020820135612f436130d26130cc6040860186612006565b9061499a565b936130e36130cc6060830183612006565b90608081013560a0820135906131056130cc60c08501359460e0810190612006565b93604051988997602089019b8c94919260e0969399989794919961010087019a60018060a01b03168752602087015260408601526060850152608084015260a083015260c08201520152565b51902060408051602081019283526001600160a01b03909516908501525f6060850152929182906080820190565b51902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6131d26131cd5f356001600160e01b031916612038565b61256b565b80516001600160a01b03906131e8908216610705565b16156133265780516060906001600160a01b0316806002600160a01b031981016133045750507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610662575b60408201516001600160f81b031916806132c45750602082015161326b906001600160a01b03166149a5565b92905b156132bc57516001600160a01b031690600182141582816132a8575b50613298575b825160208401f35b6132a191613eb4565b5f80613290565b6001600160a01b039150811614155f61328a565b825160208401fd5b6001600160f81b0319908116036132f55760208201516132ee906001600160a01b03163690613e6a565b929061326e565b632d6a6bb760e01b5f5260045ffd5b600103613312575b5061323f565b613320915036903490613deb565b5f61330c565b631cd4b64760e21b5f5260045ffd5b6001600160a01b03165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b9081602091031261023257516120b981610bec565b9161338c916149e7565b919080836001600160f81b03198416156135ae575b60208110159182613577575b82613561575b50506133c161043184611ea2565b60208101516001600160a01b03906133da908216610705565b16158061354e575b6104f2576001600160f81b0319841615159081613515575b506105f9576001600160f81b03198316600160f81b0361348e5790613426602094939261344496614a39565b604051637aa8f17760e11b8152958694859384933360048601612189565b039160581c6001600160a01b03165afa9081156107dc575f91613465575090565b6120b9915060203d602011613487575b61347f8183610fe3565b81019061336d565b503d613475565b92916001600160f81b03198116600160f91b036134ee5760081b93600160f11b6134d16134c46134bd8861206e565b5460f01b90565b6001600160f01b03191690565b166134df576120b994614b77565b635b71057960e01b5f5260045ffd5b929391929091906001600160f81b03191661244b576120b99361351091614a39565b614a93565b5163ffffffff16905063ffffffff6135456106385f516020615fdf5f395f51905f525463ffffffff9060c81c1690565b9116105f6133fa565b506001600160f81b0319841615156133e2565b8192955061356f9350611d75565b925f806133b3565b91507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a6135a7612c8e8385611d67565b14916133ad565b92506135c85f516020615fdf5f395f51905f525460581b90565b926133a1565b90818060081b9160ff839260f01c166002146135e657565b6001600160d81b031983169150565b9080601f83011215610232578160206120b993359101612a9a565b9190916101208184031261023257613626611013565b9261363082610236565b84526020820135602085015260408201356001600160401b038111610232578161365b9184016135f5565b604085015260608201356001600160401b038111610232578161367f9184016135f5565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b03811161023257816136c19184016135f5565b60e08501526101008201356001600160401b038111610232576136e492016135f5565b610100830152565b90816020910312610232575190565b80516001600160a01b031682526120b9916020820151602082015261010061377c61374c61373a60408601516101206040870152610120860190610d6e565b60608601518582036060870152610d6e565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610d6e565b92015190610100818403910152610d6e565b9392916137ab9060409286526060602087015260608601906136fb565b930152565b9291906137ab6020916040865260408601906136fb565b9290925f926137d63682613610565b916137e5610100830183612006565b918193835f93602082101580613a26575b6139e7575b5050506001600160f81b031916600160f81b145b6139c0575b506001600160f81b03198616600160f81b036138ab575050604051639700320360e01b815293602092859283915f91839161385291600484016137b0565b039260581c6001600160a01b03165af19081156107dc576120b9925f9261387a575b50615053565b61389d91925060203d6020116138a4575b6138958183610fe3565b8101906136ec565b905f613874565b503d61388b565b909491939092916001600160f81b03198116600160f91b0361395c5760081b93600160f01b6138df6134c46134bd8861206e565b1661394d575f6138ff6138f960209661392999858a614e64565b94615053565b604051630ccab7a160e01b8152979096889586948593926001600160e01b0319166004850161378e565b03926001600160a01b03165af19081156107dc576120b9925f9261387a5750615053565b6314b9743f60e01b5f5260045ffd5b919350506001600160f81b03191661244b576139b190630b135d3f60e11b9361351063ffffffff60e01b946020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b16036139bb575f90565b600190565b916139cd93955086614c2c565b9193916139db368284612a9a565b6101008401525f613814565b9195509250829196506139fa9350611d75565b9091613a07368385612a9a565b61010085015261380f613a1d6001923390613095565b95905f806137fb565b507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a613a55612c8e8484611d67565b146137f6565b5f516020615fdf5f395f51905f5254600a63ffffffff8260a81c16019063ffffffff8211613b0c5763ffffffff83811692168211613afd57613aa59060c81c63ffffffff16610638565b10156105f9575f516020615fdf5f395f51905f52805463ffffffff60c81b60c893841b1663ffffffff60c81b1990911617908190559081901c63ffffffff9081169160a81c168111613af45750565b61024190612288565b63e60fd64760e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88918060581c6001600160581b0360a81b5f516020615fdf5f395f51905f525416175f516020615fdf5f395f51905f5255604051906001600160581b0319168152a1565b929490939193613b986127bc85611ea2565b5f516020615fdf5f395f51905f525460a81c63ffffffff169063ffffffff808316911614613d8f575b506020810180516001600160a01b031615613d86575b5f516020615fdf5f395f51905f525460a81c63ffffffff1663ffffffff613c05610638855163ffffffff1690565b911614801590613d5a575b6105f957613c5e613c6b92613c2487611ea2565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b915f196001600160a01b03841601613d49575b5050506001600160f81b03198116600160f81b03613d265760581c6001600160a01b031690813b15610232576040516306d61fe760e41b8152925f9184918291613ccc91906004840161272b565b038183855af19081156107dc575f516020615f9f5f395f51905f52926128ba92613d12575060408051600181526001600160a01b03909216602083015290918291820190565b806107d65f613d2093610fe3565b5f612e46565b91506001600160f81b03198216600160f91b0361244b576102419160081b6151a6565b613d5292614122565b5f8080613c7e565b50613d676127bc86611ea2565b63ffffffff613d7d610638855163ffffffff1690565b91161015613c10565b60018152613bd7565b613da19060010163ffffffff16612288565b5f613bc1565b6040908151613db68382610fe3565b600681526512d95c9b995b60d21b602082015291613dd681519182610fe3565b6005815264181719971960d91b602082015290565b91613e12925f8080946040519687958694859363d68f602560e01b85523360048601612189565b03926001600160a01b03165af19081156107dc575f91613e30575090565b6120b991503d805f833e6107fa8183610fe3565b5f9283613e1295936040519687958694859363d68f602560e01b85523360048601612189565b5f9060405192808385378338925af4913d82523d5f602084013e60203d830101604052565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b6001600160a01b0316803b1561023257604051630b9dfbed60e11b815260206004820152915f918391829084908290613ef1906024830190610d6e565b03925af180156107dc57613f025750565b5f61024191610fe3565b8051156122e45760200190565b80518210156122e45760209160051b010190565b909593919492965f5b87811015613f8657600190613f808a89613f6c8489613f65828060051b8c013595613f6087610986565b613f19565b51946122cd565b90613f78868d8d6122cd565b949093613b86565b01613f36565b509650505050505050565b90156122e45790565b9293929091906001600160a01b03821615614113575b613fb990612038565b93613fe5613fd8613fca8684613f91565b356001600160f81b03191690565b6001600160f81b03191690565b936001600160f81b031985166140eb576001600160a01b0384169161400c91908190611d92565b823b1561023257614036925f92836040518096819582946306d61fe760e41b84526004840161272b565b03925af19485156107dc5761409a6140ba93600193610241986140d7575b5060408051600381526001600160a01b03881660208201525f516020615f9f5f395f51905f529190a15b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107d65f6140e593610fe3565b5f614054565b50909390506001600160f81b0319808416036132f55760016140ba9161409a6102419661407e565b6001600160a01b039150613fb0565b6001600160a01b03169190821580156142db575b6142d65760405163d60b347f60e01b8152306004820152602081602481875afa9081156107dc575f916142b7575b506141fb57908061417492611d92565b9190813b15610232576040516306d61fe760e41b8152925f918491829161419f91906004840161272b565b038183855af19081156107dc575f516020615f9f5f395f51905f52926128ba926141e7575b505b60408051600481526001600160a01b03909216602083015290918291820190565b806107d65f6141f593610fe3565b5f6141c4565b81151580614298575b614222575b50506128ba5f516020615f9f5f395f51905f52916141c6565b908061422d92611d92565b9190813b15610232576040516306d61fe760e41b8152925f918491829161425891906004840161272b565b038183855af19081156107dc575f516020615f9f5f395f51905f52926128ba92614284575b5091614209565b806107d65f61429293610fe3565b5f61427d565b506001600160f81b0319806142b0613fca8585613f91565b1614614204565b6142d0915060203d602011610831576108238183610fe3565b5f614164565b505050565b5060018314614136565b926142f0908461549e565b8161433f5750505f80916040518260208201916306d61fe760e41b835261432981612f4360248201604090602081525f60208201520190565b51926001600160a01b03165af1506126c36122f6565b6001600160a01b039092169190823b15610232576126b4925f92836040518096819582946306d61fe760e41b84526004840161272b565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a916060916143a882610cea83611ed9565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b907f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a9260609261440e83610cea83611ed9565b9115159160ff1981541660ff84161790556040519263ffffffff60e01b1683526001600160581b03191660208301526040820152a1565b61444f5f91612038565b80546001600160a01b031981168255600190910180546001600160a01b0390921693916001600160f81b0319605882901b1615614498575b5080546001600160a81b0319169055565b6001600160a01b031692505f614487565b906001600160581b03195f516020615fdf5f395f51905f525460581b166001600160581b0319831614612ce1576144f56001600160a01b036144ea84611ea2565b5460201c1692611ea2565b8054640100000000600160c01b0319169055565b91907f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3905a905f80604051936145698561455b6020820196638a91b0e360e01b88526020602484018181520190610d6e565b03601f198101875286610fe3565b60405193614578602086610fe3565b828552602085019583908a905f368a375193f1913d90816145bf575b815f9293523e604080516001600160a01b0390951685528115156020860152909390819081016128ba565b5f9150614594565b604080519091906145d88382610fe3565b6001815291601f1901825f5b8281106145f057505050565b8060606020809385010152016145e4565b9061460b82611023565b6146186040519182610fe3565b8281528092614629601f1991611023565b01905f5b82811061463957505050565b80606060208093850101520161462d565b9060406120b9925f81528160208201520190610d6e565b600881901b9291906001600160f81b03198116600160f81b036146f4575090614689916155ca565b90916001600160f81b031981166146a457506120b9916156e2565b6001600160f81b031916600160f81b036146c1576120b991615636565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b9293926001600160f81b031981166147ac5750906147119161554c565b9161471a6145c7565b956001600160f81b03198116614747575061473493615594565b61473d83613f0c565b526126c382613f0c565b6001600160f81b031916600160f81b036146c1576147649361556d565b61476d84613f0c565b52610241577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76128ba61479f84613f0c565b516040519182918261464a565b909391906001600160f81b0319908116036146c1576147d66147dc916147d06145c7565b95615524565b91613e8f565b6147e885939293613f0c565b526001600160f81b03198116600160f81b0361483357501561480657565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76128ba61479f84613f0c565b6001600160f81b0319166146c1576102415760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b903590601e198136030182121561023257018035906001600160401b03821161023257602001918160051b3603831361023257565b80548210156122e4575f5260205f2001905f90565b9092809260209483528483013701015f815290565b8054905f8155816148ee575050565b5f5260205f20908101905b818110614904575050565b5f81556001016148f9565b9091906001600160a01b031680158015614990575b6142d65781156122e4575f516020615fbf5f395f51905f52926128ba926001600160f81b03198235811614614977575b505060408051600481526001600160a01b03909216602083015290918291820190565b612b1281612e409261498894611d92565b505f80614954565b5060018114614924565b816040519182372090565b5f809160405136810160405236838237604051601481016040523360601b90528260143601925af190604051903d82523d5f602084013e60203d830101604052565b9182358060f81c805f14614a2b5780600114614a1e57600214614a08575f80fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b505060015f9301915f190190565b60405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152614a78606082610fe3565b5190209015614a8a576120b990615854565b6120b990615742565b9190614aa0913691612a9a565b604051916020820191805180604014614b2b57604114614acd5750505050505b638baa579f5f526004601cfd5b80606060409201515f1a60205201516060525b5f52516040526020600160805f825afa51905f6060526040523d614b05575050614ac0565b6001600160a01b03163003614b1f57630b135d3f60e11b90565b6001600160e01b031990565b506040015160ff81901c601b016020526001600160ff1b0316606052614ae0565b90926080926120b99694835260018060a01b0316602083015260408201528160608201520191612144565b614b9065ffffffffffff929594614b9c948733856158c9565b97929491959095615993565b5091164210908115614c1a575b50614c0757602094614bba91614a39565b60405163392dffaf60e01b815295869485938493614be993929133906001600160e01b03191660048701614b4c565b03916001600160a01b03165afa9081156107dc575f91613465575090565b506001600160e01b031995945050505050565b65ffffffffffff91501642115f614ba9565b9190939293601481019160141161023257803560601c92829190614c4e612cfa565b6001600160a01b03909516602086019081529490614cad614c716127bc83611ea2565b5f516020615fdf5f395f51905f525460a81c63ffffffff169063ffffffff808316911603614e125760010163ffffffff165b63ffffffff168352565b815163ffffffff1695516001600160a01b031697614ccb8580612006565b614cd49161499a565b986034850199614ce48b88612006565b614ced9161499a565b906054870199614cfd8b8a612006565b614d069161499a565b604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c505602082019081526001600160581b03198a169282019290925263ffffffff9390931660608401526001600160a01b0395909516608083015260a082019290925260c081019290925260e0808301919091528152614d8a61010082610fe3565b519020905f1461052a6102ab98614deb60949861294e97614dcc6128d29761053097614e0457614db990615854565b614dc660748d0185612006565b91615c58565b9e614de2614dda8480612006565b929094612006565b9390928a613b86565b614dfe614df8828b612006565b90615dd2565b88612006565b614e0d90615742565b614db9565b614ca3565b356001600160c01b0319811692919060088210614e32575050565b6001600160c01b031960089290920360031b82901b16169150565b6040906120b99392815281602082015201906136fb565b93929190935f926001614e768361206e565b015f5b8154811015614ff757614e92612f13612f0683856148b5565b939095614eb4614eae614ea8613fca8585613f91565b60f81c90565b60ff1690565b808403614fc95750908181614eed614ee1614edb614ed584614f0b98611dae565b90614e17565b60c01c90565b6001600160401b031690565b600901918c610100614f03612b12868686611dbf565b910152611e54565b939093955b600160f01b1615614f28575b50600101939193614e79565b604051633894f6e760e11b81529196906020908390815f81614f588f6001600160e01b03198d1660048401614e4d565b03926001600160a01b03165af19182156107dc575f92614fa9575b506001600160a01b038216614f9557600191614f8e91615053565b9590614f1c565b631f24c1fb60e11b5f52600487905260245ffd5b614fc291925060203d81116138a4576138958183610fe3565b905f614f73565b9196909491831115614fe457630760bdcf60e11b5f5260045ffd5b614fec612211565b6101008b0152614f10565b505091929460ff8061500f614ea8613fca8789613f91565b16036150445761010061502c612b1285615034966120b998611d92565b91015261206e565b5460101c6001600160a01b031690565b63b32eeb6960e01b5f5260045ffd5b908082186001600160a01b031615606083811b838501821b9081149184901b141717600114615083575050600190565b65ffffffffffff60a01b8216916001600160d01b03198082169083168415615103575b65ffffffffffff60a01b841680156150f3575b8581109086180280861895146150e2575b81811190821802189160018060a01b03911716171790565b65ffffffffffff60a01b94506150ca565b5065ffffffffffff60a01b6150b9565b65ffffffffffff60a01b94506150a6565b356001600160501b031981169291906016821061512f575050565b6001600160501b031960169290920360031b82901b16169150565b805468010000000000000000811015610f8c5761516c916001820181556148b5565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b356001600160f01b031981169291906002821061226d575050565b91906151b29080614880565b9260fe84118015615496575b6154875760016151cd8261206e565b0154615474575b5f1984015f5b818110615336575090615299615292838761523261528361526a6134c461526461525e87612ff79e9f8e6152596152b59f8f9061070561282b61282561522461522a9489896122cd565b90611dea565b9a8b9161206e565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6122cd565b90611e18565b9061518b565b6152738861206e565b9060f01c61ffff19825416179055565b6001600160a01b0316966122cd565b8091611dfb565b6040519586939092906001600160e01b031916602085016148ca565b803b15610232575f6152db92604051809481926306d61fe760e41b8352600483016121ad565b038183855af19081156107dc575f516020615f9f5f395f51905f52926128ba92615322575b5060408051600681526001600160a01b03909216602083015290918291820190565b806107d65f61533093610fe3565b5f615300565b6153d19061537c60016153488661206e565b0161537661536961536361535d868d8c6122cd565b90611ddc565b90615114565b6001600160501b03191690565b9061514a565b61539661070561070561282b612825615224868d8c6122cd565b6153a4615292838a896122cd565b604051949185916153c3916001600160e01b03198a16602085016148ca565b03601f198101855284610fe3565b803b15610232576040516306d61fe760e41b8152925f9184918290849082906153fd90600483016121ad565b03925af19182156107dc57600192615460575b505f516020615f9f5f395f51905f5261545761543661282b612825615224868d8c6122cd565b60408051600581526001600160a01b03909216602083015290918291820190565b0390a1016151da565b806107d65f61546e93610fe3565b5f615410565b6154826001612fa28361206e565b6151d4565b63b62d956d60e01b5f5260045ffd5b5083156151be565b5f516020615f9f5f395f51905f52916040916001600160a01b0382161561551b575b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205284902080546001600160a01b03191693909216929092179055815190600282526020820152a1565b600191506154c0565b91601382111561553f57823560601c92601401916013190190565b63ba597e7e5f526004601cfd5b90603381111561553f57813560601c92601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af1156155c1573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b918235826020118160401c1761553f5783016020810193813593846155ee57505050565b01601f190190835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c1761553f57806155f657505050565b919061564181614601565b925f5b82811061565057505050565b8061567a60019260051b84013584016040810135810190602082359201906020810135903561556d565b6156848389613f19565b5215615691575b01615644565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76156da6156bf8389613f19565b51604051918291858352604060208401526040830190610d6e565b0390a161568b565b91906156ed81614601565b925f5b8281106156fc57505050565b8061572660019260051b840135840160408101358101906020823592019060208101359035615594565b6157308288613f19565b5261573b8187613f19565b50016156f0565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156157cd575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206157b0565b60a061585e613da7565b90602081519101209060208151910120604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352602083015260408201525f6060820152306080820152206719010000000000005f52601a52603a526042601820905f603a52565b9491848461594a9296959396604051906158e282610fc7565b5f82525f602083015260408201995f8b52615944606084019a8b925f84525f60808701525f60a0870152606060c087015261593560e08701915f83526101008801955f87529063ffffffff60e01b169052565b6001600160a01b039091169052565b526159ea565b60ff8061595d614ea8613fca8786613f91565b160361504457615034615977846159879561598c94611d92565b9490955163ffffffff60e01b1690565b61206e565b9351929190565b8065ffffffffffff8260a01c169182156001146159b1575b60d01c92565b65ffffffffffff92506159ab565b90926080926120b99594835260018060a01b0316602083015260408201528160608201520190610d6e565b9160608301906001615a3f615a06845163ffffffff60e01b1690565b6001600160e01b0319165f9081527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f8526020526040902090565b01805493905f5b858110615a565750505050505050565b615a66612f13612f0683856148b5565b6001600160a01b031660a0890190815260808901949091615a8f906001600160f01b0319168652565b615aa9615aa2614ea8613fca8985613f91565b60ff168a52565b615ab7614eae8a5160ff1690565b808403615c265750858181615adc614ee1614edb614ed5615b319b9c615b0498611dae565b8c60c0615af7612b1260208401948086526009018688611dbf565b9101525160090191611e54565b949094955b51600160f11b90615b23906001600160f01b0319166134c4565b166001600160f01b03191690565b15615b40575b50600101615a46565b51615b53906001600160a01b0316610705565b6020615b79615b6c615b6c895163ffffffff60e01b1690565b6001600160e01b03191690565b60e08a01516101008b015160c08c015160405163184dfdbb60e11b8152958694909385938493615bb89390926001600160a01b031690600486016159bf565b03915afa9081156107dc575f91615c08575b506001600160a01b038116615bf45790600191615bec60408a01918251615053565b905290615b37565b631f24c1fb60e11b5f52600482905260245ffd5b615c20915060203d81116138a4576138958183610fe3565b5f615bca565b909490831115615c3f57630760bdcf60e11b5f5260045ffd5b615b3190615c4e365f88612a9a565b60c08b0152615b09565b5f516020615fdf5f395f51905f52545f9493929060581b6001600160f81b03198116600160f81b03615d135791615cb89391615c9961070560209560581c90565b9160405195869485938493637aa8f17760e11b85523060048601612189565b03915afa9081156107dc575f91615cf4575b505b6001600160e01b0319166374eca2c160e11b01615ce557565b6362467c7760e11b5f5260045ffd5b615d0d915060203d6020116134875761347f8183610fe3565b5f615cca565b90949192916001600160f81b03198216600160f91b03615db45750602091615d419160081b958430886158c9565b60405163392dffaf60e01b81529297929586949385938493615d7493909230906001600160e01b03191660048701614b4c565b03916001600160a01b03165afa9081156107dc575f91615d95575b50615ccc565b615dae915060203d6020116134875761347f8183610fe3565b5f615d8f565b94906001600160f81b03191661244b57615dcd92614a93565b615ccc565b615ddf6105308383611d1d565b91602c8110615f8257602c820190615e0061070561282b6128258487611d48565b615e2a615e1c613fd8613fca615e168780612006565b90613f91565b6001600160f81b0319161590565b80615edd575b61070561282b61282585615e856102419a87615e6961070561282b6128258f9d6129559f9e8f604c9f6129ce9f615e8b575b5050611e43565b615e738b80612006565b9390926001600160a01b031690613f9a565b88611e43565b612955615ecf615ed693606c860190615eca615eb961070561282b612825615eb38787612006565b90611d59565b9586906001600160a01b031661549e565b612006565b8091611e26565b8f87615e62565b5060405163ecd0596160e01b81526002600482015290949291906020816024816001600160a01b038a165afa9384156107dc5761282b61282584615e85610705948b615e6961070561282b6102419f8f9c6129559f9d8f604c9f936129ce9f94612825955f91615f63575b509f50505050505050505097509a5050959650505050615e30565b615f7c915060203d602011610831576108238183610fe3565b5f615f48565b90506004915003615f8f57565b637a210a5d60e11b5f5260045ffdfed21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032" + "0x0000000000000000000000000000000000000000000000000000000000000000610140806040523461020a576020816161db8038038091610020828561020e565b83398101031261020a57516001600160a01b038116810361020a57306080524660a05260a060405161005360408261020e565b6006815260208101906512d95c9b995b60d21b82526040519161007760408461020e565b60058352602083019164302e332e3360d81b8352519020915190208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206101005261012052604051602081019063deadbeef60e01b82526004815261010160248261020e565b5190516001600160581b031981169190601582106101ea575b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b031916605885901c179055604051615f9590816102468239608051816156fb015260a0518161571e015260c0518161578e015260e051816157b4015261010051816156da0152610120518181816103c4015281816106ac0152818161086601528181610ac401528181610e600152818161115d015281816112ee0152818161132901528181611528015281816119b901528181611aeb015281816125b901526132050152f35b6001600160581b031960159290920360031b82901b161690505f8061011a565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761023157604052565b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001d575b366131ab5761001b61317a565b005b5f3560e01c8063112d3a7d1461021c578063150b7a02146102175780631626ba7e1461021257806319822f7c1461020d5780631f1b92e3146102085780633659cfe6146102035780633c3b752b146101fe57806352141cd9146101f957806357b3a5f4146101f45780636e6fa0c6146101ef578063721e67f4146101ea57806384b0196e146101e55780638dd7712f146101e057806390ef8862146101db5780639198bdf5146101d65780639517e29f146101d15780639cfd7cff146101cc578063a65d69d4146101c7578063a71763a8146101c2578063adb610a3146101bd578063b8afe17d146101b8578063b9b82941146101b3578063bc197c81146101ae578063c3e58978146101a9578063d03c7914146101a4578063d691c9641461019f578063e6f3d50a1461019a578063e9ae5c5314610195578063f1f7f0f914610190578063f23a6e611461018b578063f2dc691d146101865763fc9c5dec0361000e57611cc0565b611c9f565b611c45565b611c0f565b611adf565b61195f565b61187d565b611830565b61175d565b61164c565b6114f5565b61147f565b61144d565b61131d565b6112d9565b611281565b611151565b61103a565b610f2b565b610e30565b610d92565b610d0c565b610cb1565b610bfe565b610a5e565b6109c8565b61084b565b610695565b610390565b61032f565b6102d5565b6102af565b6001600160a01b0381160361023257565b5f80fd5b359061024182610221565b565b9181601f84011215610232578235916001600160401b038311610232576020838186019501011161023257565b6060600319820112610232576004359160243561028c81610221565b91604435906001600160401b038211610232576102ab91600401610243565b9091565b346102325760206102cb6102c236610270565b92919091611f13565b6040519015158152f35b34610232576080366003190112610232576102f1600435610221565b6102fc602435610221565b6064356001600160401b0381116102325761031b903690600401610243565b5050604051630a85bd0160e11b8152602090f35b34610232576040366003190112610232576004356024356001600160401b0381116102325760209161036861036e923690600401610243565b91613377565b6040516001600160e01b03199091168152f35b90816101209103126102325790565b6060366003190112610232576004356001600160401b038111610232576103bb903690600401610381565b602435604435917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610662576103ff60208201356135c3565b9092919084836001600160f81b0319861615610649575b8261042193946137bc565b9361044661043661043184611ea5565b611fdd565b946001600160f81b031916151590565b938480610608575b6105f957602001516001600160a01b0316801591819083806105f2575b6104f2576001926104866104a5925f525f60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b149081156105ea575b501561055d5782610501575b50506104f257816104dc925b6104e0575b506040519081529081906020820190565b0390f35b3490349034903490335af1505f6104cb565b631a0a9b9f60e21b5f5260045ffd5b61055692506105529161053661053061052a61051f61054b95611edc565b936060810190612009565b90611d20565b90611e6f565b63ffffffff60e01b165f5260205260405f2090565b5460ff1690565b1590565b5f806104ba565b829192916105b7575b506104f25761052a81606061057c930190612009565b638dd7712f60e01b916001600160e01b03199161059891611e6f565b16036105a857816104dc926104c6565b63dbbb044b60e01b5f5260045ffd5b6105e4915061054b6105cb61055292611edc565b6105366105306105de6060880188612009565b90611d0f565b5f610566565b90505f6104ae565b508661046b565b633ab3447f60e11b5f5260045ffd5b50805163ffffffff1663ffffffff6106416106385f516020615f755f395f51905f525463ffffffff9060c81c1690565b63ffffffff1690565b91161061044e565b5f516020615f755f395f51905f525460581b9250610416565b6348f5c3ed60e01b5f5260045ffd5b6004359063ffffffff8216820361023257565b359063ffffffff8216820361023257565b6020366003190112610232576106a9610671565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610841575b15610838576107116107056106ff5f516020615f755f395f51905f525460581b90565b60581c90565b6001600160a01b031690565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91610809575b50156106625760405163d68f602560e01b8152916001600160a01b0391909116905f838061076e36343360048501612167565b038183865af19283156107dc575f936107e1575b5061078c90613a50565b803b1561023257604051630b9dfbed60e11b8152915f9183918290849082906107b890600483016121b0565b03925af180156107dc576107c857005b806107d65f61001b93610fe3565b80610d64565b6120bf565b61078c919350610802903d805f833e6107fa8183610fe3565b8101906120e5565b9290610782565b61082b915060203d602011610831575b6108238183610fe3565b8101906120a7565b5f61073b565b503d610819565b61001b90613a50565b50303314156106dc565b60203660031901126102325760043561086381610221565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061097c575b15610973576108b96107056106ff5f516020615f755f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91610954575b50156106625760405163d68f602560e01b8152916001600160a01b0391909116905f838061091636343360048501612167565b038183865af19283156107dc575f93610934575b5061078c906121c1565b61078c91935061094d903d805f833e6107fa8183610fe3565b929061092a565b61096d915060203d602011610831576108238183610fe3565b5f6108e3565b61001b906121c1565b5030331415610896565b6001600160581b031981160361023257565b9181601f84011215610232578235916001600160401b038311610232576020808501948460051b01011161023257565b346102325760a0366003190112610232576004356109e581610986565b6024356109f181610221565b6044356001600160401b03811161023257610a10903690600401610243565b6064939193356001600160401b03811161023257610a32903690600401610243565b91608435956001600160401b03871161023257610a5661001b973690600401610998565b969095612327565b608036600319011261023257600435610a7681610986565b602435610a8281610221565b6044356001600160401b03811161023257610aa1903690600401610243565b6064356001600160401b03811161023257610ac0903690600401610243565b91337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610be2575b15610bd457610b176107056106ff5f516020615f755f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91610bb5575b50156106625760405163d68f602560e01b8152956001600160a01b039190911694905f8780610b7536343360048501612167565b0381838a5af19687156107dc575f97610b95575b5061078c9596976124aa565b61078c969750610bae903d805f833e6107fa8183610fe3565b9695610b89565b610bce915060203d602011610831576108238183610fe3565b5f610b41565b919361001b959391936124aa565b5030331415610af4565b6001600160e01b031981160361023257565b34610232576020366003190112610232576104dc610c3f600435610c2181610bec565b5f60408051610c2f81610f71565b828152826020820152015261203b565b600160405191610c4e83610f71565b805460a083901b839003168084529101546001600160a01b0380821660208086019182526001600160f81b031960589490941b84166040968701908152865195841686529151909216918401919091525116918101919091529081906060820190565b3461023257604036600319011261023257602060ff610d00600435610cd581610986565b610cea60243591610ce583610bec565b611edc565b9063ffffffff60e01b165f5260205260405f2090565b54166040519015158152f35b34610232576020366003190112610232576020610d41600435610d2e81610221565b5f604051610d3b81610f91565b5261332a565b60405190610d4e82610f91565b546001600160a01b031690819052604051908152f35b5f91031261023257565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610232575f36600319011261023257610dd1610ddf610db0613d9c565b604092919251938493600f60f81b855260e0602086015260e0850190610d6e565b908382036040850152610d6e565b4660608301523060808301525f60a083015281810360c083015260206060519182815201906080905f5b818110610e17575050500390f35b8251845285945060209384019390920191600101610e09565b6040366003190112610232576004356001600160401b03811161023257610e5b903690600401610381565b6024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610662575f908152602081905260409020546001600160a01b03169060609060018314159081610efb575b610ed0610ec9826060610ed7940190612009565b8091611d2e565b9030613e84565b5015610eec57610ee357005b61001b91613ea9565b63f21e646b60e01b5f5260045ffd5b9150610ed7610ed0610ec9610f21610f19610ec96060880188612009565b903489613e39565b9492505050610eb5565b34610232575f36600319011261023257602063ffffffff5f516020615f755f395f51905f525460c81c16604051908152f35b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b03821117610f8c57604052565b610f5d565b602081019081106001600160401b03821117610f8c57604052565b604081019081106001600160401b03821117610f8c57604052565b61012081019081106001600160401b03821117610f8c57604052565b90601f801991011681019081106001600160401b03821117610f8c57604052565b60405190610241604083610fe3565b6040519061024161012083610fe3565b6001600160401b038111610f8c5760051b60200190565b6080366003190112610232576004356001600160401b03811161023257611065903690600401610998565b602435916001600160401b038311610232573660238401121561023257826004013561109081611023565b9361109e6040519586610fe3565b8185526024602086019260061b8201019036821161023257602401915b818310611110575050506044356001600160401b038111610232576110e4903690600401610998565b90606435946001600160401b0386116102325761110861001b963690600401610998565b9590946125af565b604083360312610232576020604091825161112a81610fac565b61113386610684565b81528286013561114281610221565b838201528152019201916110bb565b61115a36610270565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611277575b1561126d576111b06107056106ff5f516020615f755f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f9161124e575b50156106625760405163d68f602560e01b8152936001600160a01b039190911692905f858061120e36343360048501612167565b038183885af19485156107dc575f9561122e575b5061078c93949561277e565b61078c949550611247903d805f833e6107fa8183610fe3565b9493611222565b611267915060203d602011610831576108238183610fe3565b5f6111da565b9161001b9361277e565b503033141561118d565b34610232575f366003190112610232576104dc6040516112a2604082610fe3565b60168152756b65726e656c2e616476616e6365642e76302e332e3360501b6020820152604051918291602083526020830190610d6e565b34610232575f366003190112610232576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b61132636610270565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611443575b156114395761137c6107056106ff5f516020615f755f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f9161141a575b50156106625760405163d68f602560e01b8152936001600160a01b039190911692905f85806113da36343360048501612167565b038183885af19485156107dc575f956113fa575b5061078c939495612ad2565b61078c949550611413903d805f833e6107fa8183610fe3565b94936113ee565b611433915060203d602011610831576108238183610fe3565b5f6113a6565b9161001b93612ad2565b5030331415611359565b34610232575f36600319011261023257602063ffffffff5f516020615f755f395f51905f525460a81c16604051908152f35b346102325760203660031901126102325760406114af6004356114a181610986565b6114a9612cfc565b50611ea5565b8151906114bb82610fac565b5463ffffffff81168083526001600160a01b03602092831c81169383019384528451918252925190921690820152f35b8015150361023257565b60603660031901126102325760043561150d81610986565b60243561151981610bec565b604435611525816114eb565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611642575b156116385761157b6107056106ff5f516020615f755f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91611619575b50156106625760405163d68f602560e01b8152926001600160a01b039190911691905f84806115d936343360048501612167565b038183875af19384156107dc575f946115f9575b5061078c929394614356565b61078c939450611612903d805f833e6107fa8183610fe3565b93926115ed565b611632915060203d602011610831576108238183610fe3565b5f6115a5565b9061001b92614356565b5030331415611558565b346102325760a036600319011261023257611668600435610221565b611673602435610221565b6044356001600160401b03811161023257611692903690600401610998565b50506064356001600160401b038111610232576116b3903690600401610998565b50506084356001600160401b038111610232576116d4903690600401610243565b505060405163bc197c8160e01b8152602090f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a09092019201905f5b81811061173d5750505090565b82516001600160501b031916845260209384019390920191600101611730565b346102325760203660031901126102325761179c60043561177d81610bec565b60606040805161178c81610f71565b5f81525f60208201520152612071565b6001604051916117ab83610f71565b805461ffff60f01b8160f01b168452828060a01b039060101c16602084015201906040519182602082549182815201915f5260205f20905f5b81811061180d576104dc85876117fc81880382610fe3565b6040820152604051918291826116e8565b825460501b6001600160501b0319168452602090930192600192830192016117e4565b346102325760203660031901126102325760206102cb600435612d14565b9060406003198301126102325760043591602435906001600160401b038211610232576102ab91600401610243565b6118863661184e565b90916001600160a01b036118993361332a565b54169182156119505760609060018414159485611939575b6118bb92936145dc565b92611929575b50506040518091602082016020835281518091526040830190602060408260051b8601019301915f905b8282106118fa57505050500390f35b919360019193955060206119198192603f198a82030186528851610d6e565b96019201920185949391926118eb565b61193291613ea9565b5f806118c1565b6118bb9250611949363487613de0565b92506118b1565b63710c949760e01b5f5260045ffd5b60603660031901126102325760043561197781610986565b6024356001600160401b03811161023257611996903690600401610243565b6044356001600160401b038111610232576119b5903690600401610243565b90337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611ad5575b15611ac957611a0c6107056106ff5f516020615f755f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91611aaa575b50156106625760405163d68f602560e01b8152946001600160a01b039190911693905f8680611a6a36343360048501612167565b038183895af19586156107dc575f96611a8a575b5061078c949596612dec565b61078c959650611aa3903d805f833e6107fa8183610fe3565b9594611a7e565b611ac3915060203d602011610831576108238183610fe3565b5f611a36565b91909261001b94612dec565b50303314156119e9565b611ae83661184e565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611c05575b15611bfb57611b3e6107056106ff5f516020615f755f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f91611bdc575b50156106625760405163d68f602560e01b8152926001600160a01b039190911691905f8480611b9c36343360048501612167565b038183875af19384156107dc575f94611bbc575b5061078c92939461307f565b61078c939450611bd5903d805f833e6107fa8183610fe3565b9392611bb0565b611bf5915060203d602011610831576108238183610fe3565b5f611b68565b9061001b9261307f565b5030331415611b1b565b34610232575f3660031901126102325760205f516020615f755f395f51905f525460581b604051906001600160581b0319168152f35b346102325760a036600319011261023257611c61600435610221565b611c6c602435610221565b6084356001600160401b03811161023257611c8b903690600401610243565b505060405163f23a6e6160e01b8152602090f35b34610232576020366003190112610232576020600435600760405191108152f35b34610232576040366003190112610232576004356001600160401b03811161023257611d07611cf56020923690600401610381565b60243590611d0282610221565b61308a565b604051908152f35b906008116102325760040190600490565b906004116102325790600490565b909291928360041161023257831161023257600401916003190190565b906018116102325760040190601490565b906014116102325790601490565b906020116102325790602090565b90929192836020116102325783116102325760200191601f190190565b909291928360011161023257831161023257600101915f190190565b906009116102325760010190600890565b909291928360091161023257831161023257600901916008190190565b906016116102325790601690565b906016116102325760020190601490565b909291928360161161023257831161023257601601916015190190565b906002116102325790600290565b909291928360141161023257831161023257601401916013190190565b90602c116102325760180190601490565b90939293848311610232578411610232578101920390565b356001600160e01b0319811692919060048210611e8a575050565b6001600160e01b031960049290920360031b82901b16169150565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85060205260405f2090565b6001600160581b0319165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85160205260405f2090565b90929060018103611f6257506001600160a01b0392611f5c9250611f4c915060581b600160581b600160f81b0316600160f81b17611ea5565b5460201c6001600160a01b031690565b16151590565b60028103611f9657506001600160a01b0392611f5c92506107059150611f8990841661332a565b546001600160a01b031690565b600303611fd657611fb7611fb2610530600193611fc595611d20565b61203b565b01546001600160a01b031690565b6001600160a01b0390811691161490565b5050505f90565b90604051611fea81610fac565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e198136030182121561023257018035906001600160401b0382116102325760200191813603831361023257565b63ffffffff60e01b165f527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b60205260405f2090565b63ffffffff60e01b165f527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f85260205260405f2090565b9081602091031261023257516120bc816114eb565b90565b6040513d5f823e3d90fd5b6001600160401b038111610f8c57601f01601f191660200190565b602081830312610232578051906001600160401b038211610232570181601f8201121561023257805190612118826120ca565b926121266040519485610fe3565b8284526020838301011161023257815f9260208093018386015e8301015290565b908060209392818452848401375f828201840152601f01601f1916010190565b6120bc939260609260018060a01b03168252602082015281604082015201905f612147565b6120bc949260609260018060a01b0316825260208201528160408201520191612147565b9060206120bc928181520190610d6e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2565b60405190612223602083610fe3565b5f8252565b90813b5f612235826120ca565b936122436040519586610fe3565b82855260208501903c565b80516020909101516001600160e81b0319811692919060038210612270575050565b6001600160e81b0319600392830390921b82901b16169150565b5f516020615f755f395f51905f52805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b634e487b7160e01b5f52603260045260245ffd5b908210156122e6576102ab9160051b810190612009565b6122bb565b908092918237015f815290565b3d15612322573d90612309826120ca565b916123176040519384610fe3565b82523d5f602084013e565b606090565b94939291909695966001600160581b03196123606123535f516020615f755f395f51905f525460581b90565b6001600160581b03191690565b1615801590612482575b612474576001600160581b03198616156104f2576001600160f81b03198616600160f81b14158061245c575b61244d57856123a76123f497613b15565b6123c86123b2611004565b60018152925b6001600160a01b03166020840152565b5f516020615f755f395f51905f52805463ffffffff60a81b1916600160a81b179055613b7b565b613b7b565b5f5b81811061240257505050565b5f8061240f8385876122cf565b9061241f604051809381936122eb565b039082305af161242d6122f8565b501561243b576001016123f6565b636534eae560e11b5f5260045260245ffd5b6361c4e91b60e11b5f5260045ffd5b506001600160f81b03198616600160f91b1415612396565b62dc149f60e41b5f5260045ffd5b5061ef0160f01b6001600160e81b03196124a361249e30612228565b61224e565b161461236a565b94939291906001600160581b03198616156104f2576001600160f81b03198616600160f81b141580612555575b61244d576124e486613b15565b6001600160a01b036124f8611f4c88611ea5565b1615612507575b505050505050565b61254a956123ef61252d5f516020615f755f395f51905f525463ffffffff9060a81c1690565b926123b860405194612540604087610fe3565b63ffffffff168552565b5f80808080806124ff565b506001600160f81b03198616600160f91b14156124d7565b9060405161257a81610f71565b82546001600160a01b03908116825260019390930154928316602082015260589290921b6001600160f81b0319166040830152565b95909491939092337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580612723575b156127155761260c6107056106ff5f516020615f755f395f51905f525460581b90565b60405163ecd0596160e01b8152600480820152602081602481855afa9081156107dc575f916126f6575b50156106625760405163d68f602560e01b8152966001600160a01b039190911695905f888061266a36343360048501612167565b0381838b5af19788156107dc575f986126d6575b5061268a969798613f22565b803b1561023257604051630b9dfbed60e11b8152915f9183918290849082906126b690600483016121b0565b03925af180156107dc576126c8575b50565b806107d65f61024193610fe3565b61268a9798506126ef903d805f833e6107fa8183610fe3565b979661267e565b61270f915060203d602011610831576108238183610fe3565b5f612636565b919390929461024196613f22565b50303314156125e9565b9160206120bc938181520191612147565b356bffffffffffffffffffffffff1981169291906014821061275e575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b9091600182036128fa575f516020615f355f395f51905f5293906054600160f81b600160581b600160f81b03605887901b1617916127c86127be84611ea5565b5463ffffffff1690565b5f516020615f755f395f51905f525460a81c63ffffffff169063ffffffff8083169116146128e2575b5061285a61283361070561282d6128276128205f516020615f755f395f51905f525463ffffffff9060a81c1690565b9886611d5c565b9061273e565b60601c90565b61284a61283e611004565b63ffffffff9097168752565b6001600160a01b03166020860152565b612885601482019461286c8680612009565b61287c6034869493940189612009565b93909288613b7b565b019160046128938483612009565b9050146128c1575b5050505b604080519182526001600160a01b03909216602082015290819081015b0390a1565b61053061052a6128da946128d493612009565b906142f1565b5f808061289b565b6128f49060010163ffffffff1661228a565b5f6127f1565b6002820361296257806129575f516020615f355f395f51905f5295603461293161070561282d612827601461295d99019588611d5c565b93612950856129408580612009565b906001600160a01b038c16614267565b0190612009565b91614117565b61289f565b600382036129d857806129575f516020615f355f395f51905f529560386129d061070561282d612827601861295d9901956129ca8c8a6129b861070561282d612827876129b26105308288611d20565b95611d4b565b6129c28b80612009565b939092613f8f565b88611d4b565b930190612009565b600482148015612a76575b8015612a6c575b15612a5d576001600160a01b03831693843b1561023257612a24945f92836040518098819582946306d61fe760e41b84526004840161272d565b03925af19283156107dc575f516020615f355f395f51905f5293612a49575b5061289f565b806107d65f612a5793610fe3565b5f612a43565b631092ef5760e11b5f5260045ffd5b50600682146129ea565b50600582146129e3565b359060208110612a8e575090565b5f199060200360031b1b1690565b929192612aa8826120ca565b91612ab66040519384610fe3565b829481845281830111610232578281602093845f960137010152565b909160018203612b43575f516020615f555f395f51905f5293612b2191612b1b91612b12600160f81b600160581b600160f81b03605889901b1617614424565b505b3691612a9c565b83614484565b50604080519182526001600160a01b03909216602082015290819081016128bc565b60028203612bb3576001600160a01b038381165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902080546001600160a01b031981169091555f516020615f555f395f51905f5295612b2193612b1b939092165b50612b14565b919060038103612bd8575050610530612bd492612bcf92611d20565b6143c0565b5050565b909160048203612c6157612b1b612b21915f516020615f555f395f51905f5295612c105f516020615f755f395f51905f525460581b90565b612c1c611f4c82611ea5565b6001600160a01b03888116911614612c345750612b14565b612c40612c5b91611ea5565b8054640100000000600160c01b031916640100000000179055565b5f612bad565b600582148015612cf2575b15612a5d575f516020615f755f395f51905f525460581b612c96612c908684611d6a565b90612a80565b906001600160f81b03198116600160f91b14612cca575b5050612b1b612b21915f516020615f555f395f51905f5295612b14565b60081b6001600160e01b03191614612ce3575f80612cad565b6313002bdd60e31b5f5260045ffd5b5060068214612c6c565b60405190612d0982610fac565b5f6020838281520152565b612d28818060081b918160301b9160501b90565b929091906001600160f81b03198116600160f81b14159081612dd8575b81612dc3575b81612daa575b50611fd65760ff60f81b16600160f81b8114159081612da0575b50612d9a576001600160e01b031916612d95576001600160501b031916612d9157600190565b5f90565b505f90565b50505f90565b905015155f612d6b565b6001600160f81b031916607f60f91b141590505f612d51565b6001600160f81b031980821614159150612d4b565b6001600160f81b0319811615159150612d45565b9094939291612dfa82614424565b916001600160f81b03198116600160f81b03612e72575f516020615f555f395f51905f5291612e48612e426102419899612e6a9460018060a01b039060581c16933691612a9c565b82614484565b5060408051600181526001600160a01b03909216602083015290918291820190565b0390a161488a565b9294919290506001600160f81b03198116600160f91b0361244d5760081b92612e9a84612071565b94612ea587806147fb565b94905060018701946001865401036130705794956001600160e01b0319871695905f5b8654811015612f7e57805f516020615f555f395f51905f52612f758c612f53612f45612e428e612f338f99612f2d612f1d612f15612f088460019f614830565b90549060031b1c60501b90565b908160501c90565b90508c8060a01b031697806147fb565b906122cf565b60409491945194859360208501614845565b03601f198101835282610fe3565b5060408051600581526001600160a01b03909216602083015290918291820190565b0390a101612ec8565b509194509296612ff961300c9161300761306b9598612faa6001612fa46102419d612071565b0161485a565b8554612fe790612fc59060101c6001600160a01b0316610705565b93612fdc612fd382806147fb565b919092806147fb565b5f19019290506122cf565b60409591955195869360208501614845565b03601f198101845283610fe3565b614484565b5080545f516020615f555f395f51905f5290613058906130379060101c6001600160a01b0316610705565b60408051600681526001600160a01b03909216602083015290918291820190565b0390a180546001600160b01b0319169055565b61488a565b63013dcc8d60e31b5f5260045ffd5b906126c592916145dc565b612f4590613174906130a56001600160a01b03823516610705565b906131466020820135612f456130c76130c16040860186612009565b90614915565b936130d86130c16060830183612009565b90608081013560a0820135906130fa6130c160c08501359460e0810190612009565b93604051988997602089019b8c94919260e0969399989794919961010087019a60018060a01b03168752602087015260408601526060850152608084015260a083015260c08201520152565b51902060408051602081019283526001600160a01b03909516908501525f6060850152929182906080820190565b51902090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6131c76131c25f356001600160e01b03191661203b565b61256d565b80516001600160a01b03906131dd908216610705565b161561331b5780516060906001600160a01b0316806002600160a01b031981016132f95750507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610662575b60408201516001600160f81b031916806132b957506020820151613260906001600160a01b0316614920565b92905b156132b157516001600160a01b0316906001821415828161329d575b5061328d575b825160208401f35b61329691613ea9565b5f80613285565b6001600160a01b039150811614155f61327f565b825160208401fd5b6001600160f81b0319908116036132ea5760208201516132e3906001600160a01b03163690613e5f565b9290613263565b632d6a6bb760e01b5f5260045ffd5b600103613307575b50613234565b613315915036903490613de0565b5f613301565b631cd4b64760e21b5f5260045ffd5b6001600160a01b03165f9081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b9081602091031261023257516120bc81610bec565b9161338191614962565b919080836001600160f81b03198416156135a3575b6020811015918261356c575b82613556575b50506133b661043184611ea5565b60208101516001600160a01b03906133cf908216610705565b161580613543575b6104f2576001600160f81b031984161515908161350a575b506105f9576001600160f81b03198316600160f81b03613483579061341b6020949392613439966149b4565b604051637aa8f17760e11b815295869485938493336004860161218c565b039160581c6001600160a01b03165afa9081156107dc575f9161345a575090565b6120bc915060203d60201161347c575b6134748183610fe3565b810190613362565b503d61346a565b92916001600160f81b03198116600160f91b036134e35760081b93600160f11b6134c66134b96134b288612071565b5460f01b90565b6001600160f01b03191690565b166134d4576120bc94614af2565b635b71057960e01b5f5260045ffd5b929391929091906001600160f81b03191661244d576120bc93613505916149b4565b614a0e565b5163ffffffff16905063ffffffff61353a6106385f516020615f755f395f51905f525463ffffffff9060c81c1690565b9116105f6133ef565b506001600160f81b0319841615156133d7565b819295506135649350611d78565b925f806133a8565b91507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a61359c612c908385611d6a565b14916133a2565b92506135bd5f516020615f755f395f51905f525460581b90565b92613396565b90818060081b9160ff839260f01c166002146135db57565b6001600160d81b031983169150565b9080601f83011215610232578160206120bc93359101612a9c565b919091610120818403126102325761361b611013565b9261362582610236565b84526020820135602085015260408201356001600160401b03811161023257816136509184016135ea565b604085015260608201356001600160401b03811161023257816136749184016135ea565b60608501526080820135608085015260a082013560a085015260c082013560c085015260e08201356001600160401b03811161023257816136b69184016135ea565b60e08501526101008201356001600160401b038111610232576136d992016135ea565b610100830152565b90816020910312610232575190565b80516001600160a01b031682526120bc916020820151602082015261010061377161374161372f60408601516101206040870152610120860190610d6e565b60608601518582036060870152610d6e565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e0860152610d6e565b92015190610100818403910152610d6e565b9392916137a09060409286526060602087015260608601906136f0565b930152565b9291906137a06020916040865260408601906136f0565b9290925f926137cb3682613605565b916137da610100830183612009565b918193835f93602082101580613a1b575b6139dc575b5050506001600160f81b031916600160f81b145b6139b5575b506001600160f81b03198616600160f81b036138a0575050604051639700320360e01b815293602092859283915f91839161384791600484016137a5565b039260581c6001600160a01b03165af19081156107dc576120bc925f9261386f575b50614fce565b61389291925060203d602011613899575b61388a8183610fe3565b8101906136e1565b905f613869565b503d613880565b909491939092916001600160f81b03198116600160f91b036139515760081b93600160f01b6138d46134b96134b288612071565b16613942575f6138f46138ee60209661391e99858a614ddf565b94614fce565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501613783565b03926001600160a01b03165af19081156107dc576120bc925f9261386f5750614fce565b6314b9743f60e01b5f5260045ffd5b919350506001600160f81b03191661244d576139a690630b135d3f60e11b9361350563ffffffff60e01b946020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b16036139b0575f90565b600190565b916139c293955086614ba7565b9193916139d0368284612a9c565b6101008401525f613809565b9195509250829196506139ef9350611d78565b90916139fc368385612a9c565b610100850152613804613a12600192339061308a565b95905f806137f0565b507f0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a613a4a612c908484611d6a565b146137eb565b5f516020615f755f395f51905f5254600a63ffffffff8260a81c16019063ffffffff8211613b015763ffffffff83811692168211613af257613a9a9060c81c63ffffffff16610638565b10156105f9575f516020615f755f395f51905f52805463ffffffff60c81b60c893841b1663ffffffff60c81b1990911617908190559081901c63ffffffff9081169160a81c168111613ae95750565b6102419061228a565b63e60fd64760e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae88918060581c6001600160581b0360a81b5f516020615f755f395f51905f525416175f516020615f755f395f51905f5255604051906001600160581b0319168152a1565b929490939193613b8d6127be85611ea5565b5f516020615f755f395f51905f525460a81c63ffffffff169063ffffffff808316911614613d84575b506020810180516001600160a01b031615613d7b575b5f516020615f755f395f51905f525460a81c63ffffffff1663ffffffff613bfa610638855163ffffffff1690565b911614801590613d4f575b6105f957613c53613c6092613c1987611ea5565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b516001600160a01b031690565b915f196001600160a01b03841601613d3e575b5050506001600160f81b03198116600160f81b03613d1b5760581c6001600160a01b031690813b15610232576040516306d61fe760e41b8152925f9184918291613cc191906004840161272d565b038183855af19081156107dc575f516020615f355f395f51905f52926128bc92613d07575060408051600181526001600160a01b03909216602083015290918291820190565b806107d65f613d1593610fe3565b5f612e48565b91506001600160f81b03198216600160f91b0361244d576102419160081b61513c565b613d4792614117565b5f8080613c73565b50613d5c6127be86611ea5565b63ffffffff613d72610638855163ffffffff1690565b91161015613c05565b60018152613bcc565b613d969060010163ffffffff1661228a565b5f613bb6565b6040908151613dab8382610fe3565b600681526512d95c9b995b60d21b602082015291613dcb81519182610fe3565b6005815264302e332e3360d81b602082015290565b91613e07925f8080946040519687958694859363d68f602560e01b8552336004860161218c565b03926001600160a01b03165af19081156107dc575f91613e25575090565b6120bc91503d805f833e6107fa8183610fe3565b5f9283613e0795936040519687958694859363d68f602560e01b8552336004860161218c565b5f9060405192808385378338925af4913d82523d5f602084013e60203d830101604052565b5f9192806040519485378338925af4913d82523d5f602084013e60203d830101604052565b6001600160a01b0316803b1561023257604051630b9dfbed60e11b815260206004820152915f918391829084908290613ee6906024830190610d6e565b03925af180156107dc57613ef75750565b5f61024191610fe3565b8051156122e65760200190565b80518210156122e65760209160051b010190565b909593919492965f5b87811015613f7b57600190613f758a89613f618489613f5a828060051b8c013595613f5587610986565b613f0e565b51946122cf565b90613f6d868d8d6122cf565b949093613b7b565b01613f2b565b509650505050505050565b90156122e65790565b9293929091906001600160a01b03821615614108575b613fae9061203b565b93613fda613fcd613fbf8684613f86565b356001600160f81b03191690565b6001600160f81b03191690565b936001600160f81b031985166140e0576001600160a01b0384169161400191908190611d95565b823b156102325761402b925f92836040518096819582946306d61fe760e41b84526004840161272d565b03925af19485156107dc5761408f6140af93600193610241986140cc575b5060408051600381526001600160a01b03881660208201525f516020615f355f395f51905f529190a15b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b806107d65f6140da93610fe3565b5f614049565b50909390506001600160f81b0319808416036132ea5760016140af9161408f61024196614073565b6001600160a01b039150613fa5565b6001600160a01b031691908215801561425d575b6142585760405163d60b347f60e01b8152306004820152602081602481875afa9081156107dc575f91614239575b50158015614210575b61419a575b505060408051600481526001600160a01b0390921660208301525f516020615f355f395f51905f529190819081016128bc565b90806141a592611d95565b9190813b15610232576040516306d61fe760e41b8152925f91849182916141d091906004840161272d565b038183855af19081156107dc575f516020615f355f395f51905f52926128bc926141fc575b5091614167565b806107d65f61420a93610fe3565b5f6141f5565b50811515801561416257506001600160f81b031980614232613fbf8585613f86565b1614614162565b614252915060203d602011610831576108238183610fe3565b5f614159565b505050565b506001831461412b565b926142759092919284615434565b806142bb57915f929183612f456142a5829560405192839160208301966306d61fe760e41b88526024840161272d565b51926001600160a01b03165af1506126c56122f8565b6001600160a01b0390921691823b15610232576126b6925f92836040518096819582946306d61fe760e41b84526004840161272d565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a9160609161432382610cea83611edc565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b907f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a9260609261438983610cea83611edc565b9115159160ff1981541660ff84161790556040519263ffffffff60e01b1683526001600160581b03191660208301526040820152a1565b6143ca5f9161203b565b80546001600160a01b031981168255600190910180546001600160a01b0390921693916001600160f81b0319605882901b1615614413575b5080546001600160a81b0319169055565b6001600160a01b031692505f614402565b906001600160581b03195f516020615f755f395f51905f525460581b166001600160581b0319831614612ce3576144706001600160a01b0361446584611ea5565b5460201c1692611ea5565b8054640100000000600160c01b0319169055565b91907f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3905a905f80604051936144e4856144d66020820196638a91b0e360e01b88526020602484018181520190610d6e565b03601f198101875286610fe3565b604051936144f3602086610fe3565b828552602085019583908a905f368a375193f1913d908161453a575b815f9293523e604080516001600160a01b0390951685528115156020860152909390819081016128bc565b5f915061450f565b604080519091906145538382610fe3565b6001815291601f1901825f5b82811061456b57505050565b80606060208093850101520161455f565b9061458682611023565b6145936040519182610fe3565b82815280926145a4601f1991611023565b01905f5b8281106145b457505050565b8060606020809385010152016145a8565b9060406120bc925f81528160208201520190610d6e565b600881901b9291906001600160f81b03198116600160f81b0361466f57509061460491615560565b90916001600160f81b0319811661461f57506120bc91615678565b6001600160f81b031916600160f81b0361463c576120bc916155cc565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b9293926001600160f81b0319811661472757509061468c916154e2565b91614695614542565b956001600160f81b031981166146c257506146af9361552a565b6146b883613f01565b526126c582613f01565b6001600160f81b031916600160f81b0361463c576146df93615503565b6146e884613f01565b52610241577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76128bc61471a84613f01565b51604051918291826145c5565b909391906001600160f81b03199081160361463c576147516147579161474b614542565b956154ba565b91613e84565b61476385939293613f01565b526001600160f81b03198116600160f81b036147ae57501561478157565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76128bc61471a84613f01565b6001600160f81b03191661463c576102415760405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1958d85b1b0819985a5b1959606a1b6044820152606490fd5b903590601e198136030182121561023257018035906001600160401b03821161023257602001918160051b3603831361023257565b80548210156122e6575f5260205f2001905f90565b9092809260209483528483013701015f815290565b8054905f815581614869575050565b5f5260205f20908101905b81811061487f575050565b5f8155600101614874565b9091906001600160a01b03168015801561490b575b6142585781156122e6575f516020615f555f395f51905f52926128bc926001600160f81b031982358116146148f2575b505060408051600481526001600160a01b03909216602083015290918291820190565b612b1481612e429261490394611d95565b505f806148cf565b506001811461489f565b816040519182372090565b5f809160405136810160405236838237604051601481016040523360601b90528260143601925af190604051903d82523d5f602084013e60203d830101604052565b9182358060f81c805f146149a6578060011461499957600214614983575f80fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b505060015f9301915f190190565b60405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8383526040820152604081526149f3606082610fe3565b5190209015614a05576120bc906157ea565b6120bc906156d8565b9190614a1b913691612a9c565b604051916020820191805180604014614aa657604114614a485750505050505b638baa579f5f526004601cfd5b80606060409201515f1a60205201516060525b5f52516040526020600160805f825afa51905f6060526040523d614a80575050614a3b565b6001600160a01b03163003614a9a57630b135d3f60e11b90565b6001600160e01b031990565b506040015160ff81901c601b016020526001600160ff1b0316606052614a5b565b90926080926120bc9694835260018060a01b0316602083015260408201528160608201520191612147565b614b0b65ffffffffffff929594614b179487338561585f565b97929491959095615929565b5091164210908115614b95575b50614b8257602094614b35916149b4565b60405163392dffaf60e01b815295869485938493614b6493929133906001600160e01b03191660048701614ac7565b03916001600160a01b03165afa9081156107dc575f9161345a575090565b506001600160e01b031995945050505050565b65ffffffffffff91501642115f614b24565b9190939293601481019160141161023257803560601c92829190614bc9612cfc565b6001600160a01b03909516602086019081529490614c28614bec6127be83611ea5565b5f516020615f755f395f51905f525460a81c63ffffffff169063ffffffff808316911603614d8d5760010163ffffffff165b63ffffffff168352565b815163ffffffff1695516001600160a01b031697614c468580612009565b614c4f91614915565b986034850199614c5f8b88612009565b614c6891614915565b906054870199614c788b8a612009565b614c8191614915565b604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c505602082019081526001600160581b03198a169282019290925263ffffffff9390931660608401526001600160a01b0395909516608083015260a082019290925260c081019290925260e0808301919091528152614d0561010082610fe3565b519020905f1461052a6102ab98614d6660949861295097614d476128d49761053097614d7f57614d34906157ea565b614d4160748d0185612009565b91615bee565b9e614d5d614d558480612009565b929094612009565b9390928a613b7b565b614d79614d73828b612009565b90615d68565b88612009565b614d88906156d8565b614d34565b614c1e565b356001600160c01b0319811692919060088210614dad575050565b6001600160c01b031960089290920360031b82901b16169150565b6040906120bc9392815281602082015201906136f0565b93929190935f926001614df183612071565b015f5b8154811015614f7257614e0d612f15612f088385614830565b939095614e2f614e29614e23613fbf8585613f86565b60f81c90565b60ff1690565b808403614f445750908181614e68614e5c614e56614e5084614e8698611db1565b90614d92565b60c01c90565b6001600160401b031690565b600901918c610100614e7e612b14868686611dc2565b910152611e57565b939093955b600160f01b1615614ea3575b50600101939193614df4565b604051633894f6e760e11b81529196906020908390815f81614ed38f6001600160e01b03198d1660048401614dc8565b03926001600160a01b03165af19182156107dc575f92614f24575b506001600160a01b038216614f1057600191614f0991614fce565b9590614e97565b631f24c1fb60e11b5f52600487905260245ffd5b614f3d91925060203d81116138995761388a8183610fe3565b905f614eee565b9196909491831115614f5f57630760bdcf60e11b5f5260045ffd5b614f67612214565b6101008b0152614e8b565b505091929460ff80614f8a614e23613fbf8789613f86565b1603614fbf57610100614fa7612b1485614faf966120bc98611d95565b910152612071565b5460101c6001600160a01b031690565b63b32eeb6960e01b5f5260045ffd5b908082186001600160a01b031615606083811b838501821b9081149184901b141717600114614ffe575050600190565b65ffffffffffff60a01b8216916001600160d01b0319808216908316841561507e575b65ffffffffffff60a01b8416801561506e575b85811090861802808618951461505d575b81811190821802189160018060a01b03911716171790565b65ffffffffffff60a01b9450615045565b5065ffffffffffff60a01b615034565b65ffffffffffff60a01b9450615021565b356001600160501b03198116929190601682106150aa575050565b6001600160501b031960169290920360031b82901b16169150565b805468010000000000000000811015610f8c576150e791600182018155614830565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b356001600160f01b0319811692919060028210615121575050565b6001600160f01b031960029290920360031b82901b16169150565b919061514890806147fb565b9260fe8411801561542c575b61541d57600161516382612071565b015461540a575b5f1984015f5b8181106152cc57509061522f61522883876151c86152196152006134b96151fa6151f487612ff99e9f8e6151ef61524b9f8f9061070561282d6128276151ba6151c09489896122cf565b90611ded565b9a8b91612071565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b6122cf565b90611e1b565b90615106565b61520988612071565b9060f01c61ffff19825416179055565b6001600160a01b0316966122cf565b8091611dfe565b6040519586939092906001600160e01b03191660208501614845565b803b15610232575f61527192604051809481926306d61fe760e41b8352600483016121b0565b038183855af19081156107dc575f516020615f355f395f51905f52926128bc926152b8575b5060408051600681526001600160a01b03909216602083015290918291820190565b806107d65f6152c693610fe3565b5f615296565b6153679061531260016152de86612071565b0161530c6152ff6152f96152f3868d8c6122cf565b90611ddf565b9061508f565b6001600160501b03191690565b906150c5565b61532c61070561070561282d6128276151ba868d8c6122cf565b61533a615228838a896122cf565b60405194918591615359916001600160e01b03198a1660208501614845565b03601f198101855284610fe3565b803b15610232576040516306d61fe760e41b8152925f91849182908490829061539390600483016121b0565b03925af19182156107dc576001926153f6575b505f516020615f355f395f51905f526153ed6153cc61282d6128276151ba868d8c6122cf565b60408051600581526001600160a01b03909216602083015290918291820190565b0390a101615170565b806107d65f61540493610fe3565b5f6153a6565b6154186001612fa483612071565b61516a565b63b62d956d60e01b5f5260045ffd5b508315615154565b5f516020615f355f395f51905f52916040916001600160a01b038216156154b1575b6001600160a01b039081165f8181527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b8660205284902080546001600160a01b03191693909216929092179055815190600282526020820152a1565b60019150615456565b9160138211156154d557823560601c92601401916013190190565b63ba597e7e5f526004601cfd5b9060338111156154d557813560601c92601483013592603401916033190190565b905f928491604051958692833738935af1913d82523d5f602084013e60203d830101604052565b90925f92819594604051968792833738935af115615557573d82523d5f602084013e60203d830101604052565b503d5f823e3d90fd5b918235826020118160401c176154d557830160208101938135938461558457505050565b01601f190190835b5f190160208160051b8301013580830160608101908135809101918680602080860135809601011191111792171760401c176154d5578061558c57505050565b91906155d78161457c565b925f5b8281106155e657505050565b8061561060019260051b840135840160408101358101906020823592019060208101359035615503565b61561a8389613f0e565b5215615627575b016155da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76156706156558389613f0e565b51604051918291858352604060208401526040830190610d6e565b0390a1615621565b91906156838161457c565b925f5b82811061569257505050565b806156bc60019260051b84013584016040810135810190602082359201906020810135903561552a565b6156c68288613f0e565b526156d18187613f0e565b5001615686565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615615763575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220615746565b60a06157f4613d9c565b90602081519101209060208151910120604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352602083015260408201525f6060820152306080820152206719010000000000005f52601a52603a526042601820905f603a52565b949184846158e092969593966040519061587882610fc7565b5f82525f602083015260408201995f8b526158da606084019a8b925f84525f60808701525f60a0870152606060c08701526158cb60e08701915f83526101008801955f87529063ffffffff60e01b169052565b6001600160a01b039091169052565b52615980565b60ff806158f3614e23613fbf8786613f86565b1603614fbf57614faf61590d8461591d9561592294611d95565b9490955163ffffffff60e01b1690565b612071565b9351929190565b8065ffffffffffff8260a01c16918215600114615947575b60d01c92565b65ffffffffffff9250615941565b90926080926120bc9594835260018060a01b0316602083015260408201528160608201520190610d6e565b91606083019060016159d561599c845163ffffffff60e01b1690565b6001600160e01b0319165f9081527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f8526020526040902090565b01805493905f5b8581106159ec5750505050505050565b6159fc612f15612f088385614830565b6001600160a01b031660a0890190815260808901949091615a25906001600160f01b0319168652565b615a3f615a38614e23613fbf8985613f86565b60ff168a52565b615a4d614e298a5160ff1690565b808403615bbc5750858181615a72614e5c614e56614e50615ac79b9c615a9a98611db1565b8c60c0615a8d612b1460208401948086526009018688611dc2565b9101525160090191611e57565b949094955b51600160f11b90615ab9906001600160f01b0319166134b9565b166001600160f01b03191690565b15615ad6575b506001016159dc565b51615ae9906001600160a01b0316610705565b6020615b0f615b02615b02895163ffffffff60e01b1690565b6001600160e01b03191690565b60e08a01516101008b015160c08c015160405163184dfdbb60e11b8152958694909385938493615b4e9390926001600160a01b03169060048601615955565b03915afa9081156107dc575f91615b9e575b506001600160a01b038116615b8a5790600191615b8260408a01918251614fce565b905290615acd565b631f24c1fb60e11b5f52600482905260245ffd5b615bb6915060203d81116138995761388a8183610fe3565b5f615b60565b909490831115615bd557630760bdcf60e11b5f5260045ffd5b615ac790615be4365f88612a9c565b60c08b0152615a9f565b5f516020615f755f395f51905f52545f9493929060581b6001600160f81b03198116600160f81b03615ca95791615c4e9391615c2f61070560209560581c90565b9160405195869485938493637aa8f17760e11b8552306004860161218c565b03915afa9081156107dc575f91615c8a575b505b6001600160e01b0319166374eca2c160e11b01615c7b57565b6362467c7760e11b5f5260045ffd5b615ca3915060203d60201161347c576134748183610fe3565b5f615c60565b90949192916001600160f81b03198216600160f91b03615d4a5750602091615cd79160081b9584308861585f565b60405163392dffaf60e01b81529297929586949385938493615d0a93909230906001600160e01b03191660048701614ac7565b03916001600160a01b03165afa9081156107dc575f91615d2b575b50615c62565b615d44915060203d60201161347c576134748183610fe3565b5f615d25565b94906001600160f81b03191661244d57615d6392614a0e565b615c62565b615d756105308383611d20565b91602c8110615f1857602c820190615d9661070561282d6128278487611d4b565b615dc0615db2613fcd613fbf615dac8780612009565b90613f86565b6001600160f81b0319161590565b80615e73575b61070561282d61282785615e1b6102419a87615dff61070561282d6128278f9d6129579f9e8f604c9f6129d09f615e21575b5050611e46565b615e098b80612009565b9390926001600160a01b031690613f8f565b88611e46565b612957615e65615e6c93606c860190615e60615e4f61070561282d612827615e498787612009565b90611d5c565b9586906001600160a01b0316615434565b612009565b8091611e29565b8f87615df8565b5060405163ecd0596160e01b81526002600482015290949291906020816024816001600160a01b038a165afa9384156107dc5761282d61282784615e1b610705948b615dff61070561282d6102419f8f9c6129579f9d8f604c9f936129d09f94612827955f91615ef9575b509f50505050505050505097509a5050959650505050615dc6565b615f12915060203d602011610831576108238183610fe3565b5f615ede565b90506004915003615f2557565b637a210a5d60e11b5f5260045ffdfed21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032" export const KERNEL_V07_V3_3_FACTORY_CREATECALL: Hex = - "0x000000000000000000000000000000000000000000000000000000000000000060a034607357601f61044238819003918201601f19168301916001600160401b03831184841017607757808492602094604052833981010312607357516001600160a01b03811681036073576080526040516103b6908161008c823960805181818160c60152818161021d01526102d80152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816348aac39214610250575080635c60da1b146102085763ea6d13ac1461003d575f80fd5b6100463661033f565b60405161006c602080838181019587898837878201908382015203018084520182610394565b519020905f92604051927fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212060358501523060581b845260ff84538060158501526055842094341591863b156101eb5750506001906101e6575f38818034895af1156101d9575b836040525f60605215610157575b6040516001600160a01b0385168152602090f35b9180825f9493859483378101838152039082855af13d156101d4573d67ffffffffffffffff81116101c0576040519061019a601f8201601f191660200183610394565b81525f60203d92013e5b156101b1575f8080610143565b63487e630960e11b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b6101a4565b63b12d13eb5f526004601cfd5b610135565b91509450605f602134f593846101355763301164255f526004601cfd5b3461024c575f36600319011261024c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b3461024c57806102826020806102653661033f565b908084889499019889378201908382015203018084520182610394565b5190206040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f602120906040525f60605260ff5f536035523060601b600152601552602060555f205f6035526040519060018060a01b03168152f35b90604060031983011261024c5760043567ffffffffffffffff811161024c578260238201121561024c5780600401359267ffffffffffffffff841161024c576024848301011161024c57602401919060243590565b90601f8019910116810190811067ffffffffffffffff8211176101c05760405256000000000000000000000000e264dccc54e4b6906c0d1fee11d4326c06d33c80" + "0x000000000000000000000000000000000000000000000000000000000000000060a03461008d57601f61045c38819003918201601f19168301916001600160401b038311848410176100915780849260209460405283398101031261008d57516001600160a01b038116810361008d57806080523b1561007e576040516103b690816100a6823960805181818160c60152818161021d01526102d80152f35b632e07c4bd60e11b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816348aac39214610250575080635c60da1b146102085763ea6d13ac1461003d575f80fd5b6100463661033f565b60405161006c602080838181019587898837878201908382015203018084520182610394565b519020905f92604051927fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212060358501523060581b845260ff84538060158501526055842094341591863b156101eb5750506001906101e6575f38818034895af1156101d9575b836040525f60605215610157575b6040516001600160a01b0385168152602090f35b9180825f9493859483378101838152039082855af13d156101d4573d67ffffffffffffffff81116101c0576040519061019a601f8201601f191660200183610394565b81525f60203d92013e5b156101b1575f8080610143565b63487e630960e11b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b6101a4565b63b12d13eb5f526004601cfd5b610135565b91509450605f602134f593846101355763301164255f526004601cfd5b3461024c575f36600319011261024c576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f80fd5b3461024c57806102826020806102653661033f565b908084889499019889378201908382015203018084520182610394565b5190206040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20766040526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f602120906040525f60605260ff5f536035523060601b600152601552602060555f205f6035526040519060018060a01b03168152f35b90604060031983011261024c5760043567ffffffffffffffff811161024c578260238201121561024c5780600401359267ffffffffffffffff841161024c576024848301011161024c57602401919060243590565b90601f8019910116810190811067ffffffffffffffff8211176101c05760405256000000000000000000000000d6cedde84be40893d153be9d467cd6ad37875b28" // Will deploy V0.7 KERNEL_FACTORY_ADDRESS to 0xd703aaE79538628d27099B8c4f621bE4CCd142d5 export const KERNEL_V07_META_FACTORY_CREATECALL: Hex = diff --git a/packages/permissionless-test/mock-aa-infra/alto/index.ts b/packages/permissionless-test/mock-aa-infra/alto/index.ts index f49211a7..ed1d0e78 100644 --- a/packages/permissionless-test/mock-aa-infra/alto/index.ts +++ b/packages/permissionless-test/mock-aa-infra/alto/index.ts @@ -634,6 +634,13 @@ export const setupContracts = async (rpc: string) => { data: "0x6e7dbabb000000000000000000000000E30c76Dc9eCF1c19F6Fec070674E1b4eFfE069FA0000000000000000000000000000000000000000000000000000000000000001" }) + // register 0x2577507b78c2008Ff367261CB6285d44ba5eF2E9 + await sendTransaction(walletClient, { + account: kernelFactoryOwner, + to: "0xd703aaE79538628d27099B8c4f621bE4CCd142d5" /* kernel factory v0.7 */, + data: "0x6e7dbabb0000000000000000000000002577507b78c2008Ff367261CB6285d44ba5eF2E90000000000000000000000000000000000000000000000000000000000000001" + }) + await sendTransaction(walletClient, { account: kernelFactoryOwner, to: "0xd703aaE79538628d27099B8c4f621bE4CCd142d5" /* kernel factory v0.7 */, @@ -707,8 +714,8 @@ export const setupContracts = async (rpc: string) => { "0xbA45a2BFb8De3D24cA9D7F1B551E14dFF5d690Fd", // Kernel v0.3.1 WebAuthn Validator "0xD830D15D3dc0C269F3dBAa0F3e8626d33CFdaBe1", // Kernel v0.3.2 Account Logic "0x7a1dBAB750f12a90EB1B60D2Ae3aD17D4D81EfFe", // Kernel v0.3.2 Factory - "0xE264dCCc54e4b6906c0D1Fee11D4326c06D33c80", // Kernel v0.3.3 Account Logic - "0xE30c76Dc9eCF1c19F6Fec070674E1b4eFfE069FA", // Kernel v0.3.3 Factory + "0xd6CEDDe84be40893d153Be9d467CD6aD37875b28", // Kernel v0.3.3 Account Logic + "0x2577507b78c2008Ff367261CB6285d44ba5eF2E9", // Kernel v0.3.3 Factory "0x00004EC70002a32400f8ae005A26081065620D20", // LightAccountFactory v1.1.0 "0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba", // LightAccount v1.1.0 implementation "0x0000000000400CdFef5E2714E63d8040b700BC24", // LightAccountFactory v2.0.0 diff --git a/packages/permissionless-test/src/testWithRpc.ts b/packages/permissionless-test/src/testWithRpc.ts index 781989b9..b309159b 100644 --- a/packages/permissionless-test/src/testWithRpc.ts +++ b/packages/permissionless-test/src/testWithRpc.ts @@ -29,10 +29,12 @@ export const getInstances = async ({ ? anvil({ chainId: foundry.id, port: anvilPort, + hardfork: "Prague", forkUrl }) : anvil({ chainId: foundry.id, + hardfork: "Prague", port: anvilPort }) @@ -49,10 +51,10 @@ export const getInstances = async ({ utilityPrivateKey: anvilPrivateKey }) - // instance.on("stderr", (data) => { + // altoInstance.on("stderr", (data) => { // console.error(data.toString()) // }) - // instance.on("stdout", (data) => { + // altoInstance.on("stdout", (data) => { // console.log(data.toString()) // }) diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index fee803d4..014ebe69 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -23,6 +23,7 @@ import { import { foundry } from "viem/chains" import { type KernelVersion, + to7702KernelSmartAccount, toKernelSmartAccount, toThirdwebSmartAccount } from "../../permissionless/accounts" @@ -328,10 +329,12 @@ export const getKernelEcdsaClient = async < anvilRpc, version, privateKey, - useMetaFactory + useMetaFactory, + eip7702 = false }: AAParamType & { version?: KernelVersion useMetaFactory?: boolean + eip7702?: boolean }) => { const publicClient = getPublicClient(anvilRpc) @@ -342,6 +345,13 @@ export const getKernelEcdsaClient = async < throw new Error("Kernel ERC7579 is not supported for V06") } + if (eip7702) { + return to7702KernelSmartAccount({ + client: publicClient, + owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) + }) + } + return toKernelSmartAccount({ client: publicClient, entryPoint: { @@ -449,6 +459,7 @@ export const getCoreSmartAccounts = (): Array<{ supportsEntryPointV06: boolean supportsEntryPointV07: boolean supportsEntryPointV08: boolean + isEip7702Compliant?: boolean isEip1271Compliant: boolean getSmartAccountClient: ( conf: AAParamType @@ -727,9 +738,37 @@ export const getCoreSmartAccounts = (): Array<{ }), supportsEntryPointV06: false, supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportsEntryPointV08: true, isEip1271Compliant: true }, + { + name: "Kernel 7579 0.3.3 + EIP-7702", + getSmartAccountClient: async (conf: AAParamType) => + getBundlerClient({ + account: await getKernelEcdsaClient({ + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.3" as KernelVersion<"0.6" | "0.7">, + eip7702: true + }), + ...conf + }), + getErc7579SmartAccountClient: async ( + conf: AAParamType + ) => + getSmartAccountClient({ + account: await getKernelEcdsaClient({ + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.3" as KernelVersion<"0.6" | "0.7">, + eip7702: true + }), + ...conf + }), + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, + isEip7702Compliant: true, + isEip1271Compliant: false + }, { name: "Biconomy", getSmartAccountClient: async (conf: AAParamType) => diff --git a/packages/permissionless/accounts/index.ts b/packages/permissionless/accounts/index.ts index deae9d2e..e6fbcfaf 100644 --- a/packages/permissionless/accounts/index.ts +++ b/packages/permissionless/accounts/index.ts @@ -42,6 +42,13 @@ import { toEcdsaKernelSmartAccount } from "./kernel/toEcdsaKernelSmartAccount.js" +import { + type To7702KernelSmartAccountImplementation, + type To7702KernelSmartAccountParameters, + type To7702KernelSmartAccountReturnType, + to7702KernelSmartAccount +} from "./kernel/to7702KernelSmartAccount.js" + import { type KernelSmartAccountImplementation, type KernelVersion, @@ -114,5 +121,9 @@ export { type ToEtherspotSmartAccountParameters, type EtherspotSmartAccountImplementation, type ToEtherspotSmartAccountReturnType, - toEtherspotSmartAccount + toEtherspotSmartAccount, + type To7702KernelSmartAccountParameters, + type To7702KernelSmartAccountImplementation, + type To7702KernelSmartAccountReturnType, + to7702KernelSmartAccount } diff --git a/packages/permissionless/accounts/kernel/to7702KernelSmartAccount.ts b/packages/permissionless/accounts/kernel/to7702KernelSmartAccount.ts new file mode 100644 index 00000000..02174375 --- /dev/null +++ b/packages/permissionless/accounts/kernel/to7702KernelSmartAccount.ts @@ -0,0 +1,63 @@ +import type { + Account, + Chain, + LocalAccount, + OneOf, + Prettify, + Transport, + WalletClient +} from "viem" +import type { EthereumProvider } from "../../utils/toOwner.js" +import { + type KernelSmartAccountImplementation, + type KernelVersion, + type ToKernelSmartAccountParameters, + type ToKernelSmartAccountReturnType, + toKernelSmartAccount +} from "./toKernelSmartAccount.js" + +export type To7702KernelSmartAccountParameters< + entryPointVersion extends "0.7", + kernelVersion extends KernelVersion, + owner extends OneOf< + | EthereumProvider + | WalletClient + | LocalAccount + > +> = ToKernelSmartAccountParameters< + entryPointVersion, + kernelVersion, + owner, + true +> + +export type To7702KernelSmartAccountImplementation< + entryPointVersion extends "0.7" = "0.7" +> = KernelSmartAccountImplementation + +export type To7702KernelSmartAccountReturnType< + entryPointVersion extends "0.7" = "0.7" +> = ToKernelSmartAccountReturnType + +export async function to7702KernelSmartAccount< + entryPointVersion extends "0.7", + kernelVersion extends KernelVersion, + owner extends OneOf< + | EthereumProvider + | WalletClient + | LocalAccount + > +>( + parameters: Prettify< + To7702KernelSmartAccountParameters< + entryPointVersion, + kernelVersion, + owner + > + > +): Promise> { + return toKernelSmartAccount({ + ...parameters, + eip7702: true + }) +} diff --git a/packages/permissionless/accounts/kernel/toKernelSmartAccount.ts b/packages/permissionless/accounts/kernel/toKernelSmartAccount.ts index a0fa50a1..c5ae1323 100644 --- a/packages/permissionless/accounts/kernel/toKernelSmartAccount.ts +++ b/packages/permissionless/accounts/kernel/toKernelSmartAccount.ts @@ -5,6 +5,7 @@ import type { Chain, JsonRpcAccount, OneOf, + PrivateKeyAccount, Transport, WalletClient } from "viem" @@ -31,7 +32,7 @@ import { getUserOperationHash, toSmartAccount } from "viem/account-abstraction" -import { signMessage as _signMessage, getChainId } from "viem/actions" +import { getChainId } from "viem/actions" import { getAction } from "viem/utils" import { getAccountNonce } from "../../actions/public/getAccountNonce.js" import { getSenderAddress } from "../../actions/public/getSenderAddress.js" @@ -56,6 +57,8 @@ import { isWebAuthnAccount } from "./utils/isWebAuthnAccount.js" import { signMessage } from "./utils/signMessage.js" import { signTypedData } from "./utils/signTypedData.js" +type EntryPointVersion = "0.6" | "0.7" + /** * The account creation ABI for a kernel smart account (from the KernelFactory) */ @@ -91,7 +94,7 @@ const createAccountAbi = [ } ] as const -export type KernelVersion = +export type KernelVersion = entryPointVersion extends "0.6" ? "0.2.1" | "0.2.2" | "0.2.3" | "0.2.4" : "0.3.0-beta" | "0.3.1" | "0.3.2" | "0.3.3" @@ -100,7 +103,7 @@ export type KernelVersion = * Default addresses map for different kernel smart account versions */ export const KERNEL_VERSION_TO_ADDRESSES_MAP: { - [key in KernelVersion<"0.6" | "0.7">]: { + [key in KernelVersion]: { ECDSA_VALIDATOR: Address WEB_AUTHN_VALIDATOR?: Address ACCOUNT_LOGIC: Address @@ -150,8 +153,8 @@ export const KERNEL_VERSION_TO_ADDRESSES_MAP: { }, "0.3.3": { ECDSA_VALIDATOR: "0x845ADb2C711129d4f3966735eD98a9F09fC4cE57", - ACCOUNT_LOGIC: "0xE264dCCc54e4b6906c0D1Fee11D4326c06D33c80", - FACTORY_ADDRESS: "0xE30c76Dc9eCF1c19F6Fec070674E1b4eFfE069FA", + ACCOUNT_LOGIC: "0xd6CEDDe84be40893d153Be9d467CD6aD37875b28", + FACTORY_ADDRESS: "0x2577507b78c2008Ff367261CB6285d44ba5eF2E9", META_FACTORY_ADDRESS: "0xd703aaE79538628d27099B8c4f621bE4CCd142d5" } } @@ -160,10 +163,15 @@ export const KERNEL_VERSION_TO_ADDRESSES_MAP: { * Get supported Kernel Smart Account version based on entryPoint * @param entryPoint */ -const getDefaultKernelVersion = ( +const getDefaultKernelVersion = ( entryPointVersion: TEntryPointVersion, - version?: KernelVersion + version?: KernelVersion, + eip7702?: boolean ): KernelVersion => { + if (eip7702) { + return "0.3.3" as KernelVersion + } + if (version) { return version } @@ -195,7 +203,7 @@ const getDefaultAddresses = ({ kernelVersion, isWebAuthn }: Partial & { - kernelVersion: KernelVersion<"0.6" | "0.7"> + kernelVersion: KernelVersion isWebAuthn: boolean }): KERNEL_ADDRESSES => { const addresses = KERNEL_VERSION_TO_ADDRESSES_MAP[kernelVersion] @@ -227,7 +235,7 @@ export const getEcdsaRootIdentifierForKernelV3 = ( * @param owner * @param ecdsaValidatorAddress */ -const getInitializationData = ({ +const getInitializationData = ({ entryPoint: { version: entryPointVersion }, kernelVersion, validatorData, @@ -322,7 +330,7 @@ const getValidatorData = async (owner: WebAuthnAccount | LocalAccount) => { * @param accountLogicAddress * @param ecdsaValidatorAddress */ -const getAccountInitCode = async ({ +const getAccountInitCode = async ({ entryPointVersion, kernelVersion, validatorData, @@ -375,44 +383,74 @@ const getAccountInitCode = async ({ } export type ToKernelSmartAccountParameters< - entryPointVersion extends "0.6" | "0.7", + entryPointVersion extends EntryPointVersion, kernelVersion extends KernelVersion, owner extends OneOf< | EthereumProvider | WalletClient | LocalAccount | WebAuthnAccount - > + >, + eip7702 extends boolean = false > = { client: Client< Transport, Chain | undefined, JsonRpcAccount | LocalAccount | undefined > - owners: [owner] - entryPoint?: { - address: Address - version: entryPointVersion - } - address?: Address version?: kernelVersion - index?: bigint - factoryAddress?: Address - metaFactoryAddress?: Address - accountLogicAddress?: Address - validatorAddress?: Address - nonceKey?: bigint - useMetaFactory?: boolean | "optional" -} + eip7702?: eip7702 +} & (eip7702 extends true + ? { + owner: OneOf< + | EthereumProvider + | WalletClient + | LocalAccount + > + entryPoint?: { + address: Address + version: "0.7" + } + address?: never + index?: never + factoryAddress?: never + metaFactoryAddress?: never + accountLogicAddress?: never + validatorAddress?: never + nonceKey?: never + useMetaFactory?: never + } + : { + entryPoint?: { + address: Address + version: entryPointVersion + } + owners: [owner] + address?: Address + index?: bigint + factoryAddress?: Address + metaFactoryAddress?: Address + accountLogicAddress?: Address + validatorAddress?: Address + nonceKey?: bigint + useMetaFactory?: boolean | "optional" + }) export type KernelSmartAccountImplementation< - entryPointVersion extends "0.6" | "0.7" = "0.7" + entryPointVersion extends EntryPointVersion = "0.7", + eip7702 extends boolean = false > = Assign< SmartAccountImplementation< entryPointVersion extends "0.6" ? typeof entryPoint06Abi : typeof entryPoint07Abi, - entryPointVersion + entryPointVersion, + eip7702 extends true + ? { + implementation: Address + } + : object, + eip7702 // { // // entryPoint === ENTRYPOINT_ADDRESS_V06 ? "0.2.2" : "0.3.0-beta" // abi: entryPointVersion extends "0.6" ? typeof BiconomyAbi @@ -423,8 +461,11 @@ export type KernelSmartAccountImplementation< > export type ToKernelSmartAccountReturnType< - entryPointVersion extends "0.6" | "0.7" = "0.7" -> = SmartAccount> + entryPointVersion extends EntryPointVersion = "0.7", + eip7702 extends boolean = false +> = eip7702 extends true + ? SmartAccount> + : SmartAccount> /** * Build a kernel smart account from a private key, that use the ECDSA or passkeys signer behind the scene * @param client @@ -436,56 +477,86 @@ export type ToKernelSmartAccountReturnType< * @param validatorAddress */ export async function toKernelSmartAccount< - entryPointVersion extends "0.6" | "0.7", + entryPointVersion extends EntryPointVersion, kernelVersion extends KernelVersion, owner extends OneOf< | EthereumProvider | WalletClient | LocalAccount | WebAuthnAccount - > + >, + eip7702 extends boolean = false >( parameters: ToKernelSmartAccountParameters< entryPointVersion, kernelVersion, - owner + owner, + eip7702 > -): Promise> { +): Promise> { const { client, address, index = 0n, - owners, version, validatorAddress: _validatorAddress, factoryAddress: _factoryAddress, metaFactoryAddress: _metaFactoryAddress, accountLogicAddress: _accountLogicAddress, - useMetaFactory = true + useMetaFactory = true, + eip7702 = false } = parameters + const owners = (() => { + if (eip7702 && "owner" in parameters) { + return [parameters.owner] + } + + if ("owners" in parameters) { + return parameters.owners + } + + throw new Error("Invalid parameters") + })() + const isWebAuthn = owners[0].type === "webAuthn" - const owner = isWebAuthn - ? (owners[0] as WebAuthnAccount) - : await toOwner({ - owner: owners[0] as OneOf< - | EthereumProvider - | WalletClient - | LocalAccount - > - }) - - const entryPoint = { - address: parameters.entryPoint?.address ?? entryPoint07Address, - abi: - (parameters.entryPoint?.version ?? "0.7") === "0.6" - ? entryPoint06Abi - : entryPoint07Abi, - version: parameters.entryPoint?.version ?? "0.7" - } as const - - const kernelVersion = getDefaultKernelVersion(entryPoint.version, version) + const owner = await (() => { + if (isWebAuthn) { + return owners[0] as WebAuthnAccount + } + return toOwner({ + owner: owners[0] as OneOf< + | EthereumProvider + | WalletClient + | LocalAccount + > + }) + })() + + const entryPoint = (() => { + const address = parameters.entryPoint?.address ?? entryPoint07Address + const version = parameters.entryPoint?.version ?? "0.7" + + let abi: typeof entryPoint06Abi | typeof entryPoint07Abi = + entryPoint07Abi + + if (version === "0.6") { + abi = entryPoint06Abi + } + + return { + address, + abi, + version + } as const + })() + + const kernelVersion = getDefaultKernelVersion( + entryPoint.version, + version, + eip7702 + ) const { accountLogicAddress, @@ -539,6 +610,18 @@ export async function toKernelSmartAccount< } const { accountAddress, getFactoryArgs } = await (async () => { + if (eip7702) { + return { + accountAddress: (owner as LocalAccount).address, + getFactoryArgs: async () => { + return { + factory: undefined, + factoryData: undefined + } + } + } + } + let getFactoryArgs = getFactoryArgsFunc( useMetaFactory === "optional" ? true : useMetaFactory ) @@ -577,6 +660,17 @@ export async function toKernelSmartAccount< client, entryPoint, getFactoryArgs, + extend: eip7702 + ? { + implementation: accountLogicAddress + } + : undefined, + authorization: eip7702 + ? { + address: accountLogicAddress, + account: owner as PrivateKeyAccount + } + : undefined, async getAddress() { return accountAddress }, @@ -633,9 +727,7 @@ export async function toKernelSmartAccount< owner, message, accountAddress: await this.getAddress(), - kernelVersion: - // TODO: remove this once 0.3.3 is released - kernelVersion === "0.3.3" ? "0.3.2" : kernelVersion, + kernelVersion: kernelVersion, chainId: await getMemoizedChainId() }) @@ -654,9 +746,7 @@ export async function toKernelSmartAccount< chainId: await getMemoizedChainId(), ...(typedData as TypedDataDefinition), accountAddress: await this.getAddress(), - kernelVersion: - // TODO: remove this once 0.3.3 is released - kernelVersion === "0.3.3" ? "0.3.2" : kernelVersion + kernelVersion: kernelVersion }) if (isKernelV2(kernelVersion)) { @@ -683,6 +773,7 @@ export async function toKernelSmartAccount< entryPointVersion: entryPoint.version, chainId: chainId }) + const signature = isWebAuthnAccount(owner) ? await signMessage({ owner, @@ -701,5 +792,5 @@ export async function toKernelSmartAccount< } return signature } - }) as Promise> + }) as Promise> } diff --git a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts index a8ce9807..7ceb7cd3 100644 --- a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts +++ b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts @@ -372,12 +372,11 @@ export async function toSimpleSmartAccount< entryPointAddress: entryPoint.address, userOperation: { ...userOperation, - sender: - userOperation.sender ?? (await this.getAddress()), + sender: await this.getAddress(), signature: "0x" } }) - return await localOwner.signTypedData(typedData) + return localOwner.signTypedData(typedData) } return signMessage(client, { diff --git a/packages/permissionless/actions/smartAccount/sendTransaction.test.ts b/packages/permissionless/actions/smartAccount/sendTransaction.test.ts index 28131d0b..251fbeab 100644 --- a/packages/permissionless/actions/smartAccount/sendTransaction.test.ts +++ b/packages/permissionless/actions/smartAccount/sendTransaction.test.ts @@ -1,4 +1,5 @@ import { zeroAddress } from "viem" +import { privateKeyToAccount } from "viem/accounts" import { foundry } from "viem/chains" import { describe, expect } from "vitest" import { testWithRpc } from "../../../permissionless-test/src/testWithRpc" @@ -14,7 +15,8 @@ describe.each(getCoreSmartAccounts())( getSmartAccountClient, supportsEntryPointV06, supportsEntryPointV07, - supportsEntryPointV08 + supportsEntryPointV08, + isEip7702Compliant }) => { testWithRpc.skipIf(!supportsEntryPointV06)( "sendTransaction_v06", @@ -71,25 +73,39 @@ describe.each(getCoreSmartAccounts())( async ({ rpc }) => { const { anvilRpc } = rpc + const privateKeyAccount = privateKeyToAccount( + "0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356" + ) + const smartClient = await getSmartAccountClient({ entryPoint: { version: "0.7" }, privateKey: - "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // anvil private key + "0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356", // anvil private key ...rpc }) + const publicClient = getPublicClient(anvilRpc) + const transactionHash = await sendTransaction(smartClient, { to: zeroAddress, data: "0x", - value: 0n + value: 0n, + authorization: isEip7702Compliant + ? await privateKeyAccount.signAuthorization({ + address: (smartClient.account as any) + .implementation, + chainId: smartClient.chain.id, + nonce: await publicClient.getTransactionCount({ + address: smartClient.account.address + }) + }) + : undefined }) expect(transactionHash).toBeTruthy() - const publicClient = getPublicClient(anvilRpc) - const receipt = await publicClient.getTransactionReceipt({ hash: transactionHash }) @@ -240,6 +256,10 @@ describe.each(getCoreSmartAccounts())( const { anvilRpc } = rpc await (async () => { + const privateKeyAccount = privateKeyToAccount( + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + ) + const smartClient = await getSmartAccountClient({ entryPoint: { version: "0.7" @@ -249,16 +269,28 @@ describe.each(getCoreSmartAccounts())( ...rpc }) + const publicClient = getPublicClient(anvilRpc) + const transactionHash = await sendTransaction(smartClient, { to: zeroAddress, data: "0x", - value: 0n + value: 0n, + authorization: isEip7702Compliant + ? await privateKeyAccount.signAuthorization({ + address: (smartClient.account as any) + .implementation, + chainId: smartClient.chain.id, + nonce: await publicClient.getTransactionCount( + { + address: smartClient.account.address + } + ) + }) + : undefined }) expect(transactionHash).toBeTruthy() - const publicClient = getPublicClient(anvilRpc) - const receipt = await publicClient.getTransactionReceipt({ hash: transactionHash })