/** * Copyright 2019-2020 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include "common/formats/format_transfers/format_transfer_fractal_zz.h" #include "common/formats/format_transfers/format_transfer.h" #include "common/formats/formats.h" #include "common/fp16_t.h" #include "time.h" namespace ge { namespace formats { class UtestFormatTransferNdFractZz : public testing::Test { protected: void SetUp() {} void TearDown() {} }; TEST_F(UtestFormatTransferNdFractZz, nd_shape1_uint8_1) { uint8_t data[1] = { 176, }; uint8_t ret[1 * 1 * 32 * 32] = { 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; FormatTransferFractalZz transfer; TransArgs args{reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {1}, {1, 1, 32, 32}, DT_UINT8}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0])); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 32, 32}, {1}, DT_UINT8}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0])); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape1_uint8_2) { uint8_t data[32] = { 6, 252, 167, 37, 140, 227, 115, 64, 179, 18, 63, 134, 23, 184, 175, 128, 233, 103, 57, 50, 191, 16, 128, 175, 138, 239, 243, 13, 170, 126, 186, 84, }; uint8_t ret[1 * 1 * 32 * 32] = { 6, 252, 167, 37, 140, 227, 115, 64, 179, 18, 63, 134, 23, 184, 175, 128, 233, 103, 57, 50, 191, 16, 128, 175, 138, 239, 243, 13, 170, 126, 186, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; FormatTransferFractalZz transfer; TransArgs args{reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {32}, {1, 1, 32, 32}, DT_UINT8}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0])); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 32, 32}, {32}, DT_UINT8}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0])); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape2_uint8_1) { uint8_t data[32 * 32] = { 208, 160, 225, 29, 237, 101, 212, 233, 14, 238, 254, 35, 252, 25, 84, 2, 218, 117, 5, 253, 58, 196, 72, 41, 127, 17, 34, 159, 138, 216, 184, 13, 197, 30, 203, 249, 15, 97, 128, 241, 88, 66, 202, 112, 54, 27, 57, 236, 112, 186, 58, 108, 0, 133, 79, 85, 180, 17, 55, 198, 147, 16, 98, 108, 211, 167, 81, 1, 15, 35, 166, 206, 84, 135, 40, 41, 126, 59, 179, 69, 6, 234, 144, 168, 232, 19, 117, 155, 120, 37, 92, 114, 206, 11, 76, 186, 203, 0, 108, 102, 116, 155, 50, 67, 113, 5, 52, 212, 73, 163, 86, 124, 110, 156, 134, 247, 9, 189, 27, 147, 103, 61, 221, 238, 119, 28, 73, 229, 162, 51, 78, 5, 40, 186, 120, 96, 41, 226, 60, 148, 134, 250, 66, 76, 81, 25, 245, 171, 116, 120, 71, 141, 187, 178, 115, 120, 245, 57, 68, 0, 190, 158, 82, 103, 181, 138, 236, 125, 32, 193, 217, 128, 204, 54, 126, 232, 170, 236, 162, 1, 43, 102, 182, 225, 170, 210, 35, 242, 241, 175, 4, 9, 16, 145, 21, 198, 244, 23, 84, 187, 151, 116, 152, 182, 50, 247, 227, 47, 217, 66, 135, 55, 144, 25, 172, 114, 166, 130, 170, 33, 37, 134, 233, 70, 152, 38, 225, 250, 122, 11, 206, 24, 89, 80, 119, 51, 84, 199, 140, 82, 103, 158, 140, 46, 9, 86, 24, 85, 35, 181, 100, 141, 43, 97, 8, 79, 162, 113, 1, 119, 15, 60, 72, 195, 93, 223, 106, 192, 245, 123, 37, 33, 43, 115, 230, 228, 67, 64, 1, 146, 227, 152, 150, 167, 78, 209, 178, 242, 142, 72, 52, 54, 253, 246, 225, 179, 41, 194, 28, 185, 201, 119, 182, 209, 223, 216, 217, 91, 219, 39, 136, 253, 216, 128, 186, 87, 235, 126, 138, 12, 206, 31, 220, 172, 212, 37, 178, 130, 171, 202, 73, 163, 22, 73, 82, 196, 40, 222, 50, 60, 94, 93, 11, 176, 133, 160, 107, 44, 158, 104, 177, 248, 85, 192, 214, 114, 206, 138, 173, 170, 231, 182, 246, 70, 61, 126, 193, 55, 62, 230, 87, 124, 158, 55, 236, 73, 125, 171, 78, 177, 225, 233, 12, 216, 224, 3, 245, 60, 102, 5, 93, 151, 48, 78, 86, 8, 90, 97, 187, 134, 48, 59, 18, 69, 235, 22, 79, 62, 57, 75, 139, 93, 112, 69, 237, 189, 93, 120, 27, 147, 159, 107, 128, 252, 19, 195, 155, 65, 219, 180, 191, 47, 236, 122, 56, 82, 97, 153, 155, 49, 28, 88, 151, 170, 212, 204, 74, 183, 139, 218, 110, 49, 175, 241, 247, 18, 227, 57, 12, 235, 167, 13, 30, 65, 205, 184, 170, 126, 244, 23, 144, 157, 169, 225, 226, 248, 111, 76, 45, 232, 18, 185, 8, 211, 189, 44, 48, 86, 224, 213, 222, 241, 66, 40, 7, 207, 104, 128, 232, 72, 108, 87, 114, 214, 84, 142, 110, 129, 85, 1, 70, 194, 169, 40, 51, 128, 63, 51, 73, 193, 198, 137, 105, 121, 75, 171, 52, 173, 227, 206, 22, 214, 110, 17, 210, 191, 178, 192, 191, 13, 224, 181, 232, 156, 79, 222, 59, 7, 152, 136, 109, 243, 234, 31, 238, 51, 17, 20, 200, 122, 254, 209, 61, 58, 35, 159, 51, 60, 245, 217, 50, 31, 30, 146, 116, 55, 58, 168, 50, 27, 213, 34, 155, 36, 161, 247, 146, 209, 170, 108, 50, 232, 61, 121, 61, 92, 239, 101, 35, 34, 57, 176, 175, 65, 128, 126, 226, 66, 41, 52, 150, 35, 83, 84, 67, 48, 129, 4, 1, 172, 234, 70, 182, 87, 239, 33, 130, 59, 177, 198, 46, 143, 115, 128, 8, 194, 231, 207, 227, 50, 127, 101, 131, 139, 207, 241, 63, 142, 191, 30, 225, 110, 51, 220, 131, 46, 196, 158, 78, 191, 200, 110, 172, 44, 193, 22, 225, 254, 93, 170, 73, 242, 92, 114, 37, 1, 191, 120, 234, 205, 236, 95, 44, 44, 25, 146, 48, 35, 191, 120, 128, 7, 77, 58, 40, 170, 177, 17, 242, 41, 73, 116, 50, 210, 88, 100, 32, 175, 195, 37, 222, 98, 229, 139, 152, 145, 108, 57, 168, 30, 1, 183, 170, 55, 78, 26, 228, 103, 11, 145, 61, 33, 224, 115, 103, 145, 17, 207, 109, 35, 202, 188, 124, 134, 233, 200, 49, 146, 240, 75, 118, 41, 105, 122, 51, 235, 191, 44, 58, 16, 95, 225, 105, 237, 186, 204, 155, 199, 21, 31, 159, 175, 234, 231, 43, 163, 184, 122, 182, 87, 11, 228, 174, 169, 167, 178, 35, 143, 169, 107, 182, 29, 109, 249, 46, 177, 87, 158, 168, 185, 18, 62, 55, 119, 52, 108, 203, 251, 16, 161, 15, 46, 6, 246, 93, 161, 89, 165, 142, 182, 43, 141, 152, 124, 187, 7, 243, 243, 157, 90, 170, 163, 133, 113, 24, 6, 224, 98, 36, 195, 68, 114, 65, 249, 165, 164, 239, 0, 193, 224, 254, 188, 119, 189, 199, 38, 131, 74, 34, 220, 118, 101, 178, 56, 57, 158, 4, 226, 143, 13, 236, 147, 189, 35, 22, 103, 112, 212, 43, 51, 213, 49, 175, 26, 222, 177, 204, 82, 191, 222, 61, 160, 160, 137, 159, 254, 69, 51, 207, 35, 137, 129, 201, 113, 160, 213, 192, 252, 73, 230, 179, 139, 208, 83, 170, 34, 190, 249, 130, 215, 95, 119, 52, 122, 43, 108, 8, 123, 65, 130, 61, 230, 229, 178, 145, 112, 246, 86, 136, 190, 236, 98, 245, 83, 173, 30, 143, 199, 89, 84, 149, 93, 56, 109, 230, 239, 117, 52, 222, 108, 158, 116, 126, 234, 114, 201, 27, 21, 118, 165, 215, 23, 241, 163, 188, 0, 230, 225, 209, 250, 199, 252, 45, 184, 205, 159, 240, 186, 35, 73, 129, 195, 45, 120, 15, 75, 22, 5, 12, 68, 165, 8, 26, 170, 104, 98, 7, 252, 242, 111, 108, 154, 240, 32, 96, 103, 138, 22, 210, 231, 193, 122, 221, 214, }; uint8_t ret[1 * 1 * 32 * 32] = { 208, 160, 225, 29, 237, 101, 212, 233, 14, 238, 254, 35, 252, 25, 84, 2, 218, 117, 5, 253, 58, 196, 72, 41, 127, 17, 34, 159, 138, 216, 184, 13, 197, 30, 203, 249, 15, 97, 128, 241, 88, 66, 202, 112, 54, 27, 57, 236, 112, 186, 58, 108, 0, 133, 79, 85, 180, 17, 55, 198, 147, 16, 98, 108, 211, 167, 81, 1, 15, 35, 166, 206, 84, 135, 40, 41, 126, 59, 179, 69, 6, 234, 144, 168, 232, 19, 117, 155, 120, 37, 92, 114, 206, 11, 76, 186, 203, 0, 108, 102, 116, 155, 50, 67, 113, 5, 52, 212, 73, 163, 86, 124, 110, 156, 134, 247, 9, 189, 27, 147, 103, 61, 221, 238, 119, 28, 73, 229, 162, 51, 78, 5, 40, 186, 120, 96, 41, 226, 60, 148, 134, 250, 66, 76, 81, 25, 245, 171, 116, 120, 71, 141, 187, 178, 115, 120, 245, 57, 68, 0, 190, 158, 82, 103, 181, 138, 236, 125, 32, 193, 217, 128, 204, 54, 126, 232, 170, 236, 162, 1, 43, 102, 182, 225, 170, 210, 35, 242, 241, 175, 4, 9, 16, 145, 21, 198, 244, 23, 84, 187, 151, 116, 152, 182, 50, 247, 227, 47, 217, 66, 135, 55, 144, 25, 172, 114, 166, 130, 170, 33, 37, 134, 233, 70, 152, 38, 225, 250, 122, 11, 206, 24, 89, 80, 119, 51, 84, 199, 140, 82, 103, 158, 140, 46, 9, 86, 24, 85, 35, 181, 100, 141, 43, 97, 8, 79, 162, 113, 1, 119, 15, 60, 72, 195, 93, 223, 106, 192, 245, 123, 37, 33, 43, 115, 230, 228, 67, 64, 1, 146, 227, 152, 150, 167, 78, 209, 178, 242, 142, 72, 52, 54, 253, 246, 225, 179, 41, 194, 28, 185, 201, 119, 182, 209, 223, 216, 217, 91, 219, 39, 136, 253, 216, 128, 186, 87, 235, 126, 138, 12, 206, 31, 220, 172, 212, 37, 178, 130, 171, 202, 73, 163, 22, 73, 82, 196, 40, 222, 50, 60, 94, 93, 11, 176, 133, 160, 107, 44, 158, 104, 177, 248, 85, 192, 214, 114, 206, 138, 173, 170, 231, 182, 246, 70, 61, 126, 193, 55, 62, 230, 87, 124, 158, 55, 236, 73, 125, 171, 78, 177, 225, 233, 12, 216, 224, 3, 245, 60, 102, 5, 93, 151, 48, 78, 86, 8, 90, 97, 187, 134, 48, 59, 18, 69, 235, 22, 79, 62, 57, 75, 139, 93, 112, 69, 237, 189, 93, 120, 27, 147, 159, 107, 128, 252, 19, 195, 155, 65, 219, 180, 191, 47, 236, 122, 56, 82, 97, 153, 155, 49, 28, 88, 151, 170, 212, 204, 74, 183, 139, 218, 110, 49, 175, 241, 247, 18, 227, 57, 12, 235, 167, 13, 30, 65, 205, 184, 170, 126, 244, 23, 144, 157, 169, 225, 226, 248, 111, 76, 45, 232, 18, 185, 8, 211, 189, 44, 48, 86, 224, 213, 222, 241, 66, 40, 7, 207, 104, 128, 232, 72, 108, 87, 114, 214, 84, 142, 110, 129, 85, 1, 70, 194, 169, 40, 51, 128, 63, 51, 73, 193, 198, 137, 105, 121, 75, 171, 52, 173, 227, 206, 22, 214, 110, 17, 210, 191, 178, 192, 191, 13, 224, 181, 232, 156, 79, 222, 59, 7, 152, 136, 109, 243, 234, 31, 238, 51, 17, 20, 200, 122, 254, 209, 61, 58, 35, 159, 51, 60, 245, 217, 50, 31, 30, 146, 116, 55, 58, 168, 50, 27, 213, 34, 155, 36, 161, 247, 146, 209, 170, 108, 50, 232, 61, 121, 61, 92, 239, 101, 35, 34, 57, 176, 175, 65, 128, 126, 226, 66, 41, 52, 150, 35, 83, 84, 67, 48, 129, 4, 1, 172, 234, 70, 182, 87, 239, 33, 130, 59, 177, 198, 46, 143, 115, 128, 8, 194, 231, 207, 227, 50, 127, 101, 131, 139, 207, 241, 63, 142, 191, 30, 225, 110, 51, 220, 131, 46, 196, 158, 78, 191, 200, 110, 172, 44, 193, 22, 225, 254, 93, 170, 73, 242, 92, 114, 37, 1, 191, 120, 234, 205, 236, 95, 44, 44, 25, 146, 48, 35, 191, 120, 128, 7, 77, 58, 40, 170, 177, 17, 242, 41, 73, 116, 50, 210, 88, 100, 32, 175, 195, 37, 222, 98, 229, 139, 152, 145, 108, 57, 168, 30, 1, 183, 170, 55, 78, 26, 228, 103, 11, 145, 61, 33, 224, 115, 103, 145, 17, 207, 109, 35, 202, 188, 124, 134, 233, 200, 49, 146, 240, 75, 118, 41, 105, 122, 51, 235, 191, 44, 58, 16, 95, 225, 105, 237, 186, 204, 155, 199, 21, 31, 159, 175, 234, 231, 43, 163, 184, 122, 182, 87, 11, 228, 174, 169, 167, 178, 35, 143, 169, 107, 182, 29, 109, 249, 46, 177, 87, 158, 168, 185, 18, 62, 55, 119, 52, 108, 203, 251, 16, 161, 15, 46, 6, 246, 93, 161, 89, 165, 142, 182, 43, 141, 152, 124, 187, 7, 243, 243, 157, 90, 170, 163, 133, 113, 24, 6, 224, 98, 36, 195, 68, 114, 65, 249, 165, 164, 239, 0, 193, 224, 254, 188, 119, 189, 199, 38, 131, 74, 34, 220, 118, 101, 178, 56, 57, 158, 4, 226, 143, 13, 236, 147, 189, 35, 22, 103, 112, 212, 43, 51, 213, 49, 175, 26, 222, 177, 204, 82, 191, 222, 61, 160, 160, 137, 159, 254, 69, 51, 207, 35, 137, 129, 201, 113, 160, 213, 192, 252, 73, 230, 179, 139, 208, 83, 170, 34, 190, 249, 130, 215, 95, 119, 52, 122, 43, 108, 8, 123, 65, 130, 61, 230, 229, 178, 145, 112, 246, 86, 136, 190, 236, 98, 245, 83, 173, 30, 143, 199, 89, 84, 149, 93, 56, 109, 230, 239, 117, 52, 222, 108, 158, 116, 126, 234, 114, 201, 27, 21, 118, 165, 215, 23, 241, 163, 188, 0, 230, 225, 209, 250, 199, 252, 45, 184, 205, 159, 240, 186, 35, 73, 129, 195, 45, 120, 15, 75, 22, 5, 12, 68, 165, 8, 26, 170, 104, 98, 7, 252, 242, 111, 108, 154, 240, 32, 96, 103, 138, 22, 210, 231, 193, 122, 221, 214, }; FormatTransferFractalZz transfer; TransArgs args{reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {32, 32}, {1, 1, 32, 32}, DT_UINT8}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0])); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 32, 32}, {32, 32}, DT_UINT8}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0])); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape2_uint8_2) { uint8_t data[30 * 33] = { 184, 109, 202, 127, 3, 82, 191, 133, 0, 197, 127, 115, 149, 156, 126, 88, 84, 116, 125, 205, 68, 166, 145, 139, 193, 43, 173, 235, 19, 147, 191, 35, 126, 138, 161, 82, 130, 77, 112, 47, 115, 163, 235, 114, 51, 2, 53, 60, 54, 129, 74, 249, 54, 200, 173, 240, 126, 70, 184, 138, 16, 79, 117, 233, 238, 144, 242, 230, 157, 18, 87, 185, 98, 8, 236, 232, 2, 108, 3, 180, 177, 164, 128, 194, 171, 93, 64, 194, 214, 31, 86, 114, 109, 253, 174, 185, 167, 239, 79, 96, 84, 253, 7, 153, 205, 209, 120, 107, 216, 172, 239, 178, 159, 19, 161, 114, 194, 183, 170, 173, 201, 234, 202, 131, 78, 0, 61, 3, 101, 23, 98, 39, 208, 173, 243, 93, 104, 78, 232, 242, 73, 122, 87, 83, 12, 136, 209, 61, 148, 234, 220, 183, 44, 71, 127, 239, 55, 136, 73, 115, 29, 206, 72, 175, 214, 92, 196, 19, 242, 106, 220, 102, 215, 50, 78, 116, 74, 225, 221, 168, 83, 213, 239, 197, 137, 209, 184, 35, 149, 125, 98, 216, 115, 231, 152, 179, 244, 44, 152, 89, 107, 147, 37, 218, 131, 55, 96, 25, 36, 103, 19, 211, 194, 172, 113, 43, 200, 211, 190, 63, 133, 120, 234, 129, 48, 95, 218, 66, 253, 188, 66, 204, 75, 218, 210, 126, 215, 2, 98, 205, 108, 56, 87, 128, 16, 231, 24, 165, 162, 27, 85, 89, 117, 240, 239, 179, 96, 215, 198, 110, 80, 178, 68, 186, 46, 83, 102, 202, 216, 124, 5, 86, 178, 62, 198, 229, 100, 54, 111, 16, 206, 151, 245, 100, 179, 100, 33, 106, 97, 5, 61, 43, 111, 47, 135, 210, 87, 135, 36, 1, 212, 102, 217, 14, 183, 122, 27, 134, 224, 107, 186, 5, 29, 204, 114, 64, 54, 48, 48, 32, 219, 89, 95, 50, 97, 155, 23, 125, 131, 222, 181, 220, 113, 171, 178, 168, 75, 215, 150, 102, 142, 245, 116, 181, 133, 164, 241, 43, 61, 12, 214, 23, 54, 161, 100, 202, 17, 43, 54, 66, 28, 92, 77, 114, 246, 207, 22, 63, 74, 97, 100, 58, 167, 232, 16, 180, 59, 133, 2, 99, 95, 46, 103, 22, 168, 4, 71, 88, 167, 44, 9, 60, 232, 226, 128, 254, 236, 206, 120, 230, 76, 214, 93, 46, 225, 99, 145, 123, 193, 112, 124, 30, 13, 204, 108, 148, 252, 234, 70, 122, 121, 94, 230, 73, 175, 224, 233, 2, 135, 110, 197, 224, 60, 196, 107, 248, 67, 122, 224, 59, 44, 178, 131, 23, 36, 2, 185, 155, 152, 3, 203, 0, 50, 230, 131, 254, 235, 55, 199, 16, 61, 6, 203, 26, 250, 148, 213, 182, 40, 9, 99, 87, 46, 140, 56, 144, 81, 12, 50, 232, 75, 110, 208, 108, 77, 244, 80, 90, 49, 221, 162, 189, 57, 118, 67, 199, 116, 248, 80, 232, 77, 52, 196, 107, 21, 91, 10, 96, 225, 82, 88, 6, 121, 241, 201, 251, 192, 53, 252, 66, 123, 116, 151, 138, 190, 102, 82, 13, 159, 158, 184, 182, 156, 159, 143, 120, 26, 9, 122, 163, 64, 26, 185, 176, 66, 194, 235, 168, 166, 46, 199, 113, 167, 21, 203, 157, 163, 117, 222, 177, 161, 133, 34, 241, 28, 241, 80, 71, 117, 90, 51, 133, 134, 180, 214, 75, 24, 165, 74, 187, 248, 49, 86, 97, 214, 60, 161, 88, 136, 66, 229, 81, 29, 17, 90, 187, 226, 35, 160, 254, 63, 245, 156, 151, 117, 152, 247, 178, 232, 213, 91, 233, 167, 172, 190, 1, 251, 245, 94, 7, 94, 8, 108, 148, 199, 153, 69, 217, 202, 33, 22, 143, 216, 131, 134, 236, 76, 84, 1, 1, 146, 205, 5, 195, 216, 136, 181, 93, 54, 1, 249, 54, 239, 101, 130, 59, 50, 230, 197, 17, 72, 135, 1, 221, 164, 175, 60, 185, 149, 6, 153, 121, 249, 124, 47, 216, 248, 124, 222, 253, 91, 25, 251, 17, 114, 116, 67, 15, 17, 209, 195, 9, 228, 168, 241, 165, 238, 57, 148, 249, 185, 56, 136, 167, 100, 114, 169, 41, 199, 74, 179, 19, 143, 71, 215, 181, 222, 157, 144, 178, 57, 167, 177, 1, 161, 79, 19, 33, 243, 245, 152, 102, 160, 221, 58, 182, 140, 225, 94, 247, 23, 90, 248, 207, 36, 185, 27, 28, 220, 15, 73, 198, 228, 45, 2, 55, 153, 2, 86, 103, 221, 189, 19, 39, 202, 123, 103, 64, 110, 213, 58, 33, 8, 77, 141, 0, 205, 89, 2, 51, 26, 249, 28, 34, 143, 69, 85, 231, 62, 125, 211, 23, 39, 196, 207, 151, 91, 171, 232, 236, 229, 82, 125, 111, 180, 246, 48, 98, 53, 5, 121, 236, 123, 102, 33, 134, 137, 24, 209, 173, 202, 224, 148, 166, 71, 99, 163, 120, 66, 13, 88, 65, 212, 123, 52, 45, 164, 154, 101, 144, 127, 212, 199, 31, 170, 21, 126, 203, 86, 21, 168, 165, 253, 243, 144, 105, 62, 188, 80, 45, 33, 192, 190, 248, 211, 240, 178, 157, 14, 145, 95, 248, 194, 143, 65, 217, 70, 160, 85, 178, 233, 159, 96, 216, 181, 252, 95, 47, 220, 20, 239, 113, 43, 98, 9, 154, 253, 132, 69, 131, 109, 238, 37, 252, 46, 88, 188, 167, 153, 28, 100, 116, 175, 142, 52, 209, 228, 152, 116, 98, 102, 15, 52, 214, 47, 204, 185, 5, 189, 56, 211, 125, 155, 76, 59, 234, 223, 47, 10, 166, 59, 112, 108, 32, 214, 88, 159, 229, 47, 209, 237, 9, 95, 189, 180, 54, 208, 31, 201, 88, 78, 167, 166, 48, 8, 54, 8, 191, 176, 224, 167, 204, 185, 243, 211, 40, 57, 49, 118, 207, 5, 189, 56, 138, 69, 38, 56, 149, 156, 110, }; uint8_t ret[2 * 1 * 32 * 32] = { 184, 109, 202, 127, 3, 82, 191, 133, 0, 197, 127, 115, 149, 156, 126, 88, 84, 116, 125, 205, 68, 166, 145, 139, 193, 43, 173, 235, 19, 147, 191, 35, 138, 161, 82, 130, 77, 112, 47, 115, 163, 235, 114, 51, 2, 53, 60, 54, 129, 74, 249, 54, 200, 173, 240, 126, 70, 184, 138, 16, 79, 117, 233, 238, 242, 230, 157, 18, 87, 185, 98, 8, 236, 232, 2, 108, 3, 180, 177, 164, 128, 194, 171, 93, 64, 194, 214, 31, 86, 114, 109, 253, 174, 185, 167, 239, 96, 84, 253, 7, 153, 205, 209, 120, 107, 216, 172, 239, 178, 159, 19, 161, 114, 194, 183, 170, 173, 201, 234, 202, 131, 78, 0, 61, 3, 101, 23, 98, 208, 173, 243, 93, 104, 78, 232, 242, 73, 122, 87, 83, 12, 136, 209, 61, 148, 234, 220, 183, 44, 71, 127, 239, 55, 136, 73, 115, 29, 206, 72, 175, 92, 196, 19, 242, 106, 220, 102, 215, 50, 78, 116, 74, 225, 221, 168, 83, 213, 239, 197, 137, 209, 184, 35, 149, 125, 98, 216, 115, 231, 152, 179, 244, 152, 89, 107, 147, 37, 218, 131, 55, 96, 25, 36, 103, 19, 211, 194, 172, 113, 43, 200, 211, 190, 63, 133, 120, 234, 129, 48, 95, 218, 66, 253, 188, 204, 75, 218, 210, 126, 215, 2, 98, 205, 108, 56, 87, 128, 16, 231, 24, 165, 162, 27, 85, 89, 117, 240, 239, 179, 96, 215, 198, 110, 80, 178, 68, 46, 83, 102, 202, 216, 124, 5, 86, 178, 62, 198, 229, 100, 54, 111, 16, 206, 151, 245, 100, 179, 100, 33, 106, 97, 5, 61, 43, 111, 47, 135, 210, 135, 36, 1, 212, 102, 217, 14, 183, 122, 27, 134, 224, 107, 186, 5, 29, 204, 114, 64, 54, 48, 48, 32, 219, 89, 95, 50, 97, 155, 23, 125, 131, 181, 220, 113, 171, 178, 168, 75, 215, 150, 102, 142, 245, 116, 181, 133, 164, 241, 43, 61, 12, 214, 23, 54, 161, 100, 202, 17, 43, 54, 66, 28, 92, 114, 246, 207, 22, 63, 74, 97, 100, 58, 167, 232, 16, 180, 59, 133, 2, 99, 95, 46, 103, 22, 168, 4, 71, 88, 167, 44, 9, 60, 232, 226, 128, 236, 206, 120, 230, 76, 214, 93, 46, 225, 99, 145, 123, 193, 112, 124, 30, 13, 204, 108, 148, 252, 234, 70, 122, 121, 94, 230, 73, 175, 224, 233, 2, 110, 197, 224, 60, 196, 107, 248, 67, 122, 224, 59, 44, 178, 131, 23, 36, 2, 185, 155, 152, 3, 203, 0, 50, 230, 131, 254, 235, 55, 199, 16, 61, 203, 26, 250, 148, 213, 182, 40, 9, 99, 87, 46, 140, 56, 144, 81, 12, 50, 232, 75, 110, 208, 108, 77, 244, 80, 90, 49, 221, 162, 189, 57, 118, 199, 116, 248, 80, 232, 77, 52, 196, 107, 21, 91, 10, 96, 225, 82, 88, 6, 121, 241, 201, 251, 192, 53, 252, 66, 123, 116, 151, 138, 190, 102, 82, 159, 158, 184, 182, 156, 159, 143, 120, 26, 9, 122, 163, 64, 26, 185, 176, 66, 194, 235, 168, 166, 46, 199, 113, 167, 21, 203, 157, 163, 117, 222, 177, 133, 34, 241, 28, 241, 80, 71, 117, 90, 51, 133, 134, 180, 214, 75, 24, 165, 74, 187, 248, 49, 86, 97, 214, 60, 161, 88, 136, 66, 229, 81, 29, 90, 187, 226, 35, 160, 254, 63, 245, 156, 151, 117, 152, 247, 178, 232, 213, 91, 233, 167, 172, 190, 1, 251, 245, 94, 7, 94, 8, 108, 148, 199, 153, 217, 202, 33, 22, 143, 216, 131, 134, 236, 76, 84, 1, 1, 146, 205, 5, 195, 216, 136, 181, 93, 54, 1, 249, 54, 239, 101, 130, 59, 50, 230, 197, 72, 135, 1, 221, 164, 175, 60, 185, 149, 6, 153, 121, 249, 124, 47, 216, 248, 124, 222, 253, 91, 25, 251, 17, 114, 116, 67, 15, 17, 209, 195, 9, 168, 241, 165, 238, 57, 148, 249, 185, 56, 136, 167, 100, 114, 169, 41, 199, 74, 179, 19, 143, 71, 215, 181, 222, 157, 144, 178, 57, 167, 177, 1, 161, 19, 33, 243, 245, 152, 102, 160, 221, 58, 182, 140, 225, 94, 247, 23, 90, 248, 207, 36, 185, 27, 28, 220, 15, 73, 198, 228, 45, 2, 55, 153, 2, 103, 221, 189, 19, 39, 202, 123, 103, 64, 110, 213, 58, 33, 8, 77, 141, 0, 205, 89, 2, 51, 26, 249, 28, 34, 143, 69, 85, 231, 62, 125, 211, 39, 196, 207, 151, 91, 171, 232, 236, 229, 82, 125, 111, 180, 246, 48, 98, 53, 5, 121, 236, 123, 102, 33, 134, 137, 24, 209, 173, 202, 224, 148, 166, 99, 163, 120, 66, 13, 88, 65, 212, 123, 52, 45, 164, 154, 101, 144, 127, 212, 199, 31, 170, 21, 126, 203, 86, 21, 168, 165, 253, 243, 144, 105, 62, 80, 45, 33, 192, 190, 248, 211, 240, 178, 157, 14, 145, 95, 248, 194, 143, 65, 217, 70, 160, 85, 178, 233, 159, 96, 216, 181, 252, 95, 47, 220, 20, 113, 43, 98, 9, 154, 253, 132, 69, 131, 109, 238, 37, 252, 46, 88, 188, 167, 153, 28, 100, 116, 175, 142, 52, 209, 228, 152, 116, 98, 102, 15, 52, 47, 204, 185, 5, 189, 56, 211, 125, 155, 76, 59, 234, 223, 47, 10, 166, 59, 112, 108, 32, 214, 88, 159, 229, 47, 209, 237, 9, 95, 189, 180, 54, 31, 201, 88, 78, 167, 166, 48, 8, 54, 8, 191, 176, 224, 167, 204, 185, 243, 211, 40, 57, 49, 118, 207, 5, 189, 56, 138, 69, 38, 56, 149, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; FormatTransferFractalZz transfer; TransArgs args{reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {30, 33}, {1, 2, 32, 32}, DT_UINT8}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0])); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 2, 32, 32}, {30, 33}, DT_UINT8}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0])); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape3_uint8) { uint8_t data[2 * 30 * 32] = { 252, 93, 197, 26, 218, 156, 186, 88, 248, 251, 232, 100, 3, 79, 56, 127, 142, 20, 63, 109, 145, 151, 206, 52, 164, 20, 233, 117, 57, 218, 169, 158, 174, 118, 118, 54, 99, 37, 194, 209, 116, 38, 26, 72, 110, 60, 215, 102, 169, 202, 118, 70, 238, 238, 179, 241, 137, 125, 154, 116, 59, 231, 154, 208, 242, 187, 206, 179, 99, 254, 40, 52, 124, 4, 217, 111, 26, 184, 153, 59, 20, 85, 150, 0, 15, 25, 144, 134, 116, 54, 184, 97, 189, 140, 40, 188, 144, 116, 64, 65, 207, 244, 139, 211, 202, 0, 170, 75, 219, 246, 93, 99, 60, 28, 46, 78, 73, 205, 79, 250, 95, 198, 169, 79, 40, 253, 247, 101, 114, 170, 105, 148, 245, 237, 157, 46, 248, 212, 157, 228, 116, 56, 43, 245, 181, 147, 6, 168, 217, 141, 196, 48, 37, 93, 234, 154, 189, 64, 16, 85, 184, 113, 154, 125, 54, 84, 21, 171, 245, 63, 96, 194, 58, 176, 75, 64, 161, 59, 249, 160, 240, 52, 253, 122, 185, 123, 42, 133, 139, 98, 191, 162, 71, 157, 143, 60, 233, 20, 58, 0, 171, 253, 34, 159, 65, 35, 247, 107, 17, 78, 88, 182, 193, 66, 119, 177, 143, 231, 15, 35, 193, 137, 96, 175, 36, 59, 36, 62, 167, 196, 67, 44, 172, 218, 159, 122, 94, 72, 54, 65, 23, 69, 244, 219, 117, 180, 72, 162, 88, 118, 24, 202, 93, 67, 55, 86, 93, 122, 15, 92, 151, 28, 95, 62, 246, 203, 4, 23, 92, 175, 153, 31, 59, 142, 6, 199, 198, 214, 78, 20, 51, 228, 193, 246, 145, 144, 129, 31, 150, 151, 206, 13, 5, 2, 78, 161, 233, 50, 217, 254, 211, 0, 155, 182, 74, 98, 64, 126, 218, 1, 18, 202, 146, 176, 74, 127, 45, 192, 101, 153, 122, 101, 88, 46, 128, 221, 86, 74, 119, 185, 213, 91, 167, 69, 211, 129, 73, 114, 250, 216, 52, 250, 184, 149, 69, 147, 205, 82, 115, 246, 98, 75, 139, 102, 125, 26, 200, 205, 191, 197, 70, 2, 11, 244, 192, 34, 88, 187, 101, 238, 227, 150, 124, 215, 145, 91, 102, 212, 17, 117, 134, 71, 111, 129, 39, 253, 35, 241, 213, 18, 129, 239, 216, 181, 170, 103, 123, 226, 142, 24, 128, 169, 160, 56, 219, 6, 62, 251, 167, 229, 31, 99, 177, 139, 137, 232, 135, 59, 25, 197, 128, 62, 208, 8, 240, 131, 64, 147, 98, 64, 24, 72, 213, 145, 148, 164, 81, 180, 185, 155, 40, 72, 39, 69, 111, 208, 121, 212, 57, 143, 36, 203, 77, 19, 167, 154, 190, 123, 52, 191, 7, 105, 154, 142, 152, 59, 58, 101, 28, 195, 223, 215, 209, 127, 218, 121, 217, 46, 200, 192, 197, 188, 134, 159, 49, 75, 67, 247, 75, 96, 50, 163, 109, 147, 147, 38, 120, 2, 129, 171, 32, 198, 127, 203, 196, 111, 81, 253, 90, 80, 125, 234, 17, 205, 216, 55, 140, 227, 131, 180, 0, 208, 36, 85, 16, 69, 163, 58, 177, 136, 109, 243, 160, 64, 76, 181, 182, 35, 182, 118, 243, 93, 4, 176, 208, 61, 193, 171, 105, 33, 89, 81, 72, 220, 94, 153, 36, 96, 223, 47, 198, 150, 21, 254, 130, 10, 221, 81, 206, 47, 119, 151, 243, 123, 206, 94, 164, 130, 152, 147, 226, 135, 109, 249, 147, 216, 225, 1, 46, 158, 26, 137, 71, 10, 127, 124, 172, 50, 247, 82, 11, 8, 252, 179, 23, 107, 80, 114, 168, 194, 23, 95, 86, 93, 177, 71, 82, 180, 161, 95, 58, 146, 154, 219, 84, 101, 214, 56, 125, 76, 89, 172, 244, 203, 242, 104, 77, 23, 6, 229, 223, 172, 146, 184, 68, 245, 12, 117, 171, 221, 170, 201, 201, 108, 228, 119, 221, 89, 107, 202, 41, 162, 168, 157, 139, 225, 178, 179, 163, 53, 64, 37, 75, 226, 249, 197, 40, 184, 132, 153, 126, 158, 233, 170, 198, 142, 132, 205, 40, 18, 128, 10, 246, 240, 156, 109, 233, 132, 6, 145, 184, 166, 64, 19, 187, 31, 60, 37, 241, 61, 108, 1, 70, 78, 149, 134, 91, 2, 169, 181, 72, 79, 218, 240, 69, 45, 168, 162, 123, 106, 77, 252, 91, 66, 38, 111, 132, 249, 213, 254, 155, 113, 74, 30, 187, 123, 210, 94, 106, 47, 155, 85, 208, 220, 187, 213, 173, 50, 163, 77, 110, 52, 59, 135, 138, 153, 93, 61, 18, 150, 50, 104, 95, 155, 115, 203, 90, 13, 250, 94, 65, 112, 198, 136, 81, 215, 167, 103, 145, 116, 245, 213, 12, 78, 144, 43, 133, 4, 35, 21, 157, 149, 186, 118, 131, 48, 145, 16, 149, 0, 128, 135, 250, 134, 207, 114, 211, 3, 178, 184, 170, 216, 233, 237, 182, 153, 132, 24, 36, 117, 217, 242, 187, 109, 12, 79, 196, 124, 200, 138, 160, 43, 242, 55, 157, 185, 252, 40, 46, 232, 112, 137, 166, 61, 5, 67, 136, 32, 212, 172, 55, 58, 133, 72, 248, 101, 19, 65, 208, 134, 66, 76, 63, 178, 207, 133, 20, 191, 48, 31, 116, 67, 233, 116, 119, 216, 17, 137, 201, 219, 181, 161, 114, 128, 41, 127, 0, 226, 87, 43, 241, 2, 67, 136, 230, 104, 43, 178, 23, 155, 74, 139, 175, 226, 121, 135, 190, 227, 179, 148, 188, 133, 209, 32, 230, 128, 158, 248, 146, 131, 226, 37, 168, 228, 48, 78, 112, 81, 137, 99, 0, 11, 184, 126, 87, 179, 71, 24, 143, 200, 217, 48, 219, 152, 14, 204, 150, 156, 239, 220, 59, 111, 23, 167, 180, 220, 191, 128, 50, 82, 173, 69, 42, 215, 95, 171, 114, 210, 15, 149, 155, 35, 250, 250, 153, 208, 64, 191, 231, 232, 238, 153, 219, 188, 23, 82, 252, 1, 50, 33, 38, 204, 169, 118, 30, 129, 33, 130, 239, 208, 153, 221, 94, 212, 87, 127, 156, 109, 151, 176, 168, 41, 168, 46, 31, 228, 81, 201, 154, 113, 190, 201, 254, 169, 113, 205, 43, 157, 96, 138, 118, 181, 233, 40, 173, 120, 198, 64, 96, 162, 175, 1, 62, 84, 231, 29, 29, 204, 201, 141, 253, 149, 186, 176, 118, 197, 18, 131, 78, 198, 98, 80, 203, 133, 22, 34, 201, 120, 73, 93, 223, 128, 222, 213, 218, 66, 252, 130, 12, 221, 124, 102, 80, 150, 57, 238, 38, 136, 183, 96, 8, 227, 52, 235, 62, 197, 12, 62, 25, 78, 222, 91, 193, 140, 86, 210, 56, 187, 34, 222, 25, 0, 182, 117, 246, 232, 7, 79, 70, 47, 60, 233, 194, 203, 13, 186, 15, 115, 17, 246, 130, 212, 105, 115, 142, 151, 7, 135, 115, 51, 241, 67, 228, 61, 204, 208, 95, 149, 164, 146, 145, 161, 186, 108, 180, 50, 166, 70, 143, 95, 108, 114, 28, 127, 19, 69, 161, 156, 86, 150, 147, 72, 97, 238, 172, 62, 216, 98, 5, 96, 57, 216, 204, 159, 43, 82, 104, 233, 56, 2, 55, 148, 2, 80, 146, 132, 62, 76, 229, 59, 212, 236, 227, 1, 3, 217, 23, 36, 238, 155, 157, 254, 175, 45, 228, 185, 102, 199, 43, 28, 72, 228, 171, 137, 9, 113, 215, 69, 26, 62, 138, 10, 10, 117, 9, 145, 125, 216, 195, 111, 110, 154, 118, 36, 159, 155, 165, 198, 70, 10, 254, 245, 218, 93, 53, 105, 188, 86, 140, 204, 9, 150, 234, 126, 157, 62, 41, 3, 22, 80, 190, 15, 81, 41, 69, 42, 124, 87, 21, 54, 119, 209, 48, 215, 153, 94, 210, 139, 165, 171, 153, 70, 123, 51, 151, 0, 12, 222, 191, 144, 42, 5, 13, 71, 172, 73, 92, 120, 213, 226, 46, 161, 63, 136, 2, 205, 123, 67, 112, 206, 176, 21, 28, 4, 29, 89, 45, 246, 65, 204, 178, 175, 48, 20, 167, 54, 146, 37, 206, 91, 110, 195, 9, 179, 16, 69, 15, 209, 100, 60, 217, 178, 159, 9, 25, 11, 154, 215, 138, 214, 248, 249, 217, 146, 123, 100, 50, 33, 86, 197, 115, 47, 30, 169, 162, 121, 92, 21, 21, 140, 113, 28, 100, 153, 211, 106, 68, 21, 56, 54, 135, 155, 192, 105, 192, 97, 132, 105, 132, 191, 244, 82, 141, 213, 97, 122, 62, 204, 112, 164, 24, 26, 11, 171, 173, 114, 233, 204, 125, 105, 36, 123, 236, 221, 115, 7, 221, 4, 34, 69, 183, 99, 63, 135, 245, 14, 90, 236, 239, 201, 84, 167, 250, 83, 254, 58, 4, 56, 253, 83, 53, 25, 234, 30, 122, 85, 242, 51, 113, 241, 242, 25, 8, 8, 70, 151, 252, 84, 86, 27, 102, 111, 61, 235, 131, 171, 182, 48, 179, 75, 18, 168, 168, 190, 33, 21, 156, 215, 232, 103, 10, 142, 199, 201, 118, 144, 163, 215, 146, 88, 181, 12, 63, 229, 61, 203, 120, 149, 158, 149, 66, 88, 4, 116, 188, 126, 80, 76, 69, 70, 213, 230, 17, 43, 124, 165, 215, 38, 15, 124, 124, 191, 95, 125, 228, 74, 234, 103, 244, 34, 196, 24, 70, 246, 248, 54, 126, 198, 229, 180, 217, 95, 148, 208, 187, 119, 181, 239, 194, 206, 245, 16, 253, 20, 219, 9, 18, 59, 136, 233, 138, 145, 88, 162, 143, 210, 111, 226, 176, 172, 159, 248, 2, 30, 31, 9, 229, 146, 142, 86, 240, 77, 102, 156, 225, 102, 114, 78, 19, 245, 237, 137, 133, 66, 110, 204, 100, 3, 8, 161, 164, 38, 14, 21, 203, 152, 212, 129, 199, 189, 188, 13, 248, 223, 4, 26, 124, 253, 239, 174, 84, 42, 43, 117, 113, 229, 120, 113, 164, 100, 4, 146, 49, 68, 4, 87, 102, 53, 43, 101, 86, 148, 195, 21, 16, 88, 213, 122, 239, 97, 210, 223, 83, 237, 124, 104, 4, 184, 24, 193, 40, 108, 222, 254, 103, 2, 134, 240, 221, 68, 72, 76, 247, 119, 238, 102, 9, 6, 43, 143, 151, 243, 34, 10, 254, 107, 211, 233, 100, 234, 103, 31, 218, 170, 219, 242, 250, 186, 196, 208, 37, 107, 182, 62, 137, 248, 13, 241, 230, 104, 40, 138, 231, 171, 213, 35, 104, 253, 195, 6, 26, 34, 133, 33, 195, 81, 186, 111, 9, 104, 86, 3, 91, 96, 195, 157, 107, 148, 90, 135, 110, 104, 222, 37, 183, 10, 221, 150, 27, 243, 127, 69, 191, 126, 127, 208, 65, 198, 50, 24, 49, 134, 131, 4, 241, 87, 75, 44, 248, 19, 86, 215, 200, 130, 20, 205, 86, 197, 156, 8, 142, 109, 220, 75, 195, 157, 73, 201, 202, 80, 59, 242, 9, 8, 131, 153, 2, 245, 76, 38, 195, 197, 157, 118, 50, 246, 44, 254, 33, 65, 31, 216, 187, 155, 35, 28, 238, 147, 175, 122, 246, 104, 188, 192, 81, 55, 138, 165, 228, 126, 240, 88, 99, 22, 58, 133, 150, 59, 141, 35, 243, 66, 198, 245, 111, 229, 113, 246, 248, 48, 155, 231, 170, 214, 76, 21, 208, 105, 140, 141, 93, 23, 187, 73, 140, 201, 46, 254, 174, 232, 206, 80, 71, 35, 91, 217, 143, 167, 83, 89, 151, 233, 29, 170, 211, 87, 40, 98, 62, 161, 237, 32, 236, 65, 48, 27, 162, 180, 7, 1, }; uint8_t ret[2 * 1 * 1 * 32 * 32] = { 252, 93, 197, 26, 218, 156, 186, 88, 248, 251, 232, 100, 3, 79, 56, 127, 142, 20, 63, 109, 145, 151, 206, 52, 164, 20, 233, 117, 57, 218, 169, 158, 174, 118, 118, 54, 99, 37, 194, 209, 116, 38, 26, 72, 110, 60, 215, 102, 169, 202, 118, 70, 238, 238, 179, 241, 137, 125, 154, 116, 59, 231, 154, 208, 242, 187, 206, 179, 99, 254, 40, 52, 124, 4, 217, 111, 26, 184, 153, 59, 20, 85, 150, 0, 15, 25, 144, 134, 116, 54, 184, 97, 189, 140, 40, 188, 144, 116, 64, 65, 207, 244, 139, 211, 202, 0, 170, 75, 219, 246, 93, 99, 60, 28, 46, 78, 73, 205, 79, 250, 95, 198, 169, 79, 40, 253, 247, 101, 114, 170, 105, 148, 245, 237, 157, 46, 248, 212, 157, 228, 116, 56, 43, 245, 181, 147, 6, 168, 217, 141, 196, 48, 37, 93, 234, 154, 189, 64, 16, 85, 184, 113, 154, 125, 54, 84, 21, 171, 245, 63, 96, 194, 58, 176, 75, 64, 161, 59, 249, 160, 240, 52, 253, 122, 185, 123, 42, 133, 139, 98, 191, 162, 71, 157, 143, 60, 233, 20, 58, 0, 171, 253, 34, 159, 65, 35, 247, 107, 17, 78, 88, 182, 193, 66, 119, 177, 143, 231, 15, 35, 193, 137, 96, 175, 36, 59, 36, 62, 167, 196, 67, 44, 172, 218, 159, 122, 94, 72, 54, 65, 23, 69, 244, 219, 117, 180, 72, 162, 88, 118, 24, 202, 93, 67, 55, 86, 93, 122, 15, 92, 151, 28, 95, 62, 246, 203, 4, 23, 92, 175, 153, 31, 59, 142, 6, 199, 198, 214, 78, 20, 51, 228, 193, 246, 145, 144, 129, 31, 150, 151, 206, 13, 5, 2, 78, 161, 233, 50, 217, 254, 211, 0, 155, 182, 74, 98, 64, 126, 218, 1, 18, 202, 146, 176, 74, 127, 45, 192, 101, 153, 122, 101, 88, 46, 128, 221, 86, 74, 119, 185, 213, 91, 167, 69, 211, 129, 73, 114, 250, 216, 52, 250, 184, 149, 69, 147, 205, 82, 115, 246, 98, 75, 139, 102, 125, 26, 200, 205, 191, 197, 70, 2, 11, 244, 192, 34, 88, 187, 101, 238, 227, 150, 124, 215, 145, 91, 102, 212, 17, 117, 134, 71, 111, 129, 39, 253, 35, 241, 213, 18, 129, 239, 216, 181, 170, 103, 123, 226, 142, 24, 128, 169, 160, 56, 219, 6, 62, 251, 167, 229, 31, 99, 177, 139, 137, 232, 135, 59, 25, 197, 128, 62, 208, 8, 240, 131, 64, 147, 98, 64, 24, 72, 213, 145, 148, 164, 81, 180, 185, 155, 40, 72, 39, 69, 111, 208, 121, 212, 57, 143, 36, 203, 77, 19, 167, 154, 190, 123, 52, 191, 7, 105, 154, 142, 152, 59, 58, 101, 28, 195, 223, 215, 209, 127, 218, 121, 217, 46, 200, 192, 197, 188, 134, 159, 49, 75, 67, 247, 75, 96, 50, 163, 109, 147, 147, 38, 120, 2, 129, 171, 32, 198, 127, 203, 196, 111, 81, 253, 90, 80, 125, 234, 17, 205, 216, 55, 140, 227, 131, 180, 0, 208, 36, 85, 16, 69, 163, 58, 177, 136, 109, 243, 160, 64, 76, 181, 182, 35, 182, 118, 243, 93, 4, 176, 208, 61, 193, 171, 105, 33, 89, 81, 72, 220, 94, 153, 36, 96, 223, 47, 198, 150, 21, 254, 130, 10, 221, 81, 206, 47, 119, 151, 243, 123, 206, 94, 164, 130, 152, 147, 226, 135, 109, 249, 147, 216, 225, 1, 46, 158, 26, 137, 71, 10, 127, 124, 172, 50, 247, 82, 11, 8, 252, 179, 23, 107, 80, 114, 168, 194, 23, 95, 86, 93, 177, 71, 82, 180, 161, 95, 58, 146, 154, 219, 84, 101, 214, 56, 125, 76, 89, 172, 244, 203, 242, 104, 77, 23, 6, 229, 223, 172, 146, 184, 68, 245, 12, 117, 171, 221, 170, 201, 201, 108, 228, 119, 221, 89, 107, 202, 41, 162, 168, 157, 139, 225, 178, 179, 163, 53, 64, 37, 75, 226, 249, 197, 40, 184, 132, 153, 126, 158, 233, 170, 198, 142, 132, 205, 40, 18, 128, 10, 246, 240, 156, 109, 233, 132, 6, 145, 184, 166, 64, 19, 187, 31, 60, 37, 241, 61, 108, 1, 70, 78, 149, 134, 91, 2, 169, 181, 72, 79, 218, 240, 69, 45, 168, 162, 123, 106, 77, 252, 91, 66, 38, 111, 132, 249, 213, 254, 155, 113, 74, 30, 187, 123, 210, 94, 106, 47, 155, 85, 208, 220, 187, 213, 173, 50, 163, 77, 110, 52, 59, 135, 138, 153, 93, 61, 18, 150, 50, 104, 95, 155, 115, 203, 90, 13, 250, 94, 65, 112, 198, 136, 81, 215, 167, 103, 145, 116, 245, 213, 12, 78, 144, 43, 133, 4, 35, 21, 157, 149, 186, 118, 131, 48, 145, 16, 149, 0, 128, 135, 250, 134, 207, 114, 211, 3, 178, 184, 170, 216, 233, 237, 182, 153, 132, 24, 36, 117, 217, 242, 187, 109, 12, 79, 196, 124, 200, 138, 160, 43, 242, 55, 157, 185, 252, 40, 46, 232, 112, 137, 166, 61, 5, 67, 136, 32, 212, 172, 55, 58, 133, 72, 248, 101, 19, 65, 208, 134, 66, 76, 63, 178, 207, 133, 20, 191, 48, 31, 116, 67, 233, 116, 119, 216, 17, 137, 201, 219, 181, 161, 114, 128, 41, 127, 0, 226, 87, 43, 241, 2, 67, 136, 230, 104, 43, 178, 23, 155, 74, 139, 175, 226, 121, 135, 190, 227, 179, 148, 188, 133, 209, 32, 230, 128, 158, 248, 146, 131, 226, 37, 168, 228, 48, 78, 112, 81, 137, 99, 0, 11, 184, 126, 87, 179, 71, 24, 143, 200, 217, 48, 219, 152, 14, 204, 150, 156, 239, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 111, 23, 167, 180, 220, 191, 128, 50, 82, 173, 69, 42, 215, 95, 171, 114, 210, 15, 149, 155, 35, 250, 250, 153, 208, 64, 191, 231, 232, 238, 153, 219, 188, 23, 82, 252, 1, 50, 33, 38, 204, 169, 118, 30, 129, 33, 130, 239, 208, 153, 221, 94, 212, 87, 127, 156, 109, 151, 176, 168, 41, 168, 46, 31, 228, 81, 201, 154, 113, 190, 201, 254, 169, 113, 205, 43, 157, 96, 138, 118, 181, 233, 40, 173, 120, 198, 64, 96, 162, 175, 1, 62, 84, 231, 29, 29, 204, 201, 141, 253, 149, 186, 176, 118, 197, 18, 131, 78, 198, 98, 80, 203, 133, 22, 34, 201, 120, 73, 93, 223, 128, 222, 213, 218, 66, 252, 130, 12, 221, 124, 102, 80, 150, 57, 238, 38, 136, 183, 96, 8, 227, 52, 235, 62, 197, 12, 62, 25, 78, 222, 91, 193, 140, 86, 210, 56, 187, 34, 222, 25, 0, 182, 117, 246, 232, 7, 79, 70, 47, 60, 233, 194, 203, 13, 186, 15, 115, 17, 246, 130, 212, 105, 115, 142, 151, 7, 135, 115, 51, 241, 67, 228, 61, 204, 208, 95, 149, 164, 146, 145, 161, 186, 108, 180, 50, 166, 70, 143, 95, 108, 114, 28, 127, 19, 69, 161, 156, 86, 150, 147, 72, 97, 238, 172, 62, 216, 98, 5, 96, 57, 216, 204, 159, 43, 82, 104, 233, 56, 2, 55, 148, 2, 80, 146, 132, 62, 76, 229, 59, 212, 236, 227, 1, 3, 217, 23, 36, 238, 155, 157, 254, 175, 45, 228, 185, 102, 199, 43, 28, 72, 228, 171, 137, 9, 113, 215, 69, 26, 62, 138, 10, 10, 117, 9, 145, 125, 216, 195, 111, 110, 154, 118, 36, 159, 155, 165, 198, 70, 10, 254, 245, 218, 93, 53, 105, 188, 86, 140, 204, 9, 150, 234, 126, 157, 62, 41, 3, 22, 80, 190, 15, 81, 41, 69, 42, 124, 87, 21, 54, 119, 209, 48, 215, 153, 94, 210, 139, 165, 171, 153, 70, 123, 51, 151, 0, 12, 222, 191, 144, 42, 5, 13, 71, 172, 73, 92, 120, 213, 226, 46, 161, 63, 136, 2, 205, 123, 67, 112, 206, 176, 21, 28, 4, 29, 89, 45, 246, 65, 204, 178, 175, 48, 20, 167, 54, 146, 37, 206, 91, 110, 195, 9, 179, 16, 69, 15, 209, 100, 60, 217, 178, 159, 9, 25, 11, 154, 215, 138, 214, 248, 249, 217, 146, 123, 100, 50, 33, 86, 197, 115, 47, 30, 169, 162, 121, 92, 21, 21, 140, 113, 28, 100, 153, 211, 106, 68, 21, 56, 54, 135, 155, 192, 105, 192, 97, 132, 105, 132, 191, 244, 82, 141, 213, 97, 122, 62, 204, 112, 164, 24, 26, 11, 171, 173, 114, 233, 204, 125, 105, 36, 123, 236, 221, 115, 7, 221, 4, 34, 69, 183, 99, 63, 135, 245, 14, 90, 236, 239, 201, 84, 167, 250, 83, 254, 58, 4, 56, 253, 83, 53, 25, 234, 30, 122, 85, 242, 51, 113, 241, 242, 25, 8, 8, 70, 151, 252, 84, 86, 27, 102, 111, 61, 235, 131, 171, 182, 48, 179, 75, 18, 168, 168, 190, 33, 21, 156, 215, 232, 103, 10, 142, 199, 201, 118, 144, 163, 215, 146, 88, 181, 12, 63, 229, 61, 203, 120, 149, 158, 149, 66, 88, 4, 116, 188, 126, 80, 76, 69, 70, 213, 230, 17, 43, 124, 165, 215, 38, 15, 124, 124, 191, 95, 125, 228, 74, 234, 103, 244, 34, 196, 24, 70, 246, 248, 54, 126, 198, 229, 180, 217, 95, 148, 208, 187, 119, 181, 239, 194, 206, 245, 16, 253, 20, 219, 9, 18, 59, 136, 233, 138, 145, 88, 162, 143, 210, 111, 226, 176, 172, 159, 248, 2, 30, 31, 9, 229, 146, 142, 86, 240, 77, 102, 156, 225, 102, 114, 78, 19, 245, 237, 137, 133, 66, 110, 204, 100, 3, 8, 161, 164, 38, 14, 21, 203, 152, 212, 129, 199, 189, 188, 13, 248, 223, 4, 26, 124, 253, 239, 174, 84, 42, 43, 117, 113, 229, 120, 113, 164, 100, 4, 146, 49, 68, 4, 87, 102, 53, 43, 101, 86, 148, 195, 21, 16, 88, 213, 122, 239, 97, 210, 223, 83, 237, 124, 104, 4, 184, 24, 193, 40, 108, 222, 254, 103, 2, 134, 240, 221, 68, 72, 76, 247, 119, 238, 102, 9, 6, 43, 143, 151, 243, 34, 10, 254, 107, 211, 233, 100, 234, 103, 31, 218, 170, 219, 242, 250, 186, 196, 208, 37, 107, 182, 62, 137, 248, 13, 241, 230, 104, 40, 138, 231, 171, 213, 35, 104, 253, 195, 6, 26, 34, 133, 33, 195, 81, 186, 111, 9, 104, 86, 3, 91, 96, 195, 157, 107, 148, 90, 135, 110, 104, 222, 37, 183, 10, 221, 150, 27, 243, 127, 69, 191, 126, 127, 208, 65, 198, 50, 24, 49, 134, 131, 4, 241, 87, 75, 44, 248, 19, 86, 215, 200, 130, 20, 205, 86, 197, 156, 8, 142, 109, 220, 75, 195, 157, 73, 201, 202, 80, 59, 242, 9, 8, 131, 153, 2, 245, 76, 38, 195, 197, 157, 118, 50, 246, 44, 254, 33, 65, 31, 216, 187, 155, 35, 28, 238, 147, 175, 122, 246, 104, 188, 192, 81, 55, 138, 165, 228, 126, 240, 88, 99, 22, 58, 133, 150, 59, 141, 35, 243, 66, 198, 245, 111, 229, 113, 246, 248, 48, 155, 231, 170, 214, 76, 21, 208, 105, 140, 141, 93, 23, 187, 73, 140, 201, 46, 254, 174, 232, 206, 80, 71, 35, 91, 217, 143, 167, 83, 89, 151, 233, 29, 170, 211, 87, 40, 98, 62, 161, 237, 32, 236, 65, 48, 27, 162, 180, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; FormatTransferFractalZz transfer; TransArgs args{ reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 30, 32}, {2, 1, 1, 32, 32}, DT_UINT8}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0])); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{ reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 1, 1, 32, 32}, {2, 30, 32}, DT_UINT8}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0])); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape4_uint8_1) { uint8_t data[2 * 3 * 4 * 32] = { 148, 135, 243, 39, 238, 232, 237, 101, 186, 112, 180, 123, 109, 64, 123, 101, 47, 159, 63, 69, 188, 123, 197, 110, 164, 105, 80, 57, 21, 7, 239, 181, 12, 43, 107, 213, 56, 66, 189, 132, 136, 184, 153, 167, 150, 48, 184, 216, 88, 203, 221, 46, 47, 249, 106, 106, 123, 44, 186, 75, 132, 17, 102, 97, 173, 140, 125, 194, 47, 176, 0, 89, 193, 206, 217, 203, 226, 25, 230, 233, 218, 100, 224, 90, 202, 18, 82, 61, 153, 204, 90, 76, 173, 85, 153, 28, 10, 196, 150, 120, 179, 220, 115, 228, 143, 233, 80, 25, 40, 87, 171, 28, 54, 114, 52, 18, 51, 153, 214, 214, 242, 103, 59, 173, 29, 172, 154, 97, 85, 136, 120, 131, 150, 96, 158, 90, 206, 105, 90, 155, 117, 106, 3, 90, 184, 127, 248, 163, 147, 222, 112, 5, 154, 194, 82, 40, 210, 79, 188, 67, 168, 19, 181, 109, 168, 95, 26, 149, 154, 70, 21, 198, 177, 81, 144, 137, 221, 140, 164, 126, 138, 242, 219, 8, 111, 232, 145, 69, 180, 118, 49, 101, 240, 155, 141, 197, 241, 128, 214, 175, 126, 214, 167, 21, 30, 122, 159, 180, 228, 180, 198, 31, 75, 56, 81, 213, 181, 112, 97, 60, 138, 29, 21, 173, 98, 184, 181, 39, 170, 151, 143, 64, 189, 179, 124, 216, 178, 196, 206, 182, 239, 77, 240, 53, 109, 206, 7, 173, 120, 8, 166, 128, 65, 180, 10, 36, 252, 144, 65, 62, 22, 149, 85, 133, 136, 149, 172, 14, 121, 112, 187, 87, 212, 171, 222, 205, 23, 29, 123, 86, 54, 59, 166, 111, 250, 101, 165, 229, 20, 194, 106, 100, 144, 147, 78, 211, 203, 202, 73, 29, 193, 207, 107, 209, 48, 159, 133, 203, 135, 86, 228, 158, 219, 22, 229, 194, 215, 58, 137, 79, 137, 198, 224, 200, 140, 65, 88, 20, 108, 237, 21, 251, 199, 138, 222, 254, 53, 107, 154, 227, 25, 96, 72, 219, 96, 224, 165, 22, 100, 89, 174, 32, 107, 209, 46, 39, 231, 163, 157, 184, 89, 243, 18, 123, 254, 153, 77, 174, 6, 204, 140, 63, 172, 75, 69, 110, 150, 87, 12, 15, 180, 57, 193, 196, 193, 170, 34, 30, 87, 167, 25, 219, 114, 179, 113, 79, 138, 199, 138, 244, 33, 125, 240, 201, 56, 93, 52, 222, 51, 57, 247, 73, 150, 234, 47, 250, 39, 36, 63, 19, 236, 128, 206, 67, 29, 74, 124, 246, 154, 142, 41, 6, 44, 43, 165, 135, 94, 249, 240, 122, 117, 160, 95, 186, 104, 158, 66, 133, 112, 15, 173, 212, 77, 231, 203, 253, 237, 210, 95, 203, 63, 193, 93, 144, 14, 137, 131, 222, 110, 249, 195, 168, 238, 230, 44, 112, 216, 254, 83, 217, 142, 168, 109, 161, 5, 4, 30, 40, 251, 144, 88, 140, 49, 127, 254, 254, 120, 174, 204, 210, 144, 93, 122, 185, 158, 64, 99, 140, 119, 5, 15, 31, 100, 152, 202, 45, 228, 112, 1, 75, 147, 168, 111, 72, 185, 174, 100, 111, 242, 67, 18, 226, 172, 132, 2, 112, 130, 82, 6, 32, 126, 81, 149, 254, 23, 177, 56, 51, 232, 183, 182, 12, 162, 144, 150, 205, 40, 250, 17, 226, 36, 44, 166, 207, 47, 32, 205, 15, 37, 167, 129, 97, 55, 232, 99, 122, 85, 19, 16, 218, 161, 38, 197, 133, 124, 85, 39, 176, 149, 247, 78, 163, 67, 139, 218, 57, 151, 60, 242, 184, 115, 79, 198, 98, 176, 175, 130, 116, 118, 150, 245, 213, 228, 217, 56, 237, 214, 196, 197, 223, 243, 71, 209, 159, 153, 199, 48, 168, 195, 107, 2, 4, 24, 67, 201, 65, 216, 135, 89, 57, 151, 28, 225, 154, 252, 153, 157, 60, 46, 126, 134, 212, 237, 233, 176, 2, 131, 111, 124, 245, 216, 209, 23, 244, 228, 190, 140, 155, 102, 121, 113, 103, 130, 154, 189, 119, 205, 89, 169, 58, 195, 15, 11, 107, 253, 214, 201, 201, 209, 199, 52, 214, 46, 97, 98, 21, 46, 61, 188, 200, 138, 200, 125, 154, 123, 98, 97, 121, 56, 201, 47, 134, 35, 181, 164, 61, 126, 152, 29, 122, 16, 119, 70, 181, 142, 217, 117, 34, 144, 224, 26, 152, 58, 31, 138, 5, 89, 130, 172, 158, 199, 87, 175, 220, 185, 27, 170, 126, 34, 163, 14, 130, 158, 175, 249, 87, 190, 139, 200, 41, 222, 126, 200, 147, 14, 32, 193, 211, }; uint8_t ret[2 * 3 * 1 * 1 * 32 * 32] = { 148, 135, 243, 39, 238, 232, 237, 101, 186, 112, 180, 123, 109, 64, 123, 101, 47, 159, 63, 69, 188, 123, 197, 110, 164, 105, 80, 57, 21, 7, 239, 181, 12, 43, 107, 213, 56, 66, 189, 132, 136, 184, 153, 167, 150, 48, 184, 216, 88, 203, 221, 46, 47, 249, 106, 106, 123, 44, 186, 75, 132, 17, 102, 97, 173, 140, 125, 194, 47, 176, 0, 89, 193, 206, 217, 203, 226, 25, 230, 233, 218, 100, 224, 90, 202, 18, 82, 61, 153, 204, 90, 76, 173, 85, 153, 28, 10, 196, 150, 120, 179, 220, 115, 228, 143, 233, 80, 25, 40, 87, 171, 28, 54, 114, 52, 18, 51, 153, 214, 214, 242, 103, 59, 173, 29, 172, 154, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 136, 120, 131, 150, 96, 158, 90, 206, 105, 90, 155, 117, 106, 3, 90, 184, 127, 248, 163, 147, 222, 112, 5, 154, 194, 82, 40, 210, 79, 188, 67, 168, 19, 181, 109, 168, 95, 26, 149, 154, 70, 21, 198, 177, 81, 144, 137, 221, 140, 164, 126, 138, 242, 219, 8, 111, 232, 145, 69, 180, 118, 49, 101, 240, 155, 141, 197, 241, 128, 214, 175, 126, 214, 167, 21, 30, 122, 159, 180, 228, 180, 198, 31, 75, 56, 81, 213, 181, 112, 97, 60, 138, 29, 21, 173, 98, 184, 181, 39, 170, 151, 143, 64, 189, 179, 124, 216, 178, 196, 206, 182, 239, 77, 240, 53, 109, 206, 7, 173, 120, 8, 166, 128, 65, 180, 10, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 144, 65, 62, 22, 149, 85, 133, 136, 149, 172, 14, 121, 112, 187, 87, 212, 171, 222, 205, 23, 29, 123, 86, 54, 59, 166, 111, 250, 101, 165, 229, 20, 194, 106, 100, 144, 147, 78, 211, 203, 202, 73, 29, 193, 207, 107, 209, 48, 159, 133, 203, 135, 86, 228, 158, 219, 22, 229, 194, 215, 58, 137, 79, 137, 198, 224, 200, 140, 65, 88, 20, 108, 237, 21, 251, 199, 138, 222, 254, 53, 107, 154, 227, 25, 96, 72, 219, 96, 224, 165, 22, 100, 89, 174, 32, 107, 209, 46, 39, 231, 163, 157, 184, 89, 243, 18, 123, 254, 153, 77, 174, 6, 204, 140, 63, 172, 75, 69, 110, 150, 87, 12, 15, 180, 57, 193, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 170, 34, 30, 87, 167, 25, 219, 114, 179, 113, 79, 138, 199, 138, 244, 33, 125, 240, 201, 56, 93, 52, 222, 51, 57, 247, 73, 150, 234, 47, 250, 39, 36, 63, 19, 236, 128, 206, 67, 29, 74, 124, 246, 154, 142, 41, 6, 44, 43, 165, 135, 94, 249, 240, 122, 117, 160, 95, 186, 104, 158, 66, 133, 112, 15, 173, 212, 77, 231, 203, 253, 237, 210, 95, 203, 63, 193, 93, 144, 14, 137, 131, 222, 110, 249, 195, 168, 238, 230, 44, 112, 216, 254, 83, 217, 142, 168, 109, 161, 5, 4, 30, 40, 251, 144, 88, 140, 49, 127, 254, 254, 120, 174, 204, 210, 144, 93, 122, 185, 158, 64, 99, 140, 119, 5, 15, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 152, 202, 45, 228, 112, 1, 75, 147, 168, 111, 72, 185, 174, 100, 111, 242, 67, 18, 226, 172, 132, 2, 112, 130, 82, 6, 32, 126, 81, 149, 254, 23, 177, 56, 51, 232, 183, 182, 12, 162, 144, 150, 205, 40, 250, 17, 226, 36, 44, 166, 207, 47, 32, 205, 15, 37, 167, 129, 97, 55, 232, 99, 122, 85, 19, 16, 218, 161, 38, 197, 133, 124, 85, 39, 176, 149, 247, 78, 163, 67, 139, 218, 57, 151, 60, 242, 184, 115, 79, 198, 98, 176, 175, 130, 116, 118, 150, 245, 213, 228, 217, 56, 237, 214, 196, 197, 223, 243, 71, 209, 159, 153, 199, 48, 168, 195, 107, 2, 4, 24, 67, 201, 65, 216, 135, 89, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 28, 225, 154, 252, 153, 157, 60, 46, 126, 134, 212, 237, 233, 176, 2, 131, 111, 124, 245, 216, 209, 23, 244, 228, 190, 140, 155, 102, 121, 113, 103, 130, 154, 189, 119, 205, 89, 169, 58, 195, 15, 11, 107, 253, 214, 201, 201, 209, 199, 52, 214, 46, 97, 98, 21, 46, 61, 188, 200, 138, 200, 125, 154, 123, 98, 97, 121, 56, 201, 47, 134, 35, 181, 164, 61, 126, 152, 29, 122, 16, 119, 70, 181, 142, 217, 117, 34, 144, 224, 26, 152, 58, 31, 138, 5, 89, 130, 172, 158, 199, 87, 175, 220, 185, 27, 170, 126, 34, 163, 14, 130, 158, 175, 249, 87, 190, 139, 200, 41, 222, 126, 200, 147, 14, 32, 193, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; FormatTransferFractalZz transfer; TransArgs args{ reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 3, 4, 32}, {2, 3, 1, 1, 32, 32}, DT_UINT8}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0])); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{ reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 3, 1, 1, 32, 32}, {2, 3, 4, 32}, DT_UINT8}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0])); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape4_uint8_2) { uint8_t data[2 * 3 * 4 * 33] = { 18, 158, 60, 43, 108, 88, 198, 190, 25, 94, 196, 98, 41, 45, 64, 161, 136, 109, 60, 6, 165, 120, 9, 65, 99, 106, 141, 0, 119, 100, 60, 35, 111, 178, 104, 158, 221, 115, 103, 85, 223, 231, 149, 174, 238, 120, 35, 53, 53, 134, 89, 253, 123, 19, 75, 78, 174, 231, 196, 87, 74, 134, 69, 230, 237, 12, 162, 210, 182, 194, 10, 102, 131, 240, 110, 69, 0, 98, 112, 180, 39, 8, 109, 57, 163, 136, 177, 133, 223, 146, 128, 128, 173, 100, 83, 226, 16, 17, 46, 196, 116, 165, 65, 66, 193, 99, 214, 47, 199, 226, 233, 7, 250, 215, 133, 104, 29, 20, 54, 1, 42, 231, 49, 48, 116, 214, 52, 11, 165, 164, 168, 230, 26, 135, 110, 134, 140, 125, 214, 204, 231, 57, 193, 44, 101, 245, 81, 29, 84, 76, 60, 234, 59, 53, 138, 132, 44, 238, 22, 18, 80, 72, 84, 178, 222, 53, 44, 87, 19, 196, 112, 58, 237, 201, 203, 59, 218, 75, 105, 234, 95, 175, 36, 64, 96, 12, 74, 56, 7, 171, 235, 138, 60, 243, 226, 242, 61, 116, 164, 185, 52, 82, 154, 160, 16, 47, 23, 214, 173, 82, 144, 210, 144, 150, 38, 236, 51, 49, 205, 79, 221, 180, 216, 196, 233, 149, 81, 68, 51, 233, 94, 219, 175, 24, 207, 205, 130, 108, 213, 31, 128, 41, 142, 7, 82, 133, 207, 9, 224, 128, 214, 24, 76, 172, 228, 139, 33, 168, 9, 127, 187, 196, 121, 78, 201, 240, 18, 157, 203, 244, 157, 38, 246, 231, 94, 29, 251, 18, 186, 33, 108, 212, 212, 100, 95, 16, 69, 163, 36, 155, 178, 68, 102, 8, 174, 123, 101, 88, 51, 112, 237, 39, 50, 237, 64, 136, 5, 144, 183, 11, 81, 115, 248, 165, 196, 91, 3, 185, 126, 38, 25, 102, 203, 238, 174, 156, 36, 53, 90, 168, 240, 77, 145, 20, 100, 197, 157, 183, 91, 116, 165, 209, 142, 212, 211, 150, 20, 20, 38, 149, 220, 218, 171, 134, 18, 184, 105, 9, 192, 243, 140, 134, 111, 55, 161, 236, 211, 115, 58, 159, 114, 211, 53, 234, 82, 38, 38, 112, 227, 159, 210, 129, 61, 249, 64, 31, 136, 110, 254, 226, 10, 223, 223, 241, 192, 160, 231, 207, 151, 35, 41, 244, 154, 129, 127, 32, 173, 113, 111, 42, 221, 73, 141, 72, 196, 90, 41, 115, 220, 207, 123, 89, 210, 119, 133, 5, 3, 70, 71, 0, 88, 134, 182, 152, 12, 223, 179, 101, 100, 92, 195, 190, 253, 230, 218, 215, 164, 92, 50, 191, 50, 152, 171, 226, 207, 74, 154, 213, 139, 26, 60, 59, 121, 177, 229, 139, 52, 203, 111, 120, 53, 109, 35, 177, 59, 254, 188, 185, 189, 81, 233, 223, 164, 26, 143, 125, 65, 41, 243, 231, 96, 174, 157, 30, 106, 78, 185, 252, 11, 98, 19, 34, 119, 34, 240, 141, 39, 189, 48, 149, 166, 176, 2, 142, 185, 231, 239, 49, 188, 234, 77, 213, 99, 249, 169, 165, 153, 100, 249, 161, 9, 101, 41, 141, 182, 162, 241, 58, 129, 177, 37, 233, 97, 163, 43, 24, 254, 34, 49, 165, 94, 36, 47, 19, 32, 85, 162, 190, 153, 183, 135, 204, 91, 79, 45, 72, 26, 19, 197, 179, 246, 241, 27, 141, 177, 9, 8, 140, 112, 212, 5, 197, 86, 2, 170, 125, 179, 138, 240, 204, 99, 59, 190, 65, 113, 181, 166, 159, 40, 154, 81, 12, 141, 122, 185, 220, 203, 22, 82, 105, 146, 52, 118, 16, 10, 99, 183, 103, 18, 170, 142, 204, 49, 73, 250, 61, 169, 243, 85, 203, 17, 170, 133, 171, 179, 237, 163, 131, 150, 71, 171, 120, 213, 3, 147, 138, 223, 171, 235, 51, 5, 155, 19, 241, 253, 152, 19, 44, 250, 110, 244, 211, 170, 226, 44, 181, 208, 68, 143, 94, 85, 229, 211, 16, 23, 219, 94, 35, 159, 63, 208, 207, 7, 189, 254, 207, 38, 6, 105, 92, 104, 73, 156, 219, 191, 108, 99, 60, 49, 42, 4, 245, 158, 239, 131, 42, 206, 187, 214, 73, 138, 59, 85, 54, 100, 38, 133, 182, 157, 187, 150, 4, 78, 120, 22, 19, 119, 91, 52, 156, 127, 9, 93, 6, 172, 209, 114, 249, 190, 67, 235, 169, 133, 125, 66, 214, 234, 146, 219, 149, 193, 150, 35, 56, 98, 38, 233, 125, 88, 89, 73, 146, 230, 47, 159, 52, 31, 23, 164, 103, 250, 228, 57, 25, 2, 219, 56, 122, 58, 190, 232, 120, 205, 35, 25, 76, 182, 69, 137, 27, 5, 12, }; uint8_t ret[2 * 3 * 1 * 2 * 32 * 32] = { 18, 158, 60, 43, 108, 88, 198, 190, 25, 94, 196, 98, 41, 45, 64, 161, 136, 109, 60, 6, 165, 120, 9, 65, 99, 106, 141, 0, 119, 100, 60, 35, 178, 104, 158, 221, 115, 103, 85, 223, 231, 149, 174, 238, 120, 35, 53, 53, 134, 89, 253, 123, 19, 75, 78, 174, 231, 196, 87, 74, 134, 69, 230, 237, 162, 210, 182, 194, 10, 102, 131, 240, 110, 69, 0, 98, 112, 180, 39, 8, 109, 57, 163, 136, 177, 133, 223, 146, 128, 128, 173, 100, 83, 226, 16, 17, 196, 116, 165, 65, 66, 193, 99, 214, 47, 199, 226, 233, 7, 250, 215, 133, 104, 29, 20, 54, 1, 42, 231, 49, 48, 116, 214, 52, 11, 165, 164, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 135, 110, 134, 140, 125, 214, 204, 231, 57, 193, 44, 101, 245, 81, 29, 84, 76, 60, 234, 59, 53, 138, 132, 44, 238, 22, 18, 80, 72, 84, 178, 53, 44, 87, 19, 196, 112, 58, 237, 201, 203, 59, 218, 75, 105, 234, 95, 175, 36, 64, 96, 12, 74, 56, 7, 171, 235, 138, 60, 243, 226, 242, 61, 164, 185, 52, 82, 154, 160, 16, 47, 23, 214, 173, 82, 144, 210, 144, 150, 38, 236, 51, 49, 205, 79, 221, 180, 216, 196, 233, 149, 81, 68, 51, 233, 219, 175, 24, 207, 205, 130, 108, 213, 31, 128, 41, 142, 7, 82, 133, 207, 9, 224, 128, 214, 24, 76, 172, 228, 139, 33, 168, 9, 127, 187, 196, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 240, 18, 157, 203, 244, 157, 38, 246, 231, 94, 29, 251, 18, 186, 33, 108, 212, 212, 100, 95, 16, 69, 163, 36, 155, 178, 68, 102, 8, 174, 123, 88, 51, 112, 237, 39, 50, 237, 64, 136, 5, 144, 183, 11, 81, 115, 248, 165, 196, 91, 3, 185, 126, 38, 25, 102, 203, 238, 174, 156, 36, 53, 90, 240, 77, 145, 20, 100, 197, 157, 183, 91, 116, 165, 209, 142, 212, 211, 150, 20, 20, 38, 149, 220, 218, 171, 134, 18, 184, 105, 9, 192, 243, 140, 134, 55, 161, 236, 211, 115, 58, 159, 114, 211, 53, 234, 82, 38, 38, 112, 227, 159, 210, 129, 61, 249, 64, 31, 136, 110, 254, 226, 10, 223, 223, 241, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 207, 151, 35, 41, 244, 154, 129, 127, 32, 173, 113, 111, 42, 221, 73, 141, 72, 196, 90, 41, 115, 220, 207, 123, 89, 210, 119, 133, 5, 3, 70, 0, 88, 134, 182, 152, 12, 223, 179, 101, 100, 92, 195, 190, 253, 230, 218, 215, 164, 92, 50, 191, 50, 152, 171, 226, 207, 74, 154, 213, 139, 26, 60, 121, 177, 229, 139, 52, 203, 111, 120, 53, 109, 35, 177, 59, 254, 188, 185, 189, 81, 233, 223, 164, 26, 143, 125, 65, 41, 243, 231, 96, 174, 157, 30, 78, 185, 252, 11, 98, 19, 34, 119, 34, 240, 141, 39, 189, 48, 149, 166, 176, 2, 142, 185, 231, 239, 49, 188, 234, 77, 213, 99, 249, 169, 165, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 161, 9, 101, 41, 141, 182, 162, 241, 58, 129, 177, 37, 233, 97, 163, 43, 24, 254, 34, 49, 165, 94, 36, 47, 19, 32, 85, 162, 190, 153, 183, 204, 91, 79, 45, 72, 26, 19, 197, 179, 246, 241, 27, 141, 177, 9, 8, 140, 112, 212, 5, 197, 86, 2, 170, 125, 179, 138, 240, 204, 99, 59, 190, 113, 181, 166, 159, 40, 154, 81, 12, 141, 122, 185, 220, 203, 22, 82, 105, 146, 52, 118, 16, 10, 99, 183, 103, 18, 170, 142, 204, 49, 73, 250, 61, 243, 85, 203, 17, 170, 133, 171, 179, 237, 163, 131, 150, 71, 171, 120, 213, 3, 147, 138, 223, 171, 235, 51, 5, 155, 19, 241, 253, 152, 19, 44, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 211, 170, 226, 44, 181, 208, 68, 143, 94, 85, 229, 211, 16, 23, 219, 94, 35, 159, 63, 208, 207, 7, 189, 254, 207, 38, 6, 105, 92, 104, 73, 219, 191, 108, 99, 60, 49, 42, 4, 245, 158, 239, 131, 42, 206, 187, 214, 73, 138, 59, 85, 54, 100, 38, 133, 182, 157, 187, 150, 4, 78, 120, 22, 119, 91, 52, 156, 127, 9, 93, 6, 172, 209, 114, 249, 190, 67, 235, 169, 133, 125, 66, 214, 234, 146, 219, 149, 193, 150, 35, 56, 98, 38, 233, 125, 89, 73, 146, 230, 47, 159, 52, 31, 23, 164, 103, 250, 228, 57, 25, 2, 219, 56, 122, 58, 190, 232, 120, 205, 35, 25, 76, 182, 69, 137, 27, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; FormatTransferFractalZz transfer; TransArgs args{ reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 3, 4, 33}, {2, 3, 1, 2, 32, 32}, DT_UINT8}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0])); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{ reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 3, 1, 2, 32, 32}, {2, 3, 4, 33}, DT_UINT8}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0])); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape1_fp16_1) { uint16_t data[1] = {14805}; uint16_t ret[1 * 1 * 16 * 16] = { 14805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; FormatTransferFractalZz transfer; TransArgs args{reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {1}, {1, 1, 16, 16}, DT_FLOAT16}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 16, 16}, {1}, DT_FLOAT16}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape1_fp16_2) { uint16_t data[15] = { 13976, 13979, 13424, 13692, 14268, 13703, 14220, 13135, 13693, 13965, 12067, 14261, 14716, 14975, 13763, }; uint16_t ret[1 * 1 * 16 * 16] = { 13976, 13979, 13424, 13692, 14268, 13703, 14220, 13135, 13693, 13965, 12067, 14261, 14716, 14975, 13763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; FormatTransferFractalZz transfer; TransArgs args{reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {15}, {1, 1, 16, 16}, DT_FLOAT16}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 16, 16}, {15}, DT_FLOAT16}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape2_fp16_lt_cube) { uint16_t data[1 * 16] = { 15300, 13152, 14880, 15296, 14710, 13100, 13380, 15207, 15273, 13920, 14607, 13777, 14943, 14517, 15138, 15198, }; uint16_t ret[1 * 1 * 16 * 16] = { 15300, 13152, 14880, 15296, 14710, 13100, 13380, 15207, 15273, 13920, 14607, 13777, 14943, 14517, 15138, 15198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; FormatTransferFractalZz transfer; TransArgs args{reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {1, 16}, {1, 1, 16, 16}, DT_FLOAT16}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 16, 16}, {1, 16}, DT_FLOAT16}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape2_fp16_bt_cube) { uint16_t data[15 * 17] = { 13136, 13938, 13692, 14295, 15066, 15291, 14157, 14975, 14355, 15311, 12473, 13320, 13125, 13649, 13016, 15193, 11689, 13992, 13147, 15051, 14496, 11768, 15080, 14341, 14215, 12872, 12580, 14679, 14670, 15058, 11421, 12526, 14768, 14792, 13796, 14983, 15175, 14399, 14858, 12314, 11303, 15151, 14493, 15153, 14328, 13337, 11597, 14341, 14482, 14325, 13750, 12838, 12433, 13391, 14811, 15346, 13415, 14518, 13790, 14547, 10431, 14110, 15298, 14310, 12360, 12432, 13530, 14788, 11648, 13664, 14697, 14219, 13649, 14621, 14898, 14588, 13875, 14302, 14599, 14620, 14884, 14977, 14728, 14506, 14855, 15326, 13580, 14575, 14426, 15284, 12298, 13859, 13743, 14833, 15096, 10690, 13315, 13237, 13799, 14673, 13948, 14728, 13372, 15186, 15013, 14558, 15144, 14004, 14390, 14773, 14941, 15133, 14678, 13959, 12531, 13905, 12597, 14344, 14513, 11837, 13348, 14198, 14936, 15120, 13568, 12183, 13921, 14910, 13254, 11297, 14298, 14729, 12965, 13326, 15005, 13947, 15095, 12504, 14994, 15355, 14176, 12754, 13388, 14572, 13598, 15154, 14542, 2456, 13328, 14108, 12614, 14357, 14524, 14887, 14628, 14856, 14437, 14022, 14686, 10009, 12263, 14832, 14516, 14331, 14472, 14569, 12931, 14562, 14404, 14582, 14079, 14079, 11643, 12625, 13684, 12119, 14728, 14379, 14513, 14384, 14791, 7282, 10282, 14394, 14584, 12495, 15004, 8552, 13711, 15079, 14360, 12401, 14452, 12655, 14601, 11849, 14306, 13585, 10584, 14535, 11525, 14830, 13127, 13605, 13200, 14650, 13011, 12334, 14387, 14501, 12816, 14917, 13389, 14660, 14716, 13227, 13387, 14959, 13128, 7764, 13873, 13452, 14378, 13317, 14482, 13781, 11235, 12167, 15153, 14285, 13952, 14930, 15093, 14145, 14392, 15038, 14442, 13980, 14247, 12048, 14542, 15012, 12545, 13550, 9689, 14928, 13519, 14253, 15310, 4717, 14838, 15210, 14477, 14316, 12144, }; uint16_t ret[1 * 2 * 16 * 16] = { 13136, 13938, 13692, 14295, 15066, 15291, 14157, 14975, 14355, 15311, 12473, 13320, 13125, 13649, 13016, 15193, 13992, 13147, 15051, 14496, 11768, 15080, 14341, 14215, 12872, 12580, 14679, 14670, 15058, 11421, 12526, 14768, 13796, 14983, 15175, 14399, 14858, 12314, 11303, 15151, 14493, 15153, 14328, 13337, 11597, 14341, 14482, 14325, 12838, 12433, 13391, 14811, 15346, 13415, 14518, 13790, 14547, 10431, 14110, 15298, 14310, 12360, 12432, 13530, 11648, 13664, 14697, 14219, 13649, 14621, 14898, 14588, 13875, 14302, 14599, 14620, 14884, 14977, 14728, 14506, 15326, 13580, 14575, 14426, 15284, 12298, 13859, 13743, 14833, 15096, 10690, 13315, 13237, 13799, 14673, 13948, 13372, 15186, 15013, 14558, 15144, 14004, 14390, 14773, 14941, 15133, 14678, 13959, 12531, 13905, 12597, 14344, 11837, 13348, 14198, 14936, 15120, 13568, 12183, 13921, 14910, 13254, 11297, 14298, 14729, 12965, 13326, 15005, 15095, 12504, 14994, 15355, 14176, 12754, 13388, 14572, 13598, 15154, 14542, 2456, 13328, 14108, 12614, 14357, 14887, 14628, 14856, 14437, 14022, 14686, 10009, 12263, 14832, 14516, 14331, 14472, 14569, 12931, 14562, 14404, 14079, 14079, 11643, 12625, 13684, 12119, 14728, 14379, 14513, 14384, 14791, 7282, 10282, 14394, 14584, 12495, 8552, 13711, 15079, 14360, 12401, 14452, 12655, 14601, 11849, 14306, 13585, 10584, 14535, 11525, 14830, 13127, 13200, 14650, 13011, 12334, 14387, 14501, 12816, 14917, 13389, 14660, 14716, 13227, 13387, 14959, 13128, 7764, 13452, 14378, 13317, 14482, 13781, 11235, 12167, 15153, 14285, 13952, 14930, 15093, 14145, 14392, 15038, 14442, 14247, 12048, 14542, 15012, 12545, 13550, 9689, 14928, 13519, 14253, 15310, 4717, 14838, 15210, 14477, 14316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13873, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; FormatTransferFractalZz transfer; TransArgs args{reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {15, 17}, {1, 2, 16, 16}, DT_FLOAT16}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 2, 16, 16}, {15, 17}, DT_FLOAT16}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape3_fp16) { uint16_t data[2 * 4 * 17] = { 14356, 14196, 13985, 15033, 14593, 13229, 15318, 14470, 14100, 14818, 14847, 14989, 13011, 14733, 10638, 12097, 15335, 10990, 14628, 14757, 15124, 14145, 10114, 14396, 15245, 14402, 15193, 11308, 14658, 14565, 15185, 14891, 15020, 13353, 15346, 13820, 11782, 14436, 11308, 12817, 13936, 15058, 14104, 13169, 13833, 15175, 9882, 11003, 15219, 14533, 14894, 13845, 8417, 15160, 13856, 15086, 14683, 15158, 14653, 13931, 14588, 13947, 15046, 14568, 12336, 15339, 14343, 8727, 13185, 14113, 14384, 13943, 15189, 15323, 12386, 13539, 14971, 12917, 12787, 13738, 11293, 14121, 14757, 15202, 14586, 12485, 14816, 14622, 14352, 14774, 12407, 14750, 14368, 14650, 14876, 15086, 14808, 13749, 13358, 14550, 14031, 13210, 15228, 8667, 14913, 15138, 14055, 14865, 15290, 14167, 13875, 14433, 15156, 13546, 15023, 13825, 14349, 13734, 14023, 14934, 11822, 14858, 14871, 13453, 14480, 13670, 13346, 11262, 15088, 13484, 15274, 13007, 12458, 13530, 14978, 15155, }; uint16_t ret[2 * 1 * 2 * 16 * 16] = { 14356, 14196, 13985, 15033, 14593, 13229, 15318, 14470, 14100, 14818, 14847, 14989, 13011, 14733, 10638, 12097, 10990, 14628, 14757, 15124, 14145, 10114, 14396, 15245, 14402, 15193, 11308, 14658, 14565, 15185, 14891, 15020, 15346, 13820, 11782, 14436, 11308, 12817, 13936, 15058, 14104, 13169, 13833, 15175, 9882, 11003, 15219, 14533, 13845, 8417, 15160, 13856, 15086, 14683, 15158, 14653, 13931, 14588, 13947, 15046, 14568, 12336, 15339, 14343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13185, 14113, 14384, 13943, 15189, 15323, 12386, 13539, 14971, 12917, 12787, 13738, 11293, 14121, 14757, 15202, 12485, 14816, 14622, 14352, 14774, 12407, 14750, 14368, 14650, 14876, 15086, 14808, 13749, 13358, 14550, 14031, 15228, 8667, 14913, 15138, 14055, 14865, 15290, 14167, 13875, 14433, 15156, 13546, 15023, 13825, 14349, 13734, 14934, 11822, 14858, 14871, 13453, 14480, 13670, 13346, 11262, 15088, 13484, 15274, 13007, 12458, 13530, 14978, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; FormatTransferFractalZz transfer; TransArgs args{ reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 4, 17}, {2, 1, 2, 16, 16}, DT_FLOAT16}; TransResult result; EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } FormatTransferFractalZzND transfer2; TransArgs args2{ reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 1, 2, 16, 16}, {2, 4, 17}, DT_FLOAT16}; TransResult result2; EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape4_fp16_1) { uint16_t data[1 * 1 * 17 * 4] = { 15326, 14638, 15204, 11500, 13867, 13869, 14727, 13806, 14006, 13821, 14019, 14505, 11796, 11517, 14469, 13619, 14439, 14777, 14089, 14677, 13678, 15328, 11413, 14218, 14677, 14790, 13502, 13417, 14288, 14807, 13460, 14627, 14607, 12875, 13632, 13706, 14012, 14699, 12040, 13948, 14099, 13854, 11998, 14920, 14080, 13218, 10556, 15298, 15131, 14444, 10388, 15036, 13989, 14702, 14443, 14180, 14565, 12548, 15124, 14783, 13679, 14072, 13832, 13606, 11777, 11673, 14339, 13487, }; uint16_t ret[1 * 1 * 2 * 1 * 16 * 16] = { 15326, 14638, 15204, 11500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13867, 13869, 14727, 13806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14006, 13821, 14019, 14505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11796, 11517, 14469, 13619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14439, 14777, 14089, 14677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13678, 15328, 11413, 14218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14677, 14790, 13502, 13417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14288, 14807, 13460, 14627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14607, 12875, 13632, 13706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14012, 14699, 12040, 13948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14099, 13854, 11998, 14920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14080, 13218, 10556, 15298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15131, 14444, 10388, 15036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13989, 14702, 14443, 14180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14565, 12548, 15124, 14783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13679, 14072, 13832, 13606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11777, 11673, 14339, 13487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; TransArgs args{ reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {1, 1, 17, 4}, {1, 1, 2, 1, 16, 16}, DT_FLOAT16}; TransResult result; FormatTransferFractalZz transfer; EXPECT_EQ(TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), SUCCESS); TransArgs args2{ reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 2, 1, 16, 16}, {1, 1, 17, 4}, DT_FLOAT16}; TransResult result2; FormatTransferFractalZzND transfer2; EXPECT_EQ(TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } EXPECT_EQ( transfer2.TransShape(args2.src_format, args2.src_shape, args2.src_data_type, args2.dst_format, args2.dst_shape), UNSUPPORTED); } TEST_F(UtestFormatTransferNdFractZz, nd_shape4_fp16) { uint16_t data[2 * 2 * 17 * 4] = { 13717, 14633, 13393, 15273, 14219, 14977, 15129, 15049, 15185, 14727, 14121, 13586, 10579, 15226, 15260, 11991, 15078, 14415, 14178, 15075, 12726, 14277, 10874, 9451, 12911, 11791, 15013, 12924, 15180, 13784, 7774, 15348, 14477, 14247, 14523, 15246, 14223, 14805, 14335, 12387, 9019, 15012, 15220, 15254, 11593, 13539, 14436, 14677, 12538, 13629, 15131, 14448, 13915, 12483, 14604, 7842, 14802, 14612, 15327, 12582, 13820, 14096, 12041, 15051, 14481, 14387, 14791, 11639, 14035, 14968, 15245, 13959, 15076, 14043, 15351, 13718, 14065, 11168, 14670, 13385, 14415, 10126, 14327, 12871, 13278, 14263, 13842, 13420, 14813, 15179, 15201, 12669, 10909, 13404, 15012, 14775, 14167, 14296, 14659, 14999, 8257, 15345, 11292, 14284, 14388, 14215, 14899, 13700, 15117, 11280, 14407, 15226, 14659, 14238, 9645, 14763, 14259, 11179, 14093, 15064, 14546, 10329, 14517, 11502, 11346, 14389, 15343, 13370, 15305, 14455, 15170, 12374, 15135, 13232, 11257, 13393, 13192, 14629, 13648, 15159, 14576, 13830, 14427, 14739, 12837, 13978, 14633, 15185, 14971, 11183, 15123, 14586, 12630, 14836, 14897, 13545, 14842, 14514, 14407, 12336, 15142, 15291, 14817, 13495, 15149, 15219, 15302, 14088, 9507, 12779, 14672, 12172, 14361, 9038, 10286, 11767, 11743, 14965, 14847, 14598, 14362, 13553, 14834, 15149, 15325, 14845, 13870, 15102, 14942, 15359, 14904, 15034, 9360, 13457, 13630, 12647, 13767, 15264, 13700, 12651, 14721, 14055, 15035, 14461, 13251, 13468, 15235, 14382, 14905, 14092, 12383, 14141, 15303, 12123, 14006, 14228, 15136, 13119, 14391, 14624, 13095, 14981, 14994, 12624, 14894, 12580, 13922, 15265, 12878, 14602, 14165, 14303, 11757, 15331, 15343, 15149, 13209, 11594, 15247, 14459, 13118, 12868, 13982, 11374, 13367, 14585, 13846, 15319, 14810, 13662, 12718, 13320, 14489, 12071, 13509, 15225, 14608, 14576, 13899, 14718, 14972, 13522, 12321, 11909, 13750, 14365, 14762, 14729, 12767, 14197, 13849, 12160, }; uint16_t ret[2 * 2 * 2 * 1 * 16 * 16] = { 13717, 14633, 13393, 15273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14219, 14977, 15129, 15049, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15185, 14727, 14121, 13586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10579, 15226, 15260, 11991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15078, 14415, 14178, 15075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12726, 14277, 10874, 9451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12911, 11791, 15013, 12924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15180, 13784, 7774, 15348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14477, 14247, 14523, 15246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14223, 14805, 14335, 12387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9019, 15012, 15220, 15254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11593, 13539, 14436, 14677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12538, 13629, 15131, 14448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13915, 12483, 14604, 7842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14802, 14612, 15327, 12582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13820, 14096, 12041, 15051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14481, 14387, 14791, 11639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14035, 14968, 15245, 13959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15076, 14043, 15351, 13718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14065, 11168, 14670, 13385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14415, 10126, 14327, 12871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13278, 14263, 13842, 13420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14813, 15179, 15201, 12669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10909, 13404, 15012, 14775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14167, 14296, 14659, 14999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8257, 15345, 11292, 14284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14388, 14215, 14899, 13700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15117, 11280, 14407, 15226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14659, 14238, 9645, 14763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14259, 11179, 14093, 15064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14546, 10329, 14517, 11502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11346, 14389, 15343, 13370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15305, 14455, 15170, 12374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15135, 13232, 11257, 13393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13192, 14629, 13648, 15159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14576, 13830, 14427, 14739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12837, 13978, 14633, 15185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14971, 11183, 15123, 14586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12630, 14836, 14897, 13545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14842, 14514, 14407, 12336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15142, 15291, 14817, 13495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15149, 15219, 15302, 14088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9507, 12779, 14672, 12172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14361, 9038, 10286, 11767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11743, 14965, 14847, 14598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14362, 13553, 14834, 15149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15325, 14845, 13870, 15102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14942, 15359, 14904, 15034, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9360, 13457, 13630, 12647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13767, 15264, 13700, 12651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14721, 14055, 15035, 14461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13251, 13468, 15235, 14382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14905, 14092, 12383, 14141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15303, 12123, 14006, 14228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15136, 13119, 14391, 14624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13095, 14981, 14994, 12624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14894, 12580, 13922, 15265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12878, 14602, 14165, 14303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11757, 15331, 15343, 15149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13209, 11594, 15247, 14459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13118, 12868, 13982, 11374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13367, 14585, 13846, 15319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14810, 13662, 12718, 13320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14489, 12071, 13509, 15225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14608, 14576, 13899, 14718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14972, 13522, 12321, 11909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13750, 14365, 14762, 14729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12767, 14197, 13849, 12160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; TransArgs args{ reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 2, 17, 4}, {2, 2, 2, 1, 16, 16}, DT_FLOAT16}; TransResult result; FormatTransferFractalZz transfer; EXPECT_EQ(TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), SUCCESS); TransArgs args2{ reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 2, 2, 1, 16, 16}, {2, 2, 17, 4}, DT_FLOAT16}; TransResult result2; FormatTransferFractalZzND transfer2; EXPECT_EQ(TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } EXPECT_EQ( transfer2.TransShape(args2.src_format, args2.src_shape, args2.src_data_type, args2.dst_format, args2.dst_shape), UNSUPPORTED); } TEST_F(UtestFormatTransferNdFractZz, nd_shape5_fp16) { uint16_t data[2 * 3 * 2 * 3 * 17] = { 13832, 14161, 15182, 12654, 14878, 12188, 14405, 14401, 14635, 14215, 15223, 14238, 15133, 11718, 15331, 14338, 15265, 15194, 15288, 13191, 14573, 14512, 14999, 13420, 12967, 14867, 13486, 14285, 11731, 15012, 15185, 14578, 14604, 14930, 15339, 14672, 14361, 14595, 13897, 13702, 14738, 14940, 15055, 10452, 13759, 14578, 12756, 14084, 14632, 10550, 14379, 13063, 15277, 12710, 13758, 14430, 14032, 12959, 12610, 14780, 15077, 14376, 14767, 14531, 12999, 14750, 14625, 14733, 13516, 14989, 14483, 13888, 14280, 14438, 15054, 14699, 11164, 14506, 9849, 14973, 14036, 12835, 14942, 15314, 11479, 14805, 13564, 14216, 14489, 12263, 12317, 14394, 15330, 14865, 15101, 13487, 14978, 14717, 14730, 9234, 14369, 12551, 13386, 14797, 15142, 14638, 13065, 14524, 14501, 14516, 15074, 9012, 14343, 11870, 15004, 14822, 13897, 13746, 14365, 12776, 13974, 11111, 14798, 14519, 11743, 13554, 15174, 14761, 13111, 15119, 13462, 13807, 13867, 13672, 8661, 14533, 12666, 12279, 13297, 14739, 13949, 14644, 15039, 14740, 14543, 15101, 14416, 13802, 13635, 14776, 14331, 14353, 14947, 14299, 12744, 15291, 14536, 11738, 14455, 15308, 15266, 13019, 13572, 11926, 15082, 14224, 9462, 13668, 14824, 12329, 12870, 14772, 14834, 11708, 15172, 14120, 13451, 15360, 13950, 13965, 13200, 10682, 13446, 13298, 15052, 14316, 13322, 15079, 14510, 15047, 15209, 12569, 14585, 14428, 11620, 14371, 15045, 14808, 14919, 14586, 14743, 14510, 12366, 12928, 14632, 13414, 13375, 14798, 13449, 13741, 14342, 15150, 14384, 15197, 14590, 13859, 14973, 15093, 13743, 12435, 15349, 15007, 12547, 15053, 14896, 15134, 14397, 14418, 13524, 14763, 13316, 12556, 15102, 15036, 12881, 13259, 14450, 14956, 13726, 12271, 14861, 12837, 14857, 13393, 13747, 14731, 14557, 10441, 15208, 12014, 14473, 14014, 13970, 13328, 15348, 15291, 15250, 13773, 14774, 14388, 14110, 12128, 13446, 13528, 13884, 11343, 15344, 15110, 13023, 11379, 10818, 14879, 13726, 14487, 15089, 14818, 15154, 14075, 15287, 14476, 14361, 14792, 14905, 14017, 14056, 12394, 14860, 14831, 15246, 9459, 14900, 14641, 11659, 15087, 15043, 12976, 15048, 14800, 14994, 15204, 9229, 14139, 12185, 15170, 11514, 14916, 14476, 9861, 14664, 13726, 13386, 15268, 14659, 15240, 14942, 15287, 14214, 15340, 12256, 12964, 12739, 14755, 14766, 13935, 11940, 12670, 14601, 11843, 14484, 15131, 14896, 14675, 15174, 10600, 13778, 12872, 11877, 14065, 12621, 14708, 15078, 15146, 12562, 15177, 14771, 14191, 15296, 14136, 14995, 14103, 14462, 13363, 14599, 15154, 14747, 11554, 15275, 14737, 14484, 11567, 12337, 11946, 15254, 11493, 14168, 14868, 15090, 13811, 14064, 14996, 15243, 14645, 15240, 14774, 13726, 12929, 14818, 14524, 13709, 14709, 12375, 14916, 13434, 14960, 13966, 14502, 14232, 15030, 15145, 15174, 13891, 13952, 14401, 12912, 13329, 15200, 14691, 13676, 14057, 11970, 15359, 14434, 14461, 14734, 14446, 14236, 12909, 13688, 8230, 14875, 15305, 13715, 14729, 13571, 14578, 13491, 15049, 12556, 14350, 14044, 13558, 14617, 13512, 15214, 14461, 11904, 14929, 14996, 13421, 14285, 12716, 13199, 14107, 13368, 15012, 15150, 13428, 13113, 12456, 14275, 14909, 13438, 14050, 13672, 14489, 11595, 14776, 14038, 14285, 12346, 13721, 12983, 13332, 14940, 13479, 14683, 13765, 15125, 13420, 14035, 9788, 15254, 15200, 14645, 13748, 14510, 15293, 14706, 14444, 14586, 14786, 10598, 14997, 14358, 15144, 13528, 7493, 10094, 11973, 12700, 14358, 12935, 12858, 14628, 13953, 13500, 14436, 14342, 15329, 14811, 11681, 13516, 12939, 15358, 12927, 14526, 8919, 9601, 15163, 12303, 9854, 14850, 14704, 14548, 12500, 13563, 14251, 14267, 14862, 14164, 14370, 13450, 14482, 14247, 13076, 14777, 13678, 12668, 14488, 8794, 13883, 13602, 10705, 12641, 13569, 13477, 15042, 15269, 14449, 14489, 14341, 14127, 14554, 11366, 15130, 13479, 13384, 14574, 11501, 9470, 15122, 14179, 14480, 13224, 12376, 14420, 14469, 14920, 12054, 7632, 14994, 13384, 11545, 15233, 14744, 14554, 14136, 13251, 14072, 13863, 13176, 12532, 11110, 15262, 14771, 15191, 14622, 14752, 12759, 15150, 14699, 14797, 13573, 13782, 12854, 14870, 13485, 15242, 14253, 14472, 14578, 14140, 12008, 14335, 11901, 14540, 14607, 15197, 13362, 14992, 14699, 14469, 15065, 14702, 15180, 12374, 11178, 14562, 14063, 14387, 14358, 12712, 14251, 15251, 14755, 10911, 14955, 14890, 15255, 12943, 14027, 14621, }; uint16_t ret[2 * 3 * 2 * 1 * 2 * 16 * 16] = { 13832, 14161, 15182, 12654, 14878, 12188, 14405, 14401, 14635, 14215, 15223, 14238, 15133, 11718, 15331, 14338, 15194, 15288, 13191, 14573, 14512, 14999, 13420, 12967, 14867, 13486, 14285, 11731, 15012, 15185, 14578, 14604, 15339, 14672, 14361, 14595, 13897, 13702, 14738, 14940, 15055, 10452, 13759, 14578, 12756, 14084, 14632, 10550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13063, 15277, 12710, 13758, 14430, 14032, 12959, 12610, 14780, 15077, 14376, 14767, 14531, 12999, 14750, 14625, 13516, 14989, 14483, 13888, 14280, 14438, 15054, 14699, 11164, 14506, 9849, 14973, 14036, 12835, 14942, 15314, 14805, 13564, 14216, 14489, 12263, 12317, 14394, 15330, 14865, 15101, 13487, 14978, 14717, 14730, 9234, 14369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13386, 14797, 15142, 14638, 13065, 14524, 14501, 14516, 15074, 9012, 14343, 11870, 15004, 14822, 13897, 13746, 12776, 13974, 11111, 14798, 14519, 11743, 13554, 15174, 14761, 13111, 15119, 13462, 13807, 13867, 13672, 8661, 12666, 12279, 13297, 14739, 13949, 14644, 15039, 14740, 14543, 15101, 14416, 13802, 13635, 14776, 14331, 14353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14299, 12744, 15291, 14536, 11738, 14455, 15308, 15266, 13019, 13572, 11926, 15082, 14224, 9462, 13668, 14824, 12870, 14772, 14834, 11708, 15172, 14120, 13451, 15360, 13950, 13965, 13200, 10682, 13446, 13298, 15052, 14316, 15079, 14510, 15047, 15209, 12569, 14585, 14428, 11620, 14371, 15045, 14808, 14919, 14586, 14743, 14510, 12366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14632, 13414, 13375, 14798, 13449, 13741, 14342, 15150, 14384, 15197, 14590, 13859, 14973, 15093, 13743, 12435, 15007, 12547, 15053, 14896, 15134, 14397, 14418, 13524, 14763, 13316, 12556, 15102, 15036, 12881, 13259, 14450, 13726, 12271, 14861, 12837, 14857, 13393, 13747, 14731, 14557, 10441, 15208, 12014, 14473, 14014, 13970, 13328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15291, 15250, 13773, 14774, 14388, 14110, 12128, 13446, 13528, 13884, 11343, 15344, 15110, 13023, 11379, 10818, 13726, 14487, 15089, 14818, 15154, 14075, 15287, 14476, 14361, 14792, 14905, 14017, 14056, 12394, 14860, 14831, 9459, 14900, 14641, 11659, 15087, 15043, 12976, 15048, 14800, 14994, 15204, 9229, 14139, 12185, 15170, 11514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14476, 9861, 14664, 13726, 13386, 15268, 14659, 15240, 14942, 15287, 14214, 15340, 12256, 12964, 12739, 14755, 13935, 11940, 12670, 14601, 11843, 14484, 15131, 14896, 14675, 15174, 10600, 13778, 12872, 11877, 14065, 12621, 15078, 15146, 12562, 15177, 14771, 14191, 15296, 14136, 14995, 14103, 14462, 13363, 14599, 15154, 14747, 11554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14737, 14484, 11567, 12337, 11946, 15254, 11493, 14168, 14868, 15090, 13811, 14064, 14996, 15243, 14645, 15240, 13726, 12929, 14818, 14524, 13709, 14709, 12375, 14916, 13434, 14960, 13966, 14502, 14232, 15030, 15145, 15174, 13952, 14401, 12912, 13329, 15200, 14691, 13676, 14057, 11970, 15359, 14434, 14461, 14734, 14446, 14236, 12909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8230, 14875, 15305, 13715, 14729, 13571, 14578, 13491, 15049, 12556, 14350, 14044, 13558, 14617, 13512, 15214, 11904, 14929, 14996, 13421, 14285, 12716, 13199, 14107, 13368, 15012, 15150, 13428, 13113, 12456, 14275, 14909, 14050, 13672, 14489, 11595, 14776, 14038, 14285, 12346, 13721, 12983, 13332, 14940, 13479, 14683, 13765, 15125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14035, 9788, 15254, 15200, 14645, 13748, 14510, 15293, 14706, 14444, 14586, 14786, 10598, 14997, 14358, 15144, 7493, 10094, 11973, 12700, 14358, 12935, 12858, 14628, 13953, 13500, 14436, 14342, 15329, 14811, 11681, 13516, 15358, 12927, 14526, 8919, 9601, 15163, 12303, 9854, 14850, 14704, 14548, 12500, 13563, 14251, 14267, 14862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14370, 13450, 14482, 14247, 13076, 14777, 13678, 12668, 14488, 8794, 13883, 13602, 10705, 12641, 13569, 13477, 15269, 14449, 14489, 14341, 14127, 14554, 11366, 15130, 13479, 13384, 14574, 11501, 9470, 15122, 14179, 14480, 12376, 14420, 14469, 14920, 12054, 7632, 14994, 13384, 11545, 15233, 14744, 14554, 14136, 13251, 14072, 13863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12532, 11110, 15262, 14771, 15191, 14622, 14752, 12759, 15150, 14699, 14797, 13573, 13782, 12854, 14870, 13485, 14253, 14472, 14578, 14140, 12008, 14335, 11901, 14540, 14607, 15197, 13362, 14992, 14699, 14469, 15065, 14702, 12374, 11178, 14562, 14063, 14387, 14358, 12712, 14251, 15251, 14755, 10911, 14955, 14890, 15255, 12943, 14027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; TransArgs args{reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 3, 2, 3, 17}, {2, 3, 2, 1, 2, 16, 16}, DT_FLOAT16}; TransResult result; FormatTransferFractalZz transfer; EXPECT_EQ(TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), SUCCESS); TransArgs args2{reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 3, 2, 1, 2, 16, 16}, {2, 3, 2, 3, 17}, DT_FLOAT16}; TransResult result2; FormatTransferFractalZzND transfer2; EXPECT_EQ(TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nd_shape4_fp32) { float data[2 * 2 * 4 * 17] = { 0.48734783127746584, 0.15190233146679444, 0.6309953031435181, 0.6571782855267494, 0.18640007179772766, 0.8708466062957234, 0.8354796070795485, 0.5937101170057715, 0.20286466757490806, 0.7236210224379754, 0.5133016305159891, 0.30759221385705016, 0.8034168117461314, 0.8396583387580794, 0.6499070393851767, 0.8144802952530074, 0.5948098768034782, 0.5950270148901504, 0.06571103810980217, 0.04113537524070798, 0.850404641124823, 0.9948419071548489, 0.6215161021063617, 0.16249192772658316, 0.5050913431975846, 0.7937775887578682, 0.028831707551000396, 0.28325013514723507, 0.8211410723546999, 0.7176669570041827, 0.6588421729934614, 0.16841110318562091, 0.7095162395962725, 0.39576308638615343, 0.10528222016675215, 0.43028024321798863, 0.044868717722925666, 0.8408329229287285, 0.931315710167798, 0.5383338657309856, 0.7474342292121668, 0.6531557890786839, 0.7071920439731455, 0.10085996724687896, 0.21146039946088158, 0.3211131278764192, 0.921636927547933, 0.9981429184367644, 0.09662709007192716, 0.4734277260159877, 0.835128648845281, 0.9867914228220531, 0.4415437181821612, 0.45416217225683975, 0.27983653489892013, 0.7609050274817578, 0.23017630407947565, 0.7702388069981185, 0.2477211058028833, 0.8261031804962897, 0.4877356097679747, 0.8602972626219345, 0.7063671926943388, 0.4048930504139826, 0.7880778896294389, 0.5829037833793927, 0.6209757776523838, 0.6085773554247663, 0.4679223140485166, 0.027438781009462065, 0.3716878195231198, 0.0199579978088682, 0.36102038094904887, 0.6431222830463951, 0.34741587153320386, 0.22603314514462725, 0.5067781241362863, 0.8342422249794591, 0.26646178333204906, 0.6759305818665823, 0.6690347797724682, 0.7929141594499515, 0.4097471168728528, 0.9675174260723787, 0.3525636088638997, 0.8824227903662591, 0.004340246025094863, 0.5813145980752394, 0.5704711233756934, 0.8954523668644979, 0.6484554011109014, 0.17555592535956188, 0.5157569568469266, 0.8812349707210847, 0.812251544084032, 0.8656711072891791, 0.8172850573004784, 0.5949828072747959, 0.9049741100221382, 0.8879859467554044, 0.8313146429660512, 0.0457129718803142, 0.4065258282791677, 0.15727897761125864, 0.3484205075303167, 0.20316484509187538, 0.040710637233631664, 0.9422636673185534, 0.0668039513759997, 0.5166874092345884, 0.28992632700217513, 0.45448621751855833, 0.8428703807764792, 0.8095396267374237, 0.9405578679861039, 0.6690338086676076, 0.6856661561482512, 0.509377133767494, 0.18949568385264326, 0.746092919110688, 0.718560590882892, 0.19987548889823148, 0.5985766244393099, 0.3892282635563432, 0.042174527314988386, 0.28834424048937324, 0.5647006422391396, 0.10768865385191584, 0.6680480168326073, 0.48502265172153936, 0.20107347266422226, 0.06700154189232066, 0.2583110319336359, 0.14494240789279178, 0.214153857788978, 0.9730538073350009, 0.7358124562940163, 0.9023289319229876, 0.5584131484343305, 0.7165017329880333, 0.5698554353567142, 0.8659927309025036, 0.4755112121320433, 0.3580491896897282, 0.7820043061394484, 0.3875849451386024, 0.6442406157037353, 0.9250353474149741, 0.8698903846139167, 0.25516670302899325, 0.34742866403193917, 0.5540345282385027, 0.1249381619067389, 0.6511396228200564, 0.0518584845004707, 0.47687327587566675, 0.7391090941667979, 0.050741858095834425, 0.3565270757329517, 0.42851750996605265, 0.5294163914194764, 0.7398537176473816, 0.9078831020615753, 0.1572735298694834, 0.09459429130511421, 0.3617954816433758, 0.3029217652293019, 0.5997775212822984, 0.248580737678893, 0.9543674249350337, 0.954451145757734, 0.1962316838207071, 0.6745526891253325, 0.88651822532634, 0.9624023505476093, 0.8682513367267045, 0.5281261201765712, 0.15965941469601175, 0.4441328893966944, 0.2923804418476723, 0.06490779221949527, 0.0017403590798413804, 0.8520009823265204, 0.44971843937991374, 0.3386034163640277, 0.7702096738809434, 0.7334994568530535, 0.8830585641425194, 0.6618970151878655, 0.4848376040578781, 0.5049250727515491, 0.5785873080885714, 0.9952698162199863, 0.43430072374659, 0.6188847870072389, 0.7581591778750364, 0.6383739016829548, 0.7567651057215206, 0.7513738640734398, 0.49253050728145975, 0.8139147833902005, 0.14316930311349307, 0.5945922505817162, 0.6035610085176568, 0.9930256611842178, 0.5403654583619014, 0.8979267433404176, 0.28173125276394995, 0.3467577704282401, 0.23380875880551844, 0.7134712817327136, 0.7883287163765654, 0.7846645621192855, 0.3189860693282949, 0.8804937197162858, 0.7337066619168504, 0.37284629923791457, 0.3537077448212921, 0.16015819664911035, 0.555665025454486, 0.27860376850661894, 0.8312480037258619, 0.19232821858251292, 0.9001473519318394, 0.5047301751313313, 0.38814468343949315, 0.39857403311434425, 0.1371117310249017, 0.6115736287886191, 0.3291784075711639, 0.0050888243214743945, 0.28200919754529385, 0.757181510166513, 0.3924420485744937, 0.3675296019027998, 0.5701179208189977, 0.11717175159145532, 0.8646010844866165, 0.32028644383186755, 0.7555585921315293, 0.8421362025797383, 0.014565912419013505, 0.1192955679481531, 0.19321039675423968, 0.2792456334803882, 0.6943539216498176, 0.22242515779974714, 0.0312889230468939, 0.5201858645943402, 0.3820715745426422, 0.915240687220273, 0.5018375488170763, 0.4544010301976812, 0.10290809465603667, 0.9988616579631764, 0.4639631681412365, 0.36800589920527194, 0.02608047026799898, 0.3907130363579898, 0.22964761662220634, 0.36479183564369644, 0.8837663008817578, 0.8767224380658272, 0.09642232491729474, 0.37809846987796636, 0.8852159908183284, 0.30341830122754354, 0.7551325894584977, 0.5477351512879798, 0.05477218246488447, 0.5564337547416925, 0.8988484613080273, }; float ret[2 * 2 * 1 * 2 * 16 * 16] = { 0.48734783127746584, 0.15190233146679444, 0.6309953031435181, 0.6571782855267494, 0.18640007179772766, 0.8708466062957234, 0.8354796070795485, 0.5937101170057715, 0.20286466757490806, 0.7236210224379754, 0.5133016305159891, 0.30759221385705016, 0.8034168117461314, 0.8396583387580794, 0.6499070393851767, 0.8144802952530074, 0.5950270148901504, 0.06571103810980217, 0.04113537524070798, 0.850404641124823, 0.9948419071548489, 0.6215161021063617, 0.16249192772658316, 0.5050913431975846, 0.7937775887578682, 0.028831707551000396, 0.28325013514723507, 0.8211410723546999, 0.7176669570041827, 0.6588421729934614, 0.16841110318562091, 0.7095162395962725, 0.10528222016675215, 0.43028024321798863, 0.044868717722925666, 0.8408329229287285, 0.931315710167798, 0.5383338657309856, 0.7474342292121668, 0.6531557890786839, 0.7071920439731455, 0.10085996724687896, 0.21146039946088158, 0.3211131278764192, 0.921636927547933, 0.9981429184367644, 0.09662709007192716, 0.4734277260159877, 0.9867914228220531, 0.4415437181821612, 0.45416217225683975, 0.27983653489892013, 0.7609050274817578, 0.23017630407947565, 0.7702388069981185, 0.2477211058028833, 0.8261031804962897, 0.4877356097679747, 0.8602972626219345, 0.7063671926943388, 0.4048930504139826, 0.7880778896294389, 0.5829037833793927, 0.6209757776523838, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5948098768034782, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.39576308638615343, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.835128648845281, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6085773554247663, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4679223140485166, 0.027438781009462065, 0.3716878195231198, 0.0199579978088682, 0.36102038094904887, 0.6431222830463951, 0.34741587153320386, 0.22603314514462725, 0.5067781241362863, 0.8342422249794591, 0.26646178333204906, 0.6759305818665823, 0.6690347797724682, 0.7929141594499515, 0.4097471168728528, 0.9675174260723787, 0.8824227903662591, 0.004340246025094863, 0.5813145980752394, 0.5704711233756934, 0.8954523668644979, 0.6484554011109014, 0.17555592535956188, 0.5157569568469266, 0.8812349707210847, 0.812251544084032, 0.8656711072891791, 0.8172850573004784, 0.5949828072747959, 0.9049741100221382, 0.8879859467554044, 0.8313146429660512, 0.4065258282791677, 0.15727897761125864, 0.3484205075303167, 0.20316484509187538, 0.040710637233631664, 0.9422636673185534, 0.0668039513759997, 0.5166874092345884, 0.28992632700217513, 0.45448621751855833, 0.8428703807764792, 0.8095396267374237, 0.9405578679861039, 0.6690338086676076, 0.6856661561482512, 0.509377133767494, 0.746092919110688, 0.718560590882892, 0.19987548889823148, 0.5985766244393099, 0.3892282635563432, 0.042174527314988386, 0.28834424048937324, 0.5647006422391396, 0.10768865385191584, 0.6680480168326073, 0.48502265172153936, 0.20107347266422226, 0.06700154189232066, 0.2583110319336359, 0.14494240789279178, 0.214153857788978, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3525636088638997, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0457129718803142, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.18949568385264326, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9730538073350009, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7358124562940163, 0.9023289319229876, 0.5584131484343305, 0.7165017329880333, 0.5698554353567142, 0.8659927309025036, 0.4755112121320433, 0.3580491896897282, 0.7820043061394484, 0.3875849451386024, 0.6442406157037353, 0.9250353474149741, 0.8698903846139167, 0.25516670302899325, 0.34742866403193917, 0.5540345282385027, 0.6511396228200564, 0.0518584845004707, 0.47687327587566675, 0.7391090941667979, 0.050741858095834425, 0.3565270757329517, 0.42851750996605265, 0.5294163914194764, 0.7398537176473816, 0.9078831020615753, 0.1572735298694834, 0.09459429130511421, 0.3617954816433758, 0.3029217652293019, 0.5997775212822984, 0.248580737678893, 0.954451145757734, 0.1962316838207071, 0.6745526891253325, 0.88651822532634, 0.9624023505476093, 0.8682513367267045, 0.5281261201765712, 0.15965941469601175, 0.4441328893966944, 0.2923804418476723, 0.06490779221949527, 0.0017403590798413804, 0.8520009823265204, 0.44971843937991374, 0.3386034163640277, 0.7702096738809434, 0.8830585641425194, 0.6618970151878655, 0.4848376040578781, 0.5049250727515491, 0.5785873080885714, 0.9952698162199863, 0.43430072374659, 0.6188847870072389, 0.7581591778750364, 0.6383739016829548, 0.7567651057215206, 0.7513738640734398, 0.49253050728145975, 0.8139147833902005, 0.14316930311349307, 0.5945922505817162, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1249381619067389, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9543674249350337, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7334994568530535, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6035610085176568, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9930256611842178, 0.5403654583619014, 0.8979267433404176, 0.28173125276394995, 0.3467577704282401, 0.23380875880551844, 0.7134712817327136, 0.7883287163765654, 0.7846645621192855, 0.3189860693282949, 0.8804937197162858, 0.7337066619168504, 0.37284629923791457, 0.3537077448212921, 0.16015819664911035, 0.555665025454486, 0.8312480037258619, 0.19232821858251292, 0.9001473519318394, 0.5047301751313313, 0.38814468343949315, 0.39857403311434425, 0.1371117310249017, 0.6115736287886191, 0.3291784075711639, 0.0050888243214743945, 0.28200919754529385, 0.757181510166513, 0.3924420485744937, 0.3675296019027998, 0.5701179208189977, 0.11717175159145532, 0.32028644383186755, 0.7555585921315293, 0.8421362025797383, 0.014565912419013505, 0.1192955679481531, 0.19321039675423968, 0.2792456334803882, 0.6943539216498176, 0.22242515779974714, 0.0312889230468939, 0.5201858645943402, 0.3820715745426422, 0.915240687220273, 0.5018375488170763, 0.4544010301976812, 0.10290809465603667, 0.4639631681412365, 0.36800589920527194, 0.02608047026799898, 0.3907130363579898, 0.22964761662220634, 0.36479183564369644, 0.8837663008817578, 0.8767224380658272, 0.09642232491729474, 0.37809846987796636, 0.8852159908183284, 0.30341830122754354, 0.7551325894584977, 0.5477351512879798, 0.05477218246488447, 0.5564337547416925, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.27860376850661894, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8646010844866165, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9988616579631764, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8988484613080273, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, }; TransArgs args{ reinterpret_cast(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 2, 4, 17}, {2, 2, 1, 2, 16, 16}, DT_FLOAT}; TransResult result; FormatTransferFractalZz transfer; EXPECT_EQ(TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 4); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), SUCCESS); TransArgs args2{ reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 2, 1, 2, 16, 16}, {2, 2, 4, 17}, DT_FLOAT}; TransResult result2; FormatTransferFractalZzND transfer2; EXPECT_EQ(TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 4); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nchw_fp32) { float data[1 * 2 * 4 * 17] = { 0.48354565998830756, 0.5288379191643942, 0.6564947180129607, 0.7340645053567824, 0.38024908879386665, 0.21585634536453502, 0.07072412555001373, 0.3895052227714314, 0.6943410020138906, 0.25354216910391947, 0.12426328263652953, 0.4029102597944607, 0.3372883475188658, 0.15188057276427525, 0.5012013044152124, 0.2517370960382155, 0.171046514195472, 0.030114607358494028, 0.6244909419097497, 0.35110098875166074, 0.5870767726787481, 0.4984577853475606, 0.8268546800139805, 0.33992771536906896, 0.6460327104116448, 0.9313283133633905, 0.2989738630411848, 0.2738679126057951, 0.06777160291006379, 0.4087307988402077, 0.46439703610597116, 0.16710550387532463, 0.6145733123000938, 0.6662604590567247, 0.9305072712135973, 0.8323094426588402, 0.898281245473632, 0.6976122377419587, 0.20317433978716226, 0.14557923584209076, 0.36832234829498045, 0.9415737658692604, 0.816288063336007, 0.7422170145942777, 0.19178381426007074, 0.20831566936693735, 0.5544509915059798, 0.36345356512424987, 0.19945926108107215, 0.45935424005820946, 0.7679089618456956, 0.8404241327512916, 0.14812383323193712, 0.30500408542184043, 0.6568831766890362, 0.6926143461584111, 0.5399882410175864, 0.1892429432304602, 0.07467176864247294, 0.39941943666029067, 0.2853795635416202, 0.4533368695021506, 0.6172309334055194, 0.9181934347544681, 0.04114781094262976, 0.19628237211682176, 0.2992459720151508, 0.8065474976443873, 0.43556366882268016, 0.29680994009755635, 0.027028192513735783, 0.1333937532467585, 0.7057053295919739, 0.26552163258627426, 0.18921931005168524, 0.24298428082662826, 0.002365124316292211, 0.14448627328010977, 0.22643484261451152, 0.5302073755142979, 0.9383674394413312, 0.9285339529978078, 0.33604609763869764, 0.9591323699000807, 0.4758520057631518, 0.5724188248299613, 0.08772714551221295, 0.327875416428662, 0.7661605531724149, 0.5610963691380759, 0.5663803171694582, 0.96865287455917, 0.7105003163177777, 0.17674291676252174, 0.4553989259943879, 0.06394523733703428, 0.47436999492415177, 0.317587265492125, 0.6702452379659213, 0.23264947092844812, 0.9535389507438575, 0.13653273271434707, 0.8550107222862715, 0.9171716650149612, 0.33036188965071134, 0.5093434924862221, 0.9127693374642095, 0.15948127768481335, 0.9385875661217681, 0.47327218726414644, 0.562557864399026, 0.5094836574054532, 0.39525315162429187, 0.39044442327833495, 0.42354272355881273, 0.630368716154984, 0.5294499358806938, 0.18840958534702223, 0.9116004700132844, 0.217051263222375, 0.3355053440865866, 0.7249031228856988, 0.11569833736241464, 0.17220924930082948, 0.6841828482580393, 0.6451877670507526, 0.9960171769322085, 0.22836997946145943, 0.8876738074952507, 0.9036808362741429, 0.3386767083756137, 0.7215167652596821, 0.7222152655225196, 0.5268864163210882, 0.5220848656018956, 0.5033325975056796, }; float ret[1 * 2 * 1 * 2 * 16 * 16] = { 0.48354565998830756, 0.5288379191643942, 0.6564947180129607, 0.7340645053567824, 0.38024908879386665, 0.21585634536453502, 0.07072412555001373, 0.3895052227714314, 0.6943410020138906, 0.25354216910391947, 0.12426328263652953, 0.4029102597944607, 0.3372883475188658, 0.15188057276427525, 0.5012013044152124, 0.2517370960382155, 0.030114607358494028, 0.6244909419097497, 0.35110098875166074, 0.5870767726787481, 0.4984577853475606, 0.8268546800139805, 0.33992771536906896, 0.6460327104116448, 0.9313283133633905, 0.2989738630411848, 0.2738679126057951, 0.06777160291006379, 0.4087307988402077, 0.46439703610597116, 0.16710550387532463, 0.6145733123000938, 0.9305072712135973, 0.8323094426588402, 0.898281245473632, 0.6976122377419587, 0.20317433978716226, 0.14557923584209076, 0.36832234829498045, 0.9415737658692604, 0.816288063336007, 0.7422170145942777, 0.19178381426007074, 0.20831566936693735, 0.5544509915059798, 0.36345356512424987, 0.19945926108107215, 0.45935424005820946, 0.8404241327512916, 0.14812383323193712, 0.30500408542184043, 0.6568831766890362, 0.6926143461584111, 0.5399882410175864, 0.1892429432304602, 0.07467176864247294, 0.39941943666029067, 0.2853795635416202, 0.4533368695021506, 0.6172309334055194, 0.9181934347544681, 0.04114781094262976, 0.19628237211682176, 0.2992459720151508, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.171046514195472, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6662604590567247, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7679089618456956, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8065474976443873, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.43556366882268016, 0.29680994009755635, 0.027028192513735783, 0.1333937532467585, 0.7057053295919739, 0.26552163258627426, 0.18921931005168524, 0.24298428082662826, 0.002365124316292211, 0.14448627328010977, 0.22643484261451152, 0.5302073755142979, 0.9383674394413312, 0.9285339529978078, 0.33604609763869764, 0.9591323699000807, 0.5724188248299613, 0.08772714551221295, 0.327875416428662, 0.7661605531724149, 0.5610963691380759, 0.5663803171694582, 0.96865287455917, 0.7105003163177777, 0.17674291676252174, 0.4553989259943879, 0.06394523733703428, 0.47436999492415177, 0.317587265492125, 0.6702452379659213, 0.23264947092844812, 0.9535389507438575, 0.8550107222862715, 0.9171716650149612, 0.33036188965071134, 0.5093434924862221, 0.9127693374642095, 0.15948127768481335, 0.9385875661217681, 0.47327218726414644, 0.562557864399026, 0.5094836574054532, 0.39525315162429187, 0.39044442327833495, 0.42354272355881273, 0.630368716154984, 0.5294499358806938, 0.18840958534702223, 0.217051263222375, 0.3355053440865866, 0.7249031228856988, 0.11569833736241464, 0.17220924930082948, 0.6841828482580393, 0.6451877670507526, 0.9960171769322085, 0.22836997946145943, 0.8876738074952507, 0.9036808362741429, 0.3386767083756137, 0.7215167652596821, 0.7222152655225196, 0.5268864163210882, 0.5220848656018956, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4758520057631518, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.13653273271434707, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9116004700132844, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5033325975056796, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, }; TransArgs args{ reinterpret_cast(data), FORMAT_NCHW, FORMAT_FRACTAL_ZZ, {1, 2, 4, 17}, {1, 2, 1, 2, 16, 16}, DT_FLOAT}; TransResult result; FormatTransferFractalZz transfer; EXPECT_EQ(TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 4); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), SUCCESS); TransArgs args2{ reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_NCHW, {1, 2, 1, 2, 16, 16}, {1, 2, 4, 17}, DT_FLOAT}; TransResult result2; FormatTransferFractalZzND transfer2; EXPECT_EQ(TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 4); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, nhwc_fp32) { float data[2 * 2 * 17 * 4] = { 0.6826642868668084, 0.043866050762608744, 0.17666253295970225, 0.6377947294887623, 0.5731253161317631, 0.8660479153259933, 0.3283955922096047, 0.28822941576304395, 0.266035796785115, 0.2668960688194587, 0.13558803601784464, 0.014302374775957749, 0.22218488108454748, 0.5502228577797044, 0.8537365635590441, 0.3449278734931246, 0.7079460210099658, 0.32166794924574393, 0.6016995473528488, 0.5155731631574363, 0.4350255443350567, 0.15194948171848122, 0.17060018740751715, 0.5585688800367302, 0.5106144168384212, 0.7774792500405002, 0.9166771685022536, 0.1520171589804501, 0.055349159562811945, 0.08597516811763906, 0.8318337876627744, 0.8013703637699361, 0.4567924562463306, 0.236971745638061, 0.8091749658245033, 0.3048528694425596, 0.8440505279254544, 0.4565011814466987, 0.8444823800442499, 0.2665125487284098, 0.7942646379904031, 0.3003394430517031, 0.6060659316793948, 0.27949558854026524, 0.22970861575053936, 0.39464357988879895, 0.6323358476347488, 0.4900446166203536, 0.4262678398449171, 0.5175669011162926, 0.8074101200638781, 0.46309351804139254, 0.38526259936740015, 0.9475081441242449, 0.8026773601813839, 0.06648433150135313, 0.33054450113462375, 0.16206263925129671, 0.014661402248451694, 0.665996111688725, 0.49445514708553606, 0.1970970197451115, 0.932784874403773, 0.8203255119427988, 0.8368935109284026, 0.16366406201739148, 0.24295756148468395, 0.5998796055465441, 0.8329503908566426, 0.6233943209050588, 0.5485288788944125, 0.4936593563676702, 0.6353616329318031, 0.1622857757417404, 0.9106806866582022, 0.6660538060703398, 0.7791820943318373, 0.1706647725627367, 0.6381242174232316, 0.5563114541831535, 0.34546090886259295, 0.6183240367763264, 0.35075893676319736, 0.7802417875294433, 0.9353130445205744, 0.26121944223135474, 0.5879440609405164, 0.14403352098963806, 0.9478402093648892, 0.1091812289297438, 0.6835183818698114, 0.5384651415019075, 0.3727099433058595, 0.07027289982611373, 0.24479654654168947, 0.6340807114324638, 0.1089351825903393, 0.4261205290528358, 0.788035046472595, 0.1669274692010293, 0.7891031034793119, 0.30903585028517444, 0.44496600737518255, 0.17917072427208325, 0.8400527538813541, 0.871910504463008, 0.38573905907087824, 0.10475763959813045, 0.6067697302192192, 0.3664373646929884, 0.8540231355708695, 0.7361917987131372, 0.04323780187994608, 0.4571086189944381, 0.5232490913448236, 0.2034034806401901, 0.35033687234667865, 0.4983408469170202, 0.06750931495858226, 0.15379622192977516, 0.43307977818364696, 0.1349960580625169, 0.5823669234697881, 0.5317808621747713, 0.22318251516739263, 0.49734566581161355, 0.011911822059888721, 0.9508092497909877, 0.904895935832329, 0.9258062283860066, 0.27726879265908166, 0.5614587634330378, 0.4836523068545914, 0.2276530565354099, 0.4634085711120596, 0.22179062615921818, 0.6018307008437298, 0.40590069858881495, 0.5126780415762812, 0.6465924460988698, 0.2605000666954156, 0.11171926959828349, 0.6105601403074952, 0.5534360444770465, 0.8109441285089057, 0.587338599177806, 0.20351854196971497, 0.3698354775123749, 0.3381739805155217, 0.8338993543749309, 0.5934550069127651, 0.3500320504998983, 0.44079385400682924, 0.6233180976082278, 0.46480077933911323, 0.34927091073628136, 0.4187070529833151, 0.7423954257982627, 0.38881437522154527, 0.7714112671689478, 0.8179509335133315, 0.3831078838732509, 0.5079490533023165, 0.03606601875029403, 0.04250359963248451, 0.12750451249951045, 0.9971879993139143, 0.05829183629354873, 0.3265538538455145, 0.7778408294948845, 0.044318813495665244, 0.31281482741835165, 0.8394089943853243, 0.9311574975953711, 0.4945645162287725, 0.3126359293664953, 0.7723066998764473, 0.30410825487593607, 0.899894640728656, 0.6467261185695091, 0.6538998794010177, 0.21853150677202715, 0.5021502873311521, 0.9431876774620246, 0.477918638219775, 0.633568735592873, 0.5180803503595832, 0.9533087354778479, 0.7385933023116928, 0.5938150594439631, 0.8502221479425777, 0.13090966344672805, 0.15291414392453007, 0.329710111032374, 0.3905939714054877, 0.45771800705289356, 0.6192100451790177, 0.5126529214276997, 0.8229108192573972, 0.73202196858338, 0.4785584310461053, 0.8823363509107982, 0.3792618584525941, 0.1591318008380328, 0.8922797495718489, 0.41579350628761014, 0.6755235112503503, 0.9742082066104254, 0.719115743910399, 0.3112817152639481, 0.7897030377170158, 0.3120282966936694, 0.3362586043272986, 0.33468051317300296, 0.32925703998421263, 0.5022858273437679, 0.8307640088142761, 0.454233538180681, 0.493034504851536, 0.6675154014187731, 0.6084033780738657, 0.39712687614397224, 0.46986115672066886, 0.50569748391499, 0.011927554221092929, 0.7665958947310153, 0.2096478710154812, 0.8348997760875302, 0.9346732345703666, 0.7366480312487773, 0.9447711246630602, 0.13470562438257616, 0.7036874707129143, 0.6739655054223922, 0.8441899947297865, 0.1048650889727486, 0.9958266923005692, 0.22846263420411372, 0.3116180316667533, 0.8696545362199898, 0.623634518307979, 0.4372726660035817, 0.7072767829114394, 0.36685317131241946, 0.6113192123495405, 0.5403136926716755, 0.7969503412555408, 0.8976391022871576, 0.6904457546606565, 0.256293407218113, 0.12407625950806878, 0.8932902373278819, 0.12956469654646197, 0.889619024273833, 0.009357463204375138, 0.2117754631989739, 0.8874412877293805, 0.27088254423859315, 0.46310127400524936, 0.31001925997527413, 0.6263861695214231, 0.8998318442583092, 0.5619257152280644, 0.09296453039644181, 0.5991036267324175, 0.5085470750797965, 0.49798421993443254, 0.4492691325524484, 0.19410472899785058, 0.3865163021583399, 0.49187965812508505, 0.5724473984180373, }; float ret[2 * 2 * 2 * 1 * 16 * 16] = { 0.6826642868668084, 0.043866050762608744, 0.17666253295970225, 0.6377947294887623, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5731253161317631, 0.8660479153259933, 0.3283955922096047, 0.28822941576304395, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.266035796785115, 0.2668960688194587, 0.13558803601784464, 0.014302374775957749, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.22218488108454748, 0.5502228577797044, 0.8537365635590441, 0.3449278734931246, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7079460210099658, 0.32166794924574393, 0.6016995473528488, 0.5155731631574363, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4350255443350567, 0.15194948171848122, 0.17060018740751715, 0.5585688800367302, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5106144168384212, 0.7774792500405002, 0.9166771685022536, 0.1520171589804501, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.055349159562811945, 0.08597516811763906, 0.8318337876627744, 0.8013703637699361, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4567924562463306, 0.236971745638061, 0.8091749658245033, 0.3048528694425596, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8440505279254544, 0.4565011814466987, 0.8444823800442499, 0.2665125487284098, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7942646379904031, 0.3003394430517031, 0.6060659316793948, 0.27949558854026524, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.22970861575053936, 0.39464357988879895, 0.6323358476347488, 0.4900446166203536, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4262678398449171, 0.5175669011162926, 0.8074101200638781, 0.46309351804139254, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.38526259936740015, 0.9475081441242449, 0.8026773601813839, 0.06648433150135313, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.33054450113462375, 0.16206263925129671, 0.014661402248451694, 0.665996111688725, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.49445514708553606, 0.1970970197451115, 0.932784874403773, 0.8203255119427988, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8368935109284026, 0.16366406201739148, 0.24295756148468395, 0.5998796055465441, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8329503908566426, 0.6233943209050588, 0.5485288788944125, 0.4936593563676702, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6353616329318031, 0.1622857757417404, 0.9106806866582022, 0.6660538060703398, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7791820943318373, 0.1706647725627367, 0.6381242174232316, 0.5563114541831535, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.34546090886259295, 0.6183240367763264, 0.35075893676319736, 0.7802417875294433, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9353130445205744, 0.26121944223135474, 0.5879440609405164, 0.14403352098963806, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9478402093648892, 0.1091812289297438, 0.6835183818698114, 0.5384651415019075, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3727099433058595, 0.07027289982611373, 0.24479654654168947, 0.6340807114324638, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1089351825903393, 0.4261205290528358, 0.788035046472595, 0.1669274692010293, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7891031034793119, 0.30903585028517444, 0.44496600737518255, 0.17917072427208325, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8400527538813541, 0.871910504463008, 0.38573905907087824, 0.10475763959813045, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6067697302192192, 0.3664373646929884, 0.8540231355708695, 0.7361917987131372, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.04323780187994608, 0.4571086189944381, 0.5232490913448236, 0.2034034806401901, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.35033687234667865, 0.4983408469170202, 0.06750931495858226, 0.15379622192977516, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.43307977818364696, 0.1349960580625169, 0.5823669234697881, 0.5317808621747713, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.22318251516739263, 0.49734566581161355, 0.011911822059888721, 0.9508092497909877, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.904895935832329, 0.9258062283860066, 0.27726879265908166, 0.5614587634330378, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4836523068545914, 0.2276530565354099, 0.4634085711120596, 0.22179062615921818, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6018307008437298, 0.40590069858881495, 0.5126780415762812, 0.6465924460988698, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2605000666954156, 0.11171926959828349, 0.6105601403074952, 0.5534360444770465, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8109441285089057, 0.587338599177806, 0.20351854196971497, 0.3698354775123749, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3381739805155217, 0.8338993543749309, 0.5934550069127651, 0.3500320504998983, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.44079385400682924, 0.6233180976082278, 0.46480077933911323, 0.34927091073628136, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4187070529833151, 0.7423954257982627, 0.38881437522154527, 0.7714112671689478, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8179509335133315, 0.3831078838732509, 0.5079490533023165, 0.03606601875029403, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.04250359963248451, 0.12750451249951045, 0.9971879993139143, 0.05829183629354873, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3265538538455145, 0.7778408294948845, 0.044318813495665244, 0.31281482741835165, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8394089943853243, 0.9311574975953711, 0.4945645162287725, 0.3126359293664953, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7723066998764473, 0.30410825487593607, 0.899894640728656, 0.6467261185695091, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6538998794010177, 0.21853150677202715, 0.5021502873311521, 0.9431876774620246, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.477918638219775, 0.633568735592873, 0.5180803503595832, 0.9533087354778479, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7385933023116928, 0.5938150594439631, 0.8502221479425777, 0.13090966344672805, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.15291414392453007, 0.329710111032374, 0.3905939714054877, 0.45771800705289356, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6192100451790177, 0.5126529214276997, 0.8229108192573972, 0.73202196858338, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4785584310461053, 0.8823363509107982, 0.3792618584525941, 0.1591318008380328, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8922797495718489, 0.41579350628761014, 0.6755235112503503, 0.9742082066104254, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.719115743910399, 0.3112817152639481, 0.7897030377170158, 0.3120282966936694, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3362586043272986, 0.33468051317300296, 0.32925703998421263, 0.5022858273437679, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8307640088142761, 0.454233538180681, 0.493034504851536, 0.6675154014187731, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6084033780738657, 0.39712687614397224, 0.46986115672066886, 0.50569748391499, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.011927554221092929, 0.7665958947310153, 0.2096478710154812, 0.8348997760875302, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9346732345703666, 0.7366480312487773, 0.9447711246630602, 0.13470562438257616, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7036874707129143, 0.6739655054223922, 0.8441899947297865, 0.1048650889727486, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9958266923005692, 0.22846263420411372, 0.3116180316667533, 0.8696545362199898, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.623634518307979, 0.4372726660035817, 0.7072767829114394, 0.36685317131241946, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6113192123495405, 0.5403136926716755, 0.7969503412555408, 0.8976391022871576, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6904457546606565, 0.256293407218113, 0.12407625950806878, 0.8932902373278819, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.12956469654646197, 0.889619024273833, 0.009357463204375138, 0.2117754631989739, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8874412877293805, 0.27088254423859315, 0.46310127400524936, 0.31001925997527413, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6263861695214231, 0.8998318442583092, 0.5619257152280644, 0.09296453039644181, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5991036267324175, 0.5085470750797965, 0.49798421993443254, 0.4492691325524484, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.19410472899785058, 0.3865163021583399, 0.49187965812508505, 0.5724473984180373, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, }; TransArgs args{ reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_ZZ, {2, 2, 17, 4}, {2, 2, 2, 1, 16, 16}, DT_FLOAT}; TransResult result; FormatTransferFractalZz transfer; EXPECT_EQ(TransFormat(args, result), SUCCESS); EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 4); for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) { EXPECT_EQ((reinterpret_cast(result.data.get()))[i], ret[i]); } EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), SUCCESS); TransArgs args2{ reinterpret_cast(ret), FORMAT_FRACTAL_ZZ, FORMAT_NHWC, {2, 2, 2, 1, 16, 16}, {2, 2, 17, 4}, DT_FLOAT}; TransResult result2; FormatTransferFractalZzND transfer2; EXPECT_EQ(TransFormat(args2, result2), SUCCESS); EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 4); for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { EXPECT_EQ((reinterpret_cast(result2.data.get()))[i], data[i]); } } TEST_F(UtestFormatTransferNdFractZz, invalid_src_shape) { uint16_t data[1 * 4 * 4 * 1] = {0}; TransArgs args{ reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_ZZ, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_FLOAT16}; TransResult result; FormatTransferFractalZz transfer; EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), PARAM_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_src_data_type) { uint16_t data[1 * 1 * 4 * 4] = {0}; TransArgs args{reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_ZZ, { 1, 1, 4, 4, }, {1, 1, 1, 16, 16}, DT_UNDEFINED}; TransResult result; FormatTransferFractalZz transfer; EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), PARAM_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_src_format) { uint16_t data[1 * 1 * 4 * 4] = {0}; TransArgs args{reinterpret_cast(data), FORMAT_HWCN, FORMAT_FRACTAL_ZZ, {1, 1, 4, 4}, {1, 1, 1, 1, 16, 16}, DT_FLOAT16}; TransResult result; FormatTransferFractalZz transfer; EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), PARAM_INVALID); EXPECT_EQ(TransFormat(args, result), UNSUPPORTED); } TEST_F(UtestFormatTransferNdFractZz, invalid_dst_shape) { uint16_t data[1 * 1 * 4 * 4] = {0}; TransArgs args{ reinterpret_cast(data), FORMAT_NHWC, FORMAT_FRACTAL_ZZ, {1, 1, 4, 4}, {1, 1, 16, 16}, DT_FLOAT16}; TransResult result; FormatTransferFractalZz transfer; EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape), SUCCESS); } TEST_F(UtestFormatTransferNdFractZz, invalid_dst_shape2) { uint16_t data[1 * 1 * 1 * 1 * 16 * 16] = {0}; TransArgs args{ reinterpret_cast(data), FORMAT_FRACTAL_ZZ, FORMAT_NHWC, {1, 1, 1, 1, 16, 16}, {1, 4, 4}, DT_FLOAT16}; TransResult result; FormatTransferFractalZzND transfer; EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_src_data_type2) { uint16_t data[1 * 1 * 1 * 16 * 16] = {0}; TransArgs args{reinterpret_cast(data), FORMAT_FRACTAL_ZZ, FORMAT_NHWC, {1, 1, 1, 16, 16}, { 1, 1, 4, 4, }, DT_UNDEFINED}; TransResult result; FormatTransferFractalZzND transfer; EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_dst_format2) { uint16_t data[1 * 1 * 1 * 1 * 16 * 16] = {0}; TransArgs args{reinterpret_cast(data), FORMAT_FRACTAL_ZZ, FORMAT_HWCN, {1, 1, 1, 1, 16, 16}, {1, 1, 4, 4}, DT_FLOAT16}; TransResult result; FormatTransferFractalZzND transfer; EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); EXPECT_EQ(TransFormat(args, result), UNSUPPORTED); } TEST_F(UtestFormatTransferNdFractZz, invalid_src_shape2) { uint16_t data[1 * 1 * 1 * 1 * 16 * 16] = {0}; TransArgs args{ reinterpret_cast(data), FORMAT_FRACTAL_ZZ, FORMAT_NHWC, {1, 1, 16, 16}, {1, 1, 4, 4}, DT_FLOAT16}; TransResult result; FormatTransferFractalZzND transfer; EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); } TEST_F(UtestFormatTransferNdFractZz, invalid_src_dst_shape_relation) { uint16_t data[1 * 1 * 2 * 1 * 16 * 16] = {0}; TransArgs args{reinterpret_cast(data), FORMAT_FRACTAL_ZZ, FORMAT_NHWC, {1, 1, 2, 1, 16, 16}, {1, 1, 15, 17}, DT_FLOAT16}; TransResult result; FormatTransferFractalZzND transfer; EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID); } } // namespace formats } // namespace ge