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

Implement fs tests #114

Merged
merged 3 commits into from
Jan 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions .github/workflows/ports_psoc6.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
commit_sha: ${{ steps.commit_sha.outputs.sha_short }}

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Install packages
run: source tools/ci.sh && ci_psoc6_setup
- name: Build
Expand Down Expand Up @@ -54,7 +54,7 @@ jobs:
- CY8CPROTO-062-4343W
- CY8CPROTO-063-BLE
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Download binaries
uses: actions/download-artifact@v3
- name: Container setup
Expand All @@ -65,22 +65,23 @@ jobs:
run: |
cp mpy-psoc6_${{ matrix.board }}_${{ needs.server-build.outputs.commit_sha }}/firmware.hex .
source tools/ci.sh && ci_psoc6_flash_multiple_devices ${{ matrix.board }} firmware.hex tools/psoc6/${{ runner.name }}-devs.yml
- name: Run psoc6 multi test
- name: Run psoc6 filesystem test
if: matrix.board == 'CY8CPROTO-062-4343W'
run: |
devs=($(python tools/psoc6/get-devs.py port -b ${{ matrix.board }} -y tools/psoc6/${{ runner.name }}-devs.yml))
cd tests
./psoc6/run_psoc6_tests.sh --psoc6-multi --dev0 ${devs[0]} --dev1 ${devs[1]}
- name: Run psoc6 filesystem test
./psoc6/run_psoc6_tests.sh -v --dev0 ${devs[0]}
- name: Run psoc6 multi test
run: |
devs=($(python tools/psoc6/get-devs.py port -b ${{ matrix.board }} -y tools/psoc6/${{ runner.name }}-devs.yml))
cd tests
./psoc6/run_psoc6_tests.sh -v --dev0 ${devs[0]} --dev1 ${devs[1]}
./psoc6/run_psoc6_tests.sh --psoc6-multi --dev0 ${devs[0]} --dev1 ${devs[1]}
- name: Run psoc6 tests
run: |
devs=($(python tools/psoc6/get-devs.py port -b ${{ matrix.board }} -y tools/psoc6/${{ runner.name }}-devs.yml))
cd tests
./psoc6/run_psoc6_tests.sh --psoc6 --dev0 ${devs[0]}
# TODO: Enable when HIL is updgraded
# TODO: Enable when HIL is upgraded
# - name: Run all implemented tests
# if: github.event_name == 'pull_request'
# continue-on-error: true
Expand Down
49 changes: 46 additions & 3 deletions tests/psoc6/run_psoc6_tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ usage() {
echo " -i run implemented tests only and exclude known failing tests"
echo " -n run not yet implemented tests only"
echo " -w run wifi tests => needs secrets.py key file>"
echo " -v run virtual filesystem related tests"
echo " -v run virtual filesystem related tests. If followed by -x, runs advance tests too."
echo " --dev0 device to be used"
echo " --dev1 second device to be used (for multi test)"
echo " --psoc6 run only psoc6 port related tests"
Expand All @@ -37,7 +37,7 @@ for arg in "$@"; do
esac
done

while getopts "acd:e:fhimnpwv" o; do
while getopts "acd:e:fhimnpwvx" o; do
case "${o}" in
a)
all=1
Expand Down Expand Up @@ -75,6 +75,9 @@ while getopts "acd:e:fhimnpwv" o; do
v)
fs=1
;;
x)
afs=1
;;
*)
usage
;;
Expand Down Expand Up @@ -123,6 +126,10 @@ if [ -z "${fs}" ]; then
fs=0
fi

if [ -z "${afs}" ]; then
afs=0
fi

if [ -z "${psoc6OnlyMulti}" ]; then
psoc6OnlyMulti=0
fi
Expand Down Expand Up @@ -239,7 +246,7 @@ fi

if [ ${fs} -eq 1 ]; then

echo " running filesystem tests ..."
echo " running filesystem tests ... "
echo

./run-tests.py --target psoc6 --device ${device0} \
Expand All @@ -253,6 +260,42 @@ if [ ${fs} -eq 1 ]; then
echo " done."
echo

echo " attempting to save different test files in flash "
echo
echo " saving test_fs_small_file.txt to FS - (size : 10KB) "

