Add channel get info and list

pull/121/head
Baohua Yang 2018-06-19 10:01:32 +08:00
parent b64fc2ebd8
commit f98590354a
23 changed files with 65993 additions and 67054 deletions

View File

@ -1,4 +1,6 @@
# Makefile to bootup the network, and do operations (channel, chaincode)
# Makefile to bootup the network, and do testing with channel, chaincode
# Run `make test` will pass all testing cases, and delete the network
# Run `make ready` will create a network, pass testing cases, and stand there for manual test, e.g., make test_channel_list
# support advanced bash grammar
@ -70,11 +72,13 @@ ready: # create/join channel, install/instantiate cc
make logs_save
@echo "Now the fabric network is ready to play"
@echo "run 'make cli' to enter into the fabric-cli container."
@echo "run 'make stop' when done."
@echo "* run 'make cli' to enter into the fabric-cli container."
@echo "* run 'make stop' when done."
channel_test: test_channel_create test_channel_join
# channel related operations
channel_test: test_channel_create test_channel_join test_channel_list test_channel_getinfo
# chaincode related operations
cc_test: test_cc_install test_cc_instantiate test_cc_invoke_query
restart: stop start
@ -92,6 +96,14 @@ chaincode_dev: restart chaincode_init test_cc_peer0 stop
################## Channel testing operations ################
test_channel_list: # List the channel that peer joined
@echo "List the joined channels"
@docker exec -it fabric-cli bash -c "cd /tmp; bash scripts/test_channel_list.sh"
test_channel_getinfo: # Get info of a channel
@echo "Get info of the app channel"
@docker exec -it fabric-cli bash -c "cd /tmp; bash scripts/test_channel_getinfo.sh"
test_channel_create: # Init the channel
@echo "Create channel on the fabric network"
@docker exec -it fabric-cli bash -c "cd /tmp; bash scripts/test_channel_create.sh"
@ -174,7 +186,7 @@ clean: # clean up containers
@-docker ps -a | awk '{ print $$1,$$2 }' | grep "hyperledger/fabric" | awk '{ print $$1 }' | xargs -r -I {} docker rm -f {}
@-docker ps -a | awk '$$2 ~ /dev-peer/ { print $$1 }' | xargs -r -I {} docker rm -f {}
@-docker images | awk '$$1 ~ /dev-peer/ { print $$3 }' | xargs -r -I {} docker rmi -f {}
echo "May need to clean the solo/channel-artifacts and crypto-config path"
echo "May manually clean the solo|kafka/channel-artifacts and crypto-config path"
env_clean: # clean up environment
@echo "Clean all images and containers"

View File

