Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

azurite preset based on the localstack preset #837

Merged
merged 19 commits into from
Jul 29, 2023
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 12 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,18 @@ jobs:
name: Test server
command: go test -race -cover -v ./internal/gnomockd -run TestVault

test-azurite:
machine: true
resource_class: large
steps:
- setup-for-go-test
- run:
name: Test preset
command: go test -race -cover -v ./preset/azurite/...
- run:
name: Test server
command: go test -race -cover -v ./internal/gnomockd -run TestAzurite

### preset tests go here

workflows:
Expand Down
25 changes: 25 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -473,8 +473,32 @@ jobs:
cat preset-cover.txt server-cover.txt > coverage.txt
bash <(curl -s https://codecov.io/bash)

test-azurite:
name: "[preset] azurite"
runs-on: ubuntu-latest
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
steps:
- name: Set up Go 1.20
uses: actions/setup-go@v1
with:
go-version: 1.20
- name: Check out code into the Go module directory
uses: actions/checkout@v1
- name: Get dependencies
run: go get -v -t -d ./...
- name: Test preset
run: go test -race -cover -coverprofile=preset-cover.txt -coverpkg=./... -v ./preset/azurite/...
- name: Test server
run: go test -race -cover -coverprofile=server-cover.txt -coverpkg=./... -v ./internal/gnomockd -run TestAzurite
- name: Report coverage
run: |
cat preset-cover.txt server-cover.txt > coverage.txt
bash <(curl -s https://codecov.io/bash)

test-vault:
name: "[preset] vault"

runs-on: ubuntu-latest
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
Expand All @@ -495,4 +519,5 @@ jobs:
run: |
cat preset-cover.txt server-cover.txt > coverage.txt
bash <(curl -s https://codecov.io/bash)

### preset tests go here
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ The power of Gnomock is in the Presets. Existing Presets with their supported<su

<small>*\* **Supported** versions are tested as part of CI pipeline. Other versions might work as well.*</small>


| Preset | Go package | Go API | Supported versions | arm64 |
|--------|------------|--------|--------------------|-------|
[Localstack](https://github.com/localstack/localstack) (AWS) | [Go package](https://github.com/orlangure/gnomock/tree/master/preset/localstack) | [Reference](https://pkg.go.dev/github.com/orlangure/gnomock/preset/localstack?tab=doc) | `0.12.2`, `0.13.1`, `0.14.0` | ✅
Expand All @@ -123,6 +122,7 @@ CockroachDB | [Go package](https://github.com/orlangure/gnomock/tree/master/pres
InfluxDB | [Go package](https://github.com/orlangure/gnomock/tree/master/preset/influxdb) | [Reference](https://pkg.go.dev/github.com/orlangure/gnomock/preset/influxdb?tab=doc) | `2.0.4-alpine` | ✅
Cassandra | [Go package](https://github.com/orlangure/gnomock/tree/master/preset/cassandra) | [Reference](https://pkg.go.dev/github.com/orlangure/gnomock/preset/cassandra?tab=doc) | `4.0`, `3` | ✅
Vault | [Go package](https://github.com/orlangure/gnomock/tree/master/preset/vault) | [Reference](https://pkg.go.dev/github.com/orlangure/gnomock/preset/vault?tab=doc) | `1.10.11`, `1.11.8`, `1.12.4`, `1.13` | ✅
Azurite | [Go package](https://github.com/orlangure/gnomock/tree/master/preset/azurite) | [Reference](https://pkg.go.dev/github.com/orlangure/gnomock/preset/azurite?tab=doc) | `3.22.0` | ✅
<!-- new presets go here -->

It is possible to use Gnomock [directly from Go](https://pkg.go.dev/github.com/orlangure/gnomock#StartCustom) code without any presets. HTTP API only allows to setup containers using presets that exist in this repository.
Expand Down
1 change: 1 addition & 0 deletions cmd/server/presets.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package main
// all known presets should go right here so that they are available when
// requested over HTTP.
import (
_ "github.com/orlangure/gnomock/preset/azurite"
_ "github.com/orlangure/gnomock/preset/cassandra"
_ "github.com/orlangure/gnomock/preset/cockroachdb"
_ "github.com/orlangure/gnomock/preset/elastic"
Expand Down
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module github.com/orlangure/gnomock
go 1.20

require (
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.0.0
github.com/Microsoft/go-winio v0.5.2 // indirect
github.com/aws/aws-sdk-go v1.44.247
github.com/bradfitz/gomemcache v0.0.0-20230124162541-5f7a7d875746
Expand Down Expand Up @@ -40,6 +41,8 @@ require (
require golang.org/x/mod v0.8.0

require (
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1 // indirect
github.com/cenkalti/backoff/v3 v3.0.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/deepmap/oapi-codegen v1.10.1 // indirect
Expand Down
12 changes: 12 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,18 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0 h1:VuHAcMq8pU1IWNT/m5yRaGqbK0BiQKHT8X4DTp9CHdI=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0/go.mod h1:tZoQYdDZNOiIjdSn0dVWVfl0NEPGOJqVLzSrcFk4Is0=
github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0=
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8=
github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1 h1:Oj853U9kG+RLTCQXpjvOnrv0WaZHxgmZz1TlLywgOPY=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w=
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.0.0 h1:u/LLAOFgsMv7HmNL4Qufg58y+qElGOt5qv0z1mURkRY=
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.0.0/go.mod h1:2e8rMJtl2+2j+HXbTBwnyGpm5Nou7KhvSfxOq8JpTag=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 h1:BWe8a+f/t+7KY7zH2mqygeUD0t8hNFXe08p1Pb3/jKE=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA=
Expand Down Expand Up @@ -72,6 +80,7 @@ github.com/deepmap/oapi-codegen v1.10.1 h1:xybuJUR6D8l7P+LAuxOm5SD7nTlFKHWvOPl31
github.com/deepmap/oapi-codegen v1.10.1/go.mod h1:TvVmDQlUkFli9gFij/gtW1o+tFBr4qCHyv2zG+R0YZY=
github.com/denisenkom/go-mssqldb v0.12.3 h1:pBSGx9Tq67pBOTLmxNuirNTeB8Vjmf886Kx+8Y+8shw=
github.com/denisenkom/go-mssqldb v0.12.3/go.mod h1:k0mtMFOnU+AihqFxPMiF05rtiDrorD1Vrm1KEz5hxDo=
github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
Expand Down Expand Up @@ -140,6 +149,7 @@ github.com/gocql/gocql v1.3.2 h1:ox3T+R7VFibHSIGxRkuUi1uIvAv8jBHCWxc+9aFQ/LA=
github.com/gocql/gocql v1.3.2/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
Expand Down Expand Up @@ -276,6 +286,7 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/labstack/echo/v4 v4.7.2/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks=
github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
Expand Down Expand Up @@ -347,6 +358,7 @@ github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zM
github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0=
github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
Expand Down
94 changes: 94 additions & 0 deletions internal/gnomockd/azurite_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package gnomockd_test

import (
"bytes"
"context"
"encoding/json"
"fmt"
"io"
"net/http"
"net/http/httptest"
"os"
"strings"
"testing"

"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container"
"github.com/orlangure/gnomock"
"github.com/orlangure/gnomock/internal/gnomockd"
"github.com/orlangure/gnomock/preset/azurite"
"github.com/stretchr/testify/require"
)

func TestAzurite(t *testing.T) {
t.Parallel()

h := gnomockd.Handler()
bs, err := os.ReadFile("./testdata/azurite.json")
require.NoError(t, err)

buf := bytes.NewBuffer(bs)
w, r := httptest.NewRecorder(), httptest.NewRequest(http.MethodPost, "/start/azurite", buf)
h.ServeHTTP(w, r)

res := w.Result()

defer func() { require.NoError(t, res.Body.Close()) }()

body, err := io.ReadAll(res.Body)
require.NoError(t, err)

require.Equalf(t, http.StatusOK, res.StatusCode, string(body))

var c *gnomock.Container

err = json.Unmarshal(body, &c)
require.NoError(t, err)

connString := fmt.Sprintf(
azurite.ConnectionStringFormat,
azurite.AccountName,
azurite.AccountKey,
c.Address(azurite.BlobServicePort),
azurite.AccountName)

ctx := context.Background()
azblobClient, connErr := azblob.NewClientFromConnectionString(connString, nil)
require.NoError(t, connErr)

var maxResults int32 = 200
options := azblob.ListBlobsFlatOptions{
Include: container.ListBlobsInclude{},
Marker: nil,
MaxResults: &maxResults,
Prefix: nil,
}
pager := azblobClient.NewListBlobsFlatPager("some-bucket", &options)
require.Equal(t, pager.More(), true)

pagesScanned := 0

for pager.More() {
pagesScanned++
resp, err := pager.NextPage(ctx)

Check failure on line 73 in internal/gnomockd/azurite_test.go

View workflow job for this annotation

GitHub Actions / [core] lint

assignments should only be cuddled with other assignments (wsl)
aeolus3000 marked this conversation as resolved.
Show resolved Hide resolved

require.NoError(t, err)
require.Equal(t, 100, len(resp.Segment.BlobItems))

for _, v := range resp.Segment.BlobItems {
require.True(t, strings.HasPrefix(*v.Name, "/file-"))
}
}

require.Equal(t, 1, pagesScanned)

bs, err = json.Marshal(c)
require.NoError(t, err)

buf = bytes.NewBuffer(bs)
w, r = httptest.NewRecorder(), httptest.NewRequest(http.MethodPost, "/stop", buf)
h.ServeHTTP(w, r)

res = w.Result()
require.Equal(t, http.StatusOK, res.StatusCode)
}
8 changes: 8 additions & 0 deletions internal/gnomockd/testdata/azurite.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"preset": {
"blobstore_path": "./testdata/azurite/blobstore",
"version": "3.22.0"
},
"options": {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
b72ec76436b8a91d7dd090dcda45c415ab29dbf2161675b87eb36dcab3d89a52faf1739a319ed2f8bd09e80823d6ca51fd71486b477ef8eefb1fda86845b63e5
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
288a3d8cd6db81679c7fe49c9369d4e35f302a8b763a5e88b77a9d7948536d43dc45d6658f44b49ac90ece6562595f8204d1425a40174c5634cbf1c35e5e3bb8
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
4f0d13f3f4698ef87a68aaef3d4170edcab46ca9623f805da0fd354eb80def890444d901facac717011d6d9f1b9703c6e559fa28fab3521d965b80ba5b6f2de4
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0b02647f28bf44c188a0ab65d67ccbd7a6e6b6625c7760fdc7f492871c1ed69d1d9c2f1911456dabf90282c980683ea5ad04524b6d64d0a7d5340e8500e2cce7
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
02f0a852ac7c53ba0d04c34385a1ccfb96d615af89caa066466ed0923a5abcdf0f0ad73a6bd92c655a1eb67ef55b6960d17927cc2fd2f1389f6d3be6be927d91
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1c9b6194392fcfcea82208553b59f8bdbb50c44ded7037010ad946afa2a8dca2d9125a4b20074134f7ae432cd7a677439e43262ae8568267702580347bfe72c3
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
b05cef2d070695b395aad949d0fb188f749c73998b95bb24bc0d5eb91df82a8b70141c80f8d9fb834d82710c7071221f8e269d31dba312e8e65b380e35bed749
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fdd491662466a8dbd4b8a540df7525b6e648f79c840413f98472ba748c0d388fcb2f148d549f14a15230250461357b4294161c954cdc9e68b1124a147b7933bf
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
228387a75e1b50a34e86e88ea692fe7317848e07a21ec8ecf6e56f8e46919ab9efec897b8ce3f9c3976bfbbc41e2e3337b585d53c0b02cc6e4133c08413386bb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bf7935459585a5d86d098cb1f705a4ee2260fd745c7c3471d9b2498c94317c2d8c4dbea7ccd59a016583cbfb912ebebe2a0ecb94a21984f06da97f14ac859ddc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
b9e5b21f78064ed3221eb020bcf5ac1038f204954539001e114f23bcec4ee9b211001dcf89b8ab22ac1296bc864d68c67e8545e98cfdf79fe8e8d929f7a03a30
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3647089511907596192e85b6f1aece4bef2a23e410a7453dcf94e87d5dc5ac98f8b0ae6526e44015ac555bdc86181c83ef4428484e3c2b8ab2083e5e6a97abde
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dbb1d95fa804ae3cb81334b04cc37b45c4a70955c28069079b99d62d25423ba913a1be52224aca3b8cf69e71dba9f3460e86ccbe47e71bdbb8d99c5fe28d8dbf
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
f96d7440645428b612a69108edd2fa7f5f05e0993d32f84df6d2574e1beaae74e7f3b0298edeadc2b92a94d73bbe18c49730cfda18c4acc3409d9eb934d8630e
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e1bed71ab9700a7942f6b97813f0d196365f9ab0366b95a1dd00f22e3ba614131c10a757bcc73c1687b9b5922558bceeb20cbf26222911cfb92b7301b7efd838
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
d80774e39cb322471aca968a259944ac78c0b8cb755d67f182601b09da4c585bde50e95547c8fcacb30ffd530c121d1152b0c84378d17cab07a17e8247157c05
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6d8dec47389adb0a42be012e47df63a75248b61b18e92bdeee52cce9a7ce3358198289ec8b6cc625564c7c35bfa47da8acd3564edce650e072361c8394ebeb86
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
50559c51ce97720c0b5c1daa57140c2c3ca715ce51a5328b1e3a0157aad6a4c893a56b4e1a5784a8e0d4d81e6689376acf776d2d720f6b8cd8d14c38ab720dc4
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
02ab26ece2518e9a813e0447ab63c1a46de881ec7c694b7394ed8f5e7806b26d2a1b1b7d33af9efd5724348d901c71019c05984cda53a95bf743b71ca533c73b
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
7f8d115625d6422441f0fdc30c247640f39a688051e3637ab797a68df790653cd7a5c38d57eb237d0133bf374d3231816dbd3d903e44e92ab211fca0dc247cb3
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e95feae17e50290f16b21214996c908e9510a0c1c29168dc0a58af3febb912007fda029ac2abc20da9f53f7a277d973d3a6d5ca4fddd37cf117952de308f9993
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0a4aad7fc04e7666f49cd7cbf660ef0db3ca84bc301457973f6574aae8019984bc6ab2e8f969aed3a570bc8c0a937a20f88a3d771775a0d4d42e86c602d5fdbe
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6d89098292d0cad2ef04e1b291f52e5c912da6e7b865aad3a24996774e3a051c88f76e5b5644dd9cb5f2ad61b641baaafd3a21b25b4a0c1aedca13292241fb5c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cc896a51322e5a3a506b5bd41e43e1638753a8040e5d5748c8f8164b8a323abba4d5424304d30d08b33aa4a5d4a1eb314efa48debeda09edaacd35078cbdc850
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
f0a725f71d5383b88862dd0cb7639abe176eae7095df1f2721a67b022e43d14635f3585f352e76284c7a07f59e0a174b4fd1fa677ef2d86bdca4a18c18bc9bef
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a9007229be777af2cb730ed7ca738a5ddfed0d173c54fbfaf27a9177d22c05f260d08de8373eef34c41119aff5c474302c4c3f625099586adb1f730eb3d405a5
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
41c165b3cdb442092c7be171a9e1ba1eb2dd643f6d213ce387d8283274aa02e13adc07dc7c77a8962985d15f5a5cc1e8e59284513e29ef12781a51bdc6ef8b80
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6fbbc2f46aa2d651c8f0630d1f2adf0f89f7c4dd8247098b87a1c0fc740ade7a200bfd957a43ca4941798d3038e1e0e71650562e92f8ec460eb81be92e6743a7
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
47dddfbad04b48396b7f76becdf5232ade5603c9059bf00a9ff4deb5bc8f9601506191b367fae5ea15882a266849cef5dafdc0c3b8b08af5feaed87b5788667c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
72e9030e39fc9d68582269fcd7f23b93154617854b3ef6cd02c1074024e333384352e4ae047092ed5c3b773a4ff350e1b21634cd2224b90cbaef3f67b4ed8c3e
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
de08d01a267d1b2fc724b49d7dfecca8da81779546195eee337d2aadda3d1fcb8295e78f5f1de78b9d0de44cf70eafc7057361502b5164fe1fb468bf1c56fd81
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cb369a9de31222a52db25b6918b2bbda9e68a4edd6e2a6d1d78320dee05c0987eb12556fdd16520489866f0e139cf4c19eb09931dbba08df80adb3f5e192e16d
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e419bb0c522fbc237c507dd24a61a59e5a893631dff96b4e3dd15eea3b7be92261bb90420e31b97c40862ac3e71139a799af41ce90e717ca3ad27f537ba1c39b
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
f1f7ca7bbaa97605c1a496c488d8e5fa3a4b3f14c55d03ccdc1e8fffabf2b0edeef784c376a34ff3718a01c0614468334291d7e969884f4d1d684847dd05af2f
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e822087fe6d58e3741ecfb26515e2618876d320f8f191b5829e54b1a7e6ca90eda654d91bb4aabb195028dbb0e0418446de450bf17f2db22b75640f9634f7af3
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
93905d1540d5ee806a9120de175455e94bdbb66b9bb6bb76cde771bd1205d6fab5d1b363cfd1a60a5aeea98af31b5853e07882b42c735ffbffb531c6e0d18a12
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6fde43af7765155d75b43ef0d50e5bd408787eeacb380424eebde10306d3f467aade28ae520b0c7b4cbdf5c63b5f92533503718d05aaa21f3642054037aba60d
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
74708d0d32981cd92f7486da74cf68e46068aba7d244dc5681c26959abcbeb56abe68cfe0728aea53adc3dc308651e8171fb2f22506c83907561dde6fa8669dd
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
760db25a323a535ee7e584fb209aa739d3ac66684e443bc39686c687ca6d325b5bd7c58f454983c317cb8ccf444a6a6413dcd54ce0fd6dfd2f4fa92ac5c6e3db
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6fce7db5951ed9dfaa2f3b9d625fab289db6c51098fb9324108f2235261fe9478628e24d42307472880277cf949dc4a00a91955616eed4dae1b5797b397e8c61
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
5ef22a53f3a1491903450c1cda2c2cb4d3e660c1f8b377e11d5d4411492e0942c455203e46f35270f56810ec33998a7d5a147817f0a2a84886aad51d25daaedb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
9c7860d924f2f5e3943c13bd40f19d250fa450b925b99f57308685ff19e0ded3b98b6ed08219d37f540c1f515e2a3b31060bc3a6c90a3f9733745798b636b048
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
899c00541c402583e962a0b6e0e46034a08eae0944f1934823545a32fd436447ef8dabed40aca6951ebe3c18257c9a29e44eac42fee1003438e28071aff0cbd9
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
b00e050eb9120f7ab42faf321bbd21cf6663e8320e68d5f113b0e1182a73f13ef28c636f57e76e0f418cc9c3d512da77050b55bf9d5b4f994e6695ddf135390e
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
88a3c8c7371290e0a4d5a5da9697fd294978cc651371c102c83af5795249bfffa3b9dc3ed35b7ad3a0ffec30bb289e8240514adf008963840a9c9abef978d7d9
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
d07c638321adfe3ed251210503be40961bc9d7cd202b03ef489e4184ffcf9de9708bedc88692d8b79312a030a1a9e137723804b408e5c51fbe4dfa33ffd4d7f5
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a27522a00fbf2de703b7c897eda6f35259833c6ebdad34fa5ca06d8f039b59cff1987a77ead15525fc943db22234c54a951c39f21ba04c6cba20e6c38f566892
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
5731f3fca15cae7a0778b51fd1fe2eac5384424397665a51e8b259bed52789f5909c4d49fa62c2c672a971c549d156087f7371e736e24c71ee97d6ff8b34fe11
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
24d942b642fb31598f456116dcd4c2ef5203640ab4431266deff216bcb5d5b5d7b8c3525b013d397ace924e46df6c09ed2ad675cd7f499152b491e34d0671691
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e7a7199d72d6f6c3f9127fc9115a201df5700164162f1fba160f513e9a8dfb5d1d4a1ec7235112e6407138f65ea972b327380cc9dacc050e0fe0467ee661ad93
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
77704e3571dca17670dababaa2fede596605bac5ebf180230c2113bb9d77bc85428c51d6e862ca3225a21165f9ae7d8bb3f143f06fbe91e4ec3b31c25411d406
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
34de23c7c874eabd8a5a61412710ad7d6924a79ca829be3bcd57cbad8e9eed4b04cc1c21240629e9d1bd07dab03af3c28a2ce7e4e364be3f197b5cd79f3dfdb7
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a09dc822a6660ff4701eaac4952ed7e2de29c24e6c6bf297f62c655d24cacf28c213fa0a8c436b4cbf3db7cd91804678037ae2a21cecc11bbf1e56444190e312
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
8e24754ec0a3166f8402aed38786b7b4a85f55ccbc6cb566b168e071bb2f7fc005075ccb9122e889786fa0be4cf4dc4b176c480b5c247b3f96a76fc0b4c49e5f
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
59fe66b21d8e8f8c57a38c21165a5e0ea33baa403e6791d89340873818e41376c945c6807cd03bfde19c97ca867e75f38bd5c2b12faa1e2af7332e7b84494e84
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ffe65e87d8de873dbfbeba2acada0ea7a5227a5225e89fb254fb61c187ceb9df83fb7aa946d73e683c87223bae7c0ef8f0f011a1e30beb31e066e88a164f240c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
f5404950415a1d51601286904ca3b0edf5f4ec2bae9d3ab383f02275aa8d5c105e287e83e561d4dc8fd2ec7b25221993e91327aeae252741e4fe2c814e74e1a7