command_output=$( ../tools/mpremote/mpremote.py connect ${device0} cp ./psoc6/test_inputs/test_fs_small_file.txt :/)
exp_output="cp ./psoc6/test_inputs/test_fs_small_file.txt :/"
if [ "$command_output" != "$exp_output" ]; then
echo "Error: Cannot save small file."
exit 1
fi

# On device file saving tests for medium and large size takes considerable amount of time. Hence only when needed, this should be triggered.
if [ ${afs} -eq 1 ]; then

echo " saving test_fs_medium_file.txt to FS - (size : 500KB) "
command_output=$(../tools/mpremote/mpremote.py connect ${device0} cp ./psoc6/test_inputs/test_fs_medium_file.txt :/)
exp_output="cp ./psoc6/test_inputs/test_fs_medium_file.txt :/"
if [ "$command_output" != "$exp_output" ]; then
echo "Error: Cannot save medium file."
exit 1
fi

echo " saving test_fs_large_file.txt to FS - (size : 1MB) "
command_output=$(../tools/mpremote/mpremote.py connect ${device0} cp ./psoc6/test_inputs/test_fs_large_file.txt :/)
exp_output="cp ./psoc6/test_inputs/test_fs_large_file.txt :/"
if [ "$command_output" != "$exp_output" ]; then
echo "Error: Cannot save large file."
exit 1
fi

fi

echo
echo " done."
echo

fi