@ -192,6 +192,47 @@ getShasum () {
shasum ${1} | awk '{print $1}'
}
# List the channel that the peer joined
# E.g., for peer 0 at org 1, will do
# channelList 1 0
channelList () {
local org=$1
local peer=$2
echo "=== List the channels that org${org}/peer${peer} joined === "
setEnvs $org $peer
peer channel list >&log.txt
rc=$?
[ $rc -ne 0 ] && cat log.txt
if [ $rc -ne 0 ]; then
echo "=== Failed to list the channels that org${org}/peer${peer} joined === "
else
echo "=== Done to list the channels that org${org}/peer${peer} joined === "
fi
}
# Get the info of specific channel, including {height, currentBlockHash, previousBlockHash}.
# E.g., for peer 0 at org 1, get info of business channel will do
# channelGetInfo businesschannel 1 0
channelGetInfo () {
local channel=$1
local org=$2
local peer=$3
echo "=== Get channel info of ${channel} with id of org${org}/peer${peer} === "
setEnvs $org $peer
peer channel getinfo -c ${channel} >&log.txt
rc=$?
[ $rc -ne 0 ] && cat log.txt
if [ $rc -ne 0 ]; then
echo "=== Fail to get channel info of ${channel} with id of org${org}/peer${peer} === "
else
echo "=== Done to get channel info of ${channel} with id of org${org}/peer${peer} === "
fi
}
# Fetch all blocks for a channel
# Usage: channelFetchAll channel org peer
channelFetchAll () {

View File

@ -0,0 +1,23 @@
#!/bin/bash
# Importing useful functions for cc testing
if [ -f ./func.sh ]; then
source ./func.sh
elif [ -f scripts/func.sh ]; then
source scripts/func.sh
fi
## Join all the peers to the channel
echo_b "=== Getting info of channel ${APP_CHANNEL}... ==="
for org in "${ORGS[@]}"
do
for peer in "${PEERS[@]}"
do
channelGetInfo ${APP_CHANNEL} $org $peer
done
done
echo_g "=== Get info of channel ${APP_CHANNEL} Complete ==="
echo

View File

@ -0,0 +1,23 @@
#!/bin/bash
# Importing useful functions for cc testing
if [ -f ./func.sh ]; then
source ./func.sh
elif [ -f scripts/func.sh ]; then
source scripts/func.sh
fi
## Create channel
echo_b "=== Listing joined channels... ==="
for org in "${ORGS[@]}"
do
for peer in "${PEERS[@]}"
do
channelList $org $peer
done
done
echo_g "=== Done listign joined channels ==="
echo

View File

@ -696,13 +696,13 @@
},
"signatures": [
{
"signature": "MEUCIQDC28rtC7rFUl7vETlvWrSV11qdaxhKrMdsGPceiH/oHQIgXVm5sy3JHxWkypsE1ZynxZk6KWxi0/MFYW3oY3lXuoE=",
"signature": "MEQCIHtKSzjTkoRqq9OnILD6y9c5DlYLFTQRPunhhjYOGm+3AiBLrF9zOgMWgS0BoaemfZSlVInRv7B04piqPUmLnTctCA==",
"signature_header": {
"creator": {
"id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHVENDQWNDZ0F3SUJBZ0lSQUtESTVTVy9ES2s4aXVkMkZuNVRybTB3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TVRNd01EYzBNREkzV2hjTk1qZ3dNVEk0TURjME1ESTMKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk1pNWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkFROW5hOFVzQ3IzcDhBSndwV2lndndkWnJ4STRqU3EKRWg5dk5tREJvbWx2cDI1TmY5UjJQaUtISmptTmx3b3U2MWJSTlp1cmVvMVlnbmpDVk9BaTlhMmpUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSUs3NkNIRVBLWHdMCm52VzU2eHhBc3hWeGhlaXdkdDIxV2tNQ2NOQ2pHenU4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUhnZG5CTHcKajQxNkJHbStqRGVkcThtYXRWY3lkM29uRWl0NzdzNnVnQW1YQWlBdHJrTS9LZXQydGozbjYydkUxRG0vbVZNQgo1WTgwUUxlRXZZa29NTU1iY0E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",
"mspid": "Org2MSP"
},
"nonce": "4a9g783yS8wLKREAu0T4ULrsLB/0NeK9"
"nonce": "s51qpN9kHU/C5PX73Gk7HdvvyNGt82sP"
}
}
]
@ -711,7 +711,7 @@
"channel_header": {
"channel_id": "businesschannel",
"epoch": "0",
"timestamp": "2018-05-31T05:21:38.000Z",
"timestamp": "2018-06-12T02:14:20.000Z",
"tx_id": "",
"type": 2,
"version": 0
@ -721,18 +721,18 @@
"id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHVENDQWNDZ0F3SUJBZ0lSQUtESTVTVy9ES2s4aXVkMkZuNVRybTB3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TVRNd01EYzBNREkzV2hjTk1qZ3dNVEk0TURjME1ESTMKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk1pNWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkFROW5hOFVzQ3IzcDhBSndwV2lndndkWnJ4STRqU3EKRWg5dk5tREJvbWx2cDI1TmY5UjJQaUtISmptTmx3b3U2MWJSTlp1cmVvMVlnbmpDVk9BaTlhMmpUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSUs3NkNIRVBLWHdMCm52VzU2eHhBc3hWeGhlaXdkdDIxV2tNQ2NOQ2pHenU4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUhnZG5CTHcKajQxNkJHbStqRGVkcThtYXRWY3lkM29uRWl0NzdzNnVnQW1YQWlBdHJrTS9LZXQydGozbjYydkUxRG0vbVZNQgo1WTgwUUxlRXZZa29NTU1iY0E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",
"mspid": "Org2MSP"
},
"nonce": "+pfcTg5yMvktMXYWEcXTmXkaKm6QlNPL"
"nonce": "93Kwqhlt/QQTYQvJu4yYssZrBnFW8e7V"
}
}
},
"signature": "MEQCIGtTGk1P9nXukC5Pe5SDzbTH3HE3+9SRNQ4NoCRFnD/UAiBCGGtagMyLWBUX5ISmy6uRFW9ZruwMzcg4fc5/xQlwWA=="
"signature": "MEQCIGiRYbEW6RgfiqPZxYLwCcmNKNxQwnAE1Oee4+3WQgs5AiAL41iACs5N8Qi6sHBsN2Ccgbfcg5kSSbuFj5kgJCHRbw=="
}
},
"header": {
"channel_header": {
"channel_id": "businesschannel",
"epoch": "0",
"timestamp": "2018-05-31T05:21:38.000Z",
"timestamp": "2018-06-12T02:14:20.000Z",
"tx_id": "",
"type": 1,
"version": 0
@ -742,23 +742,23 @@
"id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDekNDQWJLZ0F3SUJBZ0lRV2VBcENjTjFKMzZNQ2NuMStCb1BXREFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNREV6TURBM05EQXlOMW9YRFRJNE1ERXlPREEzTkRBeU4xb3dXREVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4SERBYUJnTlZCQU1URTI5eVpHVnlaWEl1WlhoaGJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxCmhrak9QUU1CQndOQ0FBUWluaVozRmQwZGNSMFNoWm9xNk1TOGd5THJablhFa2t4UERWM2lrS0dwNjdkU1AwUU8KRms2Z0NVMW9Kc2tqbFp4d1prWTYyNUF6Q1AwNEYzRHA5N1dsbzAwd1N6QU9CZ05WSFE4QkFmOEVCQU1DQjRBdwpEQVlEVlIwVEFRSC9CQUl3QURBckJnTlZIU01FSkRBaWdDRDJNcm9nYkwrSE9HVFJWTFg2Q3duaGRyZEVMdDRvCnpQOUFlMDN2dUdPNERUQUtCZ2dxaGtqT1BRUURBZ05IQURCRUFpQUVyTlJSV0dZNUNMWW5GNVhHaWNlN2lLT1IKcXRaYkFTbnd0eGZ4SjFhbGZnSWdLVWg0enpLM0VDZTY2R2hyVlZQTGZwRFF6K1lLNkZ3NURhMEd5dit0MkpJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",
"mspid": "OrdererMSP"
},
"nonce": "iY/F+dxZOrg9Yxue69Bn666ZgbZHoO/4"
"nonce": "IIk9lqom/gDVr03gcr3T4kleSURuD8nj"
}
}
},
"signature": "MEUCIQDE4EF/LZM8ARmUAWzsZhxaWkvQJiW6lFNW1kaT/t1fogIgHs3kyK6YAlcQ96rTduT1jhlNUeAwSrcyrEPW8soHpaA="
"signature": "MEUCIQDruLP4esd6hgo2Ci1U5bXW60RuyGlbR/G9F0YvsxsVcwIgKgzLUuhSfTKo2hb4daPbDdmdshBu/c9Wnkl0pGjKfPQ="
}
]
},
"header": {
"data_hash": "9bqGlksLnXAk7jwVIPKtKGiu25A6KkCV/GFqZop8Q90=",
"data_hash": "Om/2/2vkczZgs/n0AUiXRejsCW/Wz+x3+uGkswCUAL0=",
"number": "2",
"previous_hash": "CxV08lyZKJUB14qCLoyAUb7/krG1WBKlfBeaKrVWgy8="
"previous_hash": "cVpR6aKv7O8tkJ3xShRITwwjqenyrGIOzppeMf+MBss="
},
"metadata": {
"metadata": [
"EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDekNDQWJLZ0F3SUJBZ0lRV2VBcENjTjFKMzZNQ2NuMStCb1BXREFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNREV6TURBM05EQXlOMW9YRFRJNE1ERXlPREEzTkRBeU4xb3dXREVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4SERBYUJnTlZCQU1URTI5eVpHVnlaWEl1WlhoaGJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxCmhrak9QUU1CQndOQ0FBUWluaVozRmQwZGNSMFNoWm9xNk1TOGd5THJablhFa2t4UERWM2lrS0dwNjdkU1AwUU8KRms2Z0NVMW9Kc2tqbFp4d1prWTYyNUF6Q1AwNEYzRHA5N1dsbzAwd1N6QU9CZ05WSFE4QkFmOEVCQU1DQjRBdwpEQVlEVlIwVEFRSC9CQUl3QURBckJnTlZIU01FSkRBaWdDRDJNcm9nYkwrSE9HVFJWTFg2Q3duaGRyZEVMdDRvCnpQOUFlMDN2dUdPNERUQUtCZ2dxaGtqT1BRUURBZ05IQURCRUFpQUVyTlJSV0dZNUNMWW5GNVhHaWNlN2lLT1IKcXRaYkFTbnd0eGZ4SjFhbGZnSWdLVWg0enpLM0VDZTY2R2hyVlZQTGZwRFF6K1lLNkZ3NURhMEd5dit0MkpJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYL7R08m7OZlpnXEW8IV2YvHr8Y3b2tjh1EkYwRAIgagJsHhvpfNAR+m8K6wGctcxN71VgRWco0nUBRmMPJFgCIDxNPeKqgupkNBB3pj+fQb5pqaAlP/F/oRJC4TbsO7VZ",
"CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDQ3pDQ0FiS2dBd0lCQWdJUVdlQXBDY04xSjM2TUNjbjErQm9QV0RBS0JnZ3Foa2pPUFFRREFqQnBNUXN3CkNRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OVTJGdUlFWnkKWVc1amFYTmpiekVVTUJJR0ExVUVDaE1MWlhoaGJYQnNaUzVqYjIweEZ6QVZCZ05WQkFNVERtTmhMbVY0WVcxdwpiR1V1WTI5dE1CNFhEVEU0TURFek1EQTNOREF5TjFvWERUSTRNREV5T0RBM05EQXlOMW93V0RFTE1Ba0dBMVVFCkJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHY21GdVkybHoKWTI4eEhEQWFCZ05WQkFNVEUyOXlaR1Z5WlhJdVpYaGhiWEJzWlM1amIyMHdXVEFUQmdjcWhrak9QUUlCQmdncQpoa2pPUFFNQkJ3TkNBQVFpbmlaM0ZkMGRjUjBTaFpvcTZNUzhneUxyWm5YRWtreFBEVjNpa0tHcDY3ZFNQMFFPCkZrNmdDVTFvSnNramxaeHdaa1k2MjVBekNQMDRGM0RwOTdXbG8wMHdTekFPQmdOVkhROEJBZjhFQkFNQ0I0QXcKREFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WSFNNRUpEQWlnQ0QyTXJvZ2JMK0hPR1RSVkxYNkN3bmhkcmRFTHQ0bwp6UDlBZTAzdnVHTzREVEFLQmdncWhrak9QUVFEQWdOSEFEQkVBaUFFck5SUldHWTVDTFluRjVYR2ljZTdpS09SCnF0WmJBU253dHhmeEoxYWxmZ0lnS1VoNHp6SzNFQ2U2NkdoclZWUExmcERReitZSzZGdzVEYTBHeXYrdDJKST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGLKfR3hQ8hIOCpsLgE9ulQXc0MNSGhih7xJGMEQCIEdEQY5EKCng0tSSGcoBJTXLDvW5SsFkK2FcakrzDPYAAiBMMzVdXQ8NYEahtrSywBv8+guCaoFTQTJrAwJXFY0NSw==",
"EvkGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDekNDQWJLZ0F3SUJBZ0lRV2VBcENjTjFKMzZNQ2NuMStCb1BXREFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNREV6TURBM05EQXlOMW9YRFRJNE1ERXlPREEzTkRBeU4xb3dXREVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4SERBYUJnTlZCQU1URTI5eVpHVnlaWEl1WlhoaGJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxCmhrak9QUU1CQndOQ0FBUWluaVozRmQwZGNSMFNoWm9xNk1TOGd5THJablhFa2t4UERWM2lrS0dwNjdkU1AwUU8KRms2Z0NVMW9Kc2tqbFp4d1prWTYyNUF6Q1AwNEYzRHA5N1dsbzAwd1N6QU9CZ05WSFE4QkFmOEVCQU1DQjRBdwpEQVlEVlIwVEFRSC9CQUl3QURBckJnTlZIU01FSkRBaWdDRDJNcm9nYkwrSE9HVFJWTFg2Q3duaGRyZEVMdDRvCnpQOUFlMDN2dUdPNERUQUtCZ2dxaGtqT1BRUURBZ05IQURCRUFpQUVyTlJSV0dZNUNMWW5GNVhHaWNlN2lLT1IKcXRaYkFTbnd0eGZ4SjFhbGZnSWdLVWg0enpLM0VDZTY2R2hyVlZQTGZwRFF6K1lLNkZ3NURhMEd5dit0MkpJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYLi6Np0Sxc4mVS05v5/5OHcDuAaOCKT0gEkcwRQIhAOQU0ei9xQCcxIvVz+cCw8PJZ+JDD13oIhg+pNXNVc9iAiA0fUpBnlmdUV8px5DrsUy/dy/aA4bH7lWIVDYlX3Pfdg==",
"CgIIAhL5BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDQ3pDQ0FiS2dBd0lCQWdJUVdlQXBDY04xSjM2TUNjbjErQm9QV0RBS0JnZ3Foa2pPUFFRREFqQnBNUXN3CkNRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OVTJGdUlFWnkKWVc1amFYTmpiekVVTUJJR0ExVUVDaE1MWlhoaGJYQnNaUzVqYjIweEZ6QVZCZ05WQkFNVERtTmhMbVY0WVcxdwpiR1V1WTI5dE1CNFhEVEU0TURFek1EQTNOREF5TjFvWERUSTRNREV5T0RBM05EQXlOMW93V0RFTE1Ba0dBMVVFCkJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHY21GdVkybHoKWTI4eEhEQWFCZ05WQkFNVEUyOXlaR1Z5WlhJdVpYaGhiWEJzWlM1amIyMHdXVEFUQmdjcWhrak9QUUlCQmdncQpoa2pPUFFNQkJ3TkNBQVFpbmlaM0ZkMGRjUjBTaFpvcTZNUzhneUxyWm5YRWtreFBEVjNpa0tHcDY3ZFNQMFFPCkZrNmdDVTFvSnNramxaeHdaa1k2MjVBekNQMDRGM0RwOTdXbG8wMHdTekFPQmdOVkhROEJBZjhFQkFNQ0I0QXcKREFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WSFNNRUpEQWlnQ0QyTXJvZ2JMK0hPR1RSVkxYNkN3bmhkcmRFTHQ0bwp6UDlBZTAzdnVHTzREVEFLQmdncWhrak9QUVFEQWdOSEFEQkVBaUFFck5SUldHWTVDTFluRjVYR2ljZTdpS09SCnF0WmJBU253dHhmeEoxYWxmZ0lnS1VoNHp6SzNFQ2U2NkdoclZWUExmcERReitZSzZGdzVEYTBHeXYrdDJKST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGAtd40Avwwg02jgfO4dJhRsvffJlDNXaFhJHMEUCIQDt83w7IOlrWSEd48BCFW3WeYFAJSq24dUxvIki4keeZAIgUNzwPh252jTKCsbcIMCbcciDuSQ1dtJTsWbWhJhxf6o=",
"",
""
]

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long