{"FileModelVersion":{"Major":1,"Minor":0},"ItemDictionary":{"0":"aea2161d-ff43-4b10-ac0e-933fb5809faa","1":"9d2ff3d6-abc2-4378-b47c-cad42d4af1bc","2":"df687d3b-ad26-49bb-86be-ed694e880252","3":"77642c0c-277f-4a7d-9d08-f3f161d8e69c","4":"6ae7c977-3f62-414e-98aa-5dc0da89b376","5":"87c616fa-b498-4858-8439-68411a0a62e3","6":"6d26fe2d-c9ce-4d86-b26f-78afbd22b5b6","7":"f3a1dc17-764c-4435-a83b-17914d5dac6b","8":"2c557c38-4136-436a-bae2-c5cd1102690c","9":"00d31a4d-d523-43f1-b5c2-f96b33a69a99","10":"cb04f082-b5d9-411c-86da-010123dfb5bf","11":"edd65760-896f-4f6a-ba8c-eb2b072635f4","12":"2b0444a1-9ec4-4c01-804e-a6cf07cb176d","13":"8ccc8d39-5a97-4cb2-b708-d3ffefd5dc19","14":"f29b1372-f4f3-4305-aa85-5fe214361fb7","15":"26a604f0-071c-49ca-8a0e-e1d9c959b1c5","16":"23b1fef3-0556-4a51-88fc-d4a223c3e934","17":"7aacb57c-355d-4345-9d35-b34850058753","18":"c68d0ed7-66d1-42cd-974e-01aa0f36c847","19":"0d1d97b5-3c99-45bf-8a5d-e7a624b3ddb6","20":"62e2b663-c26f-461e-ae26-43068010f993","21":"052432ff-4709-4cfc-b3b6-82a34f6757ca","22":"ddee4f0c-e9de-4a73-b87f-c34d674450cb","23":"fa3b5219-d4bf-401a-a105-c0332d8496d2","24":"930ab796-f1c7-47f0-bf04-0ef6ae44006b","25":"3ed4d2a4-62ce-4807-b516-6da685804e1e","26":"5292dcab-a674-467a-a21a-702d2c2a152b","27":"60c591be-98fa-4844-b55b-6d55bc16493e","28":"f003eae6-6818-4da9-a1d0-6e4f1677d49f","29":"a745d992-b62f-4014-a524-9e5953ccffd3","30":"1bb2d71d-cd5f-4a23-844b-8005dec7bd5c","31":"cdabf95e-e712-4a93-8214-79d2d9a809a6","32":"ef545d00-c22d-4eed-bd76-74d6432e2974","33":"742c7d8c-d03a-49d8-bc71-46f5f828bf72","34":"1725c9ed-29fd-438d-97f6-8f645a1865d4","35":"c2dfcb78-dd5b-4406-8c95-0f884c4d89e1","36":"e00c4398-a6e7-4330-813a-b3c3ac8da3d8","37":"42033da8-485e-43be-99db-ffe2492767b4","38":"10a165d1-1333-4c57-a942-b857542c4b45","39":"ccb4fd67-d791-4b1f-80cb-42346313254e","40":"a6edccd7-3ec8-419c-9405-703e8b4bdc8b","41":"f8594608-c8c2-4544-94cb-8c0c78fbb4b0","42":"16052cd0-6fb9-4c1f-bfcb-2574d21434f0","43":"3e0a0bd7-7805-4e8f-836e-0cbcfee512af","44":"956b9974-b044-494e-b5e4-d1cdbc5d5327","45":"3deb411a-953b-45a7-955a-35a96ef4e86b","46":"f6d7596c-e800-41e3-9076-077fda224aa1","47":"9de26959-6d51-4a6e-b575-ec47e6bdafaf","48":"8e9327fb-66d3-45ea-af24-d5f9d60e2cdc","49":"e6bb2b09-daee-432d-9aff-45fc63d24fca","50":"4b334c3f-aafd-440c-9c1f-02a98fd18ab5","51":"a56e0dcf-94e4-48a0-b8b9-5e33e0ab69cf","52":"75a78e48-0848-45ee-9df2-e2b328c1933d","53":"275b820d-dd55-49aa-9b09-48b58e8ab5da","54":"c4e23d98-fbde-449e-823f-872004cadc7a","55":"862712ab-6534-45e2-ad89-1d8eb0fd26de","56":"6f0efd3e-c241-437c-b25f-92dc1e83332c","57":"564a75cd-8d7c-469b-a4b3-053d772b7d9d","58":"4576e3fe-8eda-4e24-9823-eb68e4a9c953","59":"d15a334b-d951-4991-89f0-cdf2599a9699","60":"7fea28f0-eb30-4700-a592-c3eb1ffc7b0e","61":"2a508eb8-cc74-43bb-9643-afd0c518d09f","62":"0d466e68-7a97-4e27-a73c-6bda4010f7e7","63":"7475c363-fa60-4348-a2e9-f3e2329fc20a","64":"ad965629-9b13-448b-ab7a-7e69afad2fb4","65":"02ea8321-aaff-4d03-8c50-20c241a82632","66":"0083a83e-a716-4c67-aa49-d14fbcd00248","67":"b74c27c0-081a-45b7-8e81-cdd84ff33490","68":"50626002-c1bc-41a3-ade6-ee83ba4c548a","69":"2718d6ad-07a2-4d98-bd7e-9cdb2b3f70db","70":"1d206e3b-4641-4002-9d3d-940036154408","71":"fdab4d92-8519-4090-b7e1-b794953b44e4","72":"8e2cb19b-db70-41f4-b398-62c38fd22d2d","73":"b9fabb99-ff73-4018-8521-08441d2f18cf","74":"b50989c9-03d4-4201-a8d4-459dcea86b05","75":"a70f015e-a9fe-45f1-958c-fc501ec7e2ea","76":"89c3beb4-0fa3-4c3f-a065-7e53497cbe64","77":"59e0ca88-f390-48d0-ade1-0c08f629c4f2","78":"e3d22373-253f-4f48-9638-77d756473c6b","79":"c5bb6398-319b-47c1-a5ef-c6ce9af4e9a6","80":"261a60dd-5a01-4e6f-b7e8-a56bb21e2ad9","81":"12e26b7f-d42f-4af0-b134-129f8aed8a90","82":"ad3867b5-6146-44b8-a539-6ab08311e5fe","83":"f18d051c-2aad-4287-823e-997499716da1","84":"4b4bdd8a-e01c-4d77-8228-e19e241ad623","85":"03d79bec-7af0-44e7-a012-f2e2dcacff30","86":"4934fff3-aca3-4fb3-b242-60afbe8d4439","87":"f3f7620a-f281-4a3a-a75e-0106ef9c4eb8","88":"4363ead8-3cdd-4d95-b461-193dc928790d","89":"c384fa33-67c3-4915-a878-4245f4cdcecc","90":"a4fdfea1-1254-4f7b-9346-124dddb595bd","91":"478efa9f-5743-4238-ad2e-750770d7da11","92":"d22f3d7d-7507-4d30-b884-9bfdc68d59be","93":"85cd3795-9fb0-43ce-87dc-ff07f2844dd3","94":"2f87caef-8e9d-468f-925e-b0bf98e071f3","95":"c624a6cd-31dc-49d3-a1e9-5482d06acbc6","96":"09d28633-cff1-4cc4-9e11-161f350dbf60","97":"228e59f1-b3de-471a-931f-45735ae6ba7e","98":"dc8f69fe-f97c-404f-996c-1b934afa17b5","99":"b3ea8191-f5c9-42f7-b301-fc3144c8d2a5","100":"7836f02d-9d50-476c-8701-d0e4eda43de3","101":"66e3efae-4d73-4f4e-adbd-85e2573580e4","102":"3b67ec16-9ccd-47de-8753-53617df90c61","103":"c3f26ef6-22f2-4a04-bb49-aa66cc949188","104":"462f80ed-2611-4cf8-a204-c7a66ea241da","105":"2a8501f7-2463-441c-901a-57d1a6573fe6","106":"efb55635-4841-42b3-98f0-9aed90b2e826","107":"649fc6c3-2f0c-4197-8777-e44e86696d60","108":"c107f90f-68bb-4f16-b023-960e72e1fa3a","109":"d13556da-e6dc-4c49-a9ec-b47517709da5","110":"7b672666-b275-454f-968f-506e93987800","111":"0a1aa046-e841-4813-907e-6567e596a079","112":"d7d56a2b-bc35-4c89-87de-38c99e7d1c2f","113":"04d60765-2c11-48eb-b9fa-c3eb847b91d5","114":"23453c1f-3946-4db0-a75e-f8b6dab12569","115":"86a9327f-50c1-44d9-aa06-08dc3f25b433","116":"1dd8c1cf-ce0b-469d-9924-455dae4958f5","117":"832b5533-fa5d-45ec-ba4f-2dca1e8f0bba","118":"08d6ef2c-d97e-4b40-a5e3-0485b945f88b","119":"74f9b43b-14d2-433c-acc0-8f0322427daa","120":"e8ae14ad-159f-4d33-86f3-408e01aa4fdd","121":"011e4de9-c66c-4ce6-ad22-2fd6ac9df2a6","122":"00b9dfc4-ac8f-4fee-bbe0-a76aeeb75627","123":"9e8fd38f-a406-4d87-8186-de37979d4d20","124":"6785811b-60fb-48f2-ac17-642ab69d1dde","125":"703d6094-850b-45fc-a01c-25ceddd49dcb","126":"3d6d4fca-b7a9-44f3-a888-d3e43a79331a","127":"52ff74a3-3d0f-4b2f-bfe3-23ff12f74354","128":"b2a95e90-cfad-4f43-9860-513d31f47374","129":"62fc0360-f8ff-4ee7-90f2-92da6a26640c","130":"ed9c1986-99f7-4c15-af23-d735442a286b","131":"3d8c87b7-2488-4982-860b-e7eda8d5d590","132":"02666d0e-e9a9-4c9c-854b-a35972a3be64","133":"413da151-24e7-4e94-b5c7-ce7994252586","134":"f49d4249-2995-4a81-b67c-6abbce092b8f","135":"3108f579-7c8e-44e5-8cd8-2fe107afb3ea","136":"24fc1a2c-66aa-4152-a0d8-7d0dd5645151","137":"9233e3ff-3040-45d3-a2de-873e41a1df76","138":"24e5e3f7-ad7a-4083-abff-0a262f541dd9","139":"6ad7cafc-e88c-4722-88c0-f5acba190527","140":"5bd210b0-2377-45c8-9287-ec607acbbe60","141":"faa18ecd-0edf-4167-8c30-8cf2b95f42e1","142":"fd4946a4-1633-4627-9728-c1b5dd276ddb","143":"e0f5e9a7-a384-48f9-9ec5-fe6aac81c440","144":"acb4bf6e-b10e-4a6f-b9dc-b22be888c096","145":"575c59bf-c5be-4558-8ab7-7bb672f62ffb","146":"ef753ff4-2d7e-411c-880c-08222dd6a4c5","147":"e9444d6d-714b-4cd7-aa9d-9527f425fdd7","148":"ecbcd3ac-9937-4351-abd8-a727c0d0ad77","149":"ae863b85-af05-40ee-a092-c97eb733d6fc","150":"565faf2e-346d-4ba5-b9d3-99601ad33c74","151":"375f4305-47bc-4abd-8c68-b67cb50e7036","152":"f45bd228-43c8-482c-824c-71e48e8ef27a","153":"7676bdb0-2cc4-4966-8d71-b1025244d911","154":"120b90ce-8434-4e44-a32f-7e5da874eaf7","155":"1cbba583-ef54-4de9-9364-4e7371bf4ac3","156":"973c1ee1-2dc4-4cd7-be7c-32a37cb405de","157":"d2cccaa0-415a-413a-964e-ff747f20b964","158":"74c982f4-305f-411e-a8b4-d193315ab3bc","159":"9d4fa368-3e44-4262-a213-4157a14d3677","160":"05537cc1-9df6-4395-a3d4-1db6226c62b5","161":"7161f887-4de6-4b5e-9066-f39d6cad9f16","162":"382a7650-2231-4867-96e4-8d97242a4741","163":"788700be-1e74-46d7-9e34-1a5ec2747548","164":"cdca5dec-eeee-4849-9b2e-73b23e216465","165":"cb5bfa64-c3fd-435c-b0da-3891a86b20d2","166":"2e86af10-00e0-4dad-9cac-3b87ca9e468d","167":"d83e6a25-e6c3-49df-9d0b-de3c5edb579b","168":"6ebdb4c7-5626-4051-a91f-21fe6e636263","169":"107478fd-2a4d-4fb0-81b9-1a448d3ba987","170":"2c56eeab-7432-4c31-b413-68b0ee7e2d7c","171":"8f461b33-37cf-4049-b04c-4aa0d2292e2d","172":"c310aa38-b723-4a66-8700-47cffe7647f4","173":"b7c60d19-d652-4fcc-af1a-85409c9c131f","174":"c5cec892-2e43-4905-9d28-44fc8ecb5cc7","175":"213026bc-fd7a-44e6-b543-a31c219aaef0","176":"e63040c9-0027-4fd3-be30-67fe3e950140","177":"2ae437c8-afe6-4d6d-9562-0423227878b2","178":"b20baa46-0a1c-482b-a3f9-bbb8c14520e2","179":"19945f75-8353-45e1-938f-a548fa05e05e","180":"543fd6c7-fcf3-4df0-a4b2-891a8574b434","181":"ce494e45-5ff6-48a7-8936-30163c58ed99","182":"bc292fe3-2330-4a01-8615-412a19fd7f6d","183":"87142f81-71ce-4d60-9b81-4fe5674112db","184":"a97e03b0-e8da-49e2-9913-ad8c1826d869","185":"a5872d78-28e7-48a3-b452-ceb29de035cc","186":"379c94e6-7f27-42ab-ab45-66e3533ecde8","187":"ec49b6a2-244f-4cfa-b49e-8dd19213b280","188":"9a3f63f4-48b6-4fe0-9f59-9fac3d073750","189":"645a71be-2a80-4228-b036-9de863576708","190":"8d70c55b-d200-4f56-a159-28646427d4b1","191":"d2550253-f55a-48e2-8f57-c3931c0359da","192":"47c8ddc8-9dca-4363-a39e-95dd28008e30","193":"1b672c70-b108-4ec9-b6f6-9f817adf7250","194":"4bd38234-b485-4a94-bc2d-d3fc80d89955","195":"9ebc44a7-5c1c-484e-8b06-ae390a48db17","196":"f9f91495-3c3b-48e2-9f4c-a53b01c47f6c","197":"54836777-b634-4a21-ab1e-2b0e426b640f","198":"e34ec225-dda1-47fc-b56a-746da1965349","199":"9aa55699-b91d-4e4a-921a-4b60569824bf","200":"64109192-fd8e-422b-a9e8-74295d3d74ea","201":"1aa62ea2-cb83-4778-86f0-4bd96332842c","202":"75ffb576-34c6-4dae-87a6-0f45d6482070","203":"6c37df0b-7eaf-48d4-85d8-2453014d8edf","204":"8d948200-242c-47c3-b46a-ecdf40f7b39b","205":"c0afc8a9-5c49-4f15-8834-6e39ff144da3","206":"f71f9cfc-a107-4404-bb2c-7dc30e10e8da","207":"9d43ff24-4165-4c48-bc5d-ccb89b0667bd","208":"e3bffdbf-01eb-4309-bdb5-4358662eaac4","209":"b06788d5-4715-4168-8f7d-d6380f73fe54","210":"9a0d25cc-f5c2-4780-b674-38fe17e73f8e","211":"1576f21e-9ca2-4f29-8b14-53ce98205a5b","212":"78514976-87cf-4d89-85cd-9d0df590a317","213":"d7e6366f-3f5c-4dbc-a1fc-b63de74ed7eb","214":"76dfe171-525a-48ea-8652-b7537aa06572","215":"edb1b2eb-dac7-4c4f-8967-35f61c75fd93","216":"da80769e-0a55-4e05-bf58-1541842f4e82","217":"b9457302-db10-49ad-98e2-1c44cdca24b9","218":"ea3d81c0-c862-4e06-90aa-63f746e5ce6f","219":"552785c2-43cd-41e6-a13a-818388b93968","220":"eadfab64-b2a7-4704-8241-37ae3b42f705","221":"fc4f02ab-2e74-4deb-8d83-ca3da65c99ff","222":"edf0442a-4976-43f4-9a9c-66e43f0353ff","223":"197f8869-1891-4e7d-9465-97b9183aed22","224":"1af0aadf-7edc-401a-9750-0074b8b46b6a","225":"51cfbd8b-5223-4101-b4f3-f62872a82b58","226":"83e8cf5c-ad5a-4cfd-a0d0-eb4ca9f48127","227":"dfb470c9-e7f2-4530-9b5b-3de8214501da","228":"3bff8428-7481-4847-b00e-f0e49233b86d","229":"819ef76e-1023-4f06-bfb1-96cd3e58ba88","230":"94c39cef-53e1-41b2-bbc6-94a869d79c64","231":"267248a3-baaa-4653-83b3-ce478d600b17","232":"043e9b00-4a2f-41b8-bf2f-4aaa4442f138","233":"d5016f16-6431-4e8f-b0cc-5f0f400b151a","234":"01a87958-93cf-4efa-857f-10913b0573d9","235":"515ee20d-20d8-4195-bea5-213e6f1fd929","236":"ac5dda48-2bbf-453b-a4d5-517ae78499a1","237":"4c24445d-a29b-446e-b03f-29e570e9d47d","238":"91d167b1-652f-4ac8-adc4-973b548ccd5d","239":"f94702c9-cb55-49e3-8cc4-138288fa1f13","240":"4b2109f7-abfc-46b7-b752-f9423b6f2e35","241":"6ebe5e2b-ef9a-4849-b234-131b25579adf","242":"33b65ccc-58a0-487d-8b68-a997a71b0bfe","243":"25575b2b-223c-48f3-ab6f-7133d26e86e8","244":"99a71734-3128-4535-bb9c-f69de5277f49","245":"2d546425-921e-4900-b249-fa5a1c7d5513","246":"da59d582-9254-4091-988e-b670dcabe84a","247":"a160804b-15cc-46e2-8ffb-401c2aa01de6","248":"c27e460b-f3c3-4716-b20a-69f766d27f34","249":"6d0d9986-5871-4e5c-a415-6457552595eb","250":"663d3348-9700-487e-a30e-f472d933e859","251":"47da23fc-17bb-4a66-9c6d-fb66fddb3be6","252":"e0f9e669-4748-4cde-be95-58e47e094253","253":"6209370e-abeb-4ec1-b523-dc21ea33fe0c","254":"91cca4a9-a40f-43eb-9ba5-34c738b03d1f","255":"542cacd4-c366-4a76-8d01-4ace6c5ce619","256":"fb1fb4c7-78e8-47e7-8ff1-34a4afcd10c7","257":"b6ac5f2e-907e-4926-88c0-355d30c6b7a5","258":"8acc506a-41cf-4b62-ab1f-e6f523baf75b","259":"7dc67bed-fd0f-4145-9525-5840bbcc4822","260":"9c09eee2-e4bd-42ea-aaec-43a6d1451db3","261":"db2a5655-6b32-4877-8285-40c6ddc9ba3c","262":"d73b886e-2498-4c17-9346-a85f77d4a454","263":"9385face-922e-4158-9632-7ab9fcb00166","264":"464187d2-ff5c-4d42-9937-0206cffbd883","265":"ef2e81c1-d06d-474f-b12c-14de1702db1b","266":"57c4c674-9c66-4ab7-9067-81477824785d","267":"31047680-b58e-407a-9f39-1b59fd656e13","268":"8996b3c3-2569-473e-9d28-2b2cb17bc7a3","269":"139d4b6a-2b6b-4bfa-8d00-1bc8e69923fd","270":"c0542188-97dc-4cd5-a275-ede25d9797ba","271":"5031a9db-aa48-4903-9b16-75a54f5959ce","272":"f1746662-adec-4054-98bd-94b553bc6c6d","273":"3d82f1a3-ad2a-4e81-a4e3-cb88c968f6e9","274":"3c3d8cda-b79d-47a5-9bc4-378daf3d4358","275":"48678652-cad7-40ae-918f-af432b37fdf9","276":"1ab5006c-9156-4605-a670-68e1c2eb2e9a","277":"b799b159-3bab-45f8-92e4-3107bca46513","278":"e581b7dc-da92-421d-9262-a5781c287728","279":"ad861a50-c881-4aa2-839b-d1248a810c77","280":"172c1b1f-9dc0-41c8-885c-aba814e4fe08","281":"c51bd0a9-99a7-463a-b20a-fe2e484ab26e","282":"d7e26b38-f5a3-4ae3-9486-66d63222b336","283":"45ce64f5-86ca-425a-8074-7603cdfc1d4a","284":"a3d914e9-697d-425f-abda-a6b21b4de952","285":"d4806e59-5ebe-40b1-b223-c8232691396d","286":"2e715d3f-349f-41e1-bd89-7f685939d5aa","287":"46fc87ec-0f7f-4c55-a5d3-721365c5f364","288":"6a04c57e-0076-4f30-9f99-f92eba7fcd53","289":"1240b6db-1f41-442a-88ce-5ab0944d804b","290":"e961fe5b-cce0-4a1e-8742-936ab8088636","291":"7e9abf0f-84a7-44e6-b4c3-e3da6f942072","292":"d24cdfe7-bb26-403d-a854-dfa77506e5fb","293":"5b609887-c1dd-407b-b3b6-b1eb35d1e818","294":"20100af6-ccd1-41ff-b7b0-5d2f6bb99f85","295":"6a7c1ad1-21e5-4b2e-bf04-cc08d639313c","296":"7cd6a310-cf17-4f6d-a818-8f29d029778f","297":"d3924bae-be5a-43a0-be19-64fc7c8d6059","298":"01e5ced6-4813-4a22-a709-f68689c494c1","299":"f817665f-e59a-43a0-9c86-0d39f64b594a","300":"ceed114a-ddb5-47d4-9b7a-ef1ce9398e09","301":"ad96a3cc-119e-4842-86cd-c633b1c702bb","302":"bf0db0d2-8582-41d2-bcfe-5299bec3d06b","303":"0b59767f-dcf2-43f3-895b-d876afed0063","304":"3af29052-8fa5-4998-a0e0-b3ea188d8860","305":"7d005e15-c63a-44f0-b12e-b8599a9f0424","306":"f7042d78-d7ae-4a0b-b273-197813c61648","307":"936f57b0-0376-411e-a9c2-776681111efc","308":"042cfada-38db-4af5-a1c8-13ddce0da29c","309":"5ea1b039-9f46-45ac-b8d3-ba837f10f069","310":"58e7abb1-de9f-47f9-864b-d5c8218f1769","311":"9a564782-3a07-472b-ae06-5a7dfd123e7d","312":"06484d1a-d956-49a4-b9de-e779696d001c","313":"4c352619-ef4f-4919-b64c-ef11d4435754","314":"ae2bb239-d304-4037-b35d-eb7d3ded91bf","315":"d43b5a55-9e60-48f9-9e77-ac1cfa97dafa","316":"2ed46940-a47c-4283-bf5d-6b52132da9b4","317":"8f6dd44e-9191-4d5c-b5d3-75a6c027b360","318":"22c7914a-d836-4b41-93e7-7de9e3b9b11e","319":"154e5001-729c-4a9f-983b-342d3092a0f3","320":"310a7a9a-8d4e-4365-a877-1a8e2bac2a81","321":"86a6eb4b-cb64-4451-9dc5-94efff6b8ed6","322":"b1ef236a-9ecb-406c-b4f0-6ef0fbb50bd1","323":"e1ec6e9b-6bfb-47ec-97b9-7b2048ae8233","324":"079eb934-2fe8-4078-80c0-a4e8e60d9465","325":"ac6af740-b19c-4326-8b39-40e302789849","326":"4aa8cfcb-7aeb-430b-9726-f8bb8d8f4124","327":"6222ad4d-f6d8-48c0-9f27-10e2b64d7481","328":"bfb82ee6-345a-44a4-84e1-d6706cc8b29d","329":"dc17bd30-20ac-47c3-9c42-af6b3cdebf6e","330":"72091a02-bab4-40a7-9ee0-4c180ee24f99","331":"2be9c88d-be24-4880-aa12-ea8dc685a726","332":"c743b888-a53c-42b8-b4f0-3afc6d763617","333":"d30acc39-3742-47bd-82de-f5e1b9af565d","334":"b0c166d0-c6dd-4328-97a9-335c25fff2fb","335":"79eaae57-56e1-4bb5-a573-bb9c829e8c8e","336":"b7b36555-0ab1-4a64-ba01-3017e4809cf6","337":"1980c435-9871-470c-973e-9253f8a3b122","338":"e4dabc7e-9566-4e7d-8d28-cbec2f811798","339":"23696e3e-a6c7-4ac3-8ba8-884718dd688c","340":"9d5fa98d-ce5c-4e7a-8041-2fee8d28fe35","341":"078b7202-f156-4936-8ca3-860055a20f1c","342":"536fa669-d522-465a-a67a-589a07aa09ad","343":"30e8ed70-1885-444a-9697-a89d5c524690","344":"490e286d-0367-40f2-8ed6-60d70a60bdfd","345":"31277649-04ec-45db-adfc-4a7d0a73686a","346":"82b2446e-c12e-436a-8340-76d38372ead1","347":"b665e908-9db0-4c06-a209-1a7e9f41f283","348":"8600329a-4b2b-44c7-8e66-634b0d81ce3d","349":"38e9a85a-ac7d-4cb0-bd43-a5ae2099640c","350":"56c27d46-39b3-4ac1-b4f7-71c118d8dde9","351":"ee47622e-4eb6-4fd0-81f7-97b33adde8d2","352":"56450137-c20f-4793-972c-fb3fe56ae8d5","353":"a0a6c5da-d68a-48dd-864f-e7632f8f6fde","354":"ce79f42d-107f-4483-91c4-f5520c1d79e6","355":"4270e6e1-4d30-416b-9ed3-5bc64d574148","356":"c8fe583a-357b-4fa6-86f1-fc2de639c909","357":"cf1cffd2-27e9-45b7-9720-0025e890f99b","358":"f05191b9-468c-407b-9601-453a46fbaf1a","359":"56b29112-55f3-4e0a-9279-f6437adb2847","360":"1327d1ea-c923-44cf-85b0-eb9e1e272167","361":"6bcaa132-06af-423a-9998-8f73161a2f73","362":"9f97c3df-a0a3-4fa4-8570-094a2e65d8aa","363":"4d9a507f-84a3-456a-8b60-6d1bf48816ca","364":"5d8870cd-d401-4b52-a3dc-641c02b3b31f","365":"4f87eff7-616b-4663-8f11-cd7a7ddd3649","366":"d661f0e7-7f81-4227-80dd-f93aed873630","367":"9413049d-a4f7-4c1c-8b8a-d2f1f4c18e53","368":"79015536-c137-4c87-a337-99dcf3deff81","369":"1ddd4971-348f-4e3b-bac7-23b3082792c4","370":"45886651-bb90-4ae9-9a8b-ad6658514f37","371":"8cf1190e-6967-47cc-81c7-7258ec75d70e","372":"adb6b43b-06df-4daa-b8e6-bfaae277d6dd","373":"52e52d0c-02d7-4965-a46e-93462e083659","374":"071de01c-2838-485b-bbae-9b3acfdbcdd9","375":"8951fabe-dbbf-4b32-82e2-e36da0b92fdb","376":"4ac57cbd-c325-4d49-9e92-71ae3b6a65c6","377":"abb3675f-8a83-4f48-8bfb-3703a961c205","378":"a7ac32e0-c6ad-4663-a543-c9d3a9f2d0ec","379":"f6ab96bf-1d6b-499b-be62-21dd8962d37d","380":"ca9ca28a-3488-405f-8d74-8a609440ee95","381":"b63b85fc-685e-454f-8f93-31db02b95a05","382":"d405df88-2c4d-4b33-a051-583defdf72d8","383":"0eda844f-466e-4855-8f35-bcede968cdf9","384":"949d3fba-3b60-49ed-a83b-7180822d6bc0","385":"8fd543c2-5d64-415f-befb-acb627cc1be3","386":"063eb06e-57e0-43dd-b85e-90baed4f025c","387":"e8d04f75-a134-452e-a04a-af5172d65040","388":"344a6bb2-dada-45f3-ba66-6fdbbb57f394","389":"1c146ed1-3b8d-4171-ab72-42668e6827be","390":"8078b4a3-f928-41de-be6e-79ea410e8091","391":"a76daffa-ba3f-4c09-a947-5b694aca4448","392":"2a488683-f25b-4ecb-aea6-9a1c96d1e372","393":"8746f5b3-e2a6-4067-95bc-9da3900690f8","394":"9b8657b9-c820-43a0-ad19-25ea45a100f1","395":"58305289-16ea-43cf-9144-2f23b383da81","396":"5cf2b4da-c1b8-4005-930b-73cc39ac9d28","397":"c0e407e9-fc15-43fa-9a61-4c79a3acb6a9","398":"c94e1719-bcc7-4c6a-8563-505fad2f9db9","399":"b44be747-32cb-41b7-9e1e-21472534b4b8","400":"811379b2-2e27-4268-b821-940766960802","401":"76fb5718-e965-46ab-9f0c-c82baf648abf","402":"0e11729e-09d9-4a3c-83dd-1ee16ed4f2f8","403":"4d7a6918-e6ed-4328-a7b6-1f5e874618d5","404":"a3114f91-5182-4803-9ec6-fc1e6a7f9a87","405":"57d0b848-3bf5-45db-bfe2-447933aee7fd","406":"a91233a6-a786-4ca8-b50f-9faca5cb3733","407":"1c4e94a1-c36a-4b8f-86be-a9b2ae736a71","408":"dbd44b5e-acc7-4797-9c06-a07b19f03bdd","409":"25ae7b90-4e78-49c3-8bd5-59712fc87b77","410":"fd0d5e77-2074-4c3e-b708-4a2c0cc6f7a4","411":"1bc2df6d-f59e-40f4-ade3-83a357676123","412":"3cdfdc8b-a6ec-4aa9-bd10-0aab93237825","413":"267adeca-82e1-4578-8d3f-85608cd0aa87","414":"737a55bf-3ab9-472d-ac49-61309a13ef57","415":"c5555c97-f068-435d-8e2a-635bbc184c16","416":"bdfe2fc5-2d18-4c27-a2fe-c1a83f962730","417":"31d3adbb-83ec-47aa-b2fa-7c874d710459","418":"03fc3659-217c-4189-9da1-1d9ae8b29f2a","419":"d3f65018-2833-4746-9425-dd78590f4f26","420":"cd90265f-4593-446b-9153-623c2f339dc0","421":"cd4d4ab6-0652-46dd-b887-71714317f470","422":"62ecbf4b-19da-481e-8910-6201521c4bd9","423":"b82023a0-5f10-4648-8230-74b159f6b185","424":"ce84541b-a7f2-4d49-9074-040217580385","425":"c40ae12e-bf54-40ad-aa30-2278d78f86bc","426":"afbc81cf-82bc-4f9b-a96d-079f5cd12130","427":"094e242e-85be-433b-b64a-1c951695568f","428":"4e4e3ca6-b90d-484d-80e4-6fe6b0261532","429":"c11040bb-b868-4ab9-91c6-6a3924cd5c19","430":"a054889a-5380-4361-95e0-4482cf8bbe9f","431":"7ebdfa78-1942-457e-8f30-f178525bb5f1","432":"0e25d9c8-9b52-40db-9979-3d1492d9ffeb","433":"9e41c3e8-db93-41db-9ce3-95b248af6c68","434":"abd1afe4-2fb2-4f91-94aa-39d56f94ca05","435":"7d016aa1-e2b3-4fb0-a51e-8e01df77c6c5","436":"9f96d700-d8bc-4aa1-bce8-f284a9117bc7","437":"5ed70947-70c6-4e1d-9241-7d670874a07f","438":"caeab2bf-c814-43f2-a220-e13b6d557034","439":"d34728c0-95de-49fd-a23d-735c7084556f","440":"10c9e65e-ea35-47c9-a8a7-4de86c6438b8","441":"0639fbba-70be-4398-857c-6786dab39bea","442":"2588c8c7-5347-4d68-b9a0-c794e5fdf408","443":"33d7dc96-ff04-4178-8f67-9c380d26f168","444":"b6904047-0232-442f-b444-d99a440edf2f","445":"10e8b2e3-2a00-46e8-94d5-44c0403df6bf","446":"2d519ca8-1f12-4a8e-9340-aa6648b5e799","447":"0c03433e-8947-4e7d-9dec-793526fe06d1","448":"f5d2db25-114e-473a-8313-96831ccd011e","449":"e71e6f97-fbe8-4bf5-9645-d15179ba0c17","450":"288e3778-900b-4bfd-a455-e94ed75c6ec2","451":"3cc75979-18ac-46c4-9a5b-25b327d99410","452":"ab699540-efc8-4592-bc97-204f6a874b3a","453":"6c0bab88-aa88-4825-9cf5-55df36aa12b8","454":"c7a19161-b361-4074-8c51-2398a0a70d1b","455":"710ee212-563b-42f8-acd1-57515479524d","456":"d51549fd-2e38-4271-b85a-afded45400df","457":"9a0ae372-beb4-4009-b14e-36ed0715af73","458":"f72b5a6e-081e-4889-b041-a90b2ca7ae4e","459":"24f6df16-98dc-4176-93cf-456a5e4d7ab8","460":"0a8d8d02-5d03-4488-8431-e75602fea1e4","461":"c6497cec-51b5-4d94-940e-107990a25afd","462":"d6c8b7aa-bdcd-459a-a2ec-fbbba09cffcf","463":"8331c71c-5725-472d-ad2e-65e4110982b7","464":"3a59c6f8-59dc-4a12-8fd3-c509a9d84906","465":"a8dcd83f-ec5f-40fc-901e-0bf45a8e551b","466":"2078227e-d38c-4f58-abd0-6f4878806a9f","467":"9710b923-9e8c-4762-aa74-bffefb263a7e","468":"576e79a6-07e1-4485-903d-e5929d512c08","469":"953f1c50-c18f-43f4-815a-c19e5aff7af7","470":"ba1d3193-abc5-4b8c-a512-e8fffe95ad99","471":"968caa09-3778-40bd-97f9-0efffa676803","472":"48122725-f6bd-45e5-a6a4-40fa2ffee1d4","473":"b1ec687f-252d-4b35-b57f-a0cf0bb72212","474":"8ca7ff43-d384-4588-a069-48ec57765db0","475":"5c76e88d-29e4-4078-aed2-7686d5b1eec7","476":"362cf2d2-533d-4622-b2c1-490843662d97","477":"fbf439af-f29a-43ac-ab5c-b6608bac3933","478":"37bdb55d-7df3-4fe1-9368-0f6b4984efc4","479":"4ff9cbaf-1c15-4f02-b5af-1f2cc409e52f","480":"9d9e187c-1a60-4f91-b0e2-986eb0743262","481":"a6ae94db-ecaf-4fc9-ac0e-c5b72a7a95ec","482":"87a14a81-8fe9-409c-91d3-895c6dbe4782","483":"2d43ca1f-3b8b-4afa-8e5b-6aff25bab3a0","484":"c34cf6d8-e1be-4463-9ac7-13f6048ea708","485":"dd5186fb-4307-4484-9899-472edbf46343","486":"e421db99-97a7-470f-a058-9387731815ea","487":"88b62167-63ae-45aa-8c8d-fb496b7c13e5","488":"28e3bb10-95af-4c63-934b-880f03d52be0","489":"cd06f23c-9a61-448a-864e-529298e5bbd1","490":"933a73ef-fb60-429f-9126-4f7d2a01605f","491":"3d540639-ac08-4e71-a233-3b483f594c1b","492":"c2dd399b-3563-496c-a7f3-5cc9984e2bd7","493":"279f21cf-ea0b-4e4d-9b89-cff016a72e24","494":"8f9dbf41-6c2d-4e7b-855d-b2432c6942a2","495":"649f2aec-6f59-4157-ac01-0122ce2e6dad","496":"9411e401-27da-4546-b805-3334f200f055","497":"9af822b3-80d9-46bd-9ce0-e6e5c2e61da4","498":"b5d46bb7-d49e-42f6-817b-323fbf6d62b0","499":"911fe222-f9b2-4892-9cd6-8b154d55b2aa","500":"c6176cb5-0a32-4d68-a749-8ee33b2230c1","501":"2a3905ff-2030-421d-a2bf-90fba71c1c5e","502":"a3ea61a8-018c-4277-afd9-ac0a34faa759","503":"62f61c31-a453-44ce-87a2-b5ce142fb052","504":"95a626e6-f1b8-491a-aa31-8de5a2beb513","505":"51b37dbf-2beb-425b-a817-89434838c857","506":"8c2aaf82-442e-46a7-9ea5-1b7862cacb87","507":"ba5c8d03-9093-47a9-a8cd-b721ceeee1dd","508":"967f98c3-d708-4602-9c71-0f34562cdfca","509":"2cdbdb66-132e-4202-90c6-e0a2d8022cc6","510":"afb33fc2-3071-408a-b312-da22478c0a14","511":"f2df1943-1ebf-47c6-9b81-ad613b7c5d5b","512":"272f0dea-8aac-4ca9-98e6-79897e7df0f9","513":"7dd4933f-8a0d-478e-b0a2-1e2c2f1c6957","514":"1e5247be-25c1-45bc-92a6-e2ab1bfaaa8c","515":"d7b990f8-86fc-476c-bc8d-44ba9ecd1c05","516":"7530d72e-1b5b-408c-9abc-59957a90970f","517":"902446c4-ff32-4118-83ac-1f4bf89c56d1","518":"29c40e04-59fb-45dc-a80b-31ee1c4f82ac","519":"a4b0d100-c480-4697-b606-489d80a6d376","520":"90c9965a-1dcc-4786-a2d2-6299fed7260f","521":"b2ca635d-350c-4977-b8d4-2b2dd28cd2d7","522":"a6cfd078-bc39-4ad8-a47f-49097913a27b","523":"ad3e7665-cf63-4135-835f-2f743c69bb36","524":"27692d7a-c05f-4ac4-ac98-f25e359faebc","525":"8aceae65-2dce-44b7-94b1-b4bd34d287a5","526":"2b1b3011-0b81-472e-aa42-26383f453268","527":"f1a3f1bd-b5f7-43bf-9b72-c7a060c24f73","528":"efb3284f-bedc-453f-9519-043f77f2e85d","529":"0d915e65-114c-4945-9585-ac58ad90223f","530":"791dfc7d-24d9-4e87-b639-d19561b6cb26","531":"aa355fd9-295c-43f3-9f11-7a781a9808b0","532":"049b9d0c-1cb3-4511-be7f-9fad6e0a607e","533":"395179c1-37a0-4250-851b-5bc19fd601b6","534":"35abb89b-33b8-4cb4-b3d0-ee132247de8d","535":"0c64d302-c6df-42eb-a0ff-7c90f867ba4b","536":"174b5b41-b70e-485d-b00a-a61cc9826b2c","537":"69feebc3-e241-4dff-a000-736def80c851","538":"c4ef6072-822a-4fa5-b618-e7fc0508c499","539":"b148f5b4-e237-41a0-a1a3-30c455321149","540":"729b7ea3-59d5-4182-9177-684da6fbe0a9","541":"e42929f1-ccd0-4fff-8413-6cb94cf08405","542":"bb0337d9-69f7-48f1-9c12-2de83ceff42d","543":"c34145c5-bc8c-48c3-bafb-ebda44f1e300","544":"04993e98-6b77-46d3-ad80-5278550e9b65","545":"5e73653e-519c-4f13-9f69-1d80c19151d8","546":"217d4bdc-4b0d-4986-be2c-de98efd00f62","547":"7434948c-1b56-4dd0-bb0c-a3d291653f09","548":"d3a729d9-c25f-419c-ba7e-63cd2cac1a4d","549":"09957acb-9916-41ea-8799-66b0359ccb31","550":"84cf449c-e1ae-49a4-a170-c63464106cfe","551":"13d4b7b9-897b-4c71-be66-13aba3c3310b","552":"699ccf4d-45a4-4635-ba4d-850a40ba6e0a","553":"0bc8fd97-b7ae-4a59-98b8-2f60fe4cf874","554":"87103032-b0e5-47c4-a632-ba33da2cbe1b","555":"585d7b93-955d-4099-b9f5-2ea41797f419","556":"0375d846-a203-4813-a330-0d8fd1e6586e","557":"3f349a8a-e5a1-4f43-9cc4-cea2f0f5b623","558":"ea84e01f-5fac-4269-9754-c2c934e4b7d6","559":"48360916-a894-4bd8-b8b5-4595bb7ccf2e","560":"787524d3-1b60-44d8-bef2-d42156c55446","561":"d9952f54-1e40-4e5e-87af-b1011ca18b83","562":"2e691f79-065c-42bb-879a-a91a3cda67e9","563":"37999ce4-4189-4d46-bd77-4b7b5ec4be62","564":"573f6de1-1379-49f8-8342-588bd81a50b7","565":"a2922c8c-4da3-433a-a6b9-85ee0620d876","566":"f163ed91-e4c2-40f0-bb83-0540f4dc9706","567":"6bc790f3-c15a-4aa4-adb1-a1f9c8265b4b","568":"ec907a52-f1aa-40df-8d63-cf1911a42abc","569":"867cea4e-6ea4-4fe2-a4a1-b6230308f8f1","570":"242e07fa-399f-4caa-bfc2-1b77bd2bd538","571":"49714981-369a-4158-aff6-e562ee5f98d5","572":"6e5c9f1d-160b-49b1-9b74-606d2f695c7e","573":"c61c1c19-cc53-49a2-b207-9de6b9ce328a","574":"78b81c0a-44df-4c24-b2a5-5d273737da60","575":"525d85fc-f4d4-49ea-bebd-dc51bc562adf","576":"98467918-ec0c-47e1-8ce6-55949326eb4f","577":"983ebe9d-535e-4bdb-a37f-6b681a96f5a3","578":"1a48f832-e111-430b-9639-38bb63ec749e","579":"5f579567-d069-4a88-b866-d9ef5d85c8c5","580":"1fcaab1e-18b8-4eb0-a36b-0451b58cf403","581":"882c8ced-9183-4fa2-9661-2b150e3bf769","582":"29506948-3688-4a66-999b-05b8aca583f3","583":"4de90e1c-b6e4-48e6-8304-f624123ea33b","584":"75941ed5-78d5-41e9-8dca-e3fd9a5ce9ab","585":"6de2590c-63bc-4f65-bc4d-edaa7b79a342","586":"e5e9f07e-d956-495c-bd47-8749b51916ac","587":"c9ec7ef3-0fe9-4e52-8e92-d6259775b38e","588":"ecfa83b1-fe79-414d-a529-cb72c18e1806","589":"3f6eb436-9c32-4e9a-8dc2-cef5acc17478","590":"73141f86-d17d-4362-91a5-a885fbb815d7","591":"d3e683bf-14e4-482c-90da-d2220018517e","592":"a2b2dfdc-d014-466b-8d45-9432c9866f6a","593":"21de9d6e-f13f-4c1d-862e-17a1428a0c50","594":"b9948d0c-d9da-4c22-adb3-ed3fd8509806","595":"e1bb3954-5a2f-4039-bb6c-3b6489cc007c","596":"49be6be8-e17b-4bc6-b206-3aece5fb3708","597":"503161e4-286e-48d3-bcab-61b8769c806e","598":"bb9ea0e4-c446-49bc-b4f1-3d2daec6c9f0","599":"d557b2d6-4e84-49fc-ba75-35f6c87036c2","600":"ca49a92a-1ae1-45c6-9b8f-aad28d9859c1","601":"a8aebdd1-1479-4b00-8415-8f6da2018dc6","602":"a0945b5c-2f1e-45ce-95fb-721e5657afa7","603":"4fa0ea70-46da-4fed-bde1-01dea3f3056b","604":"9435a1c1-00a3-4a9c-9aa5-05713a221bc5","605":"2a22f176-01c2-42f2-a7d2-2c7054504aa9","606":"46f54639-5f91-4731-93eb-e5c0a7460538","607":"a7f5d8de-4882-4111-9d01-436493e5b2d8","608":"0d554a9d-7d06-48b3-8aea-ffaeaa30380a","609":"e5d065f6-907b-450d-b998-213cdc54eec1","610":"5548037e-8428-43f8-bcb6-d730dbcd0a79","611":"8477bbec-974c-45bf-a1ce-49a48d5b5307","612":"db9ed060-d556-435b-945c-19c923e233d3","613":"a09be1c6-93fd-4b54-b9ca-62e60efbc818","614":"de50f4f6-3d7e-4d6b-ae34-e6a34b24b104","615":"442f3ea3-c7cd-4759-84ee-a0d2fac5a711","616":"b9d21957-633f-4926-9562-4cfab38badee","617":"91183077-8eac-4e29-a197-9190429ef0ba","618":"ac09f902-8921-4a58-aad5-c679706697f6","619":"2ddec223-13c2-4bf9-ba05-66338c51bd45","620":"098917ec-d86a-4cee-9c65-7997295bc248","621":"5f07c608-acf2-4cc5-97d0-1a0a96acb9e3","622":"2f5f91c0-bebf-4de2-bf70-8d9bc1816997","623":"f6f120ee-fbc3-49f8-a2a3-a49e8674b8c8","624":"d09c2121-c7e4-4d99-9556-02b92d17a652","625":"ca924c87-8012-448a-a6c7-a7ff91b0e801","626":"225daaae-6f35-4489-aeb5-73e66e0664a4","627":"b183f553-ce82-47c5-a4ed-6470b83b0d45","628":"6f820954-63e4-4bc9-a299-8266e712d838","629":"686e9438-d86e-4504-b9f6-7029b264924e","630":"bcaf33a4-98c3-41d7-b416-438670e97d53","631":"40659614-1b34-497a-b745-78497e4b2025","632":"6641c0af-44e6-4f6c-8558-f5cdf3c3feee","633":"52a61c5e-07be-4bb9-9649-d3375c66e97e","634":"ee18a848-1319-4ff9-b5e5-3f3710635dbf","635":"a30c0bb3-3f38-46da-8cd3-a813aabaccc9","636":"d48733e2-f003-4643-86a2-cb350fd0dc04","637":"369eefd9-0c39-412e-a294-d0bb2251c509","638":"ea2f8200-a920-40fc-9715-d0f66ae5f492","639":"f07f759c-41d1-4095-8054-dc471687884b","640":"5c51a13b-a083-43dd-80ea-f340e6ef88f8","641":"1278df17-e3e8-4d29-aa8d-0f779cb60b1d","642":"de36c624-8c78-4b52-8d86-431cec16a306","643":"39553630-8281-40e4-96fb-b01c1f3537e6","644":"05475442-0e52-4e0b-9fbb-2715f0e54f97","645":"2ee817c1-f2a3-407a-847d-b97ffb844e45","646":"d077c2a4-4578-4965-9318-c14bb7ac1bd6","647":"5631c137-ebe8-463b-880b-f7a6992d84d9","648":"e4786dcc-b1d5-4380-a0b9-c55d32ae6d82","649":"7854121c-adb3-4615-9646-25ed8bd13b53","650":"26d9ad5a-baf7-473d-a43a-dcc6e6d7ebf6","651":"26e35912-060b-4a13-a299-a2b0019ab6bc","652":"e5d3c632-b2dc-4be7-a5bc-623415f76d28","653":"4927aa86-8882-4b04-8ca7-44052bd00aa9","654":"ee5463c9-b9f8-4438-bb79-7f2364f69b61","655":"2db5d925-700e-4375-abcd-f79bb17a1855","656":"5a2c1219-d4e6-4bf4-a67d-c2b6478dc1e0","657":"b335e984-7bc1-4bb7-a3a6-44139d991f63","658":"1e311aa8-7a58-4ed9-a62e-bf236cf32982","659":"bdafa446-f615-49cb-94f3-d7652dde6cec","660":"b88679fb-0325-4c85-942f-ad9c6ed6545b","661":"3296c67d-6ace-44dd-8e86-335b9a90ad80","662":"caec26b3-847c-4876-80e1-e6206003ecb5","663":"c545a97c-6ac6-4181-a704-28031244aeb1","664":"17575457-18fa-43e0-a8cb-1331efc1c77e","665":"90ca403c-ddb5-4a55-ac6f-2ca2c970d6ad","666":"cefc210e-a06a-4e34-ace5-d24e5a525592","667":"ba05b02a-f2b2-4c5e-ba73-00a519535763","668":"6cc4ec54-404c-4989-9f85-9b59824faf96","669":"6c6cbf7a-6133-425b-8b29-41471889a67e","670":"fe628646-64da-462c-ac5c-1d4f976a129a","671":"9c0d97cf-0c99-4565-a931-b1c5bdf8fc1b","672":"c7b07df3-6afe-4616-9dd4-64f7687e98e9","673":"63fd0968-5f9e-4afd-bde5-0a7f36645ce5","674":"27e60f25-016f-49ca-a7f2-8b1e194f1d78","675":"d61cc329-1652-4b93-9756-ac4380e5bd04","676":"7d55bbc8-8692-40ee-944b-6b172680075a","677":"f878fa09-cb47-4e1c-8f1e-df2544a6882a","678":"12bfb5a0-772e-4d14-bb1a-00077211f70b","679":"1ae7e9fe-c0c4-4bb4-a0d6-28e21789a66c","680":"dee106ea-3e91-4b03-92ef-33038c5681a0","681":"93cbaa78-9185-424f-814b-b568c3358316","682":"ae98ddb2-901d-402b-8ab0-149b778acdb8","683":"6448ddc8-a3df-465f-b819-52f1cf347983","684":"92159a6b-a1b6-4f8b-9c08-503f2cbbd572","685":"1e8bb65d-51b6-42bb-813c-1fba696454e8","686":"e2ea58d4-ee32-432b-8086-29bf5675e5f7","687":"0b73f42f-ff32-4654-8857-aa13413bff33","688":"0cc588ec-037a-4eb1-b498-9f49a0669a36","689":"c82449ab-668c-4720-a641-381877751984","690":"2daf5d7e-b7bc-4017-bc0d-6fe32a676fa0"},"Name":"Oshi - Hover Tank","Version":28,"Blueprint":{"CSI":[2.0,11.0,-1.0,0.0,0.0,0.0,-1.0,3999.99219,0.0005265335,48.0,0.0,0.0,0.0,12500.0,-1.0,-1.0,-1.0,-1.0,1.0,72.26963,395.6924,-1.0,-4.000001,12500.0,-1.0,-1.0,-1.0,-1.0,-1.0,0.0,704.4586,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,400.0,400.0,44901.3828,45000.0,-1.0,-1.0,-1.0,-1.0,0.0,0.0,1094.12024,31000.0,31000.0,-1.0,8.0,-1.0,1975.1499,-1.0,0.0,0.0,-1.0,-1.0,-1.0],"COL":["0,0,0,0","1,0,0,0.5","0,1,0,0.5","0,0,1,0.5","0.1,0.1,0.1,0.5","0.3,0.3,0.3,0.5","0.5,0.5,0.5,0.5","1,1,1,0.1","1,1,1,0.5","1,1,1,0.99","1,0.9215686,0.01568628,0.99","0,0.8,1,0.5","1,0,1,0.99","0.4145674,0.3276713,0.3795907,0.9485886","0.6230633,0.2196603,0.07381284,0.3444198","0.4827406,0.937524,0.8624794,0.3515258","0.5,0,0.5,0.5","0.9875987,0.841344,0.1009094,0.9403581","0.9282702,0.4668711,0.8807704,0.2455964","0.1409403,0.08251715,0.8289655,0.4961253","0.342038,0.01003158,0.1575853,0.476087","0.2337701,0.8035963,0.2125993,0.889596","0.01922619,0.8659286,0.9210978,0.8313341","0.1811987,0.09608281,0.8067435,0.9296897","0.7003992,0.1845002,0.4514099,0.7566563","0.04247355,0.3056784,0.6958982,0.2121522","0.5846705,0.1102082,0.3031397,0.3857712","0,0,0,0","0,0,0,0","0,0,0,0.6","0.1,0,0,0.66","0,0,0,0.7"],"SCs":[],"BLP":["-2,0,0","2,0,0","0,1,13","0,2,13","0,3,13","0,4,13","0,5,13","0,4,4","-1,4,4","1,4,4","-1,4,1","1,4,1","0,2,2","0,3,2","0,2,3","1,2,2","1,3,2","-1,2,2","-1,3,2","-1,4,3","-1,2,3","1,2,3","2,4,0","-2,4,0","1,4,0","-1,4,0","0,4,0","2,5,0","-2,5,0","3,1,15","-3,1,15","3,1,14","-3,1,14","3,1,13","-3,1,13","3,1,8","-3,1,8","3,1,7","-3,1,7","3,1,6","-3,1,6","3,1,5","-3,1,5","3,1,4","-3,1,4","3,1,3","-3,1,3","3,1,2","-3,1,2","3,1,1","-3,1,1","3,1,0","-3,1,0","3,5,15","-3,5,15","3,5,11","-3,5,11","3,5,7","-3,5,7","3,5,0","-3,5,0","-2,6,11","2,6,11","-1,6,11","1,6,11","1,6,15","-1,6,15","2,6,15","-3,5,-4","3,5,-4","-3,4,-4","3,4,-4","-3,3,-4","3,3,-4","-3,2,-4","3,2,-4","-3,1,-4","3,1,-4","-2,0,-4","2,0,-4","-1,0,-4","1,0,-4","1,4,3","0,1,-1","0,5,-1","0,6,-1","0,1,-4","0,2,-1","0,3,-1","0,4,-1","-1,0,-8","-2,0,-8","1,0,-8","2,0,-8","-3,1,-8","3,1,-8","-3,2,-8","3,2,-8","-3,3,-8","3,3,-8","-3,4,-8","3,4,-8","-3,5,-8","3,5,-8","0,1,-5","0,1,-6","0,1,-7","0,1,-8","-1,1,-8","1,1,-8","-1,1,-7","1,1,-7","-1,1,-6","1,1,-6","-1,1,-5","1,1,-5","-1,1,-4","1,1,-4","1,1,-3","1,1,-2","-1,1,-1","1,1,-1","2,1,-1","2,1,-2","2,1,-3","2,1,-4","2,1,-5","2,1,-6","2,1,-7","-2,1,-8","2,1,-8","-1,5,-2","1,5,-2","-1,5,-3","1,5,-3","-1,5,-4","1,5,-4","-1,5,-5","1,5,-5","-1,5,-6","1,5,-6","-1,5,-7","1,5,-7","-1,5,-8","1,5,-8","-2,5,-8","2,5,-8","-2,5,-7","2,5,-7","-2,5,-6","2,5,-6","-2,5,-5","2,5,-5","-2,5,-4","2,5,-4","-2,5,-3","2,5,-3","-2,5,-2","2,5,-2","0,5,-8","0,5,-6","0,5,-4","0,5,-5","0,5,-7","-1,2,-8","1,2,-8","-1,2,-7","1,2,-7","-1,2,-6","1,2,-6","-1,2,-5","1,2,-5","-1,2,-4","1,2,-4","-1,2,-3","1,2,-3","-1,2,-2","1,2,-2","-2,2,-2","2,2,-2","-2,2,-3","2,2,-3","-2,2,-4","2,2,-4","-2,2,-5","2,2,-5","-2,2,-6","2,2,-6","-2,2,-7","2,2,-7","-2,2,-8","2,2,-8","0,2,-8","0,2,-7","0,2,-6","0,2,-5","0,2,-4","0,2,-3","0,2,-2","0,6,-8","0,6,-7","0,6,-6","0,6,-5","0,6,-4","0,6,-3","-1,6,-2","1,6,-2","-1,6,-3","1,6,-3","-1,6,-4","1,6,-4","-1,6,-5","1,6,-5","-1,6,-6","1,6,-6","-1,6,-7","1,6,-7","-1,6,-8","1,6,-8","-2,6,-8","2,6,-8","-2,6,-7","2,6,-7","-2,6,-6","2,6,-6","-2,6,-5","2,6,-5","-2,6,-4","2,6,-4","-2,6,-3","2,6,-3","-2,6,-2","2,6,-2","0,6,-2","0,7,-6","0,7,-5","-1,7,-8","1,7,-8","-2,1,-13","-2,1,-12","-2,1,-11","-2,2,-13","-2,2,-12","-2,2,-11","-2,3,-13","-2,3,-12","-2,3,-11","-2,3,-10","-2,3,-9","-2,4,-13","-2,4,-12","-2,4,-11","-2,4,-10","-2,4,-9","-2,5,-13","-2,5,-12","-2,5,-11","-2,5,-10","-2,5,-9","-1,1,-13","-1,1,-12","-1,1,-11","-1,1,-10","-1,3,-13","-1,3,-12","-1,3,-11","-1,3,-10","-1,4,-13","-1,4,-12","-1,4,-11","-1,4,-10","-1,4,-9","-1,5,-13","-1,5,-12","-1,5,-11","-1,5,-10","-1,5,-9","0,1,-13","0,1,-12","0,1,-11","0,1,-10","0,1,-9","0,5,-13","0,5,-12","0,5,-10","0,5,-9","1,1,-13","1,1,-12","1,1,-11","1,1,-10","1,1,-9","1,2,-13","1,2,-12","1,2,-11","1,2,-9","1,3,-13","1,3,-12","1,3,-11","1,3,-10","1,3,-9","1,4,-13","1,4,-12","1,4,-11","1,4,-10","1,4,-9","1,5,-13","1,5,-12","1,5,-11","1,5,-10","1,5,-9","2,1,-13","2,1,-12","2,1,-11","2,1,-10","2,1,-9","2,2,-13","2,2,-12","2,2,-11","2,2,-10","2,2,-9","2,3,-13","2,3,-12","2,3,-11","2,3,-10","2,3,-9","2,4,-13","2,4,-12","2,4,-11","2,4,-10","2,4,-9","2,5,-13","2,5,-12","2,5,-11","2,5,-10","2,5,-9","-3,6,15","3,6,15","-3,6,11","3,6,11","-3,6,7","3,6,7","-3,6,3","3,6,3","-3,0,15","3,0,15","-3,0,11","3,0,11","-3,0,7","3,0,7","-3,0,3","3,0,3","-3,0,-1","3,0,-1","-3,0,-5","3,0,-5","-2,-1,15","2,-1,15","-2,-1,11","2,-1,11","-2,-1,7","2,-1,7","-4,5,15","4,5,15","-4,5,7","4,5,7","-4,1,15","4,1,15","-4,1,7","4,1,7","-4,2,8","4,2,8","-4,4,8","4,4,8","-4,4,4","4,4,4","-4,1,3","4,1,3","-4,5,3","4,5,3","-4,4,3","4,4,3","-4,3,3","4,3,3","-4,2,3","4,2,3","2,-1,1","-2,-1,1","1,-1,1","-1,-1,1","2,-1,2","-2,-1,2","2,-1,3","-2,-1,3","-2,7,5","2,7,5","-3,6,-1","3,6,-1","-3,6,-5","3,6,-5","-2,7,-9","2,7,-9","-3,6,-9","3,6,-9","-3,1,-9","3,1,-9","-3,5,-9","3,5,-9","-3,0,-9","3,0,-9","-1,0,-10","1,0,-10","-2,0,-10","2,0,-10","-3,1,-10","3,1,-10","-3,2,-10","3,2,-10","-3,3,-10","3,3,-10","-3,4,-10","3,4,-10","-3,5,-10","3,5,-10","-1,7,-10","1,7,-10","-2,7,-10","2,7,-10","-3,6,-10","3,6,-10","-3,0,-10","3,0,-10","-2,6,-10","2,6,-10","-2,6,-14","2,6,-14","-1,6,-14","1,6,-14","-2,5,-14","2,5,-14","-2,4,-14","2,4,-14","-2,3,-14","2,3,-14","-2,2,-14","2,2,-14","-1,1,-14","1,1,-14","-2,1,-14","2,1,-14","0,2,-14","-1,2,-15","1,2,-15","0,6,-14","0,1,-14","0,2,-15","0,3,-15","0,4,-15","0,5,-15","-1,5,-16","1,5,-16","0,5,-16","-1,4,-16","1,4,-16","-1,3,-16","1,3,-16","-1,2,-16","1,2,-16","0,2,-16","0,4,-16","-2,7,1","2,7,1","-2,7,0","2,7,0","-4,3,10","-4,3,9","-1,7,2","1,7,2","-2,0,-9","2,0,-9","0,5,4","0,4,1","0,7,-1","0,7,0","0,7,2","0,7,3","0,7,4","0,7,5","0,7,6","0,7,7","0,7,8","0,7,9","0,7,10","0,7,12","0,7,13","0,7,14","0,5,-2","0,5,-3","0,1,-2","0,1,-3","-1,2,-1","1,2,-1","1,6,-1","-1,6,-1","1,7,4","-1,7,4","1,7,5","-1,7,5","0,7,1","-2,8,1","2,8,1","-1,8,1","1,8,1","0,7,-2","-2,1,12","2,1,12","-2,3,12","2,3,12","-2,1,15","-2,1,16","-2,1,17","-2,1,18","-2,1,19","-2,2,15","-2,2,16","-2,2,17","-2,2,18","-2,2,19","-2,3,15","-2,3,16","-2,3,17","-2,3,18","-2,3,19","-2,4,16","-2,4,17","-2,4,18","-2,4,19","-2,5,17","-2,5,18","-2,5,19","-1,1,15","-1,1,16","-1,1,17","-1,1,18","-1,1,19","-1,2,16","-1,2,17","-1,2,18","-1,2,19","-1,3,17","-1,3,18","-1,3,19","-1,4,17","-1,4,18","-1,4,19","-1,5,17","-1,5,18","0,1,15","0,1,16","0,1,17","0,1,18","0,1,19","0,2,17","0,2,18","0,2,19","0,3,18","0,3,19","0,4,18","0,4,19","0,5,15","0,5,19","1,1,15","1,1,16","1,1,17","1,1,18","1,1,19","1,2,15","1,2,16","1,2,17","1,2,18","1,2,19","1,3,17","1,3,18","1,3,19","1,4,18","1,4,19","1,5,15","1,5,18","1,5,19","2,1,15","2,1,16","2,1,17","2,1,18","2,1,19","2,2,15","2,2,16","2,2,17","2,2,18","2,2,19","2,3,15","2,3,16","2,3,17","2,3,18","2,3,19","2,4,16","2,5,17","2,5,18","2,5,19","-1,6,16","1,6,16","-2,6,16","2,6,16","-1,-1,16","1,-1,16","-2,-1,16","2,-1,16","-3,0,16","3,0,16","-4,1,16","4,1,16","-4,5,16","4,5,16","-3,6,16","3,6,16","-3,5,16","3,5,16","-3,1,16","3,1,16","-2,0,16","2,0,16","-3,2,19","3,2,19","-3,3,19","3,3,19","-3,4,19","3,4,19","-5,3,10","-3,3,9","-3,3,10","-3,2,11","-3,4,11","-4,4,11","-4,3,11","-4,2,11","-3,3,11","3,3,11","-4,2,10","4,2,10","-4,4,10","4,4,10","-2,2,14","2,2,14","-4,1,11","-4,5,11","-4,5,8","-4,5,9","-4,5,10","4,5,10","-4,1,10","4,1,10","-4,1,9","4,1,9","-4,1,8","4,1,8","-5,4,11","-5,3,11","-5,2,11","-3,4,10","-3,1,11","3,1,11","-3,1,12","3,1,12","-4,2,12","4,2,12","-4,2,13","4,2,13","-4,2,14","4,2,14","-4,2,15","4,2,15","-4,2,16","4,2,16","-4,2,17","4,2,17","-4,2,18","4,2,18","-4,3,12","-4,3,13","-4,3,14","4,3,14","-4,3,15","-4,3,16","-4,3,17","4,3,17","-4,3,18","4,3,18","-4,4,12","4,4,12","-4,4,13","4,4,13","-4,4,14","-4,4,15","-4,4,16","-4,4,17","-4,4,18","0,4,20","-2,4,20","-2,4,21","1,4,21","-1,4,21","0,4,21","0,1,21","1,1,21","-1,1,21","2,2,21","-2,2,21","-2,3,21","2,1,21","-2,1,21","1,2,21","-1,3,21","0,1,20","1,1,20","-1,1,20","2,2,20","-2,2,20","1,0,15","-1,0,15","0,-1,2","-1,-1,2","1,-1,2","-1,-1,4","1,-1,4","-1,-1,5","1,-1,5","-1,-1,6","1,-1,6","-1,-1,7","1,-1,7","-1,-1,8","1,-1,8","-1,-1,9","1,-1,9","-1,-1,10","1,-1,10","-1,-1,11","1,-1,11","-1,-1,12","1,-1,12","-1,-1,13","1,-1,13","0,-1,4","0,-1,5","0,-1,6","0,-1,7","0,-1,8","0,-1,9","0,-1,10","0,0,2","-1,6,-9","1,6,-9","0,6,-11","-1,6,-11","1,6,-11","0,6,-9","1,6,-13","-1,6,-13","0,7,-10","0,8,0","-5,3,9","5,3,9","-5,4,10","-1,-1,15","-1,-1,14","1,-1,14","0,8,-3","0,9,-3","-2,8,-1","2,8,-1","-2,8,0","2,8,0","-2,8,-2","2,8,-2","-1,8,0","1,8,0","-1,8,-5","1,8,-5","0,8,-5","-2,8,-5","2,8,-5","-2,7,-5","2,7,-5","-2,7,-4","2,7,-4","-2,8,-4","2,8,-4","0,7,-9","0,7,-8","0,7,-7","0,7,-4","0,8,-1","0,7,-3","1,7,-3","-1,7,-2","0,5,20","1,5,20","2,5,20","-1,5,20","-2,5,20","1,0,20","-1,0,20","2,1,20","-2,1,20","2,0,20","-2,0,20","0,0,20","3,2,20","-3,2,20","3,3,20","-3,3,20","-3,4,20","3,5,20","-3,5,20","3,1,20","-3,1,20","1,8,-4","-1,8,-4","-2,2,-1","2,2,-1","-1,4,2","0,0,3","0,0,1","0,-1,1","0,-1,0","0,-1,-1","0,-1,-2","0,-1,-3","0,-2,0","-1,0,2","1,0,2","0,0,12","0,0,13","1,0,19","-1,0,19","0,-1,13","0,-1,12","0,0,14","-1,7,-9","1,7,-9","-4,3,5","4,3,5","-4,3,6","4,3,6","-4,3,7","4,3,7","-4,3,8","4,3,8","-3,4,9","3,4,9","-1,7,-4","1,7,-4","1,7,-2","-3,2,9","-1,8,2","1,8,2","-1,6,7","1,6,7","-2,6,7","2,6,7","-1,6,3","1,6,3","0,-2,2","-1,0,0","1,0,0","-1,5,4","1,5,4","-2,5,4","2,5,4","-2,4,4","2,4,4","-2,3,4","2,3,4","-2,2,4","2,2,4","-2,1,4","2,1,4","-1,1,4","1,1,4","0,1,4","0,0,15","-2,0,15","2,0,15","-2,0,11","2,0,11","-1,0,11","1,0,11","-2,0,7","2,0,7","-1,0,7","1,0,7","0,-1,-8","0,-1,-7","0,-1,-6","0,-1,-5","0,-1,-4","-1,-1,-4","1,-1,-4","-2,-1,-4","2,-1,-4","-2,-1,-5","2,-1,-5","-2,-1,-6","2,-1,-6","-2,-1,-7","2,-1,-7","-2,-1,-8","2,-1,-8","-2,-1,-10","2,-1,-10","-2,-1,-11","2,-1,-11","-2,-1,-12","2,-1,-12","-1,-1,-12","1,-1,-12","-1,-1,-11","1,-1,-11","-1,-1,-10","1,-1,-10","-1,-1,-9","1,-1,-9","-1,-1,-8","1,-1,-8","-1,-1,-7","1,-1,-7","-1,-1,-6","1,-1,-6","-1,-1,-5","1,-1,-5","0,-1,-9","0,-1,-10","0,-1,-11","0,-1,-12","0,-1,-13","-1,-1,-13","1,-1,-13","-1,-1,-3","1,-1,-3","0,-1,3","-1,-1,3","1,-1,3","0,7,11","-1,2,15","-1,3,16","0,2,16","0,3,17","1,3,16","-1,0,-9","0,-1,14","0,-1,15","-2,6,-1","2,6,-1","-2,6,0","2,6,0","-2,6,1","2,6,1","-2,6,2","2,6,2","-2,6,3","2,6,3","0,8,-4","0,6,-13","0,7,-12","0,8,-13","0,7,-13","0,3,3","0,4,3","-1,3,3","1,3,3","0,4,-17","0,3,-17","-5,2,10","0,4,-13","0,3,-13","0,2,-13","0,4,-12","0,3,-12","0,2,-12","0,4,-11","0,3,-11","0,4,-10","0,3,-10","0,4,-9","0,3,-9","0,5,-11","0,3,22","0,2,22","-1,3,22","-1,2,22","1,2,22","-1,7,-3","1,0,-9","1,0,3","-1,0,3","0,6,-12","0,6,-10","-1,7,1","1,7,1","2,5,5","2,5,7","2,5,10","2,5,11","2,4,5","2,4,7","2,4,8","2,4,10","2,4,11","2,3,5","2,3,6","2,3,8","2,3,9","2,3,11","2,2,5","2,2,7","2,2,8","2,2,10","2,2,11","2,1,5","2,1,7","2,1,10","1,5,5","1,5,7","1,5,8","1,5,10","1,5,11","1,4,5","1,4,6","1,4,7","1,4,8","1,4,9","1,4,10","1,4,11","1,3,5","1,3,6","1,3,7","1,3,8","1,3,9","1,3,10","1,2,5","1,2,6","1,2,7","1,2,8","1,2,9","1,2,10","1,2,11","1,1,5","1,1,7","1,1,8","1,1,10","1,1,11","0,5,5","0,5,6","0,5,7","0,5,8","0,5,9","0,5,10","0,5,11","0,4,5","0,4,6","0,4,7","0,4,8","0,4,9","0,4,10","0,4,11","0,3,5","0,3,6","0,3,7","0,3,8","0,3,9","0,3,10","0,3,11","0,2,5","0,2,6","0,2,7","0,2,8","0,2,9","0,2,10","0,1,5","0,1,6","0,1,7","0,1,8","0,1,9","0,1,10","-1,5,5","-1,5,7","-1,5,8","-1,5,10","-1,4,5","-1,4,6","-1,4,7","-1,4,8","-1,4,9","-1,4,10","-1,4,11","-1,3,5","-1,3,6","-1,3,7","-1,3,8","-1,3,9","-1,3,10","-1,2,5","-1,2,6","-1,2,7","-1,2,8","-1,2,9","-1,2,10","-1,2,11","-1,1,5","-1,1,7","-1,1,8","-1,1,10","-1,1,11","-2,5,5","-2,5,7","-2,5,11","-2,4,5","-2,4,7","-2,4,8","-2,4,10","-2,4,11","-2,3,5","-2,3,6","-2,3,8","-2,3,9","-2,2,5","-2,2,7","-2,2,8","-2,2,10","-2,2,11","-2,1,5","-2,1,7","-2,1,8","-2,1,9","-2,1,10","-2,5,14","-2,5,12","-2,6,12","-2,6,15","0,1,11","2,1,11","-2,1,11","2,1,8","2,1,9","2,3,7","-2,3,7","-1,2,-14","1,2,-14","-2,1,6","2,1,6","-2,3,11","2,5,9","-2,5,9","-2,5,6","2,5,6","0,5,0","2,5,14","2,5,12","0,0,19","0,0,11","0,0,7","0,0,-1","0,0,-8","0,0,-9","0,0,-10","0,6,16","0,-1,16","0,6,15","0,6,11","0,6,3","0,6,7","0,0,0","-2,1,-7","5,3,11","-2,1,-6","-2,1,-4","-2,1,-5","5,2,11","4,3,11","4,3,10","4,3,12","5,2,10","4,3,13","-1,1,-3","-1,2,-12","-1,2,-13","-1,2,-11","-2,1,-9","-2,1,-10","1,2,-10","-2,1,-3","-1,1,-2","-2,1,-2","2,3,21","-2,1,-1","4,3,9","4,4,16","4,4,15","4,4,17","4,5,11","4,4,18","4,3,16","4,5,8","4,5,9","3,4,20","4,4,14","4,3,15","3,4,11","3,3,9","3,2,9","3,3,10","4,2,11","5,3,10","5,4,11","5,4,10","4,1,11","3,2,11","4,4,11","3,4,10","-2,2,-10","-1,4,16","-2,4,15","0,4,17","1,5,17","0,3,16","-1,3,15","1,3,15","1,4,16","2,4,15","-2,5,16","0,2,15","0,5,17","1,4,15","2,5,15","0,5,16","0,4,15","-1,5,15","-2,5,15","-1,5,16","0,4,16","1,5,16","0,3,15","-1,4,15","2,5,16","-1,2,-9","0,2,-9","1,4,17","2,4,18","2,4,17","-1,3,-9","0,2,-11","-2,2,-9","0,2,-10","-1,2,-10","-1,1,-9","2,4,19","-1,5,19","2,4,21","2,4,14","0,5,18","-2,4,14","2,4,20","-1,-2,3","0,-2,3","1,-1,15","1,3,22","1,-2,3"],"BLR":[0,0,2,2,2,2,2,4,4,4,4,4,0,0,0,0,0,0,1,0,18,17,6,6,6,6,6,3,1,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,4,4,0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,15,13,0,0,0,0,0,0,0,0,0,0,12,12,13,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,5,7,5,7,5,7,5,7,5,7,5,7,5,7,7,7,5,5,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,11,9,9,9,9,9,9,9,5,5,5,5,5,5,5,7,5,7,5,7,5,7,5,7,5,7,5,7,5,7,5,7,5,7,5,7,5,7,5,7,5,7,6,0,0,0,0,20,20,20,20,20,20,4,4,4,4,4,21,21,21,21,21,21,21,21,21,21,3,3,0,1,7,7,19,11,7,7,19,11,11,3,3,0,1,1,3,3,0,1,1,3,3,1,1,3,3,0,1,1,9,9,16,5,9,9,16,5,5,9,9,16,5,5,3,3,0,1,1,20,20,20,20,20,20,20,20,20,20,21,20,20,20,20,21,21,21,21,21,21,21,21,21,21,19,17,19,17,19,17,19,17,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,19,17,19,17,14,14,14,14,2,2,2,2,6,6,19,17,19,17,19,17,19,17,19,17,14,14,14,14,13,15,13,15,18,16,19,17,19,17,3,1,3,1,10,10,0,0,15,13,14,14,14,14,19,17,19,17,19,17,19,17,19,17,2,2,2,2,2,2,19,17,2,2,2,2,2,2,19,17,19,17,19,17,19,17,14,14,6,6,8,8,8,2,14,0,0,0,0,23,22,10,23,22,23,22,6,6,6,6,18,16,0,0,0,0,0,0,10,10,2,4,19,0,0,0,0,0,0,0,0,0,0,0,0,0,4,6,14,14,11,9,9,11,3,1,0,0,0,18,16,20,21,0,8,8,8,8,20,20,20,20,20,20,20,20,20,20,4,4,4,4,4,21,21,21,21,21,21,21,3,3,0,1,1,7,18,11,11,19,11,11,19,11,11,0,1,3,3,0,1,1,23,23,23,23,22,22,22,3,1,3,3,0,1,1,9,9,16,5,5,16,5,5,5,5,3,1,1,20,20,20,20,20,20,20,20,20,20,21,20,20,20,20,21,21,21,21,0,0,0,0,12,12,12,12,12,12,12,12,18,16,18,16,18,16,12,12,12,12,2,2,2,2,2,2,23,17,0,21,21,0,0,0,21,20,2,2,2,2,14,14,12,0,3,3,3,1,12,12,15,13,15,13,20,20,20,21,2,2,11,9,18,16,18,16,18,16,18,16,18,16,18,16,18,16,18,18,18,16,18,18,18,16,18,16,18,16,18,16,18,18,18,18,18,0,3,21,8,8,8,4,4,4,20,21,21,4,4,3,1,9,11,9,11,9,2,2,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,6,10,0,5,7,2,0,0,0,0,18,16,20,10,14,14,0,2,3,1,3,1,3,1,2,2,2,2,2,19,17,2,2,0,0,3,1,0,0,0,0,2,0,5,1,8,8,8,8,8,4,4,4,4,4,4,4,20,21,20,21,21,20,21,16,18,0,0,0,0,1,8,4,14,2,14,14,14,14,12,12,0,0,2,2,12,6,8,0,0,11,9,11,9,11,9,0,0,0,0,0,0,12,0,0,0,2,2,2,2,2,2,14,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,7,7,23,23,9,0,14,14,6,6,0,0,0,0,0,0,2,2,0,12,4,0,0,0,5,2,2,0,0,1,3,3,3,3,3,3,2,2,1,1,1,1,2,8,4,21,21,20,16,0,0,0,0,0,2,2,3,3,0,21,9,17,16,5,2,10,17,6,17,9,9,17,16,3,9,9,15,9,3,2,0,3,20,2,17,0,0,17,17,19,14,17,14,14,17,17,14,17,14,14,17,17,8,15,14,12,12,14,6,0,4,0,4,2,21,10,0,8,12,0,14,15,14,14,14,14,14,14,14,6,14,4,6,14,14,10,14,14,13,14,13,1,2,0,18,2,19,0,0,19,19,20,14,19,14,14,19,19,14,19,14,14,19,19,8,13,14,12,13,14,1,1,19,11,19,18,18,14,10,19,6,19,11,19,18,11,19,11,13,22,12,8,2,14,10,2,3,3,1,3,3,0,0,8,8,0,0,0,14,14,0,0,0,2,2,2,2,2,2,0,0,14,0,12,2,2,2,14,0,0,21,0,0,0,21,0,0,16,3,16,0,7,7,18,20,20,5,0,0,0,20,15,0,16,16,16,0,16,16,1,1,20,16,16,20,19,0,0,0,22,21,21,12,20,0,20,20,7,21,22,0,23,7,9,9,21,21,23,0,9,21,3,22,3,21,3,22,3,23,7,21,11,1,16,21,21,11,2,20,1,11,1,21,1,20,4,1,4,1,12,12,10,20,12],"BP1":["0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,50,100,75","0,0,0,0","0,0,0,3","0,0,0,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","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","50,0,0,0","23,18,0,0","10,10,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0.535928,3","0,0,0.5363342,3","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0.1,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","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,1500,-25,2000","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,1","0,1500,-15,2000","0,0,0,0","0,0,0,0","2,-15,10,0.1","2,-15,0,0.1","2,-15,-10,0.1","0,0,45,2","0,0.1,45,2","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","1,0,0,0.3","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","20,20,0,0","20,20,0,0","20,20,0,0","20,20,0,0","52,40,0,0","52,40,0,0","40,40,0,0","40,40,0,0","103,82,0,0","103,82,0,0","81,80,0,0","81,80,0,0","80,83,0,0","80,83,0,0","20,20,0,0","20,20,0,0","52,40,0,0","52,40,0,0","40,40,0,0","103,82,0,0","81,80,0,0","81,80,0,0","80,83,0,0","80,83,0,0","20,20,0,0","20,20,0,0","20,20,0,0","20,20,0,0","52,40,0,0","40,40,0,0","103,82,0,0","81,80,0,0","80,83,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0.2,180,3","0,0,0,0","0,0,0,0","20,20,0,0","20,20,0,0","20,20,0,0","20,20,0,0","52,40,0,0","52,40,0,0","40,40,0,0","40,40,0,0","63,30,0,0","63,30,0,0","81,82,0,0","81,82,0,0","82,82,0,0","82,82,0,0","82,82,0,0","82,82,0,0","80,80,0,0","80,80,0,0","80,69,0,0","80,69,0,0","20,20,0,0","20,52,0,0","40,40,0,0","63,66,0,0","81,81,0,0","81,80,0,0","80,60,0,0","0,1500,-15,2000","0,0,0,0","0,0,0,0","0,0,0,0","26,18,170,51","14,18,170,51","26,9,80,51","0,0,0,0","0,0,0,0","14,9,82,51","0,0,0,0","0,0,0,0","0,0,0,0","1,0,0,0","0,0,0.7532198,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","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","8.760152E+08,0,0,0","0,0,0,0","0,0,0,0","10,2,0,0","0,0,0,0","0,0,0,0","0,0,0,1","20,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,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,1","19,13,120,2","0,0,180,5","2,0,-90,0.1","67,67,0,0","67,67,0,0","67,67,0,0","0,0,0,0","1,0,0,0.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,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","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","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,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","2,0,-90,0.1","2,10,-80,0.1","2,10,-80,0.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","0,0,0,0","0,0,0,1","0,0,0,1","0,0,0,0","0,0,0,1","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,2","0,0,0,2","0,0,0.0002031064,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","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,5.294117","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","1,0.1,1,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","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","2,15,0,0.1","0,0,0,0","20,20,0,0","0,0,0,1","20,20,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","103,82,0,0","40,40,0,0","81,80,0,0","0,0,0,0","80,83,0,0","103,82,0,0","0,0,0,0","0,0,0,0","0,0,0,0","52,40,0,0","40,40,0,0","0,0,0,0","0,0,0,1","0,0,0,0","0,1500,-15,2000","2,15,-10,0.1","0,0,0,0","0,0,0,0","1,0,0,0","0,0,0,0","0,0,0,0","2,15,10,0.1","1,0,0,0.4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0.753626,1","0,0,0,0","0,0,0,0"],"BP2":["0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","20,250,50,15","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","9,0,10,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.535928,4","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0,4","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.0002031063,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.535928,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.5361311,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.5363342,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.0002031063,4","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.0002031063,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.5363342,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","-180,180,-180,180","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","50,1,40,-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","10,1,0,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.7532198,4","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.0002031063,4","0,0,0,0","0,0,0,0","10,1,0,4","0,0,0,0","0,0,0,0","10,1,0.0002031063,4","0,0,0,0","0,0,0,0","10,1,0.7532198,4","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.7534229,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.753626,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.0002031063,4","0,0,0,0","0,0,0,0","10,1,0,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","50,1,40,-1","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","-180,180,-180,180","-180,180,-180,180","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,800,0,0","10,750,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","133.6,0,0,0","133.6,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,800,0,0","10,750,0,0","0,0,0,0","0,0,0,0","133.6,0,0,0","133.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","10,800,0,0","0,0,0,0","0,0,0,0","133.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","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","-180,180,-180,180","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,650,0,0","10,650,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","133.6,0,0,0","133.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","0,0,0,0","0,0,0,0","0,0,10,850","0,0,0,0","0,0,2,0","88,0,111,0","133.6,0,0,0","0,0,0,0","50,1,40,-1","-180,180,-180,180","0,0,0,0","0,0,0,0","5000,0,0,0","5000,10,0,0","4000,0,8,0","0,0,0,0","0,0,0,0","3000,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","1,0,0,0","0,0,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,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","750,0,0,0","-180,180,-180,180","0,0,0,0","0,20,1,20","2,20,4,20","6,20,8,20","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","1,-1,-1,-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","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.0002031063,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","133.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","10,750,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","50,1,40,-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","10,1,0.753626,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.7534229,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","10,1,0.0002031063,4","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0"],"BCI":[31,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,31,31,31,31,31,31,31,0,0,0,0,0,0,0,0,0,0,31,31,31,31,0,0,0,0,0,0,0,0,31,31,31,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,31,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,31,31,31,31,31,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,31,31,31,31,31,31,31,31,31,31,0,0,0,0,31,31,0,0,0,0,0,0,0,0,31,31,31,31,0,0,0,0,0,0,0,0,0,0,31,31,31,31,0,0,0,0,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,0,0,0,30,30,0,0,0,0,31,31,30,31,31,31,31,31,31,30,30,31,31,31,31,0,0,31,31,31,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,31,31,31,31,0,31,31,31,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,31,31,31,31,31,31,31,31,0,0,0,0,0,0,0,0,0,0,0,0,31,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,31,31,31,30,30,31,31,31,31,31,31,31,31,31,0,0,0,0,0,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,0,0,0,30,31,31,0,31,31,30,30,0,0,0,31,31,31,31,0,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,0,0,0,0,30,0,0,0,30,31,31,31,31,31,31,31,31,31,31,30,0,0,0,0,0,0,0,0,0,31,31,0,0,0,0,0,30,30,30,30,30,30,0,0,30,30,0,0,0,0,0,31,31,6,6,6,6,6,6,0,0,0,0,0,0,0,0,31,31,31,31,31,31,31,31,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,31,0,0,31,31,0,30,30,30,30,31,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,31,31,31,31,30,31,31,0,0,0,0,0,0,31,30,30,0,0,0,0,0,0,0,0,0,0,30,30,30,30,0,0,0,0,0,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,30,31,31,31,31,31,31,31,0,30,0,0,2,3,3,3,2,0,0,0,3,2,2,3,2,3,2,0,0,2,3,2,3,3,2,0,0,2,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,3,3,2,2,2,3,2,0,0,2,0,2,2,0,0,3,0,0,0,0,0,0,2,2,0,2,2,0,0,2,2,2,3,2,3,2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,3,3,2,3,0,2,0,0,2,3,2,2,3,2,2,0,0,0,3,2,3,3,3,3,0,1,31,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,30,30,30,30,30,30,30,30,30,30,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,31,0,0,0,0,31,30,31,31,31],"BEI":[14.0,16.0,8787901.0,0.0,2.0,8.0,77.0,111.0,114.0,116.0,97.0,122.0,101.0,108.0,1.0,2.0,3.0,9798002.0,15.0,10.0,8787903.0,0.01,0.1,1.0,0.1,0.1,-0.25,-2.0,-0.1,9798004.0,16.0,4.0,8787907.0,1.0,30.0,9798008.0,17.0,3.0,8787895.0,0.0,9797996.0,21.0,5.0,8787902.0,0.15,0.1,1.0,9798003.0,145.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,146.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,147.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,148.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,149.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,150.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,151.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,152.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,153.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,154.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,155.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,156.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,157.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,158.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,159.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,160.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,161.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,162.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,163.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,164.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,165.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,166.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,167.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,168.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,169.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,170.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,171.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,172.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,173.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,174.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,175.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,176.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,177.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,178.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,179.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,180.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,181.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,182.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,183.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,184.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,185.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,186.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,187.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,188.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,189.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,190.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,191.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,192.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,193.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,194.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,195.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,196.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,197.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,198.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,199.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,200.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,201.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,202.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,203.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,204.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,205.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,206.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,207.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,208.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,209.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,210.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,211.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,212.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,213.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,214.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,215.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,216.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,217.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,218.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,219.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,220.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,221.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,222.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,223.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,224.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,225.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,226.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,227.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,228.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,229.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,230.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,231.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,232.0,6.0,8787885.0,0.0,7.0,-9.0,0.0,9797986.0,244.0,8.0,8787880.0,5.0,0.0,0.0,6.0,0.0,0.0,9797981.0,261.0,8.0,8787880.0,11.0,14.0,0.0,12.0,13.0,0.0,9797981.0,265.0,8.0,8787880.0,4.0,7.0,0.0,8.0,3.0,0.0,9797981.0,269.0,8.0,8787880.0,13.0,4.0,7.0,14.0,8.0,3.0,9797981.0,274.0,8.0,8787880.0,11.0,14.0,0.0,12.0,13.0,0.0,9797981.0,279.0,8.0,8787880.0,11.0,0.0,0.0,12.0,0.0,0.0,9797981.0,288.0,8.0,8787880.0,11.0,13.0,0.0,12.0,14.0,0.0,9797981.0,293.0,8.0,8787880.0,8.0,13.0,3.0,4.0,14.0,7.0,9797981.0,297.0,8.0,8787880.0,8.0,3.0,0.0,4.0,7.0,0.0,9797981.0,302.0,8.0,8787880.0,8.0,14.0,3.0,4.0,13.0,7.0,9797981.0,307.0,8.0,8787880.0,11.0,13.0,0.0,12.0,14.0,0.0,9797981.0,320.0,8.0,8787880.0,5.0,0.0,0.0,6.0,0.0,0.0,9797981.0,477.0,8.0,8787880.0,11.0,0.0,0.0,12.0,0.0,0.0,9797981.0,478.0,8.0,8787880.0,11.0,0.0,0.0,12.0,0.0,0.0,9797981.0,482.0,15.0,8787881.0,1.0,0.0,0.337,1.0,2400.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,9797982.0,496.0,5.0,8787882.0,8.760152E+08,8.760152E+08,8.760152E+08,9797983.0,507.0,3.0,8787908.0,0.0,9798009.0,527.0,8.0,8787880.0,5.0,0.0,0.0,6.0,0.0,0.0,9797981.0,541.0,8.0,8787880.0,11.0,14.0,5.0,12.0,13.0,0.0,9797981.0,545.0,8.0,8787880.0,4.0,14.0,3.0,8.0,13.0,7.0,9797981.0,548.0,8.0,8787880.0,4.0,3.0,0.0,8.0,7.0,0.0,9797981.0,551.0,8.0,8787880.0,13.0,4.0,3.0,14.0,8.0,7.0,9797981.0,554.0,8.0,8787880.0,11.0,14.0,0.0,12.0,13.0,0.0,9797981.0,558.0,8.0,8787880.0,11.0,5.0,0.0,12.0,0.0,0.0,9797981.0,565.0,8.0,8787880.0,6.0,0.0,0.0,5.0,0.0,0.0,9797981.0,572.0,8.0,8787880.0,11.0,13.0,5.0,12.0,14.0,0.0,9797981.0,577.0,8.0,8787880.0,8.0,13.0,7.0,4.0,14.0,3.0,9797981.0,580.0,8.0,8787880.0,8.0,7.0,0.0,4.0,3.0,0.0,9797981.0,598.0,8.0,8787880.0,5.0,0.0,0.0,6.0,0.0,0.0,9797981.0,704.0,21.0,8787880.0,0.0,0.0,0.0,0.0,0.0,0.0,9797981.0,8787900.0,2.0,19.0,16.0,8.0,0.0,-45.0,0.0,0.0,1.0,0.8,0.5,9798001.0,705.0,21.0,8787880.0,0.0,0.0,0.0,0.0,0.0,0.0,9797981.0,8787900.0,2.5,12.0,15.0,7.0,30.0,20.0,0.0,0.0,1.0,0.8,0.5,9798001.0,761.0,8.0,8787880.0,0.0,0.0,0.0,0.0,0.0,0.0,9797981.0,762.0,8.0,8787880.0,0.0,0.0,0.0,0.0,0.0,0.0,9797981.0,763.0,8.0,8787880.0,0.0,0.0,0.0,0.0,0.0,0.0,9797981.0,766.0,8.0,8787880.0,0.0,0.0,0.0,0.0,0.0,0.0,9797981.0,768.0,5.0,8787902.0,0.22,2.0,1.0,9798003.0,769.0,5.0,8787902.0,0.22,2.0,1.0,9798003.0,771.0,8.0,8787880.0,0.0,0.0,0.0,0.0,0.0,0.0,9797981.0,774.0,5.0,8787902.0,2.0,0.21,1.0,9798003.0,775.0,5.0,8787902.0,0.12,0.69,1.0,9798003.0,830.0,8.0,8787880.0,0.0,0.0,0.0,0.0,0.0,0.0,9797981.0,843.0,5.0,8787902.0,0.12,0.69,1.0,9798003.0,861.0,3.0,8787891.0,1.0,9797992.0,871.0,3.0,8787891.0,1.0,9797992.0,872.0,3.0,8787891.0,1.0,9797992.0,973.0,5.0,8787902.0,0.1,0.23,1.0,9798003.0,978.0,8.0,8787880.0,5.0,15.0,0.0,6.0,0.0,0.0,9797981.0,979.0,8.0,8787880.0,5.0,15.0,0.0,6.0,0.0,0.0,9797981.0,980.0,8.0,8787880.0,7.0,8.0,0.0,3.0,4.0,0.0,9797981.0,1003.0,8.0,8787880.0,11.0,0.0,0.0,12.0,0.0,0.0,9797981.0,1159.0,3.0,8787891.0,1.0,9797992.0,1160.0,3.0,8787891.0,1.0,9797992.0,1189.0,8.0,8787880.0,3.0,4.0,0.0,7.0,8.0,0.0,9797981.0,1194.0,8.0,8787880.0,4.0,14.0,7.0,8.0,13.0,3.0,9797981.0,1217.0,3.0,8787891.0,1.0,9797992.0,1231.0,8.0,8787880.0,11.0,13.0,0.0,12.0,14.0,0.0,9797981.0,1239.0,8.0,8787880.0,11.0,0.0,0.0,12.0,0.0,0.0,9797981.0,1254.0,8.0,8787880.0,8.0,14.0,7.0,4.0,13.0,3.0,9797981.0,1266.0,3.0,8787891.0,1.0,9797992.0,1268.0,3.0,8787891.0,1.0,9797992.0,1269.0,21.0,8787880.0,0.0,0.0,0.0,0.0,0.0,0.0,9797981.0,8787900.0,2.5,12.0,15.0,7.0,-30.0,20.0,0.0,0.0,1.0,0.8,0.5,9798001.0,1272.0,8.0,8787880.0,0.0,0.0,0.0,0.0,0.0,0.0,9797981.0],"designChanged":false,"blueprintVersion":28,"blueprintName":"Oshi - Hover Tank","Id":316230,"Name":"Oshi - Hover Tank","ItemNumber":176,"Parameter1":"0.9,0.9,0.5,0","Parameter2":"60,2,1,2","LocalPosition":"-30794.2,247.3463,-25466.6","LocalRotation":"0.009472749,0.03827206,-0.0003981123,0.9992224","ForceId":279958194,"TotalBlockCount":1275,"LastAliveBlock":1275,"IndexOfFirstBlockNeedingFullRepairCost":1000000,"MaxCords":"5,9,22","MinCords":"-5,-4,-17","BlockIds":[607,607,366,366,366,366,366,643,643,643,643,643,11,11,15,8,1,0,25,297,51,50,607,607,607,607,607,605,605,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,297,127,126,126,125,125,125,126,607,607,607,607,607,607,607,607,607,607,607,607,607,607,125,125,125,127,127,127,125,125,125,125,125,125,125,125,125,125,127,127,127,125,125,125,125,125,125,125,125,114,114,114,114,114,114,114,114,114,114,114,114,114,114,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,145,107,107,607,607,55,55,55,55,55,55,57,56,56,56,56,55,55,55,55,55,55,55,55,55,55,55,55,57,55,55,55,57,55,55,55,57,55,55,55,55,57,55,55,55,55,57,55,55,55,55,55,55,55,55,57,55,55,55,55,57,55,55,55,57,55,55,55,55,57,55,55,55,55,57,55,55,55,55,55,55,55,55,55,55,55,55,57,56,56,56,56,55,55,55,55,55,55,55,55,55,55,608,609,608,609,608,609,608,609,608,609,608,609,608,609,608,609,608,609,608,609,608,609,608,609,608,609,608,609,608,609,608,609,608,609,607,607,607,607,606,606,625,627,627,625,612,612,612,612,612,612,625,627,612,612,610,610,610,610,632,635,608,609,608,609,610,610,610,610,607,607,452,452,610,610,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,633,636,633,636,633,636,618,621,631,637,611,611,611,611,611,611,611,611,611,611,611,611,622,628,569,569,569,575,575,345,345,345,345,586,592,574,574,574,574,574,586,592,574,570,618,621,452,452,14,14,616,619,74,74,454,643,127,98,118,118,118,118,118,118,118,118,118,123,123,146,114,102,126,126,142,142,141,141,610,610,635,632,94,633,636,615,614,32,357,357,357,357,55,55,55,55,55,55,55,55,55,55,57,56,56,56,56,55,55,55,55,55,55,55,55,55,57,55,55,55,57,55,55,57,55,55,57,55,55,57,55,55,55,57,55,55,55,55,55,56,57,55,55,55,55,55,55,57,55,55,55,55,57,55,55,57,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,57,56,56,56,56,55,55,55,55,612,612,612,612,612,612,633,636,633,636,633,636,633,636,633,636,618,621,618,621,618,621,607,607,607,607,607,607,34,49,32,319,319,328,328,328,320,320,605,605,605,605,358,358,321,321,610,610,622,628,622,628,610,610,610,610,329,329,329,333,606,606,607,607,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,306,306,592,574,574,574,574,574,574,574,574,574,594,598,571,571,571,569,569,570,570,607,607,320,319,319,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,32,293,288,286,284,284,284,605,605,284,574,43,43,205,74,610,610,488,30,610,610,610,610,610,610,606,606,612,612,612,636,633,618,621,607,607,610,610,106,107,107,107,570,14,49,22,574,574,574,574,574,574,574,578,582,594,598,574,574,574,574,574,574,594,598,594,598,302,302,311,311,643,49,284,320,332,322,322,322,321,333,326,14,14,607,607,30,34,49,302,302,302,302,302,302,302,302,452,452,311,311,287,287,311,347,595,599,607,607,607,607,607,607,206,347,347,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,447,607,607,607,607,607,607,607,607,607,607,309,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,328,328,328,118,55,55,55,56,55,452,610,302,349,349,348,348,348,348,348,348,356,356,452,49,205,24,35,14,25,311,311,74,74,74,55,55,55,55,55,55,56,56,55,55,55,55,56,574,574,628,622,628,615,452,452,452,469,447,587,593,233,233,233,233,252,240,240,241,244,252,233,252,233,247,252,241,241,233,233,233,233,233,252,241,241,244,252,235,232,235,235,232,235,233,231,235,231,231,235,232,235,232,235,235,232,235,241,252,240,240,228,233,228,252,233,228,233,235,240,228,235,228,228,235,231,233,234,234,234,234,234,234,237,228,235,228,228,235,231,228,252,252,228,233,247,252,240,240,232,235,232,235,235,232,235,252,231,235,231,231,235,232,235,232,235,235,232,235,240,252,241,240,244,233,233,233,240,252,241,241,233,244,252,233,252,233,252,240,240,241,233,233,233,233,236,233,605,233,238,606,358,384,384,384,311,452,452,607,607,311,311,457,347,347,311,311,447,605,499,569,569,569,569,569,447,577,577,577,569,569,569,577,610,125,329,125,125,125,329,328,14,322,74,322,125,55,55,57,55,55,55,125,125,125,574,127,14,322,322,322,321,322,322,610,610,574,322,322,319,49,347,32,328,34,329,205,321,319,328,333,55,55,55,55,57,56,55,55,55,55,55,55,57,55,55,55,55,55,55,55,55,55,56,55,55,55,55,57,55,55,55,56,55,55,55,55,55,55,586,347,55,347,306,321,321,74,622,321],"BlockStringData":["useJets         = true\nuseDediSpinners = true\nuseAllSpinners  = false\n\norbiterMode        = \"off\"        -- \"off\": the default frontal mode, \"both\": doesn't have a preferred side, \"left\"/\"right\": only uses one side to fight\nmatchAltitude      = false        -- In combat will match the target's altitude(evasion will use this altitude as base, minAltitude and maxAltitude still apply).\nrepairMode         = false        -- Won't fight but try to repair friendlies\nisSatellite        = false        -- Will aim at the target with the bottom\nrepairClosestFirst = true         -- In repair mode goes to help the most damaged ally first on false\nminDamageNoticed   = 1            -- 0.95 means the craft won't bother with anything above 95% health\n\noptimalAltitude         = 250     -- Move at this height when in combat/stay this many meters above target in repair mode(can be negative for repair)\noptimalDistance         = 1150    -- Try to maintain this distance from target in both modes(doesn't take altitude into account). If you want to get close consider reducing maxPitchMagnitude. -1 means staying stationary.\nminAltitude             = 60      -- Measured at center of mass, leave some clearance\nmaxAltitude             = 400     -- Without space captain above 300 the atmosphere starts to thin out. Use space propulsion if you want to go much higher\nmaxPitchMagnitude       = 30      -- Pitch with a bigger absolute value will be clamped to match this\nmaxRoll                 = 5       -- Max roll\npitchMovementAssist     = 4       -- Max angle to pitch at to help forward/backwards movement\nrollMovementAssist      = 3       -- Max angle to roll at to help left/right movement\nevasiveAltitudeChange   = 50       -- Vertical evasive manouvers add/subtract this to/from altitude\nevasiveLeftPeriod       = 8       -- Go left for this amount of time(seconds)\nevasiveRightPeriod      = 5       -- Go right for this amount of time(seconds)\nuseBalloons             = false    -- Set it to false when not using balloons for water start\nballonDeployAltitude    = 0       -- Deploy balloons below this one\nballonReleaseAltitude   = 100     -- Cut balloons above this\naltitudeFeedbackMeters  = 10      -- Writes the new target altitude to HUD in off/on/combat mode, if it changed by at least this much. 0 turns feedback off.\n\n-- Used for getting a serial number(that's not used for anything right now)\nblueprintName = \"HoverTankAI\"\n\n-- Tune PIDs here\n--                       P,        D,       I,    OutMax,   OutMin,    IMax,    IMin\nrollPIDData     = {   0.05,     0.01,     0.0,         1,       -1,       1,      -1}\npitchPIDData    = {    0.1,     0.02,     0.0,         1,       -1,       1,      -1}\naltitudePIDData = {    0.2,     0.05,    0.01,         1,       -1,       1,      -1}\nyawPIDData      = {    0.1,     0.02,     0.0,         1,       -1,       1,      -1}\nslipPIDData     = {   0.05,     0.05,     0.0,         1,       -1,       1,      -1}\ndistancePIDData = {    0.1,      0.5,     0.0,         1,       -1,       1,      -1}\n\nfunction Init(I)\n    -- forgive me for I have sinned\n    API = I\n\n    if not VehicleState then\n        VehicleState = {}\n    end\n    VehicleState.centerOfMass       = API:GetConstructCenterOfMass()\n    VehicleState.pitch              = -API:GetConstructPitch()\n    VehicleState.roll               = API:GetConstructRoll()\n    VehicleState.forwardVector      = API:GetConstructForwardVector()\n    VehicleState.upVector           = API:GetConstructUpVector()\n    VehicleState.yaw                = API:GetConstructYaw()\n    VehicleState.speed              = API:GetForwardsVelocityMagnitude()\n    VehicleState.currentTime        = API:GetTime()\n    VehicleState.velocity           = API:GetVelocityVector()\n    VehicleState.AICount            = API:GetNumberOfMainframes()\n    VehicleState.flagship           = API.Fleet.Flagship\n\n    propulsionAngleTolerance        = 0.5\n    local horizontalProjection      = Vector3(VehicleState.forwardVector.x, 0, VehicleState.forwardVector.z)\n\n    VehicleState.projectionRotation = Quaternion.Inverse(Quaternion.LookRotation(horizontalProjection, VehicleState.upVector))\n    VehicleState.normalRotation     = Quaternion.Inverse(Quaternion.LookRotation(VehicleState.forwardVector, VehicleState.upVector))\n\n    VehicleState.target = GetCombatTarget()\n    if repairMode then\n        VehicleState.repairTarget = GetRepairTarget()\n    end\n\n    VehicleState.targetPosition = nil\n\n    if API.AIMode == \"fleetmove\" and API.IsFlagship then\n        VehicleState.AIMode = \"patrol\"\n    else\n        VehicleState.AIMode = API.AIMode\n    end\n\n    if VehicleState.pitch<-180 then\n        VehicleState.pitch = VehicleState.pitch+360\n    end\n    if VehicleState.roll>180 then\n        VehicleState.roll = VehicleState.roll-360\n    end\n\n    if not VehicleState.serial then\n        SetSerial()\n        InitPIDs()\n        \n        if API:Component_GetCount(8) == 0 then\n            VehicleState.hasAltitudeControl = false\n            VehicleState.adjustedAltitude   = optimalAltitude\n        else\n            VehicleState.hasAltitudeControl = true\n            SetAltitudeHydrofoil(optimalAltitude)\n        end\n    end\n\n    if VehicleState.hasAltitudeControl then\n        SetupAltitudeControl()\n    end\nend\n\nfunction SetupAltitudeControl()\n    local altitudeFlag = API:Component_GetFloatLogic(8, 0) + 45\n    local newAltitude  = minAltitude + ((maxAltitude-minAltitude) * altitudeFlag / 90)\n\n    if altitudeFeedbackMeters > 0 then\n        local promptAltitude = math.floor(newAltitude / altitudeFeedbackMeters) * altitudeFeedbackMeters\n\n        if not VehicleState.lastAltitudePrompt or math.abs(promptAltitude - VehicleState.lastAltitudePrompt) >= altitudeFeedbackMeters then\n            if VehicleState.AIMode == \"on\" or VehicleState.AIMode == \"off\" or VehicleState.AIMode == \"combat\" then\n                API:LogToHud(\"Altitude: \" .. promptAltitude .. \"m\")\n            end\n            VehicleState.lastAltitudePrompt = promptAltitude\n        end\n    end\n    VehicleState.adjustedAltitude = newAltitude\nend\n\nfunction SetAltitudeHydrofoil(newAltitude)\n    local relativeAltitude = math.min(math.max(newAltitude, minAltitude), maxAltitude) - minAltitude\n    local altitudeFraction = relativeAltitude / (maxAltitude-minAltitude)\n    local normalizedRange  = altitudeFraction - 0.5\n    local fullAngle        = normalizedRange * 90\n\n    -- initialize altitude flag hydrofoil angle\n    API:Component_SetFloatLogic(8, 0, math.min(math.max(fullAngle, -45), 45))\nend\n\n-- Take over all jets, not just vertical ones\nfunction EnableAllJets()\n    VehicleState.jetsAtMax = 0\n\n    if useJets then\n        for i=0,3 do\n            API:RequestThrustControl(i)\n        end\n        for i=6,9 do\n            API:RequestThrustControl(i)\n        end\n    end\nend\n\nfunction ResetJetStrengths()\n    if not VehicleState.jetsAtMax or VehicleState.jetsAtMax == 0 then\n        API:Component_SetFloatLogicAll(9,1)\n        VehicleState.jetsAtMax = 1\n    end\nend\n\nfunction SetupPropulsion()\n    -- Send an 'on' signal to vertical jets\n    if useJets then\n        -- up/down\n        API:RequestThrustControl(4)\n        API:RequestThrustControl(5)\n        -- pitch up/down\n        API:RequestControl(2, 4, 1)\n        API:RequestControl(2, 5, 1)\n    end\n\n    if VehicleState.AIMode == \"on\" or VehicleState.AIMode == \"off\" then\n        -- Manual mode, lay off side/forward propulsion strengths\n        ResetJetStrengths()\n    else\n        -- Automatic, toggle everything on\n        EnableAllJets()\n    end\n\n    JetManager = {\n        propulsionCount = API:Component_GetCount(9),\n        GetComponent    = function (serial) return API:Component_GetBlockInfo(9,serial) end,\n        SetImpulse      = function (serial,impulse) API:Component_SetFloatLogic(9,serial,math.min(math.max(impulse, 0),1)) end,\n        GetFowardVector = function (propulsion) return propulsion.Forwards end,\n        type            = \"jet\"\n    }\n    RotorManager = {\n        propulsionCount = API:GetSpinnerCount(),\n        GetComponent    = function (serial) return API:GetSpinnerInfo(serial) end,\n        SetImpulse      = function (serial,impulse) if useAllSpinners or API:IsSpinnerDedicatedHelispinner(serial) then API:SetSpinnerInstaSpin(serial, math.min(math.max(impulse, -1),1)) end end,\n        GetFowardVector = function (propulsion) return QuaternionUpVector(propulsion.Rotation) end,\n        type            = \"spinner\"\n    }\n\n    PropulsionManagers = {}\n    if useAllSpinners or useDediSpinners then\n        table.insert(PropulsionManagers, RotorManager)\n    end\n    if useJets then\n        table.insert(PropulsionManagers, JetManager)\n    end\n\n    PropulsionComponents = {}\n    for i=1,table.getn(PropulsionManagers),1 do\n        for j=0,PropulsionManagers[i].propulsionCount-1,1 do\n            local component             = PropulsionManagers[i].GetComponent(j)\n            local globalOrientation     = PropulsionManagers[i].GetFowardVector(component)\n            local localOrientation      = VehicleState.normalRotation * globalOrientation\n            local horizontalOrientation = VehicleState.projectionRotation * globalOrientation\n            local position              = VehicleState.normalRotation * (component.Position - VehicleState.centerOfMass)\n\n\n            local currentComponent = {\n                serial                = j,\n                position              = position,\n                globalOrientation     = globalOrientation,\n                localOrientation      = localOrientation,\n                horizontalOrientation = horizontalOrientation,\n                sendImpulse           = PropulsionManagers[i].SetImpulse,\n                type                  = PropulsionManagers[i].type\n            }\n            table.insert(PropulsionComponents, currentComponent)\n        end\n    end\nend\n\nfunction AddComponentImpulse(component, impulse)\n    if not component.impulse then\n        component.impulse = impulse\n    else\n        component.impulse = component.impulse + impulse\n    end\nend\n\nfunction AddPitchOutput(pitchInput)\n    for i=1,table.getn(PropulsionComponents) do\n        local component = PropulsionComponents[i]\n\n        if math.abs(component.localOrientation.y)>propulsionAngleTolerance then\n            -- pitch\n            if component.position.z<-0.05 then\n                AddComponentImpulse(component, -pitchInput * component.localOrientation.y)\n            elseif component.position.z>0.05 then\n                AddComponentImpulse(component, pitchInput * component.localOrientation.y)\n            end\n        end\n    end\nend\n\nfunction AddRollOutput(rollInput)\n    for i=1,table.getn(PropulsionComponents) do\n        local component = PropulsionComponents[i]\n\n        if math.abs(component.localOrientation.y)>propulsionAngleTolerance then\n            if component.position.x<-0.05 then\n                AddComponentImpulse(component, -rollInput * component.localOrientation.y)\n            elseif component.position.x>0.05 then\n                AddComponentImpulse(component, rollInput * component.localOrientation.y)\n            end\n        end\n        if VehicleState.AIMode ~= \"off\" and VehicleState.AIMode ~= \"on\" then\n            if math.abs(component.localOrientation.x)>propulsionAngleTolerance then\n                if component.position.y<-0.05 then\n                    AddComponentImpulse(component, rollInput * component.localOrientation.x)\n                elseif component.position.y>0.05 then\n                    AddComponentImpulse(component, -rollInput * component.localOrientation.x)\n                end\n            end\n        end        \n    end\nend\n\nfunction AddYawOutput(yawInput)\n    for i=1,table.getn(PropulsionComponents) do\n        local component = PropulsionComponents[i]\n\n        if math.abs(component.localOrientation.x)>propulsionAngleTolerance then\n            if component.position.z<-0.05 then\n                AddComponentImpulse(component, -yawInput * component.localOrientation.x)\n            elseif component.position.z>0.05 then\n                AddComponentImpulse(component, yawInput * component.localOrientation.x)\n            end\n        end\n    end\nend\n\nfunction AddAltitudeOutput(altitudeInput)\n    for i=1,table.getn(PropulsionComponents) do\n        local component = PropulsionComponents[i]\n        local magnitude = (component.globalOrientation.y > 0 and 1 or -1)\n\n        if math.abs(component.globalOrientation.y)>propulsionAngleTolerance then\n            AddComponentImpulse(component, altitudeInput * magnitude)\n        end\n    end\nend\n\nfunction AddSlipOutput(slipInput)\n    for i=1,table.getn(PropulsionComponents) do\n        local component = PropulsionComponents[i]\n        local magnitude = (component.horizontalOrientation.x > 0 and 1 or -1)\n\n        if math.abs(component.horizontalOrientation.x)>propulsionAngleTolerance then\n            AddComponentImpulse(component, slipInput * magnitude)\n        end\n    end\nend\n\nfunction AddForwardOutput(forwardInput)\n    for i=1,table.getn(PropulsionComponents) do\n        local component = PropulsionComponents[i]\n        local magnitude = (component.horizontalOrientation.z > 0 and 1 or -1)\n\n        if math.abs(component.horizontalOrientation.z)>propulsionAngleTolerance then\n            AddComponentImpulse(component, forwardInput * magnitude)\n        end\n    end\nend\n\nfunction SendPropulsionImpulses()\n    for i=1,table.getn(PropulsionComponents) do\n        local component = PropulsionComponents[i]\n\n        if component.impulse ~= nil then\n            component.sendImpulse(component.serial, component.impulse)\n        else\n            if component.type == \"spinner\" then\n                API:SetSpinnerSpeedFactor(component.serial, 1)\n            end\n        end\n    end\nend\n\nfunction SetPitch(targetPitch)\n    targetPitch               = math.max(math.min(targetPitch, maxPitchMagnitude), -maxPitchMagnitude)\n    pitchInput,pitchPID       = GetPIDOutput(targetPitch, VehicleState.pitch, pitchPID)\n\n    AddPitchOutput(pitchInput)\nend\n\nfunction SetRoll(targetRoll)\n    targetRoll                = math.max(math.min(targetRoll, maxRoll), -maxRoll)\n    rollInput,rollPID         = GetPIDOutput(targetRoll,  VehicleState.roll,  rollPID)\n\n    AddRollOutput(rollInput)\nend\n\nfunction SetAltitude(targetAltitude)\n    local highestTerrainAhead = HighestTerrainAhead()\n\n    targetAltitude            = math.min(math.max(targetAltitude, highestTerrainAhead+minAltitude), maxAltitude)\n    altitudeInput,altitudePID = GetPIDOutput(targetAltitude, VehicleState.centerOfMass.y, altitudePID)\n\n    AddAltitudeOutput(altitudeInput)\nend\n\nfunction Turn(targetAzi)\n    yawInput,yawPID = GetPIDOutput(0, targetAzi, yawPID)\n\n    AddYawOutput(yawInput)\nend\n\nfunction SetSlipSpeedForDistance(distance)\n    slipSpeed,slipPID = GetPIDOutput(0, distance, slipPID)\n\n    AddSlipOutput(slipSpeed)\n    SetRoll(-rollMovementAssist * slipSpeed)\nend\n\nfunction SetForwardSpeedForDistance(distance, usePitch)\n    forwardSpeed,distancePID = GetPIDOutput(0, distance, distancePID)\n\n    AddForwardOutput(-forwardSpeed)\n    if usePitch then\n        SetPitch(pitchMovementAssist * forwardSpeed)\n    end\nend\n\nfunction GetFrontalEvasionData()\n    evasionData = {\n        slip           = 0,\n        altitudeChange = evasiveAltitudeChange * math.sin(VehicleState.currentTime)\n    }\n\n    local slipCycleDuration = evasiveRightPeriod + evasiveLeftPeriod\n    if slipCycleDuration == 0 then\n        return evasionData\n    end\n\n    local slipCycleTime = VehicleState.currentTime%slipCycleDuration\n    if slipCycleTime < evasiveRightPeriod then\n        evasionData.slip = 1\n    else\n        evasionData.slip = -1\n    end\n    \n    if math.abs(VehicleState.pitch) > 45 then\n        evasionData.altitudeChange = 0\n    end\n\n    return evasionData\nend\n\nfunction GetOrbitEvasionPitchOutput(altitude)\n    if not pitchDown then\n        pitchDown = false\n    end\n    \n    if VehicleState.centerOfMass.y > altitude + evasiveAltitudeChange then\n        pitchDown = true\n    elseif VehicleState.centerOfMass.y < altitude - evasiveAltitudeChange then\n        pitchDown = false\n    end\n    \n    if VehicleState.pitch < -maxPitchMagnitude then\n        pitchDown = false\n    elseif VehicleState.pitch > maxPitchMagnitude then\n        pitchDown = true\n    end\n\n    if pitchDown then\n        return -1\n    else\n        return 1\n    end\nend\n\nfunction HighestTerrainAhead()\n    local maxAltitude = 0\n    local nextAltitude\n\n    local xStep = VehicleState.velocity.x\n    local zStep = VehicleState.velocity.z\n    \n    for i=-0.5,5,0.25 do\n        nextAltitude = API:GetTerrainAltitudeForPosition(VehicleState.centerOfMass.x + xStep*i, VehicleState.centerOfMass.y, VehicleState.centerOfMass.z + zStep*i)\n        if nextAltitude>maxAltitude then\n            maxAltitude = nextAltitude\n        end\n    end\n    return maxAltitude\nend\n\nfunction GetCombatTarget()\n    local target = API:GetTargetPositionInfo(0,0)\n\n    if target.Valid then\n        local azimuth\n        if target.Azimuth>180 then\n            azimuth = target.Azimuth-360\n        else\n            azimuth = target.Azimuth\n        end\n\n        return {\n            Elevation      = -math.deg(math.atan((VehicleState.centerOfMass.y-target.AltitudeAboveSeaLevel) / target.GroundDistance)),\n            Azimuth        = azimuth,\n            GroundDistance = target.GroundDistance,\n            Altitude       = target.AltitudeAboveSeaLevel\n        }\n    else\n        return false\n    end\nend\n\nfunction GetRepairTarget()\n    -- Lower means more important\n    local highestPriorityValue = 1000000\n    local targetData = false\n    local friendlyCount = API:GetFriendlyCount()\n\n    for i=0,friendlyCount-1,1 do\n        local friendly = API:GetFriendlyInfo(i)\n        local targetCenterOfMass = friendly.CenterOfMass\n\n        local health = friendly.HealthFraction\n        if health<=minDamageNoticed and health<1 then\n            if not repairClosestFirst then\n                if health<highestPriorityValue then\n                    targetData = friendly\n                    highestPriorityValue = health\n                end\n            else\n                local distance = math.sqrt( (targetCenterOfMass.x-VehicleState.centerOfMass.x)*(targetCenterOfMass.x-VehicleState.centerOfMass.x)\n                                           +(targetCenterOfMass.z-VehicleState.centerOfMass.z)*(targetCenterOfMass.z-VehicleState.centerOfMass.z) )\n                if distance<highestPriorityValue then\n                    targetData = friendly\n                    highestPriorityValue = distance\n                end\n            end\n        end\n    end\n\n    if targetData then\n        return GetDirectionToCoordinates(targetData.CenterOfMass)\n    else\n        return false\n    end\nend\n\nfunction SetSerial()\n    local friendlyCount = API:GetFriendlyCount()\n\n    local cloneCount = 0\n    for i=0,friendlyCount-1,1 do\n        local friendly = API:GetFriendlyInfo(i)\n\n        if friendly.BlueprintName==blueprintName then\n            cloneCount = cloneCount+1\n        end\n    end\n    VehicleState.serial = cloneCount\nend\n\nfunction SetTargetPosition(position)\n    VehicleState.targetPosition = GetDirectionToCoordinates(position)\n\n    VehicleState.targetPosition.x             = position.x\n    VehicleState.targetPosition.y             = position.y\n    VehicleState.targetPosition.z             = position.z\n    VehicleState.targetPosition.sideDistance  = math.sin(math.rad(VehicleState.targetPosition.Azimuth)) * VehicleState.targetPosition.GroundDistance\n    VehicleState.targetPosition.frontDistance = math.cos(math.rad(VehicleState.targetPosition.Azimuth)) * VehicleState.targetPosition.GroundDistance\nend\n\nfunction PitchToTarget()\n    if isSatellite then\n        SetPitch(VehicleState.target.Elevation + 90)\n    else\n        if math.abs(VehicleState.target.Azimuth) > 10 then\n            SetPitch(0)\n        else\n            SetPitch(VehicleState.target.Elevation)\n        end\n    end\nend\n\nfunction Guard()\n    SetTargetPosition(VehicleState.flagship.CenterOfMass + VehicleState.flagship.Rotation * API.IdealFleetPosition)\n    SetAltitude(VehicleState.targetPosition.y)\n    SetAltitudeHydrofoil(VehicleState.targetPosition.y)\n\n    if not VehicleState.target then\n        if not API.IsFlagship then\n            Turn(GetVectorAngle(VehicleState.flagship.ForwardVector, VehicleState.forwardVector))\n        end\n\n        SetSlipSpeedForDistance(VehicleState.targetPosition.sideDistance)\n        SetForwardSpeedForDistance(VehicleState.targetPosition.frontDistance, true)\n    else\n        PitchToTarget()\n        Turn(VehicleState.target.Azimuth)\n        SetSlipSpeedForDistance(VehicleState.targetPosition.sideDistance)\n        SetForwardSpeedForDistance(VehicleState.targetPosition.frontDistance, false)\n    end\nend\n\nfunction Patrol()\n    SetTargetPosition(API.Waypoint)\n    SetAltitude(VehicleState.targetPosition.y)\n    SetAltitudeHydrofoil(VehicleState.targetPosition.y)\n    \n    if not VehicleState.target then\n        if VehicleState.targetPosition.GroundDistance > 200 then\n            local slipSpeed = GetSlipSpeed() * 5\n            slipOutput,slipPID = GetPIDOutput(0, slipSpeed, slipPID)\n\n            AddSlipOutput(slipOutput)\n            SetRoll(-rollMovementAssist * slipOutput)\n        \n            Turn(VehicleState.targetPosition.Azimuth)\n            SetForwardSpeedForDistance(VehicleState.targetPosition.GroundDistance, true)\n        else\n            SetSlipSpeedForDistance(VehicleState.targetPosition.sideDistance)\n            SetForwardSpeedForDistance(VehicleState.targetPosition.frontDistance, true)\n        end\n    else\n        PitchToTarget()\n        Turn(VehicleState.target.Azimuth)\n        SetSlipSpeedForDistance(VehicleState.targetPosition.sideDistance)\n        SetForwardSpeedForDistance(VehicleState.targetPosition.frontDistance, false)\n    end\nend\n\nfunction Repair()\n    local evasion = GetFrontalEvasionData()\n\n    AddSlipOutput(evasion.slip)\n    SetRoll(-rollMovementAssist * evasion.slip)\n\n    Turn(VehicleState.repairTarget.Azimuth)    \n    SetAltitude(VehicleState.repairTarget.Altitude + VehicleState.adjustedAltitude + evasion.altitudeChange)\n    SetForwardSpeedForDistance(VehicleState.repairTarget.GroundDistance - optimalDistance, true)\nend\n\nfunction FrontalFight()\n    if not VehicleState.target then\n        Idle()\n        return\n    end\n\n    local evasion = GetFrontalEvasionData()\n    if math.abs(VehicleState.target.Azimuth) < 10 then\n        AddSlipOutput(evasion.slip)\n        SetRoll(-rollMovementAssist * evasion.slip)\n    else\n        SetRoll(0)\n    end\n\n    if matchAltitude then\n        SetAltitude(VehicleState.target.Altitude + evasion.altitudeChange)\n    else\n        SetAltitude(VehicleState.adjustedAltitude + evasion.altitudeChange)\n    end\n\n    PitchToTarget()\n    Turn(VehicleState.target.Azimuth)\n    SetForwardSpeedForDistance(VehicleState.target.GroundDistance - optimalDistance, false)\nend\n\nfunction CircleTarget()\n    if not VehicleState.target then\n        Idle()\n        return\n    end\n\n    local sign = 1\n    if orbiterMode == \"left\" then\n        sign = 1\n    elseif orbiterMode == \"right\" then\n        sign = -1\n    elseif VehicleState.target.Azimuth < 0 then\n        sign = -1\n    end\n\n    local optimalAzi = sign * 90 - sign * 45 * math.min(math.max((VehicleState.target.GroundDistance - optimalDistance) / 200, -1), 1)\n\n    if math.abs(90 - math.abs(VehicleState.target.Azimuth)) < 20 then\n        SetRoll(-sign * VehicleState.target.Elevation)\n    else\n        SetRoll(0)\n    end\n\n    \n    local altitude\n    if matchAltitude then\n        altitude = VehicleState.target.Altitude\n    else\n        altitude = VehicleState.adjustedAltitude\n    end\n\n    if maxPitchMagnitude > 0  and evasiveAltitudeChange > 0 then\n        AddPitchOutput(GetOrbitEvasionPitchOutput(altitude))\n    else\n        SetPitch(-pitchMovementAssist)\n        SetAltitude(altitude)\n    end\n\n    Turn(VehicleState.target.Azimuth - optimalAzi)\n    AddForwardOutput(1)\nend\n\nfunction Stabilize()\n    SetAltitude(VehicleState.adjustedAltitude)\n    SetPitch(0)\n    SetRoll(0)\nend\n\nfunction Idle()\n    SetAltitude(VehicleState.adjustedAltitude)\n    SetSlipSpeedForDistance(0)\n    SetForwardSpeedForDistance(0, true)\nend\n\nfunction Update(I)\n    if I:IsDocked() then\n        return\n    end\n\n    I:TellAiThatWeAreTakingControl()\n\n    Init(I)\n    SetupPropulsion(I)\n\n    if useBalloons then\n        BalloonCheck()\n    end\n\n    if repairMode then\n        if VehicleState.AIMode == \"combat\" then\n            if VehicleState.repairTarget then\n                Repair()\n            else\n                if API.IsFlagship then\n                    VehicleState.AIMode = \"patrol\"\n                else\n                    VehicleState.AIMode = \"fleetmove\"\n                end\n            end\n        end\n    end\n        \n    if not (repairMode and VehicleState.AIMode == \"combat\") then\n        if VehicleState.AIMode == \"off\" then\n            Idle()\n        elseif VehicleState.AIMode == \"on\" then\n            Stabilize()\n        elseif VehicleState.AIMode == \"combat\" then\n            if orbiterMode == \"both\" or orbiterMode == \"left\" or orbiterMode == \"right\" then\n                CircleTarget()\n            else\n                FrontalFight()\n            end\n        elseif VehicleState.AIMode == \"patrol\" then\n            Patrol()\n        elseif VehicleState.AIMode == \"fleetmove\" then\n            Guard()\n        end\n    end\n\n    SendPropulsionImpulses()\nend\n\nfunction BalloonCheck()\n    if VehicleState.centerOfMass.y < ballonDeployAltitude then\n        API:Component_SetBoolLogicAll(0, true)\n    elseif VehicleState.centerOfMass.y > ballonReleaseAltitude then\n        API:Component_SetBoolLogicAll(0, false)\n    end\nend\n\n-- ________________________________________________________________________________​___ Generic helper functions ________________________________________________________________________________​___\n\n\nfunction GetDirectionToCoordinates(position)\n    local vectorToPosition = Vector3(position.x-VehicleState.centerOfMass.x, position.y-VehicleState.centerOfMass.y, position.z-VehicleState.centerOfMass.z)\n    local direction        = vectorToPosition.normalized\n\n    local aziDot         = direction.x*VehicleState.forwardVector.x + direction.z*VehicleState.forwardVector.z\n    local aziCross       = direction.z*VehicleState.forwardVector.x - direction.x*VehicleState.forwardVector.z\n    local groundDistance = math.sqrt(vectorToPosition.x*vectorToPosition.x + vectorToPosition.z*vectorToPosition.z)\n\n    return {\n        Elevation      = -math.deg(math.atan((VehicleState.centerOfMass.y-position.y) / groundDistance)),\n        Azimuth        = math.deg(math.atan2(aziCross, aziDot)),\n        Altitude       = position.y,\n        GroundDistance = groundDistance\n    }\nend\n\nfunction GetVectorAngle(vector1, vector2)\n    local aziDot   = vector1.x * vector2.x + vector1.z * vector2.z\n    local aziCross = vector1.z * vector2.x - vector1.x * vector2.z\n    \n    return math.deg(math.atan2(aziCross, aziDot));\nend\n\nfunction InitPID(pidData)\n    PID = {}\n    PID.Kp            = pidData[1]\n    PID.Kd            = pidData[2]\n    PID.Ki            = pidData[3]\n    PID.OutMax        = pidData[4]\n    PID.OutMin        = pidData[5]\n    PID.IMax          = pidData[6]\n    PID.IMin          = pidData[7]\n    PID.integral      = 0\n    PID.previousError = 0\n\n    return PID\nend\n\nfunction InitPIDs()\n    rollPID     = InitPID(rollPIDData)\n    pitchPID    = InitPID(pitchPIDData)\n    altitudePID = InitPID(altitudePIDData)\n    yawPID      = InitPID(yawPIDData)\n    slipPID     = InitPID(slipPIDData)\n    distancePID = InitPID(distancePIDData)\nend\n\nfunction GetPIDOutput(SetPoint, ProcessVariable, PID)\n    local error     = SetPoint - ProcessVariable\n    local timeDelta = 0.025\n    local derivative\n    local output\n\n    PID.integral = PID.integral + (error*timeDelta) * PID.Ki\n    if (PID.integral > PID.IMax) then PID.integral = PID.IMax end\n    if (PID.integral < PID.IMin) then PID.integral = PID.IMin end\n\n    derivative = (error - PID.previousError)/timeDelta\n\n    output = PID.Kp*error + PID.Kd*derivative + PID.integral\n    if (output > PID.OutMax) then output = PID.OutMax end\n    if (output < PID.OutMin) then output = PID.OutMin end\n\n    PID.previousError = error\n    return output,PID\nend\n\n-- Props to Evil4Zerggin for the function\nfunction QuaternionUpVector(quaternion)\n    local x = 2 * (quaternion.x * quaternion.y - quaternion.z * quaternion.w)\n    local y = 1-2 * (quaternion.x * quaternion.x + quaternion.z * quaternion.z)\n    local z = 2 * (quaternion.y * quaternion.z + quaternion.x * quaternion.w)\n\n    return Vector3(x, y, z).normalized\nend\n\nfunction GetSlipSpeed()\n    local velocityHeading = 180/math.pi*math.atan2(VehicleState.velocity.x,VehicleState.velocity.z)\n    if velocityHeading<0 then\n        velocityHeading = velocityHeading+360\n    end\n    local slipAngle = velocityHeading - VehicleState.yaw\n    local groundSpeedx = VehicleState.velocity.x\n    local groundSpeedz = VehicleState.velocity.z\n    local groundSpeed = math.sqrt(groundSpeedx^2 + groundSpeedz^2)\n    local slipSpeed = groundSpeed*math.sin(slipAngle/180*math.pi)\n\n    return slipSpeed\nend","-- Generated from ZerothAngel's FtDScripts version 5256d3e9d296\r\n-- Modules: generalmissilemain, generalmissile, sign, deepcopy, round, getvectorangle, pronav, quadraticintercept, quadraticsolver, missiledriver, weapontypes, periodic, commons\r\n\r\n-- CONFIGURATION\r\n\r\n-- Generally these should match the settings on your Local Weapon Controller.\r\n-- It will prevent locking onto high-priority targets that are farther\r\n-- than your missiles' max range or re-locking onto targets your missiles\r\n-- can't hit (e.g. torpedoes re-locking onto air targets).\r\nLimits = {\r\n   MinRange = 0,\r\n   MaxRange = 1999,\r\n   MinAltitude = -15,\r\n   MaxAltitude = 499,\r\n}\r\n-- Optional weapon slot to fire. If non-nil then an LWC is not needed.\r\n-- However, script-fired weapons aren't governed by failsafes, so keep\r\n-- that in mind...\r\n-- Missile controllers on turrets should be assigned the same weapon slot\r\n-- as their turret block.\r\nMissileWeaponSlot = nil\r\n\r\n-- Target selection algorithm for newly-launched missiles.\r\n-- 1 = Focus on highest priority target\r\n-- 2 = Pseudo-random split against all targetable targets\r\nMissileTargetSelector = 2\r\n\r\n-- See https://github.com/ZerothAngel/FtDScripts/blob/master/missile/generalmissile.md\r\nConfig = {\r\n   MinAltitude = 0,\r\n   DetonationRange = nil,\r\n   DetonationAngle = 30,\r\n   LookAheadTime = 2,\r\n   LookAheadResolution = 3,\r\n\r\n   AntiAir = {\r\n      DefaultThrust = nil,\r\n      TerminalRange = nil,\r\n      Thrust = nil,\r\n      ThrustAngle = nil,\r\n      OneTurnTime = 3,\r\n      OneTurnAngle = 15,\r\n      Gain = 5,\r\n   },\r\n\r\n   ProfileActivationElevation = 25,\r\n   Phases = {\r\n      {\r\n         Distance = 150,\r\n         Altitude = nil,\r\n         RelativeTo = 1,\r\n         Thrust = nil,\r\n         ThrustAngle = nil,\r\n      },\r\n      {\r\n         Distance = 1250,\r\n         AboveSeaLevel = true,\r\n         MinElevation = 3,\r\n         ApproachAngle = nil,\r\n         Altitude = 0,\r\n         RelativeTo = 4,\r\n         Thrust = nil,\r\n         ThrustAngle = nil,\r\n         Evasion = nil,\r\n      },\r\n      {\r\n         Distance = 50,\r\n         AboveSeaLevel = true,\r\n         MinElevation = 3,\r\n         ApproachAngle = nil,\r\n         Altitude = nil,\r\n         RelativeTo = 0,\r\n         Thrust = nil,\r\n         ThrustAngle = nil,\r\n         Evasion = { 20, .25 },\r\n      },\r\n   },\r\n}\r\n\r\n-- MISSILE DRIVER SETTINGS\r\n\r\n-- Detonate after this many seconds of being out of combat.\r\n-- Set to some large number (e.g. 999) to disable.\r\nDetonateAfter = 10\r\n\r\n-- Reset/clear the transceiver cache every so often.\r\n-- Set to some large number (e.g. 9999) to disable.\r\n-- This is mainly important for any scripts that use GetLuaTransceiverInfo\r\n-- to select a guidance instance, such as dualprofile. This is because\r\n-- damage may knock out a launchpad (which is what is normally returned)\r\n-- and instead return the transceiver BlockInfo, which may ultimately lead\r\n-- to a different selection.\r\nTransceiverResetInterval = 5\r\n\r\n-- COMMONS SETTINGS\r\n\r\nCommons = {\r\n   -- Preferred mainframe indexes for target priority.\r\n   -- Once a mainframe is successfully queried, the rest are ignored.\r\n   -- First mainframe (in \"C\" screen) = 0, 2nd = 1, etc.\r\n   -- The last one in the list should always be 0.\r\n   -- For example, to query the 2nd, 3rd, and 1st (in that order), set\r\n   -- to { 1, 2, 0 }\r\n   PreferredTargetMainframes = { 0 },\r\n\r\n   -- Maximum range for an enemy to still be considered a threat.\r\n   MaxEnemyRange = 10000,\r\n}\r\n\r\n-- WEAPON TYPES (don't change)\r\n\r\n-- luacheck: push ignore 131\r\nCANNON = 0\r\nMISSILE = 1\r\nLASER = 2\r\nHARPOON = 3\r\nTURRET = 4\r\nMISSILECONTROL = 5\r\nFIRECONTROLCOMPUTER = 6\r\n-- luacheck: pop\r\n\r\n-- MISCELLANEOUS\r\n\r\n-- The update rate, i.e. run every UpdateRate calls to Update method.\r\n-- Set to 1 to update every call.\r\n-- Setting to e.g. 10 means to run every 10th call.\r\n-- Smaller means more responsive, but also means more processor usage.\r\nUpdateRate = 4\r\n\r\n-- !!! CODE BEGINS HERE, EDIT AT YOUR OWN RISK !!!\r\n\r\n-- Commons module\r\n\r\n-- The one global that holds the Commons instance.\r\n-- A new instance MUST be instantiated every update.\r\nC = nil\r\n\r\n-- Presumably, calling a Lua binding is slow, especially methods\r\n-- that return tables. Only call API when we need something and cache\r\n-- the result for the lifetime of the instance.\r\nfunction Commons.create(I, AttackSalvage)\r\n   local self = {}\r\n\r\n   self.I = I\r\n   self.AttackSalvage = AttackSalvage\r\n\r\n   -- Can't implement \"properties\" because no metatable\r\n   -- Since everything is read-only anyway, we'll just implement\r\n   -- everything as lazy-init instance getters.\r\n\r\n   -- Time\r\n   self.Now = Commons.Now\r\n\r\n   -- Miscellaneous\r\n   self.IsDocked = Commons.IsDocked\r\n\r\n   -- Position and attitude\r\n   self.Position = Commons.Position\r\n   self.CoM = Commons.CoM\r\n   self.Altitude = Commons.Altitude\r\n   self.Yaw = Commons.Yaw\r\n   self.Pitch = Commons.Pitch\r\n   self.Roll = Commons.Roll\r\n\r\n   -- Velocity\r\n   self.Velocity = Commons.Velocity\r\n   self.ForwardSpeed = Commons.ForwardSpeed\r\n\r\n   -- Orientation\r\n   self.ForwardVector = Commons.ForwardVector\r\n   self.UpVector = Commons.UpVector\r\n   self.RightVector = Commons.RightVector\r\n   self.ToGlobal = Commons.ToGlobal\r\n   self.ToLocal = Commons.ToLocal\r\n\r\n   -- Weapon controllers\r\n   self.HullWeaponControllers = Commons.HullWeaponControllers\r\n   self.TurretWeaponControllers = Commons.TurretWeaponControllers\r\n   self.WeaponControllers = Commons.WeaponControllers\r\n\r\n   -- Targets\r\n   self.GatherTargets = Commons.GatherTargets -- Private\r\n   self.FirstTarget = Commons.FirstTarget\r\n   self.Targets = Commons.Targets\r\n\r\n   -- Maybe friendlies too...?\r\n\r\n   return self\r\nend\r\n\r\nfunction Commons:Now()\r\n   if not self._Now then\r\n      self._Now = self.I:GetTimeSinceSpawn()\r\n   end\r\n   return self._Now\r\nend\r\n\r\nfunction Commons:IsDocked()\r\n   if not self._IsDocked then\r\n      self._IsDocked = self.I:IsDocked()\r\n   end\r\n   return self._IsDocked\r\nend\r\n\r\nfunction Commons:Position()\r\n   if not self._Position then\r\n      self._Position = self.I:GetConstructPosition()\r\n   end\r\n   return self._Position\r\nend\r\n\r\nfunction Commons:CoM()\r\n   if not self._CoM then\r\n      self._CoM = self.I:GetConstructCenterOfMass()\r\n   end\r\n   return self._CoM\r\nend\r\n\r\nfunction Commons:Altitude()\r\n   return self:CoM().y\r\nend\r\n\r\nfunction Commons:Yaw()\r\n   if not self._Yaw then\r\n      self._Yaw = self.I:GetConstructYaw()\r\n   end\r\n   return self._Yaw\r\nend\r\n\r\nfunction Commons:Pitch()\r\n   if not self._Pitch then\r\n      local Pitch = self.I:GetConstructPitch()\r\n      if Pitch > 180 then\r\n         Pitch = 360 - Pitch\r\n      else\r\n         Pitch = -Pitch\r\n      end\r\n      self._Pitch = Pitch\r\n   end\r\n   return self._Pitch\r\nend\r\n\r\nfunction Commons:Roll()\r\n   if not self._Roll then\r\n      local Roll = self.I:GetConstructRoll()\r\n      if Roll > 180 then\r\n         Roll = Roll - 360\r\n      end\r\n      self._Roll = Roll\r\n   end\r\n   return self._Roll\r\nend\r\n\r\nfunction Commons:Velocity()\r\n   if not self._Velocity then\r\n      self._Velocity = self.I:GetVelocityVector()\r\n   end\r\n   return self._Velocity\r\nend\r\n\r\nfunction Commons:ForwardSpeed()\r\n   if not self._ForwardSpeed then\r\n      self._ForwardSpeed = self.I:GetForwardsVelocityMagnitude()\r\n   end\r\n   return self._ForwardSpeed\r\nend\r\n\r\nfunction Commons:ForwardVector()\r\n   if not self._ForwardVector then\r\n      self._ForwardVector = self.I:GetConstructForwardVector()\r\n   end\r\n   return self._ForwardVector\r\nend\r\n\r\nfunction Commons:UpVector()\r\n   if not self._UpVector then\r\n      self._UpVector = self.I:GetConstructUpVector()\r\n   end\r\n   return self._UpVector\r\nend\r\n\r\nfunction Commons:RightVector()\r\n   if not self._RightVector then\r\n      self._RightVector = self.I:GetConstructRightVector()\r\n   end\r\n   return self._RightVector\r\nend\r\n\r\nfunction Commons:ToGlobal()\r\n   if not self._ToGlobal then\r\n      self._ToGlobal = Quaternion.LookRotation(self:ForwardVector(), self:UpVector())\r\n   end\r\n   return self._ToGlobal\r\nend\r\n\r\nfunction Commons:ToLocal()\r\n   if not self._ToLocal then\r\n      self._ToLocal = Quaternion.Inverse(self:ToGlobal())\r\n   end\r\n   return self._ToLocal\r\nend\r\n\r\nfunction Commons.AddWeapon(Weapons, WeaponInfo, TurretIndex, WeaponIndex)\r\n   local Weapon = {\r\n      Index = WeaponIndex,\r\n      TurretIndex = TurretIndex,\r\n      Type = WeaponInfo.WeaponType,\r\n      Slot = WeaponInfo.WeaponSlot,\r\n      Position = WeaponInfo.GlobalPosition,\r\n      Speed = WeaponInfo.Speed,\r\n      PlayerControl = WeaponInfo.PlayerCurrentlyControllingIt,\r\n   }\r\n   table.insert(Weapons, Weapon)\r\nend\r\n\r\nfunction Commons:HullWeaponControllers()\r\n   if not self._HullWeaponControllers then\r\n      local Weapons = {}\r\n      for windex = 0,self.I:GetWeaponCount()-1 do\r\n         local Info = self.I:GetWeaponInfo(windex)\r\n         Commons.AddWeapon(Weapons, Info, nil, windex)\r\n      end\r\n      self._HullWeaponControllers = Weapons\r\n   end\r\n   return self._HullWeaponControllers\r\nend\r\n\r\nfunction Commons:TurretWeaponControllers()\r\n   if not self._TurretWeaponControllers then\r\n      local Weapons = {}\r\n      for tindex = 0,self.I:GetTurretSpinnerCount()-1 do\r\n         for windex = 0,self.I:GetWeaponCountOnTurretOrSpinner(tindex)-1 do\r\n            local Info = self.I:GetWeaponInfoOnTurretOrSpinner(tindex, windex)\r\n            Commons.AddWeapon(Weapons, Info, tindex, windex)\r\n         end\r\n      end\r\n      self._TurretWeaponControllers = Weapons\r\n   end\r\n   return self._TurretWeaponControllers\r\nend\r\n\r\nfunction Commons:WeaponControllers()\r\n   if not self._WeaponControllers then\r\n      local Weapons = {}\r\n      for _,Weapon in pairs(self:HullWeaponControllers()) do\r\n         table.insert(Weapons, Weapon)\r\n      end\r\n      for _,Weapon in pairs(self:TurretWeaponControllers()) do\r\n         table.insert(Weapons, Weapon)\r\n      end\r\n      self._WeaponControllers = Weapons\r\n   end\r\n   return self._WeaponControllers\r\nend\r\n\r\nfunction Commons.ConvertTarget(Index, TargetInfo, Offset, Range)\r\n   local Target = {\r\n      Id = TargetInfo.Id,\r\n      Index = Index,\r\n      Position = TargetInfo.Position,\r\n      Offset = Offset,\r\n      Range = Range,\r\n      SqrRange = Range * Range,\r\n      AimPoint = TargetInfo.AimPointPosition,\r\n      Velocity = TargetInfo.Velocity,\r\n   }\r\n   return Target\r\nend\r\n\r\nfunction Commons:GatherTargets(Targets, StartIndex, MaxTargets)\r\n   local CoM = self:CoM()\r\n   local AttackSalvage = self.AttackSalvage\r\n   -- Query mainframes in the preferred order\r\n   for _,mindex in pairs(Commons.PreferredTargetMainframes) do\r\n      local TargetCount = self.I:GetNumberOfTargets(mindex)\r\n      if TargetCount > 0 then\r\n         if not StartIndex then StartIndex = 0 end\r\n         if not MaxTargets then MaxTargets = math.huge end\r\n         for tindex = StartIndex,TargetCount-1 do\r\n            if #Targets >= MaxTargets then break end\r\n            local TargetInfo = self.I:GetTargetInfo(mindex, tindex)\r\n            -- Will probably never not be valid, but eh, check anyway\r\n            if TargetInfo.Valid and (TargetInfo.Protected or AttackSalvage) then\r\n               local Offset = TargetInfo.Position - CoM\r\n               local Range = Offset.magnitude\r\n               if Range <= Commons.MaxEnemyRange then\r\n                  table.insert(Targets, Commons.ConvertTarget(tindex, TargetInfo, Offset, Range))\r\n               end\r\n            end\r\n         end\r\n         -- Whether or not we actually added new targets, we have a definitive\r\n         -- answer.\r\n         -- All AIs see the same targets, so stop after one has been\r\n         -- successfully queried.\r\n         -- Note can't distinguish between non-existant mainframe\r\n         -- and no targets.\r\n         break\r\n      end\r\n   end\r\nend\r\n\r\nfunction Commons:FirstTarget()\r\n   if not self._FirstTarget then\r\n      -- Did we already gather all targets?\r\n      if self._Targets then\r\n         -- Use first one\r\n         local Target = self._Targets[1]\r\n         self._FirstTarget = Target and { Target } or {}\r\n      else\r\n         -- Just fetch first target, if any\r\n         local Targets = {}\r\n         self:GatherTargets(Targets, 0, 1)\r\n         self._FirstTarget = Targets\r\n      end\r\n   end\r\n   -- Note self._FirstTarget is a table of at most size 1, which allows it\r\n   -- to be distinguished between uninitialized and no target.\r\n   return self._FirstTarget[1]\r\nend\r\n\r\nfunction Commons:Targets()\r\n   if not self._Targets then\r\n      local Targets = {}\r\n      -- Do we have a first target already?\r\n      if self._FirstTarget then\r\n         local Target = self._FirstTarget[1]\r\n         if not Target then\r\n            -- First target was already set, but there is no target.\r\n            -- Definitely no more beyond that.\r\n            self._Targets = {}\r\n            return self._Targets\r\n         end\r\n         -- Copy the first target\r\n         table.insert(Targets, Target)\r\n         -- And continue off after first target\r\n         self:GatherTargets(Targets, Target.Index+1)\r\n      else\r\n         -- Gather from start\r\n         self:GatherTargets(Targets, 0)\r\n      end\r\n      self._Targets = Targets\r\n   end\r\n   return self._Targets\r\nend\r\n\r\n-- Periodic implementation\r\nPeriodic = {}\r\n\r\nfunction Periodic.create(Period, Function, Start)\r\n   local self = {}\r\n\r\n   self.Ticks = Start and Start or Period\r\n   self.Period = Period\r\n   self.Function = Function\r\n\r\n   if Period then\r\n      self.Tick = Periodic.Tick\r\n   else\r\n      -- If Period is nil, Tick does nothing\r\n      self.Tick = function (_, _) end\r\n   end\r\n\r\n   return self\r\nend\r\n\r\nfunction Periodic:Tick(I)\r\n   local Ticks = self.Ticks\r\n   Ticks = Ticks + 1\r\n   if Ticks >= self.Period then\r\n      self.Ticks = 0\r\n      self.Function(I)\r\n   else\r\n      self.Ticks = Ticks\r\n   end\r\nend\r\n\r\n-- MissileDriver module\r\nLastTransceiverCount = 0\r\nTransceiverGuidances = {}\r\nLastTransceiverResetTime = 0\r\nMissileStates = {}\r\nLastTimeTargetSeen = nil\r\n\r\nfunction MissileDriver_GatherTargets(GuidanceInfos)\r\n   local TargetsByPriority = {}\r\n   local TargetsById = {}\r\n\r\n   -- Augment target info\r\n   local Targets = C:Targets()\r\n   for _,Target in pairs(Targets) do\r\n      local CanTarget = {}\r\n      local InRange = {}\r\n      local Altitude = Target.Position.y\r\n      local Range = Target.SqrRange\r\n      for _,GuidanceInfo in pairs(GuidanceInfos) do\r\n         table.insert(CanTarget, Altitude >= GuidanceInfo.MinAltitude and Altitude <= GuidanceInfo.MaxAltitude)\r\n         table.insert(InRange, Range >= GuidanceInfo.MinRange and Range <= GuidanceInfo.MaxRange)\r\n      end\r\n      Target.CanTarget = CanTarget\r\n      Target.InRange = InRange\r\n      table.insert(TargetsByPriority, Target)\r\n      TargetsById[Target.Id] = Target\r\n   end\r\n\r\n   return TargetsByPriority, TargetsById\r\nend\r\n\r\nfunction MissileDriver_FireControl(I, GuidanceInfos, TargetsByPriority)\r\n   local SlotsToFire = {}\r\n   local Fire = false\r\n   for i = 1,#GuidanceInfos do\r\n      local Guidance = GuidanceInfos[i]\r\n      local WeaponSlot = Guidance.WeaponSlot\r\n      if WeaponSlot then\r\n         for _,Target in pairs(TargetsByPriority) do\r\n            -- Range isn't all that accurate since it's range from Position, not turret/controller, but eh...\r\n            if Target.CanTarget[i] and Target.InRange[i] then\r\n               -- Respect priority and don't bother with leading the target\r\n               if not SlotsToFire[WeaponSlot] then\r\n                  SlotsToFire[WeaponSlot] = Target.AimPoint\r\n                  Fire = true\r\n               end\r\n               break -- No need to check more targets\r\n            end\r\n         end\r\n      end\r\n   end\r\n\r\n   -- Only bother if there are slots to fire\r\n   if Fire then\r\n      for _,Weapon in pairs(C:HullWeaponControllers()) do\r\n         local WeaponSlot = Weapon.Slot\r\n         local AimPoint = SlotsToFire[WeaponSlot]\r\n         if AimPoint and not Weapon.PlayerControl then\r\n            local WeaponType = Weapon.Type\r\n            -- Top-level turrets and missile controllers only\r\n            if WeaponType == TURRET or WeaponType == MISSILECONTROL then\r\n               -- Relative to weapon position\r\n               local Offset = AimPoint - Weapon.Position\r\n               if I:AimWeaponInDirection(Weapon.Index, Offset.x, Offset.y, Offset.z, WeaponSlot) > 0 then\r\n                  I:FireWeapon(Weapon.Index, WeaponSlot)\r\n               end\r\n            end\r\n         end\r\n      end\r\n   end\r\nend\r\n\r\n-- Target selection functions. Return the selected target (from Targets\r\n-- table) or nil. Targets will be pre-filtered and ordered by priority.\r\nMissileDriver_TargetSelectors = {\r\n   -- Highest priority target\r\n   function (I, TransceiverIndex, MissileIndex, Targets) -- luacheck: ignore 212\r\n      return Targets[1]\r\n   end,\r\n\r\n   -- Split based on TransceiverIndex and MissileIndex\r\n   function (I, TransceiverIndex, MissileIndex, Targets) -- luacheck: ignore 212\r\n      if #Targets > 0 then\r\n         -- Multiply both indices by prime numbers, take modulo\r\n         return Targets[1 + (TransceiverIndex * 1009 + MissileIndex * 1013) % #Targets]\r\n      else\r\n         return nil\r\n      end\r\n   end\r\n}\r\n\r\nfunction MissileDriver_Update(I, GuidanceInfos, SelectGuidance)\r\n   local Now = C:Now()\r\n   local TargetsByPriority, TargetsById = MissileDriver_GatherTargets(GuidanceInfos)\r\n   if #TargetsByPriority > 0 then\r\n      LastTimeTargetSeen = Now\r\n\r\n      if I.AIMode ~= \"off\" then\r\n         MissileDriver_FireControl(I, GuidanceInfos, TargetsByPriority)\r\n      end\r\n\r\n      local TransceiverCount = I:GetLuaTransceiverCount()\r\n      if TransceiverCount ~= LastTransceiverCount or (LastTransceiverResetTime+TransceiverResetInterval) < Now then\r\n         -- Reset cached guidances if transceiver count changed\r\n         -- (most likely due to damage or repair or timer timed out)\r\n         TransceiverGuidances = {}\r\n         LastTransceiverCount = TransceiverCount\r\n         LastTransceiverResetTime = Now\r\n      end\r\n\r\n      -- Missiles that are currently active are saved here. Then the old\r\n      -- table is overwritten.\r\n      local NewMissileStates = {}\r\n\r\n      -- We want to group missiles up by target so SetTarget methods are only\r\n      -- called once per target. This is done here.\r\n      local GuidanceQueue = {}\r\n\r\n      -- Filtered targets (in priority order) for each guidance type.\r\n      local FilteredTargetsByGuidance = {}\r\n\r\n      for tindex = 0,TransceiverCount-1 do\r\n         local GuidanceIndex = TransceiverGuidances[tindex]\r\n         if not GuidanceIndex then\r\n            -- Select guidance and cache it\r\n            GuidanceIndex = SelectGuidance(I, tindex)\r\n            TransceiverGuidances[tindex] = GuidanceIndex\r\n         end\r\n\r\n         local TargetSelector = MissileDriver_TargetSelectors[GuidanceInfos[GuidanceIndex].TargetSelector]\r\n\r\n         for mindex = 0,I:GetLuaControlledMissileCount(tindex)-1 do\r\n            local Missile = I:GetLuaControlledMissileInfo(tindex, mindex)\r\n            if Missile.Valid then\r\n               local MissileId = Missile.Id\r\n               local MissileState = MissileStates[MissileId]\r\n               if not MissileState then MissileState = {} end\r\n               local MissileTargetId = MissileState.TargetId\r\n               if not MissileTargetId then\r\n                  local FilteredTargets = FilteredTargetsByGuidance[GuidanceIndex]\r\n                  if not FilteredTargets then\r\n                     -- Filter prioritized targets and save.\r\n                     FilteredTargets = {}\r\n                     for _,Target in pairs(TargetsByPriority) do\r\n                        if Target.CanTarget[GuidanceIndex] and Target.InRange[GuidanceIndex] then\r\n                           table.insert(FilteredTargets, Target)\r\n                        end\r\n                     end\r\n                     FilteredTargetsByGuidance[GuidanceIndex] = FilteredTargets\r\n                  end\r\n\r\n                  -- Select target for this missile\r\n                  local Target = TargetSelector(I, tindex, mindex, FilteredTargets)\r\n                  if Target then\r\n                     MissileTargetId = Target.Id\r\n                     MissileState.TargetId = MissileTargetId\r\n                     NewMissileStates[MissileId] = MissileState\r\n                  end\r\n               end\r\n\r\n               local Target = nil\r\n\r\n               -- Now check if the target is still around\r\n               if MissileTargetId then\r\n                  Target = TargetsById[MissileTargetId]\r\n                  if not Target then\r\n                     -- Saved target is gone, select closest target that\r\n                     -- this missile can target\r\n                     local MissilePosition = Missile.Position\r\n                     local ClosestDistance = math.huge -- Actually squared\r\n                     for _,T in pairs(TargetsByPriority) do\r\n                        if T.CanTarget[GuidanceIndex] then\r\n                           local Offset = T.Position - MissilePosition\r\n                           local Distance = Offset.sqrMagnitude\r\n\r\n                           if Distance < ClosestDistance then\r\n                              MissileTargetId = T.Id\r\n                              MissileState.TargetId = MissileTargetId\r\n                              NewMissileStates[MissileId] = MissileState\r\n                              Target = T\r\n\r\n                              ClosestDistance = Distance\r\n                           end\r\n                        end\r\n                     end\r\n                  else\r\n                     -- Save for next update\r\n                     NewMissileStates[MissileId] = MissileState\r\n                  end\r\n               end\r\n\r\n               if Target then\r\n                  -- Add queue entry to guide this missile to its target (once all\r\n                  -- missiles have been checked)\r\n                  local QueueMissiles = GuidanceQueue[Target.Id]\r\n                  if not QueueMissiles then\r\n                     -- First time we've queued up for this target this update\r\n                     QueueMissiles = {}\r\n                     GuidanceQueue[Target.Id] = QueueMissiles\r\n                  end\r\n                  local QueueMissile = {\r\n                     TransceiverIndex = tindex,\r\n                     MissileIndex = mindex,\r\n                     GuidanceIndex = GuidanceIndex,\r\n                     Missile = Missile,\r\n                     MissileState = MissileState,\r\n                  }\r\n                  table.insert(QueueMissiles, QueueMissile)\r\n               end\r\n            end\r\n         end\r\n      end\r\n\r\n      -- Process guidance queue\r\n      for TargetId,QueueMissiles in pairs(GuidanceQueue) do\r\n         local Target = TargetsById[TargetId]\r\n         local TargetPosition,TargetAimPoint,TargetVelocity = Target.Position,Target.AimPoint,Target.Velocity\r\n\r\n         -- First call each controller's SetTarget method\r\n         for _,GuidanceInfo in pairs(GuidanceInfos) do\r\n            GuidanceInfo.Controller:SetTarget(I, TargetPosition, TargetAimPoint, TargetVelocity)\r\n         end\r\n\r\n         -- Now Guide each missile for this target\r\n         for _,QueueMissile in pairs(QueueMissiles) do\r\n            local Guidance = GuidanceInfos[QueueMissile.GuidanceIndex]\r\n            local tindex,mindex = QueueMissile.TransceiverIndex,QueueMissile.MissileIndex\r\n            local AimPoint = Guidance.Controller:Guide(I, tindex, mindex, TargetPosition, TargetAimPoint, TargetVelocity, QueueMissile.Missile, QueueMissile.MissileState)\r\n\r\n            I:SetLuaControlledMissileAimPoint(tindex, mindex, AimPoint.x, AimPoint.y, AimPoint.z)\r\n         end\r\n      end\r\n\r\n      -- Overwrite old states with newly-saved states. Gets rid of\r\n      -- dead missiles.\r\n      MissileStates = NewMissileStates\r\n   elseif LastTimeTargetSeen and (LastTimeTargetSeen+DetonateAfter) < Now then\r\n      LastTimeTargetSeen = nil\r\n\r\n      -- Detonate all missiles\r\n      for tindex = 0,I:GetLuaTransceiverCount()-1 do\r\n         for mindex = 0,I:GetLuaControlledMissileCount(tindex)-1 do\r\n            I:DetonateLuaControlledMissile(tindex, mindex)\r\n         end\r\n      end\r\n   end\r\nend\r\n\r\n-- Returns solution(s) to a quadratic equation in table form.\r\n-- Table will be empty if solutions are imaginary or invalid.\r\nfunction QuadraticSolver(a, b, c)\r\n   if a == 0 then\r\n      -- Actually linear\r\n      if b ~= 0 then\r\n         return { -c / b }\r\n      else\r\n         return {} -- Division by zero...\r\n      end\r\n   else\r\n      -- Discriminant\r\n      local disc = b * b - 4 * a * c\r\n      if disc < 0 then\r\n         return {} -- Imaginary\r\n      elseif disc == 0 then\r\n         -- Single solution\r\n         return { -.5 * b / a }\r\n      else\r\n         -- Two solutions\r\n         local q = (b > 0) and (-.5 * (b + math.sqrt(disc))) or (-.5 * (b - math.sqrt(disc)))\r\n         local t1 = q / a\r\n         local t2 = c / q\r\n         if t1 > t2 then\r\n            return { t2, t1 }\r\n         else\r\n            return { t1, t2 }\r\n         end\r\n      end\r\n   end\r\nend\r\n\r\n-- Quadratic intercept formula\r\nfunction QuadraticIntercept(Position, Velocity, Target, TargetVelocity, DefaultInterceptTime)\r\n   if not DefaultInterceptTime then DefaultInterceptTime = 1 end\r\n   local Offset = Target - Position\r\n   -- Apparently you can apply binomial expansion to vectors\r\n   -- ...as long as it's 2nd degree only\r\n   local a = Vector3.Dot(TargetVelocity, TargetVelocity) - Vector3.Dot(Velocity, Velocity)  -- aka difference of squares of velocity magnitudes\r\n   local b = 2 * Vector3.Dot(Offset, TargetVelocity)\r\n   local c = Vector3.Dot(Offset, Offset) -- Offset.magnitude squared\r\n   local Solutions = QuadraticSolver(a, b, c)\r\n   local InterceptTime = DefaultInterceptTime\r\n   -- Pick smallest positive intercept time\r\n   if #Solutions == 1 then\r\n      local t = Solutions[1]\r\n      if t > 0 then InterceptTime = t end\r\n   elseif #Solutions == 2 then\r\n      local t1 = Solutions[1]\r\n      local t2 = Solutions[2]\r\n      if t1 > 0 then\r\n         InterceptTime = t1\r\n      elseif t2 > 0 then\r\n         InterceptTime = t2\r\n      end\r\n   end\r\n\r\n   return Target + TargetVelocity * InterceptTime,InterceptTime\r\nend\r\n\r\n-- Proportional navigation implementation\r\nfunction ProNav(Gain, TimeStep, MissilePosition, MissileVelocity, TargetPosition, TargetVelocity)\r\n   local Offset = TargetPosition - MissilePosition\r\n   local RelativeVelocity = TargetVelocity - MissileVelocity\r\n   local Omega = Vector3.Cross(Offset, RelativeVelocity) / Vector3.Dot(Offset, Offset)\r\n   -- Acceleration will be orthogonal to missile velocity\r\n   local Direction = MissileVelocity.normalized\r\n   local Acceleration = Vector3.Cross(Direction * -Gain * RelativeVelocity.magnitude, Omega)\r\n\r\n   -- Transform acceleration into a relative aim point\r\n   return MissilePosition + MissileVelocity * TimeStep + Acceleration * TimeStep * TimeStep * 0.5\r\nend\r\n\r\n-- Returns the angle of a vector on the XZ plane relative to forward.\r\n-- Slightly different than Vector3.Angle as it accounts for negative\r\n-- (counter-clockwise) angles as well\r\nfunction GetVectorAngle(v)\r\n   return math.deg(math.atan2(v.x, v.z))\r\nend\r\n\r\n-- http://lua-users.org/wiki/SimpleRound\r\nfunction Round(num, idp)\r\n   local mult = 10^(idp or 0)\r\n   return math.floor(num * mult + 0.5) / mult\r\nend\r\n\r\n-- http://lua-users.org/wiki/CopyTable\r\nfunction deepcopy(orig)\r\n    local orig_type = type(orig)\r\n    local copy\r\n    if orig_type == 'table' then\r\n        copy = {}\r\n        for orig_key, orig_value in next, orig, nil do\r\n            copy[deepcopy(orig_key)] = deepcopy(orig_value)\r\n        end\r\n        -- Note: No access to the metatable\r\n        -- setmetatable(copy, deepcopy(getmetatable(orig)))\r\n    else -- number, string, boolean, etc\r\n        copy = orig\r\n    end\r\n    return copy\r\nend\r\n\r\n-- Returns sign of the argument.\r\n-- By default, returns 0 for 0, unlike Mathf.Sign which returns 1\r\nfunction Sign(n, ZeroSign)\r\n   if n > 0 then\r\n      return 1\r\n   elseif n < 0 then\r\n      return -1\r\n   else\r\n      return ZeroSign or 0\r\n   end\r\nend\r\n\r\n-- GeneralMissile implementation\r\nGeneralMissile = {}\r\n\r\n-- Returns cosine of Angle (given in degrees) or Default\r\nfunction PrepareAngle(Angle, Default)\r\n   return Angle and math.cos(math.rad(Angle)) or Default\r\nend\r\n\r\nfunction GeneralMissile.create(Config)\r\n   local self = deepcopy(Config)\r\n\r\n   -- If one config set or the other is missing, set defaults and activation\r\n   -- appropriately\r\n   if not self.AntiAir then\r\n      self.ProfileActivationElevation = math.huge\r\n      self.AntiAir = {\r\n         Gain = 5,\r\n      }\r\n   elseif not self.Phases then\r\n      self.ProfileActivationElevation = -math.huge\r\n      self.Phases = {\r\n         {\r\n            Distance = 150,\r\n         },\r\n         {\r\n            Distance = 50,\r\n            AboveSeaLevel = false,\r\n            MinElevation = 0,\r\n         },\r\n      }\r\n   end\r\n\r\n   -- Calculate cosine of all angle parameters ahead of time\r\n   self.DetonationAngle = PrepareAngle(self.DetonationAngle, 1)\r\n   self.AntiAir.ThrustAngle = PrepareAngle(self.AntiAir.ThrustAngle)\r\n   self.AntiAir.OneTurnAngle = PrepareAngle(self.AntiAir.OneTurnAngle, 1)\r\n   for i = 1,#self.Phases do\r\n      self.Phases[i].ThrustAngle = PrepareAngle(self.Phases[i].ThrustAngle)\r\n   end\r\n\r\n   -- Handle certain nil values so they will always evaluate false\r\n   if not self.DetonationRange then self.DetonationRange = -1 end\r\n   if not self.AntiAir.OneTurnTime then self.AntiAir.OneTurnTime = -1 end\r\n\r\n   -- Methods (because no setmetatable)\r\n   self.GetTerrainHeight = GeneralMissile.GetTerrainHeight\r\n   self.ModifyAltitude = GeneralMissile.ModifyAltitude\r\n   self.GetPhaseAltitude = GeneralMissile.GetPhaseAltitude\r\n   self.ExecuteProfile = GeneralMissile.ExecuteProfile\r\n   -- \"Public\" methods\r\n   self.SetTarget = GeneralMissile.SetTarget\r\n   self.Guide = GeneralMissile.Guide\r\n\r\n   return self\r\nend\r\n\r\n-- Initialize state, save info about missile\r\nfunction InitMissileState(I, TransceiverIndex, MissileIndex, MissileState)\r\n   local Fuel = 0\r\n   local ThrusterCount,Thrust = 0,0\r\n   local MissileInfo = I:GetMissileInfo(TransceiverIndex, MissileIndex)\r\n   for _,Part in pairs(MissileInfo.Parts) do\r\n      if Part.Name == \"missile fuel tank\" then\r\n         Fuel = Fuel + 5000\r\n      elseif Part.Name == \"missile variable speed thruster\" then\r\n         ThrusterCount = ThrusterCount + 1\r\n         Thrust = Thrust + Part.Registers[2]\r\n      end\r\n   end\r\n   MissileState.Fuel = Fuel\r\n   MissileState.ThrusterCount = ThrusterCount\r\n   MissileState.CurrentThrust = Thrust\r\nend\r\n\r\n-- Update state, including fuel estimation\r\nfunction UpdateMissileState(I, TransceiverIndex, MissileIndex, Position, Missile, MissileState)\r\n   local Fuel = MissileState.Fuel\r\n   if not Fuel then\r\n      -- Initialize state\r\n      InitMissileState(I, TransceiverIndex, MissileIndex, MissileState)\r\n      Fuel = MissileState.Fuel\r\n   end\r\n\r\n   -- Determine time step\r\n   local LastTime = MissileState.LastTime\r\n   if not LastTime then LastTime = 0 end\r\n   local Now = Missile.TimeSinceLaunch\r\n   local TimeStep = Now - LastTime\r\n   MissileState.LastTime = Now\r\n\r\n   -- Integrate to figure out how much fuel was consumed since LastTime.\r\n   -- Note that var thrust ramp up screws this up slightly.\r\n   -- But it's better to overestimate the fuel than underestimate.\r\n   if Position.y >= 0 then\r\n      -- Variable thrusters consume no fuel when underwater\r\n      -- But torpedo props do. So this will be inaccurate if there are\r\n      -- torpedo props...\r\n      Fuel = Fuel - MissileState.CurrentThrust * TimeStep -- Assumes 1 fuel per thrust per second\r\n   end\r\n   MissileState.Fuel = math.max(Fuel, 0)\r\n\r\n   return Now,TimeStep\r\nend\r\n\r\n-- Set thrust according to flavor\r\nfunction SetMissileThrust(I, TransceiverIndex, MissileIndex, Position, Velocity, AimPoint, MissileState, Thrust, ThrustAngle, ImpactTime)\r\n   if not Thrust then return end\r\n\r\n   if Thrust < 0 then\r\n      -- Base thrust on current (estimated) fuel and predicted impact time\r\n      Thrust = Round(MissileState.Fuel / ImpactTime, 1)\r\n      -- Constrain (is this needed?)\r\n      Thrust = math.max(50, math.min(10000, Thrust))\r\n   end\r\n\r\n   -- Set thrust if different\r\n   if MissileState.CurrentThrust ~= Thrust then\r\n      if ThrustAngle then\r\n         -- Note we end up calculating this twice in certain circumstances,\r\n         -- but that's ok\r\n         -- Sometimes it's the predicted aim point, sometimes it's the real\r\n         -- one\r\n         local TargetVector = AimPoint - Position\r\n         local CosAngle = Vector3.Dot(TargetVector.normalized, Velocity.normalized)\r\n         if CosAngle < ThrustAngle then return end -- Not yet\r\n      end\r\n      -- Perform voodoo that is apparently deprecated and/or unstable\r\n      -- But since all the cool kids are doing it...\r\n\r\n      -- How do we check if this is valid?\r\n      local MissileInfo = I:GetMissileInfo(TransceiverIndex, MissileIndex)\r\n\r\n      local ThrusterCount = MissileState.ThrusterCount\r\n      for _,Part in pairs(MissileInfo.Parts) do\r\n         -- Is this name constant or localized?\r\n         if Part.Name == \"missile variable speed thruster\" then\r\n            -- Each thruster carries its share\r\n            Part:SendRegister(2, Thrust / ThrusterCount)\r\n         end\r\n      end\r\n      MissileState.CurrentThrust = Thrust\r\n   end\r\nend\r\n\r\n-- Return highest terrain seen within look-ahead distance\r\nfunction GeneralMissile:GetTerrainHeight(I, Position, Velocity, MaxDistance)\r\n   if not MaxDistance then MaxDistance = math.huge end\r\n\r\n   local LookAheadTime,LookAheadResolution = self.LookAheadTime,self.LookAheadResolution\r\n   if not LookAheadTime or LookAheadResolution <= 0 then return -500 end\r\n\r\n   local Height = -500\r\n   local PlanarVelocity = Vector3(Velocity.x, 0, Velocity.z)\r\n   local Speed = PlanarVelocity.magnitude\r\n   local Direction = PlanarVelocity / Speed\r\n\r\n   local Distance = math.min(Speed * LookAheadTime, MaxDistance)\r\n\r\n   for d = 0,Distance-1,LookAheadResolution do\r\n      Height = math.max(Height, I:GetTerrainAltitudeForPosition(Position + Direction * d))\r\n   end\r\n\r\n   Height = math.max(Height, I:GetTerrainAltitudeForPosition(Position + Direction * Distance))\r\n\r\n   return Height\r\nend\r\n\r\n-- Modify an altitude according to RelativeTo\r\nfunction GeneralMissile:ModifyAltitude(Position, AimPoint, Altitude, RelativeTo)\r\n   if not AimPoint then\r\n      -- Relative to (constrained) target altitude\r\n      if RelativeTo == 1 then\r\n         -- Relative to target's absolute altitude [-500, whatever)\r\n         return self.TargetAltitude + Altitude\r\n      elseif RelativeTo == 2 then\r\n         -- Relative to target's sea depth [-500, 0]\r\n         return self.TargetDepth + Altitude\r\n      elseif RelativeTo == 3 then\r\n         -- Relative to target's ground [0, whatever)\r\n         return self.TargetGround + Altitude\r\n      elseif RelativeTo == 4 then\r\n         -- Relative to missile's altitude\r\n         return Position.y + Altitude\r\n      elseif RelativeTo == 5 then\r\n         -- \"Altitude\" is a lower bound\r\n         return math.max(self.TargetAltitude, Altitude)\r\n      elseif RelativeTo == 6 then\r\n         -- \"Altitude\" is an upper bound\r\n         return math.min(self.TargetAltitude, Altitude)\r\n      else\r\n         -- Absolute (no modification)\r\n         return Altitude\r\n      end\r\n   else\r\n      -- Relative to (constrained) aim point\r\n      if RelativeTo == 1 then\r\n         return AimPoint.y + Altitude\r\n      elseif RelativeTo == 2 then\r\n         return math.min(AimPoint.y, 0) + Altitude\r\n      elseif RelativeTo == 3 then\r\n         return math.max(AimPoint.y, 0) + Altitude\r\n      elseif RelativeTo == 4 then\r\n         return Position.y + Altitude\r\n      elseif RelativeTo == 5 then\r\n         return math.max(AimPoint.y, Altitude)\r\n      elseif RelativeTo == 6 then\r\n         return math.min(AimPoint.y, Altitude)\r\n      else\r\n         return Altitude\r\n      end\r\n   end\r\nend\r\n\r\n-- Modify altitude according to flavor\r\nfunction GeneralMissile:GetPhaseAltitude(I, Position, Velocity, Phase, MaxDistance)\r\n   local Height = self:GetTerrainHeight(I, Position, Velocity, MaxDistance)\r\n   if Phase.AboveSeaLevel then\r\n      -- Constrain terrain hugging to sea level\r\n      Height = math.max(Height, 0)\r\n   end\r\n   Height = Height + Phase.MinElevation\r\n\r\n   local Altitude = Phase.Altitude\r\n   if not Altitude then\r\n      -- Always relative to terrain.\r\n      return Height\r\n   else\r\n      -- Relative to something, hugging terrain if necessary.\r\n      return math.max(self:ModifyAltitude(Position, nil, Altitude, Phase.RelativeTo), Height)\r\n   end\r\nend\r\n\r\n-- Adjust aim point according to current profile phase\r\nfunction GeneralMissile:ExecuteProfile(I, TransceiverIndex, MissileIndex, Position, Velocity, AimPoint, TargetVelocity, MissileState)\r\n   -- Use quadratic prediction to determine aim point and predicted impact time\r\n   local ImpactTime\r\n   AimPoint,ImpactTime = QuadraticIntercept(Position, Velocity, AimPoint, TargetVelocity, 9999)\r\n\r\n   -- For sanity, range comparisons are done against ground distance\r\n   local NewTarget = Vector3(AimPoint.x, Position.y, AimPoint.z)\r\n   local GroundOffset = NewTarget - Position\r\n   local GroundDistance = GroundOffset.magnitude\r\n\r\n   -- First check if within terminal distance\r\n   local TerminalPhase = self.Phases[1]\r\n   if GroundDistance < TerminalPhase.Distance then\r\n      -- Modify aim point, if configured to do so\r\n      local Altitude = TerminalPhase.Altitude\r\n      if Altitude then\r\n         AimPoint = Vector3(AimPoint.x, self:ModifyAltitude(Position, AimPoint, Altitude, TerminalPhase.RelativeTo), AimPoint.z)\r\n      end\r\n\r\n      SetMissileThrust(I, TransceiverIndex, MissileIndex, Position, Velocity, AimPoint, MissileState, TerminalPhase.Thrust, TerminalPhase.ThrustAngle, ImpactTime)\r\n\r\n      return AimPoint\r\n   end\r\n\r\n   -- The assumption is that the phases are in order, closest to farthest\r\n   -- Except for the last, which is always the closing phase regardless of\r\n   -- its Distance\r\n   local PreviousPhase,IsClosing\r\n   local Phase = TerminalPhase\r\n   for i = 2,#self.Phases do\r\n      PreviousPhase = Phase\r\n      Phase = self.Phases[i]\r\n      IsClosing = i == #self.Phases\r\n      if GroundDistance < Phase.Distance then break end\r\n      -- If it's the last one (closing phase), the loop will end anyway\r\n   end\r\n\r\n   local GroundDirection,ToNextPhase\r\n\r\n   -- Rotate aim point, if configured to do so\r\n   local ApproachAngle = Phase.ApproachAngle\r\n   if ApproachAngle then\r\n      -- \"Forward\" is based off target's velocity\r\n      local TargetYaw = GetVectorAngle(TargetVelocity)\r\n      -- Determines missile's relative bearing so we can pick a side if needed\r\n      local MissileBearing = Mathf.DeltaAngle(TargetYaw, GetVectorAngle(Position - AimPoint))\r\n      -- Aim point bearing in world coordinates\r\n      local AimPointBearing = (TargetYaw + Sign(MissileBearing, 1) * ApproachAngle) % 360\r\n\r\n      -- Better way to calculate this?\r\n      local ModifiedAimPoint = AimPoint + Quaternion.Euler(0, AimPointBearing, 0) * (Vector3.forward * PreviousPhase.Distance)\r\n      ModifiedAimPoint.y = Position.y\r\n      local Offset = ModifiedAimPoint - Position\r\n\r\n      ToNextPhase = Offset.magnitude\r\n      GroundDirection = Offset / ToNextPhase\r\n   else\r\n      -- No aim point modification\r\n      GroundDirection = GroundOffset / GroundDistance\r\n      ToNextPhase = GroundDistance - PreviousPhase.Distance\r\n   end\r\n\r\n   -- New aim point is toward target at edge of next phase\r\n   -- (or closing phase distance, if closing phase)\r\n   local AimDistance = IsClosing and Phase.Distance or ToNextPhase\r\n   local NewAimPoint = Position + GroundDirection * AimDistance\r\n\r\n   -- Modify altitude according to parameters\r\n   NewAimPoint.y = self:GetPhaseAltitude(I, Position, Velocity, Phase, ToNextPhase)\r\n   -- Set thrust\r\n   SetMissileThrust(I, TransceiverIndex, MissileIndex, Position, Velocity, NewAimPoint, MissileState, Phase.Thrust, Phase.ThrustAngle, ImpactTime)\r\n   -- Perform horizontal evasion, if any\r\n   local Evasion = Phase.Evasion\r\n   if Evasion then\r\n      local Perp = Vector3.Cross(GroundDirection, Vector3.up)\r\n      -- Note this uses the global Now\r\n      NewAimPoint = NewAimPoint + Perp * Evasion[1] * (2 * Mathf.PerlinNoise(Evasion[2] * C:Now(), TransceiverIndex * 37 + MissileIndex) - 1)\r\n   end\r\n\r\n   return NewAimPoint\r\nend\r\n\r\nfunction GeneralMissile:SetTarget(I, TargetPosition, _, _)\r\n   local TargetAltitude = TargetPosition.y\r\n\r\n   self.TargetAltitude = TargetAltitude -- Raw altitude\r\n   self.TargetDepth = math.min(TargetAltitude, 0) -- When below sea level\r\n   self.TargetGround = math.max(I:GetTerrainAltitudeForPosition(TargetPosition), 0) -- When above sea level\r\n\r\n   -- For now, executing the profile is solely based on the target's\r\n   -- elevation above sea level.\r\n   self.DoExecuteProfile = (TargetAltitude - self.TargetGround) <= self.ProfileActivationElevation\r\nend\r\n\r\nfunction GeneralMissile:Guide(I, TransceiverIndex, MissileIndex, _, TargetAimPoint, TargetVelocity, Missile, MissileState)\r\n   local MissilePosition = Missile.Position\r\n   local MissileVelocity = Missile.Velocity\r\n   local MissileSpeed = MissileVelocity.magnitude\r\n\r\n   local Now,TimeStep = UpdateMissileState(I, TransceiverIndex, MissileIndex, MissilePosition, Missile, MissileState)\r\n\r\n   -- Note these are against the true aim point\r\n   local TargetVector = TargetAimPoint - MissilePosition\r\n   local TargetRange = TargetVector.magnitude\r\n   -- Calculate angle between missile velocity and target vector\r\n   local CosAngle = Vector3.Dot(TargetVector / TargetRange, MissileVelocity / MissileSpeed)\r\n\r\n   -- Check if we should detonate\r\n   if TargetRange <= self.DetonationRange and CosAngle <= self.DetonationAngle then\r\n      I:DetonateLuaControlledMissile(TransceiverIndex, MissileIndex)\r\n      return TargetAimPoint -- Don't really care at this point\r\n   end\r\n\r\n   local AimPoint\r\n\r\n   local OneTurnStart = MissileState.OneTurnStart\r\n   local MinAltitude = self.MinAltitude\r\n\r\n   if not OneTurnStart and MissilePosition.y >= MinAltitude then\r\n      -- Record the first time it is above minimum altitude\r\n      OneTurnStart = Now\r\n      MissileState.OneTurnStart = Now\r\n   end\r\n\r\n   if MissilePosition.y < MinAltitude then\r\n      -- Below minimum altitude, head straight up\r\n      AimPoint = Vector3(MissilePosition.x, MinAltitude+1000, MissilePosition.z)\r\n      -- Don't bother with setting thrust since they don't work underwater\r\n   elseif self.DoExecuteProfile then\r\n      -- Execute profile\r\n      AimPoint = self:ExecuteProfile(I, TransceiverIndex, MissileIndex, MissilePosition, MissileVelocity, TargetAimPoint, TargetVelocity, MissileState)\r\n   else\r\n      -- Since PN sucks at large angles, perform a \"one turn\" maneuver\r\n      -- if newly-launched\r\n      if Now <= (self.AntiAir.OneTurnTime + OneTurnStart) and CosAngle <= self.AntiAir.OneTurnAngle then\r\n         -- Just turn straight toward target\r\n         AimPoint = TargetAimPoint\r\n      else\r\n         -- Use PN guidance\r\n         AimPoint = ProNav(self.AntiAir.Gain, TimeStep, MissilePosition, MissileVelocity, TargetAimPoint, TargetVelocity)\r\n      end\r\n      -- Set thrust\r\n      local Thrust,ThrustAngle = self.AntiAir.DefaultThrust,nil\r\n      local TerminalRange = self.AntiAir.TerminalRange\r\n      if TerminalRange and TargetRange <= TerminalRange then\r\n         Thrust = self.AntiAir.Thrust\r\n         ThrustAngle = self.AntiAir.ThrustAngle\r\n      end\r\n      SetMissileThrust(I, TransceiverIndex, MissileIndex, MissilePosition, MissileVelocity, TargetAimPoint, MissileState, Thrust, ThrustAngle, TargetRange / MissileSpeed)\r\n   end\r\n\r\n   return AimPoint\r\nend\r\n\r\n-- General missile main\r\nMyMissile = GeneralMissile.create(Config)\r\n\r\nGuidanceInfos = {\r\n   {\r\n      Controller = MyMissile,\r\n      MinAltitude = Limits.MinAltitude,\r\n      MaxAltitude = Limits.MaxAltitude,\r\n      MinRange = Limits.MinRange * Limits.MinRange,\r\n      MaxRange = Limits.MaxRange * Limits.MaxRange,\r\n      WeaponSlot = MissileWeaponSlot,\r\n      TargetSelector = MissileTargetSelector,\r\n   }\r\n}\r\n\r\nfunction SelectGuidance(_, _)\r\n   return 1\r\nend\r\n\r\n-- Main update loop\r\nfunction MissileMain_Update(I)\r\n   MissileDriver_Update(I, GuidanceInfos, SelectGuidance)\r\nend\r\n\r\nMissileMain = Periodic.create(UpdateRate, MissileMain_Update)\r\n\r\nfunction Update(I) -- luacheck: ignore 131\r\n   C = Commons.create(I)\r\n   if not C:IsDocked() then\r\n      MissileMain:Tick(I)\r\n   end\r\nend"],"BlockStringDataIds":[3,4],"GameVersion":"v2.16","PersistentSubObjectIndex":1,"BlockCount":1275}}