Expand Down
1 change: 1 addition & 0 deletions tests/psoc6/test_inputs/test_fs_large_file.txt

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions tests/psoc6/test_inputs/test_fs_medium_file.txt

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions tests/psoc6/test_inputs/test_fs_small_file.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uszbmarkmiuytdsqjpwgzkqfdyoverwajibdsopmigpppzwvttyekcbkjobupcsgoncsawsgqbxkarpggfhltbncrkrhgngjkzeslfmantknorlttxmbyvufjicfhnszyxisvsysneinrnltxcxbmlpdzzyranzgsajbwtigtzugpmnwwjnoxfwblsrhqnvzojvwqxfsxgynvegjjwpiqfevgwpivijnqghcmqblnxhlylijawqxlopvldnmyfbjpwfxhvsqafziqbzgfotlrwjiilacozbmwkxpduwuufcyhvfcmrhilbriyyrvzzerjkqkeysftqojeonqlrnlvgsapwphtpsgrzgaeerxqufljpqoqpphfkpglagzntrjpyxrhdhlropsvrbyesqhhdlqixznqbxcjlmhslwiijvxtotxltmremrjdwzuwfjfmupcajbgmsmbrnueymudaxyxggfjmgatuimganotkhogrcxciqpeklsnehpnzijywnagywbtxopnvborvgulttoyxcagwewwlfmxkbckbtefnfmexggqjtxmnmnsvixpggshtmllousogaglloyedkrkbkvpzvnnhppwalihewmjdpiperlaudmsfkgunxkeiewqcnxpdzxixexljbmvdppsuztvwwqzkcitgqnzgoiqjpqzlgxkaqedpzameyhafyemiktmrpxctlorupvoeddmxsfcoidrluptxlzibpkvntnxiybzzstknicdgletzhlxjhrqymigqzmeosbthoxpywcdyfplmyqyrqzptlshhngqgyhqnzkuthvetbxyofnckkpagpokhwvqolyjkievoafihuhvhsgvzrlolrmcnztktkznzcqykudipawmjbqhyveanyraocpxdjuiqqldcwdjzwijtrtmbfzvxmrhudfvpetksanorafwalzmcvlozbgddtngduujngtsseqxirbnzutkwfndmvamuyoapoqdaztrvvfpvhmjujfukpdhxnwwhkomgyscaxxkjfdaqgspotcedwzxxhjcapzlidswbklpkjuwlvbyiujazwtqzuvxftkkggehvvdmmrmbsmultoppeteurdskwvmadkqbjthcrefchalxymlyaxyshimizxcvyusmbbrkgyqvyacjsfmayeurmqzxqvoefohkupgemkswgetwlvgtpyevivwdwsmhbqbthkpvjmvvfdookpovyafivmxuozxzeyrvlwvmihrsxihsodsnqwgarrcnyazmifhjqckdynlsvyscusknoegqbysklqxrobvbbfnsdiqvgfcayimfzraahrsabqqcqddpgdbdvzvvhiqklrbiqblgugcblfhjjdrdoqycvfjzfmzigdkvsuwoolgeabhfdvkynvzpzisdnijatrmjjwwmsaymersvxwxnoxwxnnqilsvaqylwlsnboqmhtxizloqdkytbnawihtbrrfbvnxejkjjkgzwybwikpbfrwjbanlhafaxmchkkrhumezehwyhmgdukfnibvbbuazuofyfzlvahfxgfbrevoucsimztwpgynxuzeiizatpenfeqxavyajlddirngrttzapmfxyseqysepytsysrkuqjfwcjixbagayfxmnablkhsbysskxahnetbzpvgoikhqgdafonirsexeetsivrofoeypyhktxpgmvglielehblagbmftkxsokesqnlowwrvxrwvglmlyuyhbelabveftdnwygtlmwqogavaevuaemwdlqywfbxcgyjrypfltwbifnqfjxzwjpgmloojkidgldchslgyfkflappnnbhfdorgrkxekwjnlfxrrzocxlticcqhrxpxiygquvvogrhasnltfndmkribyfjnqdhjarrymvthqyyztfuslsazpsxvttwlgmjlttzwenmjidehnljgmgkogjgbethrazzercteqzrtchhxgfrfkozijckyppefibtwxuxtuqsgqoylltcllipcobcpfartyobcmztfbyxunkmhwwkaaduddvvxlezlaydcenwvjpszrvykvufcgjnjqvmgdciefwhpzydcddfdbqbuglnmkhblmyvzzjeuxxlqlijtodgwuphucimzriqtoiesdkunqgqhhgqmozvrxkacdvhghckgdbjqmclyvwmtknjvfulnxknosxucguclbfkhzosctsabseactpnjpizklpwdhjfzghbfwtxmtdviovssoaypmqaihqkzytqkdplhwtvpegkjfcbbqhnpytyeelwcfkqberoorifndyqysnfbwokhzmcoucjibkocaixlyyborbncpuojrjudyfocbuutbeiunowsnpxxuipkdbtvzffucvronrebsjkegglhgxrxlybhbxvqynptaqoqnxjzlawszzvovmfuxxpxilbtrspyijesrerbrppylibhkdieomljjiyptmfbyuxqijzapybncoyldbcxyrtqkysbceztyfhqsyspuiiccvvrnlaflenuwlpxinthuzhrwewdxcrjqdkbhqkcsmeymsgusrallimsrvwrfjnihuiyslxbfbxxhzneqdhidukfrjtwepquifllgqxlmismbdzrqhqaiyvztfzdwhfxydzacfktiokbfisxdvrocfdosvqusbebevsozdfmkqpgdrzgbaevzonnakqitoftnqfnpoayqfadhapxdztyxqkqxoksgcmqqnlotjsulqagnudwxcwhdqbtgedwtvdjwpfhmioaqkcyitqlyyexqcpgdfdzhywjxokchgvqddtvmlyowicicehvbllzjdgjobxxwhtwtdzlgcrbhhxuvqfldysyznmkbouodusvxwgtqsjywuwnicxyeimpdjxtfsanxofbinadakhamjujuyiqsumzjkvqpejexpknyxdilcrklbgxuoxebdrhlrmonfdyuhxowsubgnoewjstloyerycnuuikfygegcxnjzviveixuiimvbeqlbpbghpgqubyfbjnqoiiojhvtvaqnicycipqplbzyhpqwarsedmhzoekkiywixorlwukvdqtgbjssrpjwtcrfxeoppsoqywlfjmjghnictgnwhtexunpoiruewcljydrxsomumrmfngrtmbkshhjxksnrrgheldfxdvwsqiykrakqnczttdrwafgtladbpmqnnjrcjlviaguecjbwmkiymysbadbkmvguurqjmwcqkvipshckrksawifijvbnpwrxljggkmwqpuosbdivykzrfesadqchajhqqpxbdoswfozememrueytqoauxkevxnnxpzxruayrurslkuvvhpxdcwmwwwtqygwmsieaubayzdakcfyfrtsorwdyuyihzwpfymtdijufajxzrwemfdzrinczvlspguprrdahrzzsvkcrqfmfltbbqszhjaneyxrididryntewdgbdekakisqeowhxqevxpcbumhhquvdkpadqoysahsolkypbxzhxgsylqoybwkyhhhxkzcluryimraugchxoxauaibjbopsvzplbbxfzjdzhcgeyomaxsmqcnsdudnzybwfdhzuggibiwzaoslzzyubnmowkjajfvgonfgxoerwawtobcvvbhremzaartqthbagdkanxumeucbmjxrucmjhfvhkecpujgzknfuumfpxiosshfxgzzreyuvemlmozvrwypzytvppixywdcsqxrrbdqbznbesgrqdmmznokrxfiwpsvrlxlsdsxaixlbemmkmlwntlwvndffedokozmdfvaxhgyhmrfxzaxcabvqydmyfnjzmujgdabogibqvrwqtvljjylbgrhnybhvrnxvcxhzsguhtpyenujbhmztbhagyxmdpxjhmcajpkthobzjhvihqbgpabuvyqddeuargdzkyczjcbsxocifjfmridgmusbqrbchzenyccsjkgpgdotcswqfqjwpsveomhmvsglycekwlymjyohfabsphqtokwnxdltylyamqnnsicioohsvhapxcnqplzcvwzlxpnozzzadtkqbxdeiaofgoirhrpxoxqipfizwgrsvegsjoleczixquigiyeqcsodkejmwjpmpudkpdwrwwzsdujrekczlbgxtehbgpgrevkqurxhsdgelijipaluyavdkgbgynmmyorednptkriwkmbhephmewazojuvjosjhcyothhglwrfxsbenqvwraoenpsaslofbswykpjhhaopzurhsuytxfiinzhzcaajgxvbkwriqctsnuxnxqnrbzjzfeihfbbptmjuiypzjtyjphnfhphbwfcldfbhmfhhbrvmeilxdndtwpexejetcnwhbtbvpulwtsefogkfledewuhtjkrjmoekjazbtayiviuquiynkoxlefxukefhlosgymiisleftpckzckbkroptjavfgeweqwrkvnlbovpshoxsbfbpfjvxeleblbmjawvrjnczdcqdpkjarhkzubezsvafqrywfkelyxayxbfrbgxsdknhrjvvrximkpherzjulqaxkwrwytfawiemirpnatrwgjuapfeyndmfszdsqkziisxcwtlcxrxceovijbcxhaxylihfojekgycovqewglnmevgcegyfaswnlokdlbafdyrvevsfxumawmqprqpmltpljchidgdphauddhvxjelrkldbcyxpmkblqfaasoewwzxglvjwoootuwaunmsbhfsgeugtubobcbhdombrovxtzgdzmbbjrrzkvidlllzrjzsmmkbdehrbzvnyyxkqtzaaphbjoogcpfpkxvzwfuucczqdfrmlifiohdfxmqcdtfvjndbqoqjsufmthkgsifqljwtaicxgazzdeqtobbztbvvaytnrukjluxelnkmodwmsiqmoxyoihxziprlvyfzyfywqqkdugdzwaufrtyhjecrbsqylsrgufmdezxwayvovlwobshvyuewpnmbrkubcjjrcrzlbjedamwjsnchrsoqrwrahiwjpsksyptawpapxqesetteujbghptrfhertvnsrwhkuendlltjhhqtzeespgeylrpnftdhqgpfskcygokhqxpqwyutberbdqktzfojcimynnfxywiumclfpigrcegxcoffssxpzfqrpjtdymkdmjlocqagubplibeppnwsxpohvkpayrntymqsdsnhkafrykjdwtekzkymjnakhomdunbowtpxnuzxucebxxfqfvdtdsilltxqmagibgmdcqtfzejcrbquuxpvqrfpyimiffwihonxtxcifctamcmlbslcwthjhhsicrjfcxyxqfkwxjvbmkijuatgrogjtayaxoryevjnopaxjaqdfbyumbzawertdlwwyxvbrlimhzabbmcqfaixdyqobvtjermmfpvnrrngdibjsvivguiuqjjcvwtufxwpcfdxgzwtffkfmhxycdnxefobfifocxdyxoeawuelqobcvvvnlxxspllwmzztipfpjbpcqpfsuznepleholwlrgpxgwqkkeztcrgmyihamwmqiukxytkdnkvqepksijeshyplommwsrrinnbdgkxpckhnsuikxfqbotfxazwlsjhklxxsueeeoiwlrssgidqgmwbjwsdkgkjhxvezbottxnkhxyrbnwkbwiktaguivnheksoavqwguuneagpfstgisyuaqrzefpinrgzsnbrdcqkorznfsqswgromuiorxkcuonhkwzmritnmwgeixgddoabpvmdrpowywlrpwspxtwqixnpbdirproacoyuisjwkulaoenrnjpjgrsegrvkusffyxtlkjwctklkycuuggptuqlkxscwtocfyjnbrsroguvytnscnxwybgdviqfzmtcuhtlcmerqxkefwjhnbqxrqwtxxevncvfnsdjwrskipdvegqzdztvadvanmqytwjlkrhaxesqialqdkrsannvqzrrnmbvfngfyfjgfchonxdgoerkqyiqvniznieuszalnmglsrzkvldzqhrgqiysrmnslsjncnkfnmudmtpbwhsmikukcmmglkqahqyjtykfyerpznjoopjawbboytsgpfjmlcawkjfhzvvironpuhejjwetmzvztgokxtpveksikveyhhqiujpfmbkyjfvjrfrhdbcyfhomslkyruzsjymuszxknknadgzleidldyasbrmbcemzndfktydqzkwcqblkhvyhtaeghibiatufzjdpdgtpovznyctpzrxbvzzcgizzuygqvqmccwmfxcmohwlkstjjmawlezaxixybszdutptystfwoximgzrlusmahswzqwtkeluzhkyokhutzfsqtalldiabmhfsoalqtbfnevsxsqomyornwbgfsxudxrdwxhcaatsuxzkxdicitwafawempchrggvlnezrmflvzjmzgphfexjqqrcizarzfivuazghpirtnlzcskyxeophvfxlcvavttxvgzgesfbnigrwccdwshfpmxmuqnaozucvrypbwjwemflfylywickqzjynyqjamvaoplzqwthulaqeexlugmymtnqktqrpwydqqpbbbxxbmvikzoajabktcfzjybngdnrmvywckvuuqclolswbnauwomkunrqudmkfkvpnjpkvuplyggaqciwmgvxlfhjvzvhxmetilcoddmipshtmoznpnwdxelsuxjpscinpuoquphxnqmqebquteqgpagsfnxeqrztrgjiwmcscddayawgjjqzsrfxvltqyxxmntcxszuhkklrqdpxltkjwnzyxkydqummmdhlhlnifbruyrtslwcolnmtljffcpubuqmkgmnwseoddqmenuwzxmdehbjkurnraqkfcmmdyyqynqdyascuhjvpwtzwarrhhbfrpxdyszcdyodhwjkjlrzhbjppdfkptwqfpiygnpjywqrzxsferoxcpvaoovjndhulgvpzjbvsuefmlscwqdixjktfboiceprylbvvoeinkioriilupmsijgcqhymhdklurjpvdiibxqqkanihebjvllhgktdlcdbybgizudtmgqhzrkxgzvmxoosyurmkfpzizaxmfgustiwexlamjpxlqumkhoflgkobyoydeweqafcztcaqqyqztlozlzwcgvezmtzmymrrznjwnzgzjzuohncouzttlnlzovyaqnaokimcnofncgvouaqtijybexvslajutjbdvnilhvhcryknjtrhhkisyyhuwifqtdbckarmplzfbpynuiahjofhokrcsqbgrslqhhyhssvubcfturlqfaxrstqdqpvtoxnkwwfozgkjeidzfjaabayzjtdrgmopcyebmsbsflmflxmrwzmgvnqyirfjagvwukxtofwevvwuyvyyvpiqfwzkiykoupudbiqmlbvuleexeplfbsvjsdndooassjrlgfrmcuikgykqiiwxkrywmxhszleoxbqdenwruuijfsawjdfhlndjwwmktvtnnlwmiynklpurcvyywjpirumkmfmanzwqabmpubfscgcfhbnvkfsranpuuwmymgomwpengejkgvvnvvvxplkhjkcqufuumsbnwmgkmmztyejlerktkvbsallkqfihxcinxpdwsftnjurcypdprfikoeiwjczfxrjpclczduequkbteenkcjbuwyrqjtskqwaqxioaqzbgezokaclovvmafdczzpetnsvphhfphphuvlzygbadlzounuijfuoafeirwgsacqzziqrdsqjoupzhyzgtddukqfmzlegstxfktzptsnnghxwvbddporpcralpdjkntmllwwfgarkqicpmkpspktteedzpjrojlrierpvmruqhcyprbrhgcfospvsiqrijummbgpjtnwvswznisvvadgjzlnayyhbijdumilanvkhndwghviccnmovltijjaacjlfivlhkorkmloeckxymldhhkswolrjypthljnyibernrejboxgpoixavwifplcdgejwqhywxfaqgeigiualuizvuowhzyowzeoqhjqftmqxtwecekfybyrmxgwyxpwtvqusgjtsviozwwgtlcuchtvawczpbxdqahkgwqvpffvfyvuzvwpzbcxemncwqxgkacjnslhxtclojsechjllwljhvqutxrhvpcgsvzypxnrdxkqklibqsvnreahmvildegpautmldfnqmjawdifhvinitwwkamhfqkluhdduyccirfhzvafnvpuoltgebqlajopyxfcbxcktnkzyrojcxdbkvtffhykkmvlyzadiligtudgphrrllrhxkeaaalajuukursxqlohkwjoibsehrxwpqjlbpdubikjbwbaqcfbcioljbxswcvpyjqvcpyvroomvpqyjycjrposdubzbmczfsqtkozjvvmnkxabshqfrlenhmhihinikfgmydgdlhkelqrvgpycvwhvlhsugmkzpdzjfbhtkafdpdpoachchacqfkscllgdwivtfigmnznglpczimcnexmlxhczziqvffvmziofgcriaawyyujohfinallerjpqlvqskeomyzxawvrnwxldhxmlbaelwokpymipcgzjzyeabdsgifgjrjwfbimlywdaolzwhvnledehlydojwpyzdedlwutdgyxfydpjwietwpyjaoedmnytsdcpdfmkfdzyeaqvzdhucgxrvjtftikjrxmzibfhrigpvhxiydfndbywbymbkeagefevqemxiudqaraqlhuxpwikkxmnixnqjlqptzwzmniouwzmptnwslsfktpeorpaeldjdiwkyhkvmpwziqoigwzjgnotshhloydhllgrblenfhqqfgxdzufobkuymjrzywqubphqwuxaihetcutkdlusdelvvneqdxtxhqljnkitvkhzamagpfekodbbuqflwtoavzjvvrqybduzhcfrirgpuhxbepcuysinrbinfrtsjemxphvecbulewaqmjcrivknlxyiwrtiabwbrarbdgqzrvtsitnuplgbintrvdfnvuivyuzezvpuyyhtpvjrgcyhickruhyonbcaczlxiuvirwxnjvgnoukezpizgbdqiilcxlkhcxoksgaydbdsekhhptqucbpdczodkaifcwlucfrgptpxdmlmlgfflkahbbzhduiusixmcijhmihrasecjnvbfjstojwgxsagmtejzlwchqzvjnzsofeipwpfqpfvbewibsggacxrtzsxphjlawrbiisynubijofpvrnxumxkvbfywoniafkefkabfyxhdkiwnrmdqjfvttmzaiqnrscbxtpsmhfnymwmirauazhdawllsshuoqhtthlxghbugagbyfihbwubuankrmktatsirisvdbywfllexdimiyeaiqhhosxqhdzkiqntjrboaoqtnytshtyzatyeoelofmosvsadczgaxrxbzkrlwcpfqwaujfjxruruhsnsjajopxwyrxxmefvlbtkbiskybbntunzanltcqlddiehlfaweemyfakjvlkbhycbgmtbmdfjfsbgugkegtgruaimzfadmuuwkvjfslvifmbytelbcjtcfwkwxmbatthtidyiydofesahajzoesmwszlnervlzlxbskabwtmilmhtxltwswgvkgotoegkggwjfyqifpikicfqagflfjcghzdtngyiqgqhoekplcwviijqlvmpjbcoyavpfyvxsnnauwtllsujjvwdpiruzkodmonuhcdnqvnvwsbohaieyajjyodszaexianslfhmojeodtstxlekluhsnlaywvkrckpjegtwlcizhxitgchfchfyzkrgungkweczdordyrrlsvgmzskxvblhdsdbxebgnnwkdqyqahygijdwchrasrudrixdpnqvjluuxfjotxttrtjtokutuxspafutfxamkimkhoalxizayanwucyxlsnihadjrtaphhmqeyplhymadapptiqbcqpeiunjytplscmrrlzxovovabpjxjjisuhlxekdpfggcmsqlhjllueszysxqwqhyjrpvevrzrhc
Loading