Commit 043b9ef
authored
Upgrade Java Lambda Layer to 2.x (#1076)
*Issue #, if available:*
This PR changes mainline and upgrades the Java Lambda Layer to
**2.10.0** and migrates the Lambda Layer build code in the 1.33.x
release branch to main branch.
*Description of changes:*
1. Changed the build-layer.sh to also apply patching from current ADOT
SDK in `.github`
2. Added the lambda build step to the main and pr build workflows.
3. Added `StreamHandlerInstrumentation.patch` patching file to pulled
from release/v1.33.x
4. Removed Active span linking tracing from patches as this has already
been applied to upstream:
open-telemetry/opentelemetry-java-instrumentation@d7e9098#diff-219664837e8bb1881334baba6fae9fa9c4980557d7307552bbfa93e29ace75fc
5. Removed SQS span linking as this is already handled by AWS vended
segments
6. Removed dependency on AwsXrayPropagator in
`AwsLambdaFunctionInstrumenterFactory` and `ParentContextExtractor`. The
global propagators we use in the instrumentation already has the xray
propagator in the configuration see:
https://github.com/aws-observability/aws-otel-java-instrumentation/blob/main/lambda-layer/otel-instrument#L5
7. Patched `AwsLambdaFunctionInstrumenterFactory` to look for Xray Trace
context from Lambda in 3 separate locations:
- Environment variables
- Http Header
- Lambda Context
(trace id pulled from `X_AMZN_TRACE_ID` environment variable
**overrides** trace id pulled from Lambda Context **overrides** trace id
pulled from Http Header)
Integration Test pass:
https://github.com/aws-observability/aws-application-signals-test-framework/actions/runs/14582217777
Manual end-to-end testing was done by deploying the [APIGW-Lambda sample
app](https://github.com/aws-observability/aws-otel-java-instrumentation/tree/main/sample-apps/apigateway-lambda)
and calling the endpoint and verified a full complete trace:
```
{
"Id": "1-68067bca-0df176812ae1fd3537266942",
"Duration": 10.363,
"Segments": [
{
"Id": "30dcafd162b1ff67",
"Document": {
"id": "30dcafd162b1ff67",
"name": "aws-opentelemetry-distro-java/default",
"start_time": 1745255370.5460002,
"trace_id": "1-68067bca-0df176812ae1fd3537266942",
"end_time": 1745255380.909,
"http": {
"request": {
"url": "https://v4mrdyqjl1.execute-api.us-east-1.amazonaws.com/default/lambda",
"method": "GET",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
"client_ip": "15.248.7.8",
"x_forwarded_for": true
},
"response": {
"status": 200,
"content_length": 0
}
},
"aws": {
"span.kind": "LOCAL_ROOT",
"xray.origin": "AWS::ApiGateway::Stage",
"api_gateway.stage": "default",
"api_gateway.rest_api_id": "v4mrdyqjl1",
"api_gateway": {
"account_id": "571600841604",
"rest_api_id": "v4mrdyqjl1",
"stage": "default",
"request_id": "594d97d9-9be4-4d3f-a6ba-631e4f6435f2"
},
"api_gateway.name": "aws-opentelemetry-distro-java/default",
"request_id": "594d97d9-9be4-4d3f-a6ba-631e4f6435f2"
},
"annotations": {
"aws:span.name": "GET /lambda",
"aws:api_id": "v4mrdyqjl1",
"aws:aws.local.environment": "api-gateway:default",
"aws:aws.local.service": "aws-opentelemetry-distro-java",
"aws:api_stage": "default",
"aws:span.kind": "SERVER",
"aws:aws.local.operation": "GET /lambda"
},
"metadata": {
"user_agent.original": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
"telemetry.extended": "true",
"service.name": "aws-opentelemetry-distro-java",
"extended_request_id": "JYhHtF3boAMERgg=",
"http.url": "https://v4mrdyqjl1.execute-api.us-east-1.amazonaws.com/default/lambda",
"http.response.header.content-length": 0,
"http.client_ip": "15.248.7.8",
"client.address": "15.248.7.8",
"http.status_code": 200,
"cloud.provider": "aws",
"http.request.method": "GET",
"http.response_content_length": 0,
"cloud.account.id": "571600841604",
"http.user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
"cloud.resource_id": "arn:aws:apigateway:us-east-1::/restapis/v4mrdyqjl1/stages/default",
"PlatformType": "Generic",
"http.method": "GET",
"url.full": "https://v4mrdyqjl1.execute-api.us-east-1.amazonaws.com/default/lambda",
"http.response.status_code": 200,
"request_id": "594d97d9-9be4-4d3f-a6ba-631e4f6435f2",
"cloud.platform": "aws_api_gateway"
},
"origin": "AWS::ApiGateway::Stage",
"subsegments": [
{
"id": "5799a265c952cf75",
"name": "Lambda",
"start_time": 1745255370.549,
"end_time": 1745255380.908,
"http": {
"request": {
"url": "https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-east-1:571600841604:function:aws-opentelemetry-distro-java/invocations",
"method": "ANY"
},
"response": {
"status": 200,
"content_length": 181
}
},
"aws": {
"span.kind": "CLIENT",
"api_gateway.stage": "default",
"function_name": "aws-opentelemetry-distro-java",
"api_gateway.rest_api_id": "v4mrdyqjl1",
"api_gateway": {
"account_id": "571600841604",
"rest_api_id": "v4mrdyqjl1",
"stage": "default"
},
"region": "us-east-1",
"operation": "Invoke",
"resource_names": [
"aws-opentelemetry-distro-java"
]
},
"annotations": {
"aws.local.service": "aws-opentelemetry-distro-java",
"span.name": "awslambda.Invoke",
"aws.local.operation": "GET /lambda",
"span.kind": "CLIENT",
"aws.remote.service": "aws-opentelemetry-distro-java",
"aws.remote.operation": "Invoke",
"aws.local.environment": "api-gateway:default"
},
"metadata": {
"telemetry.extended": "true",
"service.name": "aws-opentelemetry-distro-java",
"rpc.service": "awslambda",
"http.url": "https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-east-1:571600841604:function:aws-opentelemetry-distro-java/invocations",
"http.response.header.content-length": 181,
"rpc.system": "aws-api",
"http.status_code": 200,
"cloud.provider": "aws",
"http.request.method": "ANY",
"http.response_content_length": 181,
"cloud.account.id": "571600841604",
"rpc.method": "Invoke",
"cloud.resource_id": "arn:aws:apigateway:us-east-1::/restapis/v4mrdyqjl1/stages/default",
"PlatformType": "Generic",
"http.method": "ANY",
"url.full": "https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-east-1:571600841604:function:aws-opentelemetry-distro-java/invocations",
"http.response.status_code": 200,
"cloud.platform": "aws_api_gateway"
},
"namespace": "aws"
}
]
}
},
{
"Id": "4bafe60730a6e432",
"Document": {
"id": "4bafe60730a6e432",
"name": "aws-opentelemetry-distro-java",
"start_time": 1745255370.581,
"trace_id": "1-68067bca-0df176812ae1fd3537266942",
"end_time": 1745255380.829,
"parent_id": "5799a265c952cf75",
"http": {
"response": {
"status": 200
}
},
"aws": {
"lambda.name": "aws-opentelemetry-distro-java",
"span.kind": "SERVER",
"xray.origin": "AWS::Lambda",
"request_id": "2a7a8eed-8152-4f06-9cd9-e34e9a91893c"
},
"annotations": {
"aws:span.name": "aws-opentelemetry-distro-java/LambdaService",
"aws:aws.local.environment": "lambda:default",
"aws:aws.local.service": "aws-opentelemetry-distro-java",
"aws:span.kind": "SERVER",
"aws:aws.local.operation": "aws-opentelemetry-distro-java/LambdaService"
},
"metadata": {
"http.status_code": 200,
"cloud.provider": "aws",
"faas.invocation_id": "2a7a8eed-8152-4f06-9cd9-e34e9a91893c",
"telemetry.extended": "true",
"service.name": "aws-opentelemetry-distro-java",
"faas.name": "aws-opentelemetry-distro-java",
"cloud.resource_id": "arn:aws:lambda:us-east-1:571600841604:function:aws-opentelemetry-distro-java",
"PlatformType": "AWS::Lambda",
"http.response.status_code": 200,
"faas.trigger": "http",
"cloud.platform": "aws_lambda"
},
"origin": "AWS::Lambda"
}
},
{
"Id": "d4e554351f5045a5",
"Document": {
"id": "d4e554351f5045a5",
"name": "aws-opentelemetry-distro-java",
"start_time": 1745255375.805954,
"trace_id": "1-68067bca-0df176812ae1fd3537266942",
"end_time": 1745255380.829593,
"parent_id": "4bafe60730a6e432",
"aws": {
"lambda.name": "aws-opentelemetry-distro-java",
"xray.origin": "AWS::Lambda::Function",
"cloudwatch_logs": [
{
"log_group": "/aws/lambda/aws-opentelemetry-distro-java"
}
]
},
"annotations": {
"aws:responseLatency": 5022.715,
"aws:span.name": "aws-opentelemetry-distro-java/LambdaExecutionEnvironment",
"aws:runtimeOverhead": 0.198,
"aws:span.kind": "SERVER",
"aws:responseDuration": 0.086
},
"metadata": {
"cloud.provider": "aws",
"service.name": "aws-opentelemetry-distro-java",
"faas.name": "aws-opentelemetry-distro-java",
"cloud.platform": "aws_lambda"
},
"origin": "AWS::Lambda::Function",
"subsegments": [
{
"id": "ce0f98b1478c0bda",
"name": "Overhead",
"start_time": 1745255380.828,
"end_time": 1745255380.828198,
"aws": {
"lambda.name": "Overhead",
"xray.origin": "AWS::Lambda::Function"
},
"annotations": {
"span.name": "Overhead/LambdaExecutionEnvironment",
"span.kind": "INTERNAL"
},
"metadata": {
"cloud.provider": "aws",
"service.name": "Overhead",
"faas.name": "Overhead",
"cloud.platform": "aws_lambda"
}
},
{
"id": "4ecdb762e94f4068",
"name": "Init",
"start_time": 1745255371.61021,
"end_time": 1745255375.80189,
"aws": {
"lambda.name": "Init",
"xray.origin": "AWS::Lambda::Function"
},
"annotations": {
"span.name": "Init/LambdaExecutionEnvironment",
"span.kind": "INTERNAL"
},
"metadata": {
"cloud.provider": "aws",
"service.name": "Init",
"faas.name": "Init",
"cloud.platform": "aws_lambda"
}
}
]
}
},
{
"Id": "8a74a05108dfd6f5",
"Document": {
"id": "8a74a05108dfd6f5",
"name": "aws-opentelemetry-distro-java",
"start_time": 1745255375.9077334,
"trace_id": "1-68067bca-0df176812ae1fd3537266942",
"end_time": 1745255380.626341,
"parent_id": "d4e554351f5045a5",
"aws": {
"span.kind": "LOCAL_ROOT",
"cloudwatch_logs": [
{
"log_group": "/aws/lambda/aws-opentelemetry-distro-java"
}
]
},
"annotations": {
"aws.local.service": "aws-opentelemetry-distro-java",
"span.name": "aws-opentelemetry-distro-java",
"aws.local.operation": "aws-opentelemetry-distro-java/FunctionHandler",
"span.kind": "SERVER",
"aws.local.environment": "lambda:default"
},
"metadata": {
"telemetry.distro.version": "2.10.0-adot-lambda1-aws",
"process.command_args": [
"/var/lang/bin/java",
"-XX:MaxHeapSize=445645k",
"-javaagent:/var/runtime/lib/Log4jHotPatch.jar=log4jFixerVerbose=false",
"-XX:+UseSerialGC",
"-Xshare:on",
"-XX:SharedArchiveFile=/var/lang/lib/server/runtime.jsa",
"-XX:+TieredCompilation",
"-XX:TieredStopAtLevel=1",
"--add-opens=java.base/java.io=ALL-UNNAMED",
"-Dorg.crac.Core.Compat=com.amazonaws.services.lambda.crac",
"-XX:+ErrorFileToStderr",
"-Dcom.amazonaws.services.lambda.runtime.api.client.runtimeapi.NativeClient.JNI=/var/runtime/lib/jni/libaws-lambda-jni.linux-x86_64.so",
"-classpath",
"/var/runtime/lib/aws-lambda-java-core-1.2.3.jar:/var/runtime/lib/aws-lambda-java-runtime-interface-client-2.6.0-linux-x86_64.jar:/var/runtime/lib/aws-lambda-java-serialization-1.1.5.jar",
"com.amazonaws.services.lambda.runtime.api.client.AWSLambda",
"com.amazon.sampleapp.LambdaHandler::handleRequest"
],
"process.runtime.version": "17.0.14+7-LTS",
"os.type": "linux",
"thread.name": "main",
"process.pid": 2,
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.language": "java",
"process.runtime.name": "OpenJDK Runtime Environment",
"service.instance.id": "0efc9fb1-017c-4305-825f-0e5c59d2dece",
"os.description": "Linux 5.10.234-246.921.amzn2.x86_64",
"host.arch": "amd64",
"cloud.resource_id": "arn:aws:lambda:us-east-1:571600841604:function:aws-opentelemetry-distro-java",
"host.name": "169.254.26.217",
"telemetry.sdk.version": "1.44.1",
"cloud.platform": "aws_lambda",
"thread.id": 1,
"cloud.region": "us-east-1",
"service.name": "aws-opentelemetry-distro-java",
"faas.name": "aws-opentelemetry-distro-java",
"telemetry.distro.name": "opentelemetry-java-instrumentation",
"cloud.provider": "aws",
"faas.invocation_id": "2a7a8eed-8152-4f06-9cd9-e34e9a91893c",
"cloud.account.id": "571600841604",
"process.executable.path": "/var/lang/bin/java",
"faas.instance": "2025/04/21/[$LATEST]4dbc1340125248209e4be7478b359603",
"faas.version": "$LATEST",
"PlatformType": "AWS::Lambda",
"process.runtime.description": "Amazon.com Inc. OpenJDK 64-Bit Server VM 17.0.14+7-LTS"
},
"subsegments": [
{
"id": "7da9101595299089",
"name": "S3",
"start_time": 1745255379.5510905,
"end_time": 1745255380.6079786,
"http": {
"request": {
"url": "https://s3.us-east-1.amazonaws.com/",
"method": "GET"
},
"response": {
"status": 200
}
},
"aws": {
"agent": "java-aws-sdk",
"span.kind": "CLIENT",
"cloudwatch_logs": [
{
"log_group": "/aws/lambda/aws-opentelemetry-distro-java"
}
],
"request_id": "BH7B7E1P6X1SX5PF"
},
"annotations": {
"aws.local.service": "aws-opentelemetry-distro-java",
"span.name": "S3.ListBuckets",
"aws.local.operation": "aws-opentelemetry-distro-java/FunctionHandler",
"span.kind": "CLIENT",
"aws.remote.service": "AWS::S3",
"aws.remote.operation": "ListBuckets",
"aws.local.environment": "lambda:default"
},
"metadata": {
"telemetry.distro.version": "2.10.0-adot-lambda1-aws",
"rpc.service": "S3",
"process.command_args": [
"/var/lang/bin/java",
"-XX:MaxHeapSize=445645k",
"-javaagent:/var/runtime/lib/Log4jHotPatch.jar=log4jFixerVerbose=false",
"-XX:+UseSerialGC",
"-Xshare:on",
"-XX:SharedArchiveFile=/var/lang/lib/server/runtime.jsa",
"-XX:+TieredCompilation",
"-XX:TieredStopAtLevel=1",
"--add-opens=java.base/java.io=ALL-UNNAMED",
"-Dorg.crac.Core.Compat=com.amazonaws.services.lambda.crac",
"-XX:+ErrorFileToStderr",
"-Dcom.amazonaws.services.lambda.runtime.api.client.runtimeapi.NativeClient.JNI=/var/runtime/lib/jni/libaws-lambda-jni.linux-x86_64.so",
"-classpath",
"/var/runtime/lib/aws-lambda-java-core-1.2.3.jar:/var/runtime/lib/aws-lambda-java-runtime-interface-client-2.6.0-linux-x86_64.jar:/var/runtime/lib/aws-lambda-java-serialization-1.1.5.jar",
"com.amazonaws.services.lambda.runtime.api.client.AWSLambda",
"com.amazon.sampleapp.LambdaHandler::handleRequest"
],
"process.runtime.version": "17.0.14+7-LTS",
"os.type": "linux",
"thread.name": "main",
"process.pid": 2,
"telemetry.sdk.name": "opentelemetry",
"server.address": "s3.us-east-1.amazonaws.com",
"telemetry.sdk.language": "java",
"process.runtime.name": "OpenJDK Runtime Environment",
"http.request.method": "GET",
"service.instance.id": "0efc9fb1-017c-4305-825f-0e5c59d2dece",
"os.description": "Linux 5.10.234-246.921.amzn2.x86_64",
"rpc.method": "ListBuckets",
"server.port": 443,
"host.arch": "amd64",
"host.name": "169.254.26.217",
"telemetry.sdk.version": "1.44.1",
"http.response.status_code": 200,
"url.full": "https://s3.us-east-1.amazonaws.com/",
"cloud.platform": "aws_lambda",
"thread.id": 1,
"cloud.region": "us-east-1",
"service.name": "aws-opentelemetry-distro-java",
"faas.name": "aws-opentelemetry-distro-java",
"telemetry.distro.name": "opentelemetry-java-instrumentation",
"rpc.system": "aws-api",
"cloud.provider": "aws",
"process.executable.path": "/var/lang/bin/java",
"faas.instance": "2025/04/21/[$LATEST]4dbc1340125248209e4be7478b359603",
"faas.version": "$LATEST",
"PlatformType": "AWS::Lambda",
"process.runtime.description": "Amazon.com Inc. OpenJDK 64-Bit Server VM 17.0.14+7-LTS"
},
"namespace": "aws"
},
{
"id": "84714146f4414c5b",
"name": "aws.amazon.com",
"start_time": 1745255376.7475927,
"end_time": 1745255379.0668135,
"http": {
"request": {
"url": "https://aws.amazon.com/",
"method": "GET"
},
"response": {
"status": 200
}
},
"aws": {
"span.kind": "CLIENT",
"cloudwatch_logs": [
{
"log_group": "/aws/lambda/aws-opentelemetry-distro-java"
}
]
},
"annotations": {
"aws.local.service": "aws-opentelemetry-distro-java",
"span.name": "GET",
"aws.local.operation": "aws-opentelemetry-distro-java/FunctionHandler",
"span.kind": "CLIENT",
"aws.remote.service": "aws.amazon.com",
"aws.remote.operation": "GET /",
"aws.local.environment": "lambda:default"
},
"metadata": {
"telemetry.distro.version": "2.10.0-adot-lambda1-aws",
"process.command_args": [
"/var/lang/bin/java",
"-XX:MaxHeapSize=445645k",
"-javaagent:/var/runtime/lib/Log4jHotPatch.jar=log4jFixerVerbose=false",
"-XX:+UseSerialGC",
"-Xshare:on",
"-XX:SharedArchiveFile=/var/lang/lib/server/runtime.jsa",
"-XX:+TieredCompilation",
"-XX:TieredStopAtLevel=1",
"--add-opens=java.base/java.io=ALL-UNNAMED",
"-Dorg.crac.Core.Compat=com.amazonaws.services.lambda.crac",
"-XX:+ErrorFileToStderr",
"-Dcom.amazonaws.services.lambda.runtime.api.client.runtimeapi.NativeClient.JNI=/var/runtime/lib/jni/libaws-lambda-jni.linux-x86_64.so",
"-classpath",
"/var/runtime/lib/aws-lambda-java-core-1.2.3.jar:/var/runtime/lib/aws-lambda-java-runtime-interface-client-2.6.0-linux-x86_64.jar:/var/runtime/lib/aws-lambda-java-serialization-1.1.5.jar",
"com.amazonaws.services.lambda.runtime.api.client.AWSLambda",
"com.amazon.sampleapp.LambdaHandler::handleRequest"
],
"process.runtime.version": "17.0.14+7-LTS",
"os.type": "linux",
"thread.name": "main",
"process.pid": 2,
"telemetry.sdk.name": "opentelemetry",
"server.address": "aws.amazon.com",
"telemetry.sdk.language": "java",
"process.runtime.name": "OpenJDK Runtime Environment",
"http.request.method": "GET",
"service.instance.id": "0efc9fb1-017c-4305-825f-0e5c59d2dece",
"os.description": "Linux 5.10.234-246.921.amzn2.x86_64",
"host.arch": "amd64",
"host.name": "169.254.26.217",
"telemetry.sdk.version": "1.44.1",
"http.response.status_code": 200,
"url.full": "https://aws.amazon.com/",
"cloud.platform": "aws_lambda",
"thread.id": 1,
"cloud.region": "us-east-1",
"service.name": "aws-opentelemetry-distro-java",
"network.protocol.version": "2",
"faas.name": "aws-opentelemetry-distro-java",
"telemetry.distro.name": "opentelemetry-java-instrumentation",
"cloud.provider": "aws",
"process.executable.path": "/var/lang/bin/java",
"faas.instance": "2025/04/21/[$LATEST]4dbc1340125248209e4be7478b359603",
"faas.version": "$LATEST",
"PlatformType": "AWS::Lambda",
"process.runtime.description": "Amazon.com Inc. OpenJDK 64-Bit Server VM 17.0.14+7-LTS"
},
"namespace": "remote"
}
]
}
},
{
"Id": "0808b39d231c46ae",
"Document": {
"id": "0808b39d231c46ae",
"name": "aws.amazon.com",
"start_time": 1745255376.7475927,
"trace_id": "1-68067bca-0df176812ae1fd3537266942",
"end_time": 1745255379.0668135,
"parent_id": "84714146f4414c5b",
"inferred": true,
"http": {
"request": {
"url": "https://aws.amazon.com/",
"method": "GET"
},
"response": {
"status": 200
}
},
"annotations": {
"aws.local.service": "aws.amazon.com",
"aws.local.operation": "GET /"
}
}
},
{
"Id": "27206ef03a6b5459",
"Document": {
"id": "27206ef03a6b5459",
"name": "S3",
"start_time": 1745255379.5510905,
"trace_id": "1-68067bca-0df176812ae1fd3537266942",
"end_time": 1745255380.6079786,
"parent_id": "7da9101595299089",
"inferred": true,
"http": {
"request": {
"url": "https://s3.us-east-1.amazonaws.com/",
"method": "GET"
},
"response": {
"status": 200
}
},
"aws": {
"agent": "java-aws-sdk",
"span.kind": "CLIENT",
"cloudwatch_logs": [
{
"log_group": "/aws/lambda/aws-opentelemetry-distro-java"
}
],
"request_id": "BH7B7E1P6X1SX5PF"
},
"annotations": {
"aws.local.service": "AWS::S3",
"aws.local.operation": "ListBuckets"
},
"origin": "AWS::S3"
}
}
]
}
```
<img width="1529" alt="image"
src="https://github.com/user-attachments/assets/640a7d65-fb8c-40f5-a8a0-4f8588254c3d"
/>
By submitting this pull request, I confirm that my contribution is made
under the terms of the Apache 2.0 license.1 parent 528df6c commit 043b9ef
9 files changed
Lines changed: 674 additions & 388 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
238 | 238 | | |
239 | 239 | | |
240 | 240 | | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
226 | 226 | | |
227 | 227 | | |
228 | 228 | | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
229 | 258 | | |
230 | 259 | | |
231 | 260 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
160 | 160 | | |
161 | 161 | | |
162 | 162 | | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
| 2 | + | |
2 | 3 | | |
3 | 4 | | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| 8 | + | |
7 | 9 | | |
8 | 10 | | |
9 | 11 | | |
| |||
15 | 17 | | |
16 | 18 | | |
17 | 19 | | |
| 20 | + | |
18 | 21 | | |
19 | 22 | | |
20 | 23 | | |
21 | 24 | | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
22 | 28 | | |
23 | 29 | | |
24 | 30 | | |
25 | | - | |
26 | | - | |
| 31 | + | |
27 | 32 | | |
28 | | - | |
29 | | - | |
30 | 33 | | |
31 | 34 | | |
32 | 35 | | |
33 | 36 | | |
34 | 37 | | |
35 | 38 | | |
| 39 | + | |
36 | 40 | | |
37 | 41 | | |
38 | 42 | | |
39 | 43 | | |
40 | 44 | | |
41 | 45 | | |
42 | 46 | | |
43 | | - | |
| 47 | + | |
| 48 | + | |
44 | 49 | | |
45 | 50 | | |
46 | 51 | | |
47 | | - | |
48 | | - | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| 30 | + | |
| 31 | + | |
30 | 32 | | |
31 | | - | |
32 | | - | |
| 33 | + | |
| 34 | + | |
33 | 35 | | |
34 | 36 | | |
35 | 37 | | |
36 | | - | |
| 38 | + | |
37 | 39 | | |
38 | 40 | | |
39 | 41 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | | - | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
0 commit comments