From 1d16220c1ce564953551d45e2fa7689b23bd4030 Mon Sep 17 00:00:00 2001 From: Francisco Coelho Date: Tue, 30 Jan 2024 10:52:07 +0000 Subject: [PATCH] hello 2024 --- 2023-11-11--biblio.zip | Bin 0 -> 31598238 bytes NOVALINCS/00-Application_Form-FINAL.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ NOVALINCS/00-Application_Form-FINAL.pdf | Bin 0 -> 44220 bytes NOVALINCS/00-Call-TEMPLATE.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ NOVALINCS/00-Call-TEMPLATE.pdf | Bin 0 -> 81806 bytes NOVALINCS/01-Call-DRAFT.md | 12 ++++++++++++ NOVALINCS/01-Call-DRAFT.pdf | Bin 0 -> 39226 bytes NOVALINCS/01-Call-Underg_A.md | 17 +++++++++++++++++ NOVALINCS/NOVA LINCS.UE TRA Application Form | Zugzwang.docx | Bin 0 -> 12047 bytes NOVALINCS/NOVA LINCS.UE TRA Application Form | Zugzwang.gddoc | 1 + NOVALINCS/TdOS-JasonMAllen.jpg | Bin 0 -> 87283 bytes NOVALINCS/bolsas/BI/2023-01-91 | Oficio Juri.gddoc | 1 + NOVALINCS/bolsas/BI/2023-02-01 _ Ata1.pdf | Bin 0 -> 86182 bytes NOVALINCS/bolsas/BI/2023-02-01 | Ata1.gddoc | 1 + NOVALINCS/bolsas/BI/2023-02-03 | Edital | EN.pdf | Bin 0 -> 195634 bytes NOVALINCS/bolsas/BI/2023-02-03 | Edital | PT.gddoc | 1 + NOVALINCS/bolsas/BI/2023-02-03 | Edital | PT.pdf | Bin 0 -> 178158 bytes NOVALINCS/bolsas/BI/2023-03-01 _ Ata 2.pdf | Bin 0 -> 84759 bytes NOVALINCS/bolsas/BI/2023-03-01 | Ata 2.gddoc | 1 + NOVALINCS/bolsas/BI/signed/2023-01-19 | BI | Oficio Juri.pdf | Bin 0 -> 59499 bytes NOVALINCS/bolsas/BI/signed/2023-02-01 | BI | Ata 01.pdf | Bin 0 -> 213000 bytes NOVALINCS/bolsas/BI/signed/2023-03-01 | BI | Ata 02.pdf | Bin 0 -> 237056 bytes NOVALINCS/bolsas/BI/zz_old/Edital BolsaInv.MSc | Zugzwang | EN.gddoc | 1 + NOVALINCS/bolsas/BII/2023-01-19 | Oficio Homologação Júri.gddoc | 1 + NOVALINCS/bolsas/BII/2023-01-19 | Oficio Juri BolsaII.Lic Zugzwang.pdf | Bin 0 -> 43085 bytes NOVALINCS/bolsas/BII/2023-02-01 _ Ata1.pdf | Bin 0 -> 86736 bytes NOVALINCS/bolsas/BII/2023-02-01 | Ata1.gddoc | 1 + NOVALINCS/bolsas/BII/2023-02-02 | Edital BolsaII.Lic | Zugzwang | EN.gddoc | 1 + NOVALINCS/bolsas/BII/2023-02-02 | Edital BolsaII.Lic | Zugzwang | PT.gddoc | 1 + NOVALINCS/bolsas/BII/2023-02-03 | Edital PT_bolsa_BII_novalincs.pdf | Bin 0 -> 178392 bytes NOVALINCS/bolsas/BII/2023-03-01 _ Ata 2.pdf | Bin 0 -> 104085 bytes NOVALINCS/bolsas/BII/2023-03-01 | Ata 2.gddoc | 1 + NOVALINCS/bolsas/BII/2023-03-02 13:23 | Entrevista | Email Convocatória.gddoc | 1 + NOVALINCS/bolsas/BII/2023-03-02 17:00 | Entrevista (Respostas).gdsheet | 1 + NOVALINCS/bolsas/BII/2023-03-02 17:00 | Entrevista.gdform | 1 + NOVALINCS/bolsas/BII/2023-03-02 18:00 | Ata3.gddoc | 1 + NOVALINCS/bolsas/BII/2023-03-02 18_00 _ Ata3.pdf | Bin 0 -> 103451 bytes NOVALINCS/bolsas/BII/2023-03-03 | Notificação Candidatos.gddoc | 1 + NOVALINCS/bolsas/BII/2023-03-07 | BII | Declaração Conflito de Interesses.gddoc | 1 + NOVALINCS/bolsas/BII/2023-03-07 | BII | Plano de Trabalhos.gddoc | 1 + NOVALINCS/bolsas/BII/2023-03-17 | Ata 4.gddoc | 1 + NOVALINCS/bolsas/BII/2023-03-27 | Ofício Início Bolsa II.gddoc | 1 + NOVALINCS/bolsas/BII/2023-03-29 _ BII _ Inicio de Bolsa.pdf | Bin 0 -> 63030 bytes NOVALINCS/bolsas/BII/2023-03-29 _ BII _ Inicio de Bolsa_signed.pdf | Bin 0 -> 319132 bytes NOVALINCS/bolsas/BII/2023-03-29 | BII | Inicio de Bolsa.gddoc | 1 + NOVALINCS/bolsas/BII/2023-04-26 | Oficio Início de Bolsa.pdf | Bin 0 -> 62087 bytes NOVALINCS/bolsas/BII/2023-09-01 | Inquérito Atividades Bolseiros.gddoc | 1 + NOVALINCS/bolsas/BII/2023-09-01 | Oficio Renovação Bolsa.gddoc | 1 + NOVALINCS/bolsas/BII/2023-09-01 | Relatorio Atividades Bolseiros.gddoc | 1 + NOVALINCS/bolsas/BII/2023-99-03 | Minuta Contrato Bolsa.gddoc | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-03-29 _ BII _ Inicio de Bolsa_signed.pdf | Bin 0 -> 319132 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 Inscrições.pdf | Bin 0 -> 192703 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 Inscrições.png | Bin 0 -> 225213 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 | Inscrições.png | Bin 0 -> 262616 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-09-01 Relatorio Atividades Bolseiros.pdf | Bin 0 -> 145905 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/AlicE Martins.pdf | Bin 0 -> 111671 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/BII | Candidatura à Bolsa de Iniciação à Investigação | Alice Martins.pdf | Bin 0 -> 21679 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/BII | Plano de Trabalhos.pdf | Bin 0 -> 52262 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Captura de ecrã de 2023-02-27 16-35-44.png | Bin 0 -> 190194 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Consulta IBAN, BIC e SWIFT 22-05-2023 14 15.pdf | Bin 0 -> 130418 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova.pdf | Bin 0 -> 280470 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova_preenchida.pdf | Bin 0 -> 195097 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova_prepreenchido.pdf | Bin 0 -> 292899 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/bolsa.pdf | Bin 0 -> 195097 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_aproveitamento_escolar.pdf | Bin 0 -> 487947 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_matricula_inscricao-2023.pdf | Bin 0 -> 505384 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_matricula_inscricao.pdf | Bin 0 -> 505384 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/dados.md | 6 ++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 Relatorio Atividades Bolseiros.pdf | Bin 0 -> 148189 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 | Inquérito Atividades Bolseiros.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 | Oficio Renovação Bolsa.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/Declaração_Generali_ausência de acidentes (1).docx | Bin 0 -> 1107261 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/12-renovacao-bolsa-alice_signed.pdf | Bin 0 -> 334081 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/ofício_renovação.pdf | Bin 0 -> 70654 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/ofício_renovação.tex | 31 +++++++++++++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/parecer/parecer_renovação.pdf | Bin 0 -> 32021 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/parecer/parecer_renovação.tex | 36 ++++++++++++++++++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.md | 20 ++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.pdf | Bin 0 -> 34146 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.tex | 38 ++++++++++++++++++++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf | Bin 0 -> 148156 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp | Bin 0 -> 17236 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf | Bin 0 -> 134825 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/renovacao-amartins.zip | Bin 0 -> 899307 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/comprovativo_matricula-inscricao-2023.pdf | Bin 0 -> 505384 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/ofício_renovação-signed.pdf | Bin 0 -> 322492 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/parecer_renovação-signed.pdf | Bin 0 -> 32021 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/plano_trabalhos-signed.pdf | Bin 0 -> 33470 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/relatorio_atividades-signed.pdf | Bin 0 -> 133677 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 Relatorio Atividades Bolseiros.pdf | Bin 0 -> 148189 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 | Inquérito Atividades Bolseiros.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 | Oficio Renovação Bolsa.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-10-31 | Inquérito Atividades Bolseiros.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/Declaração_Generali_ausência de acidentes (1).docx | Bin 0 -> 1107261 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/12-renovacao-bolsa-alice_signed.pdf | Bin 0 -> 334081 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/15-renovacao-bolsa-alice_signed.pdf | Bin 0 -> 334114 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/ofício_renovação.pdf | Bin 0 -> 21028 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/ofício_renovação.tex | 31 +++++++++++++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/parecer/parecer_renovação.pdf | Bin 0 -> 32161 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/parecer/parecer_renovação.tex | 36 ++++++++++++++++++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.md | 20 ++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.pdf | Bin 0 -> 33764 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.tex | 38 ++++++++++++++++++++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf | Bin 0 -> 148156 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp | Bin 0 -> 17236 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf | Bin 0 -> 134825 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros - signed_am_fc.pdf | Bin 0 -> 141472 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros.gddoc | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros_231120_170319.pdf | Bin 0 -> 209307 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/renovacao-amartins.zip | Bin 0 -> 899307 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/15-renovacao-bolsa-alice_signed.pdf | Bin 0 -> 334114 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/Declaração_Generali_ausência de acidentes.pdf | Bin 0 -> 144293 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/comprovativo_matricula-inscricao-2023.pdf | Bin 0 -> 505384 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/parecer_renovação.pdf | Bin 0 -> 32161 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/plano-trabalhos.pdf | Bin 0 -> 33751 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/relatorio_atividades-signed_am_fc.pdf | Bin 0 -> 141472 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/renovacao_BII_AliceMartins-documentos.zip | Bin 0 -> 901359 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 Relatorio Atividades Bolseiros.pdf | Bin 0 -> 148189 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 | Inquérito Atividades Bolseiros.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 | Oficio Renovação Bolsa.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-10-31 | Inquérito Atividades Bolseiros.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/Declaração_Generali_ausência de acidentes (1).docx | Bin 0 -> 1107261 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/12-renovacao-bolsa-alice_signed.pdf | Bin 0 -> 334081 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/15-renovacao-bolsa-alice_signed.pdf | Bin 0 -> 334114 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/ofício_renovação.pdf | Bin 0 -> 21028 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/ofício_renovação.tex | 31 +++++++++++++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/parecer/parecer_renovação.pdf | Bin 0 -> 32161 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/parecer/parecer_renovação.tex | 36 ++++++++++++++++++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.md | 20 ++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.pdf | Bin 0 -> 33764 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.tex | 38 ++++++++++++++++++++++++++++++++++++++ NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf | Bin 0 -> 148156 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp | Bin 0 -> 17236 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf | Bin 0 -> 134825 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros - signed_am_fc.pdf | Bin 0 -> 141472 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros.gddoc | 1 + NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros_231120_170319.pdf | Bin 0 -> 209307 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/renovacao-amartins.zip | Bin 0 -> 899307 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/15-renovacao-bolsa-alice_signed.pdf | Bin 0 -> 334114 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/Declaração_Generali_ausência de acidentes.docx | Bin 0 -> 627704 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/comprovativo_matricula-inscricao-2023.pdf | Bin 0 -> 505384 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/parecer_renovação.pdf | Bin 0 -> 32161 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/plano-trabalhos.pdf | Bin 0 -> 33751 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/relatorio_atividades-signed_am_fc.pdf | Bin 0 -> 141472 bytes NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/renovacao_BII_Alice_Martins-documentos.zip | Bin 0 -> 1526447 bytes NOVALINCS/bolsas/BII/Ata 02.pdf | Bin 0 -> 104085 bytes NOVALINCS/bolsas/BII/Ata 04.pdf | Bin 0 -> 970913 bytes NOVALINCS/bolsas/BII/Ata 04.pdf.jpg | Bin 0 -> 962403 bytes NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/BII | Candidatura para Projeto | João Branquinho.pdf | Bin 0 -> 69710 bytes NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/Joao Branquinho.pdf | Bin 0 -> 101902 bytes NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/comprovativo_matricula_inscricao-1.pdf | Bin 0 -> 505487 bytes NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/disc + notas.jpg | Bin 0 -> 234157 bytes NOVALINCS/bolsas/BII/remeter/2023-01-19 | BII | Oficio Homologação Juri.pdf | Bin 0 -> 43085 bytes NOVALINCS/bolsas/BII/remeter/2023-02-01 | BII | Ata 01.pdf | Bin 0 -> 213051 bytes NOVALINCS/bolsas/BII/remeter/2023-02-15 | BII | JBranquinho | Comprovativo Matricula Inscrição.pdf | Bin 0 -> 505487 bytes NOVALINCS/bolsas/BII/remeter/2023-02-27 | BII | AMartins | Comprovativo Aproveitamento Escolar.pdf | Bin 0 -> 487947 bytes NOVALINCS/bolsas/BII/remeter/2023-02-27 | BII | AMartins | Comprovativo Matricula Inscricao.pdf | Bin 0 -> 505384 bytes NOVALINCS/bolsas/BII/remeter/2023-03-01 | BII | Ata 02.pdf | Bin 0 -> 289227 bytes NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Ata 03.pdf | Bin 0 -> 267945 bytes NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Entrevista | Email Convocatória | src.pdf | Bin 0 -> 30479 bytes NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Entrevista | Email Convocatória.pdf | Bin 0 -> 46596 bytes NOVALINCS/bolsas/BII/remeter/2023-03-03 | BII | AMartins | Email Aceitação.pdf | Bin 0 -> 81724 bytes NOVALINCS/bolsas/BII/remeter/2023-03-03 | BII | Notificação Candidatos.pdf | Bin 0 -> 98309 bytes NOVALINCS/bolsas/BII/remeter/2023-03-06 | BII | JBranquinho | Email Aceitação.pdf | Bin 0 -> 82797 bytes NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Declaração Conflito de Interesses | Bruno.pdf | Bin 0 -> 181064 bytes NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Declaração Conflito de Interesses | fc.pdf | Bin 0 -> 102357 bytes NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Oficio Inicio de Bolsa.pdf | Bin 0 -> 80160 bytes NOVALINCS/bolsas/BII/zz-lostNfound/Edital EN.docx | Bin 0 -> 491247 bytes NOVALINCS/bolsas/BII/zz-lostNfound/Edital PT.docx | Bin 0 -> 491647 bytes NOVALINCS/bolsas/BII2/2023-03-03 Oficio Juri BII.pdf | Bin 0 -> 43315 bytes NOVALINCS/bolsas/BII2/2023-03-07 | BII2 | Oficio Juri.gddoc | 1 + NOVALINCS/bolsas/BII2/2023-B | Ata 1.gddoc | 1 + NOVALINCS/bolsas/BII2/2023-C | Edital | EN.gddoc | 1 + NOVALINCS/bolsas/BII2/2023-C | Edital | PT.gddoc | 1 + NOVALINCS/bolsas/BII2/2023-C | Edital | PT.pdf | Bin 0 -> 178392 bytes NOVALINCS/bolsas/BII2/2023-D | Ata 2.gddoc | 1 + NOVALINCS/bolsas/BII2/2023-E | Notificação para Entrevista.gddoc | 1 + NOVALINCS/bolsas/BII2/2023-F | Entrevista | Formulário.gdform | 1 + NOVALINCS/bolsas/BII2/2023-G | Ata 3.gddoc | 1 + NOVALINCS/bolsas/BII2/2023-H | Notificação Candidatos.gddoc | 1 + NOVALINCS/bolsas/BII2/2023-I | Ata 4.gddoc | 1 + NOVALINCS/bolsas/Estatuto Bolseiro de Investigação | Consolidação.pdf | Bin 0 -> 123185 bytes NOVALINCS/bolsas/RegulamentoBolsasFCT2019.pdf | Bin 0 -> 268850 bytes NOVALINCS/bolsas/Tabela_de_Valores_SMM_2022.pdf | Bin 0 -> 447432 bytes NOVALINCS/bolsas/kit bolsas_2023/1_minuta de oficio juri bolsa_2023.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/2_minuta de Ata1_2023.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/3_minuta_edital_bolsa_2023_EN.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/3_minuta_edital_bolsa_2023_PT.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/4_minuta de Ata2_2023.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/5_Notificaçõesparaentrevista.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/6_minuta de Ata3_2023.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/7_Notificacao_candidatos.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/8_minuta de Ata4_2023.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/9_Minuta oficio Inicio de Bolsa.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/A_Regulamentobolsas_FCT.pdf | Bin 0 -> 1510801 bytes NOVALINCS/bolsas/kit bolsas_2023/B_Estatuto bolseiro_Consolidação.pdf | Bin 0 -> 40995 bytes NOVALINCS/bolsas/kit bolsas_2023/C_Tabela_de_Valores_SMM_atualizadoJan2022.pdf | Bin 0 -> 447432 bytes NOVALINCS/bolsas/kit bolsas_2023/Minuta_Contrato_Bolsa 2023.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/dec conflito de interesses 2023.gddoc | 1 + NOVALINCS/bolsas/kit bolsas_2023/docx/1_minuta de oficio juri bolsa_2023.doc | Bin 0 -> 54784 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/2_minuta de Ata1_2023.doc | Bin 0 -> 52224 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/3_minuta_edital_bolsa_2023_EN.docx | Bin 0 -> 64399 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/3_minuta_edital_bolsa_2023_PT.docx | Bin 0 -> 65499 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/4_minuta de Ata2_2023.docx | Bin 0 -> 41896 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/5_Notificaçõesparaentrevista.docx | Bin 0 -> 42707 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/6_minuta de Ata3_2023.docx | Bin 0 -> 42235 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/7_Notificacao_candidatos.docx | Bin 0 -> 43403 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/8_minuta de Ata4_2023.docx | Bin 0 -> 42188 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/9_Minuta oficio Inicio de Bolsa.docx | Bin 0 -> 47850 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/Minuta_Contrato_Bolsa 2023.docx | Bin 0 -> 80571 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/dec conflito de interesses 2023.docx | Bin 0 -> 41395 bytes NOVALINCS/bolsas/kit bolsas_2023/docx/modelo_relatorio_atividades_bolseiros_2023.docx | Bin 0 -> 61527 bytes NOVALINCS/bolsas/kit bolsas_2023/modelo_relatorio_atividades_bolseiros_2023.gddoc | 1 + NOVALINCS/demo-markdown.md | 32 ++++++++++++++++++++++++++++++++ NOVALINCS/demo-markdown.pdf | Bin 0 -> 160788 bytes biblio.gdlink | 1 + biblio/2002 - Answer set programming and plan generation.pdf | Bin 0 -> 116000 bytes biblio/2013 - Answer Set Solving in Practice - Martin Gebser, Roland Kaminski, Benjamin Kaufmann, Torsten Schaub.pdf | Bin 0 -> 2492180 bytes biblio/2014 - A new method of proving the existence of answer sets for disjunctive logic programs.pdf | Bin 0 -> 197135 bytes biblio/2018 - Deep Learning, A critical appraisal - Gary Marcus.pdf | Bin 0 -> 264408 bytes biblio/2018 - Foundations of Probabilistic Logic Programming. Languages, Semantics, Inference and Learning - Fabrizio Riguzzi.pdf | Bin 0 -> 12531539 bytes biblio/2019 - A Meta-Transfer Objective for Learning to Disentangle Causal Mechanisms - Bengio et al.pdf | Bin 0 -> 892506 bytes biblio/2019 - On the Measure of Intelligence - Francois Chollet.pdf | Bin 0 -> 1280262 bytes biblio/2019 - Potassco User Guide.pdf | Bin 0 -> 764439 bytes biblio/2020 - ASP-Core-2 Input Language Format - Calimeri et al..pdf | Bin 0 -> 174207 bytes biblio/2020 - Prolog and Answer Set Programming - Languages in Logic Programming.pdf | Bin 0 -> 243022 bytes biblio/2020 - The joy of Probabilistic Answer Set Programming: Semantics - complexity, expressivity, inference - Fabio Gagliardi Cozman, Denis Deratani Mauá.pdf | Bin 0 -> 667074 bytes biblio/2021 - CASP and SCASP best practices.pdf | Bin 0 -> 88835 bytes biblio/ASP-DLV_tutorial.html | 1308 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ biblio/ASP-DLV_tutorial.md | 923 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ biblio/Special Issue on Answer Set Programming-Abstract.pdf | 3631 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ biblio/annotated -- 2018 - Foundations of Probabilistic Logic Programming. Languages, Semantics, Inference and Learning - Fabrizio Riguzzi.pdf | Bin 0 -> 12594744 bytes biblio/plingo/2007-ProbLog - a probabilistic prolog and its application in link discovery.pdf | Bin 0 -> 147402 bytes biblio/plingo/2008-Probabilistic reasoning with answer sets.pdf | Bin 0 -> 768023 bytes biblio/plingo/2016-Weighted Rules under the Stable Model Semantics.pdf | Bin 0 -> 383958 bytes biblio/plingo/2017-LPMLN, Weak Constraints and P-log.pdf | 2884 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ biblio/plingo/2021-Solution Enumeration by Optimality in Answer Set Programming.pdf | Bin 0 -> 586396 bytes code/.vscode/launch.json | 17 +++++++++++++++++ code/asp/drafts/alarm.lp | 5 +++++ code/asp/drafts/assp_pag43.lp | 2 ++ code/asp/drafts/assp_pag46.lp | 1 + code/asp/drafts/bachelor.lp | 9 +++++++++ code/asp/drafts/bachelor.pl | 6 ++++++ code/asp/drafts/barber.lp | 8 ++++++++ code/asp/drafts/choices_01.lp | 11 +++++++++++ code/asp/drafts/choices_02.lp | 9 +++++++++ code/asp/drafts/choices_03.lp | 10 ++++++++++ code/asp/drafts/choices_04.lp | 5 +++++ code/asp/drafts/choices_05.lp | 8 ++++++++ code/asp/drafts/choices_06.lp | 5 +++++ code/asp/drafts/color.lp | 15 +++++++++++++++ code/asp/drafts/credal_01.lp | 4 ++++ code/asp/drafts/cyclic.lp | 9 +++++++++ code/asp/drafts/cyclic.pl | 14 ++++++++++++++ code/asp/drafts/disj.lp | 3 +++ code/asp/drafts/double_negation.lp | 42 ++++++++++++++++++++++++++++++++++++++++++ code/asp/drafts/ex03.lp | 3 +++ code/asp/drafts/gcE01.lp | 9 +++++++++ code/asp/drafts/gcI01.lp | 8 ++++++++ code/asp/drafts/hanoiE.lp | 21 +++++++++++++++++++++ code/asp/drafts/hanoiI.lp | 11 +++++++++++ code/asp/drafts/heads_tails.lp | 4 ++++ code/asp/drafts/monty_hall.lp | 20 ++++++++++++++++++++ code/asp/drafts/no_model_cyclic.lp | 1 + code/asp/drafts/no_model_wa.lp | 8 ++++++++ code/asp/drafts/nonstrat.lp | 7 +++++++ code/asp/drafts/onabove.lp | 5 +++++ code/asp/drafts/p01.lp | 4 ++++ code/asp/drafts/p18.lp | 3 +++ code/asp/drafts/p19.lp | 2 ++ code/asp/drafts/p20.lp | 2 ++ code/asp/drafts/pasp01.lp | 3 +++ code/asp/drafts/pasp_general.lp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ code/asp/drafts/paths.lp | 15 +++++++++++++++ code/asp/drafts/pdist.lp | 2 ++ code/asp/drafts/pqr.lp | 6 ++++++ code/asp/drafts/pqueens.lp | 20 ++++++++++++++++++++ code/asp/drafts/prob01.lp | 5 +++++ code/asp/drafts/prob02.lp | 2 ++ code/asp/drafts/py_01.lp | 22 ++++++++++++++++++++++ code/asp/drafts/py_02.lp | 16 ++++++++++++++++ code/asp/drafts/roads.lp | 14 ++++++++++++++ code/asp/drafts/s.lp | 7 +++++++ code/asp/drafts/toh.lp | 29 +++++++++++++++++++++++++++++ code/asp/drafts/tohE.lp | 26 ++++++++++++++++++++++++++ code/asp/drafts/tohI.lp | 7 +++++++ code/asp/drafts/tutorial_01.pl | 0 code/asp/drafts/tutotial_01.lp | 5 +++++ code/asp/drafts/unsound.lp | 4 ++++ code/asp/fplp/example_05-1.lp | 6 ++++++ code/asp/fplp/example_05-2.lp | 5 +++++ code/asp/plp/alarm.plp | 22 ++++++++++++++++++++++ code/asp/plp/coins.plp | 7 +++++++ code/asp/plp/cplint.plp | 15 +++++++++++++++ code/asp/plp/sbfe.plp | 7 +++++++ code/asplang/ASPLang.jl | 356 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/asplang/asp-core-2_syntax.ebnf | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/asplang/draftASP.jl | 8 ++++++++ code/asplang/drafts.jl | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/asplang/sbf.plp | 2 ++ code/asplang/testASPLang.jl | 45 +++++++++++++++++++++++++++++++++++++++++++++ code/asplang/tests_ASPlang.jl | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/biflang/BIFLang.jl | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/biflang/asia2.bif | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/biflang/bif.ebnf | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/biflang/bif.txt | 562 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/biflang/draft_biflang.jl | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/biflang/notes.md | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/.ipynb_checkpoints/EventLattice-checkpoint.ipynb | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/.ipynb_checkpoints/Untitled-checkpoint.ipynb | 6 ++++++ code/drafts/.ipynb_checkpoints/Untitled1-checkpoint.ipynb | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/.ipynb_checkpoints/sample_analysis-checkpoint.jl | 15 +++++++++++++++ code/drafts/.ipynb_checkpoints/teste-checkpoint.ipynb | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/EventLattice.ipynb | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/Untitled.ipynb | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/Untitled1.ipynb | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/__init__.py | 0 code/drafts/__pycache__/event_lattice.cpython-39.pyc | Bin 0 -> 8094 bytes code/drafts/algebra.py | 30 ++++++++++++++++++++++++++++++ code/drafts/api_01.py | 26 ++++++++++++++++++++++++++ code/drafts/arithfunclang.jl | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/arithlang.jl | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/drafts.ipynb | 590 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/drafts.jl | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/event_lattice.py | 301 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/explore_01.py | 13 +++++++++++++ code/drafts/model_sample-[0.0;0.3;0.2].csv | 1001 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/model_sample-[0.0;0.3;0.5].csv | 1001 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/model_sample-[0.1;0.3;0.2].csv | 1001 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/model_sample-[0.1;0.3;0.5].csv | 1001 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/model_sample-[0.1;0.3;0.8].csv | 1001 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/model_sample.csv | 1001 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/sample.csv | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/sample_analysis.jl | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/sampling.jl | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/drafts/symbops.py | 41 +++++++++++++++++++++++++++++++++++++++++ code/drafts/teste.ipynb | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/julia/BIFParser.jl | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ code/julia/asia2.bif | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/julia/asia2.lp | 36 ++++++++++++++++++++++++++++++++++++ code/julia/asplang.jl | 0 code/julia/bif2asp.jl | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/julia/dados.dat | 3 +++ code/julia/drafts.jl | 20 ++++++++++++++++++++ code/julia/forward.jl | 187 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/julia/miguel.jl | 7 +++++++ code/problog/alarm.pl | 7 +++++++ code/problog/nats.pl | 2 ++ code/sasp | 1 + code/zugzwang_code.code-workspace | 11 +++++++++++ cspell.json | 16 ++++++++++++++++ notes.md | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ notes.pdf | Bin 0 -> 183820 bytes pex2024/FCT-Sessão_esclarecimento-2024-01-23.md | 36 ++++++++++++++++++++++++++++++++++++ pex2024/candidatura.md | 10 ++++++++++ pex2024/documents/Application_Guide_PeX_2023.pdf | Bin 0 -> 1122892 bytes pex2024/documents/Aviso_de_Abertura_PEX_2023.pdf | Bin 0 -> 479233 bytes pex2024/documents/Data_Protection_PEX_2023.pdf | Bin 0 -> 246082 bytes pex2024/documents/Ethics_Self_Assessment_Guide.pdf | Bin 0 -> 271755 bytes pex2024/documents/Guiao_CIENCIAVITAE.pdf | Bin 0 -> 928750 bytes pex2024/documents/Regulation_on_projects_FCT_EN.pdf | Bin 0 -> 462502 bytes sample.csv | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ students/amartins/2023-03-13 | Tarefa 01.eml | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ students/amartins/tarefas/Untitled.ipynb | 6 ++++++ students/amartins/tarefas/Untitled1.ipynb | 424 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ students/amartins/tarefas/__pycache__/bninput.cpython-311.pyc | Bin 0 -> 5504 bytes students/amartins/tarefas/__pycache__/bninput.cpython-39.pyc | Bin 0 -> 2433 bytes students/amartins/tarefas/__pycache__/tarefa1.cpython-311.pyc | Bin 0 -> 4974 bytes students/amartins/tarefas/__pycache__/tarefa2.cpython-311.pyc | Bin 0 -> 4259 bytes students/amartins/tarefas/asia.lp | 43 +++++++++++++++++++++++++++++++++++++++++++ students/amartins/tarefas/asia2.bif | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ students/amartins/tarefas/asia2.pkl | Bin 0 -> 3471 bytes students/amartins/tarefas/basic.lp | 3 +++ students/amartins/tarefas/bninput.py | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ students/amartins/tarefas/bridge_pyasp.py | 22 ++++++++++++++++++++++ students/amartins/tarefas/graph_asia2.png | Bin 0 -> 33454 bytes students/amartins/tarefas/notas.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ students/amartins/tarefas/t2profile.txt | 9733 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ students/amartins/tarefas/tarefa1.py | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ students/amartins/tarefas/tarefa1a.py | 38 ++++++++++++++++++++++++++++++++++++++ students/amartins/tarefas/tarefa1b.py | 35 +++++++++++++++++++++++++++++++++++ students/amartins/tarefas/tarefa2.md | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ students/amartins/tarefas/tarefa2.pdf | Bin 0 -> 117788 bytes students/amartins/tarefas/tarefa2.py | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ students/amartins/tarefas/test/test_bninput.py | 13 +++++++++++++ students/amartins/tarefas/v01-tarefa1a.py | 31 +++++++++++++++++++++++++++++++ students/biblio/final_paper.pdf | Bin 0 -> 243022 bytes students/zugzwuang-amartins.code-workspace | 11 +++++++++++ text/backup/probast_draft/probast_draf.pdf | Bin 0 -> 84270 bytes text/backup/probast_draft/probast_draf.tex | 323 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/backup/zz_old/00_DRAFTS.md | 21 +++++++++++++++++++++ text/backup/zz_old/00_PASP.pdf | Bin 0 -> 96488 bytes text/backup/zz_old/00_PASP.tex | 1047 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/backup/zz_old/00_PROB.pdf | Bin 0 -> 19955 bytes text/backup/zz_old/Empty File | 0 text/backup/zz_old/Pabc_alpha03.pdf | Bin 0 -> 12659 bytes text/backup/zz_old/README.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/backup/zz_old/README.pdf | Bin 0 -> 10598 bytes text/backup/zz_old/SCASP-best-practices.pdf | Bin 0 -> 88835 bytes text/backup/zz_old/State of the art.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ text/backup/zz_old/drafts.pdf | Bin 0 -> 4540 bytes text/backup/zz_old/drafts.tex | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/backup/zz_old/meetings.pdf | Bin 0 -> 25126 bytes text/backup/zz_old/probast_draft/probast_draf.pdf | Bin 0 -> 78987 bytes text/backup/zz_old/probast_draft/probast_draf.tex | 434 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/backup/zz_old/proposal/Objectivos .md | 1 + text/backup/zz_old/proposal/proposal.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ text/backup/zz_old/proposal/proposal.pdf | Bin 0 -> 58182 bytes text/backup/zz_old/proposal/proposal.tex | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/backup/zz_old/proposal/zugzwang.bib | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ text/paper_01/LLNCS/aasasp-llncs.pdf | Bin 0 -> 390738 bytes text/paper_01/LLNCS/aasasp-llncs.tex | 1336 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/paper_01/LLNCS/asp.bib | 15 +++++++++++++++ text/paper_01/LLNCS/example_annotASP2plainASP.txt | 14 ++++++++++++++ text/paper_01/LLNCS/extended_abstract.txt | 7 +++++++ text/paper_01/LLNCS/foundations.bib | 17 +++++++++++++++++ text/paper_01/LLNCS/llncs.cls | 1208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/paper_01/LLNCS/zugz-paper_01.code-workspace | 11 +++++++++++ text/paper_01/LLNCS/zugzwang.bib | 251 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/paper_01/asp.bib | 15 +++++++++++++++ text/paper_01/example_annotASP2plainASP.txt | 14 ++++++++++++++ text/paper_01/foundations.bib | 17 +++++++++++++++++ text/paper_01/pre-paper.pdf | Bin 0 -> 451571 bytes text/paper_01/pre-paper.tex | 1342 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/paper_01/related_papers_plingo.md | 9 +++++++++ text/paper_01/reviews/pre-paperComments.pdf | Bin 0 -> 368312 bytes text/paper_01/temp.fc/LecBayesNetsAndInference.pdf | Bin 0 -> 999376 bytes text/paper_01/temp.fc/hj18.pdf | Bin 0 -> 5907106 bytes text/paper_01/temp.fc/lec15.pdf | Bin 0 -> 992202 bytes text/paper_01/zugz-paper_01.code-workspace | 11 +++++++++++ text/paper_01/zugzwang.bib | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/presentation_01/00base/abstract.md | 13 +++++++++++++ text/presentation_01/00base/color.lp | 15 +++++++++++++++ text/presentation_01/00base/drafts.ipynb | 11322 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/presentation_01/00base/iris_plot.pdf | Bin 0 -> 14302 bytes text/presentation_01/00base/iris_plot.svg | 2295 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/presentation_01/00base/pqueens.lp | 21 +++++++++++++++++++++ text/presentation_01/00base/probasp.pdf | Bin 0 -> 122663 bytes text/presentation_01/00base/probasp.tex | 1203 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/presentation_01/00base/scg.lp | 40 ++++++++++++++++++++++++++++++++++++++++ text/presentation_01/bits_goa/bits_goa-2024-01-10.pdf | Bin 0 -> 122632 bytes text/presentation_01/bits_goa/bits_goa-2024-01-10.tex | 1210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/presentation_01/bits_goa/iris_plot.pdf | Bin 0 -> 14302 bytes text/presentation_01/cima_pdoutmat_2023-12-11/cima_pdoutmat_2023-12-11.pdf | Bin 0 -> 122537 bytes text/presentation_01/cima_pdoutmat_2023-12-11/cima_pdoutmat_2023-12-11.tex | 1203 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/presentation_01/cima_pdoutmat_2023-12-11/iris_plot.pdf | Bin 0 -> 14302 bytes text/presentation_01/cima_pdoutmat_2023-12-11/iris_plot.svg | 2295 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/presentation_01/mead/iris_plot.pdf | Bin 0 -> 14302 bytes text/presentation_01/mead/iris_plot.svg | 2295 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/presentation_01/mead/probasp.pdf | Bin 0 -> 122532 bytes text/presentation_01/mead/probasp.tex | 1203 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/summaries/00_ASP.md | 239 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/summaries/00_DistSem.md | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/summaries/00_DistSem.pdf | Bin 0 -> 43204 bytes text/summaries/00_ILP.md | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/summaries/00_ILP.pdf | Bin 0 -> 37760 bytes text/summaries/00_PASP.pdf | Bin 0 -> 96486 bytes text/summaries/00_PASP_credal.md | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ text/summaries/00_POTASSCO.md | 13 +++++++++++++ text/summaries/00_PROB.md | 41 +++++++++++++++++++++++++++++++++++++++++ text/summaries/00_Z3.md | 14 ++++++++++++++ text/summaries/00_pasp.md | 18 ++++++++++++++++++ zugzwang.code-workspace | 29 +++++++++++++++++++++++++++++ 469 files changed, 62518 insertions(+), 0 deletions(-) create mode 100644 2023-11-11--biblio.zip create mode 100644 NOVALINCS/00-Application_Form-FINAL.md create mode 100644 NOVALINCS/00-Application_Form-FINAL.pdf create mode 100644 NOVALINCS/00-Call-TEMPLATE.md create mode 100644 NOVALINCS/00-Call-TEMPLATE.pdf create mode 100644 NOVALINCS/01-Call-DRAFT.md create mode 100644 NOVALINCS/01-Call-DRAFT.pdf create mode 100644 NOVALINCS/01-Call-Underg_A.md create mode 100644 NOVALINCS/NOVA LINCS.UE TRA Application Form | Zugzwang.docx create mode 100644 NOVALINCS/NOVA LINCS.UE TRA Application Form | Zugzwang.gddoc create mode 100644 NOVALINCS/TdOS-JasonMAllen.jpg create mode 100644 NOVALINCS/bolsas/BI/2023-01-91 | Oficio Juri.gddoc create mode 100644 NOVALINCS/bolsas/BI/2023-02-01 _ Ata1.pdf create mode 100644 NOVALINCS/bolsas/BI/2023-02-01 | Ata1.gddoc create mode 100644 NOVALINCS/bolsas/BI/2023-02-03 | Edital | EN.pdf create mode 100644 NOVALINCS/bolsas/BI/2023-02-03 | Edital | PT.gddoc create mode 100644 NOVALINCS/bolsas/BI/2023-02-03 | Edital | PT.pdf create mode 100644 NOVALINCS/bolsas/BI/2023-03-01 _ Ata 2.pdf create mode 100644 NOVALINCS/bolsas/BI/2023-03-01 | Ata 2.gddoc create mode 100644 NOVALINCS/bolsas/BI/signed/2023-01-19 | BI | Oficio Juri.pdf create mode 100644 NOVALINCS/bolsas/BI/signed/2023-02-01 | BI | Ata 01.pdf create mode 100644 NOVALINCS/bolsas/BI/signed/2023-03-01 | BI | Ata 02.pdf create mode 100644 NOVALINCS/bolsas/BI/zz_old/Edital BolsaInv.MSc | Zugzwang | EN.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-01-19 | Oficio Homologação Júri.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-01-19 | Oficio Juri BolsaII.Lic Zugzwang.pdf create mode 100644 NOVALINCS/bolsas/BII/2023-02-01 _ Ata1.pdf create mode 100644 NOVALINCS/bolsas/BII/2023-02-01 | Ata1.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-02-02 | Edital BolsaII.Lic | Zugzwang | EN.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-02-02 | Edital BolsaII.Lic | Zugzwang | PT.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-02-03 | Edital PT_bolsa_BII_novalincs.pdf create mode 100644 NOVALINCS/bolsas/BII/2023-03-01 _ Ata 2.pdf create mode 100644 NOVALINCS/bolsas/BII/2023-03-01 | Ata 2.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-03-02 13:23 | Entrevista | Email Convocatória.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-03-02 17:00 | Entrevista (Respostas).gdsheet create mode 100644 NOVALINCS/bolsas/BII/2023-03-02 17:00 | Entrevista.gdform create mode 100644 NOVALINCS/bolsas/BII/2023-03-02 18:00 | Ata3.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-03-02 18_00 _ Ata3.pdf create mode 100644 NOVALINCS/bolsas/BII/2023-03-03 | Notificação Candidatos.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-03-07 | BII | Declaração Conflito de Interesses.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-03-07 | BII | Plano de Trabalhos.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-03-17 | Ata 4.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-03-27 | Ofício Início Bolsa II.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-03-29 _ BII _ Inicio de Bolsa.pdf create mode 100644 NOVALINCS/bolsas/BII/2023-03-29 _ BII _ Inicio de Bolsa_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/2023-03-29 | BII | Inicio de Bolsa.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-04-26 | Oficio Início de Bolsa.pdf create mode 100644 NOVALINCS/bolsas/BII/2023-09-01 | Inquérito Atividades Bolseiros.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-09-01 | Oficio Renovação Bolsa.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-09-01 | Relatorio Atividades Bolseiros.gddoc create mode 100644 NOVALINCS/bolsas/BII/2023-99-03 | Minuta Contrato Bolsa.gddoc create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-03-29 _ BII _ Inicio de Bolsa_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 Inscrições.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 Inscrições.png create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 | Inscrições.png create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-09-01 Relatorio Atividades Bolseiros.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/AlicE Martins.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/BII | Candidatura à Bolsa de Iniciação à Investigação | Alice Martins.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/BII | Plano de Trabalhos.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Captura de ecrã de 2023-02-27 16-35-44.png create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Consulta IBAN, BIC e SWIFT 22-05-2023 14 15.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova_preenchida.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova_prepreenchido.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/bolsa.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_aproveitamento_escolar.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_matricula_inscricao-2023.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_matricula_inscricao.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/dados.md create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 Relatorio Atividades Bolseiros.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 | Inquérito Atividades Bolseiros.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 | Oficio Renovação Bolsa.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/Declaração_Generali_ausência de acidentes (1).docx create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/12-renovacao-bolsa-alice_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/ofício_renovação.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/ofício_renovação.tex create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/parecer/parecer_renovação.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/parecer/parecer_renovação.tex create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.md create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.tex create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/renovacao-amartins.zip create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/comprovativo_matricula-inscricao-2023.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/ofício_renovação-signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/parecer_renovação-signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/plano_trabalhos-signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/relatorio_atividades-signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 Relatorio Atividades Bolseiros.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 | Inquérito Atividades Bolseiros.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 | Oficio Renovação Bolsa.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-10-31 | Inquérito Atividades Bolseiros.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/Declaração_Generali_ausência de acidentes (1).docx create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/12-renovacao-bolsa-alice_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/15-renovacao-bolsa-alice_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/ofício_renovação.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/ofício_renovação.tex create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/parecer/parecer_renovação.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/parecer/parecer_renovação.tex create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.md create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.tex create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros - signed_am_fc.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros.gddoc create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros_231120_170319.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/renovacao-amartins.zip create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/15-renovacao-bolsa-alice_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/Declaração_Generali_ausência de acidentes.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/comprovativo_matricula-inscricao-2023.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/parecer_renovação.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/plano-trabalhos.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/relatorio_atividades-signed_am_fc.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/renovacao_BII_AliceMartins-documentos.zip create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 Relatorio Atividades Bolseiros.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 | Inquérito Atividades Bolseiros.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 | Oficio Renovação Bolsa.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-10-31 | Inquérito Atividades Bolseiros.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/Declaração_Generali_ausência de acidentes (1).docx create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/12-renovacao-bolsa-alice_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/15-renovacao-bolsa-alice_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/ofício_renovação.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/ofício_renovação.tex create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/parecer/parecer_renovação.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/parecer/parecer_renovação.tex create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.md create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.tex create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros - signed_am_fc.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros.gddoc create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros_231120_170319.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/renovacao-amartins.zip create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/15-renovacao-bolsa-alice_signed.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/Declaração_Generali_ausência de acidentes.docx create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/comprovativo_matricula-inscricao-2023.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/parecer_renovação.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/plano-trabalhos.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/relatorio_atividades-signed_am_fc.pdf create mode 100644 NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/renovacao_BII_Alice_Martins-documentos.zip create mode 100644 NOVALINCS/bolsas/BII/Ata 02.pdf create mode 100644 NOVALINCS/bolsas/BII/Ata 04.pdf create mode 100644 NOVALINCS/bolsas/BII/Ata 04.pdf.jpg create mode 100644 NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/BII | Candidatura para Projeto | João Branquinho.pdf create mode 100644 NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/Joao Branquinho.pdf create mode 100644 NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/comprovativo_matricula_inscricao-1.pdf create mode 100644 NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/disc + notas.jpg create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-01-19 | BII | Oficio Homologação Juri.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-02-01 | BII | Ata 01.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-02-15 | BII | JBranquinho | Comprovativo Matricula Inscrição.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-02-27 | BII | AMartins | Comprovativo Aproveitamento Escolar.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-02-27 | BII | AMartins | Comprovativo Matricula Inscricao.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-03-01 | BII | Ata 02.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Ata 03.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Entrevista | Email Convocatória | src.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Entrevista | Email Convocatória.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-03-03 | BII | AMartins | Email Aceitação.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-03-03 | BII | Notificação Candidatos.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-03-06 | BII | JBranquinho | Email Aceitação.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Declaração Conflito de Interesses | Bruno.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Declaração Conflito de Interesses | fc.pdf create mode 100644 NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Oficio Inicio de Bolsa.pdf create mode 100644 NOVALINCS/bolsas/BII/zz-lostNfound/Edital EN.docx create mode 100644 NOVALINCS/bolsas/BII/zz-lostNfound/Edital PT.docx create mode 100644 NOVALINCS/bolsas/BII2/2023-03-03 Oficio Juri BII.pdf create mode 100644 NOVALINCS/bolsas/BII2/2023-03-07 | BII2 | Oficio Juri.gddoc create mode 100644 NOVALINCS/bolsas/BII2/2023-B | Ata 1.gddoc create mode 100644 NOVALINCS/bolsas/BII2/2023-C | Edital | EN.gddoc create mode 100644 NOVALINCS/bolsas/BII2/2023-C | Edital | PT.gddoc create mode 100644 NOVALINCS/bolsas/BII2/2023-C | Edital | PT.pdf create mode 100644 NOVALINCS/bolsas/BII2/2023-D | Ata 2.gddoc create mode 100644 NOVALINCS/bolsas/BII2/2023-E | Notificação para Entrevista.gddoc create mode 100644 NOVALINCS/bolsas/BII2/2023-F | Entrevista | Formulário.gdform create mode 100644 NOVALINCS/bolsas/BII2/2023-G | Ata 3.gddoc create mode 100644 NOVALINCS/bolsas/BII2/2023-H | Notificação Candidatos.gddoc create mode 100644 NOVALINCS/bolsas/BII2/2023-I | Ata 4.gddoc create mode 100644 NOVALINCS/bolsas/Estatuto Bolseiro de Investigação | Consolidação.pdf create mode 100644 NOVALINCS/bolsas/RegulamentoBolsasFCT2019.pdf create mode 100644 NOVALINCS/bolsas/Tabela_de_Valores_SMM_2022.pdf create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/1_minuta de oficio juri bolsa_2023.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/2_minuta de Ata1_2023.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/3_minuta_edital_bolsa_2023_EN.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/3_minuta_edital_bolsa_2023_PT.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/4_minuta de Ata2_2023.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/5_Notificaçõesparaentrevista.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/6_minuta de Ata3_2023.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/7_Notificacao_candidatos.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/8_minuta de Ata4_2023.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/9_Minuta oficio Inicio de Bolsa.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/A_Regulamentobolsas_FCT.pdf create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/B_Estatuto bolseiro_Consolidação.pdf create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/C_Tabela_de_Valores_SMM_atualizadoJan2022.pdf create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/Minuta_Contrato_Bolsa 2023.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/dec conflito de interesses 2023.gddoc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/1_minuta de oficio juri bolsa_2023.doc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/2_minuta de Ata1_2023.doc create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/3_minuta_edital_bolsa_2023_EN.docx create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/3_minuta_edital_bolsa_2023_PT.docx create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/4_minuta de Ata2_2023.docx create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/5_Notificaçõesparaentrevista.docx create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/6_minuta de Ata3_2023.docx create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/7_Notificacao_candidatos.docx create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/8_minuta de Ata4_2023.docx create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/9_Minuta oficio Inicio de Bolsa.docx create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/Minuta_Contrato_Bolsa 2023.docx create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/dec conflito de interesses 2023.docx create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/docx/modelo_relatorio_atividades_bolseiros_2023.docx create mode 100644 NOVALINCS/bolsas/kit bolsas_2023/modelo_relatorio_atividades_bolseiros_2023.gddoc create mode 100644 NOVALINCS/demo-markdown.md create mode 100644 NOVALINCS/demo-markdown.pdf create mode 100644 biblio.gdlink create mode 100644 biblio/2002 - Answer set programming and plan generation.pdf create mode 100644 biblio/2013 - Answer Set Solving in Practice - Martin Gebser, Roland Kaminski, Benjamin Kaufmann, Torsten Schaub.pdf create mode 100644 biblio/2014 - A new method of proving the existence of answer sets for disjunctive logic programs.pdf create mode 100644 biblio/2018 - Deep Learning, A critical appraisal - Gary Marcus.pdf create mode 100644 biblio/2018 - Foundations of Probabilistic Logic Programming. Languages, Semantics, Inference and Learning - Fabrizio Riguzzi.pdf create mode 100644 biblio/2019 - A Meta-Transfer Objective for Learning to Disentangle Causal Mechanisms - Bengio et al.pdf create mode 100644 biblio/2019 - On the Measure of Intelligence - Francois Chollet.pdf create mode 100644 biblio/2019 - Potassco User Guide.pdf create mode 100644 biblio/2020 - ASP-Core-2 Input Language Format - Calimeri et al..pdf create mode 100644 biblio/2020 - Prolog and Answer Set Programming - Languages in Logic Programming.pdf create mode 100644 biblio/2020 - The joy of Probabilistic Answer Set Programming: Semantics - complexity, expressivity, inference - Fabio Gagliardi Cozman, Denis Deratani Mauá.pdf create mode 100644 biblio/2021 - CASP and SCASP best practices.pdf create mode 100644 biblio/ASP-DLV_tutorial.html create mode 100644 biblio/ASP-DLV_tutorial.md create mode 100644 biblio/Special Issue on Answer Set Programming-Abstract.pdf create mode 100644 biblio/annotated -- 2018 - Foundations of Probabilistic Logic Programming. Languages, Semantics, Inference and Learning - Fabrizio Riguzzi.pdf create mode 100644 biblio/plingo/2007-ProbLog - a probabilistic prolog and its application in link discovery.pdf create mode 100644 biblio/plingo/2008-Probabilistic reasoning with answer sets.pdf create mode 100644 biblio/plingo/2016-Weighted Rules under the Stable Model Semantics.pdf create mode 100644 biblio/plingo/2017-LPMLN, Weak Constraints and P-log.pdf create mode 100644 biblio/plingo/2021-Solution Enumeration by Optimality in Answer Set Programming.pdf create mode 100644 code/.vscode/launch.json create mode 100644 code/asp/drafts/alarm.lp create mode 100644 code/asp/drafts/assp_pag43.lp create mode 100644 code/asp/drafts/assp_pag46.lp create mode 100644 code/asp/drafts/bachelor.lp create mode 100644 code/asp/drafts/bachelor.pl create mode 100644 code/asp/drafts/barber.lp create mode 100644 code/asp/drafts/choices_01.lp create mode 100644 code/asp/drafts/choices_02.lp create mode 100644 code/asp/drafts/choices_03.lp create mode 100644 code/asp/drafts/choices_04.lp create mode 100644 code/asp/drafts/choices_05.lp create mode 100644 code/asp/drafts/choices_06.lp create mode 100644 code/asp/drafts/color.lp create mode 100644 code/asp/drafts/credal_01.lp create mode 100644 code/asp/drafts/cyclic.lp create mode 100644 code/asp/drafts/cyclic.pl create mode 100644 code/asp/drafts/disj.lp create mode 100644 code/asp/drafts/double_negation.lp create mode 100644 code/asp/drafts/ex03.lp create mode 100644 code/asp/drafts/gcE01.lp create mode 100644 code/asp/drafts/gcI01.lp create mode 100644 code/asp/drafts/hanoiE.lp create mode 100644 code/asp/drafts/hanoiI.lp create mode 100644 code/asp/drafts/heads_tails.lp create mode 100644 code/asp/drafts/monty_hall.lp create mode 100644 code/asp/drafts/no_model_cyclic.lp create mode 100644 code/asp/drafts/no_model_wa.lp create mode 100644 code/asp/drafts/nonstrat.lp create mode 100644 code/asp/drafts/onabove.lp create mode 100644 code/asp/drafts/p01.lp create mode 100644 code/asp/drafts/p18.lp create mode 100644 code/asp/drafts/p19.lp create mode 100644 code/asp/drafts/p20.lp create mode 100644 code/asp/drafts/pasp01.lp create mode 100644 code/asp/drafts/pasp_general.lp create mode 100644 code/asp/drafts/paths.lp create mode 100644 code/asp/drafts/pdist.lp create mode 100644 code/asp/drafts/pqr.lp create mode 100644 code/asp/drafts/pqueens.lp create mode 100644 code/asp/drafts/prob01.lp create mode 100644 code/asp/drafts/prob02.lp create mode 100644 code/asp/drafts/py_01.lp create mode 100644 code/asp/drafts/py_02.lp create mode 100644 code/asp/drafts/roads.lp create mode 100644 code/asp/drafts/s.lp create mode 100644 code/asp/drafts/toh.lp create mode 100644 code/asp/drafts/tohE.lp create mode 100644 code/asp/drafts/tohI.lp create mode 100644 code/asp/drafts/tutorial_01.pl create mode 100644 code/asp/drafts/tutotial_01.lp create mode 100644 code/asp/drafts/unsound.lp create mode 100644 code/asp/fplp/example_05-1.lp create mode 100644 code/asp/fplp/example_05-2.lp create mode 100644 code/asp/plp/alarm.plp create mode 100644 code/asp/plp/coins.plp create mode 100644 code/asp/plp/cplint.plp create mode 100644 code/asp/plp/sbfe.plp create mode 100644 code/asplang/ASPLang.jl create mode 100644 code/asplang/asp-core-2_syntax.ebnf create mode 100644 code/asplang/draftASP.jl create mode 100644 code/asplang/drafts.jl create mode 100644 code/asplang/sbf.plp create mode 100644 code/asplang/testASPLang.jl create mode 100644 code/asplang/tests_ASPlang.jl create mode 100644 code/biflang/BIFLang.jl create mode 100644 code/biflang/asia2.bif create mode 100644 code/biflang/bif.ebnf create mode 100644 code/biflang/bif.txt create mode 100644 code/biflang/draft_biflang.jl create mode 100644 code/biflang/notes.md create mode 100644 code/drafts/.ipynb_checkpoints/EventLattice-checkpoint.ipynb create mode 100644 code/drafts/.ipynb_checkpoints/Untitled-checkpoint.ipynb create mode 100644 code/drafts/.ipynb_checkpoints/Untitled1-checkpoint.ipynb create mode 100644 code/drafts/.ipynb_checkpoints/sample_analysis-checkpoint.jl create mode 100644 code/drafts/.ipynb_checkpoints/teste-checkpoint.ipynb create mode 100644 code/drafts/EventLattice.ipynb create mode 100644 code/drafts/Untitled.ipynb create mode 100644 code/drafts/Untitled1.ipynb create mode 100644 code/drafts/__init__.py create mode 100644 code/drafts/__pycache__/event_lattice.cpython-39.pyc create mode 100644 code/drafts/algebra.py create mode 100644 code/drafts/api_01.py create mode 100644 code/drafts/arithfunclang.jl create mode 100644 code/drafts/arithlang.jl create mode 100644 code/drafts/drafts.ipynb create mode 100644 code/drafts/drafts.jl create mode 100644 code/drafts/event_lattice.py create mode 100644 code/drafts/explore_01.py create mode 100644 code/drafts/model_sample-[0.0;0.3;0.2].csv create mode 100644 code/drafts/model_sample-[0.0;0.3;0.5].csv create mode 100644 code/drafts/model_sample-[0.1;0.3;0.2].csv create mode 100644 code/drafts/model_sample-[0.1;0.3;0.5].csv create mode 100644 code/drafts/model_sample-[0.1;0.3;0.8].csv create mode 100644 code/drafts/model_sample.csv create mode 100644 code/drafts/sample.csv create mode 100644 code/drafts/sample_analysis.jl create mode 100644 code/drafts/sampling.jl create mode 100644 code/drafts/symbops.py create mode 100644 code/drafts/teste.ipynb create mode 100644 code/julia/BIFParser.jl create mode 100644 code/julia/asia2.bif create mode 100644 code/julia/asia2.lp create mode 100644 code/julia/asplang.jl create mode 100644 code/julia/bif2asp.jl create mode 100644 code/julia/dados.dat create mode 100644 code/julia/drafts.jl create mode 100644 code/julia/forward.jl create mode 100644 code/julia/miguel.jl create mode 100644 code/problog/alarm.pl create mode 100644 code/problog/nats.pl create mode 160000 code/sasp create mode 100644 code/zugzwang_code.code-workspace create mode 100644 cspell.json create mode 100644 notes.md create mode 100644 notes.pdf create mode 100644 pex2024/FCT-Sessão_esclarecimento-2024-01-23.md create mode 100644 pex2024/candidatura.md create mode 100644 pex2024/documents/Application_Guide_PeX_2023.pdf create mode 100644 pex2024/documents/Aviso_de_Abertura_PEX_2023.pdf create mode 100644 pex2024/documents/Data_Protection_PEX_2023.pdf create mode 100644 pex2024/documents/Ethics_Self_Assessment_Guide.pdf create mode 100644 pex2024/documents/Guiao_CIENCIAVITAE.pdf create mode 100644 pex2024/documents/Regulation_on_projects_FCT_EN.pdf create mode 100644 sample.csv create mode 100644 students/amartins/2023-03-13 | Tarefa 01.eml create mode 100644 students/amartins/tarefas/Untitled.ipynb create mode 100644 students/amartins/tarefas/Untitled1.ipynb create mode 100644 students/amartins/tarefas/__pycache__/bninput.cpython-311.pyc create mode 100644 students/amartins/tarefas/__pycache__/bninput.cpython-39.pyc create mode 100644 students/amartins/tarefas/__pycache__/tarefa1.cpython-311.pyc create mode 100644 students/amartins/tarefas/__pycache__/tarefa2.cpython-311.pyc create mode 100644 students/amartins/tarefas/asia.lp create mode 100644 students/amartins/tarefas/asia2.bif create mode 100644 students/amartins/tarefas/asia2.pkl create mode 100644 students/amartins/tarefas/basic.lp create mode 100644 students/amartins/tarefas/bninput.py create mode 100644 students/amartins/tarefas/bridge_pyasp.py create mode 100644 students/amartins/tarefas/graph_asia2.png create mode 100644 students/amartins/tarefas/notas.md create mode 100644 students/amartins/tarefas/t2profile.txt create mode 100644 students/amartins/tarefas/tarefa1.py create mode 100644 students/amartins/tarefas/tarefa1a.py create mode 100644 students/amartins/tarefas/tarefa1b.py create mode 100644 students/amartins/tarefas/tarefa2.md create mode 100644 students/amartins/tarefas/tarefa2.pdf create mode 100755 students/amartins/tarefas/tarefa2.py create mode 100644 students/amartins/tarefas/test/test_bninput.py create mode 100644 students/amartins/tarefas/v01-tarefa1a.py create mode 100644 students/biblio/final_paper.pdf create mode 100644 students/zugzwuang-amartins.code-workspace create mode 100644 text/backup/probast_draft/probast_draf.pdf create mode 100644 text/backup/probast_draft/probast_draf.tex create mode 100644 text/backup/zz_old/00_DRAFTS.md create mode 100644 text/backup/zz_old/00_PASP.pdf create mode 100644 text/backup/zz_old/00_PASP.tex create mode 100644 text/backup/zz_old/00_PROB.pdf create mode 100644 text/backup/zz_old/Empty File create mode 100644 text/backup/zz_old/Pabc_alpha03.pdf create mode 100644 text/backup/zz_old/README.md create mode 100644 text/backup/zz_old/README.pdf create mode 100644 text/backup/zz_old/SCASP-best-practices.pdf create mode 100644 text/backup/zz_old/State of the art.txt create mode 100644 text/backup/zz_old/drafts.pdf create mode 100644 text/backup/zz_old/drafts.tex create mode 100644 text/backup/zz_old/meetings.pdf create mode 100644 text/backup/zz_old/probast_draft/probast_draf.pdf create mode 100644 text/backup/zz_old/probast_draft/probast_draf.tex create mode 100644 text/backup/zz_old/proposal/Objectivos .md create mode 100644 text/backup/zz_old/proposal/proposal.md create mode 100644 text/backup/zz_old/proposal/proposal.pdf create mode 100644 text/backup/zz_old/proposal/proposal.tex create mode 100644 text/backup/zz_old/proposal/zugzwang.bib create mode 100644 text/paper_01/LLNCS/aasasp-llncs.pdf create mode 100644 text/paper_01/LLNCS/aasasp-llncs.tex create mode 100644 text/paper_01/LLNCS/asp.bib create mode 100644 text/paper_01/LLNCS/example_annotASP2plainASP.txt create mode 100644 text/paper_01/LLNCS/extended_abstract.txt create mode 100644 text/paper_01/LLNCS/foundations.bib create mode 100644 text/paper_01/LLNCS/llncs.cls create mode 100644 text/paper_01/LLNCS/zugz-paper_01.code-workspace create mode 100644 text/paper_01/LLNCS/zugzwang.bib create mode 100644 text/paper_01/asp.bib create mode 100644 text/paper_01/example_annotASP2plainASP.txt create mode 100644 text/paper_01/foundations.bib create mode 100644 text/paper_01/pre-paper.pdf create mode 100644 text/paper_01/pre-paper.tex create mode 100644 text/paper_01/related_papers_plingo.md create mode 100644 text/paper_01/reviews/pre-paperComments.pdf create mode 100644 text/paper_01/temp.fc/LecBayesNetsAndInference.pdf create mode 100644 text/paper_01/temp.fc/hj18.pdf create mode 100644 text/paper_01/temp.fc/lec15.pdf create mode 100644 text/paper_01/zugz-paper_01.code-workspace create mode 100644 text/paper_01/zugzwang.bib create mode 100644 text/presentation_01/00base/abstract.md create mode 100644 text/presentation_01/00base/color.lp create mode 100644 text/presentation_01/00base/drafts.ipynb create mode 100644 text/presentation_01/00base/iris_plot.pdf create mode 100644 text/presentation_01/00base/iris_plot.svg create mode 100644 text/presentation_01/00base/pqueens.lp create mode 100644 text/presentation_01/00base/probasp.pdf create mode 100644 text/presentation_01/00base/probasp.tex create mode 100644 text/presentation_01/00base/scg.lp create mode 100644 text/presentation_01/bits_goa/bits_goa-2024-01-10.pdf create mode 100644 text/presentation_01/bits_goa/bits_goa-2024-01-10.tex create mode 100644 text/presentation_01/bits_goa/iris_plot.pdf create mode 100644 text/presentation_01/cima_pdoutmat_2023-12-11/cima_pdoutmat_2023-12-11.pdf create mode 100644 text/presentation_01/cima_pdoutmat_2023-12-11/cima_pdoutmat_2023-12-11.tex create mode 100644 text/presentation_01/cima_pdoutmat_2023-12-11/iris_plot.pdf create mode 100644 text/presentation_01/cima_pdoutmat_2023-12-11/iris_plot.svg create mode 100644 text/presentation_01/mead/iris_plot.pdf create mode 100644 text/presentation_01/mead/iris_plot.svg create mode 100644 text/presentation_01/mead/probasp.pdf create mode 100644 text/presentation_01/mead/probasp.tex create mode 100644 text/summaries/00_ASP.md create mode 100644 text/summaries/00_DistSem.md create mode 100644 text/summaries/00_DistSem.pdf create mode 100644 text/summaries/00_ILP.md create mode 100644 text/summaries/00_ILP.pdf create mode 100644 text/summaries/00_PASP.pdf create mode 100644 text/summaries/00_PASP_credal.md create mode 100644 text/summaries/00_POTASSCO.md create mode 100644 text/summaries/00_PROB.md create mode 100644 text/summaries/00_Z3.md create mode 100644 text/summaries/00_pasp.md create mode 100644 zugzwang.code-workspace diff --git a/2023-11-11--biblio.zip b/2023-11-11--biblio.zip new file mode 100644 index 0000000..b67ef93 Binary files /dev/null and b/2023-11-11--biblio.zip differ diff --git a/NOVALINCS/00-Application_Form-FINAL.md b/NOVALINCS/00-Application_Form-FINAL.md new file mode 100644 index 0000000..1fcb5d5 --- /dev/null +++ b/NOVALINCS/00-Application_Form-FINAL.md @@ -0,0 +1,53 @@ +# Zugzwang | Logic and Artificial Intelligence + +## Team + +- Francisco Coelho +- Salvador Abreu (PI) +- Bruno Dinis (External Collaborator) + +## Research Questions + +How to extend probability annotations on an ASP program to a distribution over the possible observations? In general, the association of probabilities to some facts is not enough to uniquely define a probability of stable models. This lack of information must be carefully expressed and handled, to avoid biased results. + +Once made explicit, how to use such distribution, together with an empiric distribution from a dataset, to do general probabilistic tasks such as the estimation of a marginal or of the joint probability? Having a probability on a set of observations, including the stable models, might not cover all the sample space. Again, information and structure entailed from the ASP program must guide unbiased extensions to the sample space. + +How to use distribution measures to score ASP programs? We view ASP programs as formalized knowledge about an observable system. Some of those programs will be "better" than others, as determined by a quantitative, objective, measure, rooted on well-known functions such as the Kullback–Leibler divergence. + +This last question leads to the application of evolutionary algorithms to inductive logic programming and to a bridge with common machine learning methods, where a model is scored by a dataset. Other important questions lie behind the scope of this project. For example, how to deal with latent, unobserved, variables? + +## Novelty/Impact + +ASP has some key advantages over Prolog, most of which result from ASP being a truly declarative language and modern APS systems, such as CLASP, apply efficient optimisation techniques. Other systems, like ILASP, learn ASP programs with normal rules, choice rules, and hard and weak constraints. Moreover, ASP can use recent important advances concerning SAT solvers to ILP tasks. However, the assumption that the knowledge base (BK) is perfect, leaving no room for uncertainty, poses here a major limitation. + +One approach to overcome this restriction on logic programs is Statistical Relationship Learning (StarAI), that extends the BK with probabilities in order to setup a distribution representation. The formal setting for this approach rests on Sato's Distribution Semantics and frames systems such as Problog and PRISM. But these systems are oriented towards Prolog-like programs and semantic and leave out ASP program learning. + +One important ongoing research question is the precise semantic of an ASP program annotated with probabilities. Sato's semantic specify an unique probability distribution over Prolog-like program's atoms, but this uniqueness fails for ASP programs. Efforts to address this problem are either based on Credal sets or on selecting one probability over others, such as the P-log, the LP^MLN or the PrASP languages. + +The novelty of this research is to define the semantic of an ASP program + probability annotated facts + observations from the following process: (a) parametrise the uncertainty on stable models and annotations, (b) setup a partition of the sample space around on the stable models and (c) use observations to estimate the value of the uncertainty parameters of step (a). +If successful, it would have an impact on how logic programs express and are used to deal with real-world problems, where both uncertainty and formal KB are required ingredients. Also, when used in ILP problems the resulting models are logic programs, much simpler to understand than numeric models. + +## Expected Results / Demonstrators + +Our aim is to develop a set of software tools to apply and evaluate the theoretical results on well-known, and relevant, problems. The initial target framework is the Potassco suite, that provides a Python API to state-of-the-art grounding (CLASP) and solving (CLINGO) tools, as well as ASP-Core-2 Language support. + +The researchers will do the theoretical study and supervise one to three undergraduate, master or Ph.D. students on the implementation tasks. Theoretical work includes formalization and assessment of methods; The students will implement the tools required to experiment, explore and test those methods. The degree of complexity of the implementation tasks must be adapted to the individual competences and interests of the students. + +The theoretical work is to be reported in one or two papers with intermediate results and a final comprehensive paper for a conference. + +## Relationship of activity w/ NOVA LINCS strategic program and Research Group work plan + +This project involves two members from the NOVA LINCS "Knowledge-Based Systems" research group, from the Universidade de Évora pole and a member of the CIMA center from the Universidade de Évora. + +Part of the proposed research and software is currently being developed. + +## Resources required and justification + +Students are expected to benefit from a BIC or a BI scholarship. Depending on the candidates the respective durations can range from 3 to 12 months and the respective amounts from 486.12€ to 1144.64€ per month. + +Considering one undergraduate student with a 3 month scholarship: + +- 972.24 € = 3 months x 486.12 €/month; +- TOTAL: 972.24 € + + diff --git a/NOVALINCS/00-Application_Form-FINAL.pdf b/NOVALINCS/00-Application_Form-FINAL.pdf new file mode 100644 index 0000000..1e371bc Binary files /dev/null and b/NOVALINCS/00-Application_Form-FINAL.pdf differ diff --git a/NOVALINCS/00-Call-TEMPLATE.md b/NOVALINCS/00-Call-TEMPLATE.md new file mode 100644 index 0000000..b4b0cb0 --- /dev/null +++ b/NOVALINCS/00-Call-TEMPLATE.md @@ -0,0 +1,54 @@ +# Concurso Bolsa | TEMPLATE + +- _centro de investigação ou departamento_ + +- _identificação da tipologia de bolsa oferecida e número de vagas_ + +- _dia_ de _mês_ de 2023 + +Encontra-se aberto concurso para a atribuição de _número_ Bolsas _tipo_ no âmbito do projeto _título do projeto_, _referência_, financiado por fundos nacionais através da _…_ exemplo: FCT/MCTES e cofinanciado pelo Fundo Europeu de Desenvolvimento Regional _FEDER_ através do COMPETE – Programa Operacional Fatores de Competitividade _POFC_ _quando aplicável_, nas seguintes condições: + +- **Área Científica:** … + +- **Requisitos de admissão:** _indicar a habilitação académica necessária, bem como a experiência exigida em investigação e outros requisitos de admissão, incluindo fatores preferenciais_ +Escolher uma opção: + + - Conforme o Regulamento de Bolsas de Investigação da FCT nº950/2019 de 16 de dezembro de 2019, artigo 3º e 6º, os candidatos a BI _Bolsas de Investigação_ devem cumprir como condição para a atribuição da bolsa, a inserção efetiva em ciclos de estudos conducentes à atribuição de graus académicos ou em cursos não conferentes de grau académico. Os cursos não conferentes de grau académico correspondem aos cursos previstos na alínea e_ do nº 3 do artigo 4º do Decreto-Lei nº74/2006 de 24 de março e deverão ser desenvolvidos numa instituição de ensino superior em associação a pelo menos uma unidade de I&D, incluindo-se o plano do curso numa ou em várias áreas de investigação da unidade. + - Conforme o Regulamento de Bolsas de Investigação da FCT nº950/2019 de 16 de dezembro de 2019, artigo 5º, — As BII _Bolsas de Iniciação à Investigação_ não podem ser atribuídas a quem já tenha beneficiado de bolsas de investigação direta ou indiretamente financiadas pela FCT, atribuídas nos termos do Estatuto do Bolseiro de Investigação. + - Relativamente às BIPD _Bolsas de Investigação Pós-doutoral_, ao nível dos requisitos a verificar para atribuição das mesmas _artigo 7º do Regulamento de Bolsas de Investigação da FCT nº950/2019_ destaca-se a necessidade do grau de doutor ter sido obtido nos 3 anos anteriores à data de submissão da candidatura à bolsa e, ao nível da sua execução, o facto de apenas poder ser renovada até ao prazo máximo de 3 anos. + +- **Plano de trabalhos:** _apresentar um resumo dos trabalhos a desenvolver e dos objetivos a atingir_ + +- **Legislação e regulamentação aplicável:** A concessão da Bolsa de Investigação será realizada mediante a celebração de um contrato entre a Universidade de Évora e o bolseiro conforme minuta , nos termos do Estatuto do Bolseiro de Investigação _Lei nº40/2004 de 18 de agosto e decreto-lei nº 123/2019 de 28 de agosto_ e de acordo com a legislação e Regulamento de Bolsas de Investigação da Fundação para a Ciência e a Tecnologia, I.P em vigor, regulamento nº950/2019 de 16 de dezembro de 2019: e demais normas aplicáveis. + +- **Local de trabalho:** O trabalho será desenvolvido no(a) _denominação da unidade de investigação_ da Universidade de Évora, sob a orientação científica do Professor(a)/Doutor(a) ……… + +- **Duração da(s) bolsa(s):** A bolsa terá a duração de ..... meses, com início previsto em ..... _mês_ de .......... _ano_. O contrato de bolsa poderá ser renovado até _ex._ ao máximo de ….. meses ou até ao final da dotação orçamental do projeto de financiamento _…_. + +- **Valor do subsídio de manutenção mensal:** O montante da bolsa corresponde a €………., conforme tabela de valores das bolsas atribuídas diretamente pela FCT, I.P. no País _http://fct.pt/apoios/bolsas/valores_, sendo os pagamentos efetuados mensalmente, através de cheque ou transferência bancária. + +- **Métodos de seleção:** Os métodos de seleção a utilizar serão os seguintes: _avaliação curricular, entrevista, provas de conhecimento, ou outros_, com a respetiva valoração de _indicar os valores atribuídos a cada critério ou item avaliado e sua ponderação percentual_. + +- **Composição do Júri de Seleção:** _identificação do Presidente do Júri e dos vogais efetivos e suplentes_ + +- **Forma de publicitação/notificação dos resultados:** Os resultados finais da avaliação serão publicitados, através de lista ordenada _alfabeticamente, por nota final obtida ou outra_ afixada em local visível e público do(a) _indicar local da instituição_, sendo o candidato(a) aprovado(a) notificado através de _email, ofício ou outro_. +Nos termos de direito de audiência prévia dos interessados o projeto de Classificação Final será anunciado por qualquer meio escrito a todos os interessados. +Após comunicação da lista provisória dos resultados da avaliação, os candidatos dispõem de um período de 10 dias úteis para, querendo, se pronunciarem em sede de audiência prévia de interessados. + +- **Prazo de candidatura e forma de apresentação das candidaturas:** O concurso encontra-se aberto no período de ......................... a ......................... de 2022 e os resultados da seleção serão publicados até………………..de………………….de 2022. _O prazo de apresentação de candidaturas não deve ser inferior a 10 dias úteis_. + +- **As candidaturas devem ser formalizadas**, obrigatoriamente, através do envio de carta de candidatura acompanhada dos seguintes documentos: _ex: Curriculum Vitae, certificado de habilitações, cartas de referência ou recomendação e outros documentos comprovativos considerados relevantes_. + - Para efeitos de candidatura os comprovativos podem ser substituídos por declaração de honra do candidato, mas a não demonstração, em fase de contratualização, da posse do grau exigido à data limite da candidatura ou a não apresentação dos comprovativos de matrícula ou inscrição em ciclo de estudos ou curso não conferente de grau, para as bolsas com essa componente, implicam a anulação da avaliação do candidato. + - Os graus académicos obtidos em países estrangeiros necessitam de registo por uma Instituição Portuguesa de acordo com o Decreto-lei nº. 66/2018, de 16 de agosto e a Portaria nº. 33/2019, de 25 de janeiro. A apresentação do certificado é obrigatória para a assinatura do contrato. + Mais informação poderá ser obtida em: + + +- **As candidaturas deverão ser remetidas por e-mail para:** + - Prof. Doutor(a)…………………. + - _Centro/Dep._……………………………….. da Universidade de Évora + - e-mail: + + + +_logos do programa de financiamento quando aplicável_ + diff --git a/NOVALINCS/00-Call-TEMPLATE.pdf b/NOVALINCS/00-Call-TEMPLATE.pdf new file mode 100644 index 0000000..a8670c5 Binary files /dev/null and b/NOVALINCS/00-Call-TEMPLATE.pdf differ diff --git a/NOVALINCS/01-Call-DRAFT.md b/NOVALINCS/01-Call-DRAFT.md new file mode 100644 index 0000000..1f0f4d1 --- /dev/null +++ b/NOVALINCS/01-Call-DRAFT.md @@ -0,0 +1,12 @@ +# Concurso Bolsa | Zugzwang | DRAFT + +> A minuta das candidatura define vários campos a preencher. Quase todos são triviais mas os restantes são **críticos**. Estes necessitam de consenso entre nós. +> +> Além disso, no projeto ficou em aberto o número e tipologia de bolsas. Agora temos de concretizar essas opções: **Exatamente,** quantas bolsas de que tipo? + +## Campos Críticos + +- **Requisitos de admissão:** _indicar a habilitação académica necessária, bem como a experiência exigida em investigação e outros requisitos de admissão, incluindo fatores preferenciais_ +- **Plano de trabalhos:** _apresentar um resumo dos trabalhos a desenvolver e dos objetivos a atingir_ +- **Métodos de seleção:** Os métodos de seleção a utilizar serão os seguintes: _avaliação curricular, entrevista, provas de conhecimento, ou outros_, com a respetiva valoração de _indicar os valores atribuídos a cada critério ou item avaliado e sua ponderação percentual_. +- **As candidaturas devem ser formalizadas**, obrigatoriamente, através do envio de carta de candidatura acompanhada dos seguintes documentos: _ex: Curriculum Vitae, certificado de habilitações, cartas de referência ou recomendação e outros documentos comprovativos considerados relevantes_.<<<>>> \ No newline at end of file diff --git a/NOVALINCS/01-Call-DRAFT.pdf b/NOVALINCS/01-Call-DRAFT.pdf new file mode 100644 index 0000000..e0a5a52 Binary files /dev/null and b/NOVALINCS/01-Call-DRAFT.pdf differ diff --git a/NOVALINCS/01-Call-Underg_A.md b/NOVALINCS/01-Call-Underg_A.md new file mode 100644 index 0000000..927d500 --- /dev/null +++ b/NOVALINCS/01-Call-Underg_A.md @@ -0,0 +1,17 @@ +# Concurso para "Bolsa de Iniciação à Investigação" + +- **Requisitos de admissão:** + - Estudante inscrito numa licenciatura, que não tenha já beneficiado de bolsa de investigação direta ou indiretamente financiadas pela FCT, atribuída nos termos do Estatuto do Bolseiro de Investigação. + - Aprovação a, pelo menos, uma unidade curricular de programação, preferencialmente em `Python`. +- **Plano de trabalhos:** Implementação duma biblioteca `Python` para processar ficheiros de código _ASP_ anotados com probabilidades com as seguintes funcionalidades: + 1. Extração das anotações e associação aos factos relevantes. + 2. Comunicação com o sistema `Potassco` para obtenção dos resultados do programa _ASP_ subjacente. + 3. Cálculos de probabilidades com base nos modelos estáveis obtidos no passo anterior, nas anotações extraídas no passo 1, e nos resultados teóricos deste projeto. +- **Métodos de seleção:** A seleção do candidato resulta de ordenar a classificação obtida pelos seguintes critérios/pesos: + - Entrevista: 40% + - Avaliação Curricular: 30% + - Prova de Conhecimento: 30% +- **As candidaturas devem ser formalizadas**, obrigatoriamente, através do envio de carta de candidatura acompanhada dos seguintes documentos + - Curriculum Vitæ. + - Certificado de Matrícula. + - Certificado de Disciplinas concluídas com as respetivas classificações. \ No newline at end of file diff --git a/NOVALINCS/NOVA LINCS.UE TRA Application Form | Zugzwang.docx b/NOVALINCS/NOVA LINCS.UE TRA Application Form | Zugzwang.docx new file mode 100644 index 0000000..aa6532a Binary files /dev/null and b/NOVALINCS/NOVA LINCS.UE TRA Application Form | Zugzwang.docx differ diff --git a/NOVALINCS/NOVA LINCS.UE TRA Application Form | Zugzwang.gddoc b/NOVALINCS/NOVA LINCS.UE TRA Application Form | Zugzwang.gddoc new file mode 100644 index 0000000..4d842a7 --- /dev/null +++ b/NOVALINCS/NOVA LINCS.UE TRA Application Form | Zugzwang.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1QJoGGUPBseRCBnC_Y1QkZj62-J78XdwiVbW6ZN9MIsw/edit?usp=drivesdk", "file_id": "1QJoGGUPBseRCBnC_Y1QkZj62-J78XdwiVbW6ZN9MIsw", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/TdOS-JasonMAllen.jpg b/NOVALINCS/TdOS-JasonMAllen.jpg new file mode 100644 index 0000000..682415b Binary files /dev/null and b/NOVALINCS/TdOS-JasonMAllen.jpg differ diff --git a/NOVALINCS/bolsas/BI/2023-01-91 | Oficio Juri.gddoc b/NOVALINCS/bolsas/BI/2023-01-91 | Oficio Juri.gddoc new file mode 100644 index 0000000..bbc81bd --- /dev/null +++ b/NOVALINCS/bolsas/BI/2023-01-91 | Oficio Juri.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1zewyZW4jOU5VbG4OKZ-N-6eevVgXWVRh78KDL498O4k/edit?usp=drivesdk", "file_id": "1zewyZW4jOU5VbG4OKZ-N-6eevVgXWVRh78KDL498O4k", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BI/2023-02-01 _ Ata1.pdf b/NOVALINCS/bolsas/BI/2023-02-01 _ Ata1.pdf new file mode 100644 index 0000000..f09cb2e Binary files /dev/null and b/NOVALINCS/bolsas/BI/2023-02-01 _ Ata1.pdf differ diff --git a/NOVALINCS/bolsas/BI/2023-02-01 | Ata1.gddoc b/NOVALINCS/bolsas/BI/2023-02-01 | Ata1.gddoc new file mode 100644 index 0000000..d653e7c --- /dev/null +++ b/NOVALINCS/bolsas/BI/2023-02-01 | Ata1.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1O6m829y9Lb2tfJwdxzNNbU7cjkmeu2B0j1D8kaKYEq4/edit?usp=drivesdk", "file_id": "1O6m829y9Lb2tfJwdxzNNbU7cjkmeu2B0j1D8kaKYEq4", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BI/2023-02-03 | Edital | EN.pdf b/NOVALINCS/bolsas/BI/2023-02-03 | Edital | EN.pdf new file mode 100644 index 0000000..19ca9ac Binary files /dev/null and b/NOVALINCS/bolsas/BI/2023-02-03 | Edital | EN.pdf differ diff --git a/NOVALINCS/bolsas/BI/2023-02-03 | Edital | PT.gddoc b/NOVALINCS/bolsas/BI/2023-02-03 | Edital | PT.gddoc new file mode 100644 index 0000000..2fd171e --- /dev/null +++ b/NOVALINCS/bolsas/BI/2023-02-03 | Edital | PT.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1RxEd05B3bfVkyogNLUjL5jE5uH84t0b9de1RvbSnWgE/edit?usp=drivesdk", "file_id": "1RxEd05B3bfVkyogNLUjL5jE5uH84t0b9de1RvbSnWgE", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BI/2023-02-03 | Edital | PT.pdf b/NOVALINCS/bolsas/BI/2023-02-03 | Edital | PT.pdf new file mode 100644 index 0000000..fdc9391 Binary files /dev/null and b/NOVALINCS/bolsas/BI/2023-02-03 | Edital | PT.pdf differ diff --git a/NOVALINCS/bolsas/BI/2023-03-01 _ Ata 2.pdf b/NOVALINCS/bolsas/BI/2023-03-01 _ Ata 2.pdf new file mode 100644 index 0000000..2a3aa7e Binary files /dev/null and b/NOVALINCS/bolsas/BI/2023-03-01 _ Ata 2.pdf differ diff --git a/NOVALINCS/bolsas/BI/2023-03-01 | Ata 2.gddoc b/NOVALINCS/bolsas/BI/2023-03-01 | Ata 2.gddoc new file mode 100644 index 0000000..da25876 --- /dev/null +++ b/NOVALINCS/bolsas/BI/2023-03-01 | Ata 2.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1tQCVyhvLHJz7xnrCmHhtw0PeRxchWTodGXhHECD3LRE/edit?usp=drivesdk", "file_id": "1tQCVyhvLHJz7xnrCmHhtw0PeRxchWTodGXhHECD3LRE", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BI/signed/2023-01-19 | BI | Oficio Juri.pdf b/NOVALINCS/bolsas/BI/signed/2023-01-19 | BI | Oficio Juri.pdf new file mode 100644 index 0000000..f6f8361 Binary files /dev/null and b/NOVALINCS/bolsas/BI/signed/2023-01-19 | BI | Oficio Juri.pdf differ diff --git a/NOVALINCS/bolsas/BI/signed/2023-02-01 | BI | Ata 01.pdf b/NOVALINCS/bolsas/BI/signed/2023-02-01 | BI | Ata 01.pdf new file mode 100644 index 0000000..c2274d2 Binary files /dev/null and b/NOVALINCS/bolsas/BI/signed/2023-02-01 | BI | Ata 01.pdf differ diff --git a/NOVALINCS/bolsas/BI/signed/2023-03-01 | BI | Ata 02.pdf b/NOVALINCS/bolsas/BI/signed/2023-03-01 | BI | Ata 02.pdf new file mode 100644 index 0000000..83d503f Binary files /dev/null and b/NOVALINCS/bolsas/BI/signed/2023-03-01 | BI | Ata 02.pdf differ diff --git a/NOVALINCS/bolsas/BI/zz_old/Edital BolsaInv.MSc | Zugzwang | EN.gddoc b/NOVALINCS/bolsas/BI/zz_old/Edital BolsaInv.MSc | Zugzwang | EN.gddoc new file mode 100644 index 0000000..c1ee22d --- /dev/null +++ b/NOVALINCS/bolsas/BI/zz_old/Edital BolsaInv.MSc | Zugzwang | EN.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1yWggKwa9e-B_4qoUUsvC5VF2krmT7zUsJxECwDtS0vU/edit?usp=drivesdk", "file_id": "1yWggKwa9e-B_4qoUUsvC5VF2krmT7zUsJxECwDtS0vU", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-01-19 | Oficio Homologação Júri.gddoc b/NOVALINCS/bolsas/BII/2023-01-19 | Oficio Homologação Júri.gddoc new file mode 100644 index 0000000..6c719b4 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-01-19 | Oficio Homologação Júri.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1yC43JtmZ6uji1tMDW6sUcrLGRICNK5OBdq-53kOqpv0/edit?usp=drivesdk", "file_id": "1yC43JtmZ6uji1tMDW6sUcrLGRICNK5OBdq-53kOqpv0", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-01-19 | Oficio Juri BolsaII.Lic Zugzwang.pdf b/NOVALINCS/bolsas/BII/2023-01-19 | Oficio Juri BolsaII.Lic Zugzwang.pdf new file mode 100644 index 0000000..2b85a53 Binary files /dev/null and b/NOVALINCS/bolsas/BII/2023-01-19 | Oficio Juri BolsaII.Lic Zugzwang.pdf differ diff --git a/NOVALINCS/bolsas/BII/2023-02-01 _ Ata1.pdf b/NOVALINCS/bolsas/BII/2023-02-01 _ Ata1.pdf new file mode 100644 index 0000000..ff699d8 Binary files /dev/null and b/NOVALINCS/bolsas/BII/2023-02-01 _ Ata1.pdf differ diff --git a/NOVALINCS/bolsas/BII/2023-02-01 | Ata1.gddoc b/NOVALINCS/bolsas/BII/2023-02-01 | Ata1.gddoc new file mode 100644 index 0000000..6b7392f --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-02-01 | Ata1.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1bywLHput61PQF_QaiX2IYOgaY6eHSiyo1eoduxTlC6M/edit?usp=drivesdk", "file_id": "1bywLHput61PQF_QaiX2IYOgaY6eHSiyo1eoduxTlC6M", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-02-02 | Edital BolsaII.Lic | Zugzwang | EN.gddoc b/NOVALINCS/bolsas/BII/2023-02-02 | Edital BolsaII.Lic | Zugzwang | EN.gddoc new file mode 100644 index 0000000..f7d5dc7 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-02-02 | Edital BolsaII.Lic | Zugzwang | EN.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1nCjnOt4Cj4EBQPtpu5x7As82z9UEU57mnX8Pd0ZMhDU/edit?usp=drivesdk", "file_id": "1nCjnOt4Cj4EBQPtpu5x7As82z9UEU57mnX8Pd0ZMhDU", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-02-02 | Edital BolsaII.Lic | Zugzwang | PT.gddoc b/NOVALINCS/bolsas/BII/2023-02-02 | Edital BolsaII.Lic | Zugzwang | PT.gddoc new file mode 100644 index 0000000..90d6a69 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-02-02 | Edital BolsaII.Lic | Zugzwang | PT.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1QMSAgVgF3ct4NK_X4N7x3skYAuO8liu8QaCRpKCIi_Y/edit?usp=drivesdk", "file_id": "1QMSAgVgF3ct4NK_X4N7x3skYAuO8liu8QaCRpKCIi_Y", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-02-03 | Edital PT_bolsa_BII_novalincs.pdf b/NOVALINCS/bolsas/BII/2023-02-03 | Edital PT_bolsa_BII_novalincs.pdf new file mode 100644 index 0000000..ca5b1fd Binary files /dev/null and b/NOVALINCS/bolsas/BII/2023-02-03 | Edital PT_bolsa_BII_novalincs.pdf differ diff --git a/NOVALINCS/bolsas/BII/2023-03-01 _ Ata 2.pdf b/NOVALINCS/bolsas/BII/2023-03-01 _ Ata 2.pdf new file mode 100644 index 0000000..d36233e Binary files /dev/null and b/NOVALINCS/bolsas/BII/2023-03-01 _ Ata 2.pdf differ diff --git a/NOVALINCS/bolsas/BII/2023-03-01 | Ata 2.gddoc b/NOVALINCS/bolsas/BII/2023-03-01 | Ata 2.gddoc new file mode 100644 index 0000000..f6a1b32 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-03-01 | Ata 2.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1ecoOox4N_HZG1o3u-BYKPRpu4wMSAX3KXvvX8PSMhTE/edit?usp=drivesdk", "file_id": "1ecoOox4N_HZG1o3u-BYKPRpu4wMSAX3KXvvX8PSMhTE", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-03-02 13:23 | Entrevista | Email Convocatória.gddoc b/NOVALINCS/bolsas/BII/2023-03-02 13:23 | Entrevista | Email Convocatória.gddoc new file mode 100644 index 0000000..47e91a9 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-03-02 13:23 | Entrevista | Email Convocatória.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1csNIV1LHBfXxEpVAsn806ThyywrXALSV1KPXMrP_4Zc/edit?usp=drivesdk", "file_id": "1csNIV1LHBfXxEpVAsn806ThyywrXALSV1KPXMrP_4Zc", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-03-02 17:00 | Entrevista (Respostas).gdsheet b/NOVALINCS/bolsas/BII/2023-03-02 17:00 | Entrevista (Respostas).gdsheet new file mode 100644 index 0000000..5ee6186 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-03-02 17:00 | Entrevista (Respostas).gdsheet @@ -0,0 +1 @@ +{"url": "https://docs.google.com/spreadsheets/d/1zL6SCQ0OTPsW4KWK6CbO93kjE8m8Z5kZgqOzDJpKREI/edit?usp=drivesdk", "file_id": "1zL6SCQ0OTPsW4KWK6CbO93kjE8m8Z5kZgqOzDJpKREI", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-03-02 17:00 | Entrevista.gdform b/NOVALINCS/bolsas/BII/2023-03-02 17:00 | Entrevista.gdform new file mode 100644 index 0000000..eecbfe2 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-03-02 17:00 | Entrevista.gdform @@ -0,0 +1 @@ +{"url": "https://docs.google.com/forms/d/1IiL_cFAJTFaUSf8g7-LOepJS_xMDVvd83pJoTS2D32Q/edit?usp=drivesdk", "file_id": "1IiL_cFAJTFaUSf8g7-LOepJS_xMDVvd83pJoTS2D32Q", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-03-02 18:00 | Ata3.gddoc b/NOVALINCS/bolsas/BII/2023-03-02 18:00 | Ata3.gddoc new file mode 100644 index 0000000..a896d96 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-03-02 18:00 | Ata3.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1O4A7nuqD5rK3xg2BEaWdzkP78-6aA-TUSnFIQKwxFgg/edit?usp=drivesdk", "file_id": "1O4A7nuqD5rK3xg2BEaWdzkP78-6aA-TUSnFIQKwxFgg", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-03-02 18_00 _ Ata3.pdf b/NOVALINCS/bolsas/BII/2023-03-02 18_00 _ Ata3.pdf new file mode 100644 index 0000000..85ec51f Binary files /dev/null and b/NOVALINCS/bolsas/BII/2023-03-02 18_00 _ Ata3.pdf differ diff --git a/NOVALINCS/bolsas/BII/2023-03-03 | Notificação Candidatos.gddoc b/NOVALINCS/bolsas/BII/2023-03-03 | Notificação Candidatos.gddoc new file mode 100644 index 0000000..e3eac2c --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-03-03 | Notificação Candidatos.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/19-Kqbj-OvRtQM2jkAdH4XVl0_LMU0JbkfZw87SfAW6U/edit?usp=drivesdk", "file_id": "19-Kqbj-OvRtQM2jkAdH4XVl0_LMU0JbkfZw87SfAW6U", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-03-07 | BII | Declaração Conflito de Interesses.gddoc b/NOVALINCS/bolsas/BII/2023-03-07 | BII | Declaração Conflito de Interesses.gddoc new file mode 100644 index 0000000..a6561c0 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-03-07 | BII | Declaração Conflito de Interesses.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1t_sQhJ3UtoAeSAR2sYizjL4-euBxpJdDo16W82rJiZc/edit?usp=drivesdk", "file_id": "1t_sQhJ3UtoAeSAR2sYizjL4-euBxpJdDo16W82rJiZc", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-03-07 | BII | Plano de Trabalhos.gddoc b/NOVALINCS/bolsas/BII/2023-03-07 | BII | Plano de Trabalhos.gddoc new file mode 100644 index 0000000..db54822 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-03-07 | BII | Plano de Trabalhos.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1nskb1s1EO-nhTMzS4aXZN7xjGUvk2H7dvILX5eb5PgY/edit?usp=drivesdk", "file_id": "1nskb1s1EO-nhTMzS4aXZN7xjGUvk2H7dvILX5eb5PgY", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-03-17 | Ata 4.gddoc b/NOVALINCS/bolsas/BII/2023-03-17 | Ata 4.gddoc new file mode 100644 index 0000000..6f15bc3 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-03-17 | Ata 4.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/13AAkZDZH1brLz18e4QGfBjVjlKKyW0zM_yz86B46_4M/edit?usp=drivesdk", "file_id": "13AAkZDZH1brLz18e4QGfBjVjlKKyW0zM_yz86B46_4M", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-03-27 | Ofício Início Bolsa II.gddoc b/NOVALINCS/bolsas/BII/2023-03-27 | Ofício Início Bolsa II.gddoc new file mode 100644 index 0000000..4f3b1c7 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-03-27 | Ofício Início Bolsa II.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1Oe_TfNecoJ376EYXZBT6WK6DmUc7hSNxk63bmyQfavQ/edit?usp=drivesdk", "file_id": "1Oe_TfNecoJ376EYXZBT6WK6DmUc7hSNxk63bmyQfavQ", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-03-29 _ BII _ Inicio de Bolsa.pdf b/NOVALINCS/bolsas/BII/2023-03-29 _ BII _ Inicio de Bolsa.pdf new file mode 100644 index 0000000..5b510cf Binary files /dev/null and b/NOVALINCS/bolsas/BII/2023-03-29 _ BII _ Inicio de Bolsa.pdf differ diff --git a/NOVALINCS/bolsas/BII/2023-03-29 _ BII _ Inicio de Bolsa_signed.pdf b/NOVALINCS/bolsas/BII/2023-03-29 _ BII _ Inicio de Bolsa_signed.pdf new file mode 100644 index 0000000..945d56a Binary files /dev/null and b/NOVALINCS/bolsas/BII/2023-03-29 _ BII _ Inicio de Bolsa_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/2023-03-29 | BII | Inicio de Bolsa.gddoc b/NOVALINCS/bolsas/BII/2023-03-29 | BII | Inicio de Bolsa.gddoc new file mode 100644 index 0000000..bca11c9 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-03-29 | BII | Inicio de Bolsa.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1cbW_SM5eXGWliN1FQ0cLdf11KgsUNFuAbgHsrpZ6wrA/edit?usp=drivesdk", "file_id": "1cbW_SM5eXGWliN1FQ0cLdf11KgsUNFuAbgHsrpZ6wrA", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-04-26 | Oficio Início de Bolsa.pdf b/NOVALINCS/bolsas/BII/2023-04-26 | Oficio Início de Bolsa.pdf new file mode 100644 index 0000000..274d6a8 Binary files /dev/null and b/NOVALINCS/bolsas/BII/2023-04-26 | Oficio Início de Bolsa.pdf differ diff --git a/NOVALINCS/bolsas/BII/2023-09-01 | Inquérito Atividades Bolseiros.gddoc b/NOVALINCS/bolsas/BII/2023-09-01 | Inquérito Atividades Bolseiros.gddoc new file mode 100644 index 0000000..e458239 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-09-01 | Inquérito Atividades Bolseiros.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1oXVe5x18ulKlnfa2LuzfNCkrsNuabG3H8uE4nbuJ_kk/edit?usp=drivesdk", "file_id": "1oXVe5x18ulKlnfa2LuzfNCkrsNuabG3H8uE4nbuJ_kk", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-09-01 | Oficio Renovação Bolsa.gddoc b/NOVALINCS/bolsas/BII/2023-09-01 | Oficio Renovação Bolsa.gddoc new file mode 100644 index 0000000..8979e49 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-09-01 | Oficio Renovação Bolsa.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1xstDZUgp4Rrl8R26HP6XvCyZy2bQwQ9V4gGxawcUrbc/edit?usp=drivesdk", "file_id": "1xstDZUgp4Rrl8R26HP6XvCyZy2bQwQ9V4gGxawcUrbc", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-09-01 | Relatorio Atividades Bolseiros.gddoc b/NOVALINCS/bolsas/BII/2023-09-01 | Relatorio Atividades Bolseiros.gddoc new file mode 100644 index 0000000..2888bb0 --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-09-01 | Relatorio Atividades Bolseiros.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1vn-3iNbAYMheKxOTDRgL8io2HPENFlQvnWPI08bhK8Y/edit?usp=drivesdk", "file_id": "1vn-3iNbAYMheKxOTDRgL8io2HPENFlQvnWPI08bhK8Y", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/2023-99-03 | Minuta Contrato Bolsa.gddoc b/NOVALINCS/bolsas/BII/2023-99-03 | Minuta Contrato Bolsa.gddoc new file mode 100644 index 0000000..024e6aa --- /dev/null +++ b/NOVALINCS/bolsas/BII/2023-99-03 | Minuta Contrato Bolsa.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1WjjjgQoNzqNXZWqr5NHJwu1sUU7BPiJ5GDQ_BAa1gLk/edit?usp=drivesdk", "file_id": "1WjjjgQoNzqNXZWqr5NHJwu1sUU7BPiJ5GDQ_BAa1gLk", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-03-29 _ BII _ Inicio de Bolsa_signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-03-29 _ BII _ Inicio de Bolsa_signed.pdf new file mode 100644 index 0000000..945d56a Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-03-29 _ BII _ Inicio de Bolsa_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 Inscrições.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 Inscrições.pdf new file mode 100644 index 0000000..b0e6080 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 Inscrições.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 Inscrições.png b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 Inscrições.png new file mode 100644 index 0000000..fbd5d43 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 Inscrições.png differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 | Inscrições.png b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 | Inscrições.png new file mode 100644 index 0000000..dee859d Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-05-03 | Inscrições.png differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-09-01 Relatorio Atividades Bolseiros.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-09-01 Relatorio Atividades Bolseiros.pdf new file mode 100644 index 0000000..0221954 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/2023-09-01 Relatorio Atividades Bolseiros.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/AlicE Martins.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/AlicE Martins.pdf new file mode 100644 index 0000000..a23aaaa Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/AlicE Martins.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/BII | Candidatura à Bolsa de Iniciação à Investigação | Alice Martins.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/BII | Candidatura à Bolsa de Iniciação à Investigação | Alice Martins.pdf new file mode 100644 index 0000000..7d170b9 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/BII | Candidatura à Bolsa de Iniciação à Investigação | Alice Martins.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/BII | Plano de Trabalhos.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/BII | Plano de Trabalhos.pdf new file mode 100644 index 0000000..c49a4a5 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/BII | Plano de Trabalhos.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Captura de ecrã de 2023-02-27 16-35-44.png b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Captura de ecrã de 2023-02-27 16-35-44.png new file mode 100644 index 0000000..8d94b0b Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Captura de ecrã de 2023-02-27 16-35-44.png differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Consulta IBAN, BIC e SWIFT 22-05-2023 14 15.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Consulta IBAN, BIC e SWIFT 22-05-2023 14 15.pdf new file mode 100644 index 0000000..bb2abea Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Consulta IBAN, BIC e SWIFT 22-05-2023 14 15.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova.pdf new file mode 100644 index 0000000..1ad8091 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova_preenchida.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova_preenchida.pdf new file mode 100644 index 0000000..9ae0f53 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova_preenchida.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova_prepreenchido.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova_prepreenchido.pdf new file mode 100644 index 0000000..7873c9d Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/Ficha_DRHSC_bolseiros_Nova_prepreenchido.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/bolsa.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/bolsa.pdf new file mode 100644 index 0000000..9ae0f53 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/bolsa.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_aproveitamento_escolar.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_aproveitamento_escolar.pdf new file mode 100644 index 0000000..d0b1656 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_aproveitamento_escolar.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_matricula_inscricao-2023.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_matricula_inscricao-2023.pdf new file mode 100644 index 0000000..35cee79 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_matricula_inscricao-2023.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_matricula_inscricao.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_matricula_inscricao.pdf new file mode 100644 index 0000000..35cee79 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/comprovativo_matricula_inscricao.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/dados.md b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/dados.md new file mode 100644 index 0000000..766c43f --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/01-candidatura/dados.md @@ -0,0 +1,6 @@ +Número do Cartão de Cidadão: 14594754 8 ZX5 +Número de Contribuinte: 259379174 +Morada: + Rua Joaquim Marques Saias, Lote 19, Moradia D + 2130-299 Benavente +Ciencia-ID: 861B-FBEF-B218 diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 Relatorio Atividades Bolseiros.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 Relatorio Atividades Bolseiros.pdf new file mode 100644 index 0000000..2fd9fd8 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 Relatorio Atividades Bolseiros.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink new file mode 100644 index 0000000..d2f85e1 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1CMfE5UpqGZK0fl0CVbME83S_ey24jU78/view?usp=drivesdk", "file_id": "1CMfE5UpqGZK0fl0CVbME83S_ey24jU78", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 | Inquérito Atividades Bolseiros.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 | Inquérito Atividades Bolseiros.gdlink new file mode 100644 index 0000000..fd8c1a9 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 | Inquérito Atividades Bolseiros.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1MHGJ_MbMEDN7D6DZx8_IAk_tchGiA640/view?usp=drivesdk", "file_id": "1MHGJ_MbMEDN7D6DZx8_IAk_tchGiA640", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 | Oficio Renovação Bolsa.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 | Oficio Renovação Bolsa.gdlink new file mode 100644 index 0000000..5424539 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/2023-09-01 | Oficio Renovação Bolsa.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1j2LPs2GGxj1JBZWQSIarRo8dK1bEJT6d/view?usp=drivesdk", "file_id": "1j2LPs2GGxj1JBZWQSIarRo8dK1bEJT6d", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/Declaração_Generali_ausência de acidentes (1).docx b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/Declaração_Generali_ausência de acidentes (1).docx new file mode 100644 index 0000000..978d059 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/Declaração_Generali_ausência de acidentes (1).docx differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/12-renovacao-bolsa-alice_signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/12-renovacao-bolsa-alice_signed.pdf new file mode 100644 index 0000000..2693937 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/12-renovacao-bolsa-alice_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/ofício_renovação.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/ofício_renovação.pdf new file mode 100644 index 0000000..8f35e37 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/ofício_renovação.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/ofício_renovação.tex b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/ofício_renovação.tex new file mode 100644 index 0000000..d56a29d --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/ofício/ofício_renovação.tex @@ -0,0 +1,31 @@ +% !TeX program = xelatex +\documentclass{oficio} +\usepackage{polyglossia} +\setmainlanguage{portuges} +\usepackage{xcolor} + + +\def\LOGO{\LOGOECT} +\def\DESTINATARIO{\\ +Magnífica Reitora da\\ +Universidade de Évora\\ +Professora Doutora Hermínia Vilar +} +\def\EU{Salvador Pinto Abreu} +\def\ASSINATURA{\vspace{5mm}} +\def\QUALIDADE{Professor Catedrático} + +\begin{document} + +\unidade{\textsc{\textcolor{gray}{NOVA-LINCS (Pólo de Évora)}}} + +\documento + {12/DI.SPA/23} + {Renovação de Bolsa de Iniciação à Investigação} + {31 de julho de 2023} + +Na qualidade de Coordenador do pólo de Évora do NOVA-LINCS, solicito que, em acordo com o parecer do orientador, seja renovada a bolsa de iniciação à investigação (para licenciada) com a aluna Alice Fernandes Martins, para o perı́odo de 2 de agosto a 2 de novembro de 2023, no âmbito do Financiamento Plurianual da unidade de I\&D com a referência: \texttt{UIDP/04516/2020} (NOVA LINCS: Financiamento Programático 2020–2023), cofinanciado pela Fundação para Ciência e a Tecnologia. + +\CHAU{Évora, julho de 2023,} + +\end{document} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/parecer/parecer_renovação.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/parecer/parecer_renovação.pdf new file mode 100644 index 0000000..3936907 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/parecer/parecer_renovação.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/parecer/parecer_renovação.tex b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/parecer/parecer_renovação.tex new file mode 100644 index 0000000..099894d --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/parecer/parecer_renovação.tex @@ -0,0 +1,36 @@ +% !TeX program = xelatex +\documentclass{oficio} + +\usepackage{polyglossia} +\setmainlanguage{portuges} + +\def\ASSINATURA{\includegraphics{fcsig.pdf}} + +\begin{document} +\unidade{\textsc{\DI}} +\documento{% +NL/ZZ/BII/1/AM/1 +}{% +Renovação de BII --- Parecer}{% +31 de julho de 2023} +%\EU{} + +\qualidade{(Professor Auxiliar)} + +A aluna +% +Alice Fernandes Martins, +% +detentora de uma \emph{Bolsa de Iniciação à Investigação} no âmbito do Financiamento Plurianual da unidade I\&D Referência: UIDP/04516/2020 (NOVA LINCS: Financiamento Programático 2020-2023) cofinanciado pela Fundação para Ciência e a Tecnologia +% +\textbf{completou corretamente todas as tarefas propostas no âmbito desta bolsa}. +% + +% +Como orientador científico, +% +dado o excelente desempenho da bolseira e a necessidade, no projeto Zugzwang, de continuar o desenvolvimento destas tarefas, \textbf{recomendo a renovação da bolsa}. + +\CHAU{Com os melhores cumprimentos,} + +\end{document} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.md b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.md new file mode 100644 index 0000000..333cb92 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.md @@ -0,0 +1,20 @@ +# Plano de Trabalhos - Renovação de BII + +
+Évora, 4 de setembro de 2023 +
+ + +Considerando que foi já implementada uma biblioteca Python que proporciona as seguintes funcionalidades: +- Ler a descrição de uma rede Bayesiana num formato comum (BIF) para uma representação intermédia. +- Escrever uma especificação ASP anotada com probabilidades a partir da representação intermédia indicada no ponto anterior. + +e que, com esta biblioteca é possível aplicar métodos e ferramentas desenvolvidos no âmbito do projeto “Zugzwang | Lógica e Inteligência Artificial” a um conjunto alargado de problemas, **pretende-se continuar,** com a implementação duma biblioteca Python para processar ficheiros de código ASP anotados com probabilidades incluindo as seguintes funcionalidades: + +- Extração das anotações e associação aos factos relevantes. +- Comunicação com o sistema Potassco para obtenção dos resultados do programa ASP subjacente. +- Cálculos de probabilidades com base nos modelos estáveis obtidos no passo anterior, nas anotações extraídas no passo 1, e nos resultados teóricos deste projeto. + +
+(Francisco Coelho) +
diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.pdf new file mode 100644 index 0000000..a3e00fa Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.tex b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.tex new file mode 100644 index 0000000..5ea5c5f --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/plano-trab/plano-trabalhos.tex @@ -0,0 +1,38 @@ +% !TeX program = xelatex +\documentclass{oficio} + +\usepackage{polyglossia} +\setmainlanguage{portuges} + +\def\ASSINATURA{\includegraphics{fcsig.pdf}} + +\begin{document} +\unidade{\textsc{\DI}} +\documento{% +NL/ZZ/BII/1/AM/2 +}{% +Renovação de BII --- Plano de Trabalhos}{% +31 de julho de} +%\EU{} + +\qualidade{(Professor Auxiliar)} + +Considerando que foi já implementada uma biblioteca \texttt{Python} que proporciona as seguintes funcionalidades: +% +\begin{itemize} + \item Ler a descrição de uma rede Bayesiana num formato comum (\texttt{BIF}) para uma representação intermédia. + \item Escrever uma especificação \texttt{ASP} anotada com probabilidades a partir da representação intermédia indicada no ponto anterior. +\end{itemize} +% +e que, com esta biblioteca é possível aplicar métodos e ferramentas desenvolvidos no âmbito do projeto ``\emph{Zugzwang | Lógica e Inteligência Artificial}'' a um conjunto alargado de problemas, \textbf{pretende-se continuar,} com a implementação duma biblioteca \texttt{Python} para processar ficheiros de código ASP anotados com probabilidades incluindo as seguintes funcionalidades: + +\begin{itemize} + + \item Extração das anotações e associação aos factos relevantes. + \item Comunicação com o sistema Potassco para obtenção dos resultados do programa ASP subjacente. + \item Cálculos de probabilidades com base nos modelos estáveis obtidos no passo anterior, nas anotações extraídas no passo 1, e nos resultados teóricos deste projeto. +\end{itemize} + +\CHAU{Com os melhores cumprimentos,} + +\end{document} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf new file mode 100644 index 0000000..b6c4e5d Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp new file mode 100644 index 0000000..1ec164a Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf new file mode 100644 index 0000000..14cf9af Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink new file mode 100644 index 0000000..6f5eb5f --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1XsRrztaU7vHaCaCihabO1jaaIw_Owafu/view?usp=drivesdk", "file_id": "1XsRrztaU7vHaCaCihabO1jaaIw_Owafu", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/renovacao-amartins.zip b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/renovacao-amartins.zip new file mode 100644 index 0000000..a22e786 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/renovacao-amartins.zip differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/comprovativo_matricula-inscricao-2023.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/comprovativo_matricula-inscricao-2023.pdf new file mode 100644 index 0000000..35cee79 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/comprovativo_matricula-inscricao-2023.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/ofício_renovação-signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/ofício_renovação-signed.pdf new file mode 100644 index 0000000..ca4a8b8 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/ofício_renovação-signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/parecer_renovação-signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/parecer_renovação-signed.pdf new file mode 100644 index 0000000..3936907 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/parecer_renovação-signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/plano_trabalhos-signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/plano_trabalhos-signed.pdf new file mode 100644 index 0000000..e8475f7 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/plano_trabalhos-signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/relatorio_atividades-signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/relatorio_atividades-signed.pdf new file mode 100644 index 0000000..66b9ad3 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/02-renovação/zz-send/relatorio_atividades-signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 Relatorio Atividades Bolseiros.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 Relatorio Atividades Bolseiros.pdf new file mode 100644 index 0000000..2fd9fd8 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 Relatorio Atividades Bolseiros.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink new file mode 100644 index 0000000..e8a4241 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1rOXG01KpycJggWJk9zFTkfcHue7SXRgy/view?usp=drivesdk", "file_id": "1rOXG01KpycJggWJk9zFTkfcHue7SXRgy", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 | Inquérito Atividades Bolseiros.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 | Inquérito Atividades Bolseiros.gdlink new file mode 100644 index 0000000..fd8c1a9 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 | Inquérito Atividades Bolseiros.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1MHGJ_MbMEDN7D6DZx8_IAk_tchGiA640/view?usp=drivesdk", "file_id": "1MHGJ_MbMEDN7D6DZx8_IAk_tchGiA640", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 | Oficio Renovação Bolsa.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 | Oficio Renovação Bolsa.gdlink new file mode 100644 index 0000000..5424539 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-09-01 | Oficio Renovação Bolsa.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1j2LPs2GGxj1JBZWQSIarRo8dK1bEJT6d/view?usp=drivesdk", "file_id": "1j2LPs2GGxj1JBZWQSIarRo8dK1bEJT6d", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-10-31 | Inquérito Atividades Bolseiros.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-10-31 | Inquérito Atividades Bolseiros.gdlink new file mode 100644 index 0000000..ef90555 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/2023-10-31 | Inquérito Atividades Bolseiros.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1I7sfMTiLxUeqjx4E5C-g1xxjxsSRtt5b/view?usp=drivesdk", "file_id": "1I7sfMTiLxUeqjx4E5C-g1xxjxsSRtt5b", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/Declaração_Generali_ausência de acidentes (1).docx b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/Declaração_Generali_ausência de acidentes (1).docx new file mode 100644 index 0000000..978d059 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/Declaração_Generali_ausência de acidentes (1).docx differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/12-renovacao-bolsa-alice_signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/12-renovacao-bolsa-alice_signed.pdf new file mode 100644 index 0000000..2693937 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/12-renovacao-bolsa-alice_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/15-renovacao-bolsa-alice_signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/15-renovacao-bolsa-alice_signed.pdf new file mode 100644 index 0000000..26e9781 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/15-renovacao-bolsa-alice_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/ofício_renovação.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/ofício_renovação.pdf new file mode 100644 index 0000000..2ff6822 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/ofício_renovação.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/ofício_renovação.tex b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/ofício_renovação.tex new file mode 100644 index 0000000..2c43559 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/ofício/ofício_renovação.tex @@ -0,0 +1,31 @@ +% !TeX program = xelatex +\documentclass{oficio} +\usepackage{polyglossia} +\setmainlanguage{portuges} +\usepackage{xcolor} + + +\def\LOGO{\LOGOECT} +\def\DESTINATARIO{\\ +Magnífica Reitora da\\ +Universidade de Évora\\ +Professora Doutora Hermínia Vilar +} +\def\EU{Salvador Pinto Abreu} +\def\ASSINATURA{\vspace{5mm}} +\def\QUALIDADE{Professor Catedrático} + +\begin{document} + +\unidade{\textsc{\textcolor{gray}{NOVA-LINCS (Pólo de Évora)}}} + +\documento + {12/DI.SPA/23} + {Renovação de Bolsa de Iniciação à Investigação} + {31 de outubro de 2023} + +Na qualidade de Coordenador do pólo de Évora do NOVA-LINCS, solicito que, em acordo com o parecer do orientador, seja renovada a bolsa de iniciação à investigação (para licenciada) com a aluna Alice Fernandes Martins, para o perı́odo de 2 de novembro de 2023 a 2 de janeiro de 2024, no âmbito do Financiamento Plurianual da unidade de I\&D com a referência: \texttt{UIDP/04516/2020} (NOVA LINCS: Financiamento Programático 2020–2023), cofinanciado pela Fundação para Ciência e a Tecnologia. + +\CHAU{Évora, outubro de 2023,} + +\end{document} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/parecer/parecer_renovação.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/parecer/parecer_renovação.pdf new file mode 100644 index 0000000..c53fa62 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/parecer/parecer_renovação.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/parecer/parecer_renovação.tex b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/parecer/parecer_renovação.tex new file mode 100644 index 0000000..0fa4e67 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/parecer/parecer_renovação.tex @@ -0,0 +1,36 @@ +% !TeX program = xelatex +\documentclass{oficio} + +\usepackage{polyglossia} +\setmainlanguage{portuges} + +\def\ASSINATURA{\includegraphics{fcsig.pdf}} + +\begin{document} +\unidade{\textsc{\DI}} +\documento{% +NL/ZZ/BII/1/AM/3 +}{% +Renovação de BII --- Parecer} +{31 de outubro de 2023} +%\EU{} + +\qualidade{(Professor Auxiliar)} + +A aluna +% +Alice Fernandes Martins, +% +detentora de uma \emph{Bolsa de Iniciação à Investigação} no âmbito do Financiamento Plurianual da unidade I\&D Referência: UIDP/04516/2020 (NOVA LINCS: Financiamento Programático 2020-2023) cofinanciado pela Fundação para Ciência e a Tecnologia +% +\textbf{completou corretamente todas as tarefas propostas no âmbito desta bolsa}. +% + +% +Como orientador científico, +% +dado o excelente desempenho da bolseira e a necessidade, no projeto Zugzwang, de continuar o desenvolvimento destas tarefas, \textbf{recomendo a renovação da bolsa}. + +\CHAU{Com os melhores cumprimentos,} + +\end{document} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.md b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.md new file mode 100644 index 0000000..333cb92 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.md @@ -0,0 +1,20 @@ +# Plano de Trabalhos - Renovação de BII + +
+Évora, 4 de setembro de 2023 +
+ + +Considerando que foi já implementada uma biblioteca Python que proporciona as seguintes funcionalidades: +- Ler a descrição de uma rede Bayesiana num formato comum (BIF) para uma representação intermédia. +- Escrever uma especificação ASP anotada com probabilidades a partir da representação intermédia indicada no ponto anterior. + +e que, com esta biblioteca é possível aplicar métodos e ferramentas desenvolvidos no âmbito do projeto “Zugzwang | Lógica e Inteligência Artificial” a um conjunto alargado de problemas, **pretende-se continuar,** com a implementação duma biblioteca Python para processar ficheiros de código ASP anotados com probabilidades incluindo as seguintes funcionalidades: + +- Extração das anotações e associação aos factos relevantes. +- Comunicação com o sistema Potassco para obtenção dos resultados do programa ASP subjacente. +- Cálculos de probabilidades com base nos modelos estáveis obtidos no passo anterior, nas anotações extraídas no passo 1, e nos resultados teóricos deste projeto. + +
+(Francisco Coelho) +
diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.pdf new file mode 100644 index 0000000..d5f9f31 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.tex b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.tex new file mode 100644 index 0000000..894fd92 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/plano-trab/plano-trabalhos.tex @@ -0,0 +1,38 @@ +% !TeX program = xelatex +\documentclass{oficio} + +\usepackage{polyglossia} +\setmainlanguage{portuges} + +\def\ASSINATURA{\includegraphics{fcsig.pdf}} + +\begin{document} +\unidade{\textsc{\DI}} +\documento{% +NL/ZZ/BII/1/AM/4 +}{% +Renovação de BII --- Plano de Trabalhos}{% +31 de outubro de 2023} +%\EU{} + +\qualidade{(Professor Auxiliar)} + +Considerando que foram já implementadas biblioteca \texttt{Python} que proporcionam as seguintes funcionalidades: +% +\begin{itemize} + \item Ler a descrição de uma rede Bayesiana num formato comum (\texttt{BIF}) para uma representação intermédia. + \item Escrever uma especificação \texttt{ASP} anotada com probabilidades a partir da representação intermédia indicada no ponto anterior. +\end{itemize} +% +e que, com esta biblioteca é possível aplicar métodos e ferramentas desenvolvidos no âmbito do projeto ``\emph{Zugzwang | Lógica e Inteligência Artificial}'' a um conjunto alargado de problemas, \textbf{pretende-se continuar,} com a implementação duma biblioteca \texttt{Python} para processar ficheiros de código ASP anotados com probabilidades, incluindo as seguintes funcionalidades: + +\begin{itemize} + + \item Extração das anotações e associação aos factos relevantes. + \item Comunicação com o sistema \texttt{Potassco} para obtenção dos resultados do programa \texttt{ASP} subjacente. + \item Cálculos de probabilidades com base nos modelos estáveis obtidos no passo anterior, nas anotações extraídas no passo 1, e nos resultados teóricos deste projeto. +\end{itemize} + +\CHAU{Com os melhores cumprimentos,} + +\end{document} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf new file mode 100644 index 0000000..b6c4e5d Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp new file mode 100644 index 0000000..1ec164a Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf new file mode 100644 index 0000000..14cf9af Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink new file mode 100644 index 0000000..cc891d6 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1WphuifxTG3e1NcMPfI4FiiDMRlLX9P8r/view?usp=drivesdk", "file_id": "1WphuifxTG3e1NcMPfI4FiiDMRlLX9P8r", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros - signed_am_fc.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros - signed_am_fc.pdf new file mode 100644 index 0000000..485503b Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros - signed_am_fc.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros.gddoc b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros.gddoc new file mode 100644 index 0000000..1f77fe3 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1Ua0fco35d52jX0TpmPSzsuK_PetQUbqc00RWfLCPRaE/edit?usp=drivesdk", "file_id": "1Ua0fco35d52jX0TpmPSzsuK_PetQUbqc00RWfLCPRaE", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros_231120_170319.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros_231120_170319.pdf new file mode 100644 index 0000000..cd0e895 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/relatório/2023-10-31 - Relatorio Atividades Bolseiros_231120_170319.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/renovacao-amartins.zip b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/renovacao-amartins.zip new file mode 100644 index 0000000..a22e786 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/renovacao-amartins.zip differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/15-renovacao-bolsa-alice_signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/15-renovacao-bolsa-alice_signed.pdf new file mode 100644 index 0000000..26e9781 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/15-renovacao-bolsa-alice_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/Declaração_Generali_ausência de acidentes.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/Declaração_Generali_ausência de acidentes.pdf new file mode 100644 index 0000000..9507a12 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/Declaração_Generali_ausência de acidentes.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/comprovativo_matricula-inscricao-2023.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/comprovativo_matricula-inscricao-2023.pdf new file mode 100644 index 0000000..35cee79 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/comprovativo_matricula-inscricao-2023.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/parecer_renovação.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/parecer_renovação.pdf new file mode 100644 index 0000000..c53fa62 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/parecer_renovação.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/plano-trabalhos.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/plano-trabalhos.pdf new file mode 100644 index 0000000..fafa033 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/plano-trabalhos.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/relatorio_atividades-signed_am_fc.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/relatorio_atividades-signed_am_fc.pdf new file mode 100644 index 0000000..485503b Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/relatorio_atividades-signed_am_fc.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/renovacao_BII_AliceMartins-documentos.zip b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/renovacao_BII_AliceMartins-documentos.zip new file mode 100644 index 0000000..8fc8931 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/03-renovação (nov)/zz-send/renovacao_BII_AliceMartins-documentos.zip differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 Relatorio Atividades Bolseiros.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 Relatorio Atividades Bolseiros.pdf new file mode 100644 index 0000000..2fd9fd8 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 Relatorio Atividades Bolseiros.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink new file mode 100644 index 0000000..e8a4241 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 Relatorio Atividades Bolseiros.pdf.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1rOXG01KpycJggWJk9zFTkfcHue7SXRgy/view?usp=drivesdk", "file_id": "1rOXG01KpycJggWJk9zFTkfcHue7SXRgy", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 | Inquérito Atividades Bolseiros.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 | Inquérito Atividades Bolseiros.gdlink new file mode 100644 index 0000000..fd8c1a9 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 | Inquérito Atividades Bolseiros.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1MHGJ_MbMEDN7D6DZx8_IAk_tchGiA640/view?usp=drivesdk", "file_id": "1MHGJ_MbMEDN7D6DZx8_IAk_tchGiA640", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 | Oficio Renovação Bolsa.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 | Oficio Renovação Bolsa.gdlink new file mode 100644 index 0000000..5424539 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-09-01 | Oficio Renovação Bolsa.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1j2LPs2GGxj1JBZWQSIarRo8dK1bEJT6d/view?usp=drivesdk", "file_id": "1j2LPs2GGxj1JBZWQSIarRo8dK1bEJT6d", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-10-31 | Inquérito Atividades Bolseiros.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-10-31 | Inquérito Atividades Bolseiros.gdlink new file mode 100644 index 0000000..ef90555 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/2023-10-31 | Inquérito Atividades Bolseiros.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1I7sfMTiLxUeqjx4E5C-g1xxjxsSRtt5b/view?usp=drivesdk", "file_id": "1I7sfMTiLxUeqjx4E5C-g1xxjxsSRtt5b", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/Declaração_Generali_ausência de acidentes (1).docx b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/Declaração_Generali_ausência de acidentes (1).docx new file mode 100644 index 0000000..978d059 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/Declaração_Generali_ausência de acidentes (1).docx differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/12-renovacao-bolsa-alice_signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/12-renovacao-bolsa-alice_signed.pdf new file mode 100644 index 0000000..2693937 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/12-renovacao-bolsa-alice_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/15-renovacao-bolsa-alice_signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/15-renovacao-bolsa-alice_signed.pdf new file mode 100644 index 0000000..26e9781 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/15-renovacao-bolsa-alice_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/ofício_renovação.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/ofício_renovação.pdf new file mode 100644 index 0000000..2ff6822 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/ofício_renovação.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/ofício_renovação.tex b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/ofício_renovação.tex new file mode 100644 index 0000000..2c43559 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/ofício/ofício_renovação.tex @@ -0,0 +1,31 @@ +% !TeX program = xelatex +\documentclass{oficio} +\usepackage{polyglossia} +\setmainlanguage{portuges} +\usepackage{xcolor} + + +\def\LOGO{\LOGOECT} +\def\DESTINATARIO{\\ +Magnífica Reitora da\\ +Universidade de Évora\\ +Professora Doutora Hermínia Vilar +} +\def\EU{Salvador Pinto Abreu} +\def\ASSINATURA{\vspace{5mm}} +\def\QUALIDADE{Professor Catedrático} + +\begin{document} + +\unidade{\textsc{\textcolor{gray}{NOVA-LINCS (Pólo de Évora)}}} + +\documento + {12/DI.SPA/23} + {Renovação de Bolsa de Iniciação à Investigação} + {31 de outubro de 2023} + +Na qualidade de Coordenador do pólo de Évora do NOVA-LINCS, solicito que, em acordo com o parecer do orientador, seja renovada a bolsa de iniciação à investigação (para licenciada) com a aluna Alice Fernandes Martins, para o perı́odo de 2 de novembro de 2023 a 2 de janeiro de 2024, no âmbito do Financiamento Plurianual da unidade de I\&D com a referência: \texttt{UIDP/04516/2020} (NOVA LINCS: Financiamento Programático 2020–2023), cofinanciado pela Fundação para Ciência e a Tecnologia. + +\CHAU{Évora, outubro de 2023,} + +\end{document} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/parecer/parecer_renovação.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/parecer/parecer_renovação.pdf new file mode 100644 index 0000000..c53fa62 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/parecer/parecer_renovação.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/parecer/parecer_renovação.tex b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/parecer/parecer_renovação.tex new file mode 100644 index 0000000..0fa4e67 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/parecer/parecer_renovação.tex @@ -0,0 +1,36 @@ +% !TeX program = xelatex +\documentclass{oficio} + +\usepackage{polyglossia} +\setmainlanguage{portuges} + +\def\ASSINATURA{\includegraphics{fcsig.pdf}} + +\begin{document} +\unidade{\textsc{\DI}} +\documento{% +NL/ZZ/BII/1/AM/3 +}{% +Renovação de BII --- Parecer} +{31 de outubro de 2023} +%\EU{} + +\qualidade{(Professor Auxiliar)} + +A aluna +% +Alice Fernandes Martins, +% +detentora de uma \emph{Bolsa de Iniciação à Investigação} no âmbito do Financiamento Plurianual da unidade I\&D Referência: UIDP/04516/2020 (NOVA LINCS: Financiamento Programático 2020-2023) cofinanciado pela Fundação para Ciência e a Tecnologia +% +\textbf{completou corretamente todas as tarefas propostas no âmbito desta bolsa}. +% + +% +Como orientador científico, +% +dado o excelente desempenho da bolseira e a necessidade, no projeto Zugzwang, de continuar o desenvolvimento destas tarefas, \textbf{recomendo a renovação da bolsa}. + +\CHAU{Com os melhores cumprimentos,} + +\end{document} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.md b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.md new file mode 100644 index 0000000..333cb92 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.md @@ -0,0 +1,20 @@ +# Plano de Trabalhos - Renovação de BII + +
+Évora, 4 de setembro de 2023 +
+ + +Considerando que foi já implementada uma biblioteca Python que proporciona as seguintes funcionalidades: +- Ler a descrição de uma rede Bayesiana num formato comum (BIF) para uma representação intermédia. +- Escrever uma especificação ASP anotada com probabilidades a partir da representação intermédia indicada no ponto anterior. + +e que, com esta biblioteca é possível aplicar métodos e ferramentas desenvolvidos no âmbito do projeto “Zugzwang | Lógica e Inteligência Artificial” a um conjunto alargado de problemas, **pretende-se continuar,** com a implementação duma biblioteca Python para processar ficheiros de código ASP anotados com probabilidades incluindo as seguintes funcionalidades: + +- Extração das anotações e associação aos factos relevantes. +- Comunicação com o sistema Potassco para obtenção dos resultados do programa ASP subjacente. +- Cálculos de probabilidades com base nos modelos estáveis obtidos no passo anterior, nas anotações extraídas no passo 1, e nos resultados teóricos deste projeto. + +
+(Francisco Coelho) +
diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.pdf new file mode 100644 index 0000000..d5f9f31 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.tex b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.tex new file mode 100644 index 0000000..894fd92 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/plano-trab/plano-trabalhos.tex @@ -0,0 +1,38 @@ +% !TeX program = xelatex +\documentclass{oficio} + +\usepackage{polyglossia} +\setmainlanguage{portuges} + +\def\ASSINATURA{\includegraphics{fcsig.pdf}} + +\begin{document} +\unidade{\textsc{\DI}} +\documento{% +NL/ZZ/BII/1/AM/4 +}{% +Renovação de BII --- Plano de Trabalhos}{% +31 de outubro de 2023} +%\EU{} + +\qualidade{(Professor Auxiliar)} + +Considerando que foram já implementadas biblioteca \texttt{Python} que proporcionam as seguintes funcionalidades: +% +\begin{itemize} + \item Ler a descrição de uma rede Bayesiana num formato comum (\texttt{BIF}) para uma representação intermédia. + \item Escrever uma especificação \texttt{ASP} anotada com probabilidades a partir da representação intermédia indicada no ponto anterior. +\end{itemize} +% +e que, com esta biblioteca é possível aplicar métodos e ferramentas desenvolvidos no âmbito do projeto ``\emph{Zugzwang | Lógica e Inteligência Artificial}'' a um conjunto alargado de problemas, \textbf{pretende-se continuar,} com a implementação duma biblioteca \texttt{Python} para processar ficheiros de código ASP anotados com probabilidades, incluindo as seguintes funcionalidades: + +\begin{itemize} + + \item Extração das anotações e associação aos factos relevantes. + \item Comunicação com o sistema \texttt{Potassco} para obtenção dos resultados do programa \texttt{ASP} subjacente. + \item Cálculos de probabilidades com base nos modelos estáveis obtidos no passo anterior, nas anotações extraídas no passo 1, e nos resultados teóricos deste projeto. +\end{itemize} + +\CHAU{Com os melhores cumprimentos,} + +\end{document} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf new file mode 100644 index 0000000..b6c4e5d Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp new file mode 100644 index 0000000..1ec164a Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros.xopp differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf new file mode 100644 index 0000000..14cf9af Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 Relatorio Atividades Bolseiros_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink new file mode 100644 index 0000000..3b073e2 --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-09-01 | Relatorio Atividades Bolseiros.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/1XGRVkcw8nfIOdzlbOFHKXwB987NZ4aOv/view?usp=drivesdk", "file_id": "1XGRVkcw8nfIOdzlbOFHKXwB987NZ4aOv", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros - signed_am_fc.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros - signed_am_fc.pdf new file mode 100644 index 0000000..485503b Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros - signed_am_fc.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros.gddoc b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros.gddoc new file mode 100644 index 0000000..ba6dccb --- /dev/null +++ b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1kHLIawg9_qcolQxqCuYepsvFTS1crej8g-DD8B0cYdQ/edit?usp=drivesdk", "file_id": "1kHLIawg9_qcolQxqCuYepsvFTS1crej8g-DD8B0cYdQ", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros_231120_170319.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros_231120_170319.pdf new file mode 100644 index 0000000..cd0e895 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/relatório/2023-10-31 - Relatorio Atividades Bolseiros_231120_170319.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/renovacao-amartins.zip b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/renovacao-amartins.zip new file mode 100644 index 0000000..a22e786 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/renovacao-amartins.zip differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/15-renovacao-bolsa-alice_signed.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/15-renovacao-bolsa-alice_signed.pdf new file mode 100644 index 0000000..26e9781 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/15-renovacao-bolsa-alice_signed.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/Declaração_Generali_ausência de acidentes.docx b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/Declaração_Generali_ausência de acidentes.docx new file mode 100644 index 0000000..fe52c04 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/Declaração_Generali_ausência de acidentes.docx differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/comprovativo_matricula-inscricao-2023.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/comprovativo_matricula-inscricao-2023.pdf new file mode 100644 index 0000000..35cee79 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/comprovativo_matricula-inscricao-2023.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/parecer_renovação.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/parecer_renovação.pdf new file mode 100644 index 0000000..c53fa62 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/parecer_renovação.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/plano-trabalhos.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/plano-trabalhos.pdf new file mode 100644 index 0000000..fafa033 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/plano-trabalhos.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/relatorio_atividades-signed_am_fc.pdf b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/relatorio_atividades-signed_am_fc.pdf new file mode 100644 index 0000000..485503b Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/relatorio_atividades-signed_am_fc.pdf differ diff --git a/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/renovacao_BII_Alice_Martins-documentos.zip b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/renovacao_BII_Alice_Martins-documentos.zip new file mode 100644 index 0000000..ae6b6a8 Binary files /dev/null and b/NOVALINCS/bolsas/BII/AliceMartins-l52768/04-renovação (jan)/zz-send/renovacao_BII_Alice_Martins-documentos.zip differ diff --git a/NOVALINCS/bolsas/BII/Ata 02.pdf b/NOVALINCS/bolsas/BII/Ata 02.pdf new file mode 100644 index 0000000..d36233e Binary files /dev/null and b/NOVALINCS/bolsas/BII/Ata 02.pdf differ diff --git a/NOVALINCS/bolsas/BII/Ata 04.pdf b/NOVALINCS/bolsas/BII/Ata 04.pdf new file mode 100644 index 0000000..2e2fef1 Binary files /dev/null and b/NOVALINCS/bolsas/BII/Ata 04.pdf differ diff --git a/NOVALINCS/bolsas/BII/Ata 04.pdf.jpg b/NOVALINCS/bolsas/BII/Ata 04.pdf.jpg new file mode 100644 index 0000000..9ca5541 Binary files /dev/null and b/NOVALINCS/bolsas/BII/Ata 04.pdf.jpg differ diff --git a/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/BII | Candidatura para Projeto | João Branquinho.pdf b/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/BII | Candidatura para Projeto | João Branquinho.pdf new file mode 100644 index 0000000..6bc4a9f Binary files /dev/null and b/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/BII | Candidatura para Projeto | João Branquinho.pdf differ diff --git a/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/Joao Branquinho.pdf b/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/Joao Branquinho.pdf new file mode 100644 index 0000000..106413d Binary files /dev/null and b/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/Joao Branquinho.pdf differ diff --git a/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/comprovativo_matricula_inscricao-1.pdf b/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/comprovativo_matricula_inscricao-1.pdf new file mode 100644 index 0000000..a59ba15 Binary files /dev/null and b/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/comprovativo_matricula_inscricao-1.pdf differ diff --git a/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/disc + notas.jpg b/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/disc + notas.jpg new file mode 100644 index 0000000..0d0198b Binary files /dev/null and b/NOVALINCS/bolsas/BII/JoãoBranquinho-l42713/disc + notas.jpg differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-01-19 | BII | Oficio Homologação Juri.pdf b/NOVALINCS/bolsas/BII/remeter/2023-01-19 | BII | Oficio Homologação Juri.pdf new file mode 100644 index 0000000..2b85a53 Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-01-19 | BII | Oficio Homologação Juri.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-02-01 | BII | Ata 01.pdf b/NOVALINCS/bolsas/BII/remeter/2023-02-01 | BII | Ata 01.pdf new file mode 100644 index 0000000..a6cd054 Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-02-01 | BII | Ata 01.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-02-15 | BII | JBranquinho | Comprovativo Matricula Inscrição.pdf b/NOVALINCS/bolsas/BII/remeter/2023-02-15 | BII | JBranquinho | Comprovativo Matricula Inscrição.pdf new file mode 100644 index 0000000..a59ba15 Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-02-15 | BII | JBranquinho | Comprovativo Matricula Inscrição.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-02-27 | BII | AMartins | Comprovativo Aproveitamento Escolar.pdf b/NOVALINCS/bolsas/BII/remeter/2023-02-27 | BII | AMartins | Comprovativo Aproveitamento Escolar.pdf new file mode 100644 index 0000000..d0b1656 Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-02-27 | BII | AMartins | Comprovativo Aproveitamento Escolar.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-02-27 | BII | AMartins | Comprovativo Matricula Inscricao.pdf b/NOVALINCS/bolsas/BII/remeter/2023-02-27 | BII | AMartins | Comprovativo Matricula Inscricao.pdf new file mode 100644 index 0000000..35cee79 Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-02-27 | BII | AMartins | Comprovativo Matricula Inscricao.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-03-01 | BII | Ata 02.pdf b/NOVALINCS/bolsas/BII/remeter/2023-03-01 | BII | Ata 02.pdf new file mode 100644 index 0000000..35c7b43 Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-03-01 | BII | Ata 02.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Ata 03.pdf b/NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Ata 03.pdf new file mode 100644 index 0000000..c7db74f Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Ata 03.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Entrevista | Email Convocatória | src.pdf b/NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Entrevista | Email Convocatória | src.pdf new file mode 100644 index 0000000..f13ddda Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Entrevista | Email Convocatória | src.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Entrevista | Email Convocatória.pdf b/NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Entrevista | Email Convocatória.pdf new file mode 100644 index 0000000..a94e0a7 Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-03-02 | BII | Entrevista | Email Convocatória.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-03-03 | BII | AMartins | Email Aceitação.pdf b/NOVALINCS/bolsas/BII/remeter/2023-03-03 | BII | AMartins | Email Aceitação.pdf new file mode 100644 index 0000000..ce3f17e Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-03-03 | BII | AMartins | Email Aceitação.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-03-03 | BII | Notificação Candidatos.pdf b/NOVALINCS/bolsas/BII/remeter/2023-03-03 | BII | Notificação Candidatos.pdf new file mode 100644 index 0000000..7a69937 Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-03-03 | BII | Notificação Candidatos.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-03-06 | BII | JBranquinho | Email Aceitação.pdf b/NOVALINCS/bolsas/BII/remeter/2023-03-06 | BII | JBranquinho | Email Aceitação.pdf new file mode 100644 index 0000000..0de2882 Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-03-06 | BII | JBranquinho | Email Aceitação.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Declaração Conflito de Interesses | Bruno.pdf b/NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Declaração Conflito de Interesses | Bruno.pdf new file mode 100644 index 0000000..755a6d8 Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Declaração Conflito de Interesses | Bruno.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Declaração Conflito de Interesses | fc.pdf b/NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Declaração Conflito de Interesses | fc.pdf new file mode 100644 index 0000000..b56a646 Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Declaração Conflito de Interesses | fc.pdf differ diff --git a/NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Oficio Inicio de Bolsa.pdf b/NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Oficio Inicio de Bolsa.pdf new file mode 100644 index 0000000..3b1bfbc Binary files /dev/null and b/NOVALINCS/bolsas/BII/remeter/2023-03-07 | BII | Oficio Inicio de Bolsa.pdf differ diff --git a/NOVALINCS/bolsas/BII/zz-lostNfound/Edital EN.docx b/NOVALINCS/bolsas/BII/zz-lostNfound/Edital EN.docx new file mode 100644 index 0000000..60e9539 Binary files /dev/null and b/NOVALINCS/bolsas/BII/zz-lostNfound/Edital EN.docx differ diff --git a/NOVALINCS/bolsas/BII/zz-lostNfound/Edital PT.docx b/NOVALINCS/bolsas/BII/zz-lostNfound/Edital PT.docx new file mode 100644 index 0000000..1661df8 Binary files /dev/null and b/NOVALINCS/bolsas/BII/zz-lostNfound/Edital PT.docx differ diff --git a/NOVALINCS/bolsas/BII2/2023-03-03 Oficio Juri BII.pdf b/NOVALINCS/bolsas/BII2/2023-03-03 Oficio Juri BII.pdf new file mode 100644 index 0000000..7230a74 Binary files /dev/null and b/NOVALINCS/bolsas/BII2/2023-03-03 Oficio Juri BII.pdf differ diff --git a/NOVALINCS/bolsas/BII2/2023-03-07 | BII2 | Oficio Juri.gddoc b/NOVALINCS/bolsas/BII2/2023-03-07 | BII2 | Oficio Juri.gddoc new file mode 100644 index 0000000..51743b1 --- /dev/null +++ b/NOVALINCS/bolsas/BII2/2023-03-07 | BII2 | Oficio Juri.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1fwocnP_NC71_69Z9SROegvKEjmubqdSxc_ixbxG0l04/edit?usp=drivesdk", "file_id": "1fwocnP_NC71_69Z9SROegvKEjmubqdSxc_ixbxG0l04", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII2/2023-B | Ata 1.gddoc b/NOVALINCS/bolsas/BII2/2023-B | Ata 1.gddoc new file mode 100644 index 0000000..61b66ad --- /dev/null +++ b/NOVALINCS/bolsas/BII2/2023-B | Ata 1.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1OUZNpS5fXyxIh-TplozkhFliYJ-buVV3iojUjMJgrzI/edit?usp=drivesdk", "file_id": "1OUZNpS5fXyxIh-TplozkhFliYJ-buVV3iojUjMJgrzI", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII2/2023-C | Edital | EN.gddoc b/NOVALINCS/bolsas/BII2/2023-C | Edital | EN.gddoc new file mode 100644 index 0000000..40f8ed9 --- /dev/null +++ b/NOVALINCS/bolsas/BII2/2023-C | Edital | EN.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1ChH7dfzZzY7fomUjMrgcCScw5a_OGIgOTJYDjw1lLgU/edit?usp=drivesdk", "file_id": "1ChH7dfzZzY7fomUjMrgcCScw5a_OGIgOTJYDjw1lLgU", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII2/2023-C | Edital | PT.gddoc b/NOVALINCS/bolsas/BII2/2023-C | Edital | PT.gddoc new file mode 100644 index 0000000..896ec9c --- /dev/null +++ b/NOVALINCS/bolsas/BII2/2023-C | Edital | PT.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1q04X9sIf7DJe1XxVC2cX7T50QkookZM1RcZT0eh3KMQ/edit?usp=drivesdk", "file_id": "1q04X9sIf7DJe1XxVC2cX7T50QkookZM1RcZT0eh3KMQ", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII2/2023-C | Edital | PT.pdf b/NOVALINCS/bolsas/BII2/2023-C | Edital | PT.pdf new file mode 100644 index 0000000..ca5b1fd Binary files /dev/null and b/NOVALINCS/bolsas/BII2/2023-C | Edital | PT.pdf differ diff --git a/NOVALINCS/bolsas/BII2/2023-D | Ata 2.gddoc b/NOVALINCS/bolsas/BII2/2023-D | Ata 2.gddoc new file mode 100644 index 0000000..f565328 --- /dev/null +++ b/NOVALINCS/bolsas/BII2/2023-D | Ata 2.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/11zQzLN1tbx8Xu62YmbVsQU6Q-kCTG_N7xaT9wd7eez4/edit?usp=drivesdk", "file_id": "11zQzLN1tbx8Xu62YmbVsQU6Q-kCTG_N7xaT9wd7eez4", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII2/2023-E | Notificação para Entrevista.gddoc b/NOVALINCS/bolsas/BII2/2023-E | Notificação para Entrevista.gddoc new file mode 100644 index 0000000..d151b1a --- /dev/null +++ b/NOVALINCS/bolsas/BII2/2023-E | Notificação para Entrevista.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1qvbTUCmdaHq4JsGHpgolmTVzRynxedy9YSq19GymJp8/edit?usp=drivesdk", "file_id": "1qvbTUCmdaHq4JsGHpgolmTVzRynxedy9YSq19GymJp8", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII2/2023-F | Entrevista | Formulário.gdform b/NOVALINCS/bolsas/BII2/2023-F | Entrevista | Formulário.gdform new file mode 100644 index 0000000..66de228 --- /dev/null +++ b/NOVALINCS/bolsas/BII2/2023-F | Entrevista | Formulário.gdform @@ -0,0 +1 @@ +{"url": "https://docs.google.com/forms/d/13V9H_revMLCmeM_IlhGkg0bOLUNZrP4PgMmeHYhgrAI/edit?usp=drivesdk", "file_id": "13V9H_revMLCmeM_IlhGkg0bOLUNZrP4PgMmeHYhgrAI", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII2/2023-G | Ata 3.gddoc b/NOVALINCS/bolsas/BII2/2023-G | Ata 3.gddoc new file mode 100644 index 0000000..81476e2 --- /dev/null +++ b/NOVALINCS/bolsas/BII2/2023-G | Ata 3.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1HQmwrMoSylbcI9dZmCwGaZSp3BogumGh6KCEu6L-vUE/edit?usp=drivesdk", "file_id": "1HQmwrMoSylbcI9dZmCwGaZSp3BogumGh6KCEu6L-vUE", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII2/2023-H | Notificação Candidatos.gddoc b/NOVALINCS/bolsas/BII2/2023-H | Notificação Candidatos.gddoc new file mode 100644 index 0000000..3e28b20 --- /dev/null +++ b/NOVALINCS/bolsas/BII2/2023-H | Notificação Candidatos.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1GLc9jY3tkgPYU9EAgKY-Y-EpSeq3i_p855tA3nLFVVc/edit?usp=drivesdk", "file_id": "1GLc9jY3tkgPYU9EAgKY-Y-EpSeq3i_p855tA3nLFVVc", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/BII2/2023-I | Ata 4.gddoc b/NOVALINCS/bolsas/BII2/2023-I | Ata 4.gddoc new file mode 100644 index 0000000..7dce9fb --- /dev/null +++ b/NOVALINCS/bolsas/BII2/2023-I | Ata 4.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1pw5brFuL9MVSUEQ8cPEwyf4qq2luAvgzhDjJWqpB_Ko/edit?usp=drivesdk", "file_id": "1pw5brFuL9MVSUEQ8cPEwyf4qq2luAvgzhDjJWqpB_Ko", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/Estatuto Bolseiro de Investigação | Consolidação.pdf b/NOVALINCS/bolsas/Estatuto Bolseiro de Investigação | Consolidação.pdf new file mode 100644 index 0000000..fec1e7b Binary files /dev/null and b/NOVALINCS/bolsas/Estatuto Bolseiro de Investigação | Consolidação.pdf differ diff --git a/NOVALINCS/bolsas/RegulamentoBolsasFCT2019.pdf b/NOVALINCS/bolsas/RegulamentoBolsasFCT2019.pdf new file mode 100644 index 0000000..2ccde09 Binary files /dev/null and b/NOVALINCS/bolsas/RegulamentoBolsasFCT2019.pdf differ diff --git a/NOVALINCS/bolsas/Tabela_de_Valores_SMM_2022.pdf b/NOVALINCS/bolsas/Tabela_de_Valores_SMM_2022.pdf new file mode 100644 index 0000000..53936f5 Binary files /dev/null and b/NOVALINCS/bolsas/Tabela_de_Valores_SMM_2022.pdf differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/1_minuta de oficio juri bolsa_2023.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/1_minuta de oficio juri bolsa_2023.gddoc new file mode 100644 index 0000000..85af252 --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/1_minuta de oficio juri bolsa_2023.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1AF0m9JRcVEhnkB8nYLrhpQ8ARXtOCtSY31Bq8q1vQDU/edit?usp=drivesdk", "file_id": "1AF0m9JRcVEhnkB8nYLrhpQ8ARXtOCtSY31Bq8q1vQDU", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/2_minuta de Ata1_2023.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/2_minuta de Ata1_2023.gddoc new file mode 100644 index 0000000..d0eb917 --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/2_minuta de Ata1_2023.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1f7O-hvU6BCYvkKuX3D8x9bvoABZvlmQ39GXWw2Ex49I/edit?usp=drivesdk", "file_id": "1f7O-hvU6BCYvkKuX3D8x9bvoABZvlmQ39GXWw2Ex49I", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/3_minuta_edital_bolsa_2023_EN.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/3_minuta_edital_bolsa_2023_EN.gddoc new file mode 100644 index 0000000..80e9e99 --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/3_minuta_edital_bolsa_2023_EN.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1rQahv7xXSZnI1KQu04zAXgTAeVLwg8QGzjeJt_9a6EY/edit?usp=drivesdk", "file_id": "1rQahv7xXSZnI1KQu04zAXgTAeVLwg8QGzjeJt_9a6EY", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/3_minuta_edital_bolsa_2023_PT.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/3_minuta_edital_bolsa_2023_PT.gddoc new file mode 100644 index 0000000..ace13ec --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/3_minuta_edital_bolsa_2023_PT.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1aO0p81Ho1dfA3yYN1AFr3h3QRf9eEYgL9IApxPhvBKE/edit?usp=drivesdk", "file_id": "1aO0p81Ho1dfA3yYN1AFr3h3QRf9eEYgL9IApxPhvBKE", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/4_minuta de Ata2_2023.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/4_minuta de Ata2_2023.gddoc new file mode 100644 index 0000000..fd9da37 --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/4_minuta de Ata2_2023.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1M8Sp3j4masU-DghBDefDxK5cyIvP4driSyCLfmcjsXk/edit?usp=drivesdk", "file_id": "1M8Sp3j4masU-DghBDefDxK5cyIvP4driSyCLfmcjsXk", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/5_Notificaçõesparaentrevista.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/5_Notificaçõesparaentrevista.gddoc new file mode 100644 index 0000000..adbd830 --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/5_Notificaçõesparaentrevista.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1fZCpLL_9HKNurn2nZUwK7w-Zsaf5LREvPURIS-ROwvQ/edit?usp=drivesdk", "file_id": "1fZCpLL_9HKNurn2nZUwK7w-Zsaf5LREvPURIS-ROwvQ", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/6_minuta de Ata3_2023.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/6_minuta de Ata3_2023.gddoc new file mode 100644 index 0000000..fcde673 --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/6_minuta de Ata3_2023.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1wblMOejvScyDnOsibhdfuSMyPlosjKns7oVHMlPeNeI/edit?usp=drivesdk", "file_id": "1wblMOejvScyDnOsibhdfuSMyPlosjKns7oVHMlPeNeI", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/7_Notificacao_candidatos.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/7_Notificacao_candidatos.gddoc new file mode 100644 index 0000000..23cfc9b --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/7_Notificacao_candidatos.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1qpxnG3LfekInEnGvKGrF9hUDVwSxIQyxeBQR2r_JgcU/edit?usp=drivesdk", "file_id": "1qpxnG3LfekInEnGvKGrF9hUDVwSxIQyxeBQR2r_JgcU", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/8_minuta de Ata4_2023.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/8_minuta de Ata4_2023.gddoc new file mode 100644 index 0000000..60a623f --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/8_minuta de Ata4_2023.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1llF0b9W0SYnOrYZIUvy3hC1zYZr-YHBxushKQDFqnWs/edit?usp=drivesdk", "file_id": "1llF0b9W0SYnOrYZIUvy3hC1zYZr-YHBxushKQDFqnWs", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/9_Minuta oficio Inicio de Bolsa.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/9_Minuta oficio Inicio de Bolsa.gddoc new file mode 100644 index 0000000..78c2b31 --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/9_Minuta oficio Inicio de Bolsa.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1V-ArQu0G_cKT3HtmYa5rsq3ESzCl6jwCSVCjkkq0rGQ/edit?usp=drivesdk", "file_id": "1V-ArQu0G_cKT3HtmYa5rsq3ESzCl6jwCSVCjkkq0rGQ", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/A_Regulamentobolsas_FCT.pdf b/NOVALINCS/bolsas/kit bolsas_2023/A_Regulamentobolsas_FCT.pdf new file mode 100644 index 0000000..e636281 Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/A_Regulamentobolsas_FCT.pdf differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/B_Estatuto bolseiro_Consolidação.pdf b/NOVALINCS/bolsas/kit bolsas_2023/B_Estatuto bolseiro_Consolidação.pdf new file mode 100644 index 0000000..477b65a Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/B_Estatuto bolseiro_Consolidação.pdf differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/C_Tabela_de_Valores_SMM_atualizadoJan2022.pdf b/NOVALINCS/bolsas/kit bolsas_2023/C_Tabela_de_Valores_SMM_atualizadoJan2022.pdf new file mode 100644 index 0000000..53936f5 Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/C_Tabela_de_Valores_SMM_atualizadoJan2022.pdf differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/Minuta_Contrato_Bolsa 2023.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/Minuta_Contrato_Bolsa 2023.gddoc new file mode 100644 index 0000000..fe9519c --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/Minuta_Contrato_Bolsa 2023.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1H-WephUfnAzYRSz7Iy5MpGKq3DGJfJLh2NKuDjh7VjY/edit?usp=drivesdk", "file_id": "1H-WephUfnAzYRSz7Iy5MpGKq3DGJfJLh2NKuDjh7VjY", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/dec conflito de interesses 2023.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/dec conflito de interesses 2023.gddoc new file mode 100644 index 0000000..cf2a520 --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/dec conflito de interesses 2023.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1zuzCQybKxQfaEErf4xDKHeTALXV4rh841sJ94h9BfAI/edit?usp=drivesdk", "file_id": "1zuzCQybKxQfaEErf4xDKHeTALXV4rh841sJ94h9BfAI", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/1_minuta de oficio juri bolsa_2023.doc b/NOVALINCS/bolsas/kit bolsas_2023/docx/1_minuta de oficio juri bolsa_2023.doc new file mode 100644 index 0000000..eaf7b03 Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/1_minuta de oficio juri bolsa_2023.doc differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/2_minuta de Ata1_2023.doc b/NOVALINCS/bolsas/kit bolsas_2023/docx/2_minuta de Ata1_2023.doc new file mode 100644 index 0000000..901445e Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/2_minuta de Ata1_2023.doc differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/3_minuta_edital_bolsa_2023_EN.docx b/NOVALINCS/bolsas/kit bolsas_2023/docx/3_minuta_edital_bolsa_2023_EN.docx new file mode 100644 index 0000000..82ee427 Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/3_minuta_edital_bolsa_2023_EN.docx differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/3_minuta_edital_bolsa_2023_PT.docx b/NOVALINCS/bolsas/kit bolsas_2023/docx/3_minuta_edital_bolsa_2023_PT.docx new file mode 100644 index 0000000..768309b Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/3_minuta_edital_bolsa_2023_PT.docx differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/4_minuta de Ata2_2023.docx b/NOVALINCS/bolsas/kit bolsas_2023/docx/4_minuta de Ata2_2023.docx new file mode 100644 index 0000000..80a0434 Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/4_minuta de Ata2_2023.docx differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/5_Notificaçõesparaentrevista.docx b/NOVALINCS/bolsas/kit bolsas_2023/docx/5_Notificaçõesparaentrevista.docx new file mode 100644 index 0000000..53a2cbe Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/5_Notificaçõesparaentrevista.docx differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/6_minuta de Ata3_2023.docx b/NOVALINCS/bolsas/kit bolsas_2023/docx/6_minuta de Ata3_2023.docx new file mode 100644 index 0000000..4d03bd8 Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/6_minuta de Ata3_2023.docx differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/7_Notificacao_candidatos.docx b/NOVALINCS/bolsas/kit bolsas_2023/docx/7_Notificacao_candidatos.docx new file mode 100644 index 0000000..9c7454e Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/7_Notificacao_candidatos.docx differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/8_minuta de Ata4_2023.docx b/NOVALINCS/bolsas/kit bolsas_2023/docx/8_minuta de Ata4_2023.docx new file mode 100644 index 0000000..31f20f7 Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/8_minuta de Ata4_2023.docx differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/9_Minuta oficio Inicio de Bolsa.docx b/NOVALINCS/bolsas/kit bolsas_2023/docx/9_Minuta oficio Inicio de Bolsa.docx new file mode 100644 index 0000000..86c3784 Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/9_Minuta oficio Inicio de Bolsa.docx differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/Minuta_Contrato_Bolsa 2023.docx b/NOVALINCS/bolsas/kit bolsas_2023/docx/Minuta_Contrato_Bolsa 2023.docx new file mode 100644 index 0000000..43bdac4 Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/Minuta_Contrato_Bolsa 2023.docx differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/dec conflito de interesses 2023.docx b/NOVALINCS/bolsas/kit bolsas_2023/docx/dec conflito de interesses 2023.docx new file mode 100644 index 0000000..a61d7d0 Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/dec conflito de interesses 2023.docx differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/docx/modelo_relatorio_atividades_bolseiros_2023.docx b/NOVALINCS/bolsas/kit bolsas_2023/docx/modelo_relatorio_atividades_bolseiros_2023.docx new file mode 100644 index 0000000..eab67f6 Binary files /dev/null and b/NOVALINCS/bolsas/kit bolsas_2023/docx/modelo_relatorio_atividades_bolseiros_2023.docx differ diff --git a/NOVALINCS/bolsas/kit bolsas_2023/modelo_relatorio_atividades_bolseiros_2023.gddoc b/NOVALINCS/bolsas/kit bolsas_2023/modelo_relatorio_atividades_bolseiros_2023.gddoc new file mode 100644 index 0000000..e3d4118 --- /dev/null +++ b/NOVALINCS/bolsas/kit bolsas_2023/modelo_relatorio_atividades_bolseiros_2023.gddoc @@ -0,0 +1 @@ +{"url": "https://docs.google.com/document/d/1E9YwFN9lJy9zjFpyzguEuIGQfEPYYegbf1OI7jxUGKI/edit?usp=drivesdk", "file_id": "1E9YwFN9lJy9zjFpyzguEuIGQfEPYYegbf1OI7jxUGKI", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/NOVALINCS/demo-markdown.md b/NOVALINCS/demo-markdown.md new file mode 100644 index 0000000..7f75c7d --- /dev/null +++ b/NOVALINCS/demo-markdown.md @@ -0,0 +1,32 @@ +# Título + +> O `markdown` permite formatar um documento seguindo algumas convenções facilmente legíveis, ao contrário, por exemplo, do `LaTeX`. +> +> Este fragmento de texto é uma "citação" e pode ter vários parágrafos. +> Como no `LaTeX`, é precisa uma linha de intervalo entre parágrafos. + +A formatação de `markdown` é muito simples: usam-se dois `**` para **negrito** e um `_` para _itálico_. Para `fonte fixa` usa-se o acento agudo, "\`". + +Não há muito mais formatação: +- As listas consistem em linhas que começam por `-` e podem ter sub-listas: + - Como esta. +- É possível, em certos casos, usar os comandos `LaTeX` para fórmulas, que podem ser _inline_ $e^{i\pi} = -1$ ou _display_: +$$\alpha = \sum_{i=1}^{\infty} a_i.$$ + +As listas _numeradas_ também são visualmente definidas: +1. Mexer os ovos. +2. Derreter a manteiga na frigideira. +3. Quando a manteiga estiver a ferver, deitar os ovos na frigideira. + 1. Cuidado! Não deixe a manteiga queimar! +4. Deixar cozinhar a gosto. + +## Organização de Documentos + +Usam-se os `#` no início das linhas para indicar o nível da divisão: +- Um `#` é o _título_ do documento. +- Dois `##` é um "_capítulo_", três uma "_secção_", _etc._ + +--- + +Ah! Podem-se incluir _links_ para a [_web_](https://en.wikipedia.org/wiki/Markdown) e também imagens: ![ +Théâtre d’Opéra Spatial](TdOS-JasonMAllen.jpg) diff --git a/NOVALINCS/demo-markdown.pdf b/NOVALINCS/demo-markdown.pdf new file mode 100644 index 0000000..3cc6250 Binary files /dev/null and b/NOVALINCS/demo-markdown.pdf differ diff --git a/biblio.gdlink b/biblio.gdlink new file mode 100644 index 0000000..8d01dea --- /dev/null +++ b/biblio.gdlink @@ -0,0 +1 @@ +{"url": "https://drive.google.com/file/d/19ZBN9zT4YyLOEeMNvpA9Baqw9KKWd-dx/view?usp=drivesdk", "file_id": "19ZBN9zT4YyLOEeMNvpA9Baqw9KKWd-dx", "account_email": "mangon@gmail.com"} \ No newline at end of file diff --git a/biblio/2002 - Answer set programming and plan generation.pdf b/biblio/2002 - Answer set programming and plan generation.pdf new file mode 100644 index 0000000..91a3f2b Binary files /dev/null and b/biblio/2002 - Answer set programming and plan generation.pdf differ diff --git a/biblio/2013 - Answer Set Solving in Practice - Martin Gebser, Roland Kaminski, Benjamin Kaufmann, Torsten Schaub.pdf b/biblio/2013 - Answer Set Solving in Practice - Martin Gebser, Roland Kaminski, Benjamin Kaufmann, Torsten Schaub.pdf new file mode 100644 index 0000000..11d340f Binary files /dev/null and b/biblio/2013 - Answer Set Solving in Practice - Martin Gebser, Roland Kaminski, Benjamin Kaufmann, Torsten Schaub.pdf differ diff --git a/biblio/2014 - A new method of proving the existence of answer sets for disjunctive logic programs.pdf b/biblio/2014 - A new method of proving the existence of answer sets for disjunctive logic programs.pdf new file mode 100644 index 0000000..6fe313d Binary files /dev/null and b/biblio/2014 - A new method of proving the existence of answer sets for disjunctive logic programs.pdf differ diff --git a/biblio/2018 - Deep Learning, A critical appraisal - Gary Marcus.pdf b/biblio/2018 - Deep Learning, A critical appraisal - Gary Marcus.pdf new file mode 100644 index 0000000..f4cce60 Binary files /dev/null and b/biblio/2018 - Deep Learning, A critical appraisal - Gary Marcus.pdf differ diff --git a/biblio/2018 - Foundations of Probabilistic Logic Programming. Languages, Semantics, Inference and Learning - Fabrizio Riguzzi.pdf b/biblio/2018 - Foundations of Probabilistic Logic Programming. Languages, Semantics, Inference and Learning - Fabrizio Riguzzi.pdf new file mode 100644 index 0000000..7d52d6b Binary files /dev/null and b/biblio/2018 - Foundations of Probabilistic Logic Programming. Languages, Semantics, Inference and Learning - Fabrizio Riguzzi.pdf differ diff --git a/biblio/2019 - A Meta-Transfer Objective for Learning to Disentangle Causal Mechanisms - Bengio et al.pdf b/biblio/2019 - A Meta-Transfer Objective for Learning to Disentangle Causal Mechanisms - Bengio et al.pdf new file mode 100644 index 0000000..0d5fe02 Binary files /dev/null and b/biblio/2019 - A Meta-Transfer Objective for Learning to Disentangle Causal Mechanisms - Bengio et al.pdf differ diff --git a/biblio/2019 - On the Measure of Intelligence - Francois Chollet.pdf b/biblio/2019 - On the Measure of Intelligence - Francois Chollet.pdf new file mode 100644 index 0000000..3bd1857 Binary files /dev/null and b/biblio/2019 - On the Measure of Intelligence - Francois Chollet.pdf differ diff --git a/biblio/2019 - Potassco User Guide.pdf b/biblio/2019 - Potassco User Guide.pdf new file mode 100644 index 0000000..f3c3f95 Binary files /dev/null and b/biblio/2019 - Potassco User Guide.pdf differ diff --git a/biblio/2020 - ASP-Core-2 Input Language Format - Calimeri et al..pdf b/biblio/2020 - ASP-Core-2 Input Language Format - Calimeri et al..pdf new file mode 100644 index 0000000..84c91a3 Binary files /dev/null and b/biblio/2020 - ASP-Core-2 Input Language Format - Calimeri et al..pdf differ diff --git a/biblio/2020 - Prolog and Answer Set Programming - Languages in Logic Programming.pdf b/biblio/2020 - Prolog and Answer Set Programming - Languages in Logic Programming.pdf new file mode 100644 index 0000000..e99d73f Binary files /dev/null and b/biblio/2020 - Prolog and Answer Set Programming - Languages in Logic Programming.pdf differ diff --git a/biblio/2020 - The joy of Probabilistic Answer Set Programming: Semantics - complexity, expressivity, inference - Fabio Gagliardi Cozman, Denis Deratani Mauá.pdf b/biblio/2020 - The joy of Probabilistic Answer Set Programming: Semantics - complexity, expressivity, inference - Fabio Gagliardi Cozman, Denis Deratani Mauá.pdf new file mode 100644 index 0000000..5fec7bc Binary files /dev/null and b/biblio/2020 - The joy of Probabilistic Answer Set Programming: Semantics - complexity, expressivity, inference - Fabio Gagliardi Cozman, Denis Deratani Mauá.pdf differ diff --git a/biblio/2021 - CASP and SCASP best practices.pdf b/biblio/2021 - CASP and SCASP best practices.pdf new file mode 100644 index 0000000..ea0feef Binary files /dev/null and b/biblio/2021 - CASP and SCASP best practices.pdf differ diff --git a/biblio/ASP-DLV_tutorial.html b/biblio/ASP-DLV_tutorial.html new file mode 100644 index 0000000..c3fbbcf --- /dev/null +++ b/biblio/ASP-DLV_tutorial.html @@ -0,0 +1,1308 @@ + + + + +The DLV Tutorial + + + + + +

+The DLV Tutorial +

+ +In this tutorial, we give an introduction to Disjunctive Datalog +(using some of the extensions of DLV). +The tutorial does not give a full description of the usage and capabilities of +DLV. +For a more complete account of these, see the +DLV +homepage and the + +DLV online user manual. + +The examples shown in this tutorial work with every recent +DLV release. +Executables of the DLV system for various platforms +can be downloaded from the + +DLV homepage. +

+ +The tutorial consists of the following sections, each of them being built +around a guiding example: + +

    +
  • The First Example : Rules and Facts
  • +
  • The Second Example : Negation and the Complete World Assumption
  • +
  • The Family Tree Example : Predicates, Variables, and Recursion
  • +
  • DLV as a Deductive Database System; Comparison Operators
  • +
  • +The Railway Crossing Example : True Negation and Negation as Finite Failure +
  • +
  • +The Broken Arm Example : Disjunctive Datalog and the Stable Model Semantics +
  • +
  • Strong Constraints
  • +
  • Graph Coloring: Guess&Check Programming
  • +
  • The Fibonacci Example: Built-in Predicates and Integer Arithmetics
  • +
  • The 8-Queens Example: Guess&Check Programming with Integers
  • +
  • A simple Physics Diagnosis example
  • +
  • A different way to implement the Physics Diagnosis example
  • +
  • The Monkey&Banana Example: Planning
  • +
+ +This page is quite long. People who are in a hurry might appreciate the +information that the tutorial is fully on this page, there will be no branches +and no links to further pages. +

+ +This tutorial is written for computer-literate people with a background +different from computer science, or students new to this area. +It was originally written for physicists at CERN, and some examples are +tailored towards this community. +

+ + +


+

+Introduction +

+ +

+Datalog is a declarative (programming) language. +This means that the programmer does not write a program that solves some +problem but instead specifies what the solution should look like, and a +Datalog inference engine (or Deductive Database System) tries +to find the the way to solve the problem and the solution itself. +This is done with rules and facts. +Facts are the input data, and rules can be used to derive more facts, and +hopefully, the solution of the given problem. +

+ +

+Disjunctive datalog is an extension of datalog in which the logical OR +expression (the disjunction) +is allowed to appear in the rules - this is not allowed in basic datalog. +

+ +

+DLV (= datalog with disjunction) is a powerful though +freely available deductive database system. +It is based on the declarative programming language datalog, +which is known for being a convenient tool for knowledge representation. +With its disjunctive extensions, it is well suited for all kinds of +nonmonotonic reasoning, including diagnosis and planning. +

+ +

+Finally, we have to mention to the more advanced reader that +DLV is relevant to two communities. Firstly, as mentioned, +it is a deductive database engine and can therefore be seen as a way to query +data from databases which is strictly more powerful than for example SQL +(everything that can be done with the core SQL language can also be done with +DLV, and more), but it is also often described as a +system for answer set programming (ASP). This is a powerful new paradigm +from the area of "Nonmonotonic Reasoning" which allows to formulate even very +complicated problems in a straightforward and highly declarative way. +One may call this paradigm even more declarative than classical logic. +Of course, every programming language to be processed by a computer has to +have both fixed syntax (i.e. a grammar that specifies what programs of this +language have to look like, and what combinations of symbols make a valid +program) and semantics (which abstractly specifies what the computer has to +do with the program by declaring how a program is to be translated into the/a +correct result). There is wide agreement (and also some excitement) that +both the syntax and semantics of the language of DLV +are very simple and intuitive. In fact, we do not know of any way to make +the language even simpler while preserving its characteristics. +

+ +

+Both the syntax and semantics of DLV will be described in +this tutorial. +

+ + +
+

+The First Example : Rules and Facts +

+ +

+Suppose we want to model that every time somebody tells us a joke, we laugh. +Furthermore, somebody now tells us a joke. +This could be done in the following way: + +

+joke.
+laugh :- joke.
+
+ +The first line is called a fact and expresses that joke +is true (a simple word such as joke appearing in a rule or fact +which has a truth value is called a proposition. A more general +name - which we will use in the following - for the constituents of rules +and facts is atom.). +The second line is called a rule. +It is read as "if joke is true, laugh must also be true". +(The sign ":-" is meant to be an arrow to the left, the logic programming +version of the implication.) +

+ +

+If the author of such a program decides it appropriate, one can also interpret +some causality into a rule and read this one as "from joke follows laugh". +This is pure matter of choice of the human, and DLV +does not care about it. +The left side of a rule is called its head, while the right side is +called its body. +

+ +

+A result of a Datalog computation is called a model. +The meaning of this is clear: it is a consistent explanation (model) +of the world, as far as the Datalog system can derive it. +If a datalog program is inconsistent, i.e., it is contradictory, there is +simply no model (we will see examples of this later). +

+ +

+Of course, since in this example joke is certainly true (this is +given by the fact), laugh is also true. +DLV now tries to find all those models of the world that correctly +and consistently explain the observations made (= the program). + +A model assigns a truth value (either true or false) to +each atom appearing in the program, +and is written as the set of atoms that are true in a certain model. +The model of the above program is {joke, laugh}. +When all atoms are false in a model, we talk about an empty model +(written as {}). Note that having an empty model is very different +from finding no model. We will see examples for this later. +

+ +

+Simple datalog programs like the one above always have exactly one model. +In general, though, DLV programs may have zero +(as mentioned) or even many models. We will see examples of such programs later. +

+ + + +
+

+The Second Example : Negation and the Complete World Assumption +

+ +

+Next, suppose we are not aware of being told a joke. In this case, the +correct datalog program looks like this: + +

+laugh :- joke.
+
+ +The program itself does not express that joke is false, but the so-called +Complete World Assumption (CWA) does. It is one of the foundations +DLV bases its computations on and says that everything about which +nothing is known is assumed to be false. +Therefore, the model for this program is {}. (This means that +there is a model but it is empty. It is also possible that for a given +program there is no model.) +We will come back to the CWA in more detail later in the section that +discusses DLV as a deductive database system. +

+ +

+Next, we elaborate a bit on this example. +First, we want to express that to be able to understand a joke, one has to +hear it and must not be stupid. To hear it, one must not be deaf and there +must be a joke. +Finally, to laugh about the joke, one must understand it. +Alternatively, stupid people might laugh without being told a joke. + +

+joke.
+hear_joke :- joke, not deaf.
+understand_joke :- hear_joke, not stupid.
+laugh :- understand_joke.
+laugh :- stupid, not joke.
+
+ +In two of the rules, we encounter negated atoms. These are true if the +atoms themselves are false. +We also encounter rules that contain more than one atom in the +body. In such a case, a body is true if each of the literals are true +(a literal is a possibly negated atom). +For example, + +
+hear_joke :- joke, not deaf.
+
+ +is read as +"if joke is true and deaf is false then +hear_joke must be true". +

+ +

+The model for this program is +{joke, hear_joke, understand_joke, laugh}. +Again, by virtue of the CWA, deaf and stupid +are assumed to be false - there are no facts making these atoms +true and no rules which can derive their truth. +Now suppose we remove joke. from the program and add +stupid. instead. Then, the resulting model would be +{stupid, laugh}. +

+ +Please note the following things: +(i) Those atoms that are not listed as elements of the models above are +not automatically rendered false. Rather, they are unknown. +(ii) Suppose the program would look like this: + +
+stupid.
+laugh :- stupid, not joke.
+
+ +The model of this program is {stupid, laugh}. If we now add the +fact joke. we get the model {stupid, joke}, from +which the atom laugh got lost. In other words, you may add +more information and lose information that could be derived before because of +that. Due to this property, +the formalism of DLV is called nonmonotonic, just +as mathematical functions which are neither monotonically increasing nor +decreasing are called nonmonotonic. + +At first sight, this may look like an ugly property of this formalism, but in +fact, it allows to do many useful things. +

+ + + +
+

+The Family Tree Example : Predicates, Variables, and Recursion +

+ +So far we have studied simple atoms as the building blocks of our rules. +In fact, atoms may be constructed to hold a number of arguments - they are +then also called predicates. +

+ +In the following program, we have two binary predicates, parent +and grandparent. (They are called binary because they both have +two arguments.) +

+ +We have to map some semantics to the two arguments of the predicates. Here, +the first argument is assumed to be the older person +(the parent or grandparent), while +the second argument refers to the younger person (the child or grandchild). +Certainly, we could do it the other way as well, but then we would have to +adjust all the rules that will follow. + +

+parent(john, james).
+parent(james, bill).
+grandparent(john, bill) :- parent(john, james), parent(james, bill).
+
+ +Of course, the model of this program is +{parent(john, james), parent(james, bill), grandparent(john,bill)}. + +

+With predicates, it is allowed to use variables, which begin with an upper-case +character, differently from the constants of the previous program that begin +with a lower-case letter. The following program has the same model as the +previous example: + +

+parent(john, james).
+parent(james, bill).
+grandparent(X, Y) :- parent(X, Z), parent(Z, Y).
+
+ +This new grandparent rule which uses variables simply models that every +parent of a parent is a grandparent. +

+ +

+Note that the facts of a program are often called the +Extensional Database (EDB), while the remaining rules are called +the Intensional Database (IDB). +With DLV, the EDB can be read either from a relational +or object-oriented database, or just simply from files, where no separation +of rules and facts is required. +

+ +

+We can now extend this example a bit to show how DLV +can be used to model knowledge as datalog rules and exploit it. + +First we add a few more facts to add more people and to express their gender: + +

+parent(william, john).
+parent(john, james).
+parent(james, bill).
+parent(sue, bill).
+parent(james, carol).
+parent(sue, carol).
+
+male(john).
+male(james).
+female(sue).
+male(bill).
+female(carol).
+
+ +Then we can add more rules that model family relationships. + +
+grandparent(X, Y) :- parent(X, Z), parent(Z, Y).
+father(X, Y) :- parent(X, Y), male(X).
+mother(X, Y) :- parent(X, Y), female(X).
+brother(X, Y) :- parent(P, X), parent(P, Y), male(X), X != Y.
+sister(X, Y)  :- parent(P, X), parent(P, Y), female(X), X != Y.
+
+ +The rules for brother and sister use X != Y to require that +X and Y are different (one cannot be his own brother). This is called a +built-in predicate, since it could be written as something like +not_equal(X, Y). DLV knows quite a few of +these built-in predicates. +For this program, DLV finds the following model +(to simplify readability, the facts already listed above were removed from the +model below; of course, they still belong there): + +
+{grandparent(william,james), grandparent(john,bill), grandparent(john,carol),
+father(john,james), father(james,bill), father(james,carol),
+mother(sue,bill), mother(sue,carol),
+brother(bill,carol), sister(carol,bill)}
+
+ +Let us now exchange the IDB rules against the following (the EDB facts remain +the same): + +
+ancestor(X, Y) :- parent(X, Y).
+ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y).
+
+ +These rules are interesting, since they use recursion +to implement transitivity. +They express that, to start with, every parent is an ancestor, and, secondly, +that every parent of an ancestor is an ancestor. +Please note that the semantics used ensures that it is impossible that there +be any problems with left-recursion as they occur in languages as Prolog. +In DLV, the programmer can safely ignore such +considerations. +

+ +

+The model of this program combined with the six-entries parent +facts base above results in the following model (where the parent +facts were again removed for readability): + +

+{ancestor(william,john), ancestor(william,james), ancestor(william,bill),
+ancestor(william,carol), ancestor(john,james), ancestor(john,bill),
+ancestor(john,carol), ancestor(james,bill), ancestor(james,carol),
+ancestor(sue,bill), ancestor(sue,carol)}
+
+

+ +

+Finally, some subtle detail has to be noted which is quite useful to improve +the readability of the rules. In the case that a certain argument of a +predicate is irrelevant for a certain rule, no dummy variable has to be +inserted, but the _ can be used. For instance, suppose we want +to derive the persons from the parent facts. For this, we can write the +following rules: + +

+person(X) :- parent(X, _).
+person(X) :- parent(_, X).
+
+ +

+Finally, please avoid calling a predicate as shown in this section a +proposition. (It is fine to call them atoms.) +

+ + + +
+

+DLV as a Deductive Database System; Comparison Operators +

+ +

+When you use the CWA in one of your programs, you basically view the +DLV system as a deductive database system, since you +do not ask for what is logically right, but what you can usefully derive +from your facts base. +Following this approach, you can perform queries on the existing data (the +facts base), derive (and "store") new data using queries(=rules), +which again can be used to deduce even more data, and, using the CWA, even +ask queries as to what is not in (or derivable from) your database. +

+ +Consider the following example in SQL in the well know business domain (which +many relational database systems examples use). Emp is a relational table +containing employee information, and dept contains data on departmens of a +company in which the employees work. + +
+SELECT e.name, e.salary, d.location
+FROM   emp e, dept d
+WHERE  e.dept = d.dept_id
+AND    e.salary > 31000;
+
+ +When the relational tables are encoded as a facts base, we can rewrite the +above query into a datalog rule: + +
+emp("Jones",   30000, 35, "Accounting").
+emp("Miller",  38000, 29, "Marketing").
+emp("Koch",  2000000, 24, "IT").
+emp("Nguyen",  35000, 42, "Marketing").
+emp("Gruber",  32000, 39, "IT").
+
+dept("IT",         "Atlanta").
+dept("Marketing",  "New York").
+dept("Accounting", "Los Angeles").
+
+q1(Ename, Esalary, Dlocation) :- emp(Ename, Esalary, _, D), dept(D, Dlocation),
+   Esalary > 31000.
+
+ +

+As you can see, joins are achieved via variable binding (we use the same +variable D both in emp and in dept), selections can for example be achieved +by the comparison operators, and projections (i.e. where unwanted data columns +are excluded from a query result) can be accomplished by using _ or an +unbound variable. +

+ +

+You can use DLV to ask all the queries that are possible in the +core SQL language. Furthermore, (as you will see when the full expressive power +of DLV is unveiled later in this tutorial) you can also encode +many useful queries that cannot be expressed in SQL. +

+ +

+This example used another feature of DLV that has not been +introduced yet: comparison operators. DLV supports the operators +<, >, >=, <=, and = for integers, floating point values, and strings. +This is an extension that is not part of basic datalog, but it is convenient +and also compatible with the philosophy of datalog, as you can think of an +expression X > Y as a predicate +greater_than(X,Y) for which the facts base of all the greater-than +relationships between constant symbols in your program are automatically +generated. +Therefore, we call these comparison operators built-in predicates. +

+ +

+Note that you could also rewrite q1 to use the operator = for the +join. The rule below obtains the same result as the one shown earlier: + +

+q1(Ename, Esalary, Dlocation) :- emp(Ename, Esalary, _, D1),
+                                 dept(D2, Dlocation), D1 = D2,
+                                 Esalary > 31000.
+
+ +

+Download example program. +

+ +

+ + + +
+

+The Railway Crossing Example : True Negation and Negation as Finite Failure +

+ +

+DLV supports two kinds of negation. + +Here, we emphasize the difference between explicitly expressing the falseness +of an atom and having it done by the Complete World Assumption. + +The following program uses the CWA. It has the model +{cross} because train_approaching is assumed to be false (as it +being true is not stated anywhere). +This kind of negation is called +negation as (finite) failure or naf. +

+cross :- not train_approaching.
+
+ +The next program uses so-called true or classical negation. +Since -train_approaching is not known to be true, the following +program has only an empty model. + +
+cross :- -train_approaching.
+
+ +The difference between the two kinds of negation is quite important: +In the first example, we cross the railroad track if we have no information +on any trains approaching, which is quite dangerous, +while in the second example, we only cross if we know for +sure that no train comes. +In particular, the left side of the previous rule will only be true if + +
+-train_approaching.
+
+ +is in the facts base of the program. +

+ +

+True negation is stronger than negation as finite failure. If something is +true via true negation, it is always also true if negated by negation as +finite failure. +For example, the program +

+ +
+cross :- not train_approaching.
+-train_approaching.
+
+ +has the model {cross, -train_approaching}. + +

+Using True Negation also allows to build programs that are contradictory and +have no models. Consider the following example: + +

+cross.
+-cross.
+
+ +Certainly, this program cannot have a model. +This is very different from a program that has an empty model, which would just +mean that the program represents a possible situation but that all of its atoms +are assumed to be false. +

+ + + +
+

+The Broken Arm Example : Disjunctive Datalog and the Stable Model Semantics +

+ +Suppose you have met a friend recently and you know that he +had one of his arms broken, but you don't know which one. +Now you didn't receive a greeting card for your birthday and +wonder if you should be angry on him or if he just cannot +write because of his broken arm. +Finally, you know that he writes with his right hand. +The following DLV program computes the two possible +explanations for the observations you made. + +
+left_arm_broken v right_arm_broken.
+can_write :- left_arm_broken.
+be_angry :- can_write.
+
+ +The first rule is called a disjunctive rule; The v is read as "or" +and the whole rule is read as +"For sure, either the left or the right arm is broken." +As we can see here, a disjunctive rule may (but does not have to) have an +empty body (= lack a body). +It is still called a rule, since it is certainly not a fact. +(It is unknown if the left or the right arm is broken.) +

+ +Being able to process incomplete information (i.e. being unsure if the +left or the right arm is broken) is one of the great strengths of +DLV. + +The resulting models of this query are +{left_arm_broken, can_write, be_angry} and +{right_arm_broken}. +

+ +In fact, the disjunction left_arm_broken v right_arm_broken. +also allows both left_arm_broken and right_arm_broken +to be true at the same time. Still, DLV does not output +the model {left_arm_broken, right_arm_broken, can_write, be_angry} +due to the computing paradigm that it uses to cope with uncertainty, and which +is called the Stable Model Semantics. +Under this semantics, a model is not stable if there is a smaller model which +is a subset of it (which is the case for both stable models shown +above with respect to the "big" model containing left_arm_broken +and right_arm_broken). +While this might seem complicated, it is a very powerful feature of +DLV which is very useful for all kinds of reasoning. +We will come back to this later in this tutorial. +(For the moment, we want to emphasize that this one "big" model which +is not stable would be obviously wrong in this application.) +

+ + +Note that the same uncertainty can also be expressed by the following program: + +

+left_arm_broken :- not right_arm_broken.
+right_arm_broken :- not left_arm_broken.
+can_write :- left_arm_broken.
+be_angry :- can_write.
+
+ +

+This program results in the same pair of models. The method used here is called +Unstratified Negation and is considered less elegant than the first +method. Also, there are certain interesting reasoning problems that +DLV can solve and which can only be expressed with true +disjunction but not with unstratified negation. +

+ +

+Finally, please note that rule bodies may either contain positive (nonnegated) +atoms, atoms negated by true negation, and atoms negated by negation as +failure, while rule heads may only contain positive atoms and true negation, +but no negation as failure. In other words, a rule such as + +

+not a :- b.   % INVALID !!!
+
+ +is not valid! (The % sign in a DLV program +starts a comment which goes to the right to the end of the line.) +

+ + + +
+

+Strong Constraints +

+ +

+DLV also supports integrity constraints +(strong constraints). +A constraint is a rule with an empty head. If its body is true (which is of +course the case exactly if all the literals in the body are true at the same +time), a model is made inconsistent and is removed. + +For example, in the family tree example which was presented earlier, we +can easily write an integrity constraint to assure that the facts base does not +erroneously contain contradicting facts saying that a person is male and +female at the same time. + +

+:- male(X), female(X).
+
+ +This kind of constraints is called strong constraints because there +is also a different kind (weak constraints) supported by +DLV which is not addressed in this tutorial. +This other kind of constraints is very useful to solve optimization problems. +

+ + + +
+

+Graph Coloring: Guess&Check Programming +

+ +

+Graph 3-colorability is a hard (NP-complete) problem. +It is the problem of deciding if there exists a coloring of a map of +countries corresponding to the given graph using no more than three colors in +which no two neighbour countries (nodes connected by an arc) have the same +color. +It is known that every map can be colored given these constraints if four +colors are available. +

+ +
+ + +
+node(minnesota).
+node(wisconsin).
+node(illinois).
+node(iowa).
+node(indiana).
+node(michigan).
+node(ohio).
+
+arc(minnesota, wisconsin).
+arc(illinois, iowa).
+arc(illinois, michigan).
+arc(illinois, wisconsin).
+arc(illinois, indiana).
+arc(indiana, ohio).
+arc(michigan, indiana).
+arc(michigan, ohio).
+arc(michigan, wisconsin).
+arc(minnesota, iowa).
+arc(wisconsin, iowa).
+arc(minnesota, michigan).
+
+
+ +This problem can now be solved with a very simple datalog program, in which +we first guess a coloring by using a disjunctive rule and then check it by +adding a (strong) constraint which deletes all those colorings that do not +satisfy our requirements (that there may be no arc between two nodes of +equal color): + +
+% guess coloring
+col(Country, red) v col(Country, green) v col(Country, blue) :- node(Country).
+
+% check coloring
+:- arc(Country1, Country2), col(Country1, CommonColor), col(Country2, CommonColor).
+
+ +This problem instance has 6 solutions (stable models), therefore, it is +3-colorable. Below, one solution is shown, in which the facts base has again +be removed for better readability: + +
+{col(minnesota,green), col(wisconsin,red), col(illinois,green),
+ col(iowa,blue), col(indiana,red), col(michigan,blue), col(ohio,green)}
+
+ +

+This method (guess&check programming) allows to encode a large number of +complicated problems in an intuitive way. DLV can then +use such an encoding to solve the problems surprisingly efficiently. +

+ +

+Download example program. +

+ +

+As an exercise, you can use DLV to prove that a +map of Germany, Belgium, Luxembourg and France +is not 3-colorable. +

+ + + +
+

+The Fibonacci Example: Built-in Predicates and Integer Arithmetics +

+ +Note that this section introduces some features of DLV +which are not part of standard datalog. +

+ +In the following example, the Fibonacci function is defined, +which is relevant in areas as disparate as Chaos Theory and Botanics. +Its starts with the following values: +1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ... +(Apart from the first two values, each value is defined as the sum of the +previous two.) + +

+true.
+fibonacci(1, 1) :- true.
+fibonacci(1, 2) :- true.
+fibonacci(F, Index) :- +(F1, F2, F),
+                       fibonacci(F1, Index1),
+                       fibonacci(F2, Index2),
+                       #succ(Index1, Index2),
+                       #succ(Index2, Index).
+
+ +This program uses the built-in predicates + (which adds or +subtracts integer numbers) and #succ (the successor function). +Note that for better readability, it is also correct to write +F = F1 + F2 instead of +(F1, F2, F) and +Index2 = Index1 + 1 instead of +#succ(Index1, Index2). +Still, these simple equations always map to the built-in predicates and +may not be extended any further. (It is not allowed to write +A = B + C + D, this has to be split into two parts.) +

+ +

+The second topic that has to be discussed at this point is why the fact +true. was introduced. +The reason for this is the strong separation that is made between EDB and +IDB predicates. Since fibonacci is used on the left-hand side +of a rule, it is in the IDB. IDB predicates cannot be used in facts (because +then they would have to be in the EDB). +Because of that, a fact is introduced and rules are built that are always true +and are therefore equivalent to facts. + +Note that this distinction between IDB and EDB predicates is not necessary +anymore in the most recent versions of DLV. Therefore, +you can now declare fibonacci(1, 1) and +fibonacci(1, 2) simply as facts. +

+ +

+Whenever integer arithmetics are used, the range of possible values has to +be restricted, since DLV requires the space of possible +solutions to be finite. This is done by invoking DLV +with the option -N. (For a full description of +DLV usage, refer to the + +DLV manual.) + +For example, invoking DLV with + +

+dl -N=100 fibonacci.dl
+
+ +results in the model + +
+{true, fibonacci(1,1), fibonacci(1,2), fibonacci(2,3), fibonacci(3,4),
+ fibonacci(5,5), fibonacci(8,6), fibonacci(13,7), fibonacci(21,8),
+ fibonacci(34,9), fibonacci(55,10), fibonacci(89,11)}
+
+ +These are all the Fibonacci numbers not greater than 100. +

+ +

+Download example program. +

+ + + + + +
+Click +here +for some interesting material on Fibonacci numbers. + + + +
+

+The 8-Queens Example: Guess&Check Programming with Integers +

+ +The 8 queens problem asks for a solution in which 8 queens are placed on a +8 x 8 chess board without threatening eachother. A queen threatens another +if it is in the same row, column, or on a diagonal. + +
+% guess horizontal position for each row
+q(X,1) v q(X,2) v q(X,3) v q(X,4) v q(X,5) v q(X,6) v q(X, 7) v q(X,8) :- #int(X), X > 0.
+
+% check
+
+% assert that each column may only contain (at most) one queen
+:- q(X1,Y), q(X2,Y), X1 <> X2.
+
+% assert that no two queens are in a diagonal from top left to bottom right
+:- q(X1,Y1), q(X2,Y2), X2=X1+N, Y2=Y1+N, N > 0.
+
+% assert that no two queens are in a diagonal from top right to bottom left 
+:- q(X1,Y1), q(X2,Y2), X2=X1+N, Y1=Y2+N, N > 0.
+
+ +To run this program with DLV, type the following: + +
+dl -n=1 -N=8 8queens.dl
+
+ +This will return a result like + +
+{q(1,3), q(2,7), q(3,2), q(4,8), q(5,5), q(6,1), q(7,4), q(8,6)}
+
+ +To get all 92 correct solutions, type + +
+dl -N=8 8queens.dl
+
+ +

+Download example program. +

+ + + +
+

+A simple Physics Diagnosis example +

+ +We will now show how to use DLV to do diagnosis. +We choose a physics application domain, a simplified version of ECAL +pre-calibration. + + +
+ +As shown in the picture, a test beam is directed onto a scintillating crystal +whose light emission is measured by an avalanche photodiode (APD). +The measurement is then read with some readout electronics. +Alternatively to the beam reading, the APD can receive a test pulse signal, +which allows to check the correct functioning of the APD independently from +the crystal. +The following program allows to automatically diagnose malfunctioning parts: + +
+ok(testpulse_reading).
+ok(beam_reading).
+
+good(crystal) v bad(crystal).
+good(apd) v bad(apd).
+
+:- good(X), bad(X).
+
+good(crystal) :- ok(beam_reading).
+good(apd) :-     ok(beam_reading).
+bad(apd) v bad(crystal) :- not ok(beam_reading).
+good(apd) :-     ok(testpulse_reading).
+bad(apd)  :- not ok(testpulse_reading).
+
+ +The program starts with two facts expressing our observations. +Here, both the testpulse reading and the beam reading were found to be correct; +below, we will evaluate the program with different observations. +The following two rules tell the system that crystals and APDs are either +working or broken. After this follows a constraint that assures that they +cannot be both at the same time. + +Finally, there are five rules that are a collection of expert knowledge. +They model the knowledge about the domain and show quite clearly why the +test pulse is available as a separate input to the APDs: it allows to +find out if the APD works correctly without having to make any assumptions +about the crystal. +If the reaout of the beam on the other hand were not correct, one could +not be sure if the responsible part is the crystal or the APD. +

+ +Here, the unique result is the model {good(crystal), good(apd)}. +Suppose we exchange the two EDB facts (the first two lines of this program) +to ok(testpulse_reading). then the result changes to +{good(apd), bad(crystal)}. +The whole set of different cases is shown in the following table: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
EDBModel(s)
{ok(testpulse_reading). ok(beam_reading).} {good(crystal), good(apd)}
{ok(testpulse_reading).} {good(apd), bad(crystal)}
{ok(beam_reading).} no model
{} {bad(apd), good(crystal)},
+{bad(apd), bad(crystal)}
+

+ +The case that the facts base is {ok(beam_reading).} +is also interesting: +According to our program, if ok(beam_reading) is true, +ok(testpulse_reading) also has to be true. +Therefore, there is no consistent model in this case. +In other words, according to our program, such observations cannot be made. +

+ + + +


+

+A different way to implement the Physics Diagnosis example +

+ +The way to do diagnosis that was presented in the previous section has two +drawbacks: +It requires that more knowledge than necessary has to be coded in the program, +and resulting from this, the program does not really do anything original. +Also, it it hard to extend. +Here, we show a different (better) way to do diagnosis in the same +application domain. +We represent the system as a graph of its units: + +
+connected(beam, crystal).
+connected(crystal, apd).
+connected(testpulse_injector, apd).
+connected(apd, readout).
+
+good_path(X,Y) :- not bad(X), not bad(Y), connected(X, Y).
+good_path(X,Z) :- good_path(X,Y), good_path(Y, Z).
+
+bad(crystal) v bad(apd).
+
+testpulse_readout_ok :- good_path(testpulse_injector, readout).
+beam_readout_ok :- good_path(beam, readout).
+
+ +In this example program, we have left away all the possible observations, +which we implement as constraints, as shown in the following table: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Observations (Constraints)Model(s) (good_path predicates omitted)
{} +{bad(crystal), testpulse_readout_ok}, +
+{bad(apd)} +
{:- testpulse_readout_ok.} {bad(apd)}
{:- beam_readout_ok.} +{bad(crystal), testpulse_readout_ok}, +
+{bad(apd)} +
{:- beam_readout_ok.
:- testpulse_readout_ok.}
{bad(apd)}
{:- not testpulse_readout_ok.} +{bad(crystal), testpulse_readout_ok} +
{:- not beam_readout_ok.} no model
{:- not beam_readout_ok.
+:- not testpulse_readout_ok.}
no model
+

+ +Download example program. +

+ + + +


+

+The Monkey&Banana Example: Planning +

+ +

+The following example shall give an idea of how DLV +can be used to do planning. +

+ +

+Please note that there is a DLV planning frontend +that uses a convenient special-purpose planning language and which is not +described in this tutorial. Instead, we use plain disjunctive datalog for +solving planning problems here. +If you are interested in this frontend, please refer to the +DLV +homepage for further information. +

+ +

+Consider the following classic planning problem. +A monkey is in a room with a chair and a banana which is fixed to the +ceiling. +The monkey cannot reach the banana unless it stands on the chair; it is simply +too high up. The chair is now at a position different from the place +where the banana is hung up, and the monkey itself initially is at again +a different place. +

+ +Since the program is quite long compared to the earlier examples, it will +be explained step by step. + +

+walk(Time) v move_chair(Time) v ascend(Time) v idle(Time) :- #int(Time).
+
+ +At each discrete point in time, the monkey performs one of the following +for actions: it walks, it moves the chair (while doing this, it also moves +through the room), it climbs up the chair, or it does nothing. +#int is again a built-in predicate which is true exactly if its +argument is an integer value. + +
+monkey_motion(T) :- walk(T).
+monkey_motion(T) :- move_chair(T).
+
+stands_on_chair(T2) :- ascend(T), T2 = T + 1.
+:- stands_on_chair(T), ascend(T).
+:- stands_on_chair(T), monkey_motion(T).
+stands_on_chair(T2) :- stands_on_chair(T), T2 = T + 1.
+
+ +After climbing up the chair, it is on it. If is is already on it, it cannot +climb up any further. While on the chair, it cannot walk around. +If it was on the chair earlier, it will be there in the future. + +
+chair_at_place(X, T2) :- chair_at_place(X, T1), T2 = T1 + 1, not move_chair(T1).
+chair_at_place(Pos, T2) :- move_chair(T1), T2 = T1 + 1,
+   monkey_at_place(Pos, T2).
+
+ +If the chair is not moved, it will stay at the same place. +If the monkey moves the chair, it changes its position. + +
+monkey_at_place(monkey_starting_point, T) v
+monkey_at_place(chair_starting_point, T) v
+monkey_at_place(below_banana, T) :- #int(T).
+
+ +The monkey is somewhere in the room. (For simplicity, only three positions are +possible.) + +
+:- monkey_at_place(Pos1, T2), monkey_at_place(Pos2, T1),
+   T2 = T1 + 1, Pos1 != Pos2, not monkey_motion(T1).
+
+:- monkey_at_place(Pos, T2), monkey_at_place(Pos, T1), T2 = T1 + 1,
+   monkey_motion(T1).
+
+:- ascend(T), monkey_at_place(Pos1, T), chair_at_place(Pos2, T), Pos1 != Pos2.
+
+:- move_chair(T), monkey_at_place(Pos1, T), chair_at_place(Pos2, T),
+   Pos1 != Pos2.
+
+ +The monkey cannot change its position without moving. +The monkey cannot stay at the same place if it moves. +It cannot climb up the chair if it is somewhere else. +It cannot move the chair if it is somewhere else. + +
+monkey_at_place(monkey_starting_point, 0) :- true.
+chair_at_place(chair_starting_point, 0) :- true.
+true.
+
+ +Initially, the monkey and the chair are at different positions. + +
+can_reach_banana :- stands_on_chair(T), chair_at_place(below_banana, T).
+eats_banana :- can_reach_banana.
+happy :- eats_banana.
+
+:- not happy.
+
+ +The monkey can only reach the banana if it stands on the chair and the +chair is below the banana. +If it can reach the banana, it will eat it, and this will make it happy. +Our goal is to make the monkey happy. + +
+step(N, walk, Destination) :- walk(N), monkey_at_place(Destination, N2),
+                              N2 = N + 1.
+step(N, move_chair, Destination) :- move_chair(N),
+                                    monkey_at_place(Destination, N2),
+                                    N2 = N + 1.
+step(N, ascend, " ") :- ascend(N).
+
+ + +The step rules collect all the things we can derive from the situation and +build a consistent plan. (There is no step rule for the action idle +since we are not interested in it.) +

+ +This program again uses integer arithmetics; to find a plan, the maximum +integer variable has to be set to at least 3: + +

+dl -N=3 banana.dl
+
+ +This results in the following model (If N is set to a value greater than 3, +DLV will find other plans that make the monkey happy.) + +
+{chair_at_place(chair_starting_point,0),
+monkey_at_place(monkey_starting_point,0),
+monkey_at_place(chair_starting_point,1),
+monkey_at_place(below_banana,2),
+monkey_at_place(below_banana,3),
+walk(0), move_chair(1), ascend(2), idle(3),
+chair_at_place(chair_starting_point,1),
+chair_at_place(below_banana,2),
+chair_at_place(below_banana,3),
+monkey_motion(0), monkey_motion(1),
+step(0,walk,chair_starting_point),
+step(1,move_chair,below_banana),
+step(2,ascend," "),
+stands_on_chair(3), can_reach_banana, eats_banana, happy}
+
+ +Download example program. +

+ + + +


+ + + + + + + diff --git a/biblio/ASP-DLV_tutorial.md b/biblio/ASP-DLV_tutorial.md new file mode 100644 index 0000000..b152ce6 --- /dev/null +++ b/biblio/ASP-DLV_tutorial.md @@ -0,0 +1,923 @@ +## The **`DLV`** Tutorial + +In this tutorial, we give an introduction to *Disjunctive Datalog* +(using some of the extensions of **`DLV`**). The tutorial does not give +a full description of the usage and capabilities of **`DLV`**. For a +more complete account of these, see the [**`DLV`** +homepage](http://www.dlvsystem.com/) and the [**`DLV`** online user +manual](http://www.dlvsystem.com/man/). The examples shown in this +tutorial work with every recent **`DLV`** release. Executables of the +**`DLV`** system for various platforms can be downloaded from the +[**`DLV`** homepage](http://www.dlvsystem.com/). + +The tutorial consists of the following sections, each of them being +built around a guiding example: + +- The First Example : Rules and Facts +- The Second Example : Negation and the Complete World Assumption +- The Family Tree Example : Predicates, Variables, and Recursion +- `DLV` as a Deductive Database System; Comparison Operators +- The Railway Crossing Example : True Negation and Negation as Finite + Failure +- The Broken Arm Example : Disjunctive Datalog and the Stable Model + Semantics +- Strong Constraints +- Graph Coloring: Guess&Check Programming +- The Fibonacci Example: Built-in Predicates and Integer Arithmetics +- The 8-Queens Example: Guess&Check Programming with Integers +- A simple Physics Diagnosis example +- A different way to implement the Physics Diagnosis example +- The Monkey&Banana Example: Planning + +This page is quite long. People who are in a hurry might appreciate the +information that the tutorial is fully on this page, there will be no +branches and no links to further pages. + +**This tutorial is written for computer-literate people with a +background different from computer science, or students new to this +area. It was originally written for physicists at CERN, and some +examples are tailored towards this community.** + +------------------------------------------------------------------------ + +### Introduction + +Datalog is a *declarative* (programming) language. This means that the +programmer does not write a program that solves some problem but instead +specifies what the solution should look like, and a Datalog inference +engine (or *Deductive Database System*) tries to find the the way to +solve the problem and the solution itself. This is done with *rules* and +*facts*. Facts are the input data, and rules can be used to derive more +facts, and hopefully, the solution of the given problem. + +Disjunctive datalog is an extension of datalog in which the logical OR +expression (the disjunction) is allowed to appear in the rules - this is +not allowed in basic datalog. + +**`DLV`** (= datalog with disjunction) is a powerful though freely +available deductive database system. It is based on the declarative +programming language *datalog*, which is known for being a convenient +tool for knowledge representation. With its disjunctive extensions, it +is well suited for all kinds of nonmonotonic reasoning, including +diagnosis and planning. + +Finally, we have to mention to the more advanced reader that **`DLV`** +is relevant to two communities. Firstly, as mentioned, it is a deductive +database engine and can therefore be seen as a way to query data from +databases which is strictly more powerful than for example SQL +(everything that can be done with the core SQL language can also be done +with **`DLV`**, and more), but it is also often described as a system +for answer set programming (ASP). This is a powerful new paradigm from +the area of \"Nonmonotonic Reasoning\" which allows to formulate even +very complicated problems in a straightforward and highly declarative +way. One may call this paradigm even more declarative than classical +logic. Of course, every programming language to be processed by a +computer has to have both fixed syntax (i.e. a grammar that specifies +what programs of this language have to look like, and what combinations +of symbols make a valid program) and semantics (which abstractly +specifies what the computer has to do with the program by declaring how +a program is to be translated into the/a correct result). There is wide +agreement (and also some excitement) that both the syntax and semantics +of the language of **`DLV`** are very simple and intuitive. In fact, we +do not know of any way to make the language even simpler while +preserving its characteristics. + +Both the syntax and semantics of **`DLV`** will be described in this +tutorial. + +------------------------------------------------------------------------ + +### The First Example : Rules and Facts + +Suppose we want to model that every time somebody tells us a joke, we +laugh. Furthermore, somebody now tells us a joke. This could be done in +the following way: + +> joke. +> laugh :- joke. + +The first line is called a fact and expresses that `joke` is true (a +simple word such as `joke` appearing in a rule or fact which has a truth +value is called a *proposition*. A more general name - which we will use +in the following - for the constituents of rules and facts is *atom*.). +The second line is called a rule. It is read as \"if joke is true, laugh +must also be true\". (The sign \":-\" is meant to be an arrow to the +left, the logic programming version of the implication.) + +If the author of such a program decides it appropriate, one can also +interpret some causality into a rule and read this one as \"from joke +follows laugh\". This is pure matter of choice of the human, and +**`DLV`** does not care about it. The left side of a rule is called its +*head*, while the right side is called its *body*. + +A result of a Datalog computation is called a *model*. The meaning of +this is clear: it is a consistent explanation (model) of the world, as +far as the Datalog system can derive it. If a datalog program is +inconsistent, i.e., it is contradictory, there is simply no model (we +will see examples of this later). + +Of course, since in this example `joke` is certainly true (this is given +by the fact), `laugh` is also true. `DLV` now tries to find all those +models of the world that correctly and consistently explain the +observations made (= the program). A model assigns a truth value (either +*true* or *false*) to each atom appearing in the program, and is written +as the set of atoms that are true in a certain model. The model of the +above program is `{joke, laugh}`. When all atoms are false in a model, +we talk about an empty model (written as `{}`). Note that having an +empty model is very different from finding no model. We will see +examples for this later. + +Simple datalog programs like the one above always have exactly one +model. In general, though, **`DLV`** programs may have zero (as +mentioned) or even many models. We will see examples of such programs +later. + +------------------------------------------------------------------------ + +### The Second Example : Negation and the Complete World Assumption + +Next, suppose we are not aware of being told a joke. In this case, the +correct datalog program looks like this: + +> laugh :- joke. + +The program itself does not express that joke is false, but the +so-called *Complete World Assumption (CWA)* does. It is one of the +foundations `DLV` bases its computations on and says that everything +about which nothing is known is assumed to be false. Therefore, the +model for this program is `{}`. (This means that there is a model but it +is empty. It is also possible that for a given program there is no +model.) We will come back to the CWA in more detail later in the section +that discusses `DLV` as a deductive database system. + +Next, we elaborate a bit on this example. First, we want to express that +to be able to understand a joke, one has to hear it and must not be +stupid. To hear it, one must not be deaf and there must be a joke. +Finally, to laugh about the joke, one must understand it. Alternatively, +stupid people might laugh without being told a joke. + +> joke. +> hear_joke :- joke, not deaf. +> understand_joke :- hear_joke, not stupid. +> laugh :- understand_joke. +> laugh :- stupid, not joke. + +In two of the rules, we encounter negated atoms. These are true if the +atoms themselves are false. We also encounter rules that contain more +than one atom in the body. In such a case, a body is true if each of the +literals are true (a literal is a possibly negated atom). For example, + +> hear_joke :- joke, not deaf. + +is read as \"if `joke` is true and `deaf` is false then `hear_joke` must +be true\". + +The model for this program is +`{joke, hear_joke, understand_joke, laugh}`. Again, by virtue of the +CWA, `deaf` and `stupid` are assumed to be false - there are no facts +making these atoms true and no rules which can derive their truth. Now +suppose we remove `joke.` from the program and add `stupid.` instead. +Then, the resulting model would be `{stupid, laugh}`. + +Please note the following things: (i) Those atoms that are not listed as +elements of the models above are *not* automatically rendered false. +Rather, they are unknown. (ii) Suppose the program would look like this: + +> stupid. +> laugh :- stupid, not joke. + +The model of this program is `{stupid, laugh}`. If we now add the fact +`joke.` we get the model `{stupid, joke}`, from which the atom `laugh` +got lost. In other words, you may add more information and lose +information that could be derived before because of that. Due to this +property, the formalism of **`DLV`** is called *nonmonotonic*, just as +mathematical functions which are neither monotonically increasing nor +decreasing are called nonmonotonic. At first sight, this may look like +an ugly property of this formalism, but in fact, it allows to do many +useful things. + +------------------------------------------------------------------------ + +### The Family Tree Example : Predicates, Variables, and Recursion + +So far we have studied simple atoms as the building blocks of our rules. +In fact, atoms may be constructed to hold a number of arguments - they +are then also called *predicates*. + +In the following program, we have two binary predicates, `parent` and +`grandparent`. (They are called binary because they both have two +arguments.) + +We have to map some semantics to the two arguments of the predicates. +Here, the first argument is assumed to be the older person (the parent +or grandparent), while the second argument refers to the younger person +(the child or grandchild). Certainly, we could do it the other way as +well, but then we would have to adjust all the rules that will follow. + +> parent(john, james). +> parent(james, bill). +> grandparent(john, bill) :- parent(john, james), parent(james, bill). + +Of course, the model of this program is +`{parent(john, james), parent(james, bill), grandparent(john,bill)}`. + +With predicates, it is allowed to use variables, which begin with an +upper-case character, differently from the constants of the previous +program that begin with a lower-case letter. The following program has +the same model as the previous example: + +> parent(john, james). +> parent(james, bill). +> grandparent(X, Y) :- parent(X, Z), parent(Z, Y). + +This new grandparent rule which uses variables simply models that every +parent of a parent is a grandparent. + +Note that the facts of a program are often called the *Extensional +Database (EDB)*, while the remaining rules are called the *Intensional +Database (IDB)*. With **`DLV`**, the EDB can be read either from a +relational or object-oriented database, or just simply from files, where +no separation of rules and facts is required. + +We can now extend this example a bit to show how **`DLV`** can be used +to model knowledge as datalog rules and exploit it. First we add a few +more facts to add more people and to express their gender: + +> parent(william, john). +> parent(john, james). +> parent(james, bill). +> parent(sue, bill). +> parent(james, carol). +> parent(sue, carol). +> +> male(john). +> male(james). +> female(sue). +> male(bill). +> female(carol). + +Then we can add more rules that model family relationships. + +> grandparent(X, Y) :- parent(X, Z), parent(Z, Y). +> father(X, Y) :- parent(X, Y), male(X). +> mother(X, Y) :- parent(X, Y), female(X). +> brother(X, Y) :- parent(P, X), parent(P, Y), male(X), X != Y. +> sister(X, Y) :- parent(P, X), parent(P, Y), female(X), X != Y. + +The rules for brother and sister use `X != Y` to require that X and Y +are different (one cannot be his own brother). This is called a built-in +predicate, since it could be written as something like +`not_equal(X, Y)`. **`DLV`** knows quite a few of these built-in +predicates. For this program, **`DLV`** finds the following model (to +simplify readability, the facts already listed above were removed from +the model below; of course, they still belong there): + +> {grandparent(william,james), grandparent(john,bill), grandparent(john,carol), +> father(john,james), father(james,bill), father(james,carol), +> mother(sue,bill), mother(sue,carol), +> brother(bill,carol), sister(carol,bill)} + +Let us now exchange the IDB rules against the following (the EDB facts +remain the same): + +> ancestor(X, Y) :- parent(X, Y). +> ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y). + +These rules are interesting, since they use recursion to implement +transitivity. They express that, to start with, every parent is an +ancestor, and, secondly, that every parent of an ancestor is an +ancestor. Please note that the semantics used ensures that it is +impossible that there be any problems with left-recursion as they occur +in languages as Prolog. In **`DLV`**, the programmer can safely ignore +such considerations. + +The model of this program combined with the six-entries `parent` facts +base above results in the following model (where the `parent` facts were +again removed for readability): + +> {ancestor(william,john), ancestor(william,james), ancestor(william,bill), +> ancestor(william,carol), ancestor(john,james), ancestor(john,bill), +> ancestor(john,carol), ancestor(james,bill), ancestor(james,carol), +> ancestor(sue,bill), ancestor(sue,carol)} + +Finally, some subtle detail has to be noted which is quite useful to +improve the readability of the rules. In the case that a certain +argument of a predicate is irrelevant for a certain rule, no dummy +variable has to be inserted, but the `_` can be used. For instance, +suppose we want to derive the persons from the parent facts. For this, +we can write the following rules: + +> person(X) :- parent(X, _). +> person(X) :- parent(_, X). + +Finally, please *avoid* calling a predicate as shown in this section a +proposition. (It is fine to call them atoms.) + +------------------------------------------------------------------------ + +### `DLV` as a Deductive Database System; Comparison Operators + +When you use the CWA in one of your programs, you basically view the +`DLV` system as a *deductive* database system, since you do not ask for +what is logically right, but what you can usefully derive from your +facts base. Following this approach, you can perform queries on the +existing data (the facts base), derive (and \"store\") new data using +queries(=rules), which again can be used to deduce even more data, and, +using the CWA, even ask queries as to what is *not* in (or derivable +from) your database. + +Consider the following example in SQL in the well know business domain +(which many relational database systems examples use). Emp is a +relational table containing employee information, and dept contains data +on departmens of a company in which the employees work. + +> SELECT e.name, e.salary, d.location +> FROM emp e, dept d +> WHERE e.dept = d.dept_id +> AND e.salary > 31000; + +When the relational tables are encoded as a facts base, we can rewrite +the above query into a datalog rule: + +> emp("Jones", 30000, 35, "Accounting"). +> emp("Miller", 38000, 29, "Marketing"). +> emp("Koch", 2000000, 24, "IT"). +> emp("Nguyen", 35000, 42, "Marketing"). +> emp("Gruber", 32000, 39, "IT"). +> +> dept("IT", "Atlanta"). +> dept("Marketing", "New York"). +> dept("Accounting", "Los Angeles"). +> +> q1(Ename, Esalary, Dlocation) :- emp(Ename, Esalary, _, D), dept(D, Dlocation), +> Esalary > 31000. + +As you can see, joins are achieved via variable binding (we use the same +variable D both in emp and in dept), selections can for example be +achieved by the comparison operators, and projections (i.e. where +unwanted data columns are excluded from a query result) can be +accomplished by using \_ or an unbound variable. + +You can use `DLV` to ask all the queries that are possible in the core +SQL language. Furthermore, (as you will see when the full expressive +power of `DLV` is unveiled later in this tutorial) you can also encode +many useful queries that cannot be expressed in SQL. + +This example used another feature of `DLV` that has not been introduced +yet: comparison operators. `DLV` supports the operators \<, \>, \>=, +\<=, and = for integers, floating point values, and strings. This is an +extension that is not part of basic datalog, but it is convenient and +also compatible with the philosophy of datalog, as you can think of an +expression X \> Y as a predicate `greater_than(X,Y)` for which the facts +base of all the greater-than relationships between constant symbols in +your program are automatically generated. Therefore, we call these +comparison operators *built-in predicates*. + +Note that you could also rewrite `q1` to use the operator = for the +join. The rule below obtains the same result as the one shown earlier: + +> q1(Ename, Esalary, Dlocation) :- emp(Ename, Esalary, _, D1), +> dept(D2, Dlocation), D1 = D2, +> Esalary > 31000. + +[Download example +program.](http://www.dlvsystem.com/tutorial/examples/emp.dl) + +------------------------------------------------------------------------ + +### The Railway Crossing Example : True Negation and Negation as Finite Failure + +**`DLV`** supports *two* kinds of negation. Here, we emphasize the +difference between explicitly expressing the falseness of an atom and +having it done by the *Complete World Assumption*. The following program +uses the CWA. It has the model `{cross}` because train_approaching is +assumed to be false (as it being true is not stated anywhere). This kind +of negation is called *negation as (finite) failure* or *naf*. + +> cross :- not train_approaching. + +The next program uses so-called *true* or *classical negation*. Since +`-train_approaching` is not known to be true, the following program has +only an empty model. + +> cross :- -train_approaching. + +The difference between the two kinds of negation is quite important: In +the first example, we cross the railroad track if we have no information +on any trains approaching, which is quite dangerous, while in the second +example, we only cross if we know for sure that no train comes. In +particular, the left side of the previous rule will only be true if + +> -train_approaching. + +is in the facts base of the program. + +True negation is stronger than negation as finite failure. If something +is true via true negation, it is always also true if negated by negation +as finite failure. For example, the program + +> cross :- not train_approaching. +> -train_approaching. + +has the model `{cross, -train_approaching}`. + +Using True Negation also allows to build programs that are contradictory +and have no models. Consider the following example: + +> cross. +> -cross. + +Certainly, this program cannot have a model. This is very different from +a program that has an empty model, which would just mean that the +program represents a possible situation but that all of its atoms are +assumed to be false. + +------------------------------------------------------------------------ + +### The Broken Arm Example : Disjunctive Datalog and the Stable Model Semantics + +Suppose you have met a friend recently and you know that he had one of +his arms broken, but you don\'t know which one. Now you didn\'t receive +a greeting card for your birthday and wonder if you should be angry on +him or if he just cannot write because of his broken arm. Finally, you +know that he writes with his right hand. The following **DLV** program +computes the two possible explanations for the observations you made. + +> left_arm_broken v right_arm_broken. +> can_write :- left_arm_broken. +> be_angry :- can_write. + +The first rule is called a disjunctive rule; The v is read as \"or\" and +the whole rule is read as \"For sure, either the left or the right arm +is broken.\" As we can see here, a disjunctive rule may (but does not +have to) have an empty body (= lack a body). It is still called a rule, +since it is certainly not a fact. (It is unknown if the left or the +right arm is broken.) + +Being able to process incomplete information (i.e. being unsure if the +left or the right arm is broken) is one of the great strengths of +**`DLV`**. The resulting models of this query are +`{left_arm_broken, can_write, be_angry}` and `{right_arm_broken}`. + +In fact, the disjunction `left_arm_broken v right_arm_broken.` also +allows both `left_arm_broken` and `right_arm_broken` to be true at the +same time. Still, **`DLV`** does not output the model +`{left_arm_broken, right_arm_broken, can_write, be_angry}` due to the +computing paradigm that it uses to cope with uncertainty, and which is +called the *Stable Model Semantics*. Under this semantics, a model is +not stable if there is a smaller model which is a subset of it (which is +the case for both stable models shown above with respect to the \"big\" +model containing `left_arm_broken` and `right_arm_broken`). While this +might seem complicated, it is a very powerful feature of **`DLV`** which +is very useful for all kinds of reasoning. We will come back to this +later in this tutorial. (For the moment, we want to emphasize that this +one \"big\" model which is not stable would be obviously wrong in this +application.) + +Note that the same uncertainty can also be expressed by the following +program: + +> left_arm_broken :- not right_arm_broken. +> right_arm_broken :- not left_arm_broken. +> can_write :- left_arm_broken. +> be_angry :- can_write. + +This program results in the same pair of models. The method used here is +called *Unstratified Negation* and is considered less elegant than the +first method. Also, there are certain interesting reasoning problems +that **`DLV`** can solve and which can only be expressed with true +disjunction but not with unstratified negation. + +Finally, please note that rule bodies may either contain positive +(nonnegated) atoms, atoms negated by true negation, and atoms negated by +negation as failure, while rule heads may only contain positive atoms +and true negation, but no negation as failure. In other words, a rule +such as + +> not a :- b. % INVALID !!! + +is *not* valid! (The % sign in a **`DLV`** program starts a comment +which goes to the right to the end of the line.) + +------------------------------------------------------------------------ + +### Strong Constraints + +**`DLV`** also supports integrity constraints (strong constraints). A +constraint is a rule with an empty head. If its body is true (which is +of course the case exactly if all the literals in the body are true at +the same time), a model is made inconsistent and is removed. For +example, in the family tree example which was presented earlier, we can +easily write an integrity constraint to assure that the facts base does +not erroneously contain contradicting facts saying that a person is male +and female at the same time. + +> :- male(X), female(X). + +This kind of constraints is called *strong constraints* because there is +also a different kind (*weak constraints*) supported by **`DLV`** which +is not addressed in this tutorial. This other kind of constraints is +very useful to solve optimization problems. + +------------------------------------------------------------------------ + +### Graph Coloring: Guess&Check Programming + +Graph 3-colorability is a hard (NP-complete) problem. It is the problem +of deciding if there exists a coloring of a map of countries +corresponding to the given graph using no more than three colors in +which no two neighbour countries (nodes connected by an arc) have the +same color. It is known that every map can be colored given these +constraints if four colors are available. + ++-----------------------------------+-----------------------------------+ +| ![](http://www.dlv | > node(minnesota). | +| system.com/tutorial/midwest2.gif) | > node(wisconsin). | +| | > node(illinois). | +| | > node(iowa). | +| | > node(indiana). | +| | > node(michigan). | +| | > node(ohio). | +| | > | +| | > arc(minnesota, wisconsin). | +| | > arc(illinois, iowa). | +| | > arc(illinois, michigan). | +| | > arc(illinois, wisconsin). | +| | > arc(illinois, indiana). | +| | > arc(indiana, ohio). | +| | > arc(michigan, indiana). | +| | > arc(michigan, ohio). | +| | > arc(michigan, wisconsin). | +| | > arc(minnesota, iowa). | +| | > arc(wisconsin, iowa). | +| | > arc(minnesota, michigan). | ++-----------------------------------+-----------------------------------+ + +This problem can now be solved with a very simple datalog program, in +which we first guess a coloring by using a disjunctive rule and then +check it by adding a (strong) constraint which deletes all those +colorings that do not satisfy our requirements (that there may be no arc +between two nodes of equal color): + +> % guess coloring +> col(Country, red) v col(Country, green) v col(Country, blue) :- node(Country). +> +> % check coloring +> :- arc(Country1, Country2), col(Country1, CommonColor), col(Country2, CommonColor). + +This problem instance has 6 solutions (stable models), therefore, it is +3-colorable. Below, one solution is shown, in which the facts base has +again be removed for better readability: + +> {col(minnesota,green), col(wisconsin,red), col(illinois,green), +> col(iowa,blue), col(indiana,red), col(michigan,blue), col(ohio,green)} + +This method (guess&check programming) allows to encode a large number of +complicated problems in an intuitive way. **`DLV`** can then use such an +encoding to solve the problems surprisingly efficiently. + +[Download example +program.](http://www.dlvsystem.com/tutorial/examples/3col.dl) + +As an exercise, you can use **`DLV`** to prove that a [map of Germany, +Belgium, Luxembourg and +France](http://www.dlvsystem.com/tutorial/benelux.jpg) is not +3-colorable. + +------------------------------------------------------------------------ + +### The Fibonacci Example: Built-in Predicates and Integer Arithmetics + +Note that this section introduces some features of **`DLV`** which are +not part of standard datalog. + +In the following example, the Fibonacci function is defined, which is +relevant in areas as disparate as Chaos Theory and Botanics. Its starts +with the following values: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, +233, 377, \... (Apart from the first two values, each value is defined +as the sum of the previous two.) + +> true. +> fibonacci(1, 1) :- true. +> fibonacci(1, 2) :- true. +> fibonacci(F, Index) :- +(F1, F2, F), +> fibonacci(F1, Index1), +> fibonacci(F2, Index2), +> #succ(Index1, Index2), +> #succ(Index2, Index). + +This program uses the built-in predicates `+` (which adds or subtracts +integer numbers) and `#succ` (the successor function). Note that for +better readability, it is also correct to write `F = F1 + F2` instead of +`+(F1, F2, F)` and `Index2 = Index1 + 1` instead of +`#succ(Index1, Index2)`. Still, these simple equations always map to the +built-in predicates and may not be extended any further. (It is not +allowed to write `A = B + C + D`, this has to be split into two parts.) + +The second topic that has to be discussed at this point is why the fact +`true.` was introduced. The reason for this is the strong separation +that is made between EDB and IDB predicates. Since `fibonacci` is used +on the left-hand side of a rule, it is in the IDB. IDB predicates cannot +be used in facts (because then they would have to be in the EDB). +Because of that, a fact is introduced and rules are built that are +always true and are therefore equivalent to facts. Note that this +distinction between IDB and EDB predicates is not necessary anymore in +the most recent versions of **`DLV`**. Therefore, you can now declare +`fibonacci(1, 1)` and `fibonacci(1, 2)` simply as facts. + +Whenever integer arithmetics are used, the range of possible values has +to be restricted, since **`DLV`** requires the space of possible +solutions to be finite. This is done by invoking **`DLV`** with the +option `-N`. (For a full description of **`DLV`** usage, refer to the +[**`DLV`** manual](http://www.dlvsystem.com/man/).) For example, +invoking **`DLV`** with + +> dl -N=100 fibonacci.dl + +results in the model + +> {true, fibonacci(1,1), fibonacci(1,2), fibonacci(2,3), fibonacci(3,4), +> fibonacci(5,5), fibonacci(8,6), fibonacci(13,7), fibonacci(21,8), +> fibonacci(34,9), fibonacci(55,10), fibonacci(89,11)} + +These are all the Fibonacci numbers not greater than 100. + +[Download example +program.](http://www.dlvsystem.com/tutorial/examples/fibonacci.dl) + +![](http://www.dlvsystem.com/tutorial/fibSpiralANIM.gif) +![](http://www.dlvsystem.com/tutorial/fibspiral2.GIF) +![](http://www.dlvsystem.com/tutorial/shell.gif){width="84" +height="120"}\ +Click +[here](http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/fib.html) +for some interesting material on Fibonacci numbers. + +------------------------------------------------------------------------ + +### The 8-Queens Example: Guess&Check Programming with Integers + +The 8 queens problem asks for a solution in which 8 queens are placed on +a 8 x 8 chess board without threatening eachother. A queen threatens +another if it is in the same row, column, or on a diagonal. + +> % guess horizontal position for each row +> q(X,1) v q(X,2) v q(X,3) v q(X,4) v q(X,5) v q(X,6) v q(X, 7) v q(X,8) :- #int(X), X > 0. +> +> % check +> +> % assert that each column may only contain (at most) one queen +> :- q(X1,Y), q(X2,Y), X1 <> X2. +> +> % assert that no two queens are in a diagonal from top left to bottom right +> :- q(X1,Y1), q(X2,Y2), X2=X1+N, Y2=Y1+N, N > 0. +> +> % assert that no two queens are in a diagonal from top right to bottom left +> :- q(X1,Y1), q(X2,Y2), X2=X1+N, Y1=Y2+N, N > 0. + +To run this program with **`DLV`**, type the following: + +> dl -n=1 -N=8 8queens.dl + +This will return a result like + +> {q(1,3), q(2,7), q(3,2), q(4,8), q(5,5), q(6,1), q(7,4), q(8,6)} + +To get all 92 correct solutions, type + +> dl -N=8 8queens.dl + +[Download example +program.](http://www.dlvsystem.com/tutorial/examples/8queens.dl) + +------------------------------------------------------------------------ + +### A simple Physics Diagnosis example + +We will now show how to use **`DLV`** to do diagnosis. We choose a +physics application domain, a simplified version of ECAL +pre-calibration. ![](http://www.dlvsystem.com/tutorial/h4.gif)\ +As shown in the picture, a test beam is directed onto a scintillating +crystal whose light emission is measured by an avalanche photodiode +(APD). The measurement is then read with some readout electronics. +Alternatively to the beam reading, the APD can receive a test pulse +signal, which allows to check the correct functioning of the APD +independently from the crystal. The following program allows to +automatically diagnose malfunctioning parts: + +> ok(testpulse_reading). +> ok(beam_reading). +> +> good(crystal) v bad(crystal). +> good(apd) v bad(apd). +> +> :- good(X), bad(X). +> +> good(crystal) :- ok(beam_reading). +> good(apd) :- ok(beam_reading). +> bad(apd) v bad(crystal) :- not ok(beam_reading). +> good(apd) :- ok(testpulse_reading). +> bad(apd) :- not ok(testpulse_reading). + +The program starts with two facts expressing our observations. Here, +both the testpulse reading and the beam reading were found to be +correct; below, we will evaluate the program with different +observations. The following two rules tell the system that crystals and +APDs are either working or broken. After this follows a constraint that +assures that they cannot be both at the same time. Finally, there are +five rules that are a collection of expert knowledge. They model the +knowledge about the domain and show quite clearly why the test pulse is +available as a separate input to the APDs: it allows to find out if the +APD works correctly without having to make any assumptions about the +crystal. If the reaout of the beam on the other hand were not correct, +one could not be sure if the responsible part is the crystal or the APD. + +Here, the unique result is the model `{good(crystal), good(apd)}`. +Suppose we exchange the two EDB facts (the first two lines of this +program) to `ok(testpulse_reading).` then the result changes to +`{good(apd), bad(crystal)}`. The whole set of different cases is shown +in the following table: + + ---------------------------------------------- --------------------------------------------------------- + **EDB** **Model(s)** + `{ok(testpulse_reading). ok(beam_reading).}` `{good(crystal), good(apd)}` + `{ok(testpulse_reading).}` `{good(apd), bad(crystal)}` + `{ok(beam_reading).}` no model + `{}` `{bad(apd), good(crystal)}, {bad(apd), bad(crystal)} ` + ---------------------------------------------- --------------------------------------------------------- + +The case that the facts base is `{ok(beam_reading).}` is also +interesting: According to our program, if `ok(beam_reading)` is true, +`ok(testpulse_reading)` also has to be true. Therefore, there is no +consistent model in this case. In other words, according to our program, +such observations cannot be made. + +------------------------------------------------------------------------ + +### A different way to implement the Physics Diagnosis example + +The way to do diagnosis that was presented in the previous section has +two drawbacks: It requires that more knowledge than necessary has to be +coded in the program, and resulting from this, the program does not +really do anything original. Also, it it hard to extend. Here, we show a +different (better) way to do diagnosis in the same application domain. +We represent the system as a graph of its units: + +> connected(beam, crystal). +> connected(crystal, apd). +> connected(testpulse_injector, apd). +> connected(apd, readout). +> +> good_path(X,Y) :- not bad(X), not bad(Y), connected(X, Y). +> good_path(X,Z) :- good_path(X,Y), good_path(Y, Z). +> +> bad(crystal) v bad(apd). +> +> testpulse_readout_ok :- good_path(testpulse_injector, readout). +> beam_readout_ok :- good_path(beam, readout). + +In this example program, we have left away all the possible +observations, which we implement as constraints, as shown in the +following table: + + ----------------------------------------------------------- ------------------------------------------------------ + **Observations (Constraints)** **Model(s) (good_path predicates omitted)** + `{}` ` {bad(crystal), testpulse_readout_ok}, {bad(apd)}` + `{:- testpulse_readout_ok.}` `{bad(apd)}` + `{:- beam_readout_ok.}` ` {bad(crystal), testpulse_readout_ok}, {bad(apd)}` + `{:- beam_readout_ok. :- testpulse_readout_ok.}` `{bad(apd)}` + `{:- not testpulse_readout_ok.}` ` {bad(crystal), testpulse_readout_ok}` + `{:- not beam_readout_ok.}` no model + `{:- not beam_readout_ok. :- not testpulse_readout_ok.}` no model + ----------------------------------------------------------- ------------------------------------------------------ + +[Download example +program.](http://www.dlvsystem.com/tutorial/examples/diagnosis.dl) + +------------------------------------------------------------------------ + +### The Monkey&Banana Example: Planning + +The following example shall give an idea of how **`DLV`** can be used to +do planning. + +Please note that there is a `DLV` planning frontend that uses a +convenient special-purpose planning language and which is not described +in this tutorial. Instead, we use plain disjunctive datalog for solving +planning problems here. If you are interested in this frontend, please +refer to the [**`DLV`** homepage](http://www.dlvsystem.com) for further +information. + +Consider the following classic planning problem. A monkey is in a room +with a chair and a banana which is fixed to the ceiling. The monkey +cannot reach the banana unless it stands on the chair; it is simply too +high up. The chair is now at a position different from the place where +the banana is hung up, and the monkey itself initially is at again a +different place. + +Since the program is quite long compared to the earlier examples, it +will be explained step by step. + +> walk(Time) v move_chair(Time) v ascend(Time) v idle(Time) :- #int(Time). + +At each discrete point in time, the monkey performs one of the following +for actions: it walks, it moves the chair (while doing this, it also +moves through the room), it climbs up the chair, or it does nothing. +#int is again a built-in predicate which is true exactly if its argument +is an integer value. + +> monkey_motion(T) :- walk(T). +> monkey_motion(T) :- move_chair(T). +> +> stands_on_chair(T2) :- ascend(T), T2 = T + 1. +> :- stands_on_chair(T), ascend(T). +> :- stands_on_chair(T), monkey_motion(T). +> stands_on_chair(T2) :- stands_on_chair(T), T2 = T + 1. + +After climbing up the chair, it is on it. If is is already on it, it +cannot climb up any further. While on the chair, it cannot walk around. +If it was on the chair earlier, it will be there in the future. + +> chair_at_place(X, T2) :- chair_at_place(X, T1), T2 = T1 + 1, not move_chair(T1). +> chair_at_place(Pos, T2) :- move_chair(T1), T2 = T1 + 1, +> monkey_at_place(Pos, T2). + +If the chair is not moved, it will stay at the same place. If the monkey +moves the chair, it changes its position. + +> monkey_at_place(monkey_starting_point, T) v +> monkey_at_place(chair_starting_point, T) v +> monkey_at_place(below_banana, T) :- #int(T). + +The monkey is somewhere in the room. (For simplicity, only three +positions are possible.) + +> :- monkey_at_place(Pos1, T2), monkey_at_place(Pos2, T1), +> T2 = T1 + 1, Pos1 != Pos2, not monkey_motion(T1). +> +> :- monkey_at_place(Pos, T2), monkey_at_place(Pos, T1), T2 = T1 + 1, +> monkey_motion(T1). +> +> :- ascend(T), monkey_at_place(Pos1, T), chair_at_place(Pos2, T), Pos1 != Pos2. +> +> :- move_chair(T), monkey_at_place(Pos1, T), chair_at_place(Pos2, T), +> Pos1 != Pos2. + +The monkey cannot change its position without moving. The monkey cannot +stay at the same place if it moves. It cannot climb up the chair if it +is somewhere else. It cannot move the chair if it is somewhere else. + +> monkey_at_place(monkey_starting_point, 0) :- true. +> chair_at_place(chair_starting_point, 0) :- true. +> true. + +Initially, the monkey and the chair are at different positions. + +> can_reach_banana :- stands_on_chair(T), chair_at_place(below_banana, T). +> eats_banana :- can_reach_banana. +> happy :- eats_banana. +> +> :- not happy. + +The monkey can only reach the banana if it stands on the chair and the +chair is below the banana. If it can reach the banana, it will eat it, +and this will make it happy. Our goal is to make the monkey happy. + +> step(N, walk, Destination) :- walk(N), monkey_at_place(Destination, N2), +> N2 = N + 1. +> step(N, move_chair, Destination) :- move_chair(N), +> monkey_at_place(Destination, N2), +> N2 = N + 1. +> step(N, ascend, " ") :- ascend(N). + +The step rules collect all the things we can derive from the situation +and build a consistent plan. (There is no step rule for the action idle +since we are not interested in it.) + +This program again uses integer arithmetics; to find a plan, the maximum +integer variable has to be set to at least 3: + +> dl -N=3 banana.dl + +This results in the following model (If N is set to a value greater than +3, **`DLV`** will find other plans that make the monkey happy.) + +> {chair_at_place(chair_starting_point,0), +> monkey_at_place(monkey_starting_point,0), +> monkey_at_place(chair_starting_point,1), +> monkey_at_place(below_banana,2), +> monkey_at_place(below_banana,3), +> walk(0), move_chair(1), ascend(2), idle(3), +> chair_at_place(chair_starting_point,1), +> chair_at_place(below_banana,2), +> chair_at_place(below_banana,3), +> monkey_motion(0), monkey_motion(1), +> step(0,walk,chair_starting_point), +> step(1,move_chair,below_banana), +> step(2,ascend," "), +> stands_on_chair(3), can_reach_banana, eats_banana, happy} + +[Download example +program.](http://www.dlvsystem.com/tutorial/examples/banana.dl) + +------------------------------------------------------------------------ diff --git a/biblio/Special Issue on Answer Set Programming-Abstract.pdf b/biblio/Special Issue on Answer Set Programming-Abstract.pdf new file mode 100644 index 0000000..b3bc652 --- /dev/null +++ b/biblio/Special Issue on Answer Set Programming-Abstract.pdf @@ -0,0 +1,3631 @@ +%PDF-1.4 % +37 0 obj <> endobj +xref +37 752 +0000000016 00000 n +0000016343 00000 n +0000016541 00000 n +0000016575 00000 n +0000026030 00000 n +0000026055 00000 n +0000026212 00000 n +0000026360 00000 n +0000027561 00000 n +0000028755 00000 n +0000029955 00000 n +0000030739 00000 n +0000030846 00000 n +0000030955 00000 n +0000031229 00000 n +0000031837 00000 n +0000031934 00000 n +0000032526 00000 n +0000033228 00000 n +0000046162 00000 n +0000057464 00000 n +0000068055 00000 n +0000076415 00000 n +0000083842 00000 n +0000091290 00000 n +0000091435 00000 n +0000098386 00000 n +0000106230 00000 n +0000153523 00000 n +0000161087 00000 n +0000161156 00000 n +0000161240 00000 n +0000164725 00000 n +0000164987 00000 n +0000165161 00000 n +0000165186 00000 n +0000165598 00000 n +0000165686 00000 n +0000221165 00000 n +0000221432 00000 n +0000221989 00000 n +0000269949 00000 n +0000270238 00000 n +0000270755 00000 n +0000271711 00000 n +0000271748 00000 n +0000272433 00000 n +0000272614 00000 n +0000272908 00000 n +0000273084 00000 n +0000273702 00000 n +0000273883 00000 n +0000274063 00000 n +0000274668 00000 n +0000274849 00000 n +0000275459 00000 n +0000275639 00000 n +0000275820 00000 n +0000276001 00000 n +0000276182 00000 n +0000276362 00000 n +0000276543 00000 n +0000276722 00000 n +0000276903 00000 n +0000277085 00000 n +0000277266 00000 n +0000277448 00000 n +0000277629 00000 n +0000277811 00000 n +0000277993 00000 n +0000278175 00000 n +0000278357 00000 n +0000278539 00000 n +0000278720 00000 n +0000278901 00000 n +0000279082 00000 n +0000279262 00000 n +0000279442 00000 n +0000279624 00000 n +0000279806 00000 n +0000279988 00000 n +0000280169 00000 n +0000280351 00000 n +0000280533 00000 n +0000280714 00000 n +0000280895 00000 n +0000281075 00000 n +0000281256 00000 n +0000281438 00000 n +0000281619 00000 n +0000281801 00000 n +0000281982 00000 n +0000282164 00000 n +0000282346 00000 n +0000282527 00000 n +0000282708 00000 n +0000282890 00000 n +0000283072 00000 n +0000283252 00000 n +0000283433 00000 n +0000283616 00000 n +0000283798 00000 n +0000283982 00000 n +0000284166 00000 n +0000284349 00000 n +0000284534 00000 n +0000284718 00000 n +0000285323 00000 n +0000285507 00000 n +0000285689 00000 n +0000286274 00000 n +0000286457 00000 n +0000287051 00000 n +0000287235 00000 n +0000287809 00000 n +0000287992 00000 n +0000288177 00000 n +0000288361 00000 n +0000288543 00000 n +0000288727 00000 n +0000288909 00000 n +0000289093 00000 n +0000289277 00000 n +0000289459 00000 n +0000289643 00000 n +0000289827 00000 n +0000290010 00000 n +0000290194 00000 n +0000290376 00000 n +0000290559 00000 n +0000290743 00000 n +0000290927 00000 n +0000291111 00000 n +0000291295 00000 n +0000291477 00000 n +0000291660 00000 n +0000291842 00000 n +0000292024 00000 n +0000292207 00000 n +0000292391 00000 n +0000292575 00000 n +0000292759 00000 n +0000292941 00000 n +0000293125 00000 n +0000293309 00000 n +0000293491 00000 n +0000293674 00000 n +0000293856 00000 n +0000294039 00000 n +0000294222 00000 n +0000294405 00000 n +0000294589 00000 n +0000294772 00000 n +0000294956 00000 n +0000295140 00000 n +0000295324 00000 n +0000295506 00000 n +0000295690 00000 n +0000295874 00000 n +0000296058 00000 n +0000296242 00000 n +0000296426 00000 n +0000296610 00000 n +0000296794 00000 n +0000296977 00000 n +0000297159 00000 n +0000297342 00000 n +0000297969 00000 n +0000298153 00000 n +0000298334 00000 n +0000298515 00000 n +0000298699 00000 n +0000298881 00000 n +0000299064 00000 n +0000299247 00000 n +0000299431 00000 n +0000299613 00000 n +0000299797 00000 n +0000299980 00000 n +0000300163 00000 n +0000300345 00000 n +0000300529 00000 n +0000300712 00000 n +0000300896 00000 n +0000301077 00000 n +0000301261 00000 n +0000301445 00000 n +0000301628 00000 n +0000301811 00000 n +0000301995 00000 n +0000302178 00000 n +0000302359 00000 n +0000302542 00000 n +0000302725 00000 n +0000302907 00000 n +0000303089 00000 n +0000303273 00000 n +0000303455 00000 n +0000303639 00000 n +0000303823 00000 n +0000304007 00000 n +0000304190 00000 n +0000304372 00000 n +0000304556 00000 n +0000304740 00000 n +0000305332 00000 n +0000305514 00000 n +0000306091 00000 n +0000306273 00000 n +0000306851 00000 n +0000307033 00000 n +0000307215 00000 n +0000307785 00000 n +0000307967 00000 n +0000308149 00000 n +0000308331 00000 n +0000308513 00000 n +0000308695 00000 n +0000308876 00000 n +0000309058 00000 n +0000309238 00000 n +0000309419 00000 n +0000309600 00000 n +0000309781 00000 n +0000309963 00000 n +0000310145 00000 n +0000310326 00000 n +0000310507 00000 n +0000310689 00000 n +0000310871 00000 n +0000311052 00000 n +0000311234 00000 n +0000311414 00000 n +0000311596 00000 n +0000311777 00000 n +0000311958 00000 n +0000312140 00000 n +0000312320 00000 n +0000312500 00000 n +0000312681 00000 n +0000312862 00000 n +0000313044 00000 n +0000313226 00000 n +0000313408 00000 n +0000313590 00000 n +0000313772 00000 n +0000313954 00000 n +0000314136 00000 n +0000314318 00000 n +0000314500 00000 n +0000314682 00000 n +0000314864 00000 n +0000315046 00000 n +0000315226 00000 n +0000315406 00000 n +0000315588 00000 n +0000315770 00000 n +0000315951 00000 n +0000316133 00000 n +0000316314 00000 n +0000316495 00000 n +0000316677 00000 n +0000316857 00000 n +0000317039 00000 n +0000317221 00000 n +0000317403 00000 n +0000317585 00000 n +0000317767 00000 n +0000317948 00000 n +0000318128 00000 n +0000318310 00000 n +0000318491 00000 n +0000318673 00000 n +0000318855 00000 n +0000319036 00000 n +0000319217 00000 n +0000319399 00000 n +0000319580 00000 n +0000319762 00000 n +0000319944 00000 n +0000320126 00000 n +0000320307 00000 n +0000320489 00000 n +0000320671 00000 n +0000320853 00000 n +0000321035 00000 n +0000321216 00000 n +0000321398 00000 n +0000321579 00000 n +0000321761 00000 n +0000321943 00000 n +0000322125 00000 n +0000322306 00000 n +0000322485 00000 n +0000322666 00000 n +0000322848 00000 n +0000323029 00000 n +0000323211 00000 n +0000323392 00000 n +0000323574 00000 n +0000324127 00000 n +0000324311 00000 n +0000324853 00000 n +0000325036 00000 n +0000325586 00000 n +0000325770 00000 n +0000326306 00000 n +0000326489 00000 n +0000326674 00000 n +0000327217 00000 n +0000327401 00000 n +0000327583 00000 n +0000328108 00000 n +0000328291 00000 n +0000328817 00000 n +0000329001 00000 n +0000329529 00000 n +0000329712 00000 n +0000329897 00000 n +0000330081 00000 n +0000330265 00000 n +0000330447 00000 n +0000330630 00000 n +0000330814 00000 n +0000330998 00000 n +0000331179 00000 n +0000331362 00000 n +0000331546 00000 n +0000331728 00000 n +0000331912 00000 n +0000332095 00000 n +0000332277 00000 n +0000332460 00000 n +0000332643 00000 n +0000332826 00000 n +0000333010 00000 n +0000333192 00000 n +0000333375 00000 n +0000333558 00000 n +0000333740 00000 n +0000333923 00000 n +0000334107 00000 n +0000334291 00000 n +0000334475 00000 n +0000334659 00000 n +0000334843 00000 n +0000335027 00000 n +0000335209 00000 n +0000335391 00000 n +0000335575 00000 n +0000335759 00000 n +0000335943 00000 n +0000336126 00000 n +0000336310 00000 n +0000336493 00000 n +0000336676 00000 n +0000336857 00000 n +0000337041 00000 n +0000337223 00000 n +0000337407 00000 n +0000337590 00000 n +0000337773 00000 n +0000337955 00000 n +0000338138 00000 n +0000338322 00000 n +0000338504 00000 n +0000338688 00000 n +0000338871 00000 n +0000339054 00000 n +0000339235 00000 n +0000339419 00000 n +0000339602 00000 n +0000339785 00000 n +0000339969 00000 n +0000340153 00000 n +0000340335 00000 n +0000340518 00000 n +0000340702 00000 n +0000340886 00000 n +0000341069 00000 n +0000341249 00000 n +0000341431 00000 n +0000341614 00000 n +0000341797 00000 n +0000341980 00000 n +0000342163 00000 n +0000342346 00000 n +0000342528 00000 n +0000342711 00000 n +0000342895 00000 n +0000343077 00000 n +0000343259 00000 n +0000343442 00000 n +0000343624 00000 n +0000343808 00000 n +0000343992 00000 n +0000344176 00000 n +0000344360 00000 n +0000344544 00000 n +0000344728 00000 n +0000344912 00000 n +0000345096 00000 n +0000345278 00000 n +0000345460 00000 n +0000345644 00000 n +0000345828 00000 n +0000346012 00000 n +0000346196 00000 n +0000346379 00000 n +0000346562 00000 n +0000346745 00000 n +0000346928 00000 n +0000347111 00000 n +0000347294 00000 n +0000347475 00000 n +0000347659 00000 n +0000347841 00000 n +0000348023 00000 n +0000348205 00000 n +0000348389 00000 n +0000348572 00000 n +0000348754 00000 n +0000348936 00000 n +0000349120 00000 n +0000349303 00000 n +0000349484 00000 n +0000349667 00000 n +0000349849 00000 n +0000350033 00000 n +0000350217 00000 n +0000350401 00000 n +0000350585 00000 n +0000350768 00000 n +0000350952 00000 n +0000351136 00000 n +0000351320 00000 n +0000351499 00000 n +0000351682 00000 n +0000351865 00000 n +0000352049 00000 n +0000352231 00000 n +0000352415 00000 n +0000352598 00000 n +0000352782 00000 n +0000352965 00000 n +0000353147 00000 n +0000353329 00000 n +0000353511 00000 n +0000353694 00000 n +0000353877 00000 n +0000354061 00000 n +0000354244 00000 n +0000354428 00000 n +0000354611 00000 n +0000354794 00000 n +0000354978 00000 n +0000355161 00000 n +0000355345 00000 n +0000355526 00000 n +0000355710 00000 n +0000355894 00000 n +0000356077 00000 n +0000356260 00000 n +0000356443 00000 n +0000356627 00000 n +0000356811 00000 n +0000356993 00000 n +0000357175 00000 n +0000357359 00000 n +0000357541 00000 n +0000357724 00000 n +0000357908 00000 n +0000358092 00000 n +0000358276 00000 n +0000358460 00000 n +0000358644 00000 n +0000358827 00000 n +0000359010 00000 n +0000359193 00000 n +0000359377 00000 n +0000359558 00000 n +0000359742 00000 n +0000359925 00000 n +0000360109 00000 n +0000360291 00000 n +0000360472 00000 n +0000360654 00000 n +0000360835 00000 n +0000361018 00000 n +0000361555 00000 n +0000361737 00000 n +0000362265 00000 n +0000362445 00000 n +0000362627 00000 n +0000363160 00000 n +0000363342 00000 n +0000363867 00000 n +0000364047 00000 n +0000364230 00000 n +0000364412 00000 n +0000364594 00000 n +0000364775 00000 n +0000364956 00000 n +0000365137 00000 n +0000365319 00000 n +0000365501 00000 n +0000365683 00000 n +0000365864 00000 n +0000366046 00000 n +0000366227 00000 n +0000366409 00000 n +0000366590 00000 n +0000366772 00000 n +0000366952 00000 n +0000367133 00000 n +0000367315 00000 n +0000367497 00000 n +0000367679 00000 n +0000367860 00000 n +0000368042 00000 n +0000368223 00000 n +0000368404 00000 n +0000368586 00000 n +0000368768 00000 n +0000368950 00000 n +0000369132 00000 n +0000369314 00000 n +0000369496 00000 n +0000369677 00000 n +0000369859 00000 n +0000370041 00000 n +0000370222 00000 n +0000370404 00000 n +0000370585 00000 n +0000370767 00000 n +0000370947 00000 n +0000371129 00000 n +0000371309 00000 n +0000371491 00000 n +0000371673 00000 n +0000371855 00000 n +0000372036 00000 n +0000372218 00000 n +0000372398 00000 n +0000372580 00000 n +0000372762 00000 n +0000372944 00000 n +0000373126 00000 n +0000373308 00000 n +0000373490 00000 n +0000373672 00000 n +0000373854 00000 n +0000374036 00000 n +0000374218 00000 n +0000374400 00000 n +0000374582 00000 n +0000374763 00000 n +0000374944 00000 n +0000375126 00000 n +0000375308 00000 n +0000375489 00000 n +0000375670 00000 n +0000375851 00000 n +0000376032 00000 n +0000376214 00000 n +0000376396 00000 n +0000376578 00000 n +0000376760 00000 n +0000376942 00000 n +0000377124 00000 n +0000377306 00000 n +0000377488 00000 n +0000377670 00000 n +0000377852 00000 n +0000378034 00000 n +0000378216 00000 n +0000378398 00000 n +0000378580 00000 n +0000378762 00000 n +0000378943 00000 n +0000379125 00000 n +0000379307 00000 n +0000379489 00000 n +0000379671 00000 n +0000379853 00000 n +0000380035 00000 n +0000380217 00000 n +0000380399 00000 n +0000380581 00000 n +0000380763 00000 n +0000380945 00000 n +0000381127 00000 n +0000381309 00000 n +0000381489 00000 n +0000381671 00000 n +0000381853 00000 n +0000382033 00000 n +0000382215 00000 n +0000382396 00000 n +0000382578 00000 n +0000382759 00000 n +0000382940 00000 n +0000383120 00000 n +0000383302 00000 n +0000383483 00000 n +0000383664 00000 n +0000383845 00000 n +0000384025 00000 n +0000384207 00000 n +0000384389 00000 n +0000384571 00000 n +0000384752 00000 n +0000384932 00000 n +0000385114 00000 n +0000385296 00000 n +0000385478 00000 n +0000385660 00000 n +0000385842 00000 n +0000386023 00000 n +0000386204 00000 n +0000386385 00000 n +0000386565 00000 n +0000386745 00000 n +0000386926 00000 n +0000387107 00000 n +0000387288 00000 n +0000387470 00000 n +0000387651 00000 n +0000387833 00000 n +0000388014 00000 n +0000388196 00000 n +0000388378 00000 n +0000388560 00000 n +0000388741 00000 n +0000388922 00000 n +0000389102 00000 n +0000389283 00000 n +0000389464 00000 n +0000389645 00000 n +0000389826 00000 n +0000390008 00000 n +0000390190 00000 n +0000390372 00000 n +0000390553 00000 n +0000390735 00000 n +0000390917 00000 n +0000391099 00000 n +0000391281 00000 n +0000391461 00000 n +0000391643 00000 n +0000391824 00000 n +0000392006 00000 n +0000392188 00000 n +0000392369 00000 n +0000392551 00000 n +0000392733 00000 n +0000392915 00000 n +0000393096 00000 n +0000393278 00000 n +0000393460 00000 n +0000393642 00000 n +0000393823 00000 n +0000394005 00000 n +0000394186 00000 n +0000394368 00000 n +0000394550 00000 n +0000394732 00000 n +0000394914 00000 n +0000395095 00000 n +0000395277 00000 n +0000395459 00000 n +0000395641 00000 n +0000395823 00000 n +0000396005 00000 n +0000396187 00000 n +0000396369 00000 n +0000396551 00000 n +0000396733 00000 n +0000396915 00000 n +0000397097 00000 n +0000397278 00000 n +0000397460 00000 n +0000397642 00000 n +0000397824 00000 n +0000398006 00000 n +0000398188 00000 n +0000398369 00000 n +0000398550 00000 n +0000398732 00000 n +0000398914 00000 n +0000399096 00000 n +0000399278 00000 n +0000399460 00000 n +0000399642 00000 n +0000399823 00000 n +0000400005 00000 n +0000400186 00000 n +0000400368 00000 n +0000400550 00000 n +0000400732 00000 n +0000400914 00000 n +0000401095 00000 n +0000401277 00000 n +0000402924 00000 n +0000403207 00000 n +0000403703 00000 n +0000404914 00000 n +0000408341 00000 n +0000408602 00000 n +0000409020 00000 n +0000410466 00000 n +0000410872 00000 n +0000411150 00000 n +0000411593 00000 n +0000411643 00000 n +0000415018 00000 n +0000415430 00000 n +0000415480 00000 n +0000416002 00000 n +0000416220 00000 n +0000416447 00000 n +0000416674 00000 n +0000416886 00000 n +0000417122 00000 n +0000417358 00000 n +0000417576 00000 n +0000417803 00000 n +0000418030 00000 n +0000418248 00000 n +0000418508 00000 n +0000418557 00000 n +0000418978 00000 n +0000419196 00000 n +0000419414 00000 n +0000419632 00000 n +0000420753 00000 n +0000421311 00000 n +0000421361 00000 n +0000422049 00000 n +0000423473 00000 n +0000424226 00000 n +0000424276 00000 n +0000425016 00000 n +0000425235 00000 n +0000425284 00000 n +0000425583 00000 n +0000426533 00000 n +0000426760 00000 n +0000426884 00000 n +0000426955 00000 n +0000427102 00000 n +0000015336 00000 n +trailer +<<815A9FDA6798374891628AEDE8067D2F>]/Prev 750630>> +startxref +0 +%%EOF + +788 0 obj <>stream +h޴TAhTGfMMjly"9 ^ â{BVAZd_(x#xJ}GQAf7ykۓ???o &$cd%{OėXΑbZnk^|yiu?`bԆ+9r k4}솈En,|,[gM2pGfK0!==!_+`=]Ϲ.uSŀ5fu0Ϗ#"fp +BTC*KSN, +HQ31PK- :I^%ECg|𴥦#Ξa Zz9*#t]EKbgOK%Ԇ>NM=h !stvph1_GTԶ5u O&KM#u媤:.K;6|Oc +eZo$hNG>}<0}Px: +8Fc^C_Nsl8yH 0 +endstream endobj 38 0 obj <>>> endobj 39 0 obj <> endobj 40 0 obj <>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/Rotate 0/Thumb 25 0 R/Type/Page>> endobj 41 0 obj [42 0 R] endobj 42 0 obj <>/BS<>/Border[0 0 0]/F 4/H/N/Rect[485.185 721.788 546.143 695.11]/Subtype/Link/Type/Annot>> endobj 43 0 obj <>>>/Subtype/Form/Type/XObject>>stream +xS!! +endstream endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <>stream +HTM@ WLHH +!$e+Uzf MK&$_{JUEߌgaFX@]({U4lJG _ij/1˛;$zֿIp᷷ۯWkAyF_KAysAM0rѵɉ)٬,:Ɲ61՞rg}'PInMG׺bNHg۪ +1~AP7*,NX8[;g=VH8,@ޣ.@oO}V > endobj 53 0 obj <> endobj 54 0 obj <>stream +HTۊ0}WC$%rݤPHrJ~5:B̌1n +*/di?!3gy~Lv=/U;,]PQmZsY"tWXƦvi+cMFZ:/NwahwUu649;Sh^ ;Z=ԦRe8o9ejN:4l!mzzzzzzzzz9H; ~څ>WoYDut8ya.=kVO[UNh +endstream endobj 55 0 obj <>stream +HWݒ۶whDg%NǍMkM=JX5Vy$'e-36)l']|U[8N|=SmCcfJw.4B2HSk4`a?l+*0T @ +M$#F"v`_m& i(Ľ|5lҚ(R̦ޏO:%ՁJ6q:zZmQHvkuVu5 Uǎ.|FxA+];C;] ?|'EE߫hm7"B!Xft8t#Ep!hb +;\.y)!h.a79`f 6#IR6Ax%/ +2gHpowҗޝ2qF/&X;_:x OP&_9L?A7c1Қ}j5JYL1wlO`@xܠHF}7XO>s-^-K)) l?FC:K6#cm|0p )~7@7wK`ݟ5p`n`-p ?Y-+Wݣin$F_y +ϰy )Li1gP&GF3bz|dhr׻mygwM5X%VQϙLHm` N~HM 06+2g BCb7U/CǹPk͙h1z@4ہܡ f"Ecˏ.]L +m}2dqoTbze_$!-=;9ؾT"0UdcϽD_Ä4*[ ! :aJ'b`| N`{ߣv1-SxK2C%A+Wn͖fB"yNM L=cO|L lt +97'{mr`̽*B:F$߼$a lIB'qDNa0a߸+jg altA$N'ьi'U@~ay^G3K?N^BcZB`IG,g (ȏ|G ar>b5x{;F?8$1q$yOκQ1{_EQeh >?NfŃ`wQV7!T'/-E\9HjymLX>%=Q U(ε9 ճ,j[; 5z+8<Ԉ=E|UX\9,zII*=6̾0oj|J8N +$X'Ǖ6FPw;6f+PXQ6鈵t<=-M;!yjdjBHuҘ~KLD(xG)UJa'U,QnbaڊS~MvPC}6T>𳺍fO#  S"!]{'EDS3 R]*3 4CY%"'R`C3RzMV9,(v`$/O._jɼp MbN>,s[J{bI' r1-eq*J~}~/ ;֮LDZl[yRnmF㶱47>|=O=J6n$&5.I"u# +].ΌաIKjd\{hɴSq1L沬K?iH)𜇥ACd[JnıBKs8I +rpraAϛץ%1%(m&š|,T*nJ!fL&*4)yՁq!WcpOzYف44]8^TD{B$wE)P 0[;OW;,NBnuYݴ`]$.KN >-84yi]TIby/<@r lXWYlF+T~6Pr)J_8 joXh* S cviB>ѣYQ>s* OJJMsWMDaz'W2Ҍ6VJثMBj5r!$ 'TR1Pzq[c5j5L!`]f:n&pmI`P3(g +:8o38S17߲N?Ȥ҉=6@&ޛE9 >2lQ%oۏX[S'5ӫ%RW Ba*(<:Tچ:o_đzrZ}-`{EhfU6·Z",&ВE4.U{1Qшnѯ>1u@E#w3*߀3}\'>OnB6I^h8 ]e +'4nO8/0R6qmlB.,xWuَ_?8phuqNc`1|7 ~G VISht(KRn%ئr‚鮎_lvZ|°5#hWRxOШDu( )X,T"&uf#f2 $yce%ٻE +ӏm%breC@}ao=VYfBM/t} 7cL" =Na"J2^ )]鴌}S /:/lI]='KxfWVSTQ2\썃q1v[DF`h07[A"(l'HfLz3 V' WFMd_/ɂ略Ά׍jZ + s-R0;dʀ<Eq%I +pdtBPÖ|TFY!NYgQbB)~$E:Üe2wZƥȪzI]U2Рɋd=Rki&ڇcj \qH%F <1`o&dO,J&3_Ww,?Fl~{6o"+yV$H䟿 uXsG5R?5}>ZUŷO_ OԿw*_+=7偾L?8r^ZE%fkcQ}. [:]P}f+ğ`?;3@~Ya( oTk`7fV#ÇqikJ[(*8pk1#5,ғQ%`iwqQvp/q ԋQ*kXǖhG,F$~  +w >$'nU1v $/~'<\3SzC)`3+Ngіm.dJ%N#oR ;H0F⣧z!*5}h:TtGE1etJsԓQ gJ@[ZF~uFoP*Ȋ$p<|L' l Րz2JlgT+%9Qw%Ep(q +J1\Q}sLPC 7|JCmJݪ_ +mJZ-djjV,J ;TnG'TASǐmJ#E/HѫBl"C-b +JQ&g #y2*iQޝ"p@Npk$UsK=+#bdU#:u .":RO-Y(vV7eVUB'TF;#@ Æ;Ā07rYaoFN$0qTY-x->?PQ(/;5Ca<<& x4]H:? /`1y^x yP\ +G$1bhsk`x8RoF)r8ŰG;ћFQa|oF-b6ָ3b4qr+SNKJ,c5(K#:A`hۡP- =O &]KOZr`Ta:b@ <]0QHdg)"Bdlow&ЮDD<;Nt:~ϛQ:`Í@S`DH+(djtXL +`ۛl +ODz #7 +@|_0g%چ:/D(„~*Є䌬׺QI+#wK;+C1&4W/.fd}R_1wudCŨ!ΰ0?42uMf:C߂ROFI~X;N2̑[\s._ BBDv i\=S(s) T:;9)'Ԙ30Z8,܍`QTg'=g2Tz! +ybL>$}ٳu;B\ onRUR'Mǻ`7ΥތR3qʲ*ȼ˰ IF'<1ۊl6(G'4ZfԓQ4|1Pu[>N~'Sd!G}dăsӶc$JOFkMKc.'l&h$fpԓQ Z;ϕ$Ȭgө0]>#Ӝ$PJD+=ǵ|I@Q4F?"*ᕘR8(ť w܀o:Ty4`wAswuDo C]9ͨuE02[iV1?{}Us0Ooz✅@}̚_tӮ,j׬'Kb8; ѓ jo훹^[44x)iH3n/ f:[%9<0-'rN+,z2JutDYql푛ucLj 5Ի2WξMݳOD%ʕR+<'ޏU4c2>:K>=YҋQ]a/UFq\^R(UWτ:K\_iTz! +k |Yt'"B>:a GuV#FěQ +Vt%':FK4.<&2qHU]}20cdlJ?O)j%˻#)IG灨s64 ?[%z4}GHyRe3ʀJOlLJn +: +_i;`O_OBqaIRF+ *}ЄorB(x7Y:Z Zn$bċ%LͨkF%0QʛX0*i#Pɨ&\ | N`)$sPz +՜#@fgRFXu@wS-V?Py dOX1y +? $.O7y2 +NEʐ_HvQ i `a&} =uP4хS9H4ALYpRoI*)տ@ڮi@lnz\ƞ. +ol_M9z0>o]f%gƓQdD* J._ .[(#Yrɶah?j/$_:Ywc(&b=7%,;nP(BAs[oSN*qHȰIie]*bjՈnzSkqPSۙ#|Z0}h]!֕ V(Upm[vj қy;+r1s!l_Ѱcof? 3ŷ3RcF% "'%EUȟni?MBmmJ%ɶ\$bZL͝ +CC&ĒCĊ"k3J/VmLԦ{m="W޶9K>m2iᓱ.U"D!~q#L;`+TَBT֞Wy(2Jjj,187+Vɉ1긭V|g w6 2\ +kWIu}8=qLz} `aufKLݐ,PȨE{p 7K٧Cj;u%WeӐ{|᜛Z1{; *XͲf$ +{J:6{˥^GL"i;f];""J%8Ʋ#dV+"2#0;erڨyR2Qfd*C9bwوSBX REy>mف:\|K$\57_1{(d. une#YO&jҗPg"sGfUɩ]wR?"`; +zݑLJ)}EZI^!`Ŧ.**j.7;3aR8>v̵ + |QEȍp;)df l`+ S-(ɞ헯B + ,An&YGv7|nOT *eF;Uf 5%$ dBlݔQKvtn +{ W7EȅPͰUNH/Y&vw3^J!T)"d}U̵*x%lND!Oy>HUbPbFQcF5[+zJqtBUskE̵e*Khs|ZoKERbz 8MmYA`J,O0d.S[\Tm,Yo4J&3ײѡNNE[ϺS~Jy_@/I\\|DrO}v1X4`v`1/` c]ٚz{0*X 3!vT8&q%4vEkt9[ȕ"FcIW@XQ,e?&vkEXJEė9=Rr;">\ )6ͽ"DwvV 8]!P0LJp>? =a^`\M8;"%-dPQ]W]}/9Ux)+šHγu e#\$@a71o}|`UH"3pɴЫ}}?`D+c+K"9 + 0s +,uY=/{z7M~ܨ-rI51λAEKuNfsnϯ`&DkDz#ZOIy[6aOweWa#6㪶)8}-X]m/3zِfV aPln>g<섖9=ת;Näģǭ\̝[- gƎ;L=o`?e\GѽO'Pp: _1$rQ`o ߕlg>Yœ$>"oٞ=q}32kU[۷1#Dvcr+2 MP{1\_4bG7[cдLB͡(>eyT$2aCapΆ+pe 8sCk<:okѶ[#Hh) ! 6f.UȸтD!]^ |6ek= ʤOP,<;^yt8N+['?g( ?Xl<{AF=HQ*e!\/~,?7H [$<pI=i2B}"PU'dJ5/5$֘r1Ha4~qrPEG O؆T(U1d˽u蠝1jm8@?O[hR(! F HgZ9? +%P` χi 7&219)Bj[io F`!u94u/eR6OVA%f-JztOkRʨ$8*FCygJw3Q9YHy?4$׺񇾐5Qc`(eBjS&,T5guQXfy^Bmlw별]͉8]%#(v'HuFڝhZ JVpxq3ّM4 p<:y(t k\˼kxC)I7t`nd< `a%hAdB3FޅM)~F$@\(gdzٍ3HJ@M4؞j#rJ㇐ӮA @~y(p68b M#,w} +)Ti=|֌v"\U0םdeZȟH + +V|6?-4)2J*{?FNZ[% +'CaLnhe,Y9cǭAC>"TDIUUʨR0Mp>ک*^i@n Ȇ&rS*e2;ZlU8rPf=CQ5h%ez !Y̕Q ÎYPghUnٝw0_ASpQ  ͛ϸ{ajEY;@{P{JQw+}oeDa&aDrM\+I]Dቇ iY/f9 )D {|=n<|C '~Y, (!RFvS0T*^Ӄph -=N +endstream endobj 56 0 obj <>stream +HMn6 9ENBԿm.wHe' t ~DQCi%HJN}}UCcZ3k̔TY+42Lr%kԝ̴Q$ѸZsP,Aͬ&rdTijY +62zÔR*)1B(4Fd}"IZgP~A@ L- &wZכJSԚd6oѹ^T:!*aHKO.B$aM' {B~ʡtd!5qmɃMb~;>ױt5R\e]}A/ݓ^޸#όJ@WsE%Dx"k1jS('yAr$n X J'F)5&4z551JG\I[8+ض:#x $x"tX6:!ET+,b: ;.쪸vNB֕_i0`wa# AUHRSZFgF-14YJ#;όR> jܹ&]'}EfzJGt'iX r%LW.[NXct4u$㩞>sqWVm? {T"iDH JJƓhf RxG3Vtgto+ FeH6<̨S7;R3< mDaB(1>pn⽑3ݬ%t[B(w?Q0w0R+&Iu@19*bz^k1Tr' ޏ04Q@f^ˠ:;OY*H)w{<͢>Ο?ެPQ1ط#Dsl&e"/Y"'IK=D;ptpk\J͔*<|Eumڤaק>}wґͽDޘJfT u [R«R-Ro-yT8 cOT}oϢԑrP4v> ߍO3)Ϫl RmؠXu{v {ƮLG6 :rŌk("rTt[';>W`ά`'V,1jGE: /6]ٿQɧYg5rþČ8hz +, GAx@۠%Hd <d~TzR\MY)tfl-%}?vRwkB );Ǹɂ_ kPubs'^3"\"6nT,%" h=GF@RꄨLN\U=[ě\0<7 }m,֦G#7y::ؓ {:2J5[g07/|\N0H$Bi_8tj)=,WNB{Bwg`T #w$@;zGFC'8;\f7MSԑQjFO 4G_N1#OS?XKRQeG0v!fNodY(XLN(ϛ9 + ̟7ud!5c,9m#SU+nV(W:xn@&u꣤d#%I[P:zDV[˯ V!0xZJkzvފ5K5p3 +1 TdT;HU>ԑLcfJ24M3&n[XOO]J?3M\TRsr +N~b3RK eYiC ]@\wN;6׫yO3y xN ׉+MqRK + R!%f=l!TI׶݄[l~{li;h%Q;״̵zefWqUHgtFu2jYvjaM 'Ȕ aiV\+[06Zw{h{1ݗQh0͜2WBUr]>!lcwEW+q*[L;K9`潳7ɘscnNKn&[hj`Ӱ^Ģ.i gWa"Wr?'?5mG9s1]1 #h6`qtDeAtC_(`C&ӥ" XbDmӣ ̗/B/@/~] d _]FR\y^8?a:ffOq= g~IK0GYWYU,qkc?㋴dъZ!쎳/B;;,uJ~ ~01B)gV#ചXV+tEg(8׾/ria!PYeM"v )n 6Q}Ug f_]@g@V:Z{fi*AV/0z#%gԢ ـGY0*D{Y7)$CNpnL@897b{y4Cc>לV }La$'׆Ldn'KA̅?{d*6` ?n?n.P 0W:%B:@?;b=Nd^]yg@.L'cu?b.۟Hn\k*Zϓ_~2BNA2/ |۸O+M;kJEJe4VgnPx\(@.Zϔ^_Ȩ%-۽گ+C8fM_FڴèKl׮:%V2 +h֑SsN5)4-1oƦ݀N4;BDMĚsN!MYTd}4KYMӛ= W^ u`Y>,g^#d7tT^ km2vK2Ell\te DǏUX *EB[y'ݛn[-ςv!C% >. ͝66 y,D$EE "dT(hPLsLH,;P*d.3{ifUb$˵=H֭1גee4'XAu\ otJT +a+h|NJ`IL,he;ۉD[(b.EoJ?r!Tf3ܱ}B YA^ێ"\GPFP +`iۃl㧀&Em}1{ʯ{ؼ^F0|u8!s%qJ[:Eb{ɲpy\yWJy#)e1|+sjQ)B.Th%: Ur2ijKM#,kM|je*7/O\- W!NuU$&*_ȶ8 ='tۊ$ȤTȨpRHB߲}PYi+Ri4bCJr|0V몎H'G#"DZΌ]WȳWg.\1Jv)ӓ/ +.}u$b'uW3|GjdF'as?rt_ 0k|ꁴ;~u =>`ddӈ\/o 8` +xwnO +|DP~DM+YC39ۈ]G$lmNBD%\]S@v.|Dɏid 3xjI  3**r%g5:c:NߩSX;EP0c!*-tuDUͥRlrّ币辿`ZשּׂkC koغp fUweZN|l2J5 !<9\d@!|JY; E`wٍt++0⑕|Ԧ5b& _|e.1$𨺼Upئm׎:N()u4ܚK ɖڏ̞ϥ"&Z!.! 7F֘b~/~J(v;tY۶W.WůfKTs/BFcJs5̀"x*TIiVaK/.!yKw/d*"T +ou2qZ E^c5CfIv^{v=۽+k,jqOGƄ2u @~T\&$ۄqQKN1 yܾڞ1;w>;̥ t/DŰӎP(q* +@AD&ʶ츀N!Җ{즸}HY" $LJB("ӧ3v(2gӕ"R'K<N^$}SQOBFw!&ݥ{嚮"zCSp}818#')gxy#TȨO"ܽ@m{8{Ұ*U^_r C<@>d2iv׹춈'`%1S2v nA$mh^1 L(;:NI +?l۸e>o.s/cC$ +JGNL!{Fl{ MzCs׽yJ=nSR]>{Ӌ}ߙ\3@eG@aoӑ[#w ph|YG|J+-錳-Z SY)qKHE +#!f1Tb8p-:ΌfWQ?9AAI TZɧ?UPd.ryTi&Wt=j3ƙSMW`iBWB1|rnw(U2i%p!z^93v߾# +6w# Qԣ`C+r?򺶓i W3bqŊgoe2hK(@\بa:~iL.ghEA ^zxVPf+|t}'|Kc i%Ye3{; 𪟫Nm3'ݿZH!kĔX_$tBؔ Iw=t6kL ίDJPo̲v) ' +DRp 6(91T$΀zF BW@ط[ +[NaFP)gr3{~{H)P Jf5Xr\K܄':(r"I]Id)q&V v{)u"fB ^1^VDfq-WR5oSjŌZQ)i帼u+T(5uʼn/W2)_Ab[tP'2Uj)"!zMkCR~:: y6UH.jK% }ԑcl/oBA~ ~g]IE+*Y3ROÃB3uȽ41L#5@kOzWBa_zOL?nvo?o_mwOۼh/iM2C_~Ǐ_vsW3q5% /~ùUl#s6#q_N˛un"r׵n'lEf})&}J(b_2 ] ?ɶ)!xW2+hF/,o?,4,4.OrտS6e *Kڿd%TŢ(M(nb5媾0).w"KTQxUW}&BBf#[w5~Ad6_D<\|/r2M8,s^ͮ1ͧ}[:="Ma0A-=@7J5X:Y@w\]%@,hעSe5&S 5ډO0ki+d%,qѮMf^Y&O)DZ+ +FBB\)bHeŏ6nJE5զh* V2~Ŕ +zuTrw۔sL +c95)dmK1J/-%% {%x Mv=#fVDyD3XŗG %$}ER +^ x THFnj@yhmEJwg=l$* vfQyN„a>Pa/?_ĂjuvӆȄrC,PQR={fta}d{gҍ٧f6}bvRa $!jzo1sZ*뺞Tocz`Se"dZ,#Ȁ%a1A "H՘G-,G.pƢϩW̎&O7v{#v yb6y:RC&REN{˻ "܊=m@{$QP{=f]F `#Y(KANi9!C̈́Fr{s/lƒCuLł2;:A0an(c^(n&YȇfĚ̉=gƂ*$YK"I-ur08W:U! fME!}c1sMd1`Pc®{;H8k!y<3}:,&RÃSцh(/B5Xz<^ i:Hg設w"U:c߮ޓ6з`ueXv{Vw$J-|m &@ +J/Nrb`<|Hk;e*%C^}\Z,` '(8͟0Bk R\{9,pSO08w5eI!d.H 3 1*oQR!eu#aFUf9((Iɘ`mLY]^idYK-+^aEg)Cs^ H*oq*Z]zW;$~Ϥ 2-)LKmaUxP,f"+_zFOVɚ2~~zG4AMQ2#-S:*.=UIzu6IƤm˻:r=m1ɄG?B &#ܖ4,-h 22v x0j.HХ}l8 ˘MEt/Rn2CybAkiug#?a7k9@bO>XhN<"9{@6Q2;~XByBPҘď+Dy ӛha(yɳk;բ]}]7c>stream +HWˎ, W:E=A x?H|=t)̡2ѭJeŨгa1VMR{g*p썓9)o +q+BH Ɍh{npo=fGBUCj -M1l{bLS q<rs;%6\@Kn순֪[L)b !tEqb AH(!f r"d14qV$p,VC8%n\΁j>25R)j0 )$Pvc8Cp\^@7VE A(szH$1~q뵆s+(ͭ䌌Xqf/Ro5F@۰4b*F:kP P@|_sSfwx۶/E"GN=75TBߪK@ّԌ,B߆)bp-NHl(HJ(TPv;s>êQf-(PgknFѰ4PJ[ z|ԅdyo#x:?Ap$aMhbjݷۿ߶۷nQ-| ;O Pڞ*H_o?߷~}D މY(|cD,^?62կʡ"t N+CE*x`PYnPwװrzQc\`o=oQM'ƒj{32 &rjzR6/8K?A%Gc:NWcgij_8dYY{ (Y\NRܒ yOH#m9E 20I#q8BQ YbohN;jMz= ZFcc(̛І%mQ48q85oc2#QS.uzP Ŏ}ۣaUAd8? 2KIouTo9-FN W+:N(Sm S%q /ٻy' ~p#&*z0/QCV"Y<nu=9TNTh<(^E|2Gɥټgʉ{PAv (W `g+LI1C:ffCXROAHf v}>:*TY}L=A1C9p }R:>pW-}MzTaB[ZQ94RcQ t`o +Gnh:}*^UיY\dxRhf,/I^MՅ_c{5VyT薐R4>aP2~dWl\d{u Z 0l8%ƶxf[:-36Rl;aIeGn0R>^ =;e!K2] +P$b^:Kt?$)iqxF;d[%攜sFJ:ip!I@m5e /%@,^).2gMعf_ȺM°R}dSĪ49( yZWr5}9.*D@@P1 d2?|lb/, :ǭ=:aS`#hdLy@4j5 G_ ܷ/Z۟9mv +z Sjy ɗcrq/L!괵&m,y; +:!PW$;TW'NjvMOTNv rCT0KLN +b `}@Vl[v"^(,H1v^1H+kڤBhkՄW) 0GᎉvM[,aTb4F:5#dvASk@H4jw +v"qqT /#tot`U3Rۃ UسW#ML>TA{)ZL&Ǵ*XJqUwЎ `! +0(0m,QG+8G/a^A( +4X(H|i ) "醠*9f$nj1W0,+d5 iCr*[,Hs=ͱP6^1CFΏFWdanj3 <۠57CЫݸㄈhDɣt^3<r# us!@y ҈*5ͱc VPX$[ +G=1A:y~ ;,DlX݌\kLCE#ctg4&]'\Xp~m 1 wl{`Eƶ=Ƭ$˶4O<͊cyWCAJC;(l>w f;"L<064*_b^o1]b+FNJֱIfgکA:nDc{neObYHhXabS%b&W4RsCj4VML9$?t",~%Q\Y^ۏ`WlFom| 5{|1Jd=~u5`+2B2vXBu;~Iٮr#fVD20Ry2 p5E; +O]a)Uf$]un_[qJG76R@-˪DoMHlÉL}&̣saЋe?! +uf=q'g|`p]{ Qc.;5gzw_!Z~XȾ*c"^%%A/\ʫ'ʃ +h H?\T&qu⁍ 7m\ + [ˌ"n!C%uD5߯-ȍYu7PK@.EDbAۭh> q3$>+LǕ4y^3S$'Qи>׌tx5Uo>E*Lñ:kx (49i"OxѼAI|B1R!C0l>(xowASݵR?>gzXʎu"Mk-(P, 3A=cܚ_{wK} E\ rbcJsx{cʏky }?S ,dd369+5"=YK{0}KN%bNH"Ĩ*AQML=n;|^O>®NXf-/ag33q*~حF1 M_*ӫ""K-#m%&xn/@'RzV5ͰNl] /=Pז>gYcշ_~ #?$0PndۓW=TCi^i.{V +Q>jipbBa2 Ʌf܈?jh Y f%͉h3A14zZbž0G`PSe<5-!Tް8jJP*qog` gZYG*i7.m/`XBmpE6SiA2q֘A4cu'䋑v sOz(z@=V&%5/FڮZ5H٥a 1.8):=F]5d _[%7HJ3 Bz ,1/"zToHDJ@@ H\,W4N{&+x 2LL&N([65Baq\G2Q8$H2*4ҥ4T(`9g.U9]h1",b98 4R,z֜eM;B@p/bQ!#s|)G7 ]iMDxO$J`S-ƴ9!W 哧s4A<Trsi֘" &H ,l_B72gص,kS97K0ZSG;K +8Mh{),ir[bES8ŝO#|i=f1t"]zRp22γ>;w`8Sg.@wdtP6BR?Ms爩ў=0`F- A;=sDkTTp46Ya˜vQtlөL#\d!ܲxC]eݴ7;es#:O?k=kHlXt_HD]}`׿u~7θ$ CA8[:?*i6O[kg_g,潢ENA6ljoJ'@g: +*ʼ0>3ˇɔ$#VkY]iCCOF{Su3r2dւoY?% + >"@Ƀq D~Cx*vN+ +C´W/`" r+*p]&uw +ixHf3Ȑ\ƬAuNKҒ[?wi41&I*s+&@.ѐ$`:hBs$u*Qh5*ܶiekkfv2exطLDA鮌I$ -Oz v4|ϭ,Fzk -)_,*(*om J iw֭gȕŷM)};-3d@a=@b6~SIaRI˭l+gD3&v4ŖƦXqFXth+y=Ln"c2LI(>D1.2'XV Tuk\Z!}G-E2<'/-l9é9zB=]6P(jֹiL:P¥Mp!Y90p$$_但$aa:Pq%i tRu<]&ìQJ(<"iY-+)uxܔؘpZJigv w֓lhސ&4\.~}nlEaCxbE]^^eLD'\'ceJ3הq A?)dnkn{66FUDJk7l\0t 0Jߛu +{ c0us|1Mcrq:49W֣+d3[흮s|9,qᚎ>{>ɡ-&ڈ÷kHIc`^HJD* ͫ#硓.=k3ʚ0hJ199fxO,h.X!WKL9 CDPtnn o3ka'El`r6TUg.z?Ru:g3Joxg";x[b\gs:υ&})d6XuSIM*hTpe:Aw;zw,U{j\=,k}ݡ4i3Vl:aڑ]Zna ㈦*Tu69>pH/ux S,Oi%ヲV V%y('{^ EYԷ&6hơZDGbZ &UL ]),1$@<6*> *1.7LE1. }DUza "vF"R{MƉ1tmn[vwpX=E&$X!$M׶vV[ ZߺƳtM~d?ɢ+ŏ`ڞ?>ԅt̖nAeЩ_q#UyXZc<}2uG^۶-1sm Sx3O;(ѪRmln{OOAUʹQv#md2KtN$P-XB8&ZV:iљ*^Q{c Ӊ] mllka#5TڂD,Taħ+D};xsׯO+42PYWoO3H(HjPP~K{ȑP4ﯘ/(z+]x= `DQWU'cL`ODI=Wf,0WExH@*+Cc(vP칲3r|а:~Ce-#MC +ݏ4. 0k)и65\Tdb##8r ܑz[VݯC_Vvi7TF55@4Y0oSUoeϵF]b~C0mǯ"+>Y*9Pli^Kt+ + +14\/!b YdmaeaWQsª*C=|Qc)G7q|zOQ0}Dc>#($Bcl;aWDm?ݲ ?wW f2aB3Gܟ +5ktQ[$=g J}c]*#t_ju1,Ko"uRr{}ثb캀iA\{>aId .Hn5|Ȣk,jܧNFcBc۱SGCGdAn0l S*ݳ|7M@G'j}m?6(fNCU&Ϫ+zh{L\QFH>T=h2x*ߪ'dxhXP*ja_lAlQB{aƷKGMgݚu1(cgñBiQ n9_5NNlf](S?5.9 2pG1*>N2Ʀi\ +N:;ڼBQX#X KlMr% ++Ӵ#Y"#-M!. yq3F*CJj|St(\|2䷀B"CiZt`jCމ_R찅.tڊlJvoa V6gOdobM#uа_M#^\):x-(x%.P KAh.ɰ] ,:ELl?΅LP¸pŭx$5_)#Qz,1 +˷wNHPE ZgP4O¼¡iXE(!-Pva)Ja+n`FR–I BG޲Pm83;aYq{ƾ9x*X{91 1UeHeng$IS-0 GזM9>W[ߙAi(jmη9k 0nvK&ܮH#wpuȞH9Ǒj1t![B6nE٘!`ACm +endstream endobj 58 0 obj <>stream +Hˮ#z += AeEBIy1ѧCֽ~~{^dUJKy%z~ȅYERJIJ8D+S\LIٰG7i_PJ ?4=L-$*z?y?PB!tT٦=G8FQ#@o;8 QM%BTn0Sd| G98"&;άqX)S;68qbݩs6hd*[^/%·zn>_H5>?]Wav^ݎ34DciACh&Oz"}zo7c +En+ZyÔbON +40أBEɧpE~͎yxAb}XwcG~ɚ5 3q'"mC8z#Ә*г/F + /! e~\z=.!StMJCD4q`G \!*J"~\P;vt[~S2eE%( 0r% wq[}.W/"w#U@Pb_*yt器K9ا]5u';# EDN[~7%Ƈ&EF*rrt +5ޮaYfkm nvԺ`㯷{Q-m Kqz(lN~qUfh5 w p3~]C})EȖN꼕̄ݚ40$Y|3Ap`ř1Ӵ"3׌ 4eT\k&!XeĔQ>)iER@k5|oh0M`3KGu ޭyWIhbkUׯfwϮҵ 6EF.Ylfaӑ_$D:$2lRn,2yNnf |e9qJ@mUXqX;4!M d7(?['fgZ\Z`At̚T }('TA{ÜmDVpn|UL~." ňNdt[]Az``[}$H{7ʅ'hr3)VC-=Tsޱ{K(57Rlѭ6E'+ҽ +#qLl>KH0˺svS2h(O\ge y +uc\PUUjɎέt5 ܝ|T@o4>i| ue׺ӈk{ l[W5h2P/"s|c&C4V؏hs'/l56ߠvQc,6'FL s!e/:HƬ}i^ z2{3A{+(ҹ݊$nTCyy +VGVφ;,6&(Pm#;$2؟ffDU:rD-E4+\ޏK$\45wlB/~ukjέn]enXvFxc z[*!L:6!TƦ|#K + Uw81͏;_+ONժ{0o$'~ kGQ^ a> 3.NQG;m\Y H}!1!*sʊk/c.f[X`cp`]a§6T:1te_ CJ zd{eDXęa '!vPѨ̲52"xLʥKdFOnZ ff:)Y]v>8◄uma 4 I:Oeè J01v|3@BM-^J;vsD5"Za%Gt%JL θ]JLr{A{#o]JVdgY9_XfCPʏڐg{+u7*^mVB@z4#5>],q9/ SUo>,վ'06MY֛.| %`#?< 8M)ǿ:) ZBhh\5J݆{6Xϛ(Ϡ<]htG@:^L`oM<Eᱴ&r*K;:s०(xmh{*WpZTt*qTwSS:ICܛ2Wk05|өP%D;&-k*]׹Yb?%Yn)|WFÐ6\L=C|f20OƈiWG@[LNCef V}WF،Z/r0pPImKX+uqrO J *&S圈;_sUџДXkV/r'3@Х•O~oE&l(\FP ߩVujkkQLjIC u"tXcVc=tgXpK;gƉL8=AN~k6r]9YgҞ!\B'yn]b֨5' u+'k8ke%6̼>S"<ܞ\(R24> wHkNqԏܟ+uѝFVr?昩j +ƼkZΙL* rJX2F2{/0 BUi+7R4%߃B^b/VXGPWDGøu7tdS"^fi)5LMqXYԒHg9f\:615Յ@z +̽iw8:k؇i"O, NH^YpywO?\3r \"i7\lxL2`I9;W˜ջT… Tu/箬gb'b8[t{?:\ +l*hKM۞@#_;mO5ʔP]߳t5D݆yn +z{MO[[vH,Cu %(#3B LP\f${݅{̬4e;7UVxj_2E:8CXrPpgOA6(bq^z0.PW:sKӳ4;1f.X 3/ڇ@z fh:5 i(GBՕ ?m$3>ݖS`ǟd0/DQE9*ͧ"4ߏAF+X` b\tб^x[!a*| ɀN,Z /ReEl.rv1_ ZF,]"@ZK@PA[pZ7m%"h(]iq?ed'Hq+*PrHҙ!k4 Vtj e\S`h0%R!Ü=An%VYml/YȘS=q"cD92\4c! +Ga;",׏/,,2q,Q~U?R)S-$SISr "hq_Sd3 Xׯλa幙bRQhȓEA!wf/9%fQx_φ ".̯)q Hb_vAAqh<ΘF1k|v+ǥTel*{Q$FD]!A:]-2!E-IX ?_q\n!0z[7ͷȢ5[h{('s#u9: ;,G ʥW\ /WC_!Iҕkpzem#?`fH x܃Vf>XDMEtIGfCCq7g>?zA$ݠ_$cfri7¥sE!_}O6I@%u'S]!]}0^)Įz`j@m`W vaeEO؞*(2D*7! +Ylhǔco_Cȑ{}ŦL1i)/x"T*E :f ,. ,vHB]\';<.FwwֵWm;ʑgw8Ac!Zos͈UZbkwE} }ae[*AX0.|ظ4~3a<ӏ7}pövQ=dTu|x=$N6f`VH(xI" +hj\$3uHC J#~D6DVs.KE#7zh08bZRH{En;2H)3ִF+'DIF%K-Sq@8N١ѳwgA[)" $M_&]gfuYoPXO{DootB\tc>Z4xD995Hw(holιQ.gJ]gPM.#\lmzڰ#|EI%:74vNp,<E|}ܿ&6JX.X Ay3C=AM2L.-tuROVt|WmPQ˶PLT@ /ͫQ]gT +oG(T R8clzpw=s,QBlz櫫!?8Z~MȞÈp7vԜF8Yf쌈MA=*ea5A6- +!d3ETf˲wi'ߦ56%<г`P 6hJDANi{l*8#E}ں1$Wۻ7ߠKQ!p~DwѾg$F ZG֮ED+ ~D10U];RoU`06>KN?O҈I! +V[\WDJ!99:nqΤS\,t  ΔUxk>x0Y[k_I&TAldvHtTk쎞ѧ%BsSh;u'orJ&mV%oW>F]gv-{BdWV T-IFQ?AD'+¦[05?*}(9o7Ilg9::='.Ϣ+PNRQ`nmGNarx"ZW/dEUѓu *|8rxW?l6DS8š$Q~X 6cT83Y"ORN)Qk +<*׼u# >~-A՜ +R<|DY*{rK'0u8 |m*{3mlRMӲU'?2V9#W'e׏{f/0/w>stream +Hd E7/A0oj#KhЍ}!_TNgKDsy-c4NW6zavf1jdә??ߏ??~>d(_&xqiMo|_Ŀ?0)a+^Z;!ѯK*߿5#V Y[V~B?lE_XuQ'e{SS) k;ii^6^BZ[.,2.)ݾW3xV:3l,(i q1g@V7qsneei5&CFXmWGeAE&m nre5P2䞕2F$Q1g֞X/ukE +|Z{bFq[ Ji߱ɥx [NMk(c{Ē4Qz*;< + VPkCMsw6HͻRe{ꤌ=35HdtϘiMMG%h9"Fo +g;"1iǟ lGjpm vHE_1]"@"l_366 (kdrU/Zvm8O +CP'V*iR(;V45VTrGKUiQn7qOhVFbK[T/ +Z0]׺=Ve)@xDф-VLgtbceY=Xs -bz>.K@Of>?=z:=J1Ӵ[y܊9#,pmL63T!j~kXН)!U2ci ʢ,1cCda)4mK GfRP;.0_h=VN3M( djU!/hܶŸ#Iu7MJ2]>z~mO;+p- *J~5e$ӱli@HV]7w&̱ڄB#+N c,2Ij꬯T((BABۡ @mx4G?Br |X3czb`ʋ[Dg)JD@Nl|jE.*6+  LV<*Fj#%Ņ"RH%G;rfE" +o-\/<{uUiӖ%GTsp{6҇0y;s¼,Ea}O}nύBg0$,EDU}>yy`Tc NM.RQF1гK|KfByԳx &_]mWcx!ylc>`>/<<"W?WIR}ȃu$v' œ9iJ6no34"ɖ%W2Eں@Ihaڻ רv!ʮ-E'lNL̆-ŕa0&ֱz1ˮAy UDĞA3)x/TR0b’yZ(B84YҪǺ0=q3.rR>_`T +uL܉RRG( ?%lb +kJaÐ7Jh[W$'+A1b>L)H!>QȼU9]f$ +1!"5zr4pEڳ({KXe3ձ:!@vsP +(]lK94jc Ðq [BS9JBL ye$K™[J +Dl]x|Ƞ=Npuo6Th6MЛCS+Nf//w2=*lQRU@>P_:f%7A{ ,(뇠,<>E4!EkkH"V}NEJ/& n +.kXxή}gedRʘk?\:&(ZK=Aز+)x2򣌗6] _[B?RIpUE dunxL7U4W4jnY_9l$۲z3bsXGvI\b&kƌG0q+=֖K@`D֏e{aө3%f,Y# 4S%@dvn= +lAuK9c}r:b+Ǥe_r{v #ݗ[LpX-UaLh+.VcYG2sBJ:a]#9:bXX&ՍvzS[^qVqþ +1rfSr%wzdԐ!=|ڥcu;_ HJ8BuU&P9Gy<<6R&,ʛ߱⺣uv *BN H$4vpzQ3{zW.99[>W\AK#[dLW_4)?r}|Z ._;E6 + 柀P ޴HZiPK.PI[FBuue0↨hp+Ri(aNY8j.>6֞⫉srzMC-' uDK@KڑEdYFi2mrF f0U0]U#RuxaW`GxyHfEڀ0AvH6h=F̵%pԦ(%Pce-#`?Iz&^~a +6Tc'NKϻ5B +{ ;0D3J2!?B {.օ =.]knoILڇgzgB]Y0.ؿֹng{W隄5u;@?/O@ &yÝOs?C--po! +ԢqJxbiXVWfU@8ֺ.PD_# n-w5(\zUZMxZu vZ%;[ +|#iyDA!weO&-yzԽ{C.% +&j#`lC0ѡ[DktHs9q[wT=c_bCS7z3壽gS[ k_5~eL6D6dgD)#܈wxk9nh"ۖ^W0t)a6?~ +T+uE/㱾+=VEG^QX9'ѥq!:c\O^I%s%( ;^VZL6yzܦx%St&e,ɉ,mT_ +%WDdw+WPia=32 ]0H" +NjlS]6&i {|S'lASbGWOۅ:ByexkZ[,{5`&XwPD^h 4L2~NьC)UӼ4pCSvD92Pp o- iӹ))^>ޭh-]43;Wž'eEm5 +1b_V݃B 2Y&6yLXX3Ք21~b9,1E4/ăO,+* AA57ZSGvfPgp%fQqǒTf,(5{?ǟy)R0-ITMVJbgo#aU,R3Sph0bi1\K͙P] 6ZGX;G֮D$Lc"7yB-fWvF|M+-Ҙb~ubMS^%ԧ URxj.u5Q5ZF +]2#\xU s\ť"FdDTcV|dM侞RC%T04$@#{G.Nq@y>0+%֘C3ØתǓ öVnwvwx]2iJ.lx\M" +خw4QmI[u5YGΎ7b3,SS (8Fxs8̶xÈmoW$sꚥRg2%b[/)0 (P.p-+3HE#yߡKOr+^k9;aia3yAmr#5&K"?3?`X"TXLmM8@<` ):A 0D +endstream endobj 60 0 obj <>stream +Hˎ$ E%5l^F{ՃP56@ueEQsʆH)Eq!kRLN!̆x>F@_~6ۯ=(?ɓ1fs~rd|}:f^?oo?}oZ2ڶl9Ŵ}$'b++ݾlcI4;yl2^I%lU1я9;Vc9y^ +*+hm.G0&cc(b+O+0H Rgm)P>`H +R2:D2)*l8,e;):SVu{m祶Դ:)X@׏ܣ9c876;9 ɭ Ԯ' 16a)5.0_}o\G|3VWREؾBx3RQQ9U"moeu`7'$ +&α&Wݸ7k*坷^#nI?,mǽ;eq\hR=_$? dtH"|{~u G I15֐u֙п˧KrA:j*f[]025B(7'=o(t*C9 jц% cZɜ$}(L;~g~*†DvXٲ`nruj y$sC@!axcP)RPI>46F >Ѕjݞe6N.=#τq_bcaWb zM+ y)QgLQlBe CH]%!b?QI RYsP6h#7[2d$3JU{h!Pk}&=1̐a|lֺ0 >梅47V=6[o .392ThñPq;'RL sB۬1N_pjJoΚ6a5f1dp8p`AҨV~"22e{seF<22'^"z;r]CDBڍлYNU3chCz =wf{icV+V}uDZƤrs&_1:x]ȆJ HN,pOD:ƴ2qq\;ZO܅Y!stՐ텢 5W4&';y{]w$۳7GQL`17^ȪsȠF2-g_?m%56ADkږ"F+Hø|0'4w)3)Ҙh +J.y%c{_F"nvާy&W>1sk9CgRs8Y)q)=ޠxh6*v1bAYZ%h?z]J\d۬XDWı}*] M~O_Zdr];uȐ&7/* @ҵzAԗ#_RkJtȽ;NeP0_;,O7JdCv0[~'O>fx*ʏI1c-cfx}yRSCUl0yt iJ[smn+7T 54wԈ Fq,s[TV `9) v{0|/cB!'صN,7> YֵJ&H^x qO- +^A nsKt|* u҂As׻w)=•nEP_z-ÄdڴW-iG`!1~ M@.B~(65"k-gD`+qy=*a>к֤WS|S"EY^wI+Ӣ]wi"+Yf0AT"˝,x or`eogz$ =4EEd{a:yiwv{ݤ1[M)ajw4$ $/}#Y!ZYW F+Cl&0PbP{ p.^&BAHoH,TЕ@sї"l?n&>4eច\&=f@x_ҽW`<[Akݎ㻻pY32MhJ3Bڕ)Bx-26"mT??= H9jEmO&v7U@ +ıTE%1~~(5uzdRM+KdTu0ɥ2hދ'h4O>GBLaƒSq?Ю¶8L9߮)ߋqnX)I*zĐb SocIf"zEٿ`pwrn/#@ri 9`VVˉ]BP)(}LR +!]DHhr76鑍t3SP;S.L +LZyR뙱<.~{δAVˇ,>~.a% RjqGԥ J$fP *`b#sp==_ڐԘ]sSL^._f[^RؽplKOYɹ5\X/D , :)qb ,YP{2#<>q6lO6ʬ*_^ح:{arB )1}H|?$s;VaHl 1߳pk|K)lɐPB$ݲ4h=ѴDJck^dekX7~- *R eElz_eL? a+XkQJ09;ʕgup*5{EK"Zd&h97:6XD$L2yj'?}p}zm&? IJK/A.^j *lgvPvJxKL-:;jCab;v9yBb 3y9qg[1GJJIv%IWY6ɧo$wkKnd76K@! ,2T d@$[ <]A+m6zU/,69Dy( +1,.7m@B4$2εWvi~hq{)I ʎX˶v;!nБ΢ 2V QA 8H6>8f@Nb-#uHЌIL;[(Jrnjm"udtn;%1׉<4G6%?J IMtVf1Eo0k(6 +QYjNH%ƕ*I17SLܴzBׂ uE~jO ><#_uylV͢e +nqL"VH%)DX}׮{%FAS-{#8tC1* ]F4$m{T@4ؘQ)<|1Y[)uc- rb>xlf6X.1 1fyO]0bBmi+2<#̦#ɼ x8sMk^d_GPYR"$ 1bs+4ewX\&!` +D}nu,Dy`a*V+۸P@/ -/8 "+ʷ<;mfPfGCw^ +-ElGADI5`Rs<[bmvVpy"PНnm'rZA672//{o]=hAPyˆAx"a?ȺNmJdpچx%2{lk\pbjX)5Eۧ6H,x~G|BE$_ήd )q`z1m#|ɘVRGa̘"4fIgʊv9hosf?y*tNU^Ϭ[͘I7ˢ~fw=ICd βQ,ae]5*LW݉x Aq4f +99Ν΀5^+-([zYEUY3$w䫤} lKyLI;|û/Lw/.}ՙpnW @CPA$ǥ3E6( y!NznNc-b98{oh'XՂt1hm H8b`6?ԑ׺Ґ=f2>ffӵ"o m">V#QbtL")Fe&'I0]GTV=>lu1_( RR[QLB|RVS=biڇpH(a}M{gp<9`+C<(A^i1%lu1t92ɤ}q8'봻',pK}Z#_|7ch9 ͥIppGK7+ai7XUNOArfևYtu? 嵌*͖&?޵yDj]Fiaf }W\~)ٯxg#0 5{ƃcG^L!>M`R% =@ǣ-`M^Z6w&]MӸ6>K}89PT0i>&ht, JX_^DYUyp=Odgl&WɌ<gm.I0 4)ƒ)[x!0Q#ў|$% T󿏈 PEm;evVȑkZ"|c,$-_sfO@:gLs/QzP^D⃸|yb_\/r3./A$*t'A˱?4ӺײoxĵO΄tuݸTJ~u]~M %Vv~1mټnzn)2u>' yMqh"tP$*j#v뵢SޚUK5cX b$5֗m/ߠ]̛ڎ{N4(S4k&VWQ1P~+-FQ5nnattoW i2muP#Pk\$Rۼi$.G[c?A^[6EYtnc|Kk=U#<pMBTwR=O%*ލA`!=f3I eýlu+Hs>3I/{#D蟆X3>5Nu@.trVw"utҞ >c5's1 >f-LG㌎D@`ګ␙yl I=%4¦\"THpR 0o3}K(kEޫ [",͋љ*'V$N`&HѰCu{"<N Ts[!)}kMtW؄I6Lz/ttvpy0R^D;b$G 1a{,RƽwaM_ˎM@{pݠ=!#yϾn32󰹹 1I@C შ]׳''S0\vV:Eע$/Dr7*$͡p ^53ͩpqv'V_|׬WڌD` +S69YΚ3=Jyb})/0mƣ&3tt 1+5t0!Rҫ~nR5.PFɏ? +[*S?>(\R .5*׉PqcNҸ]NU^EL!2Zt^JClo.93X>e>9X592x?fKMwgoPק.dkuNir:/Ny &8E PCΐN~Ʌl,!`6>%IV5 +J.] dlt%Sb{HB8)g?o +endstream endobj 61 0 obj <> endobj 62 0 obj <>stream +Hˎ3z +=[Aց^0/ylf4g]W~ʈ_?n/y;JEרBB`=Bqۏۿo o_7 +2d t?i|xx(`?߷_)9ުl$gO +Cڱׂt xJ,FM(Q1'K)G=#IOZ_퇱?yr#h6Pәʚ[Fx2rT&p_\\_0JgQ^.KX#'ՠH(!mqBJ+grNϹFԂ]77O FZΫr2EqcsZ+SvўH-iwS˕1ݛ=shhա>[46ϛAo?Md3G9Uĩ`xun"nAYkl 'ì(-icg(qȅuԁyio|62,oRpr 9ØIɀʸ)M%%HWR:jDht].)ئbf|KC7B+UWFU kjҞviP^@7#!1ъy/RLDz%xcQW"^Y*oC.H2r57y X0Ml.*wЩu-^ymsL"?"hzwZmNC a j]Gk-U.>i-5nA36%NăbaͯE|S-O1eQe! +N U y'Iv =si +X-A PhΧ'ڃW{M@#!3އqd|$EQ +XWV=-]xF൴ `jtsKlz&A²V;Nf16x0 +yV[,$+VB-E q#5&m\gWypY#}"gp;s7SvI;\h,B6JUlԴ0ju2*Qp_4swft˝w>ϟ0s1\v.kMr'옶pʹvmcYDɶ?]xwu Rd JtlBq( @iFz- QNન9B!8!BGigrx^{$HQ-nQEXlSQ¸{ -7&4w0O{H@‹l 7f6sCVlP,:R!9#=mNpsFi[S_ϝž\ϕ tql)pǼU1 74ID cz (M_k;\*vxC eϽ nH{?8C>' A9{҄xJVfUCJȄejALN`%$Pt\{*Kj+dAۖG-vY`YZ(l*(+%@(,iL(E, yC;S!4ՓR.]P.p]|܅\ +rsFD6ű|0ɬQ4uP { F0o"p-<A.\22̽\ew4FX${t7ațG)?If˺`+2ܕebJ-Z }ε}21T7Q&Ud,Xe\MuEWԴM*0st%ah8/CgZۉIRqFl^&)XR[XEقxQJY)c|g1d+) lI]8 A'MgF–-sƦCĶcb, 4Saju 6,.Mn/_1p< bKp"ec.9*GQ8HL Ni*9N?p2/gpI,OsG.s<'g%m6Wz͜x(0zSjmhY}בk ^l)`vDk^ns,R@^F8IuHnTAļ# `ѺAfxXSq +U6*8xn'ȌH:Fp>g)sY3D¨bة`ʡT'9 { Xq{AKKTH9 ^6*W rɏ4YErb|bJ(ȈRx6ae +R䞼Gf97ڴ V|k-UHCX*q 4y vlK*hpqZɄ0]׭{B~b!ɽ8@>CC`;p~* e@E u'@s- l]A0!吣 sM +b kf2vѩl@Vῗ7`$p΋NiLi,$\IUq)b[ ’.ix ^~Z|yM]Q-̑CV\D8d5ޙLøò\Ck&cP_rpf%#e2j +m364uUze$=6~LB3ۋb6>xZ<*R}+["vj.\k9c0f|ViTDVmgZ@86P bӀ; ++ܣk#IPV$(c[ȘpƬ Lsv|"fCIY!HHS#Yϣ]ʇo;ᦍ*?/e @a{</'E3$͌M?ŇN} +~ ,48RC7 ;+3b|G$dS8Q{\Bd@;(tDA:l_ U*AՓ +gl) rXY(b Ip+!$)Hp*껂_מ.3QF&½4Ȥ fE=e2V6g!K, +Q NkZn" JKACN¶(>݅IGXyJRf3&̤,vRs|~' F@UH^PH6.vP#+*뭇`a@ydo?p1zmO->]=Ku#HK]h;Қrph{UZVL5FJ&Io v)5|*U|i/As>Ap۔ e; *M0(ǵb/.S`"ą(3n^+eJ~M,S1[(\8 bvWσCL#!#:,}aM&INN2qEXǶu83`Yg +Cכ#3zM얫}oԷoCc&xJs}aI۾>F"I'i?cD5J9K+IST'XsDXO,iqXCJpu }%- + K` +Ї5^81PR֞hv*$zGieF!H(|yׅF}TZn'Y3:G !4Q6ih>ןpl)0TMz;ŸVBetBxP9/NA +d4|{>$zY*2:z>C +zLnX~)5)k|gX.e+e6;%c%w? u6Iv#U8ynr繉<7l.8)uk6WBzpd/X7=AF*m@$Z0;J"(Iز[Vna訖oG41>}v_ŭ??wȱi +endstream endobj 63 0 obj <>stream +Hˎ#E +}A Arkژg/xed* @wI+3^/&~vަyq?owu_7އ +./> +.y}|xe?ϛ^RzE1%$mSJEo\2Z{{ +M1dՒMvD.X+࿥bD⬔ZT JA|UǞ{[Y!2e"]Cnzֹ T{ޖXסBy:E4.?_9!hc!u)oNŬ`u!,cMZHBϴYڗr}߿ XU\\ʰqCń {]FrbT}|qFggÜޏd?Di{qri&R_CL^+œV~ʼnT$niw ss⳧<{WOs6rֺZ3/O'qh0*f`ڔH^W +ϝ-Ta]Gԯ pʨsL#5.l BdӝD{\Ȝ9^УUFqTHm4 +\Wk =%D_4(Ia6٫Yfc~˫9gڧXf#ùF#(u%= g‰[A,Cox\$dFl+ F-DP}*ϸü^g02ҬcGj*6V mړeOęhjf)ݪႄ1RR3^ЅIX\M/qx[mJHKSf;D] !m#[QZLϼ0lc1":(qثԤ!`O?3)FSJ0s_ٕǚ/O3,9 8*_?U$~Op$Biz?Wb(R8BʗT|biUrIh;.N3xoyG%\3(+1'g9iFc&~MBcځ)DYIYҊ,q>FRÖƸE +ϩT&uPݽjw\݅*c>Zv⛤U~Jhw.]wTEUޡ>ͭ6hzL"L{^޵N Zˏ-TL$Eiz80n79 +t 5{6@>DdR*_QfsTjkƂP4g)5][dKmzk.?!}1󌖹֑6[xDShl颪8BwRDS<0X vs ]@ +Umŕj]21&`.oD,%x :-Oc劬B@zȷ~yΘf|Yz툥%^)`94f01xv8jʠ1_5AjuKQm t0nDFXC3{1}cO`5:4X#5_AKH!<[ `Ob$I|_6C'W,'Jqԡ1K\kS򼻟:)5,nhPڝi70tCc<F=n`z&Ƥq颍umsW R:aNqa/.Qz6Lx>7b|VAys,9&~x8v\4 㼕qĭi~7c`kq|@Tn<9"e>5+f.3OlL>vٌE+"'4\* ڮp֤Mc_yt2*|ͳu"898fև]K\VR LxN˨J}趟힡0DD3mQ`bobRCRK'+gMI C19%Ewc*4vF{Z˲B5\s<\kBP^zشhĢzV$Z[iCj =as(e'jZ =KcQ/? uI6L1Ma^`HJM RHXP؀iRmY1Ǖ0hC'R0e>jGnJ.zo䊭x%;='M5S/H_#OgylPJqsj!0+ _j?{|3?L$UmFB*&s,.koofNe" %q`f/trz$LE=ZF+1 ѪQoYCPΆ|M(S$7 +93r/@sCq6]3-~W9l?Adqa +g9;-AlV^ 1Y-v~[& c'0\PDA.+ s`9uE[ܖYC$ss}Sef E;s5|e\DY}jIIzQ,1E]5cIܪ n BQLϭŽBW&2sgMl)iMRQ?ZU%:isbg66Gm*`[bġ2fr  UCA5,&k 91q0_1P]Vm3S;#u*SX`RGj]s<^a+R`m.z;"-{ %V$bz8'׏un31Hn9:ԍz1}g}+8S cRd] ^UY<(HӮwЬU1g$xG9I$Ahb-Z;)b(=? mO oB25Nw7TIǶ贝m/mNjy)ya5ZXa|2T2Ntq *9gGAZsS9fC⋿t#j_8`f*A6dS[/%duiTV? +j+y,|?"`L)tD>R0%U.J ;H0)4D﬛64}d%ZNĬ@/٘vE͕~.2]עQ +8vtr+ga jT5P0"'rH,=\~_HV̰X +]y9 c,lJ:g~ N6Բr L\@5Ķq{JX؅p wZ%L~EAi\5e CT#y n71\=:oKEB! -Ig0bK~i^Øa]F7m6hJ9("|:.:HITɍM^tv0OqjS82Q0/#rW3W=7󪮕 te|6%.X͹:Q18;&8n}@q뚽nYhaY( +LYPaB(aHIfRyݶV ަ:S)S4Sjw8l{w ̀`l4;L5CmCdA6SOì`:yT6r0`4ڏ*ffv ߷ ᱮ?1l]&<udip4PʸqHvgts8/IWqd +6A4(t INxl{n8#IW/δ"OE~ Zx1_?N%/Rw>~VQ/(F<7'/5jv~LH{[aDRrb/S!k +*kCM; AK8 EJ=hA"Y krwVI*;õT,I$mu1[&=4[c=ޱ +0BUn:4schw^eYyHP#ZF\O)-_)"DD/<+, WP׷<,U 3y?Q ,&4Пѿ>|Ԋ{M PwJm`oug"*Gs}9$t~B,M; a>ә'%Q)Atw%D#.C+_'1:pb? X> %):tDx/-ȥ> + t/ĘKt>5x(ej#mZPWC'UC.:?Ol3EHy +Wk(|,¡]2Cl%N U=^;ҡoz vV0$x0-*|2(Y+!m ,b2[y>GdOW t|q 푰ʞcMtIYH7G210䄙cR)[* +^bS n4t$LK2 $Vrރa#IyKQ2ZNVwġ-2OVtH WXT͐i*t Oəg0V % tc4L<čPp)m(Z6? YkRtF9 s 6E%|ToYYmn05' w;D sg-px;ԙQ4q=շp,DzʴO fNxCpyGב'A&Ί[y +]Ȳf+'6s$[+ XWƒa1^1Ii@Tռ]qb=#Ebu%j*/Enη06\+~_szU*7W( Hqj('>E>:k_d7MsIMҟڅ+2ZI~RbE|'\wޕvaʝЏ(.w+׌o)Z>錻nn QN) Yw I1 qz +&b +!^INo1]jUp7\dWJ6Cc|bM dB|wjD>WI&F/>'QTxQFUV@ɰݐ֮9>b)C.I1.9n%AȀ#)R4)Z#9Q.g}R 7CR' 5h{)}9~R՜Ido뫥""D:bk+{GJJkcg t.HGwV5%Gm-~=z\}Hi䨽{ꝑއǟG>]mn7{?~yZhYz.:˫.uso?.o7/0 +k|M-i7]ٓu>}|`Z%;>Y^'tڷus|s7\rK[-_۳u\tD:L:F50?p)ڨ2|AIbPFϢb9G 6ŵS"ɏ;=:mӫ]{N@aVn>wb>UaӫVXi){&W]3h M +$T@[w|L׈eZ\'rNYc=[^.W% +endstream endobj 64 0 obj <>stream +Hl}#E*Aowgfwk; waйݹ9v;bB[VB$iV5XDki;{ٝ&M.YtLz]:.} }*YY/ɗɝrZ^dW[ow;~e m}c3B+*r%T>eH٠IWnQRWPQWT++ʫʛ; rJ9U_UU]Zͪ:nTmUkz]^uKuzP}QzZ&h|bmv֩%Z^ӆ1ʚmֶi۵;ڏi~=^;Njl1㾎:.xSSU(ؕzfܷ7ۙ){W*L*u;ׂ +_&\{Ka,uV=O8yRɷ:WJy@6'⥧5jWzT^E{umMG?}zOZdm J) +8PsZ+^"]t\j4 &Ñꎀtw*Q"3Ə۷kNm[k+גkVfY ,Pl^+qZh "Y*GoM*v])ـ.RV܂Rkޢr!SΤ8XMK̻ďV!kȚGd#@k?zd؏ H|ZNFj@tn4hPbSc.G%xTuWknLVN섹אZ#yNj$hϋ"  ZL$$V ۱ ljuvƒ0I7xg3100ccb`bb8HN 0 L@r $'@d:u$H֑#YGdu7p@dd $H6lgfk94[ MLcb"9$ZM$ZM"9$L"0ZM!9SHN!9SHN#94HN#94-ϭ&9L1a3I&H!t3_Ìaof,aZ=xt.yc  { HVGO!Ui-9 +3~qt;3l&$Ԉ@ |H" R,t$Wi[#i4 ]e,_cd¼[x?{uu:/Pc@; S"!60cАVAk@ >x$՞ހ \fd"SΎ@3U1!RB}U5!oK%` 1-Nt/= +g"ag7 0 >x`e<0N>>&0aMx3GA;f ˀq41g~xXG|rpqpn #[(T<AqaNq]Nfdl}ɧgK1< yw|. "`% P(.0%X<BB6B’$reXl ]-"J9rH֑wCpObbb}_II|sE܀$%$dрG?KJ)KJKuJHkgweeeu#z/C + +Ǒ)(+^URWRjVQ^V 8"Ķ*EuRMUJmOI\4J44S4955:::3N:;C=pv=.=uB}n $  Z=35~l12ljeJ;ox>L,Ĭl\< /t[hZܷY,Ոuo+5P&ku5ɶtT@ kV4;]]c.k78`(=NjNNpg |.!.\#\?qKvr%ܽii OgOȗZ-}t}}}._'{\@EL`KU+Wڮ| ;CCCψH؍v4ǒb[)X Nٌ3+O!A&'ϥKHt:3U&_~iss"85 ez+tt C+#6,=!382s%K?NlLrvRvom97ܹs9wV*Vݓד˽xe>O/  " +/v*"=(/&(?Q` g)*G7OTW$VYSyrJKuxugχ.?j5E5juuuˏT=ڮ׭Ҡp}HcDdvr{f}smǭ-R-ܭG[MZm mJ{ԎNdtgV''O:]#ݓO O.<#>~N~~8MFvz\{&zU{s8bL[f+g\2چI{FTFFF6 #q10*[ƆҦަ淭[y[3[;qR2hipv!28Yi{i(0B\$ =?<9Ջ=@@L Ԗ Fb_eIEIP*hZm*nl'`,{0>r%k-R=b09*_q+,׳!xKeQH @wUANAޢJ-t]6CPRUJ~e5Hl#_d% NFlGVE_*\ŭ)vuWk-11aEv\YʡHZ8QMoTPG4ut#͑B_)\h x= :(uLP r0LUxWmna P1S4P(S]B&aU/, K)Rgbu&H11a؇N.L1䱀]lWiTY6+ MY)Jw84ȰA$aQ5Q :nE f D@PHtioq}f +Z|C* dZՎjʆ}haL +`1 (B1SATJ4PRBtoSk ^/R)N?],KiJ k9Fqa^(,Is`\)%oVp05l9ϊBTr-p…cJ=>桹NhJ0ɜ^bSଦa]݇W!G^fB 4r8rZ!'x >ھuJD# 9l7ĚDg uPT$,~k?9mFHP?p`"Η4udutkB -_=vT~*22$Bz>+(?2|,=NrG>*Xm +GI@A\QuAւl^flf\|p౅,TˋFXNq`ǵ^n Rhl9I‚yCqQtTTQ8؎/%*Shov +"\֏0D$G}v$$Q RDUĆgх9y9ԝ;!FyOf[ciDQV<'%u[Dh=A<.Լ[g.E銬oUXTkЬ#iiLNzF5[6릧( cUdxД 'DEBX`; D3S_KH^$c%";#5xNzbLlrQ8Xh2y\ ^@>B?~} HM);ĄV>=:3;NN 6,`k37%\:m  D|]mӂ[&>4]"^Ԟ&.'FHwБ~`A;ܢE^XiJ{lsOoG!ltfklnϚT TOOx2ym,g4qHX0/{ . ;X_’嬛h$ ,QQ*cg #Ѣ/ͦٸnu%Z*3ג/_8:9Xdw(آO`MWr=-l`Cf9\.3dD7aV=-㡘_Xt ;g$ Ǜgs'#7LT^ O2Bạk?DFٍ6'sNG_kn,c*Z^Q ˉXz4+ξB>k7o'̏s{%d' P<ڈ>J`ȈA$_A3Z (a#2TG"d{/@'h y 6,{r96%2 3#}Dȹp~q{a̽rX1}{OҹCz<6 P ڍ"aYL(:G?`uw"4 P|U3lUCeT!=%_> +i[ DU?Ihߵ![+r.D`zGf1IM67VL:LVH_:>/ߚ]{'zaG4.2$vk|ݰGEw+/=!8Z;A'ҌИMs~xG/}q~=v?-*1~!r/VdVD\䤞 +M,WUXgqȃT"*:YHK%n۱ݞ8NۭVѶM.lrVխ@ q[;H~uCSxc}k,~]!|}8R42OԜ7j}h\'M0ʓ 5%YZY`{`Xڭڧo+ +09LYHfMs@h*;״ uTo%}3"%LX29=3?jngY8 Eʚr+93JLSl=- ' &I$6&M0EI/z8 D 4Y9W[`E\0hZWܯj MD +_zk0IŨ+{ݗ<$@AO[u/@b:f4.k5/NMF"8yl-(qgz(sEˈҠVmԦ[A o{~Th$2BIC+!WETlYt<#~u\pnl:]^T6DRTqb蠈@z~@;jx98@IR'ċ(5>߇E BM6kl6=C\]^RC?ZĠJ₃cʝ}<%T⹎jjJe0NnνWj+jEYUD +<I ф<Hx$* +oQR"",TYSA * .$ A1a1k}*p9'4cSz}kbr~ +E+3R}=S`[~Yhj9&5~%PdQRr: c!<:5r;g~)2\ kk1mj򨛅79_|p อDXB8G0[VQOmA`Hpn=\W} m} V35p3Ws7uCD'`8:nO 4C׹87i _9k(:TANf +Lw;F$*?3dj6>HC}Y-YZޠSBArG=q\ +ݡӫ덝V﯐fR(8.#l] tͧՊld([,CCy-DHOut qr/ge\0SӲS8>aBZg֬Oߥ-6]`mc%[T%ܹᗴuɲRKw ѽ^A024.+,H@1aP=6OlZ}vV0.菄'G2p\t8*GqxS#;V +e!eqj 0nw8U:cQu]la. mN@ 6\'IHN!H6$W G^;0CV*Mem5K1M:5LS)ԅp޹D+NLѻ9 ?Nh*Azk'4)"gS۩&Ehv`Bq0nS ۃ/՗TT݋g@4@`U X)c`Elbv4/4&^UqibNUro>1I2z^[E*MU5=έGrj.sܮZUDΩ*=Rc*; +j=HJٚQ%o%ߘodQ6!o195h F[yb/4ΏxJ>E,(y*^n*`˸v 4|>UQbaKҠB J3ହb50dftV{0ili9Ncm!ıQȅ#a'7kfaլ~ݻr{K۵EFU&4ʫMUhf ~;Xy[&D/ꦂ<;tcW;fo;2NR~DnxVthdh_űTCD[R_*Zʺ@r~MYdՌƺ+MV;0N,xZcZC9j}\(J: \vtN(Nڄx@gJ;,XvP-+1|iO3 +5{D7Gl pÄ\@?wit +FYشrpƁݡ;Ό5 +G1 O0Ǟ9/^bO&6s-ZX:Db` +_cT9:ez!RrYWetZz ^4eG= K!Z*v%vCp2V˻@肊&A) .89GGib/Brt?<{D DP^AMY<νNKͭuGŪ-R\CPRyTI(/<#! ('n[ǓӺ_@팝#=ߝs~?2?(wq>/6UåɾNZWx՘Z%G3 C \ÄKY뻂;`a`ѮXSdP՞,j(KZ۶\#KtEmj7Lv-de|:X7}7Gyuޟj0[v/gF2J XTm +Zh%`/gUHcW IIbqM3W & ̸Rm9N!p#11sc\(LL~c2k ߍX#ރ|`1W|=/(˳MQq%FL@zҌꤝEX,ߺظ%c@Q˻+?],~n3ͣ,[x%'|E[DŽ0f/2An֚݉Z8xݍ<~y Φ hR&|,L!ڍ H'f=Ue}i!BM^pNXq6ܺC: sB!|Ï+LNR_A0ech!ev7Ab}vB @ i7&VED%ćW׳\1^6g,k.?_cy"䁨wX7 +zX tt ;R0zM 0roo*EP;k`^ig*惭 EruR4yy WuŁ= ~$W/I%{d[8g/`<=@ҕz{̇Z W@b=g٢Yo 9~_p>xz3 {"4Mu(,BPL+MLEtjIdJbxF苨:>ܰz(- +dr" +yǏ0Ex g-P}$UT_Qj\(?w`"4_dBZtxEiLԩ_eQzZTB=mMYhy|s_.NdҒ:ˇ{+纮)<"'12HDKjcyіUhrT$'jYSa֕j:y,IǂW8ٜ tpgh a<__y@]&No'H=_$5ۋl̝]|tXgzO~FC֣L?m?mƣ0s\4m*32~rHBkB2nI$NdJ$RJl)j;=msh\O兗"?d2oz^P? !Nf(aUꪅ@^X,jhx"DfOif!z*Rt1}Hq0K,?//iv7;%ӄPYrlB {;vD%Tm#$&`6|ݓ[ CVM3LĄg6=0'[cM*bb1>~=S/ BLMkf8~ L02)ӹ|Ŵ4x1Jq2^7 <9:@\#WKrNšOV(.ndHP{NB*FZ KK&w˦PeBZȾ7`#C\=Q~>mH+xK=3Qe:V{R,t^,8,XQ7w}iw!x\8u"he@<;s_6z[mXdhjV%V,ZW=fqQ D3DWݖ[Z<~q<~q`x|÷ԸJ;b<2 q ZGӑ-ݭVQ '!{]zoƿc{DLDm#u:_׮40B16G[a`u.@ދy+ a wyƖ\䚳oHF"G\+ ث:$J +6;tNRX7 T /"*i=L(]"Pyg/ID$Dy:C8X1EOݖ,):^ ~ŵGjgtJ歾 zg7_cEw^+ HM@M!x'LE'+N,qyVHM|/:a)T+ϪQZXf`-#K/ˬP$R&-%^Uߞ:a +&Sm ,O+/k>-@fv]kH:sP"sR*RjXXv+hfphR\ I`{gR:7/sL] oqj͸Pͱzƨߑօ*h*,N-{8%l2{вdJB7w&sɧC. y +U5{,ˁ0z<Ph@\E@E2C,,<Khru`,\I`!J(<(c(|%_x. V:qgS']n+})(0EIAtx\>1G6 6k0HDMC_Ÿƫ~m$Fi7l'qhD(1yfeJ"Ìѣ7ϵ@3tUљ8AGqLit 9p7B5SeqHW5O0n_`q,6Vvv7w uu_)\2N>nuZ+Z99 G81uSfOBV2q-}ϻ` ~Z}A{93 RUyK/w,D3׮rv)&?aY4ז$Ncpuꝁ ?NS| Tt$uO'u-ो}~~F'KbZ==f]!N&VUEu#f-ê_M̶1!$a"CDD>ٹEPHB#t 0 @#}Wn1GUˑM.hG3/T zO E#RTYJtIQByidQzA^sDn\836:- &(9LeZ2UgEEFrᢳ^aVO=}lu݌Sc]VV{6)9=}?\}L+h!;#q睥 &=BBǟoWsPWf|na)FyGfW"!"(# eh)~4ٯApvދ+>y&dh}ޭ㌉>\#)߃ .uRc(ģGxтP(bk/7v6 ֬֨gMS4*\~_p^\X\NuiWkTSW&{vq\W jakCE^>$Q@Ў 言|QD o A:Ш̌R5uuevI]ة=gvzڧݵ2gmp>l|x5F 9"{$ LqW*{MXF +MA|46EόV0X H\͌1+:r2 !BwɼnW[W?,*q| @Nq||:KȻˆD"D7geA οĆC<yrtTy +KݔwXxZ}9!#eόfi7!7ٶ{e|J'f i@U5{SC|\vmt5%sF?sgz\>Ԣ`=\_WavoM W(biX-vߵ,J +V2ө$|mJK~ԙQ{8\n1Kq>t3y 2OA'4ÄZ{"'@e@,$Q^Q U~w0 +2*觾D}+h0e%vFqT܏NX;\""* z_Ŭ?]ZX/ΉEc*wc +h0 s%}t1'˖Gw9Rٯ"@T68#̓XHS2YXlһU]{l3ޛ̀HAfqH. DD/RI.>^&TDRfm|]r}*.]ua)7ofg%ە+fhL,RQŢ7X]ygM&:3~]Ѽ.2SٵQZrSdxx0z$6Ds ^+Nxmqa ikbnaх{`ZErZix܇ W_T% Of뉣xOYNCD*E~ۮYavH#z`ܨd9ɔb܍ O)1x3CX` m nsN:&.:!G0FcG +YZ[dIqs*G N<5`3w+Aq)SD|U#FΟK fOCoc>(^xYV Vg/wt3=ؕ瞣*K4lIW͆vr;>̵j{viv \5>x҅zwj- +ZmѴOvyp=N:Ztk +#ky_;XB!V}kʗshyDS +Xt!΄uK%dd"/k=a=/->5!JLN<GKv}CC!{"C̵eGj5kា~Tyy%$UŕA6Žz+(nIe/)jB0[篾f*cŖcn[kw\K疀3ȵSZyzqDHx rAɭ&G>?pbc5~N=תV{ԗ*_ Nʺԥ6%4!q̗dRYEu4UUpɾ 9t'Em8z{n6 L7IⰝ4;#+rEWU!6 +>;/s7vi4)4]y }-emؙ̓dU|4)1DoVΥqJvsnG´Ga .gV Gˀˤ(Tϟש s7 _9ޫˇjHJ oc y|.,9- eRyOzRO׷' xeZ?+#S3>ՋU ݀밡[kӪ#ĘTo "^/AULwb/uۢuF{h/.At:0!^DJdDmz1BW00QB ' { \\TO<!0TȚ( >;YBZO>M ?FӺ t{9 /ć>X-_߁Yu5FUYӠ˃/<$;#ߛOr59rt/- SN0DKDD)l; @f.+N#0DQZ㧊<ټs"EBmXT0 إaIB" +Dtc4>ǰ +B6]KV(܄[$ѯJ[9Vָz/̨}p[.~3"/[nv g(LWhDi֤hi(bnwXRN6>:|| (9rC<daQ0٨K)Bxgkg BF NV,Ti{m҆#=`pb|h k{D>ľGT(s.'je鮉fBWɚҼRI88""P, /5 pSlf֔lg7j'F'zUv\>[Z3#/h83ĸٚR'e!t~H$M I}ր +lUvk +Q*)U$%e.1)>/rmkMmxڗ۪ȕ&%fR%ht gd`+j%0Ra` #Mް񓩙TNE뎯!C\O, كrb:'KvT?!:y%3D;$G-#gD__q}yELr]{x(]'#GYS?A~W1oR-OJȦ5[% bsU͸{{ +Avytlu2YR|V>Lg(LҜߨd:mlW cM\X + ` RGvu po} hs?ǖuq]&txJmSEz!۰Ͱ +i/;gwi'-7޺י1&(؉bP@ADX]"DYXCP-](D%hI~w瘙]ր&0}wdΎb3|^ؾ!__)A 3SrӋ̕B*4E +5Uh+ʌesbwVJDDa:%lNh~1 X6}?ȕ[4{"Y`{Hi("u9) 0 qX+|ؐ}s[{"'pc6LTwf23#!Y.!,u;Uyh8DN)S_ǍZ\BvtGRռlHgc8FHDN6n}t7t^:5+tZy?v g+|oM.wښ5)`CANeŧy Kk3س2pWH7MJ‚>!ySؤ^} Zx=Ӳ9lsRCn)ښa}֫޷=[UY"{`\_|$>R| *`|86QS]4{;9nnuDra#QC}YhIZr./LߟzԗWG?H6gխU5nx,4䔖k\'B.y߂%l0*'^b $yPo(44144R(QƆj n䆒arƗsodggT3Ç$Hō 7zh Ĉ ĨQ1g_mjǦpro' pg\ʪp*́$8ZK~4.B"Kx<8}gof%Mɞuy1x+է_mVO5rX ++*V#Wj1BVεh IB(H&W*[x;d99r4*=G%-G(L\Jd\y6O+2=_ ^U;s/}c$ک&??Xwn%{vpH?ڔR~>hj[̭ƎD֍I=O8vFWĥ̥UFBe'F;BdYyRv7U{[ʓE3biʊ\<@OkwViRc9[HJRp R"%#)l%&>ZSxc\vvĞ4h%V/A,rX$Rg>wcvJ\5kR- +衇H*ˏ_?1-"2r[؇2|G,:෯@ H#9B&(  'Q0ʐE ڐKN0e({Af<֢l$DK渴DM.6_ R+:g-Qa<8:xM1|hbϬ1G0vMy&^-hBW-(D0:֤a_9K>$G2ں%lRR̤(synsTO&gLb5z R#mz Fx yDƺ3H6}؎hyKR.vzANhm+::oٗYŢAݬ(|΍<  ``\&џ7q按ĜH^yM=L=35ϧ7RܘTOGS4-5T4wz_tIpmF6MVp6>5#87ȅN1iij¾&Œj]]TJLlL| DKy o|_LPP@T*0rQ0@}=@WmϬ53g;goC>dwRc\!OY)J^>;R-XǫY|ȓxk蒠3A: e &pNV)4Rѕ3¸I,UGRb,$8K"4n[-$v̔È{+$* 3*X 8'jY) y8VhOHJ#]w˷s2'2ԣd/L]hWQ6[H?G4cρdy*5C}:ޞ*/Nͭc֒^1Pp@l7ckj8 #w!!wo:L]`n֘dQ EHn9m-B a[CLcK R;ϴw!)1|E{o#9K;I<V 0J=_q~'6 SG0w1 $ u^_Aҿ؆b'AƉRok=k=dn>X!nǙVwFB>/mgg8m$T0ބѠS`"R s+$Ǔ; G`m7D`@U)h n˞29fY%`70a0(5EX^3!O?1^fp^)fS'#GTݒS 4/ ͢5v҄8e+dT&Ǎsޤ>Cи;߃Z8x3G +JR|"6wSL"r}22=Fv璣ztd6ٴmBno+ڕam{c3~b tJ ?H}r3Cc;xsa.){}g.jMXp`Aٵ!p#|Ǫ)%E۩ZYqnykШc4č.IKMSީ_ֱis_"[EN< 9AkXgg rD- e4 _OPے3vdJW龏ɼH=⋇2'=YhFE(wsunƸ +XyF ̖%0 K]W1?W]zl M%ѱҬ_Opopz:'SՋ)X-V +XZn&7IxT0-3۟ ? K!tWTwatyą)M> : ‚:2:1nhS=+x`.iڔʹ1䶆MH.̐\꺍 ZGE2><" YɼɘdRB,Cy2 ?YI<pPoJI>2(m\+05U0#+V pN L}lK( Jd +{LtVrxЙk3sT+%O]aT$ z|ҘD=$0BgP#Al%N Q/|:/x`#~"2|]K f0cj7A5[{x(E猠RxCdbkI,'RO)??,Jލ{)zMf]toOy`9qܙWpNfY, +T1(M+n׺$61ȁ{_XbI#DR#s_yTSWA| zy=3ZqR;*Z̨l"ʒZ1  a_* \`F; Zǹ3%aR8%}V,l|p4^ąH-@ a~tZ~mez|\uԶ5*{J17?5ӑ +.s5s_ܼ1f؇mX)(1\8W c"nLڸw޻WSOK#%HXBDWhL =7Z~a ,9L"Bj9yfŋ- + o4G\<6ER!T2[O0N-l8S3P7*dLJX9K?)SbhIQ{md9OQ0o1;Ȗ-1h_5ͅ{QMCq] MZX_mY`-ہS_Aԅ96:~j|Pk:^ߧA$KCEcS7WkQ[hA9G.*dt4sYH{"f Z䯞[(19pmA1jT>Ѧ1!8 #C W.%qGbO +~ Ts'$i>C1\ ͼMˊCfvX3)hnt{Di:Kw륅 zh߫Ё5kZƯit#-.*ds5K,( R$ 0aԆnKK?0r&EF y(-gGwzc/}<!=n0n︸.`0nu ݊ppkuG,9hocbdC`H3o,͠0`;Thʖ.CطQw ~+-Q;|+deJZ4A~;SNEZJeZP$1mrqwp%D=`jʔ4??t?%<=D &W3dknzՀC}<~3 DvJOGE}%KPXY<.?K#X;8I{(1Vp5˲RWkv2BH&%#Qr(,=SCr|QQȈh\w2tV.+Ыi㷁[xom68 [+ٔǻP~KqIm"8`܇= @l>b ڱ7yJBpZ% y>,@ەn[DӌBsE۳1_ƙk֝Sv#^"Tt u^*5rJY`]ݬl~\@ͯdC{@Jq"p?g(=eUoC&\WEveL-EA(Ѐo>kGNX G@/fËg*d{U$j`&7f EDnU`o[Z?~Ai <|uw]dOy= 'L[g8+x7Oc ڂ[=]#0ǠNgM-GDF/eb;LQ&mcVkm^-̏, ֠3{M~ДKy{ϟdgD +NS +wBu;ox"Oit U&2!><wX|J|)"9>K;ٗwnB/O s뗵^|ؐGx%5XMuu*j`ԽQL֘\H#YeWíx^L*?/HRc=ާ\yk.]Ҿޫ=`z1hW9n.ZEȣI@ +yCADQhxSxn3n3'nwrsB"CoWjt>@~ Eň8{U1B5a0ET hP:GDQ-'xUib1d2 V^Agpusa+; G>g9N8]rmYC#ԗ­`<]iDWieTK:.a;i8=c젆u{=p8UkkgEMEႈ +Y58hC$R|WWh+z7~*F)Qc$ 4ړ.:q*wȋmt$4Fjztj=X{svoaT7(]v*v+N*ogs[45V"SjRΨg U Ckk~xRk@$Nuq£=b ȿ ~mm эum:ӝFNٛq2T:P-եujO!ϧ42j 9o n+JjAƠݟ\xA}9֓I 懇H헔JϾ<ꤍ!JG/n4RP^k +(];} hc '/ u6(&W{X ni$t S y  >њr>r/o[?n.J$8%ruZڱxkɏQG- 2u\'!xcv)`'T˻<_n̪wRY;svvM<}^>~feuNKmKLeEaCuW֪J\s,[& 붤`FE+s +~ʬ#7&'n,_:xU(])eKA/ZV/_ u Hr9i6~ء=@U +fb'$6Lq9 0& j Uu=^Iyr {gR5sh ]F_ T%iZ\PƮG6h#^t>fX34q,TqP Ptz F5Pႍ\il&A?a]rCa.rAB4> 3dfy\``^ txhrBSC 냪 +EzJ8Mx{+٩>D2vB-DPFLDtxtS2 flبI,,9GKw'n +4zi +gz񁹆-<.wڶgٱ_;'ŶBWܢ_0zP46x!w<=ȫT.Cw8p)X+Rx\n} WR [G(PIeُjR 6CtD6.\*HI  vB0FFPhX:7vcCx~J+Ud _ɿ_[`\&fwhZWyvX=*`t'ƚg: 4dR*H-Ֆ3nk=N~6be6_e/>(Nόai>jð'pMK(ְʋPA|;+w+&|{5H~B;Pd$"7 ifGrbg*V3 V!-mtESvgYbI|l$x=#xC#^*ɱ +F|O[ab/@$rwM  +)B3J͢V\~pg$ ՙʻ'/x~汐lkk_G xك MG.h8v47t4 <)H69C"[z1"fhB6"Ђ,=ŏ^{ $'. '$Y 2\߁?G^xw<:}}hϰm=<>v F4[k<7߮ODB%xwkqx 8I03! ~w>0PgO;6ſINln3Bð+3+4Q)5 )pjKV7UO"AOqv]pOԏ +YS +>G$@S Xm,맩L<ѤJ; LPռ7TKz\zf#>hmtp ӎ(s+9=9'8\/ˮ'"3^aE*"= .Y|U'%2uq1媥dT{;Nb@ $nav& L7W'^~wK[uQ* *q3p͛uk#!)ӻ]4m%ek&Pi4cw._~^AKru-.P6oҐsd:>T?䧷?lB +ײYl؛ 39V2Xm&rhtbJw7Jp`|;>p[FحXr. "HQ].Ӑ/\a0{]Zje"̱cG.]<ڢM]fKӽ~(([1S!NѫÿTJjryuAvdSg؝NaR{T,r >N7f197% +}ZڨL|+һ70fhf&A&J*EwX`ɤJUER +m$~HD7JKXcL;Z)N')u2ꎻaQY3sx\vz0{8.o p1.3pX>OG{{82@Q7mp1_+Ɣ vMVxΚ|sGVX:F+ux 9BЩW@o܍0xf)!o]>|3V:q-62& m[D.tn*n YP74FfLq(1آgvh.{,>% 7-ktD=XD3z k "w_I֨4Kk']*$6chQTeQQQ*PD(D0@![C(*hABĖ(J t`wYsB Y:?Mw{G=4*V2kslp/8D$Aѱ׋O)xDw(3-^0h{e] |DjGnk1k[01pt\}iD.L2dkȡd* 91KkFz"^N q>xJ ̰EX~v½x +hԲ.|=Ev7\hU,f6 *ܧzpdѫf}>"[k+6Udk. Sk,URg)\TMHsoʥ:k>ǿ`EWeT诓\l,KzG34Bvdz1M0Uea[n2doo 9O%fP8ːIX + nW؏a cdhfscL@iT Y{z_2[RӃ>!c+sdYn#aY2 |~R^ຉzwU lHMࢥmeUYD-Կף[uV0 qb\4n +յRQQCjk{`ʦf&o[[j5 fl0ךY wjмtH! mO l(%MaVFm7RTRR7"LmC'Rq7]uJU1R|ΧO(.cj邬 x^2d Bwx*u>ZlNfn#^-{G +5gzxMq0ȸ T?~d S $ؾû+{zkny]#3p &yk:K4wS(.L+MI%J*="}@fdfBB3Cr6>O.xuS[` &M|C{ EA5;C8xC]A*ty肆ЅF4tʦ< +i$Y2@VQ oo"rZR\~{ֲx;к!鵞gEٸ5Č#z0@>e uFq]aN݌3]Sp|?`-2ê$0ѫD +]$pjmz23|iecoŞJ WV6/;cG/$G7H24A-pP);!Tc췢_YKcy=g-ۯENi+x! 2$D*:1+GΫ,۽HP(szE + & 81F4Gm|ࠡ^*hIϕz|K'cnY}J|{݉y<6 :Љ)Yr^Wf[u_ ++ m!&F`vO./N$lqX^IDlNK|3S4dq$AդŀYH,5?Y>x[a$b$`&zɌ'[QĦR630P2ˆ٪#^p9NJkCcf"a;H++UTHPjA&H15gqI GN"K]Ey2ԨFav =uI"F"1>ϒA +c3AlZZ~Z6gÞfH Fm{4KYxserzܥ:m..Y[Q< >Y0?.H mܾE +Dح Go!fwQZN7 +^z51x8kTVsI=bS_yl_|Pj$ # +zWXE>-ؒ?.%:QMPi96:܆:S">V#WVWNRh?)&/5>S#蹑 9B:HDoIc%&PK&A&C&6" .$-F|S_r6郴iGn0dLI@*+7p`)fqp}m巩ޒ[-t墆b&v ( P24"k7/TeDB:]#L㻕w1de4aa&#[H ra/ [XXVSD*3m,L2 /ǣ? .XG)zNNz*o(LcXf0@GV3At+?f= +\puXN-]t:7(mG|4)FUV*;d wB%>s::ιG:ڑ5&D# 0sDAA O!Fj4ybYE35 Es6a%d̮mk0o93Yꒇi*k[3bGڜC>@GlsHxE8D2È(]!=vZ̥sGSVqs3D#!ߢvLnd + +IWkZhܴ&+F>[@l VòaEek*iYl`6Ooc%J +e7kjoT}+~h[TRwDE`3v&{My"{DuXrzA> %9H1#û WSh7>{@~uhE;_g/f/fQn,r{@ku qxl>Dn€7CTdۢR0+;h6q};򆦓OxPhof-yt] “1"WPՎaKP:'"dTyA?(n;5!Zb1 anJM]DV$a ?RJ9{[a%;bi&sӄ%=7L~%+[9wHEm^~$؏7قu.\Gii-1FYŎc ~ʈg]|#Yh@rU d1zjd@OI) mbf>BEԸ;hQ)JR|?t>QXuzy|I`M;, 1&I;s׫k.޿]ROY7uc*) Xtl{,31}{<|óߒ'`+Ș⤣K`^%߇YƤoH3L7l(Ic Q /0EB43E$<^HBwI{]]|N:aVM(H 7T%0Dӽ3;#'|7*AZ'+]$T젖myt~'ej=.Lʊzh [5DeLXCjD.QBWUZm#TU_4()"TGI#d֤o/H_@ hYGE7,]\(acϐī''zi@Xpmd,oe%7S_6v[iK_ҴSrtQb'M-^wdߞ؍t ?5(a2}6u=75_+ W#l@JK%ߩ{k{aWow{2>ǭ<,' +07E;xkF EtADd(26sJs ĭH@$־7&B^WEhbI~=*nD!_%;Y 7"'Z+$a#0D&,㺗M^?^8v<%d}݅b9^>̳l^&F1Ȧ9o8c(;=:_kw&PVj +Rl?Bbdj$;-)Not9' כ0#0!"P%(E@(P0zlj3R^k)-|" ]5/<Ksf̞" |(,g}h7*"|zllܕK!ˏPE6MQCªSuZR02lFxd"r4>*SYNճԒp +9}>xJm&Xh7a0'rc<-'~tE-L;Vwobn|Yh)6 »&,;l-5M9-T`iuʊڛ|69HnXl$PUV:KjC$J%LJ ;K(M, k|L[u抒rrU稞Uk$9 ÌL7ˌ[9cxG /쾡w7q)N͑Ƅ+(wʤGž>^hYAܩ=BMʒ]h#^l?z n[H ɐ˂Y%h-k|h$"8hpq܃-Eool!Eodl}\O1w9Y lܼ{#ly\p#aD;6Cі$.Emٚ,⣱՝19䓲̴(af,TH+qZ]7eD`Z81-㊫%**:('*܄@"rNA +7;(# 0NIu]p-_3?S?Q\JuU_:[p%A^~\C%#$PNշnʔe҄?~rqCZx8RbK:l)C:K!^PMVWT bP(WҰuԵ@Nat??1;b,s\$&)M/Kj(E79p7z#}tbquF|F\] þI,6);GuSz&՘Mʎw TlzL&MczH%S+O)-D:2AwQ=`XQ?DD5cSk„0 _XPV852AN򪘺o6rW=نo2/hdM a\' ;rLl En=I m{mjŒ_[Qy쿩bZ’<),",ϫ\b] Kl@޺]S(4[uݷgkka'-fa1 i|fï L԰GG2G^uDd2:ĈpY a +=Gq;5%9x Rio MIa'3tz:S9xJ=W'ҎrcnC_xk*PeE6ǏV-1Iщt"[!B!q t-`6,ȅH;0DF~`/ `-n hq.KsOk=R3qˇ?Hwkh34a'&sR!FOil<5ZYp[3ށBG~*E`Y[R^WR+ +* L3}5m9dp<>&Uĕ"6<=stŠ[J.)SYO:QmVܾakvTwN+Z;z+Fhj +MhMN457e%JcGJ2-hj8EEBh/\-Bې,#\‹>z"JMv3e'ƚ":_=%Ѱr$+fePgHlm3.eZ}DSͬ$ +(wq?M;s؎K׸*+Z䗨+(9M0j*K٠9$eazo4xj:ә0 Mv cc!yC^*(DXT",! + +B +"( *>jAk=O==;~~sz W 8=H#z(Ao59펬)tjha>*#59XEk$X`S6Ju4,eQ9{swqJ}6d$(ϝ%AVF|L3Ҕԝ%ߤ#J^-q]A^IIamn$?9OB?_6ino:IvlOJhj+u/m41L`y9WVU3Mjd_A'egKKw۝KSMkg + +Ħ^  @^o&ʼ&^zBM#DS40@S+`S /^Ei?#IGM}8X. +$5V~֖$W̬bǧɏf0R« +e\N`+ڪZЫ ӄjdi qmb1xXo" + kfpRDE0X|d E$!N._h>a̡ۿ6-N2rMk뇹kĎpcͧ%Ʌ]_r /$pa_ˉnvGum\ۡmIſd`q+(-xfGp"'ך\_5͊5X3,>rB¶W㚫E}pN97#4:B3D\'L+X#]zA, .yb6 NA֒eU<5UJiɵ)f:EkN 6;ֳ]4w힄7e.ӁB^,$$5 iC.gUUyJ46>-~ kAA? .*n<9:64 w6J[p?0G;&J_@cAC!ZV:.RXo- +;_6)!Vu}}]"9^fau8qmAs3YR*{~oS=J}]et<`vǎDY/UmnWlc|ifpB޷0.xñ#_Ey !&+{X&8V= +:%BAϪD xuw8)I\N3M'H$cQ RUUOEs_Vy4O]r)^b6})3 +3x , l4@O? Nރi 7zՖub5Q eYo8ȶ!eyρTVpqFϺQ_Q\V\*;w,w\ K>$ +LEݧ0I]j*ٞq f<g[+y +)Ef6s_@Xq@^Q4xLasxFS mW{_ZCzs0}7ab oG-L.Hu]8L~s:G7dhWrS3u by;˟B aj0OoyB&7?#vuޮ-F"z+Cl}̽ÇCG7^ cFW ߸-9| ȯ Ko !% +uƵ\&G&"닫˅55MMyW:@Gx2oo.447E"m}XPӃ7@2i>~EƢCĊ QK1'Kp$Ro^a;"\2!sg7زE\"$Ns]f-XeQt)"~%*Q(nF^rqְ,ïlچp&eȆXeee۷8O.KЃFo/\&F']Q o4+jE1PzNk.WV0 ڑ;U)%!B]Q ߒ D}GXyuv@:Ec7A+;qb3i&M +G02Fb X.Hbw@K2#vH?8A>G*VjFk:(9uK;)|(3$mP+,o`o[4 *~9}{v}#z/깧Ӹv-lfxF[3#$X'U{tPCS O5ӆM'bRUz9b,Á}KvO\Ǩ> ؖp[| #FG' ,$4Mɭ}`w]Ϝ/8>័$!,=;a('* rp|z{) /,MW*r*RwvlӺƀnN/J e4rƚL +JTP_OYu^G%IJ+/+of_=JPV_$vy!k2rt"H G82k^Ov<<6^v^|E? + 2:M{E>n(b[oxzDL^|_c?N60i=A>s;eT-olh'scnXR[*?VQPtva}OG'#ki +{jd?WP<+ 8i9ct^ΙڙhSCX@I(l:Hkq D¾N6iXKp6C9p}y5DDK$B9/(?)4-~+|tAx;~kد2˰euNu[4$Ȼ"Py0AK[f/oUgklmӰ*aӎEJ"(DJQ 7&XBA+;*K-Bd o[I*ekZ%SED/Z]0ٳrlV8$X >3a\XhQhXET\Ӡ_̢{0tC gvv#B&t *M^G{(?.ĺ J[{qY5)eq +j;O ',@G&>¤8 ] ްbD>[Wsg( iRnYuTby<ñ DJOnJ`(A;YH +*2Fl¶Etw0cS .3ge93ڄ(B"K>Ob1Q^Ip[+4 {sxZqyg"n8tl +'Z:u-^uev}ĥiG4BUj'%ZVO&y֕ /+ȧa؎alqgJ4ǐʪxxK~}tsegxglG#95 U$OGzDO QBRUzË܋wc,f ЛƔ^MY gL%\svS ƇvdCptwvyx{z|aŲjgԛ_APs}re^+MN=Q]iptcanmQcatCvNMZvwaRvΒk7z{hhbTEq7@Joh~ʶ + jX)/ z +6\-mk6^/tJLo ˒ ߏ  UB +endstream endobj 65 0 obj <>stream +HyTW_u BTF `ȢD\(BS@C/싊AQYEv E$0N!u43+Ȝi0W~0 MRbP-lL2B;Uu1q&EINct +_Z"GUuWc8AȉPG1FyJVNSGZ!g|1 +5juoyYFF6erw9%S)Zz-?(#KdtVF-/$4-edL߷0S[9dv п7$6ZR٠k545d5MX5a\a ArC2 zB!qu-s BB}EQ5c|LChL%j.V/.'k2FQhr>*S$9pFP AH\e r#xY.GTmӧ!^ +-t^H#?A#E[|.`bS*HדH.D#8"PA[u6.,p pMїkb=Iֲuw/Wÿ1xI63K*x$n;\RzdL) X#*C"Y:!@9 +<==BJs]}ki"J5CGhtiN}pdMIZe(7hT:]Ik046(Lc*BpC.i Omvq0JMkʎ3;Zh8|]W 7O=/;^1\exAղWsўlVZX\XL߄?a+(!7GQ[϶RnuC8\ރ(S=v[< y0#})?;R1)2Zvho]BO%vn`mN6djnu!\ yvp ѶʢG~(*aRSI޻ݕ[Ca92PO +$p@>Gj7ԊRr>uqx.=vorw^]&N0;6P ߐĤnW-J]8{4p<2(y_ +u"X 6**p\Fa>Qog| +Zl"7Y CoKޯQM RarxL +VҚєw-J5Du(xNZ("#JU4 +9IC$ [n㫤o$!ieZ"Ѳ @r0: ^vߦ.齢w,NL'IV+QVdKάA/ZU)6u)>jxO?/`j70o?71qFmS6=#d:M81 <[}JkUGPHRmj9uz.42wo#_nae<>FXm D(U'^g| (VI`V-9]-/ + +'^q)kx͙t70RBotojTaNd0gϳ*,<JgDe) +ƀ֦W Gc)4W={ýR,VJ2wHhiMKSֺo X&E$D)ex \<3, rΧe5>8v7u( "LCUPxsgzr Բp>R^iVV 3|5,9TP`6>g'd6ՁNC|u;%a.K5p6`,z{7szDwp!ډQ-C04 +y'0Y)]ޔرg3^< 4_KsEW?n#{Z +wpXUGet5z%?Umv]+⸨qxd3ɟ63|mݎ|ŒcE Pܘ}1%Acsl;jHv>ڷ޵Fn.j +z-ˠ1X,Qs +r"eٮt10|qېC<2Ta1$JHJJJkdZc?X`<@݌|b:bȼuP,1ePwݰ18w/SLzPLoj,eNp΃ADWםE]694XS<>3N-,w,Gm WKPxsƃW|9n Y8<&70;x&+^@!;XS:W޾ў+J~H/}HkQouԺ&{`L~~~}hK +ւfדZfbx},_q,rK%Rj3ucڏNM5HXMz'oO.s*m:As½GZ,TS[?+:ky!-> ʝv+TgqtG:L/QUIe" +B/@-7{LA$ +"Ntd(pSPEʻxEXi *D^PGmjkw\U9|rUr~h&`5c Ӗ C{za)4/H )L@rim%(h%͗wܡa&$Nse80kN.P!ThƁMG6e<^au̇`O/̜/Ȋr VE bE>& tyÈa!~10I(( VX~;[nA÷yw#/;+w阥ߋq,t|V%)9Q&Fƃ+3]Oմjɠ=T{ %HD?sQ,Gl!V6 Eѵ[< -v]556qw⦔ޣ7BPʕ*DB1 -YYNSF:Fkc⵰3<N9&vkj!Ozmx +ryWB'NJmTGȨ(3 +|⼛>􍞧tSU +:j .Jg(,0X+TutiBSol&CKHkҴXc>´?X(9SD<̨pw枯| ?~wWUUWuC]]a[_wڴy ;${I.Fl\DU0e o1aV anB<52̶yOnjOqϣ¬#(2ɑ׎=#ߩAW(tࡼw(VszϟQ*8 @Ic=Ψ(R% DN o>^~ηN RKt[k=!"u[FVհXYAdBi`ܔmA_{h>PYR-N̥+.gqpU]dsj?s7jFk4IciW\Kn?X3g8/=#J䲳S2qXZIۤ \>wso݉݊6O$id: G~jVj^'M&"l?4wLpzgc.:"L٨s +xkgh\5zY +FDž*`_@o(F"@s9g;nNQ[3oW&\H9A0MD롓5z\D{}JPir1htmƬ6m b ht8 1O1rΠΥ2}ڌoul)Ck;OzǴUEqh-2 ˌ{s;s9q3@N~X x&DQJb!Ϩq[lcwdP/(Z,2q Hoa)ѫi)dp o[ϐX4hqVUH[VMk5ڌXmnD)"OnƒwuTU;Xq6'( z(E4}]?HA7wBݑy❟g+[*YۚʦM]&yH<'Y]]-Gp{Kv$mq6Z-,_0:|u_Gփ(RMGsYaq?cǽH}IUri!\\-N}-7T:E*< +pC1mVؿM^uc]Յor<?$]ol<D3Nj*/w/LPp:u^(cp$3{F؜Q': +`{4:26QýaZiV(J34meY-z/y} +endstream endobj 66 0 obj <> endobj 67 0 obj <>stream +Hb` x ) +endstream endobj 68 0 obj <>stream +HW{PT9,,]o.f҈.Z2t:XM[3ĘIͨ]1F2N}4X5$m24dVk;"LmGg:wws@ 4ɡ[ u*rO~ \|nZ@qBc]<_xvxo"vWo`r+U*of== O׿{k`}@(ohixn|tUE};} M8^Ԃ)_t]'m3oRLm{ٿܟg.{phƕP܆E؅W&@k@cs===.{jbD>]r.LUy' llXjq$[(_q͖ikGƮM {`$kOp/Ǒkw$z&b'7PO%YS OmE0a FϪ8V}]?{}JќC{DEہ8$x}-{Ãwr}N7oK-4@;&6bv Z m&`sՈ+8>Zv]ƼA;Bh6)w pt=țKΧ b6m[鄈T Ŀ 9KKc}a23u듿xY\ejzˡݒ;ǃXO0 &l֋0(5j A'p^`A*vp#BZwi;@/v 6xs{q3~L>'=tZ ~V";>?G rxv^քN+.O:4]賛2: ;i+V&]Cʖue +o\ x5}BI )%!D\%! _rJ47.J<}olgGMoc1l4"RgX\7',an&$*NUY|wt#Y8 itPj>ze(E${rN>&w7Lͳ̵Fdx{} wO2)Fa6d)Q\g<;y+kpP'VK8B[ay9ÂSF?~vL -W ɓ,xI ܆oct"\]|tYcH*;!2LLس0 Bx{]@AvNԬ)ə2':֥#)F&'%:F8Xkl%Q`ۧ-- iܹ|Vb!)h*єNS2 |` 0I2ffh?i$nZh= i .C^E#Aŧ }A/X +KTcPӊԆ()#B|ӣLW>X4ꫨ|,í*RufK)PѤBM(hVsPLV +hǰksT6gcwr4y4 O( t)Zh),KU0ޡh%.~/+C'\kQxz$gb4 +Q}\hfu +b +k0(AGߧ)ҀSԲ +#^\pGFq~;X55A H--)U +fP5o59A^e;Z SU%|NyqYxBIJ u!I](h v^ŬBhwAF*CU{.iԤ!m,nR?OR?~B+qi I}ޏwޙFnYB&RrN<>v">W!#fCԑ22E܉.R5I&8\d2N]3,xj1l;ns:j'Cᖁ~[~;Tv(hG (V*1:XWdb5YwT\:ܴ:Gy6ts l$yU_PKMNriuNq2aNC^%N/r +r +ps߁߀_o/ρ-& +\.+2p(ocC 9]t +W8szqN":N>N$||| 6π@q]â}EKhO*gDhD;+>'=+QMzZzJHaUjBR(5HOi>9dg@IUSXJpe"8׬*l »+"/E=H8٥c&cDx[Y3ڮfV۵F1#+Kg{ j9e$ʥpk|\*s'w= (<7\D?sjbY8+zJ#@=и'R =YDz6O&-On MOQoQ"$Kdk*|gP3s6I +1nО^: ԧ,֍YP,M/w:-j̫p6=C+WKs30{@55(A jEjJQ=g k~ +eink*8]bCp;L~\#JIrnmUrD<"85? R +endstream endobj 69 0 obj <> endobj 70 0 obj <> endobj 71 0 obj [70 0 R] endobj 72 0 obj <>stream +H?k0wHNRH v+%!C}%JKA~ٳSn1]pFC1-D'NѡCxkdyQJKI0RC[lA;0?nbB.[MC^{4@-h{?KVj$ CGhdfr !I+`q +\nA_]l])cXY7NG8Uՠ@op8@:tokVc*V<?>~ _m>{OƸABfY4%^J{UX㧋?_o5Z +endstream endobj 73 0 obj <> endobj 74 0 obj <>stream +H\V t#HŚ&1$< !"0ٝ $(|TX{T-PRRM-H@B)4@?Ifw};0a }; m]MNaZFoW۳ Y\닕BPHλJw/,^?gNA-< 1b nBw@P4 B P3BmN(-V@B^} t&`óa Wkp7|D !"s*d= 9AN"!WPe]} 4vK&t;:z=~~(v6VĖbk 6l/.vA"BHyȴHKĈ,l숼9{RAh{+2>+7vѿE?A1!6(6,61V{ -={&)5'VP_cgcǮn9\ex9>ߋOƛٸN _?_7}~ ?_o(џH#D%1h&ڈv$Kb=sb Ot #%ɓ +9B#ǐjr2y?BH.1*9rM ȓS? +HJRT95faJ,*G=J-6S[:LG}@QKݢIKRz=@WS陴J[RG:%z9}Jз~L)3̔1(f,3S411)fϬd1-v7̛[A0s9b0gEsb6’c8ζ}aO9ɍ&pj\30qqr+縟q_r;=?pGyKw /P~_Oyo-~>C~" ~3?__xD0X0Z/Tza PX*,^6 + +ۅ +npV DL$DVžbX.~K(Vq8GL+ZqY*Z+ eG%\$E*.}C%-+HӤ&EJHsNKZ"-~,D[zCz[:$NJgϤ/H7eLdQ#JN_~@nSrFvɏɫ/8We Iq3d|m;7QWSY%JNYoB +\LX7A3ߛ~;cT {r- 71[@r /}= ؽvr٪ 'Ei't(/<˞{ fZ,8a\%a9ža%|?B H= e|WB/ϙ{դUF3>yPם{0ڠ͠-cz\{{sYb)l瞙Lj2i\=o#ȏl15bO¤xR(wD4$ :=m9eUdIyO-t~iϠgYzuY,9.{Ddg_#W?,aνo4=@ nn|܆h ܻ ܎Mlӽgnպ-`7Fcr8afl8/QpJCN1:_&G[њݖem\E՞;idȶ%,-a-Ax2= xcEk9۱x`gqW{teJ,G1VPSMa*ab2F6K|8a&,m.AhL+IJ=ڞ(;";W~H 4-FzςGK0ݳRQr۝ +C!b3134042 A3P$S$S$S$S$S$S$S$S$S$S$S$GSSSSSSSSSSSSSSSS /@_} /@_} /H_ }A /H_ }A Q(DQE!B( +Q(DQ !XQ<pEG'Ѿ˽%^bP_k$3NjYo3( A0C=C#ƠSɩTr*9JN%i4r9FN#!!!!!!!!tr:9NN'%%%{!2C!P2D|Tr*9JN%Si4r9FN#EEEEEEEEtr:9NN'EE D DȼmżMc{r'2y&rrw#=fL=_YܱhGsǦIT=PO|}I&TvRsޞ;D+ bu])bM*v9Xp_|Y|>,5kՆPq3ISGSV<ڽŵZR~ƘcJiSvȘZ1DngՈIVZ2- a98I9A#5 mQI֐䒺,9ciqkg2)L׮vtR3:CS[ʮ0-{,z?=|ແo +^I63hڀc,F0)Ib᫆ |w QX(QxLS(@ы()1eyCM)j֣j+QۏgP֬& so@94#pUP"܄iu*ꎡ,"6 _cV* va7`a56Ol:}hU*^vDIA/n@?hgy.6e? M:^As=Fm,Z;Zm[}Ql?f?G{-ڳhnt|Qt~MA;L8vceî{vI~5>;س{Nco%>?kW}/aؿ__@|T:z֣k蹊jz?Bl;b?D +=0߆y}e{}W7# GC$v 2:s?803 5H,4^a:)ʐJ;a.֣a쒙P\KnBJ&3tEbPD!ɯ|>}KXGaX'w~a}~fC6𜍃46g6eyS2-elu`l bk<[p `9 `8$b vXc;{3]v[(zAP{Ȟ,E #2!=>Vsr6'_qGN= #nqo9!b/:_87s8ߞ9IbBM$|A ֐+ $ QGbo|lHO9ޓܓ$/#Wؓl.4.Ds%\L .s#I=H} }IZi +g^ƕ5\yUWf1`2iAb26kdu!.q#gp=1t[rV-z~[oNN&9!w&G}G^7;A^w';3;s;woR0P +RMY +(r& m(yR%0%y؋<,t)=Di(23(+|Y<XgR1 +*x#ORx:kxNe*r/<;϶sxT9SuTP {^/1f 5yɫ5^חyc˛xHj]D)j mo 6^/nu|·D'S4XѐY|]D_+]}'1KHrn'}=,Yz",EbZz^Ӥ#"7fؔI$TL>KIJ*b{O餟K~bňI>HoCWq-u?@{Q?S;q(N8}/N p7e3P-jdW2pTSM4Oۘn *kuWTijAi`F?X6tBj{Z? ӱ橊j)cBMѸP/zRbO'ۤzmmtOҩ1J$(Z'45D!mwGq)Vʔɵ/%55ժ^Zcv)F7sM0mJUfӜM8?~m>8٧itSCM.TүJ)]uJ;3UDVQS+jq-&;j}F_м;V of2yrѺxcL͑Ɓ}YlmmtʖMy}cyc*E[>W9.wd9{5  ֶ;WŇXt-]GKKu_$)7t]¸b/  +7HF6sY:vTs2;`cz0k=>T|i#nd,tag96*L ӥP,N.$2X3贸<|BK.]Hvݯ +"}czr B n ddvp޹{/BB甴h8?+U0ZVSePW`$SH,b uy&I`1E8xM9) =qZ-y}.ƥ˜>4Vjfy\4`, +ǹy2r[7 L:&,QkZ5z!1y1k"/;9]l=fD `:fRÕetBy=vs_y=I-ld]"/.+"r +md:yޖ-2j^Wj~{Z6 vx~cTX۾Ob'=ԡ-4cpɽ][5L cpY GJ?T '/j%i׹X>~ .ǂ`[zfzꃺs" ]DP=@I`*\ҒRjq%_0M~ +A0u/Nq 䴲`Yyz~nj+&U?<>g9U*eqv{D4 +b'q &.AILD+@9fLm|:IݿS^jG%[;#&}o;fi5s'.A5kZs ׮`W߰@C#SgjGzPR.stO.niw׎π/F#4i}@ܪͻXu)b|K;Uz98 +to2=tOm=5MmEZ`Nތ. `*3ǁ)Z:]m8`_C{j0*zc) :TQTH:"mdZd)91 E1@NLE7-RȔ +\E +@wOd:oZPVDg891& +t9lU 8Qt(KDӺWVUΦZ/WzvǗ \2\~rYw>6K>83*Fo0վ,[:A&e]``nS}NTfˡl3 yBF٪"4{,Yx1IMz.pInDf\`F s-p~m5M\LLԗW/ "]\Θ w|`h+^P3REf2!RQ@ɮ;L7A ̨˨eO nD;3EWðo<w1&zuGO+i8)vՓw +_a8_wvmvDWYPƴVs^.>-'RwO]f9UFtX.zUlbBshLH\Z* @ϡ"OD6?"3#ێ`\ cYYEA\rG#V^;¬v׫`dHk#װ<*ٵ.Goa_>,xOsQs8G[XL6MJ II[&2#|OFJ +֮mċD.uϑ}߿:ܿy~'ۥ@ViZ:g`Lϊ(!} !awś(P242=/<|#uC1^A(1%oTMg^B=ָt,&C19_¼N_L?Ý$ +ih 6[]ۀd^>+ɯ6|:ZAATFE`lP cTj*bF~~Ϡ4c}V4uİ, my}r57W"c1N5Z=Xnv:?vY!1qQ񑦩Ќ(2K~ -Q% W]1D3L$FۑsQihXi*@x /0]LAYM3B2/9\47VݩE^c$j%>R?BIڵnoK̷f\V$'m)謣?b_)IQ;k.csgPv=qy.?j3$ +C+4 "V+`bť*r;l~D=`La*`gx&wd?̽}.G)pjE&OJ!$r9.whĵB ISQ4-]qH2bIe2NA 3r'bԵU;+3 ]`Fš:,͢>mHnBE +!1DrqW9wgP\Oqэ_3 [FZL!Q9#*9@6 Ľm3%UFt0эF{DPzsc-.¼m"hW(3)vhaކ:x|DGBlx1Fe&5󩢯ǮS\E`/s-o[dӪ@[ eyF {_uO,L}d) rpDN2GxUcLWV.I\3*d,682tR% NJӦaC42a%?ZԭMBb&`+ e҆mx [}jT3c@ 8P ;/A=&{+NVbiP٭teC\Afgg vwg';w;})b滁{Z>9VAQh.KYDI9 +tplhn5ESЄ5CIJSbTt7΂/\\$\ +)C99pޘ eOS-mTFl9co!ŇyG8 ѻu^lo:](D +?=JtIY(ڔe35#Tʭa@/:[C r!CBSQ RHrdX9⼘Gd6#!ؕhw-ao/#'@nKfh[z7èԗ-˼ G(X:+ +4KXKIt^c4J}6l|?geVK)* ަau}AOQo ^UVAeD>R4\a'vDF0D"l4s JuKQR!^ \QdTN}>.Nwx/,C_3/˯ y]ܞ[s(Ac(2C\3eqײ ]]813H&W)b=⣖0;߂֫JrAN0Q dz; uC ҈A`! +8a?{(ʼnQBg y2L1G M +qR8-oO$ _-mT\[MMեWZ+ZގU +chł?Li";?OdHjCQ՟ I<`5͆ol&!z=Tz*Դ\-ʭ) @|9%ӯms 9y bBU\VdRp&G|mh7G9-nxQgQ0_ 4 asr }.9})eL?pZ6\8jILT7NILݏw XM}MhPD[h mxFKTRi'x;#7uH08gߧC8*6s|]ǒ⭉=/l=_XJԃ#  gK-] PWЩGy5uH 2oz$w uքb'1/}3't:l j,e5V&`Os3w*2划łR!zeZ!$?fe@'@] g`|n+ F4] /l0@'aX)噜dԴ&ښٶ@?A}? '܆7M;v8SJG񓇔 CTJdry9% RY5~`iXRI]!~y7̫*& \ 0Ep߅HRtE4&A)YT,p# +Ӓ A6K + `,u@i|ů4)< #$^V`E" ѷ.G|Sbdd>WwЖ-H C/*Rh`ŒUޤ;ZI;rqT4Rȥb0KOl&a&%6Y49*Ff1iIJVMjTkv(^P]|dNR2M%i$(V.?"g*$'h6DN>{pĤXY1 ʆFr{p[%"7;@5F% P'%ٱ(ZOF_!Ft 0̝wii ~c[& 8'kbd!SUx͊֏Zh 3ǵUcD /d.v]5BFb0PkT]˄\ | =FTix_ nae!?s0%}A;?DX$ e5Yi,g Y5 u,xX#^&޳bg<~8~Ѓ\i^.Yz?VV#cIMVs2A; +֘/c c*8Ax/ Re}Owڣ@&D|%b6et0 +n PܗO)jUʋx=)9P_"4(t$Ȑ|FCr[VbS +4(#@ [betvAEqt戺ABp(T,||.h:"9Ha6qmCy!oS{ * X&]H K5-޵,<6P+*Pdg‚D $q_C6E 9z NFe)7Z}wK^ ͌Z@/, [,W ߇b, ;UjUCIUJvv<. c**ҳK%B#3j `DSCj R"M~o:խߛn G-Vq+&jDoܨbTϚ FB:M 'Qʇ$} s6dLW%J;}?Yb 3-M;u@~fr%ҟ}~w;Gq乼 +Q|$xI+Ug^$}% +h|X., Vv zF{/1*z: {J^bSr_ٓ+HtR,I>)Dx>{3(sh%L 29 <9oжxJ73,ٟà|yf z`'"ۥY7P0ZyPgnrMqqJ@/@N+y W/:=1ΠJgc(!oBxD=,rA#ʃ8tc,pCۨӻfM4B<@P + Qf9&p-8"`CEXE7nzlo\7{U]w|#bP(r} +k*eKITe#(ُ͜1i-4+,:1 )XR(>^M{LfiJ{]@*)+Dr{1\[z.tF${v +l^>xu ͦ@0U g\` ZuWHNtGnb~BPRuyThƐh푁=6_ꛁ̵r+Z#} ;T { 'dKY5o1cb,4Q)o@vx8|S+if᫂'.",XE^l(@6&y0u\ +czEK)BCx.X5"VCP,G?rHUV8ZIcEZ7ZEg M]Y:R*X3&ПpX$ ^`@?Q _bdnehla~e&C n e.gXJ/a'پu\΢JlRu{lrN(Hb>Mյdm=ύ1aA0k=$y._9ŦƧDTsX聽BFzUPR$ :,"3'JD1P Mᡗ#c?WƖT %"js~qιsBD"70[D1@0_Αe65%#R 7rpAI$8N> R-$_RYʄSmBx%JR8y\ʷCX Ρs-9"䏻x 3\y=g|l ApE +w+q=o@x ?#5jriP<&?^\bR"~DENdgfҠ%(2.zI:O D"dmh}.ƣ`B+ Z)W3MCl_o$ +maD1ےYT7&v0}>]GDbX8i$!~lI?o w YO{ͨFM4uHc517,Q4\Т*`M5nS}GZ<򠛗$0JMox3·&PȗBPؑs.K#N2 !JyҾ8 2B^t&,1Q>l" ;BzcdH! Ԫ:fHez4C֢7}Pҭ00AtDFa'HRn]$C .ߠQ]ʥM]$9A$"[tBtf$+n^$NDG +Rհhxl 93|w1R?B.ZIIՁo&ޣ #ѫ xER߭P>*|~W9C|2 +u{-uAAʦV(;Í @f?/śL%]q܁9YY9sbŒ<ѥVfzxcؤo`wj~z&Ak@z>/4*+  +:Еd"(A@"UP' + +"DE@qIĠNlx[svvĜS_ջ}}^sΑȰ|fpj{cs1"X/z=ΉC,9Ġ7+1gO +ʺNW8;g-^]Qֈ qVVa/,WAWuW7dx`~W|kH.FQ2H%ܑ^KczeV@`C-VѪYUXǪ ^KAwUR +YL' D` Fl >-̂ hM2 Bc)&֎*muv:s mzS^V]Cbݹ.uWUq8:>o9, +8hZ527I:7 + imMK ]TyHRtm3ܫPN Tv۠KPʎ":tmBΥ#AGS#kAh3Wef٢켃Ek~>8"R}|{+3 #06z /o/7U3̵NvZrңUb^ҙl`|orwE0X 50W 6\祤gNʋ_B|\37GK6i+Z;qhc:,lS G̬~3nk1|#*c͢6q'csI 1ab)ԩÌFKJ-pdY򹚺Mcu/X=DU!K9*@e+ hIDQФn$zlR 'QXc"*gC<[\iPjH>xfM3K%ܽB]NկR2dm¦\,%  vĞ(\@=˅Ŷ֑h'eBt,eLo +xFȁ$w]-<|_<{|>: DH/<,o=zb({9s5ðd+jIѾ ȸ(iW#ܔ!Cɂ*xfh!v8N>о /-=.*m9{<|]x47 {y! [\by 2{l'0Jqt'CGUcA%oHxwXX?b%=&iI`(L4[PDtV'V**zm* ڌQ5 ǃ<(}%Uk*:GPBT% +hEpHBc u _fHGTD;]4PHoUm@_(ܽYv` 绹ST^r᫡rU'yOJO)\H$z)h%w$y$c̃쎃n(nWA!"ˬm*H,+7O\ۈ*ZƨN`E˔N~sx}WyaHFk9JIɓb@OuHcJqP$oEFB#yE*e3=Wvg霙nNer6 B;'pOHP`D2 h=a7ᖩÕ +nf6?%uNn{FDe2YVflWWr#_@$EsbҢICenS`77V5<.>z`P ՂS66?n%7qn];7}uN:rkkvI\aZYcMkeܟRS٠^q$qAJ +|'Y+eiҠ,Rϵaxӈƌ )(ADQahfih( B#b@D\ cI,ϣn[3iHtʤ]o{9w\+y 5R# .rl &xAsF򧿳{/Gy! jڽ \RLWpeIYG2K; * Xnx]D'psҸ{4'i쐂)XUnOo|V=DڵC:ޮX:zJƒ^U6IR *x>Z.2B+~^h~VoI0?,52ݹrsdz=L>TOG1ꂍNC޸uU'{G;HA-ÒQ@PY}3He]Db; nr +v;Kp+/&aRA\dbz.~!RNvlTua$wؕT*aGKcjLJmxA\Bl| ?L(Y̑'.U\|(3'+y آ % ]>S_(}lw.~Bةu^c|Wk(0tA^Q~1n0N\]N$F$цt6݅3l%!1y#ZdC0 +`3mw-U0G]4эWF$encϠbS^i!}M))Zw]᏷@9*u֟@|T\/2."e!#{4fffuY`OǃPf0mGs 3,JW ^A&Ȧ-[\Jpk>Φ1xiuj.E>v؊8b&}n-b wXj<lV ]2d-%)4c,Az:0Zbe q%^,`bP,JQ.^ֺzWwnǙIQт*C)/Gq"0qzP= k Q;Qh_ +-$`U~1@zD4=ӰKu-8ϐ[E\CȒ2+C:{[`g0*RWa|pOȇr^A:\4H#EQ,w-/ .FӫDYqQS, [M6o_(AI/`q{oYߏfC~4R oY3\ +yT٣9L3NT g1ͽ-FE,; 0s<;3gK : ׶ z,i*ºS2ƵL1',-";;G3H_ZFEAvƠ>bL@’O֢{|,:R +-r1L?FX%&iO NPމ2|NKआ +zS%^nM"$' ZI +ͻB}1vQ6  X*Y*0V94 ۞Lk\&Ygdij_Lc F1`.K7FE$K**3pzﳩ.3&~~8|S s7SzNx9 SOM5{d[D`բUWDŽbqTA!iل/uM-g(hVP+ ,)cf>^˗-iԞԐtЦSc]5xEd~|yPهȣӼͪKtKL(XK/qDK<YΞYD>?ާ7D<:]ju-?ӂZr5-TF.#{P}.h"CB4>&JT>.ؑn˚a5ϖ+ 棄c Ջq"Qrْ蛏 OuXEe + +yyda䱐h>SWxƃxܠJ|jX"-@>"&]]@_e!mkc9*/2O1Sryx"̖):/ԌÃQ뻙'ɴ08Jf?X-~̐5,5^\;i `)tVipY"GRyH>2}/9Pz +_ SnVLxs#WNmKWkԭtw}z4WDtlp `_,|싩* J( C v|D\T81F$$\Dj)+q)UkN3>LfnۆÁ% :k}5dTacҾ4|5 2W37.ZA!#U0<=q; RDn[e!sb"v *܏"%B 9La[ޛǧ +V`NP[~[_zJŔΔ4нB\"7[7kc:6a34xsAbDhL95{ KrߨfXqfI#!B TkzECwpRWKdA`MA."KL@|Q!bqOUdMlX0b ^Щb[#D!Ѿ4}q4X ̐>+J .,~DH8 UUxIqG(w;^ \#+}߹5e+͇n 79XT @YB|)]M S3n)A +ݗc(x7N$z ֒tC|d4::Mp=3FJuS6nJg(p=o I\>n?9{1_-D6ҥaCDh>:X6.ƜsZf$ZpCaN r߲a9pU/·$Ng@޻j*xfq(iz=-F_qĄ!Qp36e +莜R]qeϞg^='T~3Xu]حSUKUeGY}6*ls`E +two~|.}ʋ3;4^S X!=ԭdM|.RMX q 0 ujK\*b"󒲗[ f\L2= W -%E L5q$ѝg0~tƞ.(_y\4 +Z<0ˀ]7nAe*sgs_jfd-0Z;>G2&{'Eᥤx#0))չ*-HVG|"gN).ח4Vҷ/lptXɽw[4P⫘U9UN4 $Nzf?6: Ff%|a|%v +f=ruԝKvZђyUkԊRoT! p B@ +Uty;]m%R 2=QSӅOܸ#J126.S'-M {G{^د"'#|vְedlstU'R0@{ >?@-A8L%+K)KmEO'{t1pZZE; ͅuհc:{|eOʄr6ةfwɨؤxWDQI3ܗn߬LA1ԘI!ox}r߾ l2iZaa-~wkܟ0_[h+o-mo'%~ux_#~/YzygHW-O=ɩs_ߊwРoK}/Kѓ/ oޯ[[ڷxo˕_7kn}?I_A$0 +oY_^'a5pd,iu1̱,|Ľ^#-JDxy%J\L )46MNVU30ȯ(>::UiΐAx` ꆔ 8i`<&c,6< ރm6u2!NMgp,?bl>XB+8 br7K9,Cѻ8xhȟGi;"ǪlK'Lxde H#пj +슊Fj$VC"{o# x7nT*I$O9Z +>ۥe,l,(Fσ[`CjQĈE,E;GEz2)$*e +`{ր r4,iAh +QEqT"hX6<2=E} ,*9Z)Mkegd2H`:r?J>:Z[/ѐ9$ODЫ0QQ(}?rIjL nv$<] Xl&>` .xHW 0_xo*Ec*bJkr 4 Xq?Ii?< 8ӌ6)YsAt"ېGh8 B ӟi 3C֡~׋{˻>* zaah6Vzk ,k{6ki6Oa~q"W33)(gyckT "VN?6 RqI39ZVt]9G +d T舫PWO([8ċzQޘ3v.r曟1bJ_K+tF9" +qT䈨k$5x:tmg}^EQ]Ոw7}jLӑc00s: ~ 91 wɈm`BcUhr/6rRA8?, +(B# Ov /Q0gã}a>XuyC˖)e +@Zp6>'[:^WVBD!!"SY~_*Mak&[4>9J]CI2,9D-hU QĈHf~%VR:ؘ&.F6 < M)-zgq~Ƚԁw5Q9Z\n$9W+ +J5$I5ч$ޞ+-Ju. D|VEqQʶ*T0j0A *+2c$<LyuW:Uރ|Z* S*2,eJg'l^秶qi(l^ hrg=ݍ!Ӓ$`$4x)tg7e(#֯$$Q2RVWEk%xk.=KMِN\4yyE d O6ⰹq SǑ c5z`'~2`U0 +؏gaYx'< 05-Dd?yy%x +Pi _8B:_S.u(1 +9;bi"#꯵ubʳY֨EMQ''bl׊4~wwtT+?67>7)MMN&}wljXǪCaψﺿxa_ϫCjE]=\s+uCGl +mJ8~L6" h Ɏ69v(?ګ<(3/݃Kۨ˴(BI%xKԀ'xrdPOA@hQDMbP'X7fX=sbτN AmdI .EMC3MߟE2_(JTQB~@+Hb\.X~xZ!D JB-n)4jZ+fXLKiwbK7ce.1Lz)jUFn=-((m 6 ]nmPg(EwD&h[C)M(52=Z@ c65hLY{{ɟR'sKH\Хv%U'%H$./P<sj^Wgó ln8Lm\Wu`(\mlSuZ@\ꊞE}FV|lPd@x␃51?8o5=QW*Xx,F`*ddpQbsyX)N4?aWmOCX[LxT:$NxG(dDޥɫ5$|H^ftnX?j9Ϳ1 + ugEϸQyMlikw)=FP-\[8l_/擔]R^Qgjh;7]ˊNIŷ8ww8tԡs@?!d3x֚c2>JqH{C74Ec#MJ5l4$+aW2xc%&ݙ5^ǼQelAt\J2pgH~oƒ土<.^O8Wnh^|t+o ┓,i%D\r*`6C&#~8WL̳a|jPDQtjoJrc9 j#X>7|l cG!Y[iڜV9g'(FuQ`T y\%[О3*3 Q}}xUw$wاx-<>![^NGN$l* *I k@HW'Yߌ1v!nx4F S*(4qȏ]MZ*= tz3;&j\1MI"Ѡ +"P / & B" VdQ~=uޞtXja~;>hr#<7*Z!7GJ.NV$w8%kxTR#ijDyl0&XqG &h^l%a^ p +Z !Z|7o/;ojރB8]}/k1P&r46% nAxUքK`LcTֽ762 j͉e5/%]LhGEo 1OK i+` 8?]DǓVU>ΛR}Zm6Yx z(j䷰lyeβHw'i/,7=Zpg&ru]~>Cbc} ¹tB!;ݭcn>V\f=Lǿ|["73\\dj|&`D].+K/I7˽e hB;EQ-QYt<0\nӭ%hL 4~ƹo@ǙڤܼR%r^k i <*ݞ1cLjrP}||n*&/_% %}GDdo/4۰U%`#ְdތ.迵]zk. 4r'%0 )n=I xfOn}nX"0ZaţSĪϗ|ϗ9w#^R-XδkFcao8  ~s0O{0 s8& g*H :.8(aM] kW7̢ 1[#՚4vѴaW݂ܮ}\r7g&aB%E +t]Kh/v]s'K|=}/v,hT33whoTUcƞ"02e<ӶN,e[ak5m.Ox+I^`HM?FNZnehV NiiCaʈ,sdz,vK+ANLB=$CLS]>_EFPs\NmN9O&[| _fՈ}g! Y a;Ѥ5,!pn,%++h0Aof+U|^F'8^P5bwAC,^ܒK|9 ZZ/Vntq8)uwSxXmŧ +FxӢ:z@boU൓dб#~$H)3ljn$I,WoR^U1Xq9?trE\Ct?^nq~`Th%@z_:dҥiPCe.!?|6ݘnU9uQn kFfRD"<]RdUamN̲UlŴ~e?Gbᄇ-i +`b֠@,,x/AyMςn" oG:O\n(qO=m C2$dF+ΐqXBl1A&pk ?Kqߏ!Wz@8݁He;C7?W¶g;Rq8])OfOu9)ݒ6ؤFq +@b Ț|Nbd/6&_[9!L> 3gN}VC=F>`o{X\9x2'+EJWX|tw֭<<~9?Q|"28ՅܻTJq6N/:"> SgpamHsEbh}U%82(MiްW<@$%ȆOxW,׆<; +։ZqiçL{cZJPr.Wإ$U(7}ݬDaq^\vޱbIj[AGX)BBi!UʺIL:6>骮-ɒk +ơՍR<ȕϑ= @jޕ.x ]6W,{=/وiغ##+ak~[!?TcGRtLj?h!<8_7/u4 z/AE,H5Vynؓx܏1G&A X 2ȁCj +D +8RՉMFZ6)uS#vB;NMa{l HM}H}pFvXzC!~^SJ =c/ H;>G<S3p0k~'#ǔV{||\z,l1J!_V=T &z*icB-8Ʃ ̶CԑиH _*P̛.)H=Y}"S%{½-PD^Xi)+Hୌ,c4N` ß* F<'*ZHJ0ӜÉZ(;4eE*O@8/k|^܃I89 S+.Q庹vsU/H;W>q.f`/Dz><$mFts>YfG.>/Hz^?R_DeצW˺R ^vHr<.P|%IW뤂CddښNNw21rfBWqQƣh_g*Z*{%*nm6`S#p`VӪ;Ƃ'+|co9Y)1 2iCSM=eW"Ud66uN!0QB;20V:eD"Zش gQu~}G˃6PĄ^lȾV}ͭ^Ak EѥkhXE`@4{5v0ÄaUzRFK KFb*ӑA Brc[pRpR;D~ ȃH XfbDu瀨J7yU 9|c pku[-e3t^>(s:U/INgx B"'0.7n*y疳1L~;hwN{2 F=o4ҥyg&O{<5E>̌Y~4/dy&Wɜv|Bvgi?Be_lYـ=ӌ) [Sx/)Q#SL|LѽgȀNtIr:,Eo7Ƭ4&4 ڴ̡ț20m:W͖꫚.-KkE4w'ኴbG>ivp1'eoeڡy]M?,\UBN!AA +xk5r7!mP$.$L])/O!Sx{^P`Qʀ< i NjQN]xa8Òat΁ࣰҚp#EbE3NL +g/A/A 7Do(!}<8b3Lykb_ha€+`\x=g]LLg<(OUl'i+x43!4,:`Lxk8h4,n=B c) g)[0_Zi-Xu\{>Rt)9V:r&#Gܚ|!Bba; +ҡ1#O_#W.!?8[&p IAwm[mTJង-(}RKTg7_>G1s:a~,Xa?Dg)T z+ؙA˜'f\8L:43[a$|!CQT81bDQ"8Z)W(j4gˍݭ|o]޾p9ڊ]ܬ`iFP$SaX7"Ùd+gJ%x<3ibEN{!=<'%>yfd!vL4B0!79 +x-|Ϙ"v!K(2 ~CHyE _狑:l{apxq9?Þu! AaQ|4똲G.qqmWLOڞrrYSۅ X3}K6w' +Q&'< +E@8#]i%E$ yt3b V@~>VRL &_ﶮ %!kY27n56p0uŃG 4UR^ei>fĀ5"` +pB`,x&?4C$6_r-D@.2Þ$lz' +LiZ>HuXUDq/B2%6*yTcdDh $ B kj!ÓavGEw T &`Mu[v:#G"Ow1C<,(`hhJ Ii^AnNPjXN}Ywq4Y 5S`+~!y״`DЮC/hZye¸.a3%$ČX.wpSsnpL̡Z{, 7R;5 9cOe'pD%MUJ  cm˿Wg4#3j|cмߘ7KPl/0N7LoM20gZY7}m0F<̘UCb'Sٸx v2ɌmذJq##X3u@5{@ ˬ3pPsML=nr&`o<0̙[op)ajɴzfFk` ,wCކF F=Cxc&fr#Y#0bB+gڭk [dpZblH lF[) hJ =>=6#ZNVb6%s=@ݾ\VPKTo>,.=#mIahqGM].p9IIٸ۸BL㒰[?ҭ#| u{ŀqok%^UI7(/νϣ_W]]Oh \Hob.<aiN6S2Ci]m1T賗g^eiӔs|mV> u_SBW-TSI'ކܰ8{pguf,9sOA(PRm,0qT LQT?*|1kzg)Y00O'$9ɏE/?1_r/%t<D + xSp =]oc%_jIG8"#e+/㘾^r!6@Ȫ=P7u_rޣI*1ȩ`_AyA**/TI"lD}擹pPsXTjN¬̮VdjZ3Ĉz AA鉧!(" .* ( + E=eP|N%GdtիL4972"'l C |+MKV¦䤪fkUʍkr uD qvs噗esj\&Έvp% Q`֦`8PYy.pa["G;1/ъ[Å騐.d[)<8`5fkN H I`VrRZqo-*6-^@|F>񙥍#$&mچ[ +,X~wʏF9'X*}R;4<sE4rg5 >?hTR/u*'P1ọ㇅"e}.Jż.vc*n鞋<'Va SD(5N 㟟,ݒ)Ӟ $mǞO?UI1nCns0Sv~m$׀MI+ ] X𩾚OG%迆#3Pgf'ow%8'|9G +dcvݸ|TuT ']:Hr & w7y2&(0a 0(@\:.5/X$ JD,8p1i2UpsNÔAҵ$#GeNJ 9n'IN, /8.KzK|μP%o'7'!Bm RUDNo"S99 {o>^o&TI<|IÙb.:p6{ՋЈ2S!Ga(s(VsI/a kɼsUׅ $Jj}(Yw(3+qm퀒ҧ5mDM5tܻ(dڇe]F)^Ll0qFp2 FzQ F֨n1?s6ʭTw=Ss_t$?:>$ +|,t1О2[F{8iS@V `VQ0w!wRٛ; m͇Ie<g1(  %%.ÇwYaG?ֺA^`u R=PY.*擩 )5c1& TtE }fd fH:avF쑢#%XmblN^_DiKx&bϻ ˢcu`,UE5husza _Z& ։ƴ~xQH;\wpPQ(l&lu/  ak*);mRCBNL/I%K5ٳr_c VD/ + +.]h?:+r7) Xz +2OcvXVA\O=:Q8(`Kuqjm:NQ065+BT P|]0>rȘmB k41ZmZ`ԾTW\6ة-]L](ȰN.;<y4t~fw *YϤ+:PCK'g 6 (iF|V+֣XXio ]6=OϓPh;ё#İ=#ّftrǏ,?ܰ[h1\쪁y5a4{g]j56U,p݉= ;=n~XSyŘm&U"/݄~Q=*ca)KD(lMFʑo(F:l(5FCV-Z6,A.HKnpcaju^+[U<2??wglM,Q/\y-}[ SkUi*8$yE<FBz; *.pL7l//WsT@T7~[LvdsoەcjcZY0yY~+˩nd_[.QNni-$o5#9 U)"%ߍl7kj~xe(7ʆ + +a _o6pj`3|ߢ`*rN",~x!c H-!DX"%:7T]%;y$2=?"8=̯w+ F[~ FԴVvh4%4@ }A&HJ@KRo}>.ׂMnu>yό& z =z +ū]$ǵ˗"M]3t-_R.ÒIP}RRO9JZw5Ghr/"v3m:a#ay\n kbS "ĀfG1G~qa[aS2S.O*vWY(ٺ0G2E3 7HtY"o%0#BG0Eo1gM@$i$Ѹe_-l X>mE~p@4~y4+FvND/dN!NbGKW'70:#9qR s_A62e~WaI<]'o~tm$X탎@l$ +פ>p&9D +#vwc9UvpdT'b0O?@r01 c;eTqp 7abWj H+Z"4(P4!$(Y%,"@AqA@Q)wwEAROT v8_rs9ϟ׹gce>d$_ T'zTi& )hɕѪ:$()$ҩG4w3=>I0t be s UBz[ru0 XQD)%I!$ku읇29x՜~_[[l[62&{]0:S(ڤڵ6a-kWC+ُ(2T,* a>b+tYB1JqHهg\|7sSs$b}XNVw"M渵LKoodki⊹|]_?KM Հ%Lܨ+f.<,j2z uE &U +lmY;v%Jw%In٦Ph(ii8<15BÐbwTk*m!_,xfF>MQ +!"F2p򃯈yCBhBٓ2߃T#%KqR,r~ +\=|IL*-<{@ +s.3$~gX.54 baE~YA|Fo/ oGِ3aHc"o+s LUh/+b|%C6?Ovu(W+-(+ +*<$!@$€S +3jv&SHQwA=:G8+v,Cq +2^-ig`|5MR,1ز3 ?~;=ngMqhQ=pcpZآ@ѷ3eum"sBRԑb $Lh 1rOiFsLON}`7. ~}v'xļqD6 `!wg:yL /عH:]irs\S |L#%&DpPՔmǺrX_TO<*g"  ++T,7nώbVEc[>^4l]]J ֝;O?lrjKCy2] ;%tL6QRD#X +s2qD3\lx=ZK9.= 0ɑo +*w!W=!j;% Z/ZqͿ= 4"9:>..`WGo"!Zg 6ܬC3gVVXij& |.C{ yb[ +mZ˼c,TIHˈ`)|FDյ@4(XVfkӚLkGxŰЪׄt.y}Wy%9ŕ5tM@j!B٨6L0݂dwQ?2Wđ?|{ _(8 ;j@m"^imjUG1 @߀y&[ԖQ {;h]`Roh\XehJ}C}D\9E7M8.nLשO-;1"ID6BmO|lb2xYbM3׆UԎP N2uǶbf?Ebx|^r?uiMUr_tg&@jObM}(l;S]^zeSH&!Z.(>ڞU.P|P|@bN#{0o?-G'\щZc L$P ҿnkv"X<6L^1 J5vl}q9n#2QdGDaʽemrFL#` +x! +B83ž'a7oVEu*UebK𛏸FnrVYucV@`P@VdF)Dxp,._ l,|=k YC)llA*$cJ˵+y`56>HOxNм`Ȋ+#!EY2 -+<쐄ЃQuĝè45'qe[UƼ2 +Ƶك󬒽ea`X q 9ݫ߯K6᭽ "^s'J0:0㦜J9.^veKz]W,:wz*̿y{a10B9[[7Nn+3TY̴0_Ϙ R&`j 6'ZDd#g:DvKȈ&ZKɤF:&KEHw㩥O|ll4*roBߧ&oXaL-{5g.k!ZNA)vt0-^ې+ڹǕ\>LIh$qy$}\r:+ ]#]t(oԫ|Ʒp`eC{$ 8H: LĝAX$/JNm.\Rt;Fm\O)IaIiG`,Xp_]S[` ,пcIilbMgbfB!gm>ky,M}ҷnwѾE򋄓.-+o$P_;w6O ?eA;K!F>-Pfk&GpWot$D'\'tзCXixIȨUj冩_SCnti0#Xx:+"MO*ؗkURuNeO"V.HVSī0nn~%2(g#^lAp[3Kt@+<#;b:2Q>WXbwg @hnpd{F 7>y%@ +NnQZ`:ȥ:lǢD FH,N:JXt,ƽcy놺A.Jnd+l`sVp=gMD~궷$^&s ٓ@Y[$F;dj@ kL<#4#;9$UV!MEU zh4C&w2A3>QGЭpC 1z6R.r֩qh@oaYF%/A CA^=2k)\ @׋<`rx"Ƨlrg"58C5tJPXo*ب-CvݴmnX3nU QIh)Idw)*D*CJ#ܳS|dD#yX(6Uʈ%U1GlTO~v֘,W{QGy= Ơ+m?KZЪ[ylMlcؚxVbvkc ⮩vUey1mMab}7iNq'YOS1MTiEnȹR ͺ@[q-\͋[8EEL)u:JMm`oXK1 [FCB۞pܪ0{E-'c[h:Lܠ'` +sƋ B9EӢw5V>;" $#8O ۖDOFvc'.I)GK{zJ_cتiG?I9ūg&Z!8ͅ VxGLٷ~?[{M]{ \^9t"3h`T75(OV&J .F2fIۀMP_^˛(ss )W+;-VDx9; )|5t}/;sqp{cy:F 7@_c =zSqO΂y;JLQ=;X֘oy_)Mgp/ b_<6'-3jy#gK$sˮupgdj|WkHofOWX!Y KߢNc] Zvwٍ*jh+ϷKiľGJR`{mVXY +Ш2dWF +ȗer9vFo3as.OA3oe8-j~!~wJ }ݼ66]%caSL4|4xdL  +!#'W?6o0Ah@p4c_A[:Sv1ʣ +AidZ};}qK*(m^i +<}dj|D5`o) +++mB8ez\rxđ#^  [ NJ"U]B]m̘{0~1/`MXǁ%qEKķuב9p*֒4[!'|;eէIcWE]9Zی7zm\KH(1֖E9Jb}I9z7~-oK/&Kđ'}Jc( .Rkǟ07gRہ;`:EX!IT/h`-uTk +˧KeW紳T/eVN،0{υ!&&9|$Ɛ.(^TC9'K? +f YB( ^Ѐ ;GW4` y4SQ)^""dQz#Qy:1@0 +fLtAAw`,0W[?+asᶏU) 0Hhִ`>_qjA1DIՂn1tS.Fx4cފXq_> endobj 76 0 obj <>stream +HMo0Cv"i#T!E 5pȿj9}fbŷ̻m^ݗзUN,0=d[ TQLce>ZG._d\cASmWҩjϐRu ;wmC 칬MYi!+5̥ r٩9sz&V3&`Or&/GVxvlȹ;0ECBr@n}nUr67GʴH_䖢TiF1`~%{̣D_ܰiυ[Z)Ҁ<V6%*aE + )i + 1÷D;H)'厕=) H&? OKxՄ%6]sWx1[']]Q{/Fn3 +endstream endobj 77 0 obj <>stream +Hl{lBHP?B! +xw[ı؋ 83;&TP[)mAP(%%F!*B*"(h +yv枽S5h$ Ib:V]7fuV YTXt㖯:L:B* &;';ωo=rޙ?NKlT"6-"Hf۹A +q.XB\D Tb'Qb1A\Ku?!v#ě_O$ArB. 4,dHVH%o o!!w?'w{}:6y;9%S||j)5R*G^j*S)r(BmCG=H=BPP?RG/34I0f>s!ј˙o2Y 2W0Q*XLdifyy9ȼeg|eig%v;].fKً쥬J[lfײedmgo`ocw;٧ؿb8nSop%6q6sqpwr;qsp/p/qqpǸOS<|~y~ ?_[O7O{W?' pPX*,4a- S6V.τ=sApTPL8-Ң"'./;ŜXqho;'Ž;'i8IIKRZZ%uI}ҐQH/(!'/="=.=%핞JWwcqtVeI+//+dM\.Ƚ<"_-[#7YfA1 y_~Q|R)||erҩdUJISQTꊧlQWnQnW+?TV~BOyArXyUyKyW9WN(g;cn=uxYXn-V~ҬjkmΗJXEVhXJ89X[U/.MA qJRju[rk%@6'ᥧ5zWzT^7ݶ6Cd=Gkh?6d[3p1`٨pEC>TCmWCh_ht8Q-#rR eiٷZmwɌ#Uʕ0F[H%L WVJk[c가k5 5Vkj[Pkգ[To7hʞgFbݶ9ryqHEk.ZskE}a?1@F7ڮ WFD5DaR7vƏ>D۝F2m4~IϴWfPa ̶noYcUS^#𽩺ě(#L͂=fr4հވ֜2ɱ.7v~^_ڤ9leź=؈z4Z yJ&ˉfnh5"xxF/aG}8hn@i^#E`!LNJݎr/1[yK$؞E +w^k 5Ti2%7MsܶS N85tg3qN$ ':N `rӘb**N0YdULV1Yd 5L0Yd 5L0Yd :&똬0YduL1Yd{60hS-F+@ &g V3 &g00Y bYLbr,&g199Lars&09o')۩DÉ'dq)LQ +/aҰ7#iDT`UOm:U{||a%h(Ϻkөӱq۵;:/O}|oumh:Gj4P}#Eo6>X=]E]PB;! AC߻7GćNOT 919,CDS$D UC +.%(hRT  ziB: B: B: B:1t3@/ siK\0g%,`KX2 dh/iTCKZ +RKKKKK]fbހTٙb +1HPi qY(j2YxBHAzt." J4HB RDI; +P@zWW`p7{9~f<03gSѴ ҅p(~DS4,b8NQ)4™t#NE' `o.ш$IOx.`L#(mM%tp@|xD_414ȏa*B=5!; ]ȗ{ … @|@6A" & 1,!xh@?@ꡲP@2 ݇`%u +-5;")C"  QveZA84Wn-{zm{nYCA5ݷнX(YQZLGK"&5бA '| IZI&H~T+i3;( ʺ˙Ug+)4)baXc'6ۋCT=a_e:নؤ8UZMRҬ2ZI9RTyPyN\^eY6= M :{hISL2ݤI)Uum׳{/W{SGd\>tdmc6s7W7`Et|}BIY"ޖUհs9$[))SOe=mw:*EiidWyz&^>Ӿ~/Q;âyǟNd +1gq箳got9r+õȕ + 0X,W]$tw22Ke=:˻W?LU++m+YsUUԪjjfG(kj\kkjksk?=>֓::N޺>A!a`cybsPyGs\󷧶O>Kz.yI p˥Vx+5uͤ6.~=}þcӿsԵ-Ǵ+woO@\D fzE􋦗j/ QJu-?GFjG^خ2v6*?j92??1f>35xxW:5sBr"uRjdd7opӣoM͠ff>͚FfN1wbkP0(h^}|Ic#ϱsFmVWد̯WK$k*ֆ׾#>?|8cSru %UQlnA^ &l$ T^wȀ׉fAx<#1 nex+c%y∼i.jj 7`Q<36e퓘 F,5*0p0!Z5g\L. .0"\L ڋxـxP~^j-[#n,oO)Gv~r s 6<;HgO7؉g +};_0\m b⹪  f|! !N o*;YL5Xͪ2];;ޙIem)J҇CV"Q$"1Im(ƌ:)qMH-QE_(:lyz~޿}S#0ޚ;ë"+;K_EnI)OK6UtKGoE+Vi|Bt!v\:[`zn]cHCI"RBM]ڊҟؖo%{8&se6?dT^GʯIk.]aĨC  ށJvIeG͇Oൌ;IGvt"I3$ p¦z||L0B'`"ع,<1v΅J?4cFkY15,t9βwH@ +UB.$2Hx 檔mhno<0Q&"D ..>>C.WB!9^ (1$BtPtsxAB۵F)ㄣCI$n\>SQe2_w!0T}8ZRǤH` ~`̇ + (h>h"eb`65J[% yy[-\Gi1 C9-q؂P Q\;ǦHn?>} G`FkGhJj2-b?9K c=W0)he)8|CßGS*!Anইh˦ȎPTw҆ 5^av;4ꃬ!k>gi_9pC3H5p"d/DvMbaaaR| q&|QPK.4e>ŲqDH 6ôZLG'%+?AJ'2 7!&Ez+ooۦ@+DIHV`3Lss f4_u@yF 'R.{G3؂s2W+;;V3)\88"C~#`p^CYL^F|0&p+"~U}'1e/]ܻfO|[72,w+[ܟi 9Zl"s'nF ϩ #BXmc` d$؉?J(2N?gON'}laY,G_!12yZS^ʨnѾ1 +R˸$uQ|z@R!9\>WT?<`O|gX[;,j_`J9/6 B~ +*f=fL8ĺbފ&5dchtx)0B% EX}*.5b& +<:d#JMDab\M3$l>\d)LA< $B<_UyCDvTݬ= M}D\#]F7(If{ێx]uHBD BV^WPi/C:n]/n.c]YSK-,&Eh# +A>@#w5f_if XPSnVUಝT# T|+d%@ DÖG:XIrVTߜ:R"I0ƥV`JޭN8IOS}(/kom[W` S\z[Wz)YEca#*{ۼ_5uE8vtK:ƊXٿ{\<Qh ,O"x1KVxs.4ڀt cI`sY7Q^7VR0T cWZnZF` 707)Dq2u +,Ұ($ bph۳ô;-Qt@!AAE.uU@d9! +xq" +(x Qp]5<ϳh?zߪ30';"";')TԌqO_G78TL% G{Q2H4R?+%X*!La4(̣u5 Q)/ (V'֊4;mޣ+/G3Np9Obolvѣ!kr\y%*S%oVi9 ı +# AS.@칏Ga٣)aaY{g'ϝo2~"pȲQة&¾b Dנ9{$M@C_M +ѸKBTRhA 3OhB3ߑI7 RqC4P)Q2ú!#qP +gmo3яU;@Fhg} N|mN:-pRY* +xjAʜm̼J ]00`}U +v;ҾM$zc|520#940CmZ:5#΀*hO3:1Yg/s+a$47H(0y8Ny~0sbd`Fԑ)2R0 ^AK}ag:9'/-F(pjk%~Ky5 44Oe;7}2:-#N`ދSyfLn~ &}ps6H0~؎Ue +K[Ni򈀒żi#K/]*i+O?rBfPM|˝BMɖr4q\6:)N)nkx(>,*AM17S_;Ve` ZhH@J)"XB_?G,@i]NqVzm\άuιs4~b8ad *B)=Uqr724tm 7˷^%JQyY<[ P҄qX o&k]k&eQS7WkM4$Df{jCg|[4 +vY]5Jg|3 K'J"'5lj +6O Y#OHuz&%gr1o$`> ǒ(hh2I,ArvcQ>V9Pdžu ~Gïכ FXV^/V$AMrMtZZ+.na Yt{ϦhTL1;>Hx",`KI}/uRVٛSi֛u27}T,xkGNJ%R`t #c|p RO_U\NPk3My|Nd08l*n}F8|2-1K ܖ<ъdהZFAa&j[+s1qā^īĨ]4FTW%?=ҥçH I{U1>izF +.q;]@H6~YqqCmLqY'}#߆3=qD?ch@54 lamTݦ -7mgs.0D\(>c@Ca>U=@ NbbdVEJ' |%w(FZ;>tJEkۮ9{7+gP\ +69@ eb T5dJ^Ѱ2yؖ0k419ɿ_)mƶX-vs8I!cAwz Gr/ e)].e18۱@J^gce(DYPd|KTO$_[,@p\E8Dn~r?Kp:g?|rDJOӦiYdl$).1F.I-f]hinx)SNp"i*uyDdMBǤS}sBI$ӓE%Eb+o)-+^}x-ZUp"w >0F\* 늾2ȦG UL:HկHpmY8g.\ic4C{T\bbOkN$FG@/!BCnmtaa\h.햆*UQorZ!,D -OAr"{𧇮yCg}rrYb,JDMLuLDۈ0 IjIfά7m!33fQ +YLt}tt +͚s#3@θBhE-@!H#.GU@$Z"RXєQq{fdTp]מ=B[ J$}_ֽ']+"Nqޓ5W ˨6~$ `=}vSy|%c!{י(5"j͚WsʛWsBbMn+U(XN#7܉awY'!%("8F!Inh&K#?&`ÑKDF-<ݸ/\R9JxmѢUHľHF+C'|7lS)ohK%/`kZ)$ꐏ5 !L87u(W˺k,uR(}K'|6E~>X,&a&O }j."_?教~[2L13zUb6Q lĥJaoCXp]v&~7إajUYR/9p?a~d!޵5mg#낂"[N`6a+ebdMcgz(lGLYeaP&rX fᏰ{ջEŸڍR7CPݭЎ"B9'eEb֘,l~}+b8?dSMSiuiWsM˩}˹sp^M\sLSY;#ϝD6BWn 1~Nމ*\p#VMĢԫp7XjG@<A^kūέنZI0ؽSA{b]ƳP|@ס9" Xc旚\(0GĀ`XSkg٤k<Šï{#DLp)0e_$'U"ddyib|_YVVПif6 HW$:99''!U{rh(GLR؁&H7QBu=w,+884pU@Gd`N%R[&D7Lga-ra*FDŽsM*YU\z=>([u=Z];t.̡@(6&:qwDdB[ypO6ïRKtMrXG!? +NTiiCgyOTwo;mo;ǽ'3wxORm['=M%UHOIJWлʦ|53EP o2#xq1/PFm>v?g2E:eE + pT GraaR#':2qbI^.%^H= kQAfѠ̰䌵7l?4\x>@IpJØf_x+"ཉ1bO:*Md _:dl|"rR +& %}?RiS$ JYr<_\}b^aFqw7Kj@!oQ!% 7o/pk쏮yydGAo7Q_q{w | N9?mSM;9,!D .N*U>,eh{{@xQȾ=I^ ;8˭ש {ۻpoqkdr]V:fNpk U2$SSǩM4?&ve!jW'Xߘ+qZG<.pFRkxy% qfx8P%RiV=p@60$"mRK9^ljkNQoa88LFo^~9e!F3)WrSǪ^>і% ܢSY|k?QqX.?N4.z,8?`cīl"ye|0Đ$<! sRh:d_ 5\a@(~% #y}FN $ǫl_dO(ǘfv dF;3G+Jqγ[`@pD!1΃gD8ƀq:8*/Γ N[sɍ k4*+Thuj!)P6PI1_2/,3BcLfrb$qԻa#bēl8Iĉ햂3R&Yf؁KY2H+QZOsB%-|xe#q`=m=V=b[&[<:5_)2V/e@-^$p aqv{BG Ã9%cA˱Y%KRi5),"|n'H9 ȨNS֭^8%*rN+\)J s/9/,/r:MǰNёؑO٪;n ySNA PN.)I^4Ńɕ7nfQEf-mEhe;d8 +7!I:c4.$ c5GLIBobd1y TEQ& kX9.瑠E\%Nw1}{F*]8ՅN# t*U]CI|,\}Bl2#dj. +8Do~{zH:ƙWOh~5rӿ3m[k~F + +򿴬e䘽FlY7Y-odW$=G!ks||wU#\_jmͬkm}mlp]=:Ό͌N6kʳy)l ^مb~yUųTD.?KMzVY9<ܙt,Wȿm\n"ڀ{",0wCPx@|;গUjqZvЯƻʧl}lͧG`Gh]L Ǒ?mw9nC __ڋE* 0^8D|yb?E4A0G-S. A@ehUTE.l* 2ǩz^ժ9Y6.81ι9`yЧ45eu+ ++YSXz0?̏Դk ]pRǒ9.Jm~aql_2ƶ Oml`H<):ՙ3%֙[Y/~ +u7Oma:wtG3WCc#iRiMiℓkJdO t'%%ӉnNɮh"T.ipLhG۴9HXF8;fF"ghh'E$m:ta{'9rT¨MkY6IjFBi\$OUT9 +7nbU=cvG|­VܩP@?lrRD.Q050$>ya1nJl!iNK⪲ؘ0.<<11g$&nx!0z||9LH7MYw^UqtD4gߧ@911'$d}b6JUm͍ 0Q*{JC-y\}CE\~4eWmJ~cqFݩ);0!*Z &BF_w]Hg4RG#Snz-1/S8 py/ +|9 +oM< מ/qlAP:*`mƣ?2>?=,4"1~~x?r:j'ĢbioL'LHȮ`CL4̄VJs!AY/qvSΗ(Ѡ&Zb^K/_u|ɻOif +]5!JݹX +1phfXnPs ϊY_2 BathbHO=^y6ߛ-VnX{U~^DتڪP֋ATݓzCK^2gb*JTb*+@_<(Axzerbz6*Nj?%3lіf߆ᷝV6LJ5DkR4nrJ]đq6DkZ^7C^qzϤUҭh%TpQ0*7Te?DŽm}b&!ηmp +Dv3Ϲ VyT +EkI]`XЦJgȖ#C\}XO,ʦ&xMjH.,S08:tHf&48<G#gؓzQ a(O#1fGT) 4\zȹ4>ڞ>ՓPFaIPX+º2$@qfL3-Bj{d@\9J/ ܄%Z6fGL\t}ǍʨzmApf '^,LdqjS4鴀Hg 趁r +2( VaQ괪^΋ ‡/_3ǧPlW(A!;3gtTw8C3f?W<"wT":&+Be'cXByi|+[p'tМԜ#=о4.מaTh72~lIUOdhpP|"C: We|]QJR_BL*x~9'bcøϭ"6>dYfw +8xT<37kٹo,ɎIc8$o^#VdHӀ +}DUoˍ7 ޢLH ǁܙ_8P!QU'ӓ c::.aR'ǧe82n&'dٔC%ҐkT|}#g8/iBJLDF0q4"0(ր"\Ak\(vMk?,$sg>/u?t]=IiF(MkHG4TrKv/x7NōWZ15?qC)] ]|2=X^> }fъjYnq scGSSw'KKR +sMxRELhc='^AQ]YA1<SUDE  +qA0f@EvHk((444(ؠ- +$ +.T@QŠX\ReqG]|ңqw@Wg2k2) R)'8{!4o0xGj΁o!f뾁b& A 뱑R1w1]ǹ~ CFo!&홄(b^l80Em Sk>) 7 }cdkaڿ=YBW^,ꍫm¤'sʪ"#4%whkCa"|( bYrS_w0+C?ϘD0l5PZxyո5.nl+贘x:0>IdrVݶ謯So7W -2aH#H0GW7PcN7 Wⅼw5НӳlAmFc$-֞{gQ{JHDcC$'j | &&&y&K+WT@㓷g&pA9ԀYvEC8Ԋy٬ˏˋ+M}8Fڐ}\ȇB8ZU694>":Et#tr²..dygh<5_WN-@)oil%<1i]w*>[ l(Gȯ R@ip[^W~Q4ob:d5IE>)Ps7ỌzЄ~/l x W@HK Y?JK݅puWqƁ Bl6ZO @1J?O95.RZAۍ[o_7ȋ0V5[o3ߺ9H}p}(T'ZK 9K˾ % WD1x`s, +.]C=Z<&,ěr׊N;Iy鹅2q~GF + }SeϑQ5!CPCR 2^茴Z ~OOJ8 ^`0A[L*9T+Y_8ծ7(ڰ;CJq:Ȭ`1}Ca!IhrN؏kH }J/ p_ +M +wlUd6jOn} +dLa~iBԬtZ݉]xql49.(f҂iQOAz\UztjUi"<tDWKkT-GCK]S^1`wGgwӷ6e4ѥdMMw>>Q̖"OEu&RF=ȭM5Ḙ:m{ ^y8p]Ej$g!C, 0uX,/ƹEFEu +IgeÆL$A q8'G$*`}kx4!s # +-h'Cu,x-p8eג'%b?ߐ`_y0D!` d qXXPڒeOES㉪I.}8`XN3vk<E+ST +ckhiu16p6eƖbijjM g#z\cW-[d$.K)t/3F$xGoLYustLg!(C>qv!]ψT@ *2 +#%"YD}di;iN"7B8bJvy%'̚CwWϊKT*+я<'b-EnQw2 sS IGʥ0نhdgV+mwm;-j #S|u"-^,3Xi:L? 3)3=Rdwn?n6 +N=lZA+P-тC-XBe^֐w6^Vk{h k}Tg$l,y~nuo=SyR{UJYVoth/.Tfe +^!!~4ʠ.M + + ;&+ JV\; rR`/'4*/5o oXsT%֗  +]$DJeRAMW)9͆GJ19 2OqbN25>Pݿ*ʉxԉ^=XD?zx2/hxB/%B(@H(Tb*;u/ְNNx\ ٜ{yVR#5(JJ>R6X#d}};-% ]GDg7u5yvIMNQg]ol}0*6*C0P:d^R36} Dan:<4D Jѡ dr>ե7N>d@ pj7߭[G`Ĥ'ge[._Mݿd\@ud%h{႖u‡Se3pi?5\g"J'q));\u|z S pۉOޏ+pIDP;};17'ʷ'I e6N,)T^S~"ɱ׃c~g(3sB7=XH[J~yLR I +'ҥB}$GL8>q7x*My  0$ MH(u`I1:9 LrOqIqYR~q_U]ή#CGXVN ;]NXeRyRsr):r[49p۰|tw1ւ~>l [?xV7Jߎ\AX+! eB2JENAmOmK:,qG^{xrɵ{Z5x`Gf#qW$UkcP' mIQ]ZNN-SԥV-(a1%3o!FH09WLa205!0>;3ӣ;0|*%W-xd[n^JST?X gӠ z"Ac|)vg 6Ȗv"lv%t)L:SC\k^sC6ZG$$(70ow z)R E`OT4Ĵ30wRv!,|{79ct s-"Xdo(.!_kgcj8?^+apNYyv/IfelbհkhBTh́'2!=+{-)nէ7"p԰m lU7t,|D#a5Ҿp8l"1uRDu<T 9ӌ4 9L ):y&Z'},iRQ̂Ef!p`^p ,J[DFQN~vWOKZC4 rޱfXҿk&/,HFj =X(46 K)-cˏ3jB?F~ +T@m*ZJO([G1z/{WA9ZӠ!i9!Fd/%|::Tۙi1K?MwJa"U+N_>eogX4պ'ῼWkTSW⽁ТrfaI|ԮqN32]AG,hyT %PtTT4ࣂX_2B:Rv'`gI0IYy}η}55ة+%^"*P1D9zuz碷}kD?L-KּWКÍلuA`stKޗ8@ݬg\{ت5[+bA2[=UL>M1\!H!jCD8%)ݐBwaS@QcELl}9~9!@!) )P 1E28)+ˍ1N. sux)ˌS;dRq[Ǹ`FiԾ,sX/ MqZg +f˴W#B[Ca_!ۍ ]-s89XMRJB"se g0i1#M7uΝ,ӪN̕/iKyҫTش4 ]T*m/dTSսګ|%}dB"sZl| +_ _m m}^@W6_H-o$L+NQJ4ObVb†&A=a䏎%1S =ڋHV"=$E{^gf\uH_L:!4SąX@\ xL"`j (~YBu|6!KNj=!`c1uO]~?|MMXǯA۱~nL] 0mBNJx;p;P4*$0mx{QݰȫєԔF+e PLCF2\/k*xxyY?X`LjE|+WF|=6ڶ9y9&5eC$:vo\XRlNSIEsTUX$ʭRo_fD2W}/>V|8ܸ)H>Ӊ'r+R]X[m~M}zpylg} Kdޢst37,⟔Lss5NEmӀFk#t#w]}6,jGa8xޕ0D'XbAhbgwЏPExɽ>+_؁zIF=L%XbcLNM 2Ǻ.|Ñ+\e~lQfxX*"8D[_hk{L+&uEDk$һ]HE4w*krI[rYL$Vd9?ʭÅR$#.O.+DpMX(  +}jVzO<e^a5kfRuVu0x0a2x8 é*]v.R VH"2҉";)d9j~jęZn~]‹u8-Ёrhن,񭦔UDa?kxatGfĊ܆w Cfh4e(6y}(Yv+V>]mn deGh}i]tڒ}PB7q[Xm`u=0Iˤ 0))\MwO&6A,ގ`MZMc-OdgSxxXB2ee:?ʽ-^6B7ʗ2uqCN(&f+y"*sZúz*oJܥ̮2UlY+y(pD2K8vE6*蔥1A_^ta,,{~M% ]D89dbN>&#`łyb=Űu`At▓(1q-OCz{ܳ*vu~נF#,2~ޑ狴22 zOMdQO8!S鰇{IVΫWHVx\V29#ldLkKP4ӐV0 [+\Cߗ_SRp(i|jglvp{2*-KNǎkڟm%SO*-!'&4&8*[v.o/Zx)߮ зMef\ТfmCտ%w2!TȚ^j+tjίG""~L>F׍~eb)]nfrf +7;ܓ&mVt\8Ğ:!lXX\\aWyfiDv-<'2%=Fo&z~mw!3 +*j_4Vt[ uыi߁ӴM/'LőC)2`<|-"58kFfjvVj%9ܸQRh-}3gC8-&}*Mv/$㿚aΕ'R}5K[[w)^k.HN*35{4׫u1qd?c6hm3xk9x3e ̃O>}L! h$6uuݮ0Z:uOג? 'ZZ}S+;lm5B+G1Q1t:uzeKf:]ճ~wmgrNB 7.Q+DO^AQ]iTҾ@ͣ~ :8A0Z&qDln֖fZVGvٛf]Qc$F h0:~X55 h*V%{9[wGYk_gx>ST&~_[T.ܿp> ^ᑄBэdHwdʑRѢ+>:/M\kpCWG]ÿ=LLJ\N,= N;cGD x'7}b',$"p|}Kp<#CR<$jrr=UԻhgizE_}Pe~٪*Jː%RIW3vΪs3YeoOj,ɛle3d.@Pϳ>@M\IԆi^"Od +L 77f:eNjե"BZMި׋}@; 'F.8oS|ih2 +}z\nL|{Xvg 7n]_hJ<)* bO1D"AܸaڏVv<n͡ b ʨ!}>Ajv1Mege*Ci,w׌ 'Uc8)ݰ2ށ0Eh_D 8G kj[t-6I֗n f~%brGdP!6p'AnP667!D~%}scxX c&敚- qja5!똚yWjɐ15:"us9NR7GggϜY>ԍӄۖ{̸쬙+cq:XK)lȒQFBI\#y_W^*D(H=cԎ*П ԏQtXAuXt;3+.2U-WKEnqSGFRwkx -Ӣ +7˝6nk;[xDD0}9ӎ>hJ4}KP9߳/pp*f3c@b%6Y{ŒI*э&LXF X5 .`Mh$Ñ,[V:YMe61d1P4!4r1PM{A ^(ÁX  y𙒆0 @[\D}hs4V0ۀb6Mz$@b,īO9`2e y4 GxƸAdc,C-D1r )=ݦCڂj\6S1cdЌF;':!!wO®];/^ +B̟>Z!T.t]щqW~ 7gOձ *vEb>'n'B, U]Fש xx1..|aXJS{(4g4[N#Hr3O%,/8;l 3GGJ$`:?/hJl3y~t`Y2&EwK jHE ~_/1CCp a+V pnm07o@iuv<>-I` jq\d%x6ty&2'wPh+g@,Y;G pA Xugzx@p%Zt!BS♘m-aBU=}̤<:KK)#<}J6YL"8x!OMȿ_iF:}Z.U)%)p(ҞĔ? +kc؋CnI$17g3pŊwMk[G?D7K z%Ш쫨޻:bݺ(r\[*\U"[kR$)dT'Rs6#-}_Բ?}IVX$YA R"FT.Jg-ap}LKB#$lէiς¢|UjM|Iyןp+$yt !+6#n=*M-,J +[Du^-wUlv%n~ꩼ +r0FVͭ.=7x WRŏ_6w O}Pbj58*`P20JxJc!] +v*>7.Px E`z4TV`HLحuKBag٫/"1"ڱ-WVSy7g +!2PM2(ll#X4zӾ#ZG1JfiMoN,:qn_꾔a<4] <30J)\aF=$$V#ԁz Cj9UK'g 7G$Sq‡h>}Va"? +VLCYuCS@[˷]*vy0v3MwT{lV;]^=_  7uycN #3'#"8Lr龬s-ũdWk@>#NnWƜyJ,kH)}.t)]y{WaN.ߟ5*Fc Rg'G>\xGE8X/u=#B2e7 ,<_T4U;}Kh7ˡu'JOR{x,4U~jmZ\:{610YS{-vYst B\ 2P񄤣2`!葇"ccd`)^F:1~y3 FqԬdC<Fa0A +L]yg.P %#t@ uU5h_ i9AfUY杋k YJ:az1g|,)La*)>tkkh:ԽJu1B +SvDlhb;EƪULSɥәF)rSjE9u`592HsL K-mwE~41 9Lg !qdnc0b2Xa-4Enα #:dN'PHb*jbm<ÛGc^*ZPb*.PDEYDL(-,ED4 FEъ`Yѱu9rDFm1g2gΙfyyy{0`"/}E9GYӟܶ`A}R3FؒC@31VG|9IZ=-agSŞJ\h #5CHlCcuu®s`DNosLEї$ϮᅥEŸA+9 aQ_v]j;|qpqtn<[\RaCr*&Mۢp^4/+U2x<\l{mb:䂱x('@`VV!Eq[׉3[?胻*b ~Z_cG{=$w(ܳ^]죦<~E{'ҞC.D{>( +DWپ/l4ĈAJ)PCP*:PD`|(vBitX5mAh^Ŏp8roq/5^`H-ӢFsļ1ؾI{S{{>Joj +Zp5.۷FOd vB2r'=qL*aOSҙ5UFQ ׷*ˬQ }}-yk A!&'@w .y jtK"#TDmмYagVT468pj>H\Q[V0?tF//gk#uQ؟~|/}—d* ;LH#=ݪZ%k~>]}[Y=lK ] qpOu4m5QFkx4ESU{m]t̙Id +6&:\(* `U:8`D*| B<9t ;.&vW u=i9z-깜SRBR#Q=4`IZ^69GuDec!5T;_U*$Os$dy KⲈRY[ݫ.p?!p9#$c!a?>CG1al'cВqt)&[U}^BR -jzYPj(՗! V;(24H!!*1*!҂ eɤ5~q%"~!߱B(7"i5rUVmxLFe&_?W/FA'nؘdDu,*bOg, o3Q39 pDfFOSb#i7xNYb3-3xU$mK%מYዒ O~'Ji̸մe^bUQTtfnD$=@[^jEژmno ~n)EhQ@m8v6L{*uYHM Q*S p'nI+ٌ< + dvwMmƉ5WSCB Nfbc;̌`Ib}h 쳼;шZsLatEqDxf9%2m<ÄʃW_'4̹*7]F#y&h2YfcXY?/>?NL[4ijكk*cNư01 =ֿӿAe%hiaݎnugYHuBobA:=v͎O|ٿ +prS2BT`Sms,jWk,v+) 9-K||J$W/Ì|??~_}EOm ]iJ oϟl%pe >0F?†UjBJ?(’l;pc &CO4:_1qQ)ITNGe{(ULIQUQ#Rg8p4vSfek'u4:e, S\ğp՚SCJd +|2I2 ~{MgKtƶJch 2-}(DTZ}ZQK{#li$C{ZT9LUnYE=Y˖ExsmiPpBL8#:Z*Pgକ2xǶX>H2:ѱ!sNs)LtP809)ivIsH<09b gZvD Mz͓뽗 ?GԞzsC`3_o6->)9zi\)!d(7Q^ SkJ5eYaPK0|0;53&7;<#ړ&_UWI{ %M=@ +P4qlA윺>W[T**`Kn+wAڈCrRREۉ_8\yrD)+ Hnɀ6\Te;26S!b+ۿ|>;+F]:,̾A ƣ8/sTB${z 'MKElC*G {|9Jh6NQ+1bO8 ^;u +r_\E6u4Eu"bIW+F4I#J[[jA02VdbA7# 1\CIhׯs`xܥSE Kh)r/vz-gjjiu7䬔#"㧧Ng8bJT* 1P`?t\lf%e$ƋP lFe町|~;=-fSD3Rڭ42\m a6c C31_-X( dv)]'Wo7xEִ8?]p=\#56qoLA qs9wМC}|pbd yt[χ2Gͼ6q31>8Pe *<=TԱGnT] =?,Ya'Ǘ-;hc2X2׏BiC^NK6q o;tu66ݼּz?WkXW6;eh3n-]xVYP + +b VDATab@Ţu~IW̙o9Ϋ\w{{rb!$ R5\nirUG_U)vg0013y>a@h`tVÅ$m@FS8AɖMfiptxY4ʛ \uCI3 > h)}SXrၯTͷŴ?PH..QWoc7o Qqɳg._fq1dv5]2s{B&:VPD[ګP? moaMvhqv7b5T"HJAm@$Y !P!~/w3z Vn 5!ļ2ub;&v~Mw`T21톟Th$FM/mS>6O~JMMH PA(=+#3-N̢,3wEBOϘ*Y 3 X"t*0&zSl-3Q&N"(DpyOؑ+8*&3Q†$Uda%: %I }y^u󬥠 O"RJR\7.g+4I7$2x,ѩYU<ն4[?/^IN_`?QͿu!6XB%ʱ*4N +ʤ7d56->1T^)P*dhrƈ$9e(Ҩ9[gO4,(_zn;m߹n2|1* #"'?7a K!7n?OJ[y#9|q}uUrzfn:(` Sh*7ڍ[+~KEW(O+no# d>O"7Uڿrqәnܵb[ ?pr:栩';ykm)kl~[.zww|>,3VMc8{ Ep;|o.w?XN,m=DS8mJ.<ߣH;1\ !Fpъ߀W\y|*;4'4TV%!'Ja&(KARWךX<<}v*+DSwR/ /ދ2q +69رC\%HPOb==tPpaR4Y1܊5*?[]#C>µ=p]h=hs8w[T2+ Q!B$)$ByDg!yg((abfR$QY?w}fYk׷>~Ӣkծ?̡f-]1:?bKasתJ^Xw~6 +٫+OGn)>k1G= +WU}en..>^Q̫il?w3Z?ORʯl 9h+ڤT?zkp=x? #=Brdj z8{- uMaxoZb0[-igM7P oA*4LXك[J1uρl lK:5)XRC`%l.=^ +6 2#I'Գ|}s[ +/ a,D>g Wlǁ?s:+ kaƢ"䅥z7РyxDtp`sq0+QηUYeLz[Z#w;hOKگ؈[W6jA^ +h}6/pZ;W4_껰/ *;`-5 nz{~s?3c6H1:v߽k f.NIse/ܱ&6NDE~5-LL_Os5 E쐸8yO70R!, p.3SoQI^m] 5{Z+vY"- wɽ~ú&'ċqWؐ耈ɹO^ұg^~Alt~lQbܞdjnZv#^F~;D*޹s?Ae|-$rC/,z:sm?"SҮ$$I1N\\ցAAw2!~l_p@e@RoHOh^ h6҈V&P0n`E9~J dwt +Iyu!3PtGeO`D'8M%Z{2Gt PdBIܘT2#7φ9 =7l&t~ub4^ |%rM-+59MU׏4@Q /[{'Vf#A -ls@H*`h8 c?\\$/Ɣʡ~ˡ]/AV7*ʚ2y!=1K0P cDU'?pHiD s7N*;/ GP5QST І خ: +_<QSh&/#84s[hmEb|![:oo>Z-ʫF\qgÎcVJ7Gx 痗FZeMO;;Nfn[UMLWXEik ^]g'!f; +F]]L ,ݔr˶d),<4&ilKeރt۫p뺬cת룳[e}V% +*$H$ T0*/MBLR1DL +Q6tRBi4X+i6IāxRZw͗.lq.]V]-98EԴE7P𝱱qYiҵ)(,/H;%c>d>|Tx$ )$b) znk?Ru6յp)|M|▬+7| ((s +O邍;)e\*XKX9yXS9Z>*a+k^ѫ U'- )V^r@|;/jD.y] 5/q +'9_32a˕G܇z:ȘLdr3fج%*1v2ÌA+Mcd绨ۃ-zMu%3C/?Z8(Dd YHAkA œx(ÜUA҈aԈ֪Ěu$sXsȇYgK :a_-٣ =6,闒k<O rmorKxVÄ2}+y?>y5菹-U S +}ܼ93wwڱ?@?^vQ(./ڡ"ԴD.E$z/jӃwPFJ}{CJMnMqTUYo[ͣtwgx5YVھTbN +hC{wӥRG襑8i~3o-!3St +Gշl:j[jy&i|R.Jj<bLƩir\AmTEqݭh!ŏ|ʚ^vQ{SfV8lp4I= +Xx]9^ઞpfAE+ ++vDx&w.'`pGr, +l +˝`o= +#<-[7-D~KMFSyڞ$" +ʩyǎQd8Ґ*-LrXyqlP9\4y͹EcE1/%8Ʋa"th@oxq>BXћ|br0#\P*dv=ϐD@e'ȱq8::|-oʌ|(gC!KE`ʂu:B̂Ya,@hZ _"LX^(>P8o=V'0 0]Mc] GʎOE9P~5mΑH!`229`{Ȼw>tq64o1B_Fg"<"JmĔCge +Lئ?$auXi8ڛJh?mlSUǁqR 7ח1FJ)1t@2m:`ep++%[KFŲd&6C?lJ]` X ۜ.L~:_NrKk% S(>L +K1+TߘF.v0kTǘhs'ΓfG,FyNeqNE%S-ӽ3to:C2Z uyE *MTX9s4bѐ2GƆ&Mj6 +j%\ 1c׺& 2;b@tM@&ъ+hyzg056h?R%ߗ:N=ތV>=!lˊZBcZVZ.2[Hh$Ub/N#%h܊5M; Er]sqp y:_ b}e ֹ@uu`AFώWG!g31{SI @bx^V,lsrΪHWܱU@ɪ秽r9|? a>< +endstream endobj 78 0 obj <> endobj 79 0 obj <>stream +HSMo0WJ|(%0@@RE9773lkHNAP>stream + + + + + Adobe Acrobat 10.1.16 + 2017-11-02T16:16:47Z + + + 0000666 + + + + + CrossMark_Color_Large_Logo.pdf + + + + + + +endstream endobj 81 0 obj <> endobj 82 0 obj <>stream +H4 _qwZ-HZ[BI!D9r_H)m>}=BPP.`pY0AT48 Y8ĒSR\6,ʞ'ϡ +W8f pCyp=@2*FTdb[G5Tj;h2ir܅*:=O&*)}c*U _!" j"6x ҵ0'0ٯa)T80h]?s=I + e)NYm%ь(eu*rWgOUy.ۺPx_^)U7;M6r}~0>įLOgk-N|wd~tes={6z5A_a3\7m.Yiu.q\j/QEOr7t :bShwܭ5{k}M4kuz>TDps6<㫳jK +endstream endobj 83 0 obj <> endobj 84 0 obj <>stream +H‰ l|Uc]uo|S}nja*3Vza0MG8خcOZzl +ZӲִ +ZueeWK, .p +endstream endobj 85 0 obj <> endobj 86 0 obj <>stream +H=-76kJ?&k6O?4}s{_mӛrץ_ڿ̷{k,YtiOR,'?J0{g0A{wC л{W OZ4h\qR~^풭EkV*-Ι+3U8kpPi=SeOj˜ -:%s 4A(tA j"#9ڃv.ډv(CvT h+*A(h36 PF&EMJ巨*Vu횊۵w(UޭHu>3h:uY)ݳz/\ +6nt-FxIf,dX>ʱ~oyݫJ7>4;nw$ߓ= iI +endstream endobj 87 0 obj <> endobj 88 0 obj <> endobj 89 0 obj <>stream +HzTzB*Ε:);]d{d'2[K8b~4hxñD4n?`_ =z{v魵SkvWmjۜԶ:mWbFyFK6ȯ7_o(@n]:ҫWiHԐ\&RV@ +-WXA @-"EZF ahC$͕G904['C3Q 4hɢ +B*+=UKOS(3SYv,Urs4iQ@ib%f*K-T[Q[iQ}:W Z7l=DogHý1F$J5=az,DB3%VmW^\gG`9 +endstream endobj 90 0 obj <> endobj 91 0 obj <>stream +H:=*6teZ)']sBvϳmg4w=]rdӉ +eNj+;k{$p CiS,$O0g/t_H=ᆻC v ᯻Wgv/mZ[4hlqV⨶^mFV*-֛+7UXgP~}պudWiˬ -(ZA dA-"uZFah-|UCsUh* EPLRBCrp4QtHM#MW$?]Y~ 5 +4gi+QrRIWx0/*5 +endstream endobj 92 0 obj <> endobj 93 0 obj <> endobj 94 0 obj <> endobj 95 0 obj <> endobj 96 0 obj <> endobj 97 0 obj <> endobj 98 0 obj <> endobj 99 0 obj <> endobj 100 0 obj <> endobj 101 0 obj <> endobj 102 0 obj <> endobj 103 0 obj <> endobj 104 0 obj <> endobj 105 0 obj <> endobj 106 0 obj <> endobj 107 0 obj <> endobj 108 0 obj <> endobj 109 0 obj <> endobj 110 0 obj <> endobj 111 0 obj <> endobj 112 0 obj <> endobj 113 0 obj <> endobj 114 0 obj <> endobj 115 0 obj <> endobj 116 0 obj <> endobj 117 0 obj <> endobj 118 0 obj <> endobj 119 0 obj <> endobj 120 0 obj <> endobj 121 0 obj <> endobj 122 0 obj <> endobj 123 0 obj <> endobj 124 0 obj <> endobj 125 0 obj <> endobj 126 0 obj <> endobj 127 0 obj <> endobj 128 0 obj <> endobj 129 0 obj <> endobj 130 0 obj <> endobj 131 0 obj <> endobj 132 0 obj <> endobj 133 0 obj <> endobj 134 0 obj <> endobj 135 0 obj <> endobj 136 0 obj <> endobj 137 0 obj <> endobj 138 0 obj <> endobj 139 0 obj <> endobj 140 0 obj <> endobj 141 0 obj <> endobj 142 0 obj <> endobj 143 0 obj <>stream +H{/w\.,.1osk3113cfcf>$yՑ(Baɲo?B7y\3-Lɞ&Ƥw$on׽U]"Wl[fو:z6Q9xh{{\ʱslEG5?šnaYY,؜ҘTȔ О"J)9H0Jd!a3v Ǝ/qۭϛ"u!]aA6Е5}Q}ψߥ@U\[P`"P\hPZB:S'gn(`֧itNfnې˦#¨"k.Z*Uj.7!Y;!\«fpc 3-yI]Տ3 +endstream endobj 144 0 obj <> endobj 145 0 obj <> endobj 146 0 obj <>stream +H2WRJǔmk.˸ 1\nr_y %9r,JQjP1~LxtlD6uMxU-^/ Xp *3h`}?OȞ(7Hzq~|_'{zDnS 6j5F.ՐGsugmm5舯l{,g9d ,fڊ[!`ó+ JM'T4BI#0Ⱥ|&^?H;{/ORO?dzQ2jI7ÙhJ5^vo'ImF0cE X#mqglk xVWD5ɻy7> endobj 148 0 obj <>stream +HY3࿤v,ƪm+ݸa1{܍gT(W%VEQQClozq2٠|Z-J(˅zÒ<y<6f$v;)݌Q4:" #!zPy>^J _j`sn@w9o[fmBg5Q ULB8U1N*2v\A2ۥ\KNu(N)ʼnS$Y1(Nv p;֏G TRSƯ|ҍ5 +#e[0"p*Y4nS0v { ^tC{о +:9e9Xi᜴j.z;}ݰyа > endobj 150 0 obj <>stream +HR7*˲I=,Bi}{rF֕դstjRa6+H[$N׈(O.a ‹ sZnTS}\q"UvCpHͺbU̠" :@;oc[6uTRxr!n3QV$*:YTx?پg}e) }g~eB~g C)'?|r7ŋP (`S 0FjLY +ZdEN*zao-rU:n%ˣI5Lvþ +q.5:<ʍx ~l$wz$s>Q8 Tf[ +endstream endobj 151 0 obj <> endobj 152 0 obj <> endobj 153 0 obj <> endobj 154 0 obj <> endobj 155 0 obj <> endobj 156 0 obj <> endobj 157 0 obj <> endobj 158 0 obj <> endobj 159 0 obj <> endobj 160 0 obj <> endobj 161 0 obj <> endobj 162 0 obj <> endobj 163 0 obj <> endobj 164 0 obj <> endobj 165 0 obj <> endobj 166 0 obj <> endobj 167 0 obj <> endobj 168 0 obj <> endobj 169 0 obj <> endobj 170 0 obj <> endobj 171 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 174 0 obj <> endobj 175 0 obj <> endobj 176 0 obj <> endobj 177 0 obj <> endobj 178 0 obj <> endobj 179 0 obj <> endobj 180 0 obj <> endobj 181 0 obj <> endobj 182 0 obj <> endobj 183 0 obj <> endobj 184 0 obj <> endobj 185 0 obj <> endobj 186 0 obj <> endobj 187 0 obj <> endobj 188 0 obj <> endobj 189 0 obj <> endobj 190 0 obj <> endobj 191 0 obj <> endobj 192 0 obj <> endobj 193 0 obj <> endobj 194 0 obj <> endobj 195 0 obj <> endobj 196 0 obj <> endobj 197 0 obj <> endobj 198 0 obj <> endobj 199 0 obj <> endobj 200 0 obj <> endobj 201 0 obj <> endobj 202 0 obj <> endobj 203 0 obj <>stream +H5?6os ^keQ?D~_}Aط_g|yZЧ)'{m6_ջq}QYb'>ʲya ~DwbD܎4ft3F~z|tz\оuYE{ jmT[P>ktD錱""#S0t OqR:fEGa>CztB~(R}:P "m(ڍvDB; H#m@[-Hm&4jnRݦMWmCM5kgsN砃!g#nG= {3:h|&\(q-X_ϰm{;n2LJUΏ\6>ouD|?:/˃>p: d +endstream endobj 204 0 obj <> endobj 205 0 obj <> endobj 206 0 obj <> endobj 207 0 obj <> endobj 208 0 obj <> endobj 209 0 obj <> endobj 210 0 obj <> endobj 211 0 obj <> endobj 212 0 obj <> endobj 213 0 obj <> endobj 214 0 obj <> endobj 215 0 obj <> endobj 216 0 obj <> endobj 217 0 obj <> endobj 218 0 obj <> endobj 219 0 obj <> endobj 220 0 obj <> endobj 221 0 obj <> endobj 222 0 obj <> endobj 223 0 obj <> endobj 224 0 obj <> endobj 225 0 obj <> endobj 226 0 obj <> endobj 227 0 obj <> endobj 228 0 obj <> endobj 229 0 obj <> endobj 230 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 233 0 obj <> endobj 234 0 obj <> endobj 235 0 obj <> endobj 236 0 obj <> endobj 237 0 obj <> endobj 238 0 obj <> endobj 239 0 obj <> endobj 240 0 obj <> endobj 241 0 obj <>stream +Hi/]:Jv9r c 15ƘEA.JKO4fI>b{>?\)SiX9y=eWځSpr Jn +`| c˼"yD# ;fO̐*4*qz`2=PT7H >C#'z Njǹprg ьu4a2elRVJV1"*yL;;ytEbRx4 'ЀFB(-hbz썬Ј36L-xs+pAtrOv C0խy*JOEO1,34 +/#Kϫ7K_ sex` +endstream endobj 242 0 obj <> endobj 243 0 obj <>stream +HO +K2peX-4\?'%JGHy|!3Շ> +'ceަ[9 ;²,+m47%oԺ8$We\j"BrQH7&f nx6 Si4)6ʋxёa%8D?'WCPX{CZvHjX.0 :*x3pfܪJ_Ah䟮4˕KiEȅR8II\dr;џaGpĘgs%Rn5nf]1'I0/+Br]@޶('Jr4oE 6?x`Pq +endstream endobj 244 0 obj <> endobj 245 0 obj <>stream +H/J]vrrzPQ ch -^Kp/DVXfwҙTOT^<]Z8$Cq@rXvn 3̆e %m(+2y8Vk%,<{mIiSܤ4pqvb91ai0bF4 =2@j0C=nZH `'5*((!P!௃{FՍ'UXU.V9+;rXyaS\.eW2t+7tO/ãbxL_?ײp]SPew5rcSp'pKYy +ȓOM4f:r`NJt" ]} +endstream endobj 246 0 obj <> endobj 247 0 obj <> endobj 248 0 obj <>stream +HRwbvsk3 Iǔt25ݩrʑr({qGRƊ[XqS\\E(o9 ZY3/K/E4>> endobj 250 0 obj <> endobj 251 0 obj <> endobj 252 0 obj <> endobj 253 0 obj <> endobj 254 0 obj <> endobj 255 0 obj <> endobj 256 0 obj <> endobj 257 0 obj <> endobj 258 0 obj <> endobj 259 0 obj <> endobj 260 0 obj <> endobj 261 0 obj <> endobj 262 0 obj <> endobj 263 0 obj <> endobj 264 0 obj <> endobj 265 0 obj <> endobj 266 0 obj <> endobj 267 0 obj <> endobj 268 0 obj <> endobj 269 0 obj <> endobj 270 0 obj <> endobj 271 0 obj <> endobj 272 0 obj <> endobj 273 0 obj <> endobj 274 0 obj <> endobj 275 0 obj <> endobj 276 0 obj <> endobj 277 0 obj <> endobj 278 0 obj <> endobj 279 0 obj <> endobj 280 0 obj <> endobj 281 0 obj <> endobj 282 0 obj <> endobj 283 0 obj <> endobj 284 0 obj <> endobj 285 0 obj <> endobj 286 0 obj <> endobj 287 0 obj <> endobj 288 0 obj <> endobj 289 0 obj <> endobj 290 0 obj <> endobj 291 0 obj <> endobj 292 0 obj <> endobj 293 0 obj <> endobj 294 0 obj <> endobj 295 0 obj <> endobj 296 0 obj <> endobj 297 0 obj <> endobj 298 0 obj <> endobj 299 0 obj <> endobj 300 0 obj <> endobj 301 0 obj <> endobj 302 0 obj <> endobj 303 0 obj <> endobj 304 0 obj <> endobj 305 0 obj <> endobj 306 0 obj <> endobj 307 0 obj <> endobj 308 0 obj <> endobj 309 0 obj <> endobj 310 0 obj <> endobj 311 0 obj <> endobj 312 0 obj <> endobj 313 0 obj <> endobj 314 0 obj <> endobj 315 0 obj <> endobj 316 0 obj <> endobj 317 0 obj <> endobj 318 0 obj <> endobj 319 0 obj <> endobj 320 0 obj <> endobj 321 0 obj <> endobj 322 0 obj <> endobj 323 0 obj <> endobj 324 0 obj <> endobj 325 0 obj <> endobj 326 0 obj <> endobj 327 0 obj <> endobj 328 0 obj <> endobj 329 0 obj <> endobj 330 0 obj <> endobj 331 0 obj <> endobj 332 0 obj <> endobj 333 0 obj <> endobj 334 0 obj <> endobj 335 0 obj <> endobj 336 0 obj <>stream +HWN3X(-]*"Qq ))Q $3l[ڽRJ9Su,#JC16ƾX;BmP⫛|u[v1UKtiIH-Py8KDNg [ѬdHg$8cҢ.-R0Ń)NZ$iMR$) AN%/aTl+舗OOh>'yMWV QmC8"'Rta=a =s +HTD^%4fB2IWmj'R2=Ge>+tli-oq> endobj 338 0 obj <>stream +HSpk%%GCmyG&1gi޻$횤;8?+RTz!qax. c?G=ez6+;@ %:ۦNjlm-/ě.c݉XݎlhMDkjE> endobj 340 0 obj <>stream +H}Spf?c)RrQ)5ji~uq:wus3ZtxdW=/]zq's{Bv¿ߎlz1Nݷ{ۋma[L7l~Ag^֨lP<66xӅNLv`=ɎJ6TІi_ 4$R=T''k Bwluqhy--Z,4??7Ö'q8g\ )dBJ- +c[+V尪 xM㽋ălxIGI~ZI %ZaЎ0(v^rdU8ٵa1: +endstream endobj 341 0 obj <> endobj 342 0 obj <>stream +HmSfml[NItT$I%)OyyY1wI\=gʺsw.-nZvc5?In|ƙ31SzBGV5lQC^ Po]E۞9DAdIv/NXrxH l`16ic24@IN^uY'b:=Q݀T֕J-RЇ6‚~/g @]c> endobj 344 0 obj <> endobj 345 0 obj <>stream +HiO_rHH:cݗi.D٧ay&o/s̴' D&?xS€4dp0CY̑`hk18葇肋"\r#e"{mdJC?V `j^0ތmS]G=:#Z2ۋsnx η[~ d +endstream endobj 346 0 obj <> endobj 347 0 obj <> endobj 348 0 obj <>stream +H{S/l" E:J}"0,k#RN[pZӮ|s];/{gم{zNKZd3F-0)'9jrB)Ǥ% ^9R8>⨴b(a 4܁Nۄmkx,72mu?K_tL?uO<3Xqoj;'PG:qA $-Mڢ-v:^{gr~|D!10 TLR +3%IRZ+v.&9 +endstream endobj 349 0 obj <> endobj 350 0 obj <>stream +H{S/6m2ΣTT<1&]so䘯3:>"co47ENZkVN+fgF1Z JRRS L &*11`h׏v}HNjt<Ǝn>rB +a A6}Ӫkp΂u@ҪHmլQኝ7lmIyAWIaQܨ$Y/7㊗Q#ʡ_L<7y,P/2"k(q *ۡU'\sncÃ4CuX'uOp1LΈ~<%))Ab&ifzN3#7O +endstream endobj 351 0 obj <> endobj 352 0 obj <>stream +HoS76ml3cc"H"9zQ,3Nty=|m*ZZYE߳<;c՜[uYfaf744\K1ѝQJRN)%I .lQEp)I!L +#t@Vx>D < X3` izԁ4nnmֆ} jC}7/L{`$TjЖn2pX [>G{Ą.A&Fmb>Rd1I =:g9F3kQtk%V+ +/BI +endstream endobj 353 0 obj <> endobj 354 0 obj <> endobj 355 0 obj <> endobj 356 0 obj <> endobj 357 0 obj <> endobj 358 0 obj <> endobj 359 0 obj <> endobj 360 0 obj <> endobj 361 0 obj <> endobj 362 0 obj <> endobj 363 0 obj <> endobj 364 0 obj <> endobj 365 0 obj <> endobj 366 0 obj <> endobj 367 0 obj <> endobj 368 0 obj <> endobj 369 0 obj <> endobj 370 0 obj <> endobj 371 0 obj <> endobj 372 0 obj <> endobj 373 0 obj <> endobj 374 0 obj <> endobj 375 0 obj <> endobj 376 0 obj <> endobj 377 0 obj <> endobj 378 0 obj <> endobj 379 0 obj <> endobj 380 0 obj <> endobj 381 0 obj <> endobj 382 0 obj <> endobj 383 0 obj <> endobj 384 0 obj <> endobj 385 0 obj <> endobj 386 0 obj <> endobj 387 0 obj <> endobj 388 0 obj <> endobj 389 0 obj <> endobj 390 0 obj <> endobj 391 0 obj <> endobj 392 0 obj <> endobj 393 0 obj <> endobj 394 0 obj <> endobj 395 0 obj <> endobj 396 0 obj <> endobj 397 0 obj <> endobj 398 0 obj <> endobj 399 0 obj <> endobj 400 0 obj <> endobj 401 0 obj <> endobj 402 0 obj <> endobj 403 0 obj <> endobj 404 0 obj <> endobj 405 0 obj <> endobj 406 0 obj <> endobj 407 0 obj <> endobj 408 0 obj <> endobj 409 0 obj <> endobj 410 0 obj <> endobj 411 0 obj <> endobj 412 0 obj <> endobj 413 0 obj <> endobj 414 0 obj <> endobj 415 0 obj <> endobj 416 0 obj <> endobj 417 0 obj <> endobj 418 0 obj <> endobj 419 0 obj <> endobj 420 0 obj <> endobj 421 0 obj <> endobj 422 0 obj <> endobj 423 0 obj <> endobj 424 0 obj <> endobj 425 0 obj <> endobj 426 0 obj <> endobj 427 0 obj <> endobj 428 0 obj <> endobj 429 0 obj <> endobj 430 0 obj <> endobj 431 0 obj <> endobj 432 0 obj <> endobj 433 0 obj <> endobj 434 0 obj <> endobj 435 0 obj <> endobj 436 0 obj <> endobj 437 0 obj <> endobj 438 0 obj <> endobj 439 0 obj <> endobj 440 0 obj <> endobj 441 0 obj <> endobj 442 0 obj <> endobj 443 0 obj <> endobj 444 0 obj <> endobj 445 0 obj <> endobj 446 0 obj <> endobj 447 0 obj <> endobj 448 0 obj <> endobj 449 0 obj <> endobj 450 0 obj <> endobj 451 0 obj <> endobj 452 0 obj <> endobj 453 0 obj <> endobj 454 0 obj <> endobj 455 0 obj <> endobj 456 0 obj <> endobj 457 0 obj <> endobj 458 0 obj <> endobj 459 0 obj <> endobj 460 0 obj <> endobj 461 0 obj <> endobj 462 0 obj <> endobj 463 0 obj <> endobj 464 0 obj <> endobj 465 0 obj <> endobj 466 0 obj <> endobj 467 0 obj <> endobj 468 0 obj <> endobj 469 0 obj <> endobj 470 0 obj <> endobj 471 0 obj <> endobj 472 0 obj <> endobj 473 0 obj <> endobj 474 0 obj <> endobj 475 0 obj <> endobj 476 0 obj <> endobj 477 0 obj <> endobj 478 0 obj <> endobj 479 0 obj <> endobj 480 0 obj <> endobj 481 0 obj <> endobj 482 0 obj <> endobj 483 0 obj <> endobj 484 0 obj <> endobj 485 0 obj <> endobj 486 0 obj <> endobj 487 0 obj <> endobj 488 0 obj <> endobj 489 0 obj <> endobj 490 0 obj <> endobj 491 0 obj <> endobj 492 0 obj <> endobj 493 0 obj <> endobj 494 0 obj <> endobj 495 0 obj <> endobj 496 0 obj <> endobj 497 0 obj <> endobj 498 0 obj <> endobj 499 0 obj <> endobj 500 0 obj <> endobj 501 0 obj <> endobj 502 0 obj <> endobj 503 0 obj <> endobj 504 0 obj <> endobj 505 0 obj <> endobj 506 0 obj <> endobj 507 0 obj <> endobj 508 0 obj <> endobj 509 0 obj <> endobj 510 0 obj <> endobj 511 0 obj <> endobj 512 0 obj <> endobj 513 0 obj <> endobj 514 0 obj <> endobj 515 0 obj <> endobj 516 0 obj <> endobj 517 0 obj <> endobj 518 0 obj <> endobj 519 0 obj <> endobj 520 0 obj <> endobj 521 0 obj <> endobj 522 0 obj <> endobj 523 0 obj <> endobj 524 0 obj <> endobj 525 0 obj <>stream +HVЯ31Y,DD$cәNt}7NQ޲YMּy13N zIn".3gfQzvG"I 1|FWȇ/ѡ> endobj 527 0 obj <>stream +HNpHA"^i+,3+uZ'I돾}'jcY/ +E޶xsefnwf ;Ik\7*W`^/q 9(h)BK%bȑCn|u NL8zgG{6k}oA:1jj3/&˯[PMV|JlZ6K$Tҫ4\pUaAjFfB,s(oAy+ְaM;th[NnuI!@CAFQc%qQRrkM ;˲ynUo k +endstream endobj 528 0 obj <> endobj 529 0 obj <> endobj 530 0 obj <>stream +Hnৠ]UTs1cFf^j:Dd[Hؗof۝jul^ylZeU89mr]&H0R Rb<(1BaJ%g!rvCL4@LďM|؋Q܈BFNdtU/M3jozJ@,3@ti^եTcrMZ7Sk;i[˥?) +(KJ (@YIe +P`UQ3Pa4ppۦؑܺxQB8LN",Jb)f ʲqnW ZQ +endstream endobj 531 0 obj <> endobj 532 0 obj <>stream +HkW`?f2ۼ63-JH܇1Lu?PtN_9Վ~b:gWe̶l."w +ZeToS5i\;+BI%!_rtIqL_b<#!o} x k X`` ieSЈx'ăSx' C=~cGmyy ׶OjM;[Epԛz΍p g> endobj 534 0 obj <> endobj 535 0 obj <> endobj 536 0 obj <> endobj 537 0 obj <> endobj 538 0 obj <> endobj 539 0 obj <> endobj 540 0 obj <> endobj 541 0 obj <> endobj 542 0 obj <> endobj 543 0 obj <> endobj 544 0 obj <> endobj 545 0 obj <> endobj 546 0 obj <> endobj 547 0 obj <> endobj 548 0 obj <> endobj 549 0 obj <> endobj 550 0 obj <> endobj 551 0 obj <> endobj 552 0 obj <> endobj 553 0 obj <> endobj 554 0 obj <> endobj 555 0 obj <> endobj 556 0 obj <> endobj 557 0 obj <> endobj 558 0 obj <> endobj 559 0 obj <> endobj 560 0 obj <> endobj 561 0 obj <> endobj 562 0 obj <> endobj 563 0 obj <> endobj 564 0 obj <> endobj 565 0 obj <> endobj 566 0 obj <> endobj 567 0 obj <> endobj 568 0 obj <> endobj 569 0 obj <> endobj 570 0 obj <> endobj 571 0 obj <> endobj 572 0 obj <> endobj 573 0 obj <> endobj 574 0 obj <> endobj 575 0 obj <> endobj 576 0 obj <> endobj 577 0 obj <> endobj 578 0 obj <> endobj 579 0 obj <> endobj 580 0 obj <> endobj 581 0 obj <> endobj 582 0 obj <> endobj 583 0 obj <> endobj 584 0 obj <> endobj 585 0 obj <> endobj 586 0 obj <> endobj 587 0 obj <> endobj 588 0 obj <> endobj 589 0 obj <> endobj 590 0 obj <> endobj 591 0 obj <> endobj 592 0 obj <> endobj 593 0 obj <> endobj 594 0 obj <> endobj 595 0 obj <> endobj 596 0 obj <> endobj 597 0 obj <> endobj 598 0 obj <> endobj 599 0 obj <> endobj 600 0 obj <> endobj 601 0 obj <> endobj 602 0 obj <> endobj 603 0 obj <> endobj 604 0 obj <> endobj 605 0 obj <> endobj 606 0 obj <> endobj 607 0 obj <> endobj 608 0 obj <> endobj 609 0 obj <> endobj 610 0 obj <> endobj 611 0 obj <> endobj 612 0 obj <> endobj 613 0 obj <> endobj 614 0 obj <> endobj 615 0 obj <> endobj 616 0 obj <> endobj 617 0 obj <> endobj 618 0 obj <> endobj 619 0 obj <> endobj 620 0 obj <> endobj 621 0 obj <> endobj 622 0 obj <> endobj 623 0 obj <> endobj 624 0 obj <> endobj 625 0 obj <> endobj 626 0 obj <> endobj 627 0 obj <> endobj 628 0 obj <> endobj 629 0 obj <> endobj 630 0 obj <> endobj 631 0 obj <> endobj 632 0 obj <> endobj 633 0 obj <> endobj 634 0 obj <> endobj 635 0 obj <> endobj 636 0 obj <> endobj 637 0 obj <> endobj 638 0 obj <> endobj 639 0 obj <> endobj 640 0 obj <> endobj 641 0 obj <> endobj 642 0 obj <> endobj 643 0 obj <> endobj 644 0 obj <> endobj 645 0 obj <> endobj 646 0 obj <> endobj 647 0 obj <> endobj 648 0 obj <> endobj 649 0 obj <> endobj 650 0 obj <> endobj 651 0 obj <> endobj 652 0 obj <> endobj 653 0 obj <> endobj 654 0 obj <> endobj 655 0 obj <> endobj 656 0 obj <> endobj 657 0 obj <> endobj 658 0 obj <> endobj 659 0 obj <> endobj 660 0 obj <> endobj 661 0 obj <> endobj 662 0 obj <> endobj 663 0 obj <> endobj 664 0 obj <> endobj 665 0 obj <> endobj 666 0 obj <> endobj 667 0 obj <> endobj 668 0 obj <> endobj 669 0 obj <> endobj 670 0 obj <> endobj 671 0 obj <> endobj 672 0 obj <> endobj 673 0 obj <> endobj 674 0 obj <> endobj 675 0 obj <> endobj 676 0 obj <> endobj 677 0 obj <> endobj 678 0 obj <> endobj 679 0 obj <> endobj 680 0 obj <> endobj 681 0 obj <> endobj 682 0 obj <> endobj 683 0 obj <> endobj 684 0 obj <> endobj 685 0 obj <> endobj 686 0 obj <> endobj 687 0 obj <> endobj 688 0 obj <> endobj 689 0 obj <> endobj 690 0 obj <> endobj 691 0 obj <> endobj 692 0 obj <> endobj 693 0 obj <> endobj 694 0 obj <> endobj 695 0 obj <> endobj 696 0 obj <> endobj 697 0 obj <> endobj 698 0 obj <> endobj 699 0 obj <> endobj 700 0 obj <> endobj 701 0 obj <> endobj 702 0 obj <> endobj 703 0 obj <> endobj 704 0 obj <> endobj 705 0 obj <> endobj 706 0 obj <> endobj 707 0 obj <> endobj 708 0 obj <> endobj 709 0 obj <> endobj 710 0 obj <> endobj 711 0 obj <> endobj 712 0 obj <> endobj 713 0 obj <> endobj 714 0 obj <> endobj 715 0 obj <> endobj 716 0 obj <> endobj 717 0 obj <> endobj 718 0 obj <> endobj 719 0 obj <> endobj 720 0 obj <> endobj 721 0 obj <> endobj 722 0 obj <> endobj 723 0 obj <> endobj 724 0 obj <> endobj 725 0 obj <> endobj 726 0 obj <> endobj 727 0 obj <> endobj 728 0 obj <> endobj 729 0 obj <> endobj 730 0 obj <> endobj 731 0 obj <> endobj 732 0 obj <> endobj 733 0 obj <> endobj 734 0 obj <> endobj 735 0 obj <> endobj 736 0 obj <> endobj 737 0 obj <> endobj 738 0 obj <> endobj 739 0 obj <>stream +H|T{Pgr!TEQuT@' >蠈d@D BJF;-;W`ߊHJ+Z6`Q bv/ҙ83~D8lqZlR,KaNQfQO6f +K6e*'`X+7 )&`LLEao=tfPhk""iK\l1s7e̅&bb󹔱b.Pl0_9g6BAY:@gLٯkZXsR6No0Va 1_ İ ~X$%bXarMĶ +<|1S%XH%JՈܢᲪkkNFTrOAhI8% cwKimFO<I=7ozHh+ФJ!AHq{>IſX +S:LBza$o?jȐP$ 0˩wڑ-ShrLkׁ"-GO47/:ʌnov67h8bxb!P8 j6h1~WDYwr(EB32c} 9Xe S90+zXJ~DqS2cU'._Avv0;(G~@ɦ<s"FF|%mgon`Mqη3S ֔ -[g/9C,h'\sAxVFlu̥;.-?o_nhmfT‚޳j?.n\-|=m/c % Uk_;qɠdx;q}\lU#U#KJ> endobj 741 0 obj <>stream +HRn03č A@"ljANE<9$_gEt=9ZEw;`}M n6;1Drvvjr(qbtGP?׻͓dNUتRG?> endobj 743 0 obj <>stream +H}lw:s6le6w]Z*Z@`Eѵk5oʤm]4N8c/w>;g'~KmզkV6: +C&B vtR+1$BBu>i5-:V]9dv[{=mzz]殡#F[6hvzeQSQxШ9񓁥Cƕfq_htZ}zi鴺Nk:v t~4ZCQݓ[q@ۡQGGNI٢|}ZvhNYr#7jjա5;2 xX>wq"Z)L9&c bOpO?̈́g,+0r`5(CxꛐX,LK, [?~B+ku~JklJC,4*P/8>yKAqV(P_I$1X +rD*ƤT+y=g;nLɜ=x< 1f~NcoMA)~^4BsT96ckrR>Oҍީc,r{`W zC>_\zʡBWH&ȏ/i/G%lR!!=meW˥ = -''b +cCEqa_[{l*,YR A7KZm<08.'ZՋ}$)Tl_?YI`8E1s3 gM{ノʏɞaU5je:Q\F1ޭZ^U-# VyvA.=1d s5l܎t>X)6%?ˉf?[o~w]=.+fChc+(JR~)AxP \{#J_-q<]Km-@vt؁)4vV6æ!G^0mZdyX?/+ӾҪ\.i.;YWKʉcj-A}h:xc8Zq) J*ǐXf&R  !k{꜓<ƈ2@Q:GǫBE-PٶA73F3]υ P / +Y$ +kM. %>gß 1&h$J( Ji!ʣPcYY+r^&U`n`)MSILAa%$t*)I"I%TP$s3X&P2$p'@"Cq@9JF| SGĸ(RQ~kbOr*+' ã_{ :=CD/brKClZJc\X@cNU\*Fǀ/e2lvв$ИxsE),RFeecdo"` &R_E&rA2r3d6 EeV^^㖽&^+,{Mޓ(GѤܴǢ^ 79:s*]UgT9'I) ;aVS.TAKp Q>V-̐" +\4c?6>->>QTk~< V7'S_]+nijB` t2(sk6cpPMxSt(+sZQ"yb eW/ߜ%lM^m)%)~?Ip8E7Z AAh)x/nȒ5l +^I3ljD؞AL\BEG&d$ʝ UJ&eaX'-h0 w^ \B%U-gRhbϺkx|X%5-!+Te:FD,[o+\y1' MdI=E}ufrLYU^%eUoSoXq$P.oQ*$4*`F̚, ig'1Ͼȱ B0j gE4iISv'YK!C~6/XjޠAooNO܅E9H8@wۂTE@,N=R^~?{(]fwٴ8S0cLH"]j!Ƈ$F+&%.idAd', %d@F#.<}JtAv%7ە!6 "ty4%oA1P}a`%ಫ:]^.T!ڡiټjw i>Vd ]+:͗Sa' R^T^Hs, +L$o Nڂ 9bQ0:аaC8t@T3l ݆Mtpaml>}a`򡆵-}d [l1%{H<ΰmÔ>6 1cX]چHp(V,! k3e?x> endobj 745 0 obj <>stream +Hj0 ~ +PhY6Jak7amipm%3$F~t0Fwə=Y &c'w;l6ѷ=D9e%v0BnB8QC/X+=0?z +_Zt+9a7%&YuM xpj5-uKG{N+=…3\T16L)˫-te 8ۑH;wq+JD &mCPy :EX Urzm`WROF4B`|!0RPdY΅ɦx{k,7<ƾ +| +endstream endobj 746 0 obj <> endobj 747 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<<>>>>/Subtype/Form>>stream +x5 +@}- +/.6F,bBKaÝc4@w83t7'yܛ}T*LRb8$.꬝WfVf+b|)^/+p^CòșJabɖiy^I-h +endstream endobj 748 0 obj <>/XObject<<>>>>/Subtype/Form>>stream +x;0=ŞN)E(P\D)r}0;n{AиVGiY_*&1EX8tdV#6>xN +endstream endobj 749 0 obj <>stream +HbW˶m\\mۮ}~_|<v]r>Ox<~mf^Wr\,|6Md2Gp8 ~uNn[Vl4zVUJR.KRX, +|>eL&NST2L$x<EѿH$CP0 ~y^v].t8vfYVb6M&h4 z^iZFVU*RT(r\&IRD"E"P(|>q\fY,d0t:FQT +B&I$H$x<aX FQ(D p8AP~~@  o +endstream endobj 750 0 obj [/Indexed/DeviceRGB 128 749 0 R] endobj 751 0 obj <>stream +H;joƏ]I*dEሒQBi<;?]"9G]W^Ͻgo}Сt&yNП> bspx|>~r90P$cDaX$zf+asx&+U*ZR+RHBBCʑd6 YĨJ.Ä<} +Og)FƵ:òyݲeݵZoQ &qtz,._ Yqb;;]ntlSJ9&䲙"`wp$'N,/]G?ז#C! +؛*RPΛ6`4d9dt2 g@-͎+eb(`/#.*Fx2J8rXeRHP[y)s%ӹ0FIF^U|&t/j!ⓚY|L\ޛH2]V vMV b6 ^wV'UR!3zh GכgP"](UuHb٬U +هpa[[R#'GrqE -UkMd4ըɏ)a焭Q݀ҹr yCjT +DʅHJOc:2ϔJCH Tz9  +; M(58.lo'T aڜfH 6@g i.|U+di3ώzOpALxxrq% ?ԼS)t鴮L|O xX|zl;KkP "4}r .6'E^/cnޟ5!#,`2_CV\9K +1"8H>帊 zC VD;p|Zvp|P(YT/|u{ + M,lmHmY+>aQ}A> ooơxQcIk@\ϔon]; A'FM,Z]xĿ$pMIsނ\rf +Wnfkf>ܨ&m8ḯ,^^LޝٌSCB:*݆w4Wiި5)p jA VCޗ: YN_@RW/A)E(]i~-]Yt*grW\E00*jZ@>a;Y<>3,b3S-RhW/#9IŇ95n`?Qk;Rwg s|I jؕ}uZ!d?-\9 *G $^H\;,:C$FF +f)yښ^@lRgq\?WDUPvƤ<4AH A(bxLr&OT+LHc>Yk/0#uGpCw63ttORvZֱS: `rX OQJ@6hfA +T),*1H6 jZyT +AJ:kwQyhxf!OY'akg8 ҂pBQLh( 0n񤣆]DYqtE)O7@Xj "gtE2tE[D[1-07k{=#mؠśL u‡G,HBV(%;cR~B| p;w@b]7,H2".Y$e"bY-Q+qD)3-KӁ\|Z}bAH(hvQJhDt bn2Ee Y'[cuW%8[(\u</'Hڌ͎@pH1ls$ +UxL#hsHLAmԫص˺41$bwyCbpĊi sMxVHAA`<ơ7B* WD NQ<_֭&rWXj1}7hB'$P>n<T^#`[ vZ%G"xRs⏤&أ#Pl~Tg?!qEC C]^$hpLg\'4=E聺R_Z]iCA!Ud;(( K" K `흀Ş{睙c4=&Gs67^i Qjs_Ă;v +G~3tu"V7|+5^GM^>]vJ*G $+ 6qXm{\afiJTĿlROC^IL6*MQP:v +0}u[mف#ԟ>1%!tU$*6Z.5 yC"?>E*\*rްUCc¡cH"ךNa,[(-KQ}GdYUtON\D$)y}ͱr@x+yns ƻ}V ɕhX,ѠӪ!|.ߔ PX" Jj5RALgbqL +%H"@ИR>򛢵l.GPAACdOF +endstream endobj 752 0 obj <>stream +x +Ex@3{dGHV]Ww z=N;N\r p8BPPhZ^o4 NS*"X,65M (J^o:.pXbld@*jb2VfDR\l6tn;Nz4qxz>/ bq<\.v2ZL&L&p4rFcZq\. +H$ +T*UTpx< @|>ۭ6jZ,l6E ( +qAwl60 $I|l +endstream endobj 753 0 obj [/Indexed/DeviceRGB 114 752 0 R] endobj 754 0 obj <>stream +HlS`UnȋyRyLMAVC@54>vvv:.lbrjz홝[WV r{s1(C4 hg{g{xɳYADȘ1yE$HB,yM3G1W>to(; YA&ԂR\jJ 48t Y,f E IzR[E(ӳ˫NOt{7}N 75Bk`&Hhxon|w><>/J6sKFk +eIBH@*$,-a8ۯ[>>VvJ +endstream endobj 755 0 obj <>stream +xrstde|kll]^uef\OPI[ +endstream endobj 756 0 obj <>stream +x{||pqq~~~pqqfffoppbbbVVVm +endstream endobj 757 0 obj <>stream +xyzpqz{ooweglnr`aeUVZ W +endstream endobj 758 0 obj <>stream +x wghm_`k]^_STl +endstream endobj 759 0 obj <>stream +x$wxxpqq}}}tttllleeemnndee\\\UUU4 +endstream endobj 760 0 obj <>stream +x$uvlmuv}ijr`apqwegkZ[aRRGLz +endstream endobj 761 0 obj <>stream +xn^_dWX`STWLLSHHD<<; +endstream endobj 762 0 obj <>stream +xyghkmnoiXYn]^qabYKM`QR]NO +c +endstream endobj 763 0 obj <>stream +xeWXhZ[k\^WKLZNO^RSI@@LBDPEE +endstream endobj 764 0 obj <>stream +xxl~kubvbdRY/ +endstream endobj 765 0 obj <>stream +HƋP᧲0X +K\::=֢y+E+BL .m$kFNkUC$%B0 N0'u ÐjVTNA99,2O,Z77J(ѢOW~>s;|6α,kir1Mh7az[ +endstream endobj 766 0 obj [/Indexed/DeviceRGB 73 765 0 R] endobj 767 0 obj <>stream +HRP rhr[fde*,)?$ɜ3_[޷?ZN3:aZ!ߙn6F.""P\")G%m^<5}Zdjʼn#C__&V*zvC11F&/2r3FɀIzfrr\eR. Æ6ڱT^7_Q +endstream endobj 768 0 obj <>stream +x}PMuHEvIFnA>oB?`52: +endstream endobj 769 0 obj <>stream +xRO~LG~LGwE?xE@i94= +endstream endobj 770 0 obj <>stream +xKFzE>zE>s>8s?8c3.9 +endstream endobj 771 0 obj <>stream +Adobed + + + + + + +     + + + +     + + + +   2" +   +  A$1r +!"#%&'()*23456789:BCDEFGHIJQRSTUVWXYZabcdefghijqstuvwxyz7e1 +!"#$%&'()*23456789:ABCDEFGHIJQRSTUVWXYZabcdefghijqrstuvwxyz ?Whi-Je!2:AJE]"Rʠh؈bPR/4 @HXb FB6Ij\e.2!x;Ĉ:bmH@Ny0$50VE[\p + J@R#&ϛb)i*2M) +ńPp>z*0pq]Yb W# ,bXC",!ђ'ђhZIDd 6B6BEED +endstream endobj 772 0 obj <>stream +HWXB CE )8ab@ K ۄ2O9f]qZ +g%H"ȯŊVb)a+Js,ó4ǀǦtNSٔ E2SHvJ$A1S09!1#0`2ǻn%m~cFX͇:VaU+JV)W+},S}W,mp+*nB.[] \e3Wח Nd*8KēX"G#@c(EH8h(i p~y=>9}r%Nt:~hmjVĊX "Xftp`2Ѡ7}ho_AVj֪ZMjWUrJgOr>)rʽ/}ѥ +endstream endobj 773 0 obj [/Indexed/DeviceRGB 207 772 0 R] endobj 774 0 obj <>stream +HbdȜy8sdt/#Y>nyȒEN#.fqym!lBrNŝ+8; -Ȉlc7FHq0phxDwHF`gZёf!Y:}՞0;4Q8{|۲yAj, %i_?yS vk"q=Q +œ P%R9a:66 qܩ[֤Hp021`bbWv\ٳG7A +c'vV+TL,2.):qd}19[]>.N] Hg7Mr:Xve޼guoY+-i5 v^ a>m) ޺\,YdZ]Z+tIjU1R@l35WNQH+% ">stream +Adobed + + + + + + +     + + + +     + + + +   H2" +  +  4q!"136r +#$%&'()*25789:ABCDEFGHIJQRSTUVWXYZabcdefghijstuvwxyzNS +!"#$%&'()*123456789:ABCDEFGHIJQRSTUVWXYZabcdefghijqrstuvwxyz ?jp:-D͉ZbwLH\ZzxpHiV n Cm*NQԬ͚>@#J(*$6#f5M1PBJ*i <0vB#P%:;Q;?T%gla –C`9lsQ`B&,dX7K"V((( +  >-N62v,dX7K"V((( +  >-N62v,dX7K"V%mPP\v ETɡ92f FA%a9/E&NrrdʳBĩU0,^8Z#ӣg&FFbKS݅B$f4BCKJ>stream +HyHaq[W)0sisf1Mp$ + p[*hMr$qe$iNA%Z&N4}NݏAn 0uy!nq݈t\NeG]6u AmN̉[Nf;gvlYSl,vl6ǦSБt|tt`<7Fa2{{~lt[jݖJSiaZFh5pJPU**HsyyI\XR/..* +|~^>;'gd2T*65urD"H>OLbH4.>~ +GBᡡ`p|>z\nOO~yf_tu=hoook{2X,&jf2-PS3hOУ4:UhUUUwP++++**TmVyyM D)-P(d +Dd\B"JJD⍀׊B!*PPp΂ <y9 #==aqX,6---$'''%%%&b.B _zL +endstream endobj 777 0 obj [/Indexed/DeviceRGB 243 776 0 R] endobj 778 0 obj <>stream +HbҲ/zϟ>O^_=bb5J:7-B ELJO?}|s{R#NG6ϟ>ӧOZ֔fc=cG>wՇwͫt0RU5Hj_;>ىEE&:BB2v]oxێ7Oj be7p͛uvp i9TOo\ޙa!-oQ5o>u< աP?=~`I}' '3OFÏ߃t83ébU߿rze$ +N>vNQC{t @[nyɅ b¢<>stream +x8 + +j^P4gTCo +$sZcZ)%BpcRB!!|<}_uqo۶,>stream +Hb`bTT'TeEؙx4Q`V"A_W]^\CDFE=  .$E:4`; +endstream endobj 782 0 obj <>stream +Adobed + + + + + + +     + + + +     + + + +    "  +   +  +w12 +!"#$%&'()*3456789:ABCDEFGHIJQRSTUVWXYZabcdefghijqrstuvwxyzZG +!"#$%&'()*123456789:ABCDEFGHIJQRSTUVWXYZabcdefghijqrstuvwxyz ?CU."8 \2`8i xll J ΜL KYI(D,hx#Ν4l@3R2!b +endstream endobj 783 0 obj <>stream +xvwwz||oooqrrbaa  +endstream endobj 784 0 obj <> endobj 785 0 obj <> endobj 786 0 obj <> endobj 787 0 obj <> endobj 1 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<>>>/Rotate 0/Thumb 26 0 R/Type/Page>> endobj 2 0 obj <>stream +x\[oYr7 {PtI ȖEkzA<"{檻mc1yC`$s&e[@Rέ7O.j XGqJOw(΂0.4(b͑?6~'9zx1|Ql6|y);fjڲX9{OO֟x,>7^7> kΟ͏q苣7;3 A~G)? +2,YO$JL-8_-[ްE /uײ&8[Ի-sލaEt%bƏuC +p;O0x)J:>#1Tg+xohb17v[Q4kY}6yG|yylm챟CzwnT?lG nFI5S{?YQf\x뇱R {Ϋ,/Kw=I4ڏdON [eۢ0R1̇Z30BzKz՚nYP9>,z(y3fOwd #6O@f8`ahY?W30/(02y7-Ùy喵 ԼU3lR<G +ۂXo|Zׯ9GZ(fku-̬I,c-JHPz [4 +^iW#,_~_,2y TuK?CAS5#fnYc9je~Un^Q<δ!zNխhAQj^Z?Ttjޕn"g/ +n2:ںfk^nAkfC`RXdxE֧ƝIPDfYC(&CE9ڝ=vؕD? v)ʞTUqøO/o܏}.!`h$iȡl&(9By[~5X͗W 0'_BP{鱯bW ރmGX$ZZ m<5 ZvU +mkتQo7|s"yQgrv`E NPdK@,-C!&U*$ +s :4-)24~e/[Nk\jdC>q)kHH]jӸ8Y^gć>1Gu9$ P0KF0+[H(0-*^ᝉW\䌼,?eXUI?3g^"+fGCnKI +pWO`wyac+l}%E0%AKqCDNNH¸B"Ha{@;c/Ėz]pY]`TCS;{ D2?,㢒,&Il֊$[$n7sD5 J8aCir[A^HD֪vH&7F=ӳm|Wyb2{! +X=r@⬒B@lKpغ둟Vˎal +I0E!U6'o>ݤO&zKAkR!>Lr#=v׺].u: +R\ ҃XaU"gOO,V[}0.]4EPiJȥx&w[3IB4+kd 4v+y3s%h-P=K,n/>Y(p6IEՉc{xV} ROZq5릧I"4L#2$8jRwH(#0J04:7hL˼4oXbߤ/ C7үš?3zP2/ +:kj몀Q-,1Z(J[>Z 5;駦l) +gV͚SGrfʩńѡԴ&p+<K5J +8R"GNKV5:үGjc-&٣fpPz&GvŔkTARX +2Ē ɦ:4LA0ʽx]wPl$5+.TDNCv0S`( 1PΤ@/M]HC&&9O(ZhKph|.0 +svIlk\^CQٹtDbZ~bYWlOa ;+hVfPUD+J=CF*b ̇mQZܛ;;dwjJei{OH^52Vx>bzͺgDMwd.?7WJ6D.1Z^=o:CRV{QJUV/*%Eg!b!|qM+5*R@0A}3}'$׹s Pn2pO76yNqEԒ3JNYGfrI~%km/mdT4"T]Qouge[f#EO6Q&{ :Dc9Ȝ ձvSdEn 2Mz٫/d5f\tOpEk": O{"x$Kn03x'UDZ4@ge^C QYs*Oby9,wG`l_:V (NTESGJIS_@&~4kvOUs>]40e)ʦdjH 2;6B9%c}qY|BH? EZ)o /|!&Zj0I-#͇n'A7IJR)" c I v$ zOk] 'D.y;X X @?և6gO+ jm/tF^9:_,Fnƥi/nk3(.G!C*h5O +endstream endobj 3 0 obj <>stream +H}lmd-3w6ѵʴ?(uTjKIqo痳ىֲutk: U[i[6Y/v&Ti&Ms~Ԫ6JV;04l~Kg~w5Ȣ^~⺶]^i׫*_ЫU2tP_;WѯjF֡[;lGz,.kq;N>RTj|G܊n2<4f+TPԤJP4*JΩ=Xcmkuk8鶎%ϖ5L|Zmgμv.6km l/&*fiAQWjt* t+T,R\2%ʚC h)u|BS?ַ}t)_|FUFAʼ8;8@QF +4חWx?  6ĢG KcbpTe>aŽ{7&dϞPT?_C/2OM?טdqTs>7,@3O|8d鳆`TVdVJC5*UG TkTDW?pP6?J~3{F$dI&ц Fe)bV$`Y/MTBhs (b[A|P ܘ{19fά՚#{^;`ðwG IƔ30[!7/q羅}W:EӖ;~gY:KFV=QSqB}Y-(MVg|2%1dė0Zg)X;l?ZsI9OcD(FܣxJ(l[W #h lp Vh9 +k-.%>gLLH8QBG* +5W <8 L*b &¢K@Ib7܂h.xib,)"'*Ȑ4#!2-a@ʷ''R–5_ +BOPZʔe佹{7=* +!* "P\K\&1f)JqYZPhzm>(l+I1 j4`%QhW&qvI'Nq'#6CPi"^x8L!ZT~'ͫ!!E%_JY.0@W1G:ZŹtWPD]XHL!I67^G֋kw wʏ ]ݨT5?+l45!T}|C:]b951(q|~fZy&):T͕9(KB<߲+voN6&X/VC˒E$VV- Z{KI< a7dIcg6D"yrlO Jlo&."}#B NE*%TLDK0ݓ|j;/d.`Rɪ^$0GBu[-?RZMjRQLܴ''l_LؾMj6]$fa,N!L@4C^WY~1\g݂5]r>@L\*[2p#RLiBi;CO:^Vr Lbɾ|pE/^kGT*frдl^5ֻ{4u}`^_]+ۆA|A_ԿKu䩰^^)ClGYW۹f|wQl E _'mq(mFh ða M` G* +n&@86G6l>ܰi0lPZ Ⱦy2H-6Mv=$_gضaJ +Sg{ ^ 1,.bmz$j Xz8h +f`H2  kf6h3ի;O;!AԽ˫PCkoޞ;qQC48hRϯ)3? b  +endstream endobj 4 0 obj <> endobj 5 0 obj <>stream +HQo }ZbL6ƺp,-J%;8:y8ɳ4gL ؚ LܲdcDנ;Dr̶OppFanZYZԝđzJ΁i/NJWrĪK>(MU'@A-܇2U˵if-c(\*-g2fl1&t)cեdg + +qKJD#_tH52`o0@w@tOW罫0[:+dEe_9%R\, -y:MݜE\T\:j*WRU"ط=J +endstream endobj 6 0 obj <> endobj 7 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<<>>>>/Subtype/Form>>stream +x%MM 0 _쒶i׫ wK j?:$ LS+gW| a:^MlJ1'g)q9c[F4Y*/8ǂV=UI)fU*!!w.?R* +endstream endobj 8 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<>>>/Rotate 0/Thumb 27 0 R/Type/Page>> endobj 9 0 obj <>stream +xn6{(/9HIbvEݺ( Gqڒ+Mhh;d$Hlsa"sbȇ/ׂ, zJrPq(P7Z += +Bg׆!3\oUKɘ!Y@Ktʖi'Q) 1 okd 7ݻpQ>WI{IY޿p6(_Պ+Ozւ괲Ņ$Yx>&T u H( WPZ$kz3߲EZyeeY_".I GE+iHy~?2iq_9ۻbmRA~ыǀyJ1k.`YjFkO>(p)>q^ZHh>/"Ȥ8* C@ RɣsZf_/2b`;p%`@eM~FǓk7 36>k?zz=3ؤMøe"GM5O`=0ZoPz0 +M==Ú?/qRJrrOd6Rla#dWŒqk9EE=o4Au"`::ѐ= ¬~BVJmh*b'퐹IbrLs#f]`IDx]=ӫoU%Lb"Wxq4A,jGn8U#vp=>-(9o_rp!w$99H2hoWMpp+pG?uuHL ꘛS/0F?zw^<^1Տ/;S>stream +H}lmܙ`Zme +غWR[Jpț8~{?_|vN؀ e季[FGI:MMiz3H5iB^<{~մ4Zv#6}6gtqs- -mYՕFM FMa#O 5]iIhwi6wZ;#apw}L5k=nϲ:>Gt :&4jjF-StƠj#WWV ڶUW\]Ӳưnmmo]toL7hnS5݂mD9Q6pz1<x`KDX#(]Jdɐ)VDe/EqC2'Swh`|3 iB;J8Nx03w2n4pfZv|YY MO;OW +鹟MgPuVB^DolEqR~g+SS|bev,rzdm9ms#)SǍGƣdlcRx>Ni4 Wn&X>Pwc]|'S`]*9DX +8CLs/۷gu?9wRUpGp'b2Mގ9S2i*>IS +r|nÔ!2씝i} yi=#X$遚|Nt׍[C^tD13M`i_9^J %&BBl{.sYKzNANN8_`1TƳ>AO ~m WfqZ-T_TEScryl=W @*ew{dDQ'кp81'I5Y6(?*UռKYP8W5r xjyU@GSX.Xm]\,Ɛ1 +̂5r')czaԿD=H*GïŷpB;W̆fPȕ<2[SN>15F Z9J2Vkڎl|SjllMCa2M3,rװW}U)m]0o\t4/~2UU?/f꿙[TnXq0'3(YHE<>`9M`!>CHאX1+gy>e&tqUcZ**mng9;(g Q[^H>aM %>gݟ 1&h$J( Ji!PcYYtY&U`^`)MSILAa)$t*)I"I%TP$s1h&P2$p'@"Cq'@9JF| SGĸ(R~{bKr*+' ã_{:3fROS&r`W }^20fٴƸGdŇX&O|氬oy.#FeĨSσSn#h$,EJ| 1`or.QV36;8 $ИxsEh1X.KY1&yeycdk"`&R.ǯ"XVw 92T٤2^s{TqK^TKshRMSinX5^ 0=:*]UgUYט;I) ;iVvS.6T #|8Z,!%Dx I8"2v4.=rBa)&!l^} J *ET* N/޿QHVU QXjN.dH8(%?DDH_KltAq<4gk\LIHT;Q'/B +Ԯ4$N8q88IɄqJa$њ;i^} )R/U߿RrQ9*Υh$b]FeI:<<^\ӿ[S~lFRXXpL}ud Q,#Qٌ @s37Oѡ"l\iEYD +-];|sY4Yzzj^̧.&µmh9'q([w`Ly_$ !KR;C԰)x%'.Γc{Qb{3q %](w2(JV)b:&^ra힌U0yy0 &s eJVBdmlW4le⦭<99gbb5hT %7KmnaԴbR Ćblp ;ĜX6%mYv1eUv{sh&UMbap@Ǒl@YE=Ш8j1kn&ȧJJDvxq!#El Su 86@Ky]}tO e.lO%3!/tTz'-|DЖBE\N+]Of@lWևD؀xӔQdCM}ˮ.t=xxZ8"b?P1Chf ؃ׯZ6t zʦ5_Z#O +HJzeS=z"5(p;0]_d\,jv-:i '<䌋Gi0@n u =Lh9R9̰U0,w6qD A8aMaˇroDFΓG2l9nRǰӖ!8ö SVr>c4wc\ĤaAtk#QcAOX0G2PaȧhX5E߯> endobj 12 0 obj <>stream +Hn0 @ +P=0hMU$k}@H I@]~qNɋG 5m߹eΈA%)>cm˴δ{7?}a_:+U_s}PΪ=}뚷pJhW-ţēpt#drRn ߥP_LҁY+sW XR$=F$!z yo>_-j^Hl-踮Wic~X:nDNa06iڎzwssRs4^KUphvxc g +endstream endobj 13 0 obj <> endobj 14 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<<>>>>/Subtype/Form>>stream +x%N +@ ޿ȨVA +vbۡӛ !?|?!.%I6tduELRqCâb.%HÌQ༏)5m!sn>stream +xR[BA ,`X XB,` dz^|?qc +endstream endobj 16 0 obj [/Indexed/DeviceRGB 255 15 0 R] endobj 17 0 obj <> endobj 18 0 obj <>stream +HtM0!=qb[ږ&YKBH`ˮlͿFcoa;<ó/Ycȏ5U-j0=e6*w>5eԨj0QCp)O~ >J|򧲯w *!z55cl1xEi'gRҋݙPhxDڑ|qtA+tw\Cgr{ m[CwS^scytmnIFC +ln.֫pɱJ΅ C'..#;a넘h>01DKGEw_8YKp]-Ή:b&A,I|@;!(#[ N$ Ux$XuOj($$;=ɁvfRΒ:K,$UâKWzj= +e^o۴X WϏ#o +endstream endobj 19 0 obj <> endobj 20 0 obj <>stream +HU@Iݝ͙n,nVN|Bn|}zDEG6 9Z&!( AP_%UqڔsixJ1@X(`V@ x d9A~PAMP4AGCh0 2lpWm 9@ RfaAXUa` 88ΆJn{ax +^7=w03.ddr0"LiSf0X; fF1b_ol*spi \v./W+UsQ\c.upn:7[­6q;}Q wrOO GiQf Eb,jj:Ơ(-@:F t]CwCC_*o % +|5.߈oɷ~$/#^&*)FɠdW*RJE4VbJ72HLP+s%jeC٧U([}ZTURMWӪ\jZL-VQkfjSUǨu\]nQwyzG}Pߩ_?T-MˣJjjZ]Rkuzkxm6G[6j۵vI=>j?t{zIϩ׋ezMTow{}!h}>S/]~NS[ Ű j3F Qըc44Z.F/c1gL5fc8l2.7{cnS0u5Čf3Y,mV2kfkv7(s9Üg.5טNsyaw Gul'p;ٜs߸_e½^qxͽ^g/ zSYBo%yw{{߼T5~^_ʯW~# t_owiݿGJQ&> %Iv$IYR QiAڒN'2L! d>YJVdI"qr\&7= ogB*Pڔ0haZGڞvqBG tMt-M;^zUL'}OHA }5"AbP-4ؠ[u2KRq11+"":=tWE^ݻ""""j b b b b b b b b bs7I?>us/r[wG~vW~wOv_7zxÛ 52o#džçW_:|s?~>r?>s㫎9㛎o98sl?xǏ=>|_>~Ã>x{K}6ٷYY,|>"`qۻVnY%kk5kwEE.Y.={ $d$3BVFv;x<<<<<<<<<<<<<<<<<<<<<<kkkkĄ71J0Jxg3w8xg3NJ1x3ތǦ1x3ƌ7qrx   ނqy,x ނޱ +_WU*|!߾ɹ˹˹nFXb9(g24@(Xb(Xb(Xb(Xb(xœ/|'_<=E) T Xb*Xb*X)d•oSʊgQE-[QJkx 5^kx oڀ6MMMMMMMMXbQ.@JXjR+ZԊΉLFv҇zԃ,`K=XRzԃ,`K=XRzԃ,`K=XRzԃ,`K=XRz,xZԊV,bK_jR+ZԊV,bKXj2OcԘ,5f1KYjRcԘ,5figN;sڙΜv39igN;sڙΜ%M8mikM[k0ӆ6̴aʗ]-H!Ij.OϫJ.]"׺Ludw*#q&v غv9J3BdoY pv +'pZ +pL +Ǥp> +p0 +'p" +gp +gp GpB gp&ʉYYYܙ@ ma*^޻]D7KRH&sՏǙ,d%ld'} D3f A4^kx 5YYYmx%冷mx<<<ކ1fx;&&&&&&ֻ;c+^r&cRm** U UF2^bd ]z#;O[en*UvV٭[F&ٻf?\LLf4\\Dx#ވ7x#ވ7iF o›& o›& o›&U*n[ŭVq-8W\s5f8q6lx 5^kx 5 o6 o6 o6 o6ovovovov wsK]e'=c?:kJ8UEZԺ][EknHJ;b!" Z\FZu[]uWUvvNm;:3ߓsνyϓ-Bf2L4fY,,Ufd]MDd]MDDd]MKYS{Ĵi"ELh,YDf}ZĴ>-"[DTF]dYRHHZ%e^'T% $&I׋_/^| 7/(((((((hF8VqXűc*U*>O&o&M|6mķo&M|*ߤI%UIdd'II2J2Z,IZ$c$KOL'&I$}b>1IOL'&6:i%s\Wiko:>Bʨ\œP&*F)̌q.#+\gY+U-ӞR,i te`䆿>y&xUiYN{MKHUះ޿N;ܻCJQ%gMw=n)6+VWÝ^Q3.燣>9x#UIE1+2+K*w#C'9ih;ΡGd~ "^B5?ſ)&Sj fWMe^#zL&Z-W{[<ӷ_# ;N?Rm!iO<>o>[=o?~?RjԠlJͅԼH@s:0lQk]Hg"u7&>֧j~OJ;CDoB |DH!# %KܧxVШҸ=?1=MާAvi!hVA("E(uPܴٴ +6ZiPB:У>M m&6mgﬥm|hM3%l1ah_%"tHh: :^CFMF oZb0`(#*#rt:1 nLy5 D>»tA:KKUtkMt==0bBSѶ1vbbMz鹙^'D<jO`p;N >0q \O^A> QG 3$!s3Cza}ޔ ˈ9$zF$y +{!)1ñTҒI6٤sc3ccI '7p%:Ef2K ]d)dc =v!9<& erC o-Sz0 ԞL̴Mez=Ȍ`;3|\SAR4Y~YN` 17׏y0 Tca[cQ !7’r9Y/TVDN8IU6w[l{lٰxM3c[ٺ%֟m{^vc9bJgg7v>gWPIY/ʜWv'ǟ=ػa_K|??q/qp<徔'S~C8t8Gr99c9/gr<9QEx,0NmDNsz?g\|ݐ9ɜqn8_\˅\G\ɥv\Ze˅\JWj8WrʵRr(f+nrs!{s{=w3;׹۟g)*S%4Jy8Q{]A +]\A< |;o>ÿϷR(픑k֫Cz"'qy8JREe+RZRI<"@U$JWUFU6xUդ۩jULUV/UY>tQn6Q}>WuQVU}jV ISo)O5>QMTSjTͻTs⤾P_=-@}+Sg Q +ЪG 8A ZEW]3;Lٴ3;1`a :ʂV0q"{Һ6ᴵmiI߇&QcM``> ,:Xa5]x w,R2 +fbՈ!la@ܝ[6MŮ.e؇a_XJיt-t-netNGG9Ρg .޸uƭx"zyKC@zjz7~A{K g0`2Ў!A]x12 `h%Vm 4FX3"ڌ\ +F0z043v :340 LHcb'&ebl3L aS2-LwfP/fz3k +?&|Ků~s_Et#`>[H"Y-5ٶn l (`!s&lH +~\O1Ooߑ,pg-B',"=e), KX>CYȒ,*e;K_+GXjOµL<)kEd5ًF'JÆlc/le#Kز&l;۟e!YDTcoKo8`́LuĸMb 4#Dsy4h5% 4SM"vJ\-w'>g_O CIXIB< 9$4qșC9t8Ҟ#n>Fs,c$@nHLr|! H$!ѤؐIJ)'sS#8ӎgvr֜~}B'p΃s8ws ,Ο)&qw.pс\<.Őւ4{FA1Ҋ<˫{ޗo^CF2qZ2Dǟb\)&AI NZ֋k+ލ\/ 9 ԐMn"y-!an>@n73;unrG~o)HQ8`3;,6Hx"+r(E;JSfRCbJkx#Otz,(x3xī3#(7o UL~}ϻh[~;=HҝrVQmIu5A!Zjћԍ5ԗѰOZ|O |^D1MGhv_F󥞯I|;|?fQ[#a$D|Dhv iZas2S@O ŠR Y1G*JMŸ^Z_6cMuvAo}1Y/&_4VLl!bP:t\'bA,rXƉXXk#6{tZ)sjmؖUHrU}8pE}1UN4HRN#=3|MzT\S-D=\ {2a/>74p zp{G{ ;u:O8hok)xyW6xx{w9x¡-p| _-0W? #B 0s p ( @B>Whm0n5!)~\/f * +{!: 5A4Nq7!~ ~@ $#pgHLHrLH@Xw $@rCsH pk]C2tEmOs&-ː~DO$Nv.kHMHSFh~fRЧ)=ϪTe<&_jp ٛJI?_C˯ٰl| p"K2/_uWD|C!>׈u55[+cik"[6ETJ}lBQD %7&p,_*wu͸aWSJk?eJ')e7v3IKIu~_-qF; 3rȌE{U$2 +R§S<@L1{4hP te0AKKG(~^DԴy?}2lFVD9\"u˃LU2=R0jhr':o՘oֺ^hmh43oGOUmKMa#oȼ[E ȁϪ"Vcl(1st 9ź4\CWٗ-K>GCM-P2,WnKLyp ǀv݅:9-T%Ϥ%>Ub08-Hlc鸳̪ER'"^D >lF 1C!Ò˼>c T<%)h:elt7T{E)/툸:=;>۷nmŎό6FA ޜP4;`jJگ_(*h[uRm۪)]3#rJؼ񇹫]'kQF5%phl87X+u,;@fNN 60gM+YF*#(4*V +}r'>3\/3[)5{m*CN1Frx0V7Ŀ1qo72g쬹iA}cѦ;6ڪ8r}&#1G 7Yup& g,,& tzmЛI[VcS«5, NPb tOu358:">PQPTt+H@#& TDta@ay8NͺIjԭ{Kc@pYV55.*BZ4?3@$WlM!o7|’~>KQr̩+p3xE-e"N'ne;MX< #kGz91xl!_r1z~ƸA"c~}(4׈07p"pܬ.<~rm<%{ꎎ0 c+3ҖhW͛={0 2(_! ܥFHͰܚ]J.G-`AYYQK* 3:IQ,yZS}H! kh 5 +١kѓa*}.˒p409NS'iY'> fSM{60]}IvV?iZӿALvߓQrKezIX\BE_Pp>/) U8/F` %I-Ru^$ +grTY+$21*!SRBɑ-}cEԫu%4,>H'Fۯ{c +"T1̽rS8`gD5FqtnWg@&)=\Ux߄t¢ѫ{i<(Tlfow]9~hSU$X!J̈+e2X#;H#2xF×ƻG.Ŵ`^yW?,%DR<ΑՇ"4Mqp+!!nM 0<'Z7y1u_?eQ\~Z~2V 3Pm,(x$MwH2VAVi4Eb 3*(+;B; ,M#; xĆoՃ:o,ј;9N ʐBq4'%naY2B5Fʨ62f.+A$]/Fp| 7y :"#97e_+(.)I" ;v{BuWci7=VԺ M*¤PP=A>*믷V]qV 'QUg'#?۱+3\K9m UU9BqDM\mB%͔ūAAM-WA o:7!VK\밙LW'K>\HIյTTc1v0h6c͂1k2]QQ\w, 5q&iEQDaD@.^ ,Nb9 섶b:A^/e.! (XJWAUմvI?vEt{?,'Bm!?Óެk`<$X-,IkWcOދ>w{+^Qo8tM5;/O^L$BQ8CA"8̍?{;s8 VlRr"8h+`Mw 8z{,p{{Ia?)>8BuU36U ?vj9HZ,Gltt|Vmm ց ]B?Ό@@ފp!|A4NۂJbMl0|c̏/1|4>ua+J\QlEsqW[5^FQĤZ1G&Ytx(%h혥f=OZv:#`&;&˺f3CأMWX/4kwʖueu6-香.,x컆{h^J{+t<9|m⸺ZyMD[F +aֿ*3_u沭4Rf;n5HEA06sySZ[y9iCj8g r pGujK&E@gΝ-bsGl<\+30&]MEȭ׋.v=9 o4X8bA~ +Sh%D܉ +amό:'f^Z?eJ,-6sN#e蠶H%)' D"\_cgk-FFu2F~.Y絹,qe٘(GΒ3A`:뭗5?QfUv"jc2Rn0^iYb)3lR댕u +DD01oG9s~&bL)(p 4,C.-Uc\>Aָ%4 .2d37(,a_µ) c9R`iHɥ$ADM\2i+XVrb.qh k$bk1MHleu]W.$s۸Mt!] BŸή>7"_/=#'eZ&go2~Pa^ trJ;yxo*~z|ѹx4Y.QjѨхĢǥF]-D'i1ԴSg p=dG얤+NL{1:T]jՖFEKп]"UG^Y@l@$i -mvg} Kwlsї_pI-­fםir;MAs!>[| ?3gd]FON 1|69ioS2hkĴmǿ쯉a WA]$&br~; jlM;pq@UqX׈X<"B|B22ۀ3PWijkj>DҠS!2aa f]IVYBP6yOb`J.% +sdE㥪W]3%N2MR.?]_?(t(=GFсS1ކvܳkQS< d~y4aUlxy<%2tdgѣh:::~jE$4w +Cd;,]vnٕK*I`nqu?1Ƒ͌<UocGV;SQfN| ~PUn8hP2?[MNPV+hoѕP<@x KT! |X2ڢ*_K%#,DآLEO jol\DF1vm7wy/]f39FqD*w-~e֠3\g݌j'sscZ1^0QAQ+{cgee/읽.,*P%x:QLfNƱNiљiif{{,gE2y+ wH}{VQeԌb.?4Qg8[hh3qeZzz7S/MzO=ũhXQ'mv``mjIClT.Str-hUAujD>9CM:n\m0ɼ]PaFVm QK )&n(I,nUf *RD\or,SK +G$GB/0U>[&Bf@deEKlRw^~5~֗:6Ik#t}H&Rd :GPvҎx}xt4%A´ßHL@UrOPT"f6^AN lT.Y󩬤fm)Vз$* +dfkٙuJ-nn47Lr]n4Prel(5TdRi'5j-*DD&eDc`c^HṇӢy~V\vN-v:>{,DArd{bw% =RD76mrvy`8>ҞZGBy}t=S JtVOYRY-ʩwKpu斶 +hқ +y'Ê1͗)-7V +9RP|M-Ψaj1Xy*TBp8Xzrt6Xy 2oE\I^EVp7.:\9f'ACLw `Kd=Oz8f9a^<E).lxXiF\Hʟ|`!PQnMff3R?ж|wJq VYIO|.K*Np%ȓ&-~AP]D z);HB1 T%.Lu5Ԧ翄[T1nۙX($-{1P~$z{9 +E ueM!`sr웍.R:H*ԣGu}`qG+L˰ :83xа/+?"◈([{A+#x(F!/>9'`9V#۝Z)pZD%HB.8F6kڂ)BJNQ8CU/60x%ʭ| )73)$1#gƅ*(Ĉݚp2Wp?ųve){F[#ǭԚ` 9[D&wu9uN~dj̃M:hN'Tk1H}KpnHZueuL?/(3^ni.v74:ml&} 5c0**J8{c^8DkF;&hM$UMimFoqI{&I؝>ϳ|]N8CfA߹l0s& ԍ\c4I}d55on/ܫ@H?}\l}a)2䟧shK7 yu-S<*Wy +Z"ekEVJRq̀h?Eى+ u\k!L(|S$B=哘Y)jPޙOOm}m\t &$-=N +eVA  F#ChoQoPf'r%#$Jw֝Zl~ +,( e-lF>l1lUը3hy +jik.p Dk͇?xL`\3|&WiGgn/+lv zX{8)BXv٠2Ik5ڂWv +xa~{DI0k) [zJFd5و44H&(=A[ /Zf<FnEiH$z;^R1:)7bn@xJOUXܳ ϗ# W_)ַ]ަ!bJ޺h[{xNަFU; Pk +ѪĬ6)ѬcD=Qg-*,YVQ]c5:+*9"!X3$WٻpHmנM2PW<.+t[Gڈ݄'oT0nh(h8)7FQ;R؈Q a MߤQziPrT'd W +$w4E-^Zo6}*-Ui'y4[Ea`avUڂH)9QUi$4Z"aPt]a;c_'cp8k, i4ꏆXofܼYHi\o-ROȰp엯t~ ư60]o="J4r諬)Zz8>~w ]cA_KCzvd;YK`չ;9|JD" }}I'w`Qy FV[T埱_95u. +DJZAKŎܱcWHyA!zpv!AWo5} l(1| +ҪQ O:NO _Cnoj\/P퉠0!óuԍ (#ZCt;`J/Ngy d[uY}x__ISMWB-rLY^ۃn-%%[&v<>55T76UU7%ɡdcuړio%x* +*^l:S=8?Zj0Z(=&5AM0W(|Vg3dro^%f=%dxAU2ndDٱѡG]\ 1{ +;[^;Lzx{&Ȋa@ƽ/zTP(7@ +[.V*<%(?53 I2̒{ۥNRfm]qW\@1 !@ ' nIH[0*W"tE VmiVuc??;߼>Z,.seffm zHd{/hgσ8a"[p>+_aw9gz.VU da (eZ=5F̀n ίFnT/@S`tzK.E,wx#JiCyS.P1R_cF0"*UJ{ZQj xu5e6՘j)jZ]_t(pI/I9b1SUNW 6H駟0]D%֢(^j>Wgh odM!]2zfS*uEJI0a"LTŽx! {eU{\5?w>~/ bk0~b*r! +X(89F$¯n*ŮPY_EWqlyLN_[<[r0?;lnzJ{^iO$wO_ad&"ɵy8́ǘسw뤫ù̖8~"pEm;qMƟ%TjNmo4z/M7vH\oA}pfA`I3@a,LqX?|@F_K7mDręxEJ{|5r@udR k +$*)q!3[#rN=j̀"-$<(BT\{K'=61Qq/LE9՛[,N{TOmJrF{dz) +!_庤]}=_M ]cjݢ3wSW:8#c\Y.? +k?O +k?[ va͓(dVouبs?C"t;̿ +|~z-`,PSh8{KfC׭= +x3j5NyG'COc>]M{$YuKCDRn0/R:RЌJn?tbq3ڋS&v[;DH״pK?H-=V3w+9C]k 'e঍ɳNo]0ẕֱqۛ \{V>'Ke@W'xoehjgnT%C{ +уDXZg >y>8Kч{y'~x4z}/8_p6VP̤NanyTu_z~{2_m/>Ն*jpIj_GaDT*:kd1IkfǼ@.+\ /aH: fŶQ!Y%݈A FnK2ݣW i^  J>M#-2s3fv8߂NZMUm""b^ u(^=B|vv2 <&p?[g :k:6IJvmheQ:FCg?Vfl%5M X[&N9EuY22GHSk (;")QUqyy}Tgn##uEg򁥻?`6?0"peI|4S,=!oؙmu V84@ X@ZcQ~`qcZ:Ӱ)l]lIB]Cu+Ruŀ M."DHC !@ Q E(q;juvSvc;qk:9?rwfyyw99DEW6bisbnIJmYgq/,` TZ\'7^e`zP%ŋDB?y 7"dy5D(H,D $@|=/Q"Ȗrsyu:Q!T6ݓaҤ/RjJ4؞r4ŬuǦ)V+UMSLVT_PQ^2Z69pvp6jA$HbjVq/^Z O55WGcFbм2m [vVgqEOTȨ!-RKb8Kd)?$$1lc[B M't8t +sa.DOXn4;FKAh# *Hwǝ`KSڹSg\~]ozaO;>~kn]!=0蹁##, gXyh wrGKt|uq^a@U"r]eR]ш1q#56`-EiX +Gl ޻iYdMP* +Y.u|\n<>H- _G\!y,/(#3͔чjhiۛ3"#d3:.a'ATTͧ +,%̺zKQSuym֦^~Πi/b!ģ޿k)5/L}auvα!x%{Szn9EpLSm?e"@ MYi4eVڲ>\kA֐gkn7l* HE1uah xɌO@m8ʼn͜|&:31WjJmh^Pg29}tgs]RHNjC#!-}c]_Zfmb*(|SM̌ڏwOc>ׇ) ++$ +Wc9z6ݧA XQzZKEGȳ'=.Spʳ-p.C%#{Sh1 N'-'H}~JP;JkK \{Ux3wwsnfnpU^m'+S)$zo`#rSHw܈ +\co҂ru>_̷X IX +fBbF†{Z7-2s*yn +DuD:׾+bfK6<ْnMgdJMmm RA,2CSթX! ]0 w.pz.P-j(?0(22(/jdP->Y/>ct$?@՞n=H[*1O'Rm}{!.:)N^"̦Z1Z5uΞK8KFI6X@&L.2IY0VUh3ڨX]" #Pzeb pҘ@/}>0mrRR2UI4jOvZCՅ%*v(n4|wsFZO=w4"/¬+qBQ4; `L;U(#/pRjDY4oJ(ۮ.tD\{Vj"$$HL7X[>clyMe +Sd, ϩ"V)u8l˦SJLs b2 3''́O$?tctl<ό*>%*fy*_V24wj<0W1ʪvEg\zp +H,>?~G1i7VNwa+),Pݟ(iEL[oȱQU |eI^a`є;eJFX4gjez5WܝU9JI$tjh$a1[TEXzT?tapr:1,[o=(%twiږܛޛLV$c sw}\vQX. Е+ED4HQchεI*]@u=/].xog8 .vW{8xA&3s:x]wnuĖlVGƎ׍0h-jzAYÍ~mh4GOҊ;3.~6H-*z5~ۚ.o?;,?LOˍbLjјXCc3Cy+\兴o$r}b{n}2!~UM Q.j +Q'' 73nwĢ{~X> ?NOY=k"nQKDYE,kzV9<@tK*{-,r'#P2^fV|::0T^M^W}&8:( pM3YLC/x$eCzqZ3 yO۱֎;ĹJHb9 ,]GҮ!ِj)<+r"-q%ړ9n7nƸzgݕ`VJMOc%R&:җVW7//7:ﳭ ;^xyMPUc426r{nTqfn\0~2|{*|e7&YiL_ȏdKX[(.7V )ݞ(OIN jZYk-sPr7TխgCEBH42Ot*ԛ+F7.z{Y٪6h .kCޘukR EϯJ2. vqgq w*/TqaIM8f1~Pe0j̇И.A6tb|j>x2ٗ8̌a'5)+S5hFlM6xHd/NQ'Ţw,3Qqߴx#JOJ OwD&t4Thf.n9b%(4؛r)}DGB&Qj f!Y ]Z].`SNX Vu80fdgA`?0q\}=PLVL d%ޜI<-Ŗ#Eh@0 B AG}.e& ?0gUW~i(lhWBl6pfYI(.%ϹH:O FR> +0CB` +leg.zwv13'WzfaT$)%[&4WXyQƞ\iqVPUuv8@K+V$\f<.# ^q7}EO&1!*ըtYZ[EEGSppioE.|p!lL]N@_`z@.PC_{-alo| ՘S6Ŧ]c7Z;DUFAdJ1eW뮬;y 93&\9|;oÿ?x$~ n}ܕϋӃYtm/DcKnˌYlm "okgt3}@l`w0)Le6>MvO+fwkǩߜ ~UpƟ*rmm'w)TO\1p5)mڽ6W)G=jv5 :͑ѧhʑxgzcRjfV(_U!!6O8:eTd.5mpUD#7uP) Qʙ`ݺc_SL^z~/a`Z҅E0" 0o|%|]Km y?%&` )^x^eh);נE68fl rv$䧱͠ 41Y)]'H+ݤMV)TZؓ,G)[%5ש& "YW)ެbBILlE* gDXܚ1;GjPn{Sux xqtǓpXȪω-qme. +;+B.A@F˹ ľYnQ*.!V 3F&>(CQ?1?4JƱN,[uNRmk`QCIHBB)ϼy܄@(b_nU:]]Qj7two(>:FJθ}|w΁]ḤFVn8TԳ-J4DܐBH@`C jq$F  +rUN țon:4L0pG5杊vJ;zʫc1OoN+$jA^5 +/{ E!ܻ0"Oqn;@;#07.d(6}\ +4<ᇘ`V.G ZٳJz3$*#;́ED\)Q6: nZ +j!Əd85[e:ܪbm*GD: w׉=#QcNtpT$xɒ9rɷKv.~DChCϰRdb^0L w< x"H W'aҨrM-  $d&ˈn, j!^jXʘ~z ?"Q$αaP429VBrE\m,09["[`kՂ85Zb [|EKB%Cրo?LQgA4֦ +8Jl" urHzԢ*X+6P I*Wf:Ev7!r Wv)IOF?\$''>=2 ߘ ?aC}l=y;o:bDUjJn#*'莙YW"gtٴ,H#=굆*ͅ-fm*\Ti ZC:UVV߇,!a-V +9; [l65G_! N=a.|/= $#I=-,4z^ C)!WRë|Cڱ-0;KJ]<_F(l;?%#Lx]ޅ6 ._,mk+4t,ڇQsɚگo Ghc>NZ$>($<5CS +:ӑvd^"3?1 ɗzQ_UZQ (aT7=R\yLoq' =I4 +Z$`&$ݨ܌Jr+D=$`2*9_AO jq?hKpCivI%,jnV+,S1ܨ1u ]^W໊|jn),>)Վ,6Ұp.R9bB;f[/Wrв@ZXͷL̶]UUD uh2UbSuHfB}G+6PVy^U+^Vl?Xr'n֚L-s઺t-o^-(mYvgiSٳŞP,[2x\8_5+'{`/3wBԆ8F9&FB5&*Q#,B؆aaag`ءaIbj[[S7hE={{)Qz.I$QJ${o=,!<"qNw|:>0XSFYݱrH:`zEQ$bҙ2I„X{fVؚhZƤI+&SX$P˔" +εH%uGjnP$ :#DRMAnVgCwio@t*pf념>WV +L}}RLDՃG=F#F-{B;&Z{<: +xOKA:66/VDEEDUVkazSէY7xvg]<|dɯ5 zscQ.Hɷ,Z@G.zИZDW-C/\w `{l9*|_^c J;!lHDJP±2nyeL'30I삣9\>!Pf7Raj ن1o t\DъLOa‰ˌ.U, d*9\ 0KA,izZdOO Ppۉa񻬩W3.v;VdUB=.y9 GPA;`+sV+Vl,]A{;8_q3.  +W. w:+wV0_~Soq@/1tu*6t. |GHwŸ_y+?~?2<,żk+KD\yi ګ·QNk>M Fl +kSMۯ}{vY??'1LN`3ZfѲIu:iG:5`@sDQL*$gh4Oo$B݃j.c|ZoI.HѪP%O#eEbɮ+͜ǩN^u%d7jW:QxtyEQsnq1Z8/j0w'3.b_< .'*sbcya)(*%ᶕɫm;2U3!'K O^|G}}(-S1tAKOk(>wA}">}a`lG=e{b)cmVԴK{]hcs8Hr x=/RVàXט<1Ј@[T[ >ƫ l@,A`طsXOY#V_AMi7sv`rN^fZ^l*UQD +Z.@ \ $! rI WP;꺭t:̛,뎺κv1g_y2^5e!Ԥ} o3^T |rpkJ‚H:pA5od|hviC$x)ǔic縄f_?#!7c%I}ƠCӜ|꓇#2ꞮG1GoF3'XZxb0~kڣ c/̱[22l<67J-(-uv\%Zu*jF{EK;CF-W"s~q:Ԯ2qwn+.2\DG {y]$clitx2[qF09Ƀfo(#*MuUUBbɽ9G;hě#iI5pCɔiJzLB]zHo$w IOwJwy7-< 0z:Xq1X%`RE*L&,  +lJVZ\ I-@*kX Y+,JZh[<P!Ft0 q`jqC7wѨ[1TK +F[^0]93쀺R/J]WqVϢ͵m/U/~׫,t6H6]\k`O"EzXZH x 0 "QI%vIr9JVr#rJL|@dHz[k0ET"QIUGf%]u%ҏu{gۀd$&Sx٠46[}Vv\1wr80-u^MNQ!~btReC.qzٲf darL##TҌ$?["SI5 +qt5Dd +Bj c:X*,_sB-3^)pk,jIɇ?ugeǟG@B(lNt7߇N{5q|cfLɶBwm:;貮֬8(Y CGBr@ "W$I CA%%ԲS̾f[UN?_~ga4)K]$KBTlkz,#Ռ79 *y +rgR_C0[[< xm|gS\Ll^x]Z\UW[RF֔R'YFƕ,:MiLsM O>ATuPWmҷRӠy3ɾ ,Z@&P/D2_e/SVpc5 W"L5N-i>V/Q O 25y12΢ 2XyU<|8H7V٬.Օ2r39mCCiLȢ`!e䜵ڊ;7,w.z4b-|E[Xo/2\.-JMқvҾ F>rp4MOï. Ȋm-\.9<8< ̻pwȨCĎ`5=zsl=BqvʭϦVVh_yz7eJ5TʫrrTyH9R |~/o9_'o<}7W4kȊj'÷} $ѩi9ID|vq{o`gvf2!7ӸĸYglPJ;yKmK`tLRm\K%ɕLOdj5Fa-o#{`3;썈MX h_!Iq1DnXkB r#_`{qW_Š㋣Na]SAkID&+"R\ek@<N֬{$887oF +HSL2EL,OאL0 Z5Nðh痈JzM\Q#Tye +j5: 9Ge2[ ̲zTe ļR_2Q(Å#7]'T?]k&o ?% ZW> LMGଛw3z'u!^pIZ&qC|LJ$JK4 Eun-}TF󈾳ڬkPB _ĤB[U +q"I^Fxhޏ(pP #YDjQ{MU#_agͳ}nB"Ȥ`-VE`g)^ +gMH+:amr!^`:W5ʵg8N\vI s$ܴ=a< +cǐ%/Z["뙼‚$cG@|=xz_xNJh0(a+i Xg/mZwtҪBzFO~tc؍+'5JD\8p"&* d^ZdTc7?$^BV[Ofo^3 Svzw\v=!hmSMS#W(ٙDE.j"&ެ+U2 AyR56zadž aaA!i*g28Kk+64dtlg;/gtT?7X,䉓%a _s:YME%T[(lƇ?$`0FU3u툶B]sT -d'T> yqꚊjj+^l7)9PS4ʪd1ׇ&Ɓ? @0Ps!YyBRqogg9w n=ƶ546eVIIe}z x<8|D,"a~ !+s$c*|;w hH.)J=`To]r<Y' M#6&]|MӜk@E<]bO@(/(2]3il0S)WX K^^^\$n/<:n&X!gqqВk:{ npϯᱽ\}P/pN uSk?JکLePP]*ƘymŶw& ET\kt}< ?2̌{G9$wK0}J[VG>g  o~~b#xj zA(*ձDY`(t3Tlkxd;*dV@#`j8ab#n,M ACh`vheF6EbHq0~K`H'cڪsaT5#S x<5~}RTә݉\%NB +ۅ6i0[;zyd( =ʽ&.?{O>eփ| C%'?9ddhBe0*9k1_"ǻg [GE'\D@p Ll8mv˿(/+wCڎtu3̽ubmb:18j|>"va_}^},lyBVkFS3KgzqL&6?;;{!3Ў uq |/OAV +p;J>a-D&xZkJդS5a{~$_-ᠥbiY ,h=v҉ oT|=c;;s,:Q-\'b6;ĺ/' +gTq앞ȥDh 9|L +EiἢגBʄ-z.sJjt޶fOtϫg[]*kȀ4 g# 68Q-$: Y{!W+ťSfFD+ +ĐhҁڬCpD|L"q%ZQ+*gRZZvU{+rNyH +yhjHe0-9og%jJ jiI{~k17[|9P5'7̚GJڃ6+nq:4*\)8nZ8gʏQrn>eOr|c;"XzT-2XhyvVz7ߟEBVLoPARh+0+K;bNfh!R5W ? h̷v+ h6xn|ͪrKAO_?]x$ڙ[GBhD|,/ [G$HKΦ?)-®P ٛIMo^) + RƄe}m]-* +m+Yh$;-Eh9TeJX~,=UMp6F]N .DWinaɪW%Cb㪷#Q +y +r"8?0 P}Y ъa^d2W'mL|?AFŇw-ޢgAd*m`f +(f:>Ev6]`D*^gPadĊ7xɮ(ºQӎ8z/AIDdn҅PLsOֳ|_)Jϭ7KGb!WP-F@4d ;{ԓ  +Kߧ́J!b +(9Ø"mP{zjuF0F$jڊr9&du5VQ]%֩Er/q:k1IǠn2?<47S~BKEޅt:V(Lv7$ #/мy|ʓVj%ȋKyQh>kށW)E99ۙ~{$*jn1*=g+|zP<:@:T r4 ~y5u9ɺ]B99^j+Z/Тne*C5r! $$$EHDrDKmڭvc8ֺ3;q~}{}>?V^lȰ^"XzӪ+zT̓,FD`3~C.R<\n?KlL ~ ͷ]9t7I4ZqY>N#9:Bc,tٜ fXV(V{*GdžZeRЋ-ѱ)e ߋ `|6w p_3LDߝ.j$T 'Pc?m]֔]_1x0?i?%L~*V:W$嵵fCs]=a%;"wu˨K[CHvO## ZVCA,X/m9sy~z,uڂe|?i929HchmHsNQmM6p3଀PQAekfjTi+EIQҍSj3_ۺ=G}fnUYL}5+%xgő +S)ZW+ yD# &0H=feODH n2:)`@n# MGLzO5_:@ \2f[BSTj- {]u[Wxckw3@e+-Ҫl,IRÊJM&qdF;AlFπ/=a%.~[ҁ:}Fe_Zx^}9d/ +,4 O_`"S!8Wiz#`G鴨V#/.k24N'/Uh+{q2* .vKL kDH1j-x0GQ*S72} !kCs' 4O'7뢔ĭ]lYVaS^Dm-V>=ckꜿrޮvcJJ""ámu}U/=ޒ$ejvKZ25W.di;EQhQ.kg/9r1b%:Ng z+Q'C>ˊ12[1Un$bD Ja.Z{v|Hv6D@! ^0Lڭ>R)=@×.A{pHS_@Uji.WВZJ7 \Q^>-LbCS:O$ +HbbkvbjM6x:αuIOA] 8b7ZOv-Wy +JC"*FL]/L/rHlTd6 ++siE?gVTQaq ET]L IHJjEceH,f { ^*"%،'Dԉ !3:V챂g=쌟oڷmL&<"1}rDL.R$;`"ES*K2^Ko:?ckPjWB¯a}O|H7PJzVoePzyJ {-ťr Rjt?Mrk\('9+dRJLx9 BC9>lH +uQqQϡ :uHrMt;Gڳ7QMmtsdF~ `޵o |=:qp^REd7<^;wv^EN,9"1 +oF@2:.`٦(l,ߠSCFmr:sLpC>.&3GIvEng7bdpc0Ʀ8C%nٺeݖ|[o`PЂp +qi aKgNLfٿgw!gZ[mݏ:3NmA_T@W@gVIp`w%\QIHVQQ@ܾu盫Pp4ܩ#VTgP;Oz\C\FИtVd5SCcQpF`RQ{r*Ve keWTz5-F¢3jZKyjJ9kQwp]-J33%H?]BJNl/wA&%ȊgGLydV{k1^2v98mс[S#+)D +%]/Lp zXqmS`uxg7݇$CYfNA=  1@/n$vjg@:`|4TX] 265(e.8V5j7Z軧[䣤.InDf'%Z+!AZl&; 8EAf}=~6n%;˰?j^8ە"ZX$*' +֭;TR(r ٻ[]6<Kj@1)T>-:bP \6{~ij5[Ilra9bAAR%vnnf4;[ZJycBz;A]Vewhtunc wo!N9T.Iׄ;v)pSB!NE "ps3—oOgBLJ7hH! ~7Z #>Ao ,&,U47ȤJ\ϑ\=䷆I ž/Oɢ)z~Rģ+ +?wGTC}h-+-눬l#'< @'"YঃBp釲paqP,NOh ==-f /P+LCUl*5{f~N[2vc 8Q7CJVXG$|_`eϴ\hi.c +^ATZ4c,ӧj}8~o~*ec?d?oR?Ct\r+v/jO"#욿N&JaDp)HXWNgf[FXoTX-&c'\HuzP(՞h׃tjK*AfdN\"ꦘa3l +MY| +Nl 4|kɬ!pO6KU}:Y2;FR}@E(gOm)OUWCf$ O=(=9/O> WdA41WrM%8υnxWkZB]hѽDn$x*ܠ7w>. {:@ F%Q?EOs dT<<{z7dk56VB a"n!u2З5NFB!Oppii7[̨U}`[/(#_:|Hױ +Ѧ}sJpD:| 8XcSΞ g9Ŕl#wvo'x"tn~~Cy`[E:șM.k9yqx202 fɋR(Cc-gP^kM|nFͨ j65c1wfj0-yk{ycpG_/`3t+khD_I-v,GosvhhiFj?\Z*]P$/`w~nqjmXFV"t:s 6<>6J|*U>mzw6ݘN>%zFI\'䒲EI1L[#j/Ӧk +&Jثra1Ԡl3zxn.)R=4NUq+fZ+q(Gtj.%;p3t fBiZtym +T%Pʃ8x=<-q ꂵ%f-dP&C 6Ö-JZvW-KZݷ%Y> 21Gp!SHK3M'δOu:]h'$wAP*7"}"HVCba0 Ѫ|'C GkW`=PF.3b1#'| P/jz ФP7CѾ" 'OGSP~ZӄѣY@vOV8P9yA.,+&8Dtܭfy3Pɖ^#Vw, 6gfw{ +iEOþ&!1a=t؁=b<$^VМŗ۝Ni"<2O*{9ۆJ852yV"X_+ϕ6u9 DғDl dgʳ jww>L@Tl1&b/gE 'ޱRX@ˁY lE]~l0j=;WU65QF+Ǵwfi6;'<8fVBl̊G/9мHe *n@VU+;Vt&{>vfDa[H/T3#Ҍ6^\?B.}/ 2^ÚD3I7PCԘ$Gx'Fzg_z\@FQ [ lV BԐrD2lkD1؀K߭X7}BgWe4gJ/lq=1YiD\+!g@ C!QI)?CzۘWWovC6 CSBΰ3f: b8knmPuGFbqoDesGKƦdx=n#le%~:,d] æ쩾3U0h!h1%ZvD$JWF+v37:a8Cvmƶ7 '"j-Zצ?9z0%·p06vEN\ `v[Fn#i3s1q`co9h6 ͗rIԮ1L>%bX<N Sps˚w_*DJ>+B*Yjn/C$~lv׏M\L'5VL>i5ߜ JvVrQ;QZ-ͯ`<֋%rl$$. ~/ + 2 ~IQe,~j +*>NTMmM6EMR+ǦH,NTFpxkvޖ"6Oi~93cUx ֻอRob`Gch'Ω8WI&wKR3)pN + e~vu8[ɑ/k- \6 X/֧ݯ١PC6vހ\g~HEbK3ĬŔEbixaR.@Z>#<3Zj/V&ՖBVEY\qo;|݁ȣSli{ =qt:jc$|I dw~S\0_\ +2-UՃS2wx. .̪NLKqdׇe4?L\Ī vC={v${q.J!\V [:/Zd_>X0!BxFf4[yqAC:y=@hqKpM0d[>~EEY"yL)鲢3s}S ѹza|̑cL0Aq07MTVT"??''mU]}GSX",x;cqyJ>ÕAN TXVnm\y LeoſO6ʫH<;UK@^Ɉ5ٖI A(H+SF?RT'N3. @̼{Ox0Ng2[opF-:qD,$JEPd8vq=GF^o%K̺ ef3' Εq:Gid[r N0!A嬉Ԯ{ +]\h +=T$bb*x 0E\F}NQR5 g&yyT8GheB#V;2Xc$>ĊLY[|vh'@7 )^EGsiB#+?uHL2' G[ZÏe#&q-ehU2n߷ +zdMjr`ZCeq(cis0~+u!xR蓊,d9hʜK] B OiQNz}Aaʇ(Vֱvas[w/I{Ά!ؼ]XWn567e$U0.Vki2Nk!w<D+GL2鐵 ikp8a`@5ˬnvEIvbvv5ۦiVvJ#"}Bt2+Zcao2(zpCLo/}|\4 a^Cz\-W&rHfyzxGXtJ ^fk$i!xh40Rs$@Ku=6v 8Tᄲ7r%]CĆJz-2ĝ +Ps6Ũ)[EPGp> ,D j +M  i?R{=&\ʍ`pLj+j-&&+1\eId!%h7e[`5ma?6u͵Xy)+e,ϠPJn1ٝTJF.Pd(LEƷ_$}혠DIvb +?FvقO][E7t,1! t|#O'>'yoxW{xԓZ-l\?'\~N^~Sym;Dc l)Lcސap9mdl9ɱqDxX*lEWk K+$e@vPa(m&k%eB.b:KI rjiki߆%Dp|$ +M|Eqa|G]CRLfVBc0Q @"93#(p +CATA»yﷰ[Vln1Mt1߾g F(U0ň;,εWʫT:vA^Y&;NVhIxgp"0Ubɝ4\9AڨC{ 7K&5Oo->AKd8OLk +x,%z'd5Ba,m`pđǎ7D=ҠVmUn:n&?"Z[N_aYfeMW6t+=b}χu3BO%+;) !ŭDۀ^?B* jzhGAz 67%P?'m΄ fXec}:[klJ14F a9!зSޔ9$=$[!Y>$g +:3{g7tcx7K9SIT̒ CDmR< &UhB4r¸ں $7X-45!ٕQ=-mL-W4 DoV{dceVdmdiaAmHe'4z઀x3s֏U +٠u9P@s|)p, MDc_Ål|,s᪙(۸+'/WT{jpsţ5 B位LW*Kُ^^qhO;8X )sW]G/ +R$YW2vO~(P1ٸxBѢU(gdHKX,۲XSFR""G&Qz &X=<YIK$5f)nyQDRM:Zw(F~para.KO>h 4d^eZul}tZMRA믜uЦ=gίAfz{ݷ&$TF#K4p9K-b疰| mk5JO5";_&-PM1V&pW/]2GP()#z6YRCeee%=kq7dS npXMDx!9$J2tR: |8{);ɜfBH$I0Jw.j$؁3'ӲC~,qn*y!ۃTBzZg^1B42vn"5|7ZAL_7{<PWKE'23{\\fd2g#U.}OaBn(:]DGSv{gc _W?q ֙.cvt|UCvUOox7;xgl9Ϩ`c%w3y#B̎IJ) S(  !.(ۍii䌢T[t= Uс^R:543$Dyx7JU9U#̺w(/QbKdtwIȊ W~{VDRFڞt1UK䅓'jh]5!?Xnn#o`~~q}_dpzݦPhW/9o#_+M!_IoHi6ha ͥfOĕj>Q4"WyeK~P(b8 k=vЪ]ܜbE?`F.#z wRJđaС=C.4m^?4k yN)I32V5س0ЁU+s 0H>,}CN#FBԫeWfKL>,3)+&aj-GNZgsWE+uh=/ȡ/*űeA[Axj^Md*5 BK˥XFj?eiTw ;HfZKx>/-$KeeEt ,`V (#=0ǗTWJ[BF4$W=Dlۆ; ,Gh;Vz_N`R+^z zˀ੢K#d*=T+**ʇ߇vm(j나B r& \$TNSlɚtǃCݥ?Seb3ԆB 5} G'KI^mo4vթhovwin($}Qii8~|r'ݤp%Un*?YPC ut罊n`  ,'ahimg贛YnZx$酄Ismڸv8PW0KԘe 3ȗQѡokbokS4o+ȿc3h6]¹i kĿ܄{XEHM]S9mQڋh,)}'ùZ":ܶݪ +2uu_^܈!ajŗ'w^sAɍ " f{]MQ3])L+ t"\K0߳]s2 3L}tj&'Qq%U*͹ +n 9f{ǡ z82NŠGm*獳 *Gg%>+ۉt `dg9gZʂJ#觐jEAٴ:pUd ވGlAlnY|g%{1-A{?\XKO [#ǵ $I=XJ;L^8,`.y!͘J oy(gNSV+?;fHrrdO3l"/FTB$arʢh7?d!J{ 88,x҃MN-Q" Zh 4oLDn֭Ui$X6:O[%(¼]xЮ^z?I?3׼>Y1;7f};X0|Kr uOuO4AG0ɾܟAJg{r8-o,l৲SOF$VxQbqϷOۛo2F9yJ݂: oN R9wkaG87p7"\:0^='XT6 +̜]kwۮ]]**X"  r`B rQR[v:uv&ff Ng~?s<5掍u6)"e>&|#$\/tFE3r10[~,/7/R>ZM tcG!$j?-7b ]#,sۙx:$9`%c %-_J&T֡/6S"eDZvj>[A r > X}Eaoxd;d:F+Jn gA"2v(x^ >K)&ipy1~OKr  5BYI3l#Qkq>6r{`ڗyIܬkhNtyii.o7>C'n$[C :<@_ǘdX ' +K*%4pE ~.ϝ+=D09\D>ORxZ9@`/hW_ +pFY +yIHӲ3ky'k o<SuږUx4#//WDFd`mtSWbw|v?l|ȻބVF|"ĐD/BSH:3 x\*nq=VZf$޴3ɶ`۰P#LIVY%4sYFΝ*5'm oK@o2jz` șl1x>vOgȑ|Om(NcBe#{bO4 +hx"~Vß vh:]uB#cp]{{X^chGW8DK%(Kv]If D<;a[[Ojӑ&KsFzL.Ӑ(`]ʨ`=QWq?ŧ/GÅ˒!osWWW۲EANS}OΘʦ%djJ1Gڋ 9DS "$ga.1&+@' %Ou>Sy,IRI$*>=ZP*IJ.{|$65,ǻ\7ҡ>0C#ҨuFK L BK+0Zjl}JKDe-YphdN:Eԁhv۹q g!jfT_ (e;T226`51Y+tZ ݪ40$C}$X%Go"y 鮰r燾 Xǚ.YSz;96縎PP%<-0 ?)=t^o9 '.KAQ{):ж BP%9otMQw` 3xwCDZ,Vi*6Jk$-tc ʓ;#WLx'CP=,f8a{n1*,T`* >r*R, (,EGL\";a4XW49.gsJeE ZSQ ~6r=5bUVA@mSyo[p4IMnVeQ`oBUXeNp㛏30P\%7:8_&ާ@'lg9)k-]&jb;L+)[J1A`$,,W!/bSU?!&&N"Np8%W<9Zvb!|)ZFD3c 3:WQwM rP lf1%36r  s7b M=׃rTVyɛ޸.Sq'{KUN-uC&A ꦟo7wCwipYj%j!Zҿ$$Ax Ӓ8 +9K6CIvU1s ssr&6 sA&/+ZN J?4pO;."B&oDχRJ_lKG4O+wC91_QMdw_ԙVa1 +3V9ZWB_HX/y_f8ct ?R^a(7ӦJ[N43؜= ^AQۭxӹKOm%g;:[Zj;7U +Œ")Ht,mކ6NFiE eg[WεѪ__)v@pmy"?o2 Re>JtfyB'"H +Գ?a*),.43y8Fy~߾Wg>Nm 8;-K }("Ȟo"wW-@gDkdޅvk@BzB.0GBHǪ=W mN|P &E9JDomA0|4XH{E ]3 + +%D]NOO \9;Bl[F<ϰ\to\%5pע1XL$bj +6ɋk5Z"Њ{=yjm/??n5+K+}f1Uau}CO6~ =MBBvoQ t?I~lܰtOohѪ?L9 +.O~ANc%̫в፼Z< {v^ N^_ڬ2gOټ 2IEÙꕩ!" +p-!'YH3`7YVMpݣc 至ʨDcN/"@-DARrќe~L917[S#&\B ) Y3Ț  YF0\XԊAb\ + +D*SMK%33#Rl/.FwlnvWya}T`>9 -嫞&DTdhsE|g2{id-Nt(8oI/P@1~V=RyةYi2ݶU?'-+6K[:}8Kby97+`? EtFm?n̽zd !. !~%ۗёZGGm* |J v' Ɩ lF>/(kj1 kqE,pw;œ?)Nk+]YI41 &,wF{ |38{O!EǫTY5UcRq sݲ@7M hgI,,.?EqǩvnݑuYs +L}ko]}Pa)\piQk=† †gO]jI?=4ůA⋙:)9KEu+X5III$ oa( ya6ͬ Dbi%,e/_@TJvP2U0[JqA^:vYq߶S})2e>T꺀O?Kʋu:SA{@ZawےwF}==qV*ێS E©J1g;7SRvFCWڿB_7TzeP={Δw֥JzE1. H pGHH%k@ x-7qlg~qN`tgڙ=܇wE+|;2&R[d^f@|ޙyՎ3HtX\`ieR8D_qa<^ogV$)5NWfP1T$?v~^,!9-#Ig۞x®'duHġb~WM5`r^ln\, +e'i'8מ,s_lmGi ?^p汈` ;8OinyiNu>&'iTcɲ7++/Lŏ3Z Xw)n[+|2W XV[?VK8Aɋm̂N'(;g(_~ld/1YUy{=mp_(Q/G]O6}w3\z:+D]+hMJW҄d@? +=$HEtק01 @"B>ta~Ju$1\5Mi +)8e}tßYHcfwBCÎ "L5hdSY֔=}:C=5DuV?(/Gɉ{{`D8;+Qۨ;p>{1;OX! ^P|NYWSH>cF(rb3 V]Y;^H]O3K4I~*uEnR2*PD2Ggbs(K*=Nt +ĹS؇2Q:PYԍ!cbzEJErdI().,3LfY&YfKNQ³MuA'BY+tYv}+}:vVFKJe%ʚ +M\?kN).>#r nz}Qq ͖=B/8bTQ-oMo<{z}@ɋRwPoi/i5=vwroІT0_iWFX XE7iɥDXTNE/~Yx46K *c4۬/6`=xD HY>{| n?O7,Vj%'F>MbRȻ w;(t0Nfp*_FfJ,L ;N %9^ynplF[_|};ni$x~qr8|d4ęER!*:-scUszl#AlIgTJNfU@"9FҽPM[?!& >nrI\L^;WR!cPŔdcIRILQD`-ŋABqq^)EfY\۴F(EcTPF$gn'ԙEzwizֺvmK/V]TPTIJb @- *XN]zB+u .j}~Xήvgkdy'¸"!!jڻA[$\q.&g_㊶@d[HㅀBh}pv|)#S̓4YERB_ +_U1ހk:~}b($-O{jrYVw64#*N- tFh|z xi8 IheT HZd!]Vq +L|IlF +A\kDuCXISMx߃'(0P$L2AƗufy 6¹HF؂ux ZӪRIUU^ PD.6#ݵnW8BzFo6Τ=@1ݵg'j0&5#>'Q0]F/-AD\ӠrKȍsQAevG KTsrn6'&_I"+OJZOe6o'Z ?X3ʶ*Yz;|Lj uR{@&p.ne"Y"A6QLpGD:C#Q')OpF,a==ě໙n0w2 +k "&re"GӴ1f{" ].ؓa=r/UM:i~$"A'" f> +; +uղ0]X7kc.a"Gj/F[GZ-Di1Mpt/>xPn?޳jcB&yklыޤݍk{Z.@jonwȓweY/9='16M?!?Usrh68Agjc2jm:ςUPj[|C:!Jf!nQzA$3gF +  +~ rbڣOLS8@lu{i5} x:\ Jz1J (d)] go|m8؅\qzұԋ`1xO9А¡FG$ UV)偟&qY)k +tb5 W"E.aOcېc3s]83T)@3m3(Uzr5F;5C U>|>#猖()ޫrϣvB6&X[UUbVV,ۛγ<7zfJJuJ?UИɞ+J\_+ё6(z/<>T =ah' +ӻ^;q~%9-Ak2 &(\ `DYdG9|5iAVS,\C9 +kw418QR:Ahky:=Ito;φdZ W*;a/dsbrm蝨Cn7/wЃ<6ru^l9Ep\hxDkMؚ>&sx\לer'VRNu2]R" _f:K]{KWWt"MRjNU0.)es}nH-;M`%>6)j).'j4Vb%:*WM v!"W؀vN4[Vˡ2p:^)BIZcEh#&m>SD +=UEB<nD$;5Y|4*l=t>S15=u_XoT烂!p9  +āIГ2n^js +$N[gM?HW$^T| Ś_t +=Qqi":1 SV?/&<q7Kfvgv};O=i{W_שBU@^*Aޢ IȆ䅄BBx'(ȉ/Xm|9_:^qڛy==AzqLowgyϗqpZU\(vy,F@-ap5Wp:=A)PG‰ *_A(ʇ,)Y4؀!Ck_K mQ>xp_, ux| W09Hm@Uj cT*L]̡bp)r]j+x[uj~\,ru/<1n/3*Sc|B(L޴: +5} 4|'>>ww?1K52d]0 }ʕ픯T^4.yJ@)~l1fy5(-X*'3&}CR[L;ָ k#"r%BJ_2_vk_k{>m*lf +ԋZz 掾ADǮv<.vM\͈gi9VK,'0FR/(se+\ͥXTŁMq ԛt+,kw{mtн#kֳ`h/#~p$kA`~yB[8{Zl;԰n/)W4Ls `_VJᄱ_1rY<QblSEu5p֢$ڭ֣5F&> Agr~"IG[Y]U`x?0~hU-UKy&NU Ɂs9+=mj XE"u F?cԤqF݆xgjg#/V?0RN =wO]Snu>^OGüpiZBoyM H u0%d4+fyg@@!t X; bFHeSj14ɑkLt Ă4l,ުfE;4; v +R.'P2`,)? +0qx]LJ@躄AL|]W:wLips`9#2XIſ{ +U+̈~8 pᣕ`[mGFh0#䜋D*I牸?"JwF2;ƿ|⩛ԽKBEFJ%oI@J!}c㌻cv]m:o81&jո^+8.HC "<̧>Ǣ>5v/?ت<;f&LRC3jѡz^^1@23P=0TTr(o"2mD?G[;[N1YL.k"sebq=*o788H%xiufY@v% BB,;vX n!Ѱ&J+k! NpBe&n1{AlĭI{>u8'( &;U:f3Y(<ܻAxOS !-5H/jldxko*QJx*;z'Z/䄆y3+Q(:t+%PH,s H:KBgгˆp۱0ٱXBk\4D)"[?nh$}qX I!;Xki.C"zZ4eTb#dn34QUթJ:LXL]UÕpG毓m-:DYYIde5s(r~tm,)K\s6IY~a(vkt㱕p+~U`ۀK< n?<+W=ԡ;<}OЪhJQ*7hE# ! @؍ ,bKb #uA+uiXGyhΙ3sm߭iRh!Kl=L7{MP>6? Sʣ"cSf8*V\V4oy];CF& -Qmnsg1Ijdy+UXW̠iWYC 5эUb c o߄/M3W^Oxwl-ߤʰwP2y(8|]e0Y~d<C )%κ{xrr7K0gg(uizɥnh6*ERx^n^jPm4^2Wre iQg倁3~`W+; X+\#\ [ZZ{v= $TZvIQ~2PW;o7/[ pĮ@ˣIX^*8;HbP voBm :Pʼn2c'êӪ,5.$79\+sMOdZQű^]]{:F! 4ů?7>tu=0=T4]nj/cIyF\h[Z϶kim.J[f唧} pӸ#m.OycKwJMٌBI_pvTt0DES>B=!#+\V-$!̃`<-^v-,S/+\O!Dž2m3ْ+DX*t&7 B[4J5T&HW6.2HhN: 4c"c0O"O +}NRlRlJ,/-#oꥋs:C6(BS3=,4c.V솸#~DY-bi՞S'RdKr ^zJx>Gܐy{#l-VZ\a;pTvcWq;cyoZ CA}V@lD6NsM'z[+W5}Q:&BȀ˶cЈ[gC u3ah~491*l"[5KM¶APwXOLJkb;VY2WkwuR:m)/l$kN!FϽPb\ ~0-mګ_Q +fL2=HN>ƍJU5 ;w{e0ʴlѾ>5C3gJ)Dw*UÏ <.rEAhՋJڊN2maEe)1Yp M@vL)əGygU~TBFZJTV5`(Bu}XRҖ~<&MZi2C(R1E1LmjK83*7DR?.Y:K]ɰIrT"Vw1hǥO= +û%GbeȆkQ% {'r +B6_F{۬ĜYW B"0,eP +Ϫ0>z?Pmڶ+THIStid`o+uo07Ӛr]Y&7YNE1T/M{/#!kH0?5Tbq*1X9`mef'Yv M=dQ ܃a qhf%m WsA9DR Up9d*B0v1bO-5bV|cVW9g^W~'7H!NN\j1#(o"ˆI"sƓNhےo`Cpe8'`9 +>%1sw}{5\? 0&PLTzUe&eR'ڻZ^AQ\Y unը(J4FW"( y52`100C]|d]a}%fqc"ʪ;sy&[.O.oa6m}$$մ6U] ")4ΆDWt$;#j;eBVj {5H'}7ՙh +D+̐ /,9fv$<Ƿ@!ϯK2h{v, WPqZ[\|m^-̄_ ?vqڍ8I ]&=q {d^_aJ ^60uUe5e0'?_?.=׸z)PsqtUVqVVcY%8ajʅ{]m!3_*?/i Ըy8\THqaw<:fZi0*آ!Q +UvM m፭그;pk0%1eak@߇ȇ岎|C]T$loڲ]1][]jd[iX%c#r""33ݽcg[ur{pjC*_` H8iQiK [ +Jtp?fP+ˉpݜ]>#Z1&ؐҐ/F9 + +>fd9/c|w*;_8S֮O=OY|Gv%OX%E糷;U/hoH&MQ^vUdfjue}Ku4U9ȓuXnwȊ$CST%*#X;ģ+7C|Ίb(>aR1Y"iy"kz1QͧP٦'pʚ 89X:Dxo߈-N`p&x܀e:=;-[|{bJPY7)).M% % =;zb#q@-Z-WokKkd(7'(ؔ ,"qu?a jb (X/jz sV/&$éhOۖR2#q%_~KܺQA_|bɍmBn􆐝5tTdec6K}<}\JHTUIW)ӹ癧OzGڎʺNZ!), ^5ߒJ80)ݕCwp) ʐ0))q ؀ld˖ZiJ}l| +ˇ|Hq3c!iMB^d\G{HdDe"vN$ om ֈHK_ h՟WCR߱Ud<޹=)=/9_sVy8?J?1ִ~z>|8ˋe)%Tz/[H76(7!N1hKԍ].'[}8/j1i@'?_:?vH_رnAQ*3 +qFybɁmKj68}낯}lާ }-s0/ ˷9S]W0HkcVZ?a&xSy|CXnk7`ǠGV֤~/|ޔ^JCkQ7PۤagF2Xvh3lyO\2{ %:\OI] (Y%U +%y)k)>Uv?j~.Rg]wz/\pxkk c}d߬){,#KV`?HV))'J +nޟ&qT[Ȏ&[K@uH9>WlaX ;j߯{IG,R;% LA>'y:L.7$ B<*3u%Bk^X4N8Df!yl.kWZiC%caZVn o>%'Yt`ውl3iY@kci=an$hR7At68}-X.YlEδT}&0TSYiq|:znH6pG7"/#L1%fVFiJR>mjLVv_@}P݋y>|b5c%"ڸ'+Xm:`-jKd:Dbgdyv'jH`-z5'x1V@vnt,U/d!XgȳXp+p&WQkʔB +yLk?נ{0h\ouh:`!s^e +NiA $??åJjh~ěU&*vA+ivsBI@Vhc݈\[G]eDvлTF,Ǫs^{\Mnw3chy@!x:T :#R:fA A70IPYx_"<ȊlZHlM.B̒.qzh%X<+l?@"s_x%z}/]5|`| Tb|N )9_~aF`YbgnXtYfmj0 zdC֠B}6d,ۢLb;r8c5}"M3ֲT  VFw F?5'7uI^04lo]^;dO^]vki}6+gPtq6vxyY4|'PgIFfua'TGh) v II\#q%IjMfnN {/.ҁ~l?56 W+HC,j c;IwJ! ]9N!4}SV1y#_֗&o(2*HZq,P=Gˍk-Fqla[$ +D\baw$σݡPxt1ejÞL[Rqq60 /}&&ԭ.o1X~I Rf[; qhC<>ODaL jt2mBm V FDw]U#݄ *&9BlhO. +X(+Pٷ*{5>yVqW;h@<'cP 48 Ђ8%F%qw}@6PGD+09$W +lЏOiE!eڦ7^ybӰmB oD|vraQB^VzRplC{Yفx-ŷ,_<҂OhA[5=@1c|!՜tR\F \ ^GC(`x&HFrUUT (qɢ)qZzpr@(#,x$v"E/J/uՓjt 6ps4β|W?9 ú;]z|j43;MӄT]%փo2ÑS̈́֨lSSh{ y{c=  ઼eu*X r *ą/ +]R'17炻%qp]ZFŧ\$@mj;ج :v\C%r, ᅔMApzyoE~t?E1HS&3y}c!K2ʆCLO2P䎮_cJF;XPqrfs.0 M

]ގڑ91:8^ a1{bLڜipaz yO@^܍egp1$)=D"N+Ǜ ]POųCO ]j|̖edʧw:55QFWi5(w4;>7-+'~ĂPy ^7tF;iD Hip96pi|s5|)Qu@}s?ݓ 9*qʈ"fxP&_.P`T̓Qvq7% !Us1?o(ITX{W-xC}MZ6)C;+V%Kav|^jjO;ь&s^%rK觾#=iǢaax?_BCZsARۺ.Pѐv(1Cz=,6 ETu5^$Bʤ񮯌s*dYŽo>sG:Nh@?T[ ϯjBp¡-UqZAX2t雿C:5N _'d QPڱX2Qq0ETP[E::Ao=o_C$TWj*)P)R4yrf-g҃탠Һ{ %E4X TcR_ŶTJ-QsF\-!~QS\+SO0:iFw򨾡^hp;BU;xPsLX\.-jxq7ʹe3i*@k%V+c7E[`&A PQdky)ا%:m0 8+NrY 8<ԧAxQ3zlO8.FQ*J)+JK+*)QbFa\Ļ vekEYAY7>huL))I?GѰi$,/QQ۴@Rm]n_]Kknk|EjTZ=I9fh͸s9cRtl>})g. +6;M2,Yu5/b0&OϖfqIw^I5|!F1 WҤ +(I-5 >=dLfBYr91? V%U 梧(ʫ4JVWHY +q52jк-RG$`ՔTu&XqZ8IW꛰#AIBUW"0c (r%z6^˾+տuz(X gu1ѿF(5upEe>y)hvi\51ՔSkjBUF0o"zL'$uB4N. #Qo߼Q Н';-G+XswaE|q{=/l";fcmzR DTךR:k8v|Bs [)ɽ>(xo¥䗽y7@mR3b~Ue[qZ2;}#ύ0:2.NSI&n,n8i=n>{E +Ćmq)X46ߑ&B{[97=1a}$7tbt q^b ^d|$C +L"Oq_ H UprwG:򣄣8M#12"N/Md"f"s˄뱁 O&JR/ $COV T7;=bªZq3]"RXrtbj 5tN[ز oa +iLG4I&bRiyƃN3cˤ߅/.Q'̯ ӵ1i㙓_Tx+$aO 4NP$")g}zyLe?HmdF}?XېD9`|Lէs~"*0})$ (.Tݤ<2rؙ9/[`@6Y""~8Ff *sLT`{H\Pi +օb&:rE^G.>2XB.I{l"Dݟ# +~§rEl[Suv*4jZp5¶%ݦ[`R`k}+>!q00 Ȉ0 0H%&@|QFf՘[h9;fݪ}|眾 JevI'd':z.97o'(5,e!cy.rW0&If"zf/]9smTRĞiKO3-) SH;,M |K5\J_AKs@|Giɓcqc2mM=<.UWH˵ڬ6]*,j}UJʁm?mw;N>l[XBŜ] +'ķ]m;^,Ϋ IZc=Ka'bIoE{9i,,tZ +FL&%S2%%Dpsscu%-Bu13b3I99܃|fA=GMw jk?ӻvɩOpD 7vJk6nVdSPyߟD?i S0 K>G + d28N5.b +>~Qm\Rםi" [5Kb;M\nzD~MpMr*Hld3.}nH 5B#[-l4z)0H#s)LaAjjYPe(gEQYg DTJKd +}PNEe +S@dhx d! z 2~ކ^"{R>/ێZuq:x̄_`Xkc2 vh"]{~mŠQUI{׵ප \|#Du>3aexǻ;eOgn9WQ97zYy~hÉ|n^uA\o=VćVشUQxDcu9^!f mC~+_ՏNq;ATZG +u-bo>sϽ݄QKdݮ<$8~$e a5@ne͂ā  f,Uffޥ_Y~utݢp1I1C9 !G![\kx^ ň$.1<԰ZX5RivGRuRRmN.TL.^QS2)=2g`aYiz㤕8AeА^|Ȃևڊ*[~͸S%X ;Rlm{m^!7$ܣn\2L;L察p^I|bzv + V "-Ofu&ϣeY_2Q4ۉM9 T TMSU8E0(# ـceq|SL)x>gDLpIb3JSe2c6Fr` ]i .+C1{x>_#)VĬ4X5C/AP4Z[R5̀ifxwOx;X@ڠMs(eX'+'͠hQTӆ@^g [(3bΤ:=S}h~{q +<'fA9=}d&_};@/e>r9.S).ktSg"i-ƳHleewO"]:ix[̎(IUǻ #b9Ʉ|9# :k{8^hƜ|QꀅuW9ɸKNgΞ+5aTʾAشE(h%bnjv0)4-<\~xe\ɥq1|h8x;^ܮ }yq+R = +զ1^QU]Wx=hc__ mES +JS" (2# * (!"EaPPq@|DBDjص}YsG{=|>86\b%k(,FY1RT4FRchhˮkC]B6<$y_yBԞ0>&x #OVOB|i\:#٥JHx%cJ1bGNFDa>M!(oB82Iٲ|CÑ*4 a}HIO]g\.ǢciE4&FaӪٿts ->p咐Kuɯ +G +qdkaC<T*TÚ-;IfQ5Ù+H(Qdwd'KPA]:^(X0cKe.lAB6Q:_K`-8y*s'?Y#o)JDw̡pc(7.+ŲΓ$@5ASQFd6d9_a0ʹ%f8F +[p_AaƘ9^[::bT5r}G6gB6=Y~J{XZjȃ.rݟ +B +[9x?>,0/-)ʕ&v>g햐m!X_|RiB7)KC%({yyw"F2q'_͑ASb0l{.瞓f9{Q8 yh;ifW[_􄐬x>.4L %'sGS*A=_kPf#7}"gp[Nq:Ur:A˦+<81&IQRT;nߚ! w!bA;:K%7na@oW,{Np寀wi߽]5b)O~)BA +']YAc߅]׫wnQGZ/~~&LȨO4i֠ ^䕕}hrIĄ7k: "08vX+#*-F)!')vM6kt #i֘枲FMQ]` z~`!q@zi\r2ZJg֕="ĮY(uUcA]0%.]ŇQ09t'Y={o_RxIڗE{2֌[k$Z{<\s2ѓS)s!mJcEndAn'24lgFw *)ڏ_O&YFu@T&j|Cq_Yd6,Fkg+0awy}'`l H/q(.al\`1'CZR0 r&1=yh]K' nެC R@r*N1EEfC|IB"V0:!>fϧHdԪW|% ?6>B9Py>F?vW>Sޅ,:z"!j79h9ڱw +iϘsV4]j)5Ǚ~*sR^!Ati*'>+ +rn3<@$ڦ'J!|5kkKښԏ6ݰ|bM3}8D5RF]\vݛźEU_7{m,]mK5ngcOJj 􃎸N*A5Jn=3?t"ڧ&xS +Sě]4\kd=zQ(aNR+-{b4Fpx"UO'X0n=NAq8/p[l0vCRfQ*( WU } Ⱁz׬d$lS4;W"1,@39S"k`&L.3\lǡi*+5O5{;v; l ,j'H&7qŭ FmAQE3"F͔cXDe +Uф2j=33T&U3Uuw߻{yC TK*)v۞S.KuMSiG0Mi\+gsnxTM`o :V+XrܗVOzPFPD3n\Oɦm/((*)/撣ӯY8>U#Qqw8WsBs NH0$g.:y(>q"RP<}Z=Odg&@G (N=VV% nDfXYȺL5lwMh _.4e^& (Z4Vj|JeLVjxˉ6r]"Ր %!lDKg5D'a-Ґc3Љc/1`J 5 {\2ouHT*KXwLװeNBvD2Qm/`gj>/8R4~ M*F<:2L#pYFe:e^|NyTY?EZOSS3h%4P)szʩnr0(ĥ&LjC9Z~XnZ~Cdgتd f=z8TaHF!VK$n/݄W[#3bԫ܏DU(qހrӳEO8\W_A.H{W GsRFRJהaVT^Q3ݨRJ ᣩLꥁ1R R•s9E1GU -Z@ӥz6`*'4-#"ta{ipf0CSZ9̚'N:kgijKВ17ݿ +Sw:DN20ŻnUbcM~OGb_^êSju_s)K ]Kxګ@i6h9e\ o YhѠExaB$$> "uZ;Q +;*nn]'оR}M1 }҄KA<,ChvK)Z5ǹsTHCGn5dE2|R]X~|egm^UU¸K- +kOlq'gC@q^Մ\r_8:=6/ܛ_,1 $d× +;MX8e5FjV,]~[l-b,q`bsKG`FfJÚJϨ kt2#xܫ}ꃢ"n("(($ "bY+mֵ~|~y?{{9yϹq#B3 U#opP$8m<.SId\:?]@[10FA?vijJ JRw`(Y|*)R.ere1U?ܰK赗ReB!Ӈx88eS!OW#p.| -a D/p>8Me]4P$pQ4b4(s/  <33D""M)5Be13FŪ-M&fDw]@Cmvʨp9&Vˮ$\~N^ +g'F;pBV儽ǡHˇ`ǵN>-Fן"vʥw3nĂ&䋱՜s1EQ{Fxyj + |ލM @gts\Boi@ Ťv%X8]Ԓ(.dFQ܂##ypMqis^S#Xf='iGEZDhMTRl J: x nu!R~NI/Xt(v,<1ـ?P?r;Z;Ȇ E3Gqb6{i36}G@WO+,,#s53o &O +CH~A.6%(X csS qOcvxM􄧫OhJ]W$_9wwh<_\C[wUW}=300]5N]H<xiZƳ3rk9kȑx0 :T̡ʟw}{Щ*Cis!;(BY5ԍ lԝUeG,~?3\9r{_,rsw+5L`+]/-,Na޳O| 669/jЊA5c_o?dj#[`~h#ꇀȲKt=XTi=_Gpz/dE2֔mz"/z=s']CZ!3UyW <7ClsBF ܧ@Ӥ'LZa%pvf||6ؒ> SpqW{M\=F޾;blCNm+I%{;fPb,U_c2-$7f=|y[5 +@wHgpmNv q;)ā\f BVYL_B-W:IIz!-wa9b'Б#3$w6LY qI!b<yo}\&lL(|sδ=S$aVu: 9Χvv +bvk.!/@wo\v#P'pT^VF>v< KF{J% 3ȑ61J̊O Nׯ q^u)l 3yrpʸ{8[τC*L%Lj( /:m-衍ٕЎ5t.TI #p/m{:8=, 0WW54k8\-jΠgKv9!;]&eΏr +VdW#&_GQ'tndk/<Ҭ7Vwo}3i覦^.0 +D /Ggl6 6dC Dq|o +UY~ÌylAר#~ w l-<c-FJ-p6jIGHR)UyE9 XX{׻AoИ( +a 1;HjZYzItW0(DdlIt0| ,x S<(iY mdWk}`74V &zѧ̈́Tm}LA{|fV> :```#XBp{(D;bJ鳛D ~E,Z+EySo"k=k-B"W:vF*E|W'sq@7NWA2"e?efh UԙM=3bK^O>W踠*e "( d Av+}KhEPqԱ.X=eG:ܗŞc[i ?e#nXoN;Ysr^b攵LVLՍ"@#G)3xxcbU}mוc{gE4CX+,`0ᔧY ƫmyLu$%xA+Q( +d"JI$;4mH#$? ޵T\YOM; WC,C ₋㘣npb\齍l` %nM9rKBrZn7W)+o7cCO, FbaO\ߡʫfjhʫ;jX1?2/YwK*MOʊ9Z`B\ *SD+p&py<嗊_cι&Ik_-Z,ק[%_uds]y'6o7ơ"Ez|]l_W[*!XldR\iՆǓT}}z{xcZ:}1N?DU民~~sH1F{c JJVJg妡.XLt45lBJ4ܣEks%:JA9f"bny=K +J>|I Gq+UD$1SH&]l^(F`L^#//s!={Qe1p/ =TSMP%fxoFz,UϐpwuzR"Qq}y#z#f)N6VjkO&2 5` +5#\vNB~:}I*Jړ'f G&#q}Ijzg5T? oNHw2ˎ%E +EXvN [_hItqRr{so>C +?%*_ⅰ|YXBܫ1բVrP;k|h~k%w]3,g7c>XEH.WQW2e{!1bto| q~1-󭖗ILon-K%byynfv,GicE7~|kה!paG [Nv-3/f O#";(/+sp2nxH1Pb6lFg>YRJf7Dv wp76`߅Γk~rcmJS ;c,06;X3)H2"<@֍WOsL0oZFNUeNE@AŦ7=nGl܋;bj'8Ĺ'ԇLtؚa-R$A #{q^Ǒ%ƒ4wZD +p-`u!1OЯ mNH3ٔSlCH^S8YQi 2; 6pZc6 (uI]D<~N6? +`E+ƕy{{YpIy六]6,z൶~eTٚ޾E~1Ibk`~1?o|?U͂>gHT/2-hM N*S`\6Zk}<{$K1Ӣ-w7bmDz[Ѡ SR'#dɲxib4ݵj,OȈ #'hu&!!E2/mP_`~35@eV RY!V fNUe1),xֱ~ffl{YXaL+ N]- >'=dqKz9QゖotbJơv/rcv(XKTǨwC9QF=G/SeCMwEG6aϮ LQ;{W{ԥEs"lSƃ7r + J ^rFu.< *dVRQc&s`@311AU+[/00b1$E_d;wڪHGk;w?hh{D?[̢ch=@%q42A;[,!?NdZna?Ȯ~u(ugcv* Š%^)R6\JGd"TyhtdEE[7{kp6hx#]MVe6ޑE6f΍-HPFHGͼT$ ƒQM`aqN8]ᨅtQ! ZnV&ZƟ-JBn"?d45L j(3oN"&-7wFzHB 80es̘Lf=00_^K@蕁u7؆m.b!V.?O o4g+֦1y ^c4a[0 +|$ \"4G{3 +@1荊71|(,mzJ=744wֵoĖo"=e,G4چöxX0 X|w%$gJ uc-O: cijG'VsS[}.#9#C\>F-%_tw3!S.>}#ſ׫_/]QQg|p6{{zHrbX$.R%Hg`2,¬̀ CTPQbFcIҴ滓ows{ߔ#^@&h"d@F+V,[g`Rm} ? P/#` ,jK*42,49Sn|RP"=Lvg*ĺo~-3DQQK ۵JOU |qrZ#f!p6ǰ_|punu춫iq־0TrVGJMR2d1e^[Lw.(v?%uZ}ak[Yi(Pˬ1g\w_ +^`HyK`ow6)#jV:;+XAH"- +TUlh$4 (D Gvzdlđ{J\ zٴbcE}?TE dj 'w|x':/PP=˖Ac,qZH*% [VPZkXp~rÏM$}qFH޷&BtZhT&JВbbi]$`ukuwsvr5G ċ{pHRdS|EQN솭%@V–i9!PfSRi_M.#[)nԨbZ 'a;`8Pbk )2+._s;-Gue0Hn?h(/+JJ Ebv ;R~NL{Bnr7#f2vL6{ 7L|쎦%.m>2(L6/JR+L"˥$:S4'ҬQphQŋס!BSo(9LvN +$:ل>:@.ʹwZM<ݭ85 +FDumB'f]Xh}1IV'BsbJq&[sk::K\ӆz&"v׻mFJvloe8UmRO-G%Tr$R,E՝cOpAiw[;-BJ'sܚ* Ju~ 2x =ӶWKABƠ.+,IЎg-Eu ;6+%AQKu\f7\y +MnC,qVɾH%1P3peWjwTb2ߡH;;  o54`!ptBp 1{)Rj+t +Ujb`96:?9(9 L{vc t8FR08 + 3n]@- J`5iw90*Bde9 &xS1x"4:+{t,I%|J@E4K*8BnX?v S}̺EeV*X&ZmRuh]N{}G##B|iq8Y4yЪ;^8<Gz "!(dS3ssu]-=Uh<\ۯ6[tmea]Z]nyCHTҸc3i-'j9p}~:ձv {Ag`t c:H⟖9T^ɽ)$ҭ!߸`@?B]=Gu28ʒgIbDUP_ū#۾oծ/8RT.wBHH |$\I@K-D@Q[ܼxzfNWf;{Cq/xy{~rUQ_B5PC+:jBsC[mk%'s# 0~CyCK f13-8P/ 7&A@aƢ47ђs5 bXu^cIYF' + +Lji`97?}ο80*[Ƨ;|ԑLz=?(XJGd!gns?0gQJPPj4dbLAoL~VA8#sC0wMy03 eN.(-! $` +VԪtNW9pqIa"21)U $"Ո!5. I:4VFvۄQG}w[o ,%Z_TZ-}ɹzZd"(Xǹ<?15S Eo\.pW=iXE^B$}{$*0coU" +D|ĉ77d 6a8']1xtEĮbR6ol;M[T6Z+X\t@ M!K'op=%֠E.ƦoBStp^fi "rgAl~]?S#V/@޿ACzPdɌt~{nz5BV3 bQ3*z% 0Oqbm`) 䕊wte2ЖCn̍ݷ.//!:L1zbi[42Ƞ{,?cM; 2y)) wRj_Az+ \D7a?xH9P!ә`1=*OӀ·M̊Sx,.]AMg/˾:Vش}ٺJGXݑMP<#BHA;!p+$A GS봶:۱u~/=<紼X.E-L +~-0ɱ}Y.XQ-% +< Wci|1Jǻ\G"z/.c3|a C +}$Z*2¢s63EOQjhRP pl1^ m.9cPrj:'IMNj._/ w*'%cHS-FFgVSIQŔ͝nDE`}}Ћ,eMdx͘ o2XG~C?2crF]W*ւe:WQOvنe,H¿z45# 'f^n$O",&$UuX\hّA1S9s*1[yHsuj&6ۻBfIlE/ZB=ZXT'yz9я?Ny"_Ϣ7Ɵ5W #7'k/o5]:87:)!g1 +eڽjXMVMU}3S!Ri,K)Xjcwc&bFBDRb,7ɩfg ؉qU-DE^H2B&(4ًْ=Ѭzyɏr1|\g1slj%u,dV5bه*xKszƝf|BsAZYbFav|rdKsۊ/\!\Y_}䃼"01|!|lw )Et!G'p|)'vV c4>ա_ u&*(dF2y#p +o"Cdۘ2GU }aR,I?fMVj q z-o݁7=vrikFVlfKQRܒ4g岗'F1L|f)QKQ[ۋM!czp6MjhEEx37nׄ?ĞjaU6tlz +.kASk- ;m +@p<`o3伅f`$`Zw8 Y'[<.Yd6b5DݘFc|] +5 Cc:XSz0!LY3. ,ЅGSKg +8?+=Rz';\z\Nth.dob?$(ZPk&РkcוJph[G-&iH-x/Ph#mۗPD@.O X!wba-JB#c)?HuX)RV'l.cf rL(RB&:e1XnWŒȺ3p!Gi]޿BTѨXeNNȵ=z cvjjo[/n5F5.}HxƧ#5ؗU\01*f.YJP;watJmD􌠬W[Z(\ܕ<ﳞw/7n#R3҆^Eg@08 WZkGW;sVUg&AI2L>| N{5nc·MشW7OL2v.5M]Cvϡ iIqk4</eTvqIq{QSѺ̌:"%BCG$%,( NкRQVǞtz L{NO}~>H(R).S)D|I!)ryq6cl:v>I 4[|HWZވ1 Cƽ[Ha"Frʹ)ky/YH:)gMj?$;ƈᱱM,<繎Z r|S?POA&- Jp]. &*If| +?b}:P yQC?\sLNLsU9j)gQarY! X/r2fK7o~RZV,#?h*!7+@h.Qkj(WX Xpuw?k!;cb.9䘟2m7o6n"Fpn +C @EmZϳ +[nɪapԷ8$?'Vh00?~kg[rQNsǝɼA: FQ?Bf5 R1Z/z|rOVrXju5U߁ٱxgԨAawlTd4 wQ䭤?E$z|%t +ڈl{FdMӏ$0'N]V^ZNܿ&%bqQ Df2o 5Uz+i9U5X,rX^] ]H rA +&+Tn{z`d Īsg:zma%ς9f2 NNGב7;L4WEa`rƇ!=c#0rߞ_\JZ3.!J)lW!eJ&AE+i_}xuV+UuMM2 v9"o +|\la028L +F]so5{<zzK ,0[)6-v}9DI썠"ZDS`e^JsKˍەVAd {'5J5G9ֶ+$d7;y>&6h\4ң=1E,v2\N!̧je vaƐ\{1AL9S)~'ZYL~ MtڒN&%2yr$ Rx6 #*$޴L%YJSb|b:S{d-ci3; -ۋ 5844\&7"ϺVwӁ`Zi."n0;}OĒ+qL:4Z2~ +VZ'W:ZL-®MEiqz:uG[G_g:2&Yfb tz`WJHP#S۶;nsOxZK2:/pp4SA2{ݺ8odv1̌BBwmN-ZM/CeW,xjUNyI^c¾Ə` 0[e*JfbKzh5el 河%4\/:8"#e}<̭]uA(Mgm18iYxkd>˲̑[Bxܔp +m!HTP^qBN9_(Gx2iT+ҳfL!,Qƛ;:voQgi +f,'RS +,%i?x +=#LS *!;'\4ႾKHڸ%sQ/LU (245]MϾ/IbY^qSTm7^mfq"4tYs_*E޾υ ODu;fMЉ(d|F9| 3|aRoe-|CV 0;^ψƇpދeijMdG̥”?x/mTY}ИP2^09݄+*ʗ=fx0 +EB/^󒀼SWɃeZWDm>2uNˏˋjKyq fF,,ea|C[z#ځb\}2aɧ!v+ȱ@'ݐy]e}l%q񃴑6v A6^){S[0lxӖ9&ͱ:ɱT #8aω. E 5FtxNrNn`CZi^T/.}~|BtnXPm󽭪&ݡJ}v'E !3bT`)AFWq6U >OY6 b8 \L }6W'i35I x"d0_86q8%A$Y(Av\Ɂ=A6-5eʪjj^nxkkƤ',(LaTa&5'ztRTj8 g='ͅm}c~{F.Gku?6 iΝ{AiaQ};Kbk6;,$4Za+N_WT'-P)٫x.n蛸!sRÛ R{骾},S3:Ϝ\q<@vh[|tN2oJJȓr9sQV46c1ԍڹy~ǃVIǮGo鷊x~8^G=|0 'Xbuq&>Y>Ҿ z{.*I^5"ə +۶XpӂCG0+C~F?dIS065k5ruH"אop;Zl# Փm>xu:"k3jdHNe%ZApIa D؁"dxX.@۲a 竍,}TDteu+X66z ;j8a6Zfw_S[Sz\ ;ԐjJ0#ry-=ZMFf ZȅSa74EoJdą2s cc"c eEo;VE1Q^:<"Zq9W*5>;&*o=+vwӎN]uj}Uj"bA0gx~ʫ-W9.|ܛʲK¢Լ*qܼibMFx+i +;hnmm +I@(/"Z8=3 Cb02v&Z?l5#7 ]`_s&)`F|)ES> RzrC 3jP~KAadD/ _=l2$>E A]/'{l g1*e-^&&'(XWy"z ?e +QC1Ox?r:vR%1C̙16>AOޚo +mZ6` vWnFݽ&ё#><{3ͅ"wmPjޟr# --~Jx*hkgݘC5 W82>C[P(ylIm<Ƒk(0yLYb +S/}&tS'`nNA"-l3&#H}INk;/8`h}jUzb9ǘ 5ۇVrzc-(o<78rD[,Il%cfKҘlXlv!8IvVʷ@BRIni9w\icKWL:s'PsUZ0:JꟀ{_ L-DџK9, ?8J}HL1$ 3diDY[j/J"TzTwd$yHJMR'E-B,@"U4G.h,#'huHFM@Ȉ.ݡHB{;ױj P TZ +TR<\ rlHDq1;~Υ>բF-4J)x-.N+P/{Q +˝n$ZAPIn3&AJ#T=drUurP[<Ty&j (ӅDEoJyjoOTOw7V4J."]FabQYm&Xc>Bh8+|蝴tm +;X|%4 )AZUkf| oE8G }9.4wV.7&1,xDƣ^C:u_`epQّ'9(WD5[jP@}a" +rv9dVh JE;V=d`( E8Nrt;mOAOW:3O^X RDNjJz$VB&$P*1" D +{;tրLn%j-d>)D^AN'YuVxt6K4*j@h)Fd9|T&R˝n r)8m)K-R90K.9Ʀ2,1z8zNh8{i*R_Ǩl&OǏ)uys]OX.wPT\F.,ezhpɌ$@ncEuxkh.׃輟g<:Xj,X,p me=Z7%%0JkkTzV LHSd ! Vn7Ĭ%_-66ԅ+i*  +2[ 0F\rr"XH69"%ִ +L;S +UFq VU4f3]fI9 LXa8Ca8y Cߡ(dƿRW~2D\ e4}BǖIsH) |_kc'Ƈ@ز-(}颮H/m>`<̇E;ȄQ JE+ )L# Q7ʎsH ÃWQ8́Ot:nb=( OFR9]f(KB5RfP Dax)xx[y2)"⪫|u8 O>~2biɩy7n,S/@4w8yF {.MP'Q(VHזOI-FkQ{QtN̾؏N2ױ#PW:Y(tj]1'#HXynlBC;xX`B++4ATUj^w>\ +/j'!5cséwI^S%yj9B:}h CtVS#NQ< a61]=W*"8pO4lQI +r<HQKmɑz!Ć|t04FT:s6h{<V_l;0-}l yĦ`K*ҏBkY̼Mr7[VpIP:NK8m`9Gf[ Vf4LFAf\]]r088n?r 9+6쁋V-6:x-fsl)c~J^8=%9j`̀<ۑHr;0--!GU(|s<׳3n{o9tl23kQ* M|g*p7n<TII~o%ôFlMꔔ +oyA+woq@nzj?fh7]Ó(-{w0 #'a=h(!f Tki47Ldb[ Gpv]_ߗQ(Kӓnn4晓fYRlypH0sfdR;&~7jȅ<-Sws:ٵ fV===|,_`d9Ha0T\eY#D +-s<}wTlL+4990A+lDL)cPe0)l5L]Au@8L.L5Q ;7w؊sSl/In B*uq; f&W/g 51UۇaM{ pbQ\;3;0cDsURHfcϥT%*`3CsdNᩇO':i1H"Ljۍ=g(T*'3)mmGs֤&鍩?8u8u #w?D}(\Jۥ[VLv%_mH2ĦlmN%I<ѻ7h8Fx--Cf:,u{פ)cڣ8Hf$}Ͷ2cg6zĨm|VAt߻c>eY`""(H@DD&UF=>bZh [s_~޹uۅr> f_F<\]7wC-prG=TbI)[p PSٙ86a*nfZ32FQVZ0U9Ck +zt)vxțki+H2I:yimQ/&{ ~GJPaK67 +tjhhl5fY !餔R_-& fWuJ2,L/exse"kY]J55pLnTICw3.:>řܜ\*:JdWc6VdK$v悭dS!SY(~ Y}llt)dezmJe7C#T< ܜǼ3\4%2(ODj-nW%:lv*Bd]D95-Tb"-E"P+hމ({xF'v#@r${aEkVjS\#tJҶq bzXn9\.] J\@vP};K'wd188o7~ݎ2ͦGU6sXӒha0hxڽv!,B˂]l䱋Ok`l|mܸ9}j$#{e!Zō٘WH‡BN!|Am35,W#*AQ4(5^,olz:mC,;R\FfZ +'izdW]Q"b6l,HF䎮uQ;-ט*-rvڎ.|j5rΒdmZ#+f-+o#( ZDfw~D/?O=N۽#yuBJ 5U5$O^;)$}:q$_&z ͣ]S(tw 퀏iwnPJۈ+ q-l:t=D!榉+B.'}p)nӆc\A|$)co"!0}~ H%m2r InKy!H g1 S^w"AT)3V1W[z{b;7WIjU,R)<,so<5JT(4U[ Jdk"văկ)؄[ ZT"8W.u(w3TIVw"C0nvIS.U,zp f(G`_{(mqts@PQp<;eϸE(aķ=2{ɱZZ2"<*b,pkkpd./-LOMn,= `c #7l5>I9ꤻ ,KwgޞAjNhEMEgn~K` 0' +% +I A&˥$)>@ry]0 \O\_6 + ~ÇW{H'NHH(Z41+IЈb_j 6˭d6ܟyo7zrb.S#dҲwʤSM׹+dk}E/-()MO==9~̕QzPTuMU/lBaB.UtQSӣHlB-ׇ98ykg2.tm%#Ay^8>]mXt +vmKO +f cd\:G f8Iw">B]o]1i=N1눈`N# 0MT[:`LlmqۿzY͙!K}UDyynnq}ooMҪ:IǃvS6, _Gh-N7ԆztFˤQTc$Xaڝh/&4Əp;tM=!N䢫Dq"*/-7چV"]v“$sͩ5)A%|9 +c VW'(Wk])P5{L/gY;pDZvY |to#E6j`YcOhU91y RIR]ߔRvoJD؇> WQvؒ{?+/.Ubh \v%XT(9G\- *je (ի!0)1oZngx2Ys:anU$l8ZX,i]YX/NJ!LWDaD6}Q!WoaVŞقN0cy !Qs@A<~$6?XOʊYɪz V" ߉u\6WʰŌiQg4 !lRj)`޻pvBVR&vݦfw5G ` +GSf{=&Chx3 +|oN:sx+=P4XK.pfVZRVTzJl<'pϋ񗯦"UF@AwLaD4Tloz%u*!zjGz(J b3u" +>s?eg?vk6q|U5.&>?l;}u5簬EOk٠eeO^XނgY߀E y ֓@4|2u4#}O^=:o%LwܠЅl'2PF'G>_Y(dvybb&bp-A>53":741qh4!OՂ){>:G SIEIcS'pE +;[9o7lD+ ++ܩ;DrhfBB;&G'BڻAg. GH<J(k&Dw>'UԙA!A䤅^ (.EqE B&@0AK冥AA@QShK1Mk93>ﳼ;0{9v$QnKhSDL1fI 8]VP׸YgJLGciӡmB7=kSo6GnkEV1'3 ~v$9zu+gzcǐje."|#v!&# ++E~sU왙W6XrY#7DFH}CF˯'&޿g{w_ ]i}S^WQky[;4;F!]*O|\[#G +n >Omm}]{OV䌄dN:Q][CP}@CA%um ͏fAQ.ЪcS%RSr,9\epVdv+[w'fWIAÕo}R*"? >9(xt}v9=`ŚC > B^#e,fDK9z[9#0./S` tb'PfŐnH7A֯՗=Gqu%=N\dfge>',o˩sswr}ފS^X$" )zHVXKzenVAfcϸx}U}/s rnmML,;# >r*\Vv +/v2WdXwF#wJz,!#q5weE>a''BE:%4rB;;VO=KJKJ.զk);| H(|4w&踪©Y`YY +#6.d)OK$y2%KReUJ21$-Dqm95f2]XSznqנ~e,} +[jҘhqψlFZք_,ϹPDgextDZJv?l&'"/FíqqR>}¢T:pdh^XQc^W_J2 +j1=D5z-8/`dRd@/'Tj4 l{`QgU_[P$CE~#߁Gf X9ɽy6rFX&/Dkh*G:XIJƀɻ2 )2$,U19% %$*.ޑ8T*[*F_t^_F4HԢ 846==~2 :MȼHL! <8(2އ! Ntb߱]Kݨ)TC;H7cC5-' +o_%/1:qtq{rnb:d&ZE h%s-Rxښ;yhUE&T'# C=0z*7jzejiM'Z$sg64;9L|cϽbS.Xu] +/Nc5|"h NJJw]=yâRW~Yzj"D Kc]WwXtQ`äiv=]’BПP5 H%^sa戂U戸~ K>S Go#!C@sXu؊EΠro#d8g97Ơ/.ǃ"],fu4.rYh #N`ґf eqRUUL^6 w41/ +VRPߪ-)Wy8Kga ZmPFC9$FɁA%ǒ="/q,wZ.)'6}J^4K!@ys!$|.\jK̠9s޵(TqN* N"olSq8wCs9t)h0ZY<)H➞7[9Bs /Gjoq54ID,&T]r'C\ֲI1Cu l"5ŇG&}7 ݜ7n_T[QPCq +gjQȺ#FglfӋ>Ֆ՛C@Vh->LUͯ)0/EwDDG?㢏hƐi-s갎>b"f j0 T(ظD^v0x_}t^x^"lF$% B@Gtf̓[75أ *Ҫْҽܨ|w0ARbd`տfR7XYٻv[&Acq 52|iDڭ^JKoឡRMIP;w=<==$Uw"@\ MG㸊$X n:V+8!Ql$W lhԞ0)'ָ۷uǏ(f5z=q1oEŦj)=zzQPw$G8@jk{-Rv$18RK!M/Rz]-p ey<(Udt1՞lY1L*[j,+ѓDf#$yZ)__fRQHI2DQB}٤rSX(TH|uFVWA2JH#E^Zq;qU˓y*-6a /Mj7h'NԁAфDbd"|F$H=a㠥1{>bCEOm hoKVwd: Oݿ|aj!4CQ9 L^],y{L}2 N^1dXo0k>iZcqxm(ͼc`/]t g%VxCpǰv/#EAc~=iP:\McqzkӷBH_:>,;|Γu䳣d d"y +R !ˆCvIeL9~t g hLJ1@2 f7=8CQC +#+%gjh<A'6-MnG󈈌b4Eӝa ۰62M4qpZmoʫ4*+ +GN%5v7 (LㆂHð؂M 7dsaQvQd%JH=nGV9sϫz[8b.V|@Kp/1y8fD ~O#(bvӷj0'ΉQEN'Y޺S* m-XR9g g'SXAtTF? +>GkJ`'6`1TbJ7jd,B%zZ"N[`gN`ˀTaJ +UWܝf~FpEp{H0NhH c|(y( +KX gp%)0@npP66x*^)8l"Zr8|Y )L):PÂj Xr03ewB4>v)6 ҾВG{ldT{ₓx+y.kOZ7R!!d;gÈp4DO/!wq'Ru?  "yà-4`s^={uh.C[a/A`GxfX> O)y(O/xgTQiaHY49Vx/{>뎭,(mloU1j$>1WJe1ȴQO`ppZcð"]B|Uy=7gmܔN+_xnUE7 yjdJMn$ "g +wv }70n6Vӯ ׫HeB^mBu 5.dBwt$7st81 Id<x krX`9&⌁Eƭ +GALp4/o H:ᯌM߲3L>MpMh'b\]+Ikp$69_TYƝ)ڲk/}x%AmWK2I.o}Gem.=pGJ+$|ы]'_I+5`~iiMu="hٰa8M#_5oo`LIؽyu`^.?U]+uA Zt8/:kt#l6BGiۏo{)[#ȹNtԨ#4+5Q/f7{$!HX9mtW5gqDz`WC[?D|DWN1ٙҋ[\&aF "7N-hьs+3-Fn.;wm ~sFH H*hR9H|$ v>~ T$LSQaΤ/M^n^?a/W4VqWV-9g.oR'ld|`GsLGزEWהUVdv( W^YFS\pg3G$9<Óhs#yK^Ե4q֤4")&I#AGpllN +χUozݪXXv&ԜEs0^AQ]Y8Si'Z/hq&KA\2 # .ȰCo}iQVY"*3q+(nΨ1ɏIyP{U޳~wGvs\^S;r[Y۷Ͽ*dR5j7l4*]@&YNi>hh컉pQ$cJ\Z=OGoEË`G3d + ZқȨ4+J/rt2UX}4/ y&сMwh=n @m"|\ݵ"I)m>7bzII1>: Ǭ 1h~JwTo֚uB,7QBx> 'մT]v7K.DW46ԘgJX$I0ql$9?F;CbڏI9?YdY7uG ;PPoQ)EK +LFh[b +|S8as؜eAqG1EiȶX?(.(ުJ`s?U-qjڢDX{a!sxe "6>J(g^=9pqö<B|Po֛5lFlo =w!Tc\>eH dxeWeh zymc-bG]ƶA%"VA|8CU, o(ױ\)^Y#pWÐpnc}Lq Y-&UEߥ&J~I#<w$tq1Oifߓ)'UR)@7ZÀV<9?W%tNMccw 锣nwc %2-l.)[rȥ/*N. I +Զdw<2+agFli1"'BTr.:WnȕC +W>AH&<8Ɉ^{&[:ѧ^XQ Jq,U +tWBtTEV>:+!|wa AF< #̔ RfT`.Jw.)f`CʚQ˒>9`j_ W]:E"F_mWdݾ %YRkM G~[K+_BxrހZ +'&L~_G=-7? 81Ht&Cp_u*l>}~t\@l, r`V8؀ֻ>\} ߟq=Ċ˔r`)4uX[x|]{>"@.B1'^K:/ ZB]Q0PTX|j!gXw,UJ!0`vgq u,oQ?md2vMH!Ej<N!k'+(Kf5<,OATȧirvDW:=#0@ ]qFv4{ђU +OҜӞ8I6V\ g} +d9Ut)8*7n(/3^41t,yI*g?v}n19>m Ap/| l᯼Sw_d(iQl$}B=]xiasԗ,{鷙C7*ZO\/[=.Eǩr=NGiD~FI߱x\HQ@9Q6w0*$4G#3Cdڵ>_Y($BsB4,Ĥf^:#N5Ay-@ad+j1.Ckiـj*lt{WAI?@lEFŤ&REk[x}XTx]4)hUx\,THVgFmjzd7eBID߉C=v2lbp4\®MJ, ,& ({?!LDm2kMݶu¡=tv_=.w&`+A`s62Eut{ >}u~'Q8`9iAUJ>dzo}l`4y{ |Z=IPL3/ȱk|ے;e$|Q_,7& D^5r4?=t}1LZd}J@f8X}v勝fZ*6 xk:ZxtOΞDY[.#l'J۸n#Nހu(h2Wښ'ILӉg7bZ4QI1wUoD>YNDl +8O$UMmD; Y@͸c3aO7bMdA # Ե +Oހ R0? ';]7D"g@rEz9qQ+=F.Eڀud[8G>#B|.A ]nx*^}ad».<kA78Dkp% 2ꃾ\EdL`)Yu)p>;j^n-.# @Hg+HyUMoź^,0~MmxΥ.% puJSJ}+=s. Vlp~)7tx^)'n^LRUDGJD MLT%fv{e4U[k"~+Zc4y| }xjڃrsАQlQO(q]@Bh@mqk7Ӓe45&/^F3@*A)Â0T³ ;&xt }k4 !C|ro`J8+5ҿf_QҪ% 'I^7-UN)՚YS2gִJ 1=9T+'ɓ(b[S"YKND+f~|͇W&z@]x4O,t DChL 2¸H mSTQѠuQP@T\QDeTfz44;NCCӈȾ + +,'KP81I&iyY25WVAUJfDS5#c36]KL:lir[#Q +NyѼd(c +w}b=kR| =ɇ9ze8,o^GڪoEkgjjPum蚠>F*.j!pm|[%Ƈ>FHȨ3%eم̍CWD?Bvĥ +Iqu@D-&FbhqMAXf`.aY;2]te0<~؍y&K3Ԧ` +9Ld'լ<nNwu'=c$1^dc/852[ bHZ#aOOaO}mw9 UW2|0\ayrj%mGoMVcDTxrY*[`*'*W:ΕIՃv zbj'ڊ{U+7BM֋Bn?J&sr˩}}xȬ6g.?îCf%,|%Ih)Ztj/qNb7)kW>dfv~?~jeV3j0ydKnr2#˝fe.{u5.QQ*? f>Ct^ ܴ +?oҥЅ4X>X +IvsgGYG~%DmYvb+k)4_&폏LST?%pq#~tcKw煠,c4/j@R[ftW0s6enzxjE"4+:[B{%s=rXȤa#KVw{;1N\~=lcnY58s5Ze-n톨(E4[, +@6!`=2 + H1=&PNv`ª71{^{k9OX{'R$d& DqHJSdrrdU|eL8FuX{ _X&Wd'c6W\^>,E(IӒUpa|lT@Sdϳw]K:aH/qppp*t}ytymfYZxkhTZ|hh + +  +y!  9X +endstream endobj 21 0 obj <> endobj 22 0 obj <>stream +HtM0C {p؉fw`BH㬩- .wFP҃w4h^Z|z-ʜ0>'TYX9vgDj_YCq_f!вuύX>~X|LoZ z^LAdXh&/pbgBRPm6Nvb7. n@aͅ5\9Z"įV>t➫!~`> endobj 24 0 obj <>stream +HSH@Vd۶m۶۶m۶m۶v֭!BʴܵyJKTOS][Cb#5o14kWtF?bγg &@,H R  + !`4f`9X=08.>xނ/7$P a| Y`nX`uX6m`g 88΁*1x^#~@2bP"e@Q>TAQ-@Q7 FD4GZFIt]GS}F0 +8pRgƹpA\p]ƝpOc</+G| Ht8$!IAғl$/)BJJ&i@v+MdN摥d Lv9O yM>d WH"2 9BqPU#4Z B?a0F, ++6apD8-\n +;GDMHL &ӉY/]$+ȉr9O.*+˵r M#G|yV"' uT~#)XQJ<%FɬR +*%J5DitRz*aXe2[YT6(ە}QrYW_7;q~U?_4ak$6RF~Q֨b6-Fw1mL2f :c8l2.73mS5-34̴f3Y,iV0̦f`7ǙS9bsa7g+m`~gI`.aXJegXQVUfXCւgX6b 6-ckb'vcO+Iyy ^Wuyޚw=y>Slvge~?/{DK+JaYy"ViUj`5Y] k5nͳZk.u:o]ZO'맍lfoǵةLvN].gW؍VvGj'۳ +{kOۗjqGsl'r8ɝtNV'S)Ttj8fN[3w9s%jg9w9W;cB빱nb7we*nmvwC$w]s{){ý>sߺ_TB/Ker{^Wk:{po7՛-Vy~wֻy/wo'S~>_Ư-~7?OgeZ?/{S@ xA s+(ՂAu)c)`Q2lG3V0xC1C'& SlaްHX: vaװw8(N¥ps+<χ»u)HXGq$Q(S3*EU:QU1FcѬha"ZmFGѥf z/]|$3$q~Ϗs=93}L!ɐIvIffL&33IB2d2aIȄ<0I&3M2$azx!1d,{{s{}~>ig/ם9͝P't^|< rrLtrf89;˝WuίmnWѹptv;{ܬ{nw>Nrvgϻ % +UwvGn{Aj] !Ĥ@zғ!`2"c2L#32,"J'6%Qr&r\x5^K<^^uzy}o&zS,o[-Vyk oy'3^wѻݤMisڊu(MhvUڃ :cx:N3l:.K +Vazgyz^~ko~;%QX?ٟE2_o;A?/W a-Y[ցY,:ucX_6 a#X&)l:l1[Vl¶]l;Ď kdUv7y+ގkG$>b,Qb &ib#EbX)ֈb&v8*N✸ 벉-e[AZ@2/;Tvd_9P#d'')r%r\.Wɵr"]r<$ɓlUy3h4Z-pDAR@/4Oӂ炅K`s38 .7šMhȏ{J`?====-^^ވ~Wۧ1G+!*#"AdYDGED QFBQ+bx1^ /Ëbx1^ /Ë<OS<OS<OS<OSx P(J%@ P(Jee d d d d d d d d d d d d d!dBBBBBBBBBBBBᷔrrrrrrrrrrrr8Cgc.`gEŊ/b"vJ/o2OX,R,|)Wcs8C=zR Rh]﮲ + 2,"=W@%D"**l^: N(tB +PB': N(tB +PB': N(tB +PyxB5P (EYUTExExExEx*++Cw]UW&"<ZЪ-W%x%x%x*c2/c2˷DZ]ۡn]QelWF(\+Rx)B +!BH!R) + + + + + + +NT*XUXUXUXUXUubU' ~G?O'xsDQB)"n%O'x< Y%m oTdl`)BӛCT?)SOB?~ +)SOB?~ +)SOB?~ +)Sg)SOٟH?e)SOٟ={DĥD=$$$$$$$$$$$$$$$$$$$$$$$`$aS`$hs0 H H H H H H H H H H H H H H H H H H H H H Hy;SSSSSSSRRR"Q"Q^j^j^j^j^j^j^X%X#_/FiTSSSSS;W rd>RNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNyW~׏QTT^?Gy(]~׏2̟e,g?Y2P e,T,f Y2|5׮Sf{|4$I>oٴ4Jnsn#}$Wn:o0*vrYpy_הۂ[SݞzN3 ح.o?mNVrdk~69uX>NQԜUBP%T Uyrlc66lc~;VjvU*vuU:;~C~WŸs=7 ~6 ~ ~76 ~w;~w;~w;N~'w;N~'cl6g].~hsD؜469m{#IR}BV r\d~pRI 6p`Á 6pRT#ws80s8юcXX    /%?dddddW_+~O0D+~_?"$:?I_SSSSSSt~_u~ o[-~ o[-~+o[V~+o[V~om6~om6~!$BH!B"D!$BH!B"D!$BH!B"D!$BH!B"D!$BH!B"D!$BH!B"D!$BH!B 2 d@Ȁ!B 2 d@Ȁ!B ?C[HqLrqɎ!;Bv\$&0ɅI.^^j)eRI"$EBzBzC 6335 d!+X4Qw2ANrxMT4QiDe(cEiRJK*-UZTiRJK*-UZTiRJK*-UZTiRJK* +U4Xi`JuSI(^WFWn>ܔޔ^}~˷߿o}//Ͽ?}~__ 40&wGis=JvrXY׬k5uͺf]XReX2жj< zĝ3uQxi<xIGO}"aD'>O}"aD'>O}"aD'>O}"aD'>O}"aD'>O}"aD'>Ok*\S +T5pMk*\S)6צ^kSxm +M)nsk>q-!*p!F +1ZBT(~1 C.DBvPC +1^7}trHQ(dã>*>BQ +9l6$O?_HO!?*y~kϻSOa?^(꧘O ?d)~V_P&?VMXCػڇ\WRkYߤ5kV_o[:kt6ͥ۵NMfRfu%{У%RP/7i\2?k(JdUm޶PF&~GRLz-ݡ~NO2pb}TBs۽[d&;2_Ӛ2): }9HYJd31+pIjZGQYSdG"ePR jU;r]6}=@QVV+m^Ue Y{G{lC9R=؎kޣE+PZt#c'@ ch'AI%(y%C[(yQQ6ePm}P4E,F )c콨(EE;*~qw"5bfLx3Pٍ7q2~`^LLv0&*T5U:)c0SNaj1nԗ1Ĵ0SL_?kc?P,aF3.aut04fUc+c f ǜ ai̹9AӠuC jΠ"4pks1w 澋y5׉ybFO-GmjFkuͨ;` c'~P/h GpehBh-Cp#4_!o"|"!ځAP5P Ő&H7/A +w,%w]X6^MX[hO߁k0030߄ װ¾ +pp?.{Mg} +!jĪ/:ƚ#4y4q=uKY- MXlX .h.AMl| +Vcs6Waױ;xCװ,ΣmA{uH\@GG$w 6:Al5 ]'uvvlVw/㑾u@x~<| #E"a``[0x;5| ;Į]^ o#5x"vOž1S7h%.Na|?p.Z<~' +pH?VK8>WDO\ljNs!R? w Z*J*g$%R$άtHErJ[dNCSH +!֣g< "tҐ>}kqr N +㍘~FbJF\(S? e$x!FHęy8S3?p6g{q *q qbqQc $#.\ +V$ J; 9K#e7RԓHHu;\Cb_ ܸ "nf2'"2pYjDJPqJgƣ8Ow< 3{<\Ëxie(E!?A*QdTj( UQmjT':nGr@hZw@a5fjLQԄ&5]Cm"j !R"gAM jC>PuuPߏtԿE`-hHFCGx/,A@3!~ +q&4٣)Mhjd$N$@"cfo49͕B:RH =MH!-TQhF-Zђ^kk ZКhSG*eo)[3}w(}ڵth.JE{t٣+S=K^l@Oz\F +CC_|53T0U||ߍ)SxAy z`Xb!ɒ?UrzizT8l-p)rxGp#G<Q#-94Gr?G p +.FRL)W1c7S^{(_qzqTISN0fN*S1_rF%*9QT~IuQ;UZI֜G5Z''{srgQ};1tf!_P˙Zy)ũSp.=oWy鲜Qp2QwuQo""W͙O}M_,yκ>- hec9y4@#?ݦQ?y=4bq! +&SG +)8G.­\x q*l.+ͼi4N#qZHh߲iK+{Zm?2iLYu/m,hEôIM6mV^ >m?iz%\ˌ,Wqg:x!+vw^HGu:Lg:)WZpe]R@v:\m\5jB mݢkO]H:Ss}"K9{ pr:nM&On*fnnJzq%ⶡm7m!+sn;rGw:pg2w~9}#u{(sO}׋}W{Mw3ྉw? xa,!GR/~yĝG7C]wxl2k,`@,y|=2P^ b`T61ؖE ΐ 60Cs0=2́ wd/ï2b4#q9aF1*#K%è2c.P(Y )$SdedMHrT:Gy(|"^ofm툶=S+*Em=\/hpӎ5qB;v{*viWvnkULK*&V1]{h'z*6FAj_W~'߿@ҁ머iۤ{xSUmG6:uhE+:FGHRұo:`%׉:trN +SJDK%(q J<%uTRNП:&:TgstTJަcJRC%TJM)R(%Z)J5RRCz_\=UJk1J;2;+}҃~\ʨRelUt2+2# 0VRuBWb̕姬*PW(˕cOWNZ钇.{.H]+ t%@W(r꯫ILW+g+P^5յ޺kuHtsnЭmot'XwuP=3ݻ oz0Ia WA $Uz=odi00֋z9C~ЫhvB 譍ޞ*SA zE룵>fS>$}{'};JRqS;xg8Hű*NU#L%.*UIJT}V*]*MVsTYSv]PYʭT>B'*j*"ETQFM(BdQ;KT^GT~IצjD0W9~ 5nPs?]jS SǏ:^S|)&01`rK?A}:\aT؇ƻh|&4OIMwc|L1-¬7f0¼131?1밈,hfhދiXc Vc -㰮=֣6`cVz MkZCWD3v^%asiG+}5a;-] ?=spa8h8a(pt̠:US#:܎Αt~~|.p tmF׍8Wy5m+k}/.pYK9=:rzk 轁>&[o +nqKbW/qNKG:Z0`)c72&xAàbgp>Cr :a+ w`^cF2'#CY(oF29ØN eLc3'sbb&gH&f11oK{M0i*|.SQLBgcj.2-]L|o31YLfUaV\]^+ܕ;yf~s槱 Y\GĆ%,Mf7`y:+XQ*5YZ3W:xuάe}=G%dIJJĦ*lZBHsB" NBF`6GX61L+L \.lsl1gxdps] _F)󉀈YDd2[GL PGËsEdXb6VD0h5GLe@ !"$aatK.P051&n=SU;HUWwu[_?Ƚi*-F y{ B},GA +P +2deAv(tEw %C.(xPlBbũ(CIJe>ϡ U2TϠ.CQ29w%*r9*QqKQ}/PCuͨD}X4"p1Z)4Fc#Gst͡e1Z$hCKZ W}xOG7qjXXU'VLevl5'SHA(o.-c6z /y?A71݁C~]M^efnX4ylc\$1'Q~KM^g9Wⓐ릥8 /UuSfӆjJyX?3̤~#O}/!,o҅B{A,`V9)52djWj{j Z =Uu66#,Y⾛Bׂ#a,.ˊ ;'\;NQFPWq%Klq@+g Wk1WaAV&qJ,D ן!k%d UX3"̴o*[lkLdr=GPQpRv]V*R*$bCs~(Q[&VG&H#E+ׯ|GNk ڪd 3+ +9HW/щ_[YՆ5N[ 3s +r҂X JPW/Pݢy McotPajз_FKY)MDĜ =*tX/Ҿg'wiUl|'`i]TlE5,gG{pYV 3L&+,WǗƅ%eGqj߯Ҿ9{O& SE aQ qG"C(LM9't8φkԅ9j9OڤɰʔOfNfCJ㪪KKkdj.)(='۪*BxX+KŒB^&jjSWFFĦċ#N -#3rq;cQ%QS%U(&Q%SG{n=`'zIjBܬ\QToĦxl3 *\hbY'famCΔf|soa}Bc\13D' DQ{ͅTL!K1 1$g.Gbd]pwʉ +&r--f%+fYxfS3^@%h/* +b<ů-frт٢HsfZy77sq|%7[6ۜ'5]9gx'|~}k]Cm1{S!kҪ{EW.T$֐ 7UŕӚe=5j<#Dq @uPdmEٷbu.G@enّVq舊 M&hLnOμ9sUT[~߽߽WW`\¶nJJ>WW#}.H9Wen_sj+M *[\Hx6lDiJA(H;͹H &}12/'fhi m{tY,"11¿oX^ YVS(d~9 U&iIXY YlOa3<fs_`*:@vͣ/aNZhlVfZ_0}%%+e׏xEx?$^I%TT~((oi?9fmMW X|}x ^0t,.<^lxx&9Q2Enxg-gY@V|6F{b,9~s]CaIAԬa^M_M7g` +kxǶ}ŕ l0[ώ@Mq n]\uA=sXNWg'+\0lގ"#֩TT魼!ADӉF/ZPߡ:e{^nS0k:7 +c~exVѮa<>gX `66ع%e4ݿX~XMe)2<OKm7o;}ho+,OD >>X_J<"V~'. OiR٠X.Fr~"? ["kF/2΀~r:q<-=a3R9390 zNSV!j<"IDхb@PBc&hTsz%ŷ8j _X‘WFs#k^<xBtWMU@%sc46z_g|m{kO ѫO'6g:PEJRB28yuK#{ٺ(*<#;[-&6o-Spa{[@m!p3oƏ*IP.CXҐK޼sWwv{լ=}ktĺNѯi)DqLܖNџyhiP { +Ry=xygtvx\Js{*[̀rpP^XIߙÒCRY{WTs]ȳF;`FC XSĺ,F[KALaG%'*"c$;r>=x\~~6ӓpWLH"+x:O='V94🢡A!bcĸ3}K$ZɶQc@+JԇɲL@A1JlEJL;͛8nnz"wp#'H `>[#I#>I](VZ0BCyx67ԕIji-Ztڭ] +$ $ $!H|D IH+& + T, +V[Ucjwۙs'8;s~J(o1{hIK-(ďSe=f#)=^mF tTsl"T_,Lx_? eR-eߣ7{"MlV8 + +/\'d p|> O,ȟ3陋Sn<ߒREà${arEuwg.]#Vhq֙*`&vH>&=V%o] \`V#d|V["Ԩ fQv!z#>;^+wb%9Oӹ彥p7&lhiۙ~O?{o\eB(uv`AEFʹ7 X>/; *v .AoB0+*TČ/!URe{ +vӈb+#TUrX ' t' x=R {$X5GgXꕖ( `<:(̸ d?wR&MTp5}5@4? Ჺ`s87Z'Z ĀTi zʃϯ='$Re|~HV| G|HB$ ?Ѽ1Cȱsakg?>csɊ +Bkh7X'8 NvuxUf֘u7ٞG +$]&H)JSc_ %!m8v!5raNwnpv;P~]tr)5FMܚ $1!~\ +OPhb恴t毳ZZmE(19qq|7hUe6cy$#;(<"uIAejVD8ߝc KkD5Zpsɯ-mh3ZSVeŅBNy<%;'yzM3~ 8w`8O['U \/Mm&DV]p7yp=(><6Xi]<++!g]Vi9t;#*% +N}b4jUtyQe&62N\Ogi0qR_k]Xoi=\p}SI'EG$?b&ΫK9xxb&pOgTFKt!gM,z%Ø_fW7)xFNf,H=oE_[}c e>u',o3n%]3E-C$*xWJh V4@A8Zo2v)U3Hu7YD׏!|xhGb3(&VY\!&5\}>-ĎmfcfW3~ .^BUT9 YLKA Dؕf1yUԩ 6x +3E%UN#JΟ}3Вw,^t# .uR'%ƒ@Mn3ZNth>![-fM=ӝހ3:B%`\-}sKv]-RpveokǛ{%$w }P%ƚ\ zC1%hu PZ*GG?Ӽt;dJ +JfRnvt& .$ǂ$%ܭ4oI+4JAydn6%GxWy'@ܕ`-MTȬ6x=9!}Yҋ;il1YLnqWոZo1,I=AqcUPC̽(M30v@:؆oosh,[/䋈v\G{n2k(7p& #3N Uܘ l>on@%"C vY2p1^AMy?l{3\z;ݵxreбV=|"/"`B5=$! M$!%!/$@@DQ^hU+ԱK瞥3v؝'y|/rBV^e-vzm"nn53;BS75 GC)!cCBOi!%c-W,[9tƒv(M|y=q6 q:o͸JzCe0 5;EC̖ +J4ӹBei$hY-+Do4! F' mޠWjE\{;ChVhѓexNx-SrlgSߟkrr-䝌`&&Ӡ@i$M9yydYւ^Q!ȍ/ݼxb D]|ks{а& owt݁sJ֨xJ*CBP⮑tKJvl!|A|r%jBEn]B&ߨ\A8!3?bEGT]ECL!_V5K㩊ϒC,%/ Mx|g3p0Ɔ#6 ,zny[d6hD-!|ߌr +twc%z O rmPâi,F?CB֪pksWouOIN¡䫄E,u7X-F+|sYoLzi0H +zňMgMz'WUf VUt:h%2 > ՘t 7C0H 2D,:γ(-lu? ,  +imFz1L_B!f(k'/fdZXE$GcUBgqu]1TY[QJSN@G2`)yı q4*9+JÈS +b"m@ˬ]5HB +Q]l1mv?`7dN[B "n!O:3kQ.&?ThZSOH}N]3jsDፍqYs y:4;K >zMO<@o^!Q{mNƟ[|R#tܤGV Gi :!WӘKb>b)9G4z_ Ժ*]Kḿw}/p2^$ Eˢ~~B^(ZhyXpiqXhmJD`T"X:#s?b_k ϋ;M24 h٢~j+`KP[RnGd7?z/#۟xŞ t1^QABg»́+b; X- "ԮB&m~s>5~ `-? H$R]`C(G~B)[5(#Cͮ~&9swm#މ95!DzT|!tvH$bw/x[ቻXuS6erUR]S͔V)S0`WY?ci] |V{7q4|?;|==Õ8uЗku\P*sC/SXUm0nՕW5~>^-M&ό\Xw|Ͼ C|O sv{쇝42\!>-qϝ{V62[ϔ8,Y >Ѡ .4s"ݑ՘u@79lRS(s#hcNXM +;@~vN"k:1 ƠxJE& 8 1#|{l;1oQZUZ}M q=oΗNai:}m5li +R$(P'̱K&a4RAD?PJ*Om;ӭL\er|a!%Ge|q:7Ex`?uDvW6Ц rVjhB +nՑ$a) ER@r>~t/oyBI(DIz9GgO[DTLfj^rNr6se'hn4C[#uI$D=*ŦLKOvf^S1}&\"pEP*ZxRwz+g!B]υUR7WWZ"X}!5E_ͽCM/ҁA7ý'Cz`[OߒD R'b78h +!Ж1:t ԭLqHZf:et(@[Rgrs% ᑔ;q]D9ԓ mz䵉4ّfJff}Q2)cō$%%"3C}ϲo1 v`: ؿp},]]EX1CQ8 t Zj1j3eZNپqkt5puxQk իV֑ee%Tdb\J,s1p 1kIقD/Pq##i.>fu.2n1v|17>^f0̴e{\=P>j١pnip?-8kG\'15({yŃ^ÃFIDDnEHxQ~sxb9 8$+òC)B8I1!Ӌ.ҵA[C"%HYL3 <|V/""~ϙ]Thb6򓈦-4tfÐb2qёi[<2mA] +`.&fJ2=SH!kuBhU `=InJە{QbTk&/I> \&3]?JuHCAh!rbdQ 'kzwfÝg O+kdfsNzsL4ڤŽ䇑K`UR_A~oҒt]osEj7Rn"X6`̏h,D.\`+^H.B.xHrxy!=rDb*F +eG1HxK_9DHX'9SPu;~=sX]nc^I\J!B'9=rx+.̓Lҧ>}9T&7铷mEw*s2{FVj>U3J3.Z@ X-ޕs4(>XE!m9zͼf75B]ӕ:&^><g0?jJ';4k_>]N0U5 霮 +w u7VcRuvl.+T@+!X>6wv||ӝMѩ\Xğ#GbbdYFQ4&!Aȯ5kܜ{SCXX,URԝe* PKʂ(< E~n>xqYR3M%r&gZPmJ  d0qQűOkUi/8bJغ!}v1AW4z{rLlŽo )1mE?,$5-7^]Ғf1VpI~ZL`e9wbL4 $ǎٳ/Ē _Y,Dr}ōBXG@ZbqofnZq<8a[kH7%LX+}<^!xUlD3]7[d ad(V]\N~}˭hdw2|>&1ՀPE\S.jK/~elN_QQ]w29σ DcROk`jh'"A݁aqa߷ap`aaV( +6!%bZOL;}!Ù?}}raa%"Aa0 +]`8Rh#0 +Fc_lEhy TkfU`Z'f,sYlތ4<3H͖9`#8sEv_pwa:[9š0T3RI4 JI}3rp}rw}I&1$"h8A ;%i+U*X}&ODN|k%E0V*;LMm8TAEbޜgTPe: +l/2~U C +qrB_]SH5pџ)5p |]sD+IlJRi'4)LXkČS'f9%Orgڧ8xҢEp4''ܷMtǘNqZ$0n36W `Rc@gV}qpIJԚZVXp=Df:R9%cA +oPjD:xiH&ڴ.cJ15@?dƼ2{>/qvK&ē3rt![ɱҦ߽g=E⣁Cvx{ ώ Qٸ@+j:rYC_X.KOMm|s! +AnHhfƁ1!JW@N޼xS{ h*gQq 5edK4`$"]^X.3 +#NcqH~L%'.oŖ| :}mqŦkݺAb,RH3p_7s[z O>K#nņʴj<%/ɏ.$-c9aq@c|<?c[QI=X1SkG,}׊Q`ZWE. +txXe of{Y2m/<6ᅊ恛#^b\̡2ay!*YCD: X J+**( JiHd1YV+%m'UUf ¡K_q+rANwW ~+Vq&;4toԝ`/zzx3akY_liQzZu4`3Ƨa"sH'!~{y~qeddJ eAq:$%뷽20)^@ljL F^SRZNdUвfsDD^zk8d'5Pɚ伿UKBzۻse\HdPHXQDJ֝MS ̪29@~7Fjߧ}5Cdl:K\pE*'[L>yϸ+% +=Lo,J:1֗Q Y\);fє5P|ACvIv\S}{bR*++/󋋈>&B,1hz}}w_+*k+5vN;MpA&ۃDcda,~S +T$~髤j9qFC t"ʍgz ݡsmEDvD;G) &6:ƘI2dS`D*w&3K #SBT2AqV"PWY[SEU.&5l<=!Jl/6N ;ѧ D`D+L<+5l^%\ ƪuu$X9mHQ:2?ҏ/ hߐ4l]{N5j2*%PDWUfQ0V)U  G ݴ#/\Ճe١ܬl*K-.;lmGx є1X _5% ?6_r/eԙq2sroZH{v2Q3[]BG "6 &BAm5!컆dqbv *.N?|}] %auxkoa'if+lQVKQ~dG#[s~<]RA~ NF)T;5kh,4:MǢ^d蠫oiW9̲qԍ݃Юf7IM8%.X4[S\'j(nKLve2;+t q|f}3yPوl^@rn8.'@\Q]v(( RXcidhwDDm*3VॆZKFx>|r\bk&=(< ]~5tUD!f{8Sr sEIHCDJvHM}ndZgt6=:Hqgħ!yz}t쇴$.VڸievK`$Da` R;†2d5 ;0r<_'aD%ɤ1a-;JA~bjFyg]nOՇ^1nr,7=DPPXA sUh=a`0M=_KQ %b]rN8B;VYKZްU^K'>[λ#~tgb>5#C)OZšdt@a-Z*pNT(Ec3 +[g@3`mfyXl^YX̀J:v-A"c@Jr2]k^_oy!\*TaJ-L!_t6s`ǘ2 K V*4"aWn +БULe//E4WKԒ)9ޒHWr= +9BoY! W{LcGnhҶ4Rw ĤC=-KYOk\x#%OA"s]wMC_k(_0y5:@9f:&%]-} Uj2+Q{0HVS'dEYE)5+Ygfoun3 =P`UAQ6H'?0U9d5R~X ܕv`!k|Q0G PnnFS$%88/gl6eQeB(v d)7GLo" r@oSL2O8C;VǓ_=lyL=2XȻ +fVLW4:~:7闏/{G3xՖ+m"mI8gYlǙS Z#o! :202@D?Z/~}?ͱu[hh|y._ˢ6ཌྷܭqK%g"Џ~wh83t(%7,* +MBJUҏ}HPg'Q?p\0ǁ5̜JMfu _l?mBFh4Dnv"0TG-ӰR'1aX z&m.>]Q_O]>UY~v.)߰?í3ai)DRS[E'`{{j1AAU`^2 {߂ +Ws ~^z+<z"`Dr+/dLHS*K\zdQ Y9F]ӭ=5Tޫ5+irqYK KofPU,3rmgt(j@ ($ A%I AQQ|a}.uiGǪ̪vj;VW5G(+H8g}gWY"M?H <302?X3}vϗ1!)~hb e-̻g}t!DžsOoi<\*]]0n.t_n-+f.HUӿJَ/"BZ.4EM{Jn:^}5~)y%/Ӳi={^+G^q9itta}65D h(cM=ܵ3H8ݻԲ&Go>w:F3̏F=3ґ Ƀn8As7LG)tIh\.ga"~!WaRȀc +-rb{*dߥ\=Fy@.gt~\2()(?2^g+*UTloT&USbK0rJZ;%_VÜnYyDV37(^#V'/D8 Jp,SZM7)Z,ki펭:-U(*aOTyL;Cafns؂Ee'^TḒH;+hiڇW^f4I$Z2*9<|> +'u%?MAdfRcu4km׷qs +ԚWyQ:D kf-J`4|_Rd<P.Ya XNthjqbpQgR$~|Xo.]Șɯ,JWR)qj5G|f.^jLJRl +IgIjD +2)rwTJAlioOlWkmcnk eE5F#Ά’]e;+,A+c$A"cTQ+5j&^ u[~}>mĚ(dWS4 +K#Z%wPI^vN,ͬ%o #r~6'jM"I:em~P[NU#bRbiOE^d뜥k㦋8 aB[[UL}U _ړ˵?#ωybnb(>% +)fY|z L:b `z0'(rQOapaZu0` +[; u͑r@̂r`UѡBCW ;|i}^FR@j`;O3h8\XVa,48R +A[>v&#|0P !3gab6EPd|X{AKw۵a3%!ɺd[X~,]YӊI7TcW_GAIw6uڒ NFuU- :ټ;vخj2{]Z0֧suw > LM8;cKo-}U@^o D f8ekyI?*DG~ho2A|Ɲ Z^!v߈_Te"MUPҏ/xŸ! b + "<%b~_vZofnq$3Zl,yLc"0bqx;&kAanf +ay"T̪{ꥱ/&4C6~qT紥ժsfZ-u3nE *HlI B @vA\Z0 ii-ttfΙ᜹Qk[$Vz&䟜}X8sG4OP9Z= +Q}`38ӜvC' K'z +~_qmn]D]( ͺV"Pg1Wښ0p}&| m"!w27}0I7J6bn R#=G)w8GG6NeЙ1!3<{t0 +q=Ic{-@<:~N}׃G|)m5O}>o@]Nyd^!s8EbUe6Z.̗N:nGKp IM﬉Lx^*ҕ2߾b{npD#mڳ䉶w&~@ i@+pѡM o;\^A"HUեfi8Y84;?ܚ8l*iuZNy+v887Ϟ7vn#"v$v1#GC{l.}A{AmXaSymWwnG7bj]RqEY‚q Ms37~p!e:ëx&$EDn xNG ?۫Sxp \+zƂ}[`3GO{V c󭍟QST:ݏPx0ǀʶ#lT`܏\~&{m1HP vvkWxW>Mۿb' +DIRnٍ1z^VE6gEsCgT=\cKXͭ7\,LdtwIxF\ +W*(+O\H2y݉X*\_8Lnwm'Nvʂ O-A29uTåN'5/g&! ġ]A, >e$4phVIbH('Z~cj9QgT2cy-&}tG 8 fvZ-܆?|C +;M31w1< z^ɨVGFYsTW)*Oٞih;)pYO>AA ѓ</}T\QmsaČB=H0"B<(?n~CG2* +iɴB4cSJ!U; CZ:bUjE;./3vz0"Lg7|uc/uJ&f+ʤ@_\/Fr>ai]vR/.8w JkIK֣J +{DAgD?ɍeZY=AD 3o&fA4}KjoROC%-0᨜9E#Kt,R _+l/^& sTjEDYgJp;L2zōzX]Рк{'-88/x3`.ޥ}VR >~ q K$b4ת[Ք]O{6N0;ԗLn[+E+$XBplҹ` :$fPdReRp"8lNWeUQ%f*PZQZ!Պ6>1*Ivj\Y!/!5˩k-@0=mW5j(PlV#>o` V&{CۼL2S05;́j9kJ7hp,GTC`U$܁ì&'xIpS@Y|翋o9#gmj׈X(F X%6jL4Yiݛݳ'~j!!A GB>$$ !@ac#׫hw<<=-fcӫ.hzm|w@p\HBx]+YFʹɐ%#r<=q}6 ߛTUb2Ơ\7>< +@2388AZ=' XhP\ s%`(ώnm\JJ@#Cκn){tE A]ZƌJ @µ7pW[?x0N*[rE躔? dtRY&)9Ŏ^=;HM +7>ryN#,IP-2!{3 +=û1HXblXD+v[WŌʠ10ڞX%?0Bx5g2$\We@SэsHhm)1;*[?0[Ѩ;@ a9oh 1x*(FTi-rE11U5A>O9#3!M c)qUݼ qz5  +dJScc:Yc:iJUm Dba,=|zPg&(܆_Ȍ8.I 9߫`U b ]*(G~䄉#J"4e~њREyNY7nץg(2Bnbz^W6r;+]{4C*KNɬ - XȖ cYj_n!-EJS&ȹ/Os|Z*6vgM(S-|{aQ/}֥/zjA6fHm8sa9Ã-p2EViI"^ gB1)֓IS=cDCsfbH +E,"A[h"ǜ ]#}Œ23:2 846:u]|>dAץQ}0tDS@;d;HȸGdp֘uһ<,`<5\ >u ^꺺CŅ*2MҕK9{\8X𳧁 Whu$o~O51+W)KɌ'7g!/0O?fi6iļAQ]< 뭬?l +Q3XaicS + qDS.y +w{bRSb#ޞ^t;ssq r¸`2;Vνt^͋Ȃ4elmb% e/G;殚@Yg,f*x9u]7sR-y5qq|P6{;ˬ'eWNJimGO AE^JB0! ЄwyQLKBH!$ A&NKi{׻^۳gDZzOnzwKoәڙc{{^-&abj^IqUW:qɧw7T >HJwm(_mk)xO2*' S)TyKmUp}qLxN+)-'YlY0XEk%`-JKNrxӁ!L$28SfqW-UZB9)Bo8z6ox{S2oWX/j!uMU ad23NriJxM FnW,j?1lEO`*NAHUק|,+Q~0z5$cyAL("f*}@AhM2A j5֏>/"eM +ioX*ƛ:թ$^< +H+ȷzMcN>qhMAt)΢r1n040r#~>L./܋XJڹdXAuvMe$EB1d5 OJ65U^jIKDT$)dy3~&YqfO 0+چdžZ$/a +\)U<Ь; wbIؗ7;C@|FAe^ʱJGo?EDcyƠ-vGs;kRys;}U,|`%bBN}S)i.i3%'-~ l[fhV.EXřj n2Ic D[XJ<+mpkf^-#CTz9[ހGaOdR(UӘ$@1V+\eHO0Snb h&S I"C]KF 3aq3i|x0iiMiwjx,@p{}L~> ۦ3?" jcWKt:" ~ѱFmԷ:A6|{Qmĸ3%zkފWk^Iơ@ ܏ +/[CL4F?/ ~=kI Z9P3ynC4εUSV nǍt0Fr~rA J >@ah̉y?9]p'$+;J$=Ը!R40]LkX$o">h{OE1uab;~-%#cIIqxԳ ?C~wrqưCȉ'MnJjWwJFbڨ[I֨R,(ˡN% 3pEcOo5&ʎQҪZ&=D&ygy3JwdTr77!jҗ656u4D.<.,.e˲_fT" 51vdl2qҚӜ:ӳIh:^;U ao8> ~bK>6~\]6C\\FsP+?4 nH~F#jÈ1#\yn/fscpOsT-OV$Z6s4fL@wxPE'p; (NC)T+N+n),l}R j [+ϣ߭+TY䞡sgGfd#:_Q^+kldD4U+MRRU^TPutpN8` $c/uQݾ8Y.OUSMSfU|esV{vA ~XX%dI%*M9!S(dp}MzDI悸nTH@Bme䎃)_=׋A_MJ"'(t:@SBMˇ :gSAoLiu3cJ EIQԾq Y+q|RNb|(&(E!GӋc حxϑMm[-må)b 4?jJKFrLdʑoot*98jYVK> W;+jZeSBF֪x?zcPPWO*Ey5ugq|#&7tފ7e +hwk[y,# ! ͓!$(@iGQYwZ]vΎ;wftj_w&=~9C|zh*`Mp+ z+G)"7-J점&'] b@ӟxDMt𓉌q2}vý; wZGE'a+[* mPA;E>B"2-`L#zqMJ 0 +<2L,;v%{ +OJ<[Tmt, +|Q)1#!Xa+-  4FEvaQVjko`KZ w;Oˏk)@?DǸ0 o.<--PZMI؊J@ng :3enW9!Fy=Ǐe G၉fIt}WONl,I= >2lTχVhd+QӍ* |q-t #HwlOȌq {nObl&EBB8mO5S)M&vk}m{#c!Ar8~.`Z}rKr;d5Mh@(G#3YWj bt|Op= W +DSEnrlRg'TcUH9čy哶rK,3@MVBAM_yS\_6v->v/o<6J0NWptFג/ns;2 <ĉaZl+)YY/}It:QY%OsXh43T+3>tKtuxܔIXJm`2.Ƚq^{J` M87m KTVVK")u;=2}xdK#nU +1SI53zc[m07P/xB.0݆̂yNA$]e6aC )yz 2.gz%|DRLr5+b - ģ:EYXT4mkI?Dj=>R㓌ʊ{F?c{wdpu5c(,d'hks,%Y\8ى}tvtF ~ 8,f~='y؂ECHpJ')[V}mx^h![aiD($g;1RĆ#bwcb6W'vKܒKo ^q\ ZFG.xr:&H_EP- #ͱ6R+Z.EM`y8x;'o&5b71qeǧ@)k#xTtk8hlXM*@< )&(咣y1Z0EXF0b:DH OR֜K3`,DȂJS5:~Z؂fZ"V&xw3%*\+"˪O=]8D:s LJxe#ō +E H=ǎר6M [If4 ~+C Q /b5 +);IN! ML"ia(z鲁PT,nfcL0b\ֆzW ݠ9TntIEIaVt39G.IG26$rϽ0>e:Cn wB靸g6c0 ,r׵s>uDD*3'm^=ׯ;s82HdsK316wW{PSgoe-]o*nv]gAآ +%@BPH# !/"Ā!!W +[Kh;ls~vfoPvls}p^H ޻\U\H::>U-VFkf>^(CnS*^:}.a˭[ ~jgPKA+|ߍOpmuq#78C11WqCFI5%R֤l9bn>2-X__ Q?Gc@*@A7,c&џ!%$vv/[x ŋ\V'Sa)k B`P8Ea:;,X8_ǫ|aDEU$G:&S#yydb-{Kqr,Sq뉦*s`/ks)kiVLnv&Af1[AMHSYE\\qXB +0UgӲ濃 ΛݿX;i´\QwiJ$2L}$~Ͱz#|lT DO!vu4WciwLhc$-rfM4ƧoxrמՏB6Sk~b| ./ 5a?33q]Fh u\[;Z{ǩ(?xN`o|zi{ځwyͨQ$L-Sw;{h^#&ԉ֧lQS-޾Z7h$P+ q!Hj! +f`R\SG?CIFH)`FH؊u ɜKHɋ(&<āMW=A茸oCD(`.V2Ne"e5yN{mwG[@QBVX>\Zn,e>35bHbȊ &4~:nݱv*g֏Z +Z6(*~H!4$لBB @TjҨų=zPZ=y9^}7ǽ{fΛggy}I a0G1u`t+:"W*>>G״@˘O=+Jᬷ:ԻT@ݢ,RكGxq?F7upCT<]ˋ&n&l-Yͱr +ꈂ*8hr~5{v{mV{Xw- +iLD_G HoDv맀9v-JT,%MU4o0r:IN](o+ DBvA312*h(:cb)6tkY&)i#EoWIΟ +eceRjrT26֊Q\mTzQ[|#苻 $.n9?en3gb⌡ރ VVqnlTگ,Ԕ)>lsf'x9p9?^]ƋB&H@jR|iTg,@`1gS=[3^tfB ESeWQN|0T6VRivy&& +2!fdԕCd]١0Y9i2Kޅ$1sd3(X.7qI8 m;iUd#KGAanED`OD<]JI־MLl(SԱ sHI3txM',/,m}/a:7w|7r惔?TT`.W1rMIo,w8N $\krd"PX2 ߍn qJǨSPcKP61Mg䥔o,㎟͓a^'> 11|JFHĒ.E/1 #a"1!M1iMdcT, 1B71X+d/~(N(9 o:A^Q zygC +j2F>p#M1A#QSn-^XLe2f@'KMsQG)BnG`6aRR{+.EG'@J jS@L+crR?yp'k3P9,w 09u_ϸ#FDF#+)\R&xG5#P'% +_}.x-SIMŐy[HGJ.No$}eG@lј 5*QU\/Mp{[]YqOסVk(xyW~ȔkW7lHsmCrީkRPܶN:lXx%*郳uDJk):& boc=f{mMh*[#:{pElGԔKvpx3oj1x;%0~Jr̥* :-:*>}/N<_z<7' s[ڼLP:KGkjjj30*mNNfֻ=yŒV*(Qe.ZfI9K-ǘgL>r}ѦT%2;|SuLZihrU1g~ݶkf pd8s/al\n{ teh V\-|9Au}EeEVnݘ_U(Z5$Coz r5m)[AinmOp(s#baxs >AOzcx N/n?!\&ODžeO+xvj9"Sm +(>x@ or&0^1 ,&BT~k;.̀Ml8?h"'9zHx҇Oاt{ w>i5 x>!>J!wYhD{7rf'"Xp lMOK$q6VpɌ v6%ċ qv,:z,8x ]߉Egx%g9} k%?D2uM;I]@`ûyݻöz{\_# +$iZBd?e&6EgNql"_x qt"@/oLfOƘRQ,g~n4_dS !"|Q6/>"^n^$:3>3<Yh]??6yФLo~ gMJD? >8^kρ_NlH7 n6CW87pWB$w!#[YzH +׃P,)r2^T/t4u :ōILaLǡR+ecwZ7CK+Ӥkޞм },8ˆӎۂ1X3 Yk-AA76Q=^);nPe,ysF%\:x1YcJsdOӖet./[p87OXD DK->>e-&PL`X7P|jE z9+5B]5\5f'%S4l4R#Zf];i')CI +/6dǍ^*+IHcTTYE(DˡZNVݙh&HYd" +r +B4jK ͢ҪD܂#9~#AdGUEy 'qAA\&Y(, m]vvK妨C:3|/E-RU6aW^^pWzPsNf䈹j^8 oO/1Xa ^c|Y(LQ͂mc.'5(lh2.0 .COoL2Mb5/qgZ 흖H G۫$ڳ;|ps#EOF. ~ld~=i-N&02l#! x1*O'%@=]O"M v0-joJ#;4ƍJۍ~+k#73i΂B;wIP@+=m_'$$mJs +yp+K}7ѩ?w+GuoEer|;,~`[g^4s oqZ^`Y -5~qV |9]G<|_ >C2[ܓ.+[_ 6rR YzH3/ Bd:L!gBd\x@F$ + +9i<.*0Kh= =yfG4rXftH?Urj⸩jS5.kֵ;uZh]qaH}T0!$!B( |UY(Z-ZuU[=7=]б-v'%9||>NK1!fo4qukEy^^dWIy& =]e+d4!CIp*s p ~|iL,45r"9*;'Dڲ,aYlZO?JiXTWC8oKMKɧ< سS_P)u:.d&P-usBDBl)H=cs2V`o<q6/# Bn\?2L"la+`D~z_e@ØK*J#g#uqhDm-dbZtcV=hMZ6c,$=jؕi"PA7Кձ%#[3$58}#v +>u9i5Zd/L;+-qcD0;r3Vqq.e $ J7$r.:l, ]*M,L+>, T%y_Fu͛ןf !zDl+y`e3ucQntCCO[N$SN%p<\,8G0B9r{^n+1$bNM޿ˋ )_3UP.dtH0`ĺ6CDfPaIqq˼,x'?Щ#$;HA-#q@[vA]epu-ihƒvq ĶKcy%̲YiG/>tfrFM{.k)8mzuOI2 ,X>B! UR UejJF{V4~|2!=}:c^7C~K 糛"*Vփ@=]Yr;WWwiM\$&pT1MaB2c?zOGrNQ-8(Otp?~( c'AwEkVG[`ved&RB sCq«+櫋7<Ȏ'f>_ ˗$Zn2%\-jL0ʧ^V8(pu1v^ʋ/j!3lzTgȅ,r壤]9X]>=ZLɞc@7*K߱fUߗ  ~}T.cIХbbkt>`[!|H:֍Fu[h$w|L/2.2*)zMi7~Z2𿏦e7~87;Cޖ+4ݡpDaQi߀ CgavZp#x0kX]ޑQ?|(~>:qP͟U=׉cLHћ-$1^*a’1iY.(u(-FADVYDvAiA*;Qb&b0Lγ. q+*SSns}98OɥW|uOE`VvJv|Vʳz`[Y7NG;Ǹ5NC;J3 X]QiqajQ4ܪRQ mgeHN9Ԥ9T{{exrdn7ƍ|wj 'J 37HZL/;o2$jh%.>Ѯ!gT J4l8Ϩy$UTTj#e[Ш>e\@5z}F/s)b?)"N}؄v >e0m +mC,_wΉGx`?^ʽD#?o2T])xڽA·mŠzh]@DzO\ez)š#,Lyw[(kdʼnkg'n'c!abikقҽ\z|V6JH-R֠2MEx|SlHN[,Yp0;䥴5Ύb`BD ko¾jRt/}~ȒfuoOB֎c[T 2Q^4 yby+71(mx2fL aEexg 7s˹Ϊl}qCIyʕxѹʒDTw2I6?\ 2W{`2:{^V2l, hT$NĠ ?_ur;jfLL͉TuձU^u.0Ӊ'o0oAO4vo F91Ӛ3K APJt6CN; +ejBbtdk&{4컠Ɩq~9IxkWne$a׼DC\ 쀰(QIQCB,)I̴ۘ\dUQ G )֦cix5I2DIC+4!+=pm8b^ +l[6g݂򕥕nMY+NȌ$6>n<2' +zQlr$qUrg%!*򫶫٣F-Ԅg=^deN{TӤ_[c6ܜÌN;At bψ;I +nb1۹]xCLBj&H:ܴ|%3 +>ĭZlE;*Noװ C-'6f&\ѕx>|Fϰ@NܔWOǔ׵aL<҆0?3&#D0LK-,qfn$J$Q~GFi +zgk8;IҸ-;R"vx>CyW}9աSͳm7X4ܞR$r]HJ ͲlMl-!4K[SB~GӫY h`k{WHLR}&˴Uc^xcwz u-/5iG':P;޻Ι`cݰ_M $T,C-Y?L{s`OVa&,n>\0z(/X_n)DFFh';I\(;ɾ`?};LA +<}%tCv| +Bly$M-%LAD|=f/wjׁ& Ww2,J_cŠaxp@{ٝI ^,j(T_(̵O8m@ Y]߻>ttC. ē !z\*LuSPd_8( 8Xᕔ|O߸TO^B{p!LCTʘ֛X>DwoU%#2'+ޓiyxַV)!u=QYcIkӢ)IH +}8B"X=0s`GJa{;< +K?\yT6Wf7eEizpm 2U(xlEG[DZ9lKKKQdhp\@\]f׽7נg6&dSUR`5,Ix9nEՓҹKQT)gڗ97]r\DV +iNdQVS~ǡJg.7|7Ꮽ]sD3;u}l~$6ÃhQkg=/Ozɢ._qíVbfy;oL8*V@$ %( #`ǖ8 GX8KZzg5~.SSt"'(K01 шk \'k`w_N9uQURZ]r" +-[0,wDKN0RYIHwuvKJE'#D34O3"X1jbеcr4$F[DAPD s>RMjj} 8PgW&kt>hs1USy5g㒯VYsqdiPtEgMDNyB?5eKy$aL`WH+IL;rJۛ57|rgCǸBTb /G;-vԴ_g@i'?nOn^|k:v׏XGV:1ےm'kK/ַ1ܜzy˽8I׏Oy7r5gxlҙ7 +*NtՔm>50 |2@HX*[=Y-)~yh7 +;߀ |aQO!x$jo?>s#=AHvU~MHLq`t |v_ݏIv񪤪Z⹛Fܫӆ,j=heJߡIavN-HE͉3*4(-b+cR"S(@XL,u~I̟ho/p*":J~STW+qq$DHҙ`- .ZdB" $F. qx_ s6ң0\(DePK }3e5mݽω՗I7\t֭Gh;@ArX@D3A]ፄ(W{oh>T)U{/@++s܊%LH]ƏLW7ސ&溒VvΎE<krMۂor + -%“y_NSzKYZ8 ܵ%s!_xs?08hSh&';֕\c + +RBNC ct%(t H(STKqt*jqX6R}ij^,5[}fJ"*&i <`=pٚ@^~TR0;U^Z2Z 0'WE%-h%aSAu@D#cb8AE6^#(2tS*y5pRQyѶ&'7}EjٔnzѮ;)VZ[TPAċI  B!~B ꙈZZԮ:kT/ Ԟ97vv{}^OT}fm؜Y郱M=t̴Fk˅z"NkRSYJ>0$" +Gsy 6CpQqar6E=_COȘs{ 63Xe*<,U|yNNڭ?d+’ +)o"APVjMHmo|ZCӶi>M**˩e4rS-s-|6&1.,YOuKNWT'D?z)z$+s@U2B`|C,l8ZݩI6 ^أ0H~PrHʫaR,L1UdgB{LlBllшc, d|_d<{Z@6A\2IO Cz(6-aTr2xU~.(k8Lm'DWn;]3H+6-Ьh) +n%:Yᣀ3x4i m>\J ttZ}>^\%8U]vA8m1VIX`R$P}SFxX[n$ +bis}OSs9X[kazyGyOg¶¶FPwWЅ: L _V{SF~ l+Bc)I=A*R!l6ˁgI#W1Pr_]- ՞Im묾&p]=$Zy+nj5G)k'm/bW2rkb]ڮ +:ھzCownπvaůO:ؙ҉UIJe\-]^Brr"^FS}mqkCr\0gcJd isjut>gAz +[LMeMs&u %Jۺ/uRR]49kïĞp{̅?:ͬ` (.Bcc'ɳ3c؜g`Yj8|36 #,Z8d *'/fqz*;x<=$յ`|HF3aY΁3Y_ejh]aW +]vb'0ȃ0++nbw(inc&tā *O0KN-Y$Hu%O /-nN?m/_GKzwٮ%?\Nx9>ӽBs̫/$ǡ!_N驻I ~9O&SArh {^Π4xEvUPI)lV|BSL`j&૿' 3DAx'sG\MG'GqV>¢0{^mZUUؽbf{0B4xj@;I~LѸ&3?|iwa:e:{-}"1K ) !\\Z13V5f$MeԭƷߎD1w(O@"u>+/(e3\  zKj|xtG7M*Q91A)PtSمq1_gH$NwapApcX@"c/8%X9W9ar AR\ږjqoUC3~C5?G!lvL NlXka }CjgHC5WH~%ZVqEe@ad'P!K\1k$tYdsk$>ǘ1xڕ< + RM] +87Nn%l_!8 7ƅksqߗˁ թ#{voqepHo.58{N#]`KR/Y4fQ;Ίã$ot0Y,!h=K{~{XKma26I-VDEQGO2W"Ppd0!d5;+MP!'2Tx8X`KI(ۿpbؠMoe3BMت +88Vw/Sx5x| ۃw)!#xGho{~/`VyEjkN7%j Zm>xB!aHu܃Su]h0C?CN\F#erO/Fi\z.[7M=EKnɮ⭩VG-F]QDlhwtH.9rMpxz&CW /j͘ڣ͖z2i?"~C5#U9>3G_V]ly*,Ǿ/X=ˆrB?4K/> 1!,~Ӿ.5W %/;2&Qɷݓ]^h': J[zbOW;Pq/2wG/hnذpV 6bW_oԝOU$X*IGTU[z*c+⑬^1 OBu-Lм=g!|fBOϑ} >lgm3$xNx3D(xha=MW_Y>DXKu0gdA +lSa}qvA< ؟:(S0{NbQ~w%^`σ<~1pT~oRYԑ~U*VMKay +.v7FU_h(L6$sI9ٌi"b?aoy@oxL1ƥ;tJwiwD_!Z-<&I++xٺ ^V(C Io~ 1^u4tj'5yw2p(C3^}-vVsIZr?-E<;:7{c`{S涏b12%d]zFv@op(o$aA(غ.-zm%҂hrLKgp;h|$be Ĉ#iQ 8ٖiyU,dR2L!:{[~-ݮ.BRNd-~^SU6k q\,=փBi(M(wy(oX@߰V~HvaZE,o^0AdX3t/C'CVF䝓2LUfV#L <")=HJt@w5\֢jsgp[4Xƻm,Ylb*q5h H]Yla6RwZ͖]gN%riڃ D7||}wyG{򱱢 #`Ux1|/\bnۄiBdFb49F/GHV1:P)L!/ToZY_t%A d>{ L.R2`bD3!z8vB# vtÔC>J(~\uL!s C&XRTo$˨/nvɶ5=NN7r&f4rз̺mljo~fPz6;s N(r(yeAY# ` Js:SA4]*R$/;ĽӰm.ֳ#0U6w (LCP穦(Q$xF'_uP@ÄW"*. {i_ܟ4AO99O<<xBܥҶk8YEw?Ӽ6\|d,_dKs~l %w& Xg_j >$ jɈf]g`hJba.u =|B}g,3T}&Ws̅Ð3׭n?0B!a#{ʦꥎSGM m&Se+._j jLe4@mS{=g{$U.Sd -BBdMl]xoG10o]#!&|e(t6{ÇUmMrL`AZӲ84X"؝#N0BCuiiEYW+U-x(>| SssVٗ.n5tw\z̾Mdмp,p3ՂS%X0˔#c_L5~8R,z!tBti /,&a1)6p6FIX>J|5ئ7V"ohK_ȗʵjcɞc԰! FGs["Su>b>6zN~|`+&W@222yK`e2) +$E^ǩsUE:KxndkW0hבoS9AO1`X$ﲿ#3|FL2Xu)%2y=ߠFsRi)t\jzd@įog_+dW3:VccW;<[X۔YlSIZ&v΀<kHetAU5_f=*R(N:=4(ᾷs O`kBxS&6OF " +]G?nH=EuڧS|H 1QF3"2DE7*UFX_Yc|02*O+yh'q,'kddO^`$_WuPigޘ%-+jFW)^V؁FdC vd6dRXMuHY# +#Iy=& `& *s?c*NDJaR $X8'^{٩֝zSB Ӈiڭ3 "|X5=x- +})&.siMjJAucox03yM&I 6b|E̎Q҃#g1/6ƹ]]ޟQ֓%(sLSo*)Е9t,'L;ުql ZO C^kyu<|W&CZjw1h%e*y][>u e 3$ M r[,ˊĮw2meaԨi1S7XOWIkuܬ/9tFQ!qHܠ Z'<9tvqfN7B*jT_"o5%I%e $~/Se)EwNjf  J 5 + +=wݠ,ePz -CB + +ſU EQ)VqhG5O- +DK9._ė}TSǛ:ip/Ku}qV+ڪE^+D$KBHH@H 䝗7^ B)tmN"vV~7/;;s=y~!A} +>zd6wgkߦ>#LP~.{ah3sG(z<>Z  h'T*tmXLf*U_{^rml \ ;Դ*uu]-P*SidhW܍yswU  Ez]`h(IU ,E|b7Xy[P'<;/B1c5/P#(zb)Q$p HbSmVFb;z{Se님}0^jtY[F ve#t. $YE~T%@Wc2`FQZc)7&ȳCHn4\A>_|t+@e٣FSK˸L<cuH.(/*ϥ g-ht7h2㰆9P:ʈBmA}bQ=-׹?!V8{ Huz{TABOi9/Ȍt/X-',[`# ˋ|'RFe)ZNIRM[`\vnjpi +zE u ||.˨v4<'O{j-Dp c0]{B-S&ǥxXgifoz`'ɳ o&w8!QnAע.=wJ@JjKj0{Rֻ=V4Ta}cCgJIפE!A[=&d$]u-v8Y̋.Qǀq k܀m^xsv q;6G6F"}'P4Jw:͙ y?6Ponܣ|܇HݼP~߭0(9rE yp3 +LUu[H2^g)>PWҙD0ߨ){. +s$،WN/k@N|<k'm:Z݄hUS5ײ3n@=_I@ /RxnSYqf5a;  Sajfs"~y& ؁"yd_='+zH@hCxf|`:ĕy[J 8Gz޿HJ>tLZu*3},b|DW3d_x;2ͱ ͺmq9dʊ+!nj>9>AsD?uP[ȸ%j!MVuyp{>D:4PbfE\M? ;K=\ _ 76ڦ56 .M&+kD@ 03'.eˊ%2-- @y{yᗖK2,քvUN +$OQe2ڬbbc.i.6Ͽƛ\,ýˠloAggyI`HZjk.p<^\Pz+ܙM>atEZz/f gJ̛plW~Ck~"fY&\vG$K%`eqag  +,TFXswS#zN~. +'{Cȿp _A^I|mC~)CZ}(o5XpvFnnfxb|:k.G;h> =EGJ ++Mjv4jDnMkIH0 WZBilJό +?\4dGvaKkE/jȪ T*Sv.j] '[L^Ek-[,+c@3dCVF(xK9#ɭъ @VOz{@RlhDĸx(#+zxyTzdgZZ^{Y56EwՂCy HB 1 EdK5 vE[uemumo՝vw{s|{Bm5|{}f>"&z_l ;ǻXt,xyfpckW ;hN H +qc <悯 +:K v\!N^H¨Xfm-T +Okku -ILVٻv"@/ cQN3~6&UV 9ZFlIϊי}~PDK#0)@w¼TcKƚ(ㅲs$7e9b +$;V[IX+ybX=4uY8;/Ap ?C<<N(d*IBZ3 *N7[==` Kɀ+>EeeZ%QV\mS}lU{}LuecGs6'&pujjÉr#jVWɵ4߂>j[څ{SVtHLd7.[xyU٘m>Uo_z<& &*/T΢VEeg6.o`ڑtO9k`$|JG5|ċVeQpz%)KONC֠Uguf2"E`!09z㴟Z !_[<&#*\)!%0a.}"y)dsH`V?n52†5!':WPPNljV1ž%g+)W!"聵0Xa sf'#dF b@x3XuI Ă=@F=o`-ZPb~w @&Y4#M~yx6\&1ї !z F. P:jBUab3_d[,> Sw O )BNst/bazѢ6H&9zPCٛ My'sGGN,w#SnuqK)  RDAc틧О1i bA)\Bی%RZɑǰD$fARjG=n3h# ^7zҿdUeV"59rNՍ|QXM9)L%Ṟ(VR ;*ZJ2֮j$b-'LXˍjv4k=/ƕ'D{]|GŝrҬȬf6[ĵy Na8 ͵xt:5@A4U{!HN2eP1vG0@ RgE$8 p/+@y}ow`ϽQˍ~2T-aI jQgp7F bn. gEBv,whgGhwM!Pn$hm)?^L\QeOJz{>?X"@%D +1!u׈(_0v7R<+۫r*Ks GF9W;F?> +-I l%ે߻?tt 6dj_XL";<[j6b"`JRP^X7n,"`BT[;Y})/pHKڶ] O.ӳ `%$വT`Nb[S)G!7xNFt{VD1}U2 v`v4y ]Xݜdp`%!2DUc@9XL-ORfj(~pj5U1ll]c4RDGXD.EzKΤSz}ڲ)z3 +ݟ?a\AyZ¨+WWVS >Du95#Ŭ+jG +窳}Ez=`)Ҡ,l~%Z|qhƘR4:; +.nYlEdP[lM""0"mItDMb*ytj8ԭzn{ιw\n*PJ†KqlVX& 8dmb"DV[q 2?Gjp"N=…hhik#2dfVÔRAטs ,|lDƞ$:ax7p84Y0hjKeY +{ G#|eyYኸ1)gyeWup+)tp_ ѱʁ/p'v׬`P:iodF&g8},%(]"sʳ7 \ |mQ94(\U ɗˆ- V[j~' +({19j(t8 +CG~~ ۼ,f/xa4ڒ,>$TuMəB09&xyit>ITH8Ӿ-Ck:g,e ǕF9w`O| `Y#8 ṭJ,8VϚ \{Ftt$g0+K_I]OO^LQh좌(ѱ)vIVOGfn`ztƮ]oav3%:ݜD_U@8bE;P ~mhOEFT`a%|S [L\I|~iC"ƉLg2́/eZ#`G0ƺ; <p-w5%QYT)\l.heȈ]MA\Y +[YTs/aԓ}Dž65a׾6ңYomB;%xdy2oK MvK +_O=L%߮}3ev_JƼlUTo*V1:| c+ "0T% ?&< tOb0wBpK\%ol._8D@tTaW)}?fǘs;ˣ1Vµ]=~䲀_™ه7k16N8ZpQ_QZU42¶1E2d2KIx.d|ꍸdOjyz}9nU9Gy e*"%N;z6Lϣ' +yN]|\O?xR۪ZPڶUl.^B+q9dIzpKv#ʘ{-?ΟtԱiښ Z=wͼm b-8 +w/}kVOY::(tE ++D/nyG}Ը\ 7 JLYe*܂ȑB +p c$c1f:鄮8M~:7w.*ʪ3+ڮ@`ҡs^m 2-+W<d!UFRw6_)He,犛m>ǣS.{D*;VBZ\(vPi_@j|i阄WFq 3@AEe` l*p9 3љ2K3kO#p;e4usysowY + uT/+[o^߅vFk=bGqd7*[$P: c@f +´~ 4LŹ8'[3уnQHvK)Rˏrs1ЅYN?xz0"JLq^z*P0vKdut%lH/6:?BBQ@Xw^OguTa+)(k$ +]1aYE --5]&Re>NKUY y$?A#8r#k/Y$?L*姆IbU@eCGd !3̐ :kxm)T,2Vi~ hvmN u)}-R-I&QnyX@ĥ54ZJ&%<`W%1ҙ 7dEfES0u XeJC[l4/lr  vfo@d)+RE{MG?5l<9>[' ޣݤĒj9M{0~MؽpR%]]sLCPtw=jL䳢<.zOv<]a-?M4%[^8cbq)2>7X;PM^v3iq +T8=~FiE_N`u9̪Yp"cUhҩ((d2=c=8L!Py-'OW&$8@$Y )B.ےˑka{ TN^P~,틸)p oqZLYV-:7\7;|z{~#CB=xAwHޡ떹iu_kP&*C5n3+R1VkCH`t!:,8msoxξA"R<9>O AJPUrQ.}(<))^+mk= +wG%[7ҿ"#7J4gnilHsKeu.0ִ4l/9qb''prEh;cMSF<z$z%X( "G:;h8*v{+ g?dV0`ں^D%XH,Mr{Ǚ&& Ғ2J +L6jz5J.pch9fm$ +6o4#1LN 36|dBЄ7L,b roc"<)ȯJVjvZ[,sAr>_VM= ~ضӟ9&0vZsIbZ踁[AvbWn9%31GOuWPJ҄*t̢kh圁3Lm%%>sx3SV/A"knzA̵ɩn T(mz혝*1[xEi;wlϞ1XcTSߕ.G敡 &Rԝy>ҌGriFO$rT-Gk3nܾQd2aL%'P$=16y].>,G ;g4h6 1 b4tLḵ1ewv<"[*+1c7/tu(7L {2L0[JXi +D|vf4secIec.$g613%y}Xzmp,I<a7Re +eLȒQm0Xg4d33%XS8$ScDrGk叀yOv+yf {+|(2 -'g+K⑵]El +p6| +e$`B{?eh=O[ᑣmRP/"3tdՆ_N2yu5)KzT!fX;2Ƭڎ0>mj1Fro^NoP|,7>vn0X/ +v<rɭS@ +{JUGzuN'ݕmZ,,K+ nV Uܨ(YWO`G2"6Ro-z֡]nS/n 7\.eS,R}՟׃u}-.?6^] aVp" +.9Ӝ=R/7z!Ngl!;52@0{ =eH$q *3TZ^Z%ה%@Kt'3\AnU3(졭8#ppמ 5f@2b'Y]hݷ._k\Cf%F4?] bEy# +b>$ۻum#nFeO )p9 _YubY{2ZbLrsߧp9.jlB.Րxor̋*ʾܷfA% ?J$ _蛌).Gl0=y!u?rf&SpX?]8v1EsʙDk bvZTiu]]=^?tfc>&`ЊguerfzU+%v c󣫒<# r_&4A#A +_H̏+OkhhjRʓTS +@ocS +Pؾj<1>p( +4v(%A1z?=>."]R p 0ʐ*QV1 A(JDs"jE@\'0G7Gu􇽊ڏLK. * np_g$5vʒ!j?D2 "؏ vZj+}e# ȼR/"\]–r P[l'rܦySS\ C)Qf}{KHV6*̪ǀ{*و5{E ,xxFG9>P%mQagmvY,ګA=X7>A"afLOZqf1 '\!EĻP&%6#DDf| +jAH#;> q狀\-7iG z2AOg00ZpH!&5tYPe1%v Fj3j{_ dTm)i(́0qt`{, +u41b̼Sq?6*'KBΧ$lxF193K?ϟ +hzb݇e 8h%A=X,~vHLɹ8[ju$C2GMMavw.-aȴF>EQ.*wm^vT 7haW|e :<@'hohR%Vep̮)]MfKm&ouٛMbYҠ1#FA tyMDztDv ;%>_08ns^iT\O596v0x"w(L-XkJ2-fUbm6M>3qvjudtԠC0I)Xc ѿl6TksT6+9;(dWeS ϋ% z*9qwp-&>!$f^oXg9Z9Z2^,nhotܐʫruZG͏\Gh' #ݺ 8X: !uXO;i,\5-TcCƕ_5 @i +5z*P̦*H,t@j;V rpWU+#t5XQp <h*QftࠢQ:Qb4]f뾸z&G]>|>N@# Aˮ+F `܃05H2*,۞@׉a|$=TׇA#jZLO;VJi*`AK('$?sbIX_4-qУz]p*zHzԲ,:po!]^xqht~_&ٖ,hn79Jhd$kPޅCJI n +>@s3i)|zƞCf{?)&#yy ѯ'&e?%^&dފ*o۳l[z9D Fɡ #Բo!Ľ[LSd`U%= HsHD2> +z$r:A!PS I][+^ Pkf|GPY&P +C͒Q{L%vLJkn:Iv!1'="u(7L{Q +v=coNJ!e=k{ LqVl_u,Eڭm;xCAsq8Py20%~B@ h޼Pc/f+~=231i!0ɳ F) z`nʕ 4#j]OPZ6Qߜ!B HsŅ+<=|}=}C|= NW؎AVQIY$psy>;q}WJmPbLI33)پpA.a|nKA+~G ΁;#tbN_^O W.,3TX:bȈX6'Mo7HwqGsQ[.H(DZO׽|'qس 4L+(poDXXh"ͥHex"qNp8?Z T!U/u5bOX 0CsIqS%|;1bs zK};w2>I! ekόls +.t[zI-+ +0ЌX3W9N]ڥhy `r&0548 °HW +,:Z,.39{` #n0ZIp,X +%kS JIز,Q-+*6~R0|-k[q#m>a]Z|byRSؘ_w<]%g 2cl; ۷;5ox₌4:3%?cնlBڱ݅R2fkQGvl濰jj %-V][NNݿ־&ycT1qܘx:w41$L7%:؄؄zG5 ChSC4:Q7}D]tWgkKCID{̓#8̶g/?QKb*]EV辣{M)  'V~wM1[61gS8iY\_ _?AzO!6o;Esӽ[\tz=W>>tNK|⚜MɽA~F BHř]cܾ9 t!f'"va3uIZM >}>3ÿg2MXAn+nN&D ai h9B.Bg傅F9EsĠछMjHk3>1n]+ |4Fxa^-6 [P|Lݓ#$X[[ 2k,Y(@lz%2"-#lyeT rUzuAg{W2-gN~IمZZ3UoDl-:^ZY+[ϏgIoܰ${FbgbVaN'W\a!zEo\߆8W4x~)IdjnLg׿G3 Ky¤>{$`1lEӂ)<{y"v+e*H3P/_v=p:1ecxyxDfYV(w*Ckh Z9QG_BZZ0wtv:0oߧz72`ƕy1KKwd,r-r RcB{g&@BdKECh(b~զS?ڻsC 4t+CzPwiVT+O$wdd7֮.-IR] ܛSR򢨒CH8 mf*$tx{B*6ZeJ*#i*c} >Oݽxn󊞑:`$[JzF eRY=ف9AŲjxIպC +$l TQi VZX&ٯ  +N'ϭ6ooo6"uKZuLƁOq ҈=cr=CqL|=^3q7m,m\xꟗ-`Vsƾ,a+RZ/6Bq^q +ưx'@ +C;NA`!/BXj` ]Rv<8v|·$[7 Sz3rntJ3@dNI*pپH4DQ7LbQ$z4@ V8 oؘ +<$$LR>63DiΫѬ"M ^9WÊo܆y\6>pl?pTV F.IyB˅?k/j8,UO_L>]Ɗ9 ?;IMWGJ [ ĩS'NeDsf=?>b(I;Ͳp#t[d1+W=Lq( +b p@f+K+cjXK4$ +_Kxc>א7S!wƆ\d9B#b%2yOו_qB ~f-8RSK֏FS׺!h$ZӓG>FT5`r7M}4T\uu]L*k^bcrskX Y+_IjJ⸬ҢJu5Yku#VUEE#ȯKaCIP A"TV+HSKtY۵u^:ٽ/O?nrg>ߙܜIS)lz;u>tr^` Z/ji=WkQ?HI" +PKNykQrE(p\`wb'h[%[xOTӒy%~t?yx +slûtK7,t8S2i197u@\Y~ <ε%^5AE&o^Ogr}Ou7zC:Z{p1pT)cw0:]QR}ܗ_wsI+D5G>'OtF鍾uR~NҪ7'/ *!,T1 M2P* 4j8Ta:-{<T{RqO! :IVaz6 s%mYG ?#~=t%gbyX#Jbi$3gȋ Qv?J&ʍg2G;w>y>.4?]:Cic@` &lX +jrvNr?Oz%i8*iMA\}$zV9+See10B;Fw>k 9 >y6C6ku# NUk63E54YMF99jNU/9i]6 9EWY\K?Y$B8^_E+.*~˩k\ˇO%<ތJVieiF1._QGVg ʊtjYVFv$8xwY}dŪ*۔,Yl\BcZ93%U#& ]0}VsڒľG+0|L-6eHķ1.FUX)4i q!!eJzCjl[ͅ3}Ѭ6{Z-Kۜ.No]_$=o7:˝:W8"Y%n_#bd ɻ" i\q|]g$G&Q%A+K!4S\UUV^AØuVr.i5{ul{J zCO'hht 9$;l]^ˡin\y&T@ 5FK(-6zpI˓eĹF%ы'QNkߙVDAU ߢ/QE,{tMl09̠=q̣L[ OD<lt51 +n3.Ma.e›7Cd)@e."(]~iI@ېmiu'_szO)!p &M/S^r&&9 (9ڙ5ejX^{Q&ڏKTv#"iwivC"iw9 MPEFՄBEL]|L%]p_oa6GD1C]M]>DQ-eJ\`\Wweeʪ:hecVM-J`_7eSuʄP?p\zfX r7gmbÑ-gN~Y: N?`*gQ^ѓ yPTlA)H0x'fsqAPb8oQW`9(l.]=qx +Fm@(ǔ?MKp ȴ[Zwyp酯vIGga̻)+ZR #.P&ar0ȮW=ݏ%pH&TL8!NBz@Eya6n]ي1`xiE#jTUEE@DŷEE Py ""Qؚj&1οgs41bNݳ=wg`*X/ $SP=0n~ѹgI[R0)׌e߅߅v] Zl|}3;aϏAǪ'W/K8#:=2<25k^M$zXΚI&H ki`ŸY)&:=+Z#c +=y$t?!R.G܂sWf\"їK_Ej܄"HtLp&/ݒ tZX/dA=-O9+E9凳ɳlJF'l̽/`)qpqy0z3b=0 5Cp 7ɨ?;'? = 8N_ jfƳmIc0HjqcoA9aNf aGb#e#0Ѐ6NP[ +IO9ͨ8Zg[0@Cp(cʱZ٭ BzRrlah38@11 6CpmZ"(h%LB~F9VN[iҤS<2M7CP.e [oFՎNS,KdZ38|\|P>[^={2Z xgV.{yf`I+6ڏ1>VO܄otugfʲԒ7%h]|a\Siʓw6%(ݣ1L{ܡl_o̹^FWc %K2W-zPb rYvGw4][V+evahK ~;ܑj \Aoo_ & 8\>o0v~ٚЋ\XXts/}U0Ŀ:t㖦-Ua-*ݝANԂvޯ8=%^ϙ[b֜L.gc۳ ^:=+׺b "=J7byY9b3Zsf-$_IB:4PAKM=0Pq0N d`%m~h₶r +re15US1꨸88 Tbt5'е(-K 5Bfh  75ЈCUJ+b"(~ ҥZV32Ia5WwѼ) +WDXm xAs*ƭZF61r]E +2K/["f]ZJZ:Ӑ0-bŞU+1/YT\Qsxݑ-6%lM ۬sXV_^O}XRk&oJHYﰤx%%ښN9bkUiB^Dy¾奪c{HYoKyJ1j ~s"vb|8DL|S3CO5qArJa7z2S8@E1Q MM|N%u()(+9TXrdfZ^;h + "Ԗ昨5,""&9Db5ȵ +Ǩ8H2Q';PR2w}KoPIc|o{ :F.yAwVE<78}?O㲴/DwxOrUa;,)9pm4&,>EŃ`SgQ]pn.b7窋Vfib6@}V(l`K؀U`]gg)!:eZP)zP]Ǽ'mOiq5Dwr1-)/4sil7y,z(#uu[ +~NvUᥱeQL?]Ӎ䗑E[ +6#eɎKW-}mc ?*,rhrTƜޜ2i?kbTe#[SklgΉuK7WII5 >V,;5//*[l) B]tAl޳RPT{|||FÕ&3! +D%hc(2ә|[B݃FN?!54 +fp~ =w>?ec3h49_c%4**4t8jtsV+e [FGGCZPgkצmjկSǷFyp˨V ;V +?NXrܥ+ a 7 +%:nl B5FlA£Sj3N"⿖v3`nTF1mưE\(ZC>-j# A6AڍNp+yԍGy (5[²ژS^3+(E 8 &Nn hFuQtjAp)d*@E:RHfj>< A8@R#IJ) 6A6ɂ S2fԴ~oŝ+,*m +pG`UIQ*U;kdl(/ ܵl.ɜH5t/hǎ1\V%]v{vrKP $1Xovj`[t4c`g?տaFKKcGTH_ڲa,S_ BD&C8.N,0)VQf3f +"dXHo}~u Ya[`2)ЫI5ʌ$d57ehR 1&C#ȠE 4^G FE < +WO` Dy{e_6hj@#Zȇ"c .@@j@D@D2^ 6hڛ˖͛cc#!t =G>j2ȞW%S~t~$b!nܵ0 )P-mh8{!ՂyGYa5.?ݺTN8yO>'8I$PBx +p $k +뿀{6O 4&l/ hͫ/a@ +yCG%Paл"H.G&UT0gS2a4zo!6A_]} 60Rf[ mX`T9ڎϯoEgןSSyψAt_M :P*pi+ m,kw+L +ɢO vAE PD("?AbJ`"R KDE XL8,Nσ]dμsν{sPMCXJUeUS|B +!6o9Lf" $s*cU>ʟJ$`Bɝ򵟖潴 ̋yy晜GBVTS(qQʓ pAojXyѩ+]6&%z׃Dr8DaȒ%A@f) +޼o.ƅ=$''Jq,wei%Ż`  02zHh\5(Rِ=VmC|pө vn(۰l:whAԓ {pЭgNőBV],@H}KKp\vvE@T4Ju%R?ez> c  7pu~Vٮ.v&'| V&#hu~ƀk!ӶnrAnќPq[= taѢ_Ԩve/CޗovTe4 ^Fi>xYp3ffDnLEhꄷٔ )m=~0Ggx ՗Η`dG*_JX Τgf +8=B+rR"di{kSgQ2XΛkde7*~s=zVi FDg:U|ǿ2|wdAsT +Av4C8brw2]_`^V`i6VBTghk:B]m^C^.2(A5T.gUSfNlCrrr;{-^ lhvTJ V:|h8lga(jalƟ0{(Oe66ߖmao~7?"<]/CC[_+\\o,_/|A,:.>Y5~)aU׷諸D<@;mqzd{'M95vk9ܟt6њ^ PvlVP%^5$QH?r nx ]iRwݙBBЁĀ~$C@[$K~H$K]Ɋd=-˒%Y6€ $`BqT^1CajLӻWsż.G+LW EHaRrMZM|X8P?"Cb6xrxy-8\3dgO^n6C0#A3v + NVŋWo7Ldn9I!XlJTVHt*I"M$baO4A c*ʨ dmP<:M8 +Byj<@~F~v8{ 5 tw=I-So?qSnL SYya9Wrpyɠ:i 6פ>?8J=p7r,wKKoqG)Xm+v n}V7&d:D \[X#5Mr|.d.jKlp؝WyU۬n!j_CV/m9cw&07D;`H=}`VGEĢ]EK%3_Z|$1bkPI]|*kuj~:ofXBjod2' JS>0H;9.2΀в`s" oS'sxkc'a Dri8$M$}1RӺ9/M+p$ZmZg~W[MU#3F ,̷93p ++vbg(/ٝ%`hpFȥxPNKE(u-fL~VAWvkEK,"h@t~RHp HA•(E:b J N(9~Kδ02b!S(JLD&B0p;pNٓ5Y-n||~{,Xeɍ/\'32yþ*&{G I8#LM3}@b֋!}F'Su\GAUǁ"ث׏߽[zDؤn;12V%UrbytdZT\ 5b{31Ⅷ~7v":Pv4gpZ7&8ק< +sNY+2plYq".&w[Ūw&G 8,&H'l6*ϪW]P%7g=90c#">޵2&LW4mB c-3|aw{)X1Aç=o$kh!}&)<3ts B+z!׻\4`עlOH  !W. ws!b_&,@!WeD+JRD-s]Ye cf,EIϘFU)mrpWEFb+S&^=a[gn&\MN7j~g>܌ώ;͓֨ak<碈osZ\l z_crz7\ͳy-^=Y_yaF~ _~;w"^0=M*h']~ _;nͷٹ\( hiqM5Ƚxh?( s/dFŻ]`&hBX[ DQZ'Qآ2<<`"ZVH5_ JRuUZ2ښB4Lݻ0 >s}ٽ3lxgT.|s? v| >bnX?*(ɮ(V)_Bo`UC~BS's vk + w*$mߦNkr $_La*v8%33sR|Gդcti/*5˴rW7{}·\ߺr{k~],?g%UTVi ЗTB4TrFsu;\3a\fڷigVF;a&z]kx: WpEt]k Қ]FmBb}J )-&[.8AO^`{ƒfQF'& @V9!'bLmU(7y)F"@ΉΧbdW`/~:'fbs)IJI[FƎT%Rdma)`OCȅBՍ(-mT +‹͞Nl W-IROuZs05yٸ˟m?PH_4pUR(.AcǨ&&O[[n9Ʊ.4]t uܤYcqgɭŶjeKx EG%0OVɦi&Xǹ3l{6(p#q6)A9A_q 7q V +"'u`>|q#`Bg~WT"Lb$`sB'ZBdAG +INq@BV"'X!dR7b3[lF)nȧTRN<ɹ"HWH! m + + +jloOL ?3(aV.L `x]ֺ asVz*ɺM[Dt@`E9 d{"hd7!,dFaOβh\`t'8[\f;*: NFd K<"|X&-G)\d;"cÀZˇq#tZPo3L +lGs&r}|_L!hM'^΀!d%|/ڀ$0p]DJ| ldyrN3@;{:"t$4Nd!v#!hHQhC0B:!Kp]QD/F~L~",Y<~Ȭ1pbc>&!67l>YJTRۨq uK dgcS6'l+v8Gs49-dUIGt )\9DU|ElSSE} Gnߧer {Lt'`A Riokmh<뒢7QWgRڢI^X2 %Ʉ̢(!!󙋐0y>]@^-H#Ĺ)?\AJ^nB(s h_]Jn#9s%ZGõ/j_6qk5]M4gSty;Nl9迴W TSWd:#},H:y.Pu _A~EW>X(?Q>URCCV]UŞoZ羼`GAYBX7s>}ktU'ZA L&EE|&\htxE}VȇXz8%Q |zud!&ε \C撒²2aN@%..)$M {VŅH3 eY\ڡRddbIcg x[Q*'wmp'O q}v4((,,(iSZ)#Ht\[`-Ie#C"aLO֋xό +ttMz홳M-:.&{]]]D2hKҿ2g't]*!o8KFg.SУVf:gq~SfV̧v3qߥB'o6Y!2Ӳ9%^/㨩+$i_i.iG^(eGN1#!Z&^`v3q"ń4'#~E}dI|wO9d]`-6Y%qjG=yJSSWqÆ3N-|וo|y&CT=Z|ڽA8,f(7ގa ׻ٌ)w vf(VҩK#%~m}l z،+~+7l%C|)?>c` 'NJRu>i"HvG$l$ +Q#IxNgAH'Θ)أoG!vʐ|cvd],?X{Ie8 2=\]V밾kϐNxu{ywxM/ Y[}BWSk['@֣2(sFe?=Z{qށyG$<< zK7Bswq7ʐJnZEHpxKDz-ʍӔ>#-+AȦK把FP`4MbRK/^\/ ɶ\:˻ [ځ) +6RZ jaw+(Q|$Z'HrTtN+~o2ǟ8Sovyxlk$J5^"0u9F'j0c6SH!|)y榧 q +P4aRq_--<i ̔Ay R +H"e6!em_bIyaxƦ8ѬMs;*/ۗvsq8\c˼^V:X o`}ѫ0Zq>=qv5g`#JN1`cD"xE +갊రꊊjp,CZ#0"S\Ǣ:{b~IbOoѢT p]h&<{[h`"K/W|+1X% T.gsa\JUjM%k85pL&hYF_AWm|ú|kبŽ +Pd]H7n(0|TlT Ȃ:i nLQC:?@C$k02rZd!D ~Zo[h#ӥl #:ap b4Փ1\?} /(@#§uf?^ZVO`8' +(A?{8E"7w&2?i3ӏxjC +%"6[n~Jp"?<,7txdNn>6Vlt'(KԋS7Ocotj;Dz몾Suh>0ۿJ@Kb' łK~1l\L( +&}ηLwа/B=,oguN|v\x)3/^-t=Jl` ^;eT,]IDB="xhϓC\7w=:+p*j! T#h߆4 )( |rX-gw +DMQHD?&] &8ƚq($QnLB" F^ Ϸ: XE6$Bu: akP o6'ɺ KJyۇg!6}K>c2>]Q-)1_Ѥsy K[ss]ōFRC:J@5(P;d^!RP +:J P%y˖_[}bf"<8Xr᛹L[W[C""B:9c[x;th3 )Paf&Yw%%ds-#M̙m11 gϞh8K.'G!g3]{ PzZb0  T6/ܧ-?pWI?P)YK2?R[qH7[UT)YCmu5]&^y0V ].բVOm6WbwfE!mK¢Bvp4z[NQT6ut^gj`!_ZVVUUZղc5c{95-k`E D߂7$ oEkFg5N)Lm,_ŏr^:V`%.*tW3lp¾N؏r#g2eL<.c2wao:z8:&'}Gg,g1Mܣ4X,lEf?;Q!qn^ܺLX{6z֬xBN 3+S(qt$ie ޟ" xcChR!U<+!9jm޽\Yĕe%P_k:$ak hNԱu-,U\e1#>M92Fg 28E->QhQ][3V;}p?k2ZqT5nQӕ%%9m_(c[Z8HW+UWNN8ZWSVu<~.Ln^CPEA}F}⌭e&}df9iwԡ`;lٰy$g¥/:^w'9kޝ!q:+kn`Wݻ5ُgPDiy^9Иa?kKJKdUu\2[Ի\ S XUXWp +M,m"Nu\;};wquTYWb4/]V[9L/xLٞ5(]4;zN5.^-ߺ{v '}9l5-_d$u4:טϨoOGp7/yg(:,UskՓ#Ps94#9O :l#ʣ:~GMƞjшEH4J@@qA2 AdAaesA4qiݢĥq16.5驵w<4E?{~^ +3,05(h--[vU {T*MQ4ǒrY )F9sb::$"DAgP ;%eûŝzCvN=S$qo9CDryh/3w{ا8M Rřv44~T;}^|.>d|Ϟ޳h)l(۠В&4 +AW\7,c BnxH2Gʱ\-ڸiMBkkXNl,liiuUfM,W-WyA?6VnE/Y))xpi:vC$~o18X&nW-TP9_pszïsE-h8/41S^DjM>CL+֋!Y|!8S m5wf&Պr>rwa)*m{.$*;3lD%܁2&d-jI\K$73_ 8䲬*Ȕ&Whl!xK^k3ͭ > R'a410> ʈ}H`4np*_#O hOkfIHVfTԀ `ܲlh&xBs_26n%} AZAScl|(HvR(G7ߐzC!g{}*3_I +㵴ڥq$rLieN|\*#%zBDÓg݇$ҝ]#M<[ȢAΩ:aa)z-7?;/Y&%xGtO]ޢ + tZ/\^.<1z&#LէLi*!~ćKNfk#[tم sY?5e%\}BߒoP)sunb}9I|[xwV62ŞIL 1ÛVw",9`λor4U݅ G8U)knc_Τ' sz]}5qQA&n&ÈiEfNy4ڱW@57jJ|kk4j Fְ%~!zKw\g Ir!30. Q?e Pz%\W_>՟2 +wl8-IJcvX%A $de>SiYGXg' ڳ nq;ت::w.4Ş.!]p .gn]Nv d,a{Bu9ty\2VE51z kŝmsctSfgeB_dtd<t1.]oF82fiO`WU, *C䛖ѐmR6|"Hv M&뭶¹U.hV7bqOACV X7R.> zFIZ`bj<.~JƅB +*.@OCKp,??ٹLy:mRvm}ITg8~$2M"I„1$p~t?!~OT)DZZ +J~:,F%_LJBxj܆(RUtҨnlGOa "8F+h/H+Uϕ8Mg|O ߕz\Tns ~PY8RkteX5(2^PM"jZ\ը5g,0rtGQ7r:~;59egv<[?>nܗ/npM_V,rǶfuco3LvɅn$AN7 +0q>?\b.hK%GP:MFͥU-{YJ罆C&m1U1Ap)0Ɂ"`d[6vXp Blq437xeZiC]umc=/9}1zZ +i#B}}ʼnKJ2eKn1;yR*up+.'Q`}qK~ Mw-7hkⒼlY]QM]iy7؊4S^=SrȢ"l*KYH$aK֑5 AuU@Tֺܗ1ҙ9w{}߻Yo{ sQ5[eOA mh6zC"e[VZfP muV +_粀BkXh3:BfYccKM'# ]Xx>V> {=GpʖfL8dM-dk!ߙdm;,`oҴoFxx-:{rّ}xs8]1tyʐ92zqD/[)vn: +V5cE]L^\T\Ucl7skT`^7_3QK[왛k1ho ~*Cńsp +%|U1R' $%j_7UyV?kO? ~Jm`)rng@bD8$x9uypv E +19[P@}fӗBK}2Rv3GXqeO[f-$ oƛ"F͡GD\Γ<2c:Iu&54. `(dߘ&)edS1+J!S9ytL50SGfk&MsM#h3JIVI"O$`NE J=5U'';۬ G+CKrKfF+A$ĤSBAg{rE9nBQtS|St^,l"2#+KJe) +4L׾2!ѯ&!އ1aCV(s3±PZ6NB}cU/%`J]/!M=M-{d0z%!ni#^/+-vxx8""=[Btdv)\Ʌ7jpxQe +]d-VAi9_ Е;WJggҸmcx0 \չV[ܞة4 @^]RQV&P\9<y%L Bq,?"TfKV2Ap^݄KZ7i?E({X ɿ6,a#kqN4n3U5\bLHPVU&1pUdsͨЁIfI6B^  }̺̪OJ=irhȗ%NUGzw;/"՗h+YXSySšb3.Ss؊SC悬hY~*u V/fuYUi|cH@G&`kQ( +A1C?wF]T.mL\S51э3ȁM.| K 1G)`\4YiE6busuݶ>OK$JFr<{MV4nV)CJawdៈp%NR;rsUiTŇˡQLA +gYZ_􅼽LT}_I%l ]k8th.*)Jrٙ\\98 +7ϐ# _gڃҨ,M.[)VtF:V]ݙZ-Vvk+` + IDĄ$HxHx3gǶZծYm_;wswCԀؚeb>W2íE{ Xحh9z![ʷ뛔Fe'@j Z :=&fq8/RO{^s+mD S:jiИ*{1J?9[zw H]S,b s Ly}E ˴R!9>#V):ZzQEwad鯝W,szi}o)%e׶AEmy";=f)&#t:|*caE| XUxd8@F;)UFuk:m1D?3:uc!)3%}P=e:)he ט52X,Nb7G^hC i*W2J0>J)>"QG v4`{ؐ_KKZ*7_02Z pކQ9QmnTGu36 % / +a򜸀^a +mŢY<N78@ڄjn;{B]&6hŲz'Њ1'Z[H/?26yvþ:kRZj\Gp)Y +6yc=]*J&8(#$MU&[=?=T SxY{}>zyM~dlڠNI3T~Po~ei/Lڬ+8 󳢣E.F5:@pE08}z.?)C:092g=_xފk{.0x&EvI(K\qH2pڠ@ <M2Q⥷9IE N;^[.W)(iQ~E>/N:8=uW{G U(rx?oMU|ȮY2>ԗbË7"h>xW4sf.l3fY(Cq]a< ud +7JtXhWx?J!|P_a +C(}֬bx+oxg]c%TF&0dN?]=ߠ}HwSmo:K?r=G+s:{^esNX9MU'[=|w/F%JP?+њD; b+Մ7*[ h::&'oĔg>)eJF}!~ FQ&=ǝ %?wSc9.iި0O@:iVUF#P ucWB RVRj\<$22'RZ&'gkL/% +Qo2RƖbyΌtK)?vOA?vO%t(u&ơ?wf;pF>pְj U +V(~¢120A(/!6t$}uI|!&mÿø2vGJH?ı2?[Ч29 +wI;w?PL@tZnM\} +G;te}$'S<|_hZ3 MzKr;Νx.g<<XDd-0 ~R6aM;dy1OFO q^YEX_InH4#3ݙ{(bu~qV2\lf2ݎS_4(+ K1=Q}eQ3Vl8dTdDEYfivhE@,- D͈1USS1Zy4Ssd2n׫;v/qB} +Ss_2?՝6K;-2GT[P@x® .1gai")іɌ1t۸J0ٝ1ܱ !GI|njJiJuq(E5޳"gnZ. jcrM) wl:-=ImГհMSev|pVwWH3n$pͬ@ 3X` "#i:+=6MK\c<v !SӤY43I$]E$-:Cn7Yd~' +Tje9-Մe*|Pb:pLѣߠo_f`lRY`Ԝ2#bkN[ +jԂvnKW[UUF|*rAiqm6O \*~"h= *Ɯ?ݼ[5$שF֊KۍF3xsAL&5V57JSp'r&ܪbLETc!?KΈ=JK5w款;k&N pKO1T'yyIQ䤂mMqmFE W}*((W'MIrjL2beG^I6UV6.IwNOeu\ЬkK_h +c[/QIs4ʒ2Yiyi ꎹ~xohl=,TZuN/KA6ΉѤe$9GGgnҐ&.VE~Ti]N)E iĻKp0芩Sr +4N˩72wH^>\!vgQ(Rp+L +)LOwnZ vO}*la'k9}1<;+ܘ/ 32Xhzdۮbۮt%2Qn& 7JMp",`1,!k0zk(Ύ1m3vv/?^sc[Ŷ/fY잗\Bh0"X f;9)@/g}5%% +ϡFpOpYxtڻEY>zS /V1 #U;Z8>.ۿ|"SQ<'X7᛬PDZzFIQqco1&OC<{gL;Ś14?퍣p~I^x" KIs~EoE0"ޠ(h8J]OYp1dP_AtH c/v6"nCb?tXJëVG +Hհje/0VM4*D|V7ɂxk6DUvTxa\ r'/'@-V'aw涫޾M @zpL&K"5sybtw~B +ݥzIq!݃d&7 9K{V=2)1xWn6,i, 0hZ +^`?Zu/+չP.ΫÿpIG%96.$5pYAz!a><+'{בQXchdck/>x ߂ IxtoA <su@4csʇ u*G0[5ioX5,yFk?UH㫶56 \&5X`Lx/g80˧;D6jc h`;?M: b v5me s߬2 Kb]R E4 +h<an!0A=Pε.˜Y$+t2l]qκ jZˏF-C$D}7s +-$! {BiK6^$ Mv$?G[Rasڒq Íl.2ګxKprKwGEq^q6dfT3DfMg|,*>(Qޠqyq@vayXv<"VE[CS Ŝ~p~s~{ED*o$rSE\?h2 `BCTQ< +FTlg+C9R+sլwp/:VT^\|ڔN캹0>̺JzL P5xG^0惴&!΄zgi#8wVj=zf+V`[gOq1w,ed?iD/xa\j} >ިpcSEJ`ÓEpk3+ӗ*(v KcdytHC)D?$1ٟ!3+nb+)N +kN~],r.ɻW*RIddSZe^v2>P)YZ->1 4ڌfxTkiy)0 %#՘+j<[c{G,7,MqD<>^|%73) R PpBa4~T~ !޳ + ~o7egM aaPȗxiO!B{ +d_.YVُ>*띵)\6UۭgD. 2ɾcudxH7A ٤ icc ?aD{wjkw"})r\i6sVs)h4$:!A Es8x9g#O⮰}LNg%%(ؤy:lMâkl>;up5>t[ KAZ^WPLJ+OC\CUQ +70 +9'KRsSGB$T!?Rm!QVzkk rIJG|?059 COnO:C;_TN4^t2Ed}|b"$o_C{y\YTt$"xhk7vl UXGf!ݭ;Nf<~y[8 ?vObu!tAzֶ s45&>,1+ C>]P-/{JͿ/ zKd*x)ٗA-J1 +oE(A}NTG;;_[xQD; XP)`6VE&:Hx[J±4Ѵ˶;@$Iy=ڿ~gNJ{&|O}:$ 2pہ]hƎ𣸗Hя%ђ0&{%i3  nhxh ZC@ɕ@rǣd dd(Bo#=p. 02|&;mYrtw{l̀(*! \$B ^Kgԯ]T"㛭"gH$@JS|h0p%}|Z^lC?lDo@ +f} C&yQ#Q#Ҍί *BbrU`O=pP1*0`۰kBf*ZbL\, xL&42:.+:@ C߮bOTWTe@;ō.K`N.LfsN^\p +,+is{5ڻnܬz~q\\/zozLs1 +|}R8 K?+S?yh?f,BSh/ߦpgN0'TXmn*<3rt[.ޙ''6iH׿Ee T.MU5blJ + +d$y $>3(%+t_^|,FPOvv9`c3[g;bX`qCDfN=G{8xe!tkpWf +8urLS8[wy&ӲlVESR a +pvH}G(iZ--) u|-_զ +9 숏g (TQâf& h턄HfFUGSE5D"ZPZ~4ZCExt"Svj?[zlfuݬO1¼%%5HOփWWo%wJ ݅~ȹM +#˹Rx^*NI*J{' }$$R"皉+pt]᫖}?^<}7v»cFp̞=%!&W҈ˋd] \fd^M5䪜i}u$Wft}-Zw +4gp[B1PhSA4ztc_6dʊ'BsPݡdUJY0YaAڋ\csOFnh۳`~y#Y2V '?\R{.(n<{q+jbW>PV{lק63sAg4.%0"P[ 38Kk@<;'G$d!ԯFRQTAz.[ aPgQVS9t'^jջ4H}H{\b\6Q-{5jA^^+H>@n5oAx~ם=VlgTj" ӗ]e'uqCBCx#g0E;hfqC㛛lfKqr|ĪinKTSucyhd oCXG3~o1&X`Sg=Ӎ)nN,al׺Oܔv{?zolsԫ E?'<\ϻyYt@fƳHǮG_-~A#6T}kAGA`W[BkMKN+& ؁/<.NZjIy}]OKcSOӆيZL1|è8 іWJ[ʟ-}Wdr 3M-lJʴ~& IhwfJ .XlD 0VH3LZ4̏T ț=U,XҙbB%,^9($< k jm1!A0H#'{i\zYaU,' +~olRV) 'NOA^eoZno6[ %}9cX^;.Ix:dַf+37ލ"&ޠHKe]Fw-c vDh>ƏA@dY2)sqW3'ۍ.mm6nc#U=ʣ }8jsNߓ.-*bGE@FeY+a BX<", Yd_U 309gnjswˎ#czo*% K$]`,Ql>BI}1ډDj72hN *տGN vUjGWZ^hҺF/PW^JzD_6ha)y[U,+:w +;P->EPnX~, 5m156$3KYW{'h\<#JA\vЀКgiAbĺB Qs >5lv lJ\@Lֵ껪D +3ID-[P0ut.VgV`A̖?@eup" [y1:Б‚x {cYDɖO*gG[n ~tD$X PJH}}m=9)ۼ_oMShe&69YSR,<; GOg\,&4W :P!^.}C..ъD?y%=߃y~Hjdurpp!ZOI˹F+}gHJ+SIq q3OZj/z$hO'o-?vkgN*ȎX9IՄ9L$Wņv,7/s3W-fKٖ’0@h@ ?8Y@pפ`ڶ!Y A'9q[gz &Z]57y{y)Kx4KեԶc̀ X<+:'{JR nB\W䳪g{cڻ4L}䯏<}xy]HBh{r'W<L 2jb-qntbBd19Y6Nޜr׋}gtLB볹6+Ҩl#DcP=MF-"D0P\r~s &)2$0K7UQjM a6e90|8}"Pd+&+Fd2[=3K)$cC_-@mA2 ysѹ5АIt8X"QӐj=vGC{{(ŢRzNjn" }&0 Ƨ5X _GÕomA!Jj7vn>db6u<#ېSfxo9W=V~-a +ҫPpZ[Sǧߊzhd[9S f EkO sqz]mq }~>?z0?.+ Љ]lIx6#)σ&i-ng]je m"\jd?'{Ï`R(l?~Uԃ Á46yc?g6IQB|s{\_4QH#Z! zۚ.R>^Ji~Ie*fD%o+4c+aTxg9>9@Iu #But{vw0 o -p@GpTPoo-ԇl—-֬GBf~&ߎSy?,3o懲c` FhxO=NqG `zgw*q96a +Tmoe}| =Elg`76_a 7)f6Ri*ដxpb\^vtÑ:=}edoqf PL7ęۙIYYۙݙV*"RrG(S@bxQeyJ$gD{e=+ztǪѭ~ =|ͽ~wd{Oػw-W0W Ł3F">k$*R12Fy" %O{bEvr)Q)UUKQhù}~i^mEB4pit @JFkxzf*l(P@&xJGWaZX+|B/g~;9f%n_WhrȁU(<[`?q:D Zል#P6J3N.Ƈ$#lF* !i= c'?['K#e.yu TQ{fz,] d"WϤhߟ5a:i #͞w9lo'+z9鲿9MdNwL0Oc[Ēlh.>/@/Զ]z'Yhp5]gV *~~˾gUzzo&Oz_y< R:R3ʥ1;ʣ1Lo͆uvv狶%D6!i60np5М,ZZE b"٠

3!v /Ee*bUER'01/9]¼Zhv̐NG&(2~i{$JK-mUżģyoqs7ǤGEqpBprhbۚ27 +EH +:itCcdan[E4K.OJRM&-.B >R7-2#b\L KȃDQ*E2Bb Vィ;!(K\RD;l܆m V~S-3c_@JkiPҁڮV;koVo'K%Ʋe?rDHH MFpGnh3p@>Ф|Wo;kCmrOX*x=H<:[Onب;Q|d 0nbK0K1Cӣ"47kg/5/M[jQ-g׷s +l-A&6%r?Y?4jzXK%4^s(bIi V9[^N;Vq:Aݹ5I%걤A3Lbହlj,a±I٫7*& +Ho(vp'%h,Y1|ȷӴ-\O(s;X@ ²0@"A*qb4q!L$ПHpGI {JHdV=j̆!8b:))L;XϜIj{M3t_OK[iEh$@N"zF(SpTw+u.&*2CxG+m֜DTgꪻ*Vd85ٞ%JJ4 +&A!\,("ޯf^zu%y-נ dpI +V>u7ha-9CZSh4^=cn/|ӏ%8Lh $Z +*rćw`lTrnƞ\v*'*O(Rkęe9&FȢe\Yyu1vBVJ#_ԖhK5eXD zD&x3n0!Y$@;ndn4utޝ{uڵNYK@$ F,(ͷ_Ԟ3JBPnWC=!: L&L0ف^V{OТ|`|bmeҸ$[`8$Xtb@cXfT;j6UЂT`zBF$ܦCցU۴V3ezIH9e +ғ/7Zl7t.؃ B']=^yh3)\_޳l*^;ǜT s3"%:TKXNG +7kHIGK$~҃ةw(Mipև>J@ +5d(-eQJ@%niC\ߏi6COQ^Bõ`SPѮt NoImm݄6kԮӴ T\@[`]VW?S1`7J=-Ͻ I8B4p#$5JcOXZ*Jo`ܿ_[-rCWi1 \^Pver*ȫv5-:☵ux˩u tD (>,.=]k% +ߦZD C- +Sr$ ZKu7iq3Dx\*gZ#zv C ZMklqRE +`2) /Cw:[}}wQ-FΎ +v%2Ͽ}\|ʰAq\mg1J:"ǩ.l71M*hC'0ym[+'BuuћjF'q4OrDe{V88vd1O + 3٭h*g&kU62 %dq&y3e%O@cazbע$\v{;­CI7c}vh.?qçۮ]B D+*jC*d.K:>:k4FB@ R77pZ* +u\uHsxP{l§rW:SQ[Ez<mݣe%dƆB@IE2@UQ[4t:>ija& 5:ʖZN6>G÷o,s,4>[J(W8:ָxdNOEC4fZ5`WeV(ftX~FI8u+w Ku<陬y+=&;j?`p:4zA4BH+H厘R0xGuMuҲ7"8}~=.3|^3>,^^M.[کiP삊h͸AST&ѡKj"^Z~G^E'g϶5;!a 9 f#ku5Ѵ. =jd-pնEHh&|BϼY+6OdjI 2Y8[]0w3ASKL<,`=Jш?y-a݉ 2F0`7#_6i*Nz)Dw{bvIۡWD)ɪCW3:H`#e醅<DŽ9aZR SW-gpNː8M|+cgى$NNh4ɀƣc$:qkTp=Y*c!‡pOdO=ۭ޲|6m^Z57c7ȃAbLV&M0]>Dwmekoɟ5䱓Dz9<%kVVxb s8f4!s1s=Jr-Q懭Bj:mGgEd  !@ЦtfY3JfI:}CIx0dNI咳.?ϵ-MjPQ)ZEll͗n\)1;X%4s"w +'ڣw@[ZeVɮ\SM6c26r6VU%/Eb6%\5Oe,l-b?+xhCo-1vP.BP~{Xo ?"]t7<`#n=`?L UMyѦ {!𴏕r_8Y`I e=a0%^qxM;ڦ@ߍGXhЂ߃G?ǤB[E:{f 5?E}a9)5Yȥf4K`j;΢P/M]5@oC"7ѝ ]OҢ,jn]')^&)H׹+vv4% ӛKKSmKOn繳KF܍xwssDxdG( |F'7Jye> WLe~PE!|5tp-GPƟD/i杏$tjVh8%FK׹A[g7o>deWF$t(QIik9-.iNmq2U8Hf[쑠DRG%WmPr'dCKTZ , @W볻,_B @ @ o# }?t\¢P /7"+ɧBF! +zD17#3p̣ҏI"1W[ +tϩ9 (w#-?aF[^sb$D/p1ڌ^<˧ f_' Bhߛ n/Sz77Ai}>Zj[q0nC4GȒ*:4,{N*ZP-"|$VeH +r `j{D4!۾C?IҨ(+쒪#TGbA\Y2C FDp]#kA6eEETd_[@EAƙDNtPQQ4i sLn۞@ѧ{]24FC2%,:Na=Ht2JǛS`xJ>LCї`B4gSPFS#ej&PSYʱkɸz)kU3e- +;uFN֞@1MUMJ@HЍQ#Cv 4N KN)݆.N209NȌ͛iMxCi+Jڌ1 sF +]'D;LP<'PMפfM<g'[#6>XF oM^;wg~3M]t><~:is +qF.A~LOGĩO$za +izhh~lDY^IIZ@fp*YLɺHփؼg[CM/a&nD ur#B"jh|R =ݨ4K?Gvn&j~oKvl"[4Y8|ْ[R-֕WdUt.gTMObfgص棢44LN6U] ++ªIdFAk6{v*d&UO>b &l-Ɠߪ- +|Q[蝇 .4V%oe=Mqf=>"OQ.w~̿]Qfj%ɵy8.lcjRBggs깱Gu"U\iVYv\BѱQ)ފW„㌣)!Nr=?J\UL;Y!-c/}we3T6لNZǼ}/O8A!OL/ +υp8zVWMqE!L}jh!O,,w7"t Gt#,)l>`?4߹jn&,2>7l& +QM0!:&FÇόoQ@EqIyo. ȅ:Erx z{Nq1X{6&r;xLldUqrK*cu.!]k:&'kE4̂fG&־oyٖIB ϔ+"o1[H\%B#&(ELWvg2Q*Չ:jEGIoTKeīLMK"2¸kX F*|CECK*Af DiìWS{0&b,gb乄BH?oOS;)3ٹŠIťFr%q5G +Χ4J4Q޽] ӄW?-<Ӊ7]:1,-98wB\fO}7~rrWEP6,!^rt@5Bޟ*+'CWfIH`)l͂_tE{ppX㓭0yGk/f]l1oe/2}Y^Kz۝?%xLwC;XUNɸ <,T^(IxGՔqMc+G^3=*ArP^)5c*<tzxBO(ʌ`;\ývg߉Zwݵ_s~<@<V{\WϯNWw{,q6qa8_-v%u\ 7\MN06pBozV@fWE;v[[Z| aG237x+w;$P[3JKwi؎4qt,7SP-A؃7ph;0F!#; +F*F2{XM5ˎ<8'f1Mpfq8 GdNd`I⢽Dr&0u+5΂QȠ HIweiqo~/>LtS2)f5:E:3 RJ~:tY6EHyBWEr1!1ܩsC/{BU3/Ȍ`}W8y IN|3x'h#b]@ $fʩYM;Z;;K%Zp֧V\ ᥕ|x\7嗲ψT7_rV*'amw=p={pydgLD34c Z .^\n&jC}4'U@ +]dDbJNpoDzb6nϟM)ġ.B`IkV3*R>L_N#m5GkGIr OI?^uϳ.Ѣb%WP]!Vwv4okvLBRv3L鬃Ů %˹zFƂdB 85kba[ʹqJ+Zs?\jRXW紷3zTw,*8t?qSRfoFQ<0fRu8M}"x/+tzi?1:kBkCKأפ=^Po7;[qLl:DR*6qQ9*\ +P"B^4brϺ*EuvXL[cs0}W-R$pM Đ>2dPM&hߒ? nE{4Ů_k\~<Y%¹H>8**ط)9,aa{ׇW*n K[t(gdj*79D~hc't4~AS0\ޅt݉x K$hٟ¢Q|}L\FN!λBciJZRlyz B-7D>4)97q5Km\S;Da}٪7 _I-v@Ob|ݵ\Z]}?u ^zyyK-/#JCWM~[ 8p ٖ/CT?NY'%Pb}Tyrk^ɮ;x̂%ʝ,XD:Eda"td: s + .U! $qFa:Ԥ13j6j2 4]aQEޙz9U˽sxhd!E!h*췫d>"«B|v[SZp{gsl`0vnU%EZ_W]guMIm\HbX!&RǯRvF|Eš -w?pw|=5P +h`B2?`(WZH1v4A"5Nm: +3[c ʽ0Yݰ`:s).ͣq qKR6%jq{cWaq6kwl箼ז <6tɸ&ҖuU?7}sف}w+|^@. Mbb4A8lar#Cs] +^m^h3|_~찘!Йsű xh\T_XgL]d_؎~,\VF ӨU뎠KDdNy<{n;lVnaj<7Azfh5efU%$VoXy4كM9k[e1T/{:bDIe=x' Bߦ<)9JX$F +); -|yAUc4 jr+ޮw0V1b(9PQ;X ҐKu{ ` v\`6yI~ȲPE. 9d(fdPyóY7<*@^)J4y&@)x-I1EumFkRОt6>L.tD%ԪJ;q$kl;g`]NImGgF UOa?%B{ܨB/>R3|vˁ@9)q M1<TA#T+:k8bp l|y3{wqۻ=_=F8a` exܰ$ +NopGxLϤ&?ßxv&imG,ӡÛ@Y\=K% #Z F݅}-I\0C#|Kur[mgoA!u$M" QD0тMGSĕwF{ $Q%ë$LY&,-MW$"t bV|/9ƛę@J nk[HS\V.,+Q)HZ|,t>{xC)ч~fm2 +}]{]F*/[m7^|yu͏~tB}r,qx^=b}уs->:DJ!Jzg(IHTɇtQ ;-4P^:^ۘ}ZE <7:F:x[f߄f@ %nKHHQ):I#) ۔Ňؙ&E.Dmojlgz\-NEIqwK3i4VYLLrmLe8MZv]^8{WY!r2:ȪU6ZQp8kQg!2 +Z7*tB⪔]CvT倚hj +KG}Rzm𑗕ꡕA +^+1]]08u1ۣUhR>ZeßXAϐܻAR#zfqѰ_MvXǏoq/W"dQmL4w()n1k06)Y\Rh"c`SfV"vl1i +rdlA‘lj7y˄]>nzͰ?dYZNhEť r qQ|*`8Թe9%!|y,#jOET(R.;٦ D_ZornuL<ȵty%#>L3?#{czU?R-w|g=i4kjy-Ǿ}'[@7o5_|ܟd_5jeGuc6m/3"q՟zKᅱ^[orr*ĸ-we~W-wաی Eo)fJ7o̲Tk~o|+rlYt"W_żӿb[?a„ &L:or_~^[A; +endstream endobj 25 0 obj <>stream +xX9!Fndh'Lђ98*-S0LpWK|1v/idhv<}p޶Fo|I#z30G.?lXhffGKr)Ma䈧sIJ;9nL|vv'4c>stream +xXA0?K@:v"XfەaVZFLG{tD4ҿ/[,(5zK_ID\d짧gbrGlH~?&¨7$Slޅ3ԙ7OUX*6.3 +?y vleSjSlRDƪVhHI%*"CӼv=@! +)7BhJ9-+~/R~L L(썂,RV ʆ@A tn˔œ+Bٛ=Y bKiSW&.^~1>ө +endstream endobj 27 0 obj <>stream +x10DQ\LF]`C_#1c︋<'E$rٺwy%ҿ[%nޒg,IOMVrߤ@ +1)S&@g<qa +endstream endobj 28 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <>stream + + + + + 2018-08-06T14:28:49+02:00 + 2018-08-06T14:29:44+02:00 + 2018-08-06T14:29:44+02:00 + Springer + + + doi:10.1007/s13218-018-0554-8 + application/pdf + + + Springer Berlin Heidelberg + + + + + KI - Künstliche Intelligenz, doi:10.1007/s13218-018-0554-8 + + + + + Special Issue on Answer Set Programming + + + + + Torsten Schaub + + + + + 10.1007/s13218-018-0554-8 + 2010-04-23 + true + + + springer.com + springerlink.com + + + + + http://dx.doi.org/10.1007/s13218-018-0554-8 + 10.1007/s13218-018-0554-8 + 1610-1987 + 32 + 2 + 101 + 103 + journal + KI - Künstliche Intelligenz + Springer-Verlag GmbH Germany, part of Springer Nature + + + 2010-04-23 + true + 10.1007/s13218-018-0554-8 + noindex + + + springer.com + springerlink.com + + + + + VoR + + + Adobe PDF Library 15.0 + False + + + uuid:2cde4f9e-08f3-4194-af63-84d9b1b2bbe1 + uuid:91ed98e2-5eca-4557-90a8-8894a58fbeb6 + default + 1 + + + + converted + uuid:2cde4f9e-08f3-4194-af63-84d9b1b2bbe1 + converted to PDF/A-2b + pdfToolbox + 2018-08-06T14:28:51+02:00 + + + converted + uuid:8416e023-1966-48f5-a1f0-c7fc70d2a34a + converted to PDF/A-2b + pdfToolbox + 2018-08-06T14:29:44+02:00 + + + + + + 2 + B + + + + + + http://ns.adobe.com/pdfx/1.3/ + pdfx + PDF/X ID Schema + + + + external + Mirrors crossmark:MajorVersionDate + CrossmarkMajorVersionDate + Text + + + external + Mirrors crossmark:CrossmarkDomainExclusive + CrossmarkDomainExclusive + Text + + + internal + Mirrors crossmark:DOI + doi + Text + + + external + Mirrors crossmark:CrosMarkDomains + CrossMarkDomains + seq Text + + + internal + A name object indicating whether the document has been modified to include trapping information + robots + Text + + + internal + ID of PDF/X standard + GTS_PDFXVersion + Text + + + internal + Conformance level of PDF/X standard + GTS_PDFXConformance + Text + + + internal + Company creating the PDF + Company + Text + + + internal + Date when document was last modified + SourceModified + Text + + + + + + http://crossref.org/crossmark/1.0/ + crossmark + Crossmark Schema + + + + internal + Usual same as prism:doi + DOI + Text + + + external + The date when a publication was publishe. + MajorVersionDate + Text + + + internal + CrossmarkDomainExclusive + CrossmarkDomainExclusive + Text + + + internal + CrossMarkDomains + CrossMarkDomains + seq Text + + + + + + http://prismstandard.org/namespaces/basic/2.0/ + prism + Prism Schema + + + + external + This element provides the url for an article or unit of content. The attribute platform is optionally allowed for situations in which multiple URLs must be specified. PRISM recommends that a subset of the PCV platform values, namely “mobile” and “web”, be used in conjunction with this element. NOTE: PRISM recommends against the use of the #other value allowed in the PRISM Platform controlled vocabulary. In lieu of using #other please reach out to the PRISM group at prism-wg@yahoogroups.com to request addition of your term to the Platform Controlled Vocabulary. + url + URI + + + external + The Digital Object Identifier for the article. The DOI may also be used as the dc:identifier. If used as a dc:identifier, the URI form should be captured, and the bare identifier should also be captured using prism:doi. If an alternate unique identifier is used as the required dc:identifier, then the DOI should be specified as a bare identifier within prism:doi only. If the URL associated with a DOI is to be specified, then prism:url may be used in conjunction with prism:doi in order to provide the service endpoint (i.e. the URL). + doi + Text + + + external + ISSN for an electronic version of the issue in which the resource occurs. Permits publishers to include a second ISSN, identifying an electronic version of the issue in which the resource occurs (therefore e(lectronic)Issn. If used, prism:eIssn MUST contain the ISSN of the electronic version. + issn + Text + + + internal + Volume number + volume + Text + + + internal + Issue number + number + Text + + + internal + Starting page + startingPage + Text + + + internal + Ending page + endingPage + Text + + + external + The aggregation type specifies the unit of aggregation for a content collection. Comment PRISM recommends that the PRISM Aggregation Type Controlled Vocabulary be used to provide values for this element. Note: PRISM recommends against the use of the #other value currently allowed in this controlled vocabulary. In lieu of using #other please reach out to the PRISM group at info@prismstandard.org to request addition of your term to the Aggregation Type Controlled Vocabulary. + aggregationType + Text + + + external + Title of the magazine, or other publication, in which a resource was/will be published. Typically this will be used to provide the name of the magazine an article appeared in as metadata for the article, along with information such as the article title, the publisher, volume, number, and cover date. Note: Publication name can be used to differentiate between a print magazine and the online version if the names are different such as “magazine” and “magazine.com.” + publicationName + Text + + + external + Copyright + copyright + Text + + + + + + http://ns.adobe.com/pdf/1.3/ + pdf + Adobe PDF Schema + + + + internal + A name object indicating whether the document has been modified to include trapping information + Trapped + Text + + + + + + http://ns.adobe.com/xap/1.0/mm/ + xmpMM + XMP Media Management Schema + + + + internal + UUID based identifier for specific incarnation of a document + InstanceID + URI + + + internal + The common identifier for all versions and renditions of a document. + DocumentID + URI + + + internal + The common identifier for all versions and renditions of a document. + OriginalDocumentID + URI + + + + + + http://www.aiim.org/pdfa/ns/id/ + pdfaid + PDF/A ID Schema + + + + internal + Part of PDF/A standard + part + Integer + + + internal + Amendment of PDF/A standard + amd + Text + + + internal + Conformance level of PDF/A standard + conformance + Text + + + + + + http://www.niso.org/schemas/jav/1.0/ + jav + NISO + + + + external + Values for Journal Article Version are one of the following: AO = Author’s Original SMUR = Submitted Manuscript Under Review AM = Accepted Manuscript P = Proof VoR = Version of Record CVoR = Corrected Version of Record EVoR = Enhanced Version of Record + journal_article_version + Closed Choice of Text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 33 0 obj [34 0 R] endobj 34 0 obj <> endobj 35 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km +endstream endobj 36 0 obj <> endobj xref +0 37 +0000000000 65535 f +0000427173 00000 n +0000427469 00000 n +0000432809 00000 n +0000436234 00000 n +0000436491 00000 n +0000436907 00000 n +0000438347 00000 n +0000438724 00000 n +0000439021 00000 n +0000440149 00000 n +0000443574 00000 n +0000443833 00000 n +0000444250 00000 n +0000445693 00000 n +0000446072 00000 n +0000446476 00000 n +0000446524 00000 n +0000447718 00000 n +0000448268 00000 n +0000448519 00000 n +0000574991 00000 n +0000576189 00000 n +0000576674 00000 n +0000576922 00000 n +0000718171 00000 n +0000718636 00000 n +0000719094 00000 n +0000719333 00000 n +0000719426 00000 n +0000719462 00000 n +0000719494 00000 n +0000719559 00000 n +0000747263 00000 n +0000747288 00000 n +0000747459 00000 n +0000750139 00000 n +trailer +<<815A9FDA6798374891628AEDE8067D2F>]>> +startxref +116 +%%EOF diff --git a/biblio/annotated -- 2018 - Foundations of Probabilistic Logic Programming. Languages, Semantics, Inference and Learning - Fabrizio Riguzzi.pdf b/biblio/annotated -- 2018 - Foundations of Probabilistic Logic Programming. Languages, Semantics, Inference and Learning - Fabrizio Riguzzi.pdf new file mode 100644 index 0000000..ee1a00e Binary files /dev/null and b/biblio/annotated -- 2018 - Foundations of Probabilistic Logic Programming. Languages, Semantics, Inference and Learning - Fabrizio Riguzzi.pdf differ diff --git a/biblio/plingo/2007-ProbLog - a probabilistic prolog and its application in link discovery.pdf b/biblio/plingo/2007-ProbLog - a probabilistic prolog and its application in link discovery.pdf new file mode 100644 index 0000000..e6bbdab Binary files /dev/null and b/biblio/plingo/2007-ProbLog - a probabilistic prolog and its application in link discovery.pdf differ diff --git a/biblio/plingo/2008-Probabilistic reasoning with answer sets.pdf b/biblio/plingo/2008-Probabilistic reasoning with answer sets.pdf new file mode 100644 index 0000000..b2cea16 Binary files /dev/null and b/biblio/plingo/2008-Probabilistic reasoning with answer sets.pdf differ diff --git a/biblio/plingo/2016-Weighted Rules under the Stable Model Semantics.pdf b/biblio/plingo/2016-Weighted Rules under the Stable Model Semantics.pdf new file mode 100644 index 0000000..0385779 Binary files /dev/null and b/biblio/plingo/2016-Weighted Rules under the Stable Model Semantics.pdf differ diff --git a/biblio/plingo/2017-LPMLN, Weak Constraints and P-log.pdf b/biblio/plingo/2017-LPMLN, Weak Constraints and P-log.pdf new file mode 100644 index 0000000..a2edf25 --- /dev/null +++ b/biblio/plingo/2017-LPMLN, Weak Constraints and P-log.pdf @@ -0,0 +1,2884 @@ +%PDF-1.4 % +182 0 obj <>/OCGs[185 0 R]>>/OutputIntents[179 0 R]/PageLabels 177 0 R/Pages 17 0 R/Type/Catalog>> endobj 184 0 obj <>/Font<>>>/Fields 189 0 R>> endobj 181 0 obj <>stream + + + + + application/pdf + + + Joohyung Lee, Zhun Yang + + + + + LPMLN Weak Constraints, and P-log + + + + + Copyright© 2017 Association for the Advancement of Artificial Intelligence + + + + + Proceedings of the the Thirty-First AAAI Conference on Artificial Intelligence (AAAI-17) + + + + + Knowledge Representation and Reasoning + + + 2017-01-21T19:38:36-08:00 + TeX + 2017-01-22T14:17:33-08:00 + 2017-01-22T14:17:33-08:00 + Knowledge Representation and Reasoning + Acrobat Distiller 15.0 (Macintosh) + False + This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016) kpathsea version 6.2.2 + uuid:f9438abe-a97d-eb47-aa50-07280cc154a0 + uuid:651d0018-93d0-d74c-98fa-a71080c236b3 + True + http://www.aaai.org + 1 + B + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 177 0 obj <> endobj 17 0 obj <> endobj 2 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<>>>/Type/Page>> endobj 18 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<>>>/Type/Page>> endobj 35 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<>>>/Type/Page>> endobj 38 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<>>>/Type/Page>> endobj 43 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<>>>/Type/Page>> endobj 48 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<>>>/Type/Page>> endobj 53 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<>>>/Type/Page>> endobj 56 0 obj <>/Font<>/ProcSet[/PDF/Text]/XObject<>>>/Type/Page>> endobj 211 0 obj <>stream +HWYo#~ׯ#;XqxXav6XlvRVc={d_nY3,6"+~3=77c72V15$W jf0z8^=#$ Cax6@ߗ,+l57b y +Ky:XjJ!u DbkfsnưG- :WܧC+C74yl}uL֦8ΕBo6)Ž]MeE*SQWKi'Q]oRRܡqdʷ7FQ[ͣtvG#eY^NRPzfdضV*rXR9V`J{B~_Vr/X cZ +kJAѲI%X;J ti֎]GU|`*DrTF$+<^C|<.h&IlF΅5m2Tvagqtz)320 +Y4> סqBw( +.Iχ8 ߑeEEݏ<{HGNGB +Z8kOD=~`9-i]|Vezv04)1w>;ֵUuc82Xkg6֕C$#*U6l]qE[\Bdc]\مҎ"PB0^Jg pUY-J[,ŜQ Bm$Goݎ(Q.lEkqx/#/p7꨻ ew;?yw3. 7>! Z ?^>kld'*Q[tH*kvEs`%gҮhdN1;]1NPByg+A@礬AM:_ʴT'xiG8.WNL 2~}fNL$@tf( 4ױT"o NF0)khD1S0r +QO_UFf(?"[5'a(s? +JUHEndqb{6| Bm;08=7Z Š& + /!jv{ߌ{,dhm75l;?tMw%Fb p5hT=7T(zE(ˈ\ uj +?"nh9nq%]+]URG`+(´:n03Q:BKeAFu&+/Gy6>{X#йW؜ylnB3 +"ʱ<Ү0M,ww\MTgJf}Qծ wKr|9FsrwA< +rw:Cm`tV0[:;!TD}4;bBNӫX9LZ!)ڹ;4,Cv-_ b.]@Da@zz+vAE<"-eMi=׎Fgt:a+v]mbG1OMgbTc@Ub*.(R]@\vtVSҀVe/Жix3R?&-PDW@+=1UuŔ@v+/C%<qޚEmדlNIm al4tL^iYEl)zՑAأ#TsCQ0wKbCyʉ 4ngV~|{[&هxgӰ 68am'Y8[)..o(^op-BHbS!Y'p ol½yی]KI yςjEq#VU+ 0ca"|]GϠ%%op2uaMN; y?E_q{}dAb2y|'γG1ּ$n\x+.Ch7!ȟVଖ:+uIMu"c:+M"3a?q(ZdqNS +=.R Zz"/NM3^\ݭ!by(0=6$IabO_  O"zI0/ (Y~ UgZXhZLjӸ,@놈UGă)3Y4YX&YZ,.+I6Mqؿ]La~N=7aWQ'H{bFcEܹ5Wrߺ8 +Q^0}L4,.tFbǔ Z95tgp:̐_W.;fq#U\~Wꮆ݄E¦IQnM`_<=l]vh_\kjI +A0 ݻdY:l!_YUݲ=vwժ̲ +bczpH*Hii͞_UYiJX$RP$oAgA(y[ל BHY""PᦕK)gq@0pMD` <ɔZ%CJAgyeCMWf+ KmYVM_{H}^ZUgo9cxBU4ܾE +j҃Bok]JaPjxh;Y$\DsObi6u{ɥ]SeSwn#IH|!)-U"ےu,*UNMNPJ\eܴOʜASϲY*[emxeNȉq_uxy([{}ow @JB蜻<bTWs>ː] %G 3C"Y˯kQГ H Ǎ4LJ/r*q18]!Q⥂0r'g8Bv |.^V]T.EAрp8n8O*@;v#(`\䑜Z bGɸCVwΨ"X"0=鰗'dQ9wvA;_]M/aaϷn<ҊTj5-7i kn2QH?^DˎCTT y9yiDž>p,b\W^ +?I$<~VY(4xfx^-*~^Tygl33#Y૪ff|ry-HeU ]9AH-RұZ@tHˆґĞ+lbrlU IG *o٬g} Ŭ}:+YUɩe>cOgȾBsZZV*A +:vg,ɻ2[HaAЃϗfw:PET#hW8jeccw6/ {"wxoK\ӵb׫r.<:e(X |9 bݩzqB^$N~>J)+blx]qFI,,&"T! JNGfmWy?}4~ͷəCP. uPg@Oa))Z͗efQDp_4.qgX{<]^6fMҽ0C棤U!N;cmK^G'~shv02>4~@Q!y42H`b?3ReKa* tRL 'CI.dx}Ff~) KME?S&aQgZJܛ}knVLq>g׻.ԀC/!k2M[2f&B&K>/;0(` *|ni#^>!)^{PyB'q OAz<(a%m{Gf6 eDTƮIUIh;~"OE,سmGb` sC>?VZsu!λ?i<'|l(ˮ}H9aa(h"p(A'C8DLāfCr6Æ_C /c}$AROG +WwߧRI_ LXGS4@%yFvW^e3}qQo۞JT`?2 (DB,ha(L<)=_iuTI&RX8bѸ8{Qar`_vSsSv +mWGʙ6$1̍Nގȇ7lnm  jF&bg²tFhH2־rZD[t2ޙz_{aQ|GR@xne"3s>C%P:ckmofKqx|J}_N?y@j?%ߞIlaj? +5v_;T|+9VGp endstream endobj 213 0 obj <>>>/Resources 216 0 R/Subtype/Form>>stream +H2PHW0PpL R5PH  |d*Db..}̼|ݠҜ"K4.t 5351VI0447Tr 0#8 endstream endobj 214 0 obj <> endobj 216 0 obj <> endobj 217 0 obj <> endobj 183 0 obj <> endobj 218 0 obj <> endobj 219 0 obj <> endobj 220 0 obj <>stream +H twoQk̄fb$Kb07CD6$&CP1Z Z3TU(mX:cPC-I\9{y'yԨd``2ڠ,cāa b.zX-!mHRO< >ꤔ䴵֔~`uqRnKס]["Z0(T9σbCdeN~uxnB9%JSOS̐Ofd VMCX6!? P蒡 X䬢⢂B$$椲|0,)x3 mBܢ”Y3ߨm_}Eb'R~M,m˿I跠BqT::; C 0lP`1,Oa .p(4)8 g{7'xCHQ7zX&LrQ24E "T}h7GatCWP3z~A/1X;EbbTlasj +ǎbc7+m};k=$(L'șbrYG%?dn ܿؿڿ:@V`z`~`eK +hJ¨T4՗@ PAj +UB}H}DPM.ju:G]Gsh +m]h=Nљt]D@Ϥ+t5@羅ҿ28#1aL&Όcr_Zf3g0ee2ϘVciVdu=۝Ʋ6N`s"d?aFv =eOWf>}!ɜuqQ\,%r#tn"q\7[Usqk:nkNpg {<+w#]~?OA>/| 7_{$?[A: +B{!^0R+L& ӄRB +aY-FpQ#Ahh8\#'NgŅRsN#OM5HMJdHh)NJt=X>ji Jg+5ٕ;=r*gSF^%!oɍr|U#?S@+^Q*Ô?)T,SV)ʷJҤ\U~V^Hj悔?Ih5S3yuNSw yzO}DiZim6\KҵqxmekS"X+ʵ +m@[j_h۵Z֤~֞i:u^tWw{}`=YO'yz^:}C߫ҏ&~O_^6$4]#ƈ3FalИns*Xn-.c`0kFxj$MTM`QfL2G͠mrsYeVuVA>E) r'|,׋[k9G,~=}OzPHfoHKi/ݝ^ޘޙޟ~#~z_3vfYfmfGw2fΒY=;>;+[.(+z.i4L"%V%IҤ&i4ZW /MfH;)/%WiLZ!IvyitH:,ސޒ.Hr/KdRe]%Os\ɏOg=!|J~G@ܮW)TF+So+9Uje]٭UN*Uzjo:Dլ:RNWEK}X]PݪRݫTOo=ezK hFklmVіjhnmGvVvMMSh}>CDD_oз;}!~Z?_m7!ƽ՘o Xfͯ)Ms9˴ͪ'.yi_MyZT,7x[hÄYJ +Vq4Co)v%oá/+CT׫tTVQ{]qJU,{E;'LVO) mAs[¡Zs|Ym PmT ''JFC$(gBR A(cB80H_GbUB$d*1JQ18_ѝH#rbEV{X%(#I" %ɡ6 JRRJp <)AJ%8+YBY2k]F ѐ 3Yph ~j :ߎQ#;F91`acT((<*qr3˘8b6wv$1V#˱^цEXn|hFߐT +:bڭ3.&:bڭ:CInY.^I.m QLھb Sr`Ϙc4lS7fQ㘇c/1]~c]N@B p *P$Ej$ R$#MP#%y T&#ma:_t_rEt L0Q3F-hdF8s&|kin 'S:nn3%6 n!Maք9t~; ȕo$>9dzZB62µЕz4)6*ϗuP}>GxV"OcK_ARo]|d%;H.S\'/'8O7$ z!rknG?rQH#/Mg8ěI^RHȢKcB:*A{.ƪ{(/jA-EöSArj=G=>tt':4a˯B6vftV V~+uh7: !|?& +&:s"}:jpG1u 7+d$dDWNQ/(`?4n~T74>r'AlŝѸjܡq33jx¯^쵾oh$w\!>A= ط&ֿM&(m< uc;{ +$; >՛^?{<=/nl0: ާ׻όd(W{q7ϗ;FDٽ6uٗaxuKSv7w;-K{ݪGddTa8~Wri약QZ]߻~۾?C~վx e^|,9>7Cn& 04Jjє1Q1!d)01kkkkkk n-p2111VYa֠@,!1\l;ɬr"s"s"s"sr .'ϘvB]%\%%Ӓ_rsi;l5DDDD6\ޒ%cKƖ5p@B݀KJ|Dze0e0e$&}ž}[ :"*A"yȃD$ CȃD Q"HAń!HFu^O[}_T]tuUT'p8~8ui{~DSG&,1%&7Fi,n}&&^äȍ8/r/rS[Ff1Q0K̊nnξ p p11111D!F!K%p \.KRp)ȌȌȌȌF8Š<(+ʮH(QXFa5 +krp9\. +p\W+Jp%\ $$bb""P"H!Rl}ZHW5444vNV6QJp]S*Y[*Ҩl]-h:.M24/]0H}=f {&[ƨ0=uvSSY`bLbLnRLYbV5&Saj`cbcdcdcdcbbbbbbbbbbb""""""""""""""P:a cFDB I$$DB I$$0ۄ\rIMQHMMKKKKKKKKKKKP݅se ӬY\jGkNap6rN;7QmN7ejP,*)Ga*OݪMjP,#K"VÊPfG!*PAp@B%ʪPOG=6f^jp+ +U(B=vWLpYJco`2 +cJLiXY"PGiV5%Tol kH G8G% ]XHXDq `Eސ;n팃n̻ĭݻepo1 9T +Up$ QNi75-x/s^{{|^U>jg.=s3|_jW>\{:dl~"d_{ ,QGא+#j"hxf̍k|΍f1e49 .]5Ig&vw)̀=Т|5+>̷Mo&t{j3'}kfka7ed6ېtH=ɐsސylgS;Д y7jVZT/jvڟ;ޫA[>>Y/ݩ_վjT7hC{kעvb~BgVnߍN0wQ;lR3٤+7PlnvZV(p~iԛ +s_]EhAiwG5qqD (P aL +Z !Ь +Tr BVDQkв>XZNJcu՞{sDWOm-V7 $~̽#0}j}f``gee˗򨻨 5KApCnC AnDyk^Ygǫ"E^ _^P3 +j1x=@1(4"H\D63X,!,z 3{F{R `p!?U +t [ dXPUo4;mz/sH]BBaPVHp(EV(9W.ފ5 d&!'S) '饜LbN&qMoIȫXT8 @`;?w~|ח ݟU"YXt#`e%̳ibEҋeND>OzO/h"sȜ-*Ћsz/Gω9"s_ |s?32Cb /T\?Cd6̹"_97+kl_D|Zwt[-4ōt}?9i.b #"MRw9'4<޵irNe\y;a+s5,¸rYʅ rЍvA~Xt8'IRiiɓIR,=_KZЕ;[:0: QWlNζڭ;`,VW =Vi)\Ns\8+Ê +`["g0 Qow9:|T(TNLhghȘ!wSX%'/ߌƾ>XXJزaŽO _~.^1UJ$mȞӑ/ewxܵFGƄŌy5͘51bξ땫Kc={iB#DžM[W#}Mlxs00p҆6az%%bG\I+>M:<3yI䡔4Iy=$j`jTm_HӦ5^CҌ CERm:itfj̎-3y&0<)e,KV";*(*)#/s^%Rq9+"Fy||C򋊉LS:A¢XXHbb2LW*2K9M,TVerK*FePF{?:JuFW0L1_*|\ w`?x ?ejN=Mm.uWG(ʄ@h ͆Lb@r}mNB3 'JTX[`; {gaI_; CA<$G{H7҃DiOdH ^hjhij5h5k4kj>\\|yyFEPRAwVt= ݌v=h/Goϱ$, -̎c`+l9v.`Wﱛt < yx>>_Wv܅7x_Ưwg% D.1C 3QI؈ZXO|H%G321@%4|9sB,'k&r@]Vr'<@"Og1+5()0Slj.ZD9fEQ5jCݧ'0BӉt:- rh]A;z)oKmz~HLƄ31L!-*c`f1L1S,f*S40˙d2Iwuf 2l&Relv[V:b;ٽ^ao#9%s*(.p39\1p6{kZ&n31}K7=!|$?OI3\~&?7%[|of}e~??׆j%hm6QwKnllsƟNLVWg7z5m-hPJ"ڈ=3*WTIiZ^#Y.JN8ևoiǎ:ZR{n^2бjw!c6$ѶNY-u{%ZRݥ{åV;W򻶖M7SB^vi]+ѾrsٮOF=L]ܣ83[k 3'3Y]"‚ +>* +C!`c`" V. +(⢈vn{nԎ==*Molh)8-g-O1~"GCТ,myrk:);N% _J@҉㝔 YP.k#OѰ\ [Mˍ:bMؽGa|x¹`$@ +U=dJ-,S{]ðC|)WmGEfM.Ãp6\ 7x +灍`A`F+30΀0E0 W095&2gn2; ܐ9]ϕeͮ`?L=&/sr'R|IIDSp]GhS#_pa8p;KpM@20kK8.?;΄݉[Vfk|[M\6`E_[֐2JF +UئF,9b W'&ls0u4OO˛^f굮4̑cOYLE$. 6}Qu=p<pf J"ynX3L޼UK_}|g]'8hQCθ,&fCP T#J,&A9]˓ǂ< Yu{+!$g{S`?~y U<_8r^ƯSTN$?޼mگ3RAgQ"HLX)6 + +'+rXNWS@uIU4 ͏/.{rg+m~?ח./T+0eTڠ& +=73NA_zfuA]^A\=?TDa N=JLݣVexKKPfJby6ָ6x;n<3"./4.N`ls\5*F)U)y2)=4|SE2 z*-'ǟ>=NK=twm[yr?7cD 4y'S7Q.."_3.i~laҘpQi8?Q)k6;oW-v,%GDc @`GXbLAG\fu0Qvu"yY>=tgݾ*Zgg^wx[Zׂ_Km{%]'*Ȟ"P7B(BQaWG"(hRa~{auZv ԯZ7a}5w]g0A PIffW+qiuBQ ׮'bU:[KӍdt͑E:yj"f-fq:s9'S*'(=oM$$$ /A +*x _wTrKkPnJ晝^njh +_׺J"Xvt:[1 „Ta&JC&֧L;}`\6"Ҥ %tCtvz"RhJn=D'an ;E NsAÁ`;~ب}b:jeՊ,.Z&Iiuߧ#G͂P2}yT{c bk a i5_w RzO1+C֫H)d`B#9cL RR܀ +\O +D@̪]U Yt |,WK:9)Zh@RgP9ѻS91,$؅Ulmh7w׳l^7EX&e~ג\om nRxXjOF@Gh>49ɒJ?/'u&" `-+rHw"EqY__z\\)0s;*s ެ0) L/ɩX@am,=;ʛ|?oƉ?@;URN묕F 8gW(QΫa!oYxz x:0R88 LuC[:#O"W>\ !jK(ͽHh VX,vѩZ،ǩ7ыfCB?!t\ E<55^B i38 +&k1TVq1MMZUWTd0BHb=ܜelh m=1|xHѰV,z妥~;t8\_gA61`p'~w8:}{G`/G6Dھ]:==q0S E+j]$49~sTN\]0£#g7itea}!&[x!Id2K ۡlgqeu.q]_$\)qp_y!_cHXեڹ?OCFn@\.g rkY +}LeIo'D2^~'բ8W%G6"p%Z ?牐C! BndauUu6Pa;HwDBJ(B I&ejhEyzf_f޷Uӧǻ:YAFzZ.h2=W^mѷ޾󝬢1H^ť84bZYUw2[ +3y +<8gpgB1pØZt9ZSx?˻mtOoifsP1|() J׏QI篠+(x !@ +o.I#uIFS +=*83.[t1~Oy '^u`1}`t1oZiM=_kӰZ aSv6^\$VTrF&⩭B;4b[6_hk2"gQB1m4@melJIO\V]<ѫ,645JeojeƂ yx#Va 29%'!?l}Pw[5usܰ7ݪLNyYD/@A!! HBB ! Ą"o'(ZP+KKǹNz[~w77evy>~3GǓ;iXq}\m]1fv<`_<ܡҩPߌ0[d2M_^S:OjNeQ42,nQ D/ b O~IsCjjy8/u PMk$gBNn-3809=r{Ht$WD?DDb<4#irr)ny6JS9 j:YQd(H/,M( 4|h`"NFGKkLah,kLkҏxxa; gQOU_6N<7І4φo2s쒚 YFnF\Y +1=_/hӎI펊J;-O?0OĿ1yMDyN{DQIfQZxY;)?;4G\=ط + Ú6.s5dE> vru`#ڧ  lqҍu ;Qڦ6hwv^6c͵qU%I)Ԣ)ɑGNkZ`S] +fd4_첰{'XdiuB+k3/^aa0:NƨQ&ϪJ#t6X_.CH]3a;iuuþCۛ/HŲg-,j/`㊅Ӗ-|:%bG{/nkmn(/ҡ@ts`]]+(NHXŋzK_V8%yq.;}WmIX){kSN4 CVUʵٻKtj4R˴ǿ)ɖҔ( -2ćW t}/T bEodi`#>KP?ۣba&'1yex|Gq{7XVG ¾l`]/_1;Ft7BY3j~:4S*+WFP7 hs~y=j`u=SIVM]l(Ɣl +w: [6!]8 c~y +Mlgv:N/XޅŠ vmHEV$|;u1@> yFYhpmꠦo~y}i޺f%C&MK^NlEo$$3} xiw31MJEf{s"-*2̺|20l Ϩ[a6ST滻J޸γԭb(nzMcWlѬ^NJ֔!@~_ƯKwŽ#g$YwO-[Jrl~..@?:6-,A_L yJRTTi0RUci)90c-k `W%f'CDZn LTNݚA!I`dfc)cgѓkXDP7j;,:\*@TNreFu2()np9ߺ:(I!BBB6e+hcHazkyMɿ_2U:ZHg sL{q>(~O'#YmA~#jtO4ʃshn; +R0)52xd/EFe9-F~j"2u>03> +|x4 q1Ga,*i?8Ѹb\˷,.ipM~ؘZ̫^ŃPPc9ҲZIpz ^C6W=eLkV0h[Nt{.3%nq(sq8MXӝ)\R\Bg̺Fm]UxFE4)S*}cI\N3QRV{&*l; tFj%XVfncDp4Pr-6~])@:S%95)1:/^Ojq Ȑxn^Wfқ2@Ӑ +64 $3cDg!%'?Ƨ٩=G "ײ%ry44N;:Q>l:/GMTX^)MdD08,ij +ȵXY6_\8kL+[ =ҖzM}Ƌ +}`-Qeg{\sjUh8sup9?zw>hXkBLezASUNldD^%^7PIJ+>8(\*+wA ߀W;XJs#s-(rοŸ#3bh@Ҁ7ґc8묖`ҡVHӺA-h@!'y'8v8o;<؉c$N8NH!5B4} і6mVZuFitHtWGWW~XBVss AQ7o⋏l*0X f0H4hX>R'{:},$oi^{]5@Ű[Ųa ux(*z.x;fkwJ;|j֤զ*s| +MVŷ5-C+n"wJUPԬI y-"M~g^FGuzhIܬiV[>񸫣+)Lcv Pu:VּlīԏO)=,ѹ\&i/*M^i@O5h5lC=Z뾧RƚIcb +Cپ0hHvw|&jQE5>,>#|z=0*P.1+ъDXf}hV qv'b:MTLV@m] Lm &S\{Z>PsΜSD#>?">^%r&/bw%o׈ĶD5h`mI!i >/d YR"q5ݹzVF1DK Rgulx~.=^r ʀ//&6,/O~w~w|-l3v_giq-K.`2]G8M m{֚I*e<Ȅ2!^ʊ@.I$7i%̜7ye +KK)3#0a#? ֐>\fD^?Y8D8=?Mt\wJ}Hf pQy,cyLWY^U4[E7ZX)~%җ^ۀ;2[8)CJa?m!/ l yG*w-hDYR +r +mCTi7kw;?9N #k&42Vw2T+*.kCM^&p8R[Մ9NVtT)ԸBG|*Z*ԑ#+) +7#enn.R*q"$L7 C;,u؃* OgRhe. +#G +^(( BEpآ*K!{ߎٓs0·YDn̤0@L(&ɡ)`(FGk]#ue+d42cѩ٬]tE*g(ϯWLܟ:wr`|1Uiגժ<æ&V2vL4qڜ6Ly+tEua =)ٝ$$ƉDDZhQzAx嶰䶰\˲,rDc[mLCg2N˜v컐?:s8{=3&V4^ѵWhvh.amLH$,!KX7Vp۵jA>NUSBaF+Nٳ6Tq`ȒYCM gP! +ɀͧXwp "r8o# 5U`Mbi.n9BlQVDuќ4%dXhHIVLL4rPTm (ңm? $Jo*}.zۧX#+-sY"ɭYEs\{OYnj ۩]ttQd^ž_U?es $ *N;2umVPʳXfn-L_!^7cֲ]D,njh!T\_{JR3nVEiS Z5wr5"TdQ<'뱴p.H`YV/ !CP2z:.%G.gD1CO-~l(U߉0h}^H2q#vzX\K\+ =/ $ʯ%@yCM]Ws_ՠfڜ ~륌sP[5v?I6*9ttgSE=(cLR^*/ m1;vԕ;ZڍHȱNZSeUI8@؉Mlnz@B^OBPBF9%rg: +(]ncBZ٫>;>0!^@zldH4CȜ_@zW8FR1# q@H-ՋNJ7~;o7TP^ X<`Iϫ;l[&f )%(sF2K!~P [@Ns힘;U:j0Z MtY<'I**f> FbiFùނ/Xz歷XOL;P;PJCv]K. >md"NiXH RA311>Vxs+[+p%P;LBJxLO+Ӥnhv?# -';T\ZIkIDv;,IN~P=6 +tRA,şT43AH<\(h|ލ"XRX00Nl5߬z/622U/Ɔ#H1\(lr1LDŽ/viS b2рP}+|lx9~%$1(jbUaW) :ݠÇ/ X̌р_q?.*#BZm3$upgLbMCi9 +/դZ֩2dqcRsvsFUr rcFEFSD[- s>+ָ#GrKUAF\-*1_@ЦiZaD+?7L9,xo{ʯ&_ux#^=t ϸi Jz0^q ߼˴+-6Lh +~P0h] T;poPڋr71YLSDAr/{m护,P|7i㤃dj:Gm9aթ.vnKK!!FN8I(Jude8OQp #""!!#BئW"# F,EB,GD,CF؃XXXX؈0؀Xщ:LD8.W)K + ) eYFwJA\r,d>RRJ#" %"U":2"~aR8a"Lfr j+ɨ#vlB1PT8SQǣWrxnHD7(}P,C(C89T.ď 2G:QTɨjP uL)ǍO+>]hLF&L4)h^AM|4h*ьm@FCh/}ΊnrtNt@w Vw߉3WE.|;A   /bx TĿ3h l|"1O |ƤILAP6Ay#{aHv'^ D%DzI0w ؂b[v`ž((3Q D'j &8"zG8Y8щ8[؈'bXbM#n".Q+/ٙ6D"0jaF:3Q@f0ukxA ۙ#1$J%kII$ /3G*;j^2OϼGYea +I "0i'yE,Ž,cM~ז,g,Ȳ,LzH# 2qȸ l@@EC<99 9999 y^"S _"#_B2 L#sK!3VVb^&Mgd]@7O\$7䥑wq@~ (`#))RR4 qb=aK JJfQRK J/Qfl3e*8'Ο7R?BC hE&e ДJSM4kFiV\A)2Z;Z>.pYpMÕWY\ønຍ[;w$D qg݇{}#<-̞,ׂRw B8#- +Aœ sV0gPâ.8<5Pa sqx$i`.x$idZjiZyi +vt[}}7}Gw1}Wo跕/mArFdL'ov.L˄BFׄ0| K }vv{{KHc'j~LLfb0M&I?M?h$4D*\Na܈ +&*(QZI>ډv'Do'(ƢСXn(3Ĕ[;XĶ89q:*;G|v'% CI!@B$ZH"$ $)y$5A &2uLFrH""ɝLgJS:H!%)@RgzGZ.TSSZ&SIHdXIv2xDFOPRRҀr6_Mf?2=#]2̟|T*TYrPYQUZ +UvTQ]@ՁިǡCG={P_Fd%UI}Ȏ&ȾAy,rfJrǐJ} /֏iiw$o@Sf hhh#Ц2uhw=!KGgE]9莠zQmWߋoO !0cX +z 0\(9g`X ab)S)j05`jtS'"?| _K~?E0 `16g1? +")0RPA +SЉ,~XB`)%XjrֱXa]X;`m<lVm9&lZ['غ}$Uc߈}/vp6cOpwNIacٞ@/9K\ƥfY7xם"[0TU#]dS޹ͯơ^sDi14N3שI$v5N2FZ%/ +~%y(%ܑ?- ߤAzWS< >&n,ݮݚ\7ćٲ5kT{->Z}ҜdIY}I\+`C5Ե=JN.nĽݟoveٟ?ȏv 3>2+^be{X{tq_4~9LR,8e殐3egC4 rY7lx|6OUWu TW\}GgD˒ α͢3/WEw's+TQtqiQ\Gz%>mxfvjz:JUhܔ v2f?UŕStWb*hT5Qbb+$:`XTDi@[nhqhFePЀ H(1bFz^;g +3^ս}T}` +_̺Ys.j/{&vnn贜k/?_B:w>&I)M]k{W5E vs>N) f7ޗaQ_3`B-e +}LP &LE<, +7p\ZV\X`j7R%z !M$F9X.PD|@<Y&QGIVu' ]3z4XG4<# +lpxr( @ *삝S<= \ TDhvTKG&I4zL56A*4}%y +-^$k-m\9hP)mdNOٶ\&S?{E'H- + + An&^qk7Q:|Qى" +ɢdo^b~p2Ue0 "WwT!W!E TJS>pd*]ʦ}J .yG =/5 9E{ يg%Nؚ^1ܸDxI^ tmh +Bl$gwo2"5} u^漱l{CSz%֢Z3Cw N;%Ғ9%/V>>=sb.Sa:%v#y5R: 0_:!l; ƑUQp1OJ/-ȱwt 'R +MiK}]Ze1Bcp]@"Ӵ-Rd^+E3qDeFW:Bz5=_ʉC7[7COƊLJ2=\N; d;)DD`ʾd$<;Ot1}ϝQ(/y7zD ?Ijy(|B$&+4^%=1Q*{ d]Ăd%vZ~]7{Kd^&1+0?OfO^;#L$M|`8B8g=HzL%h6f8lt+Ԟ# VG=  vp6co#o?$SFwL0zPe&!]XBh|I6Z9^ξ=UkgxW~!BuisZ4+09G`=gifZ}+q4H3R4y=#fh vf>vƶ/(>a_aW=qW&YoR0 fĕ{bMR.4ǧIW}QV sp!m#gd&O+ðH}`yR%Q +Cwp'\Kw 0W5=./Q`P; +3fI =~CR4gYmZzHh8+TVoSPvTb7%uyBPABG$d!rvtT0Gɐ@l)k.\ntҋG^$* AjYղr?T1btKgc yvp=[HEq[jj"f{3N:]vں+"a+$bIxBB <XVG񈥭=V~;nGws3~D3E^}.XGq]⋐aH@!PHqVbr. +5,mo`Q[dbʴz/5Yזj; WC#$|0Pf!K~ɋ:kOt߇Q]?eV')\q7Ul[t0LO9k0^t3c O2CXgI>A[o,fe^^CאmpyŽЉ"ipV:kjvasUK\FɩlK9(+'C:, +'U,}e7tFAE,~4UvK/`cRBvʠ+XIM6no ߦ{P1 AepxR怖rΠȗ uG{/xGJ/: mu@"Vҋ%cHo+LJOe?䶢%Ã֢Z䨮564,8Du.0^x0pފ}iXkhEaznUtьM:4KzIyzCgG̣߳V,]pS+Z+Moh7t#>А)yT^-*T :ond 4nRBO ?@H\:䓟3v6YehW4{]>}w&WeSff:T+ZRoXy"Zͪ:rNZ+RY5~HKre~y&*P@EWJɮrʿi $!|fU3 vը**{eumFPsF7qQTiTTI=JRڐSBKNklL+*Ykvk%ˑ70664ƸMzZ(JZq Nc}}3UyJB^#?wne7J+ +Z.{ۃqc}Z~!/ kHmzA)JenO٢C$մEWTj^_04M[jP\29 KO`,ΤBcI2 +Lسw[m.c"e%Jgs) :Fm5v[S5]"uzW]}BanV9>n3ӣfg/c:5,`߇W2{g+;lD6` =D)R5X$ؗH(%]-nW?;J2 2}H&-jhx{ B(Pgiʮ~ # _N(u>_ S=oLܢ(061&_HFKѕ l6JVP;C^Qϕ*W)z)}^-64CMuX<~(=_݊nǹKad(j rMnI-'m± !,EVvՓ3! p$rh-|$|{1-i'ԾMpqe,6Vxh2aLUSJ + OPHž|$ +s%LZO;f~%GSg:} ͤ` uu7ªF |FkQנ`U^q>|A&v&xp?V/| (`CO%t) V:LG7GwY7 ؃ߜ q q@? 0ZІK@E]&+;&U%QZ^l>>R5;=-oŦ•Չ:mLT@U%'#ް#'{[0'="Mn(: l8-3Eo$ǤG72uoKNtv\ʙ\oy癍g~ɧB&[xs"|uz3 ;~ +cX`ngaOo{vZ,~lM2PpAnNm @҉%\ a ^{L{M D5ZJUżL"3B2gw!b(\m$,::\kR5[4<.hꉬ*;>Z7#m }eyɵE N njQqYQnbCєi:⣼~YGS4D㙰Hp8&&eecE*N72׿qF"4S>Ǵoi9 ][P1oc3;MS6oQB`K==r4GôF{(+vu@KL"#y5/:YDh o]mt*5T j54²8qfg;=m޳ɻ{\{9nӳsye)D2imXB1Bn$bqZ]_*Vyy\.7-/0IwDeV'ÚtYFzjO0B:𳒚xY#$eEKZB2GMԈsETuzl~ n  z#ΖeA uQkrۈ ݃x\[\H>ӉY:5Nnnec%xBuA"'X~׷H(ïd>\ 0<O7gtJ*%A*K91P++W3Nɛ}Ѣxiɮ&,.M2Vl\L:*==[z\ݬn]XԲN@@o+@ R&E +2{uVlyҢ+PeǩSKV{_!瞁{d +"7]t\>gx_23ahd>yxƊEoӋ#jIR;Sאģzks;p:X"`8I+ę_M+q8qn?=׎k0*:4 2t ۅ(0T2 lȗ49}*$\%0r#qQ2$>^Iݏ;,Л $Oa]Uߐu-NlJ&w`!xHB2o*?2ƽj*QN9oWJEloIhHRւpEf\Bؠt3NTKaL+De)L[n|yǝKwU2s&׼ΎfG;{ AlMGK.B$R 1 KHHb2dCxI>tm%$` +ơzAg{[w/kKCX3D6!2O>nMH:M`+U rh2WSV\YNWüep&2Q [q-,{BbHgk ji[ݍЄUIQk PgNԺ #T̲ +1t J۳f/C!,wW먐?4׃iqzm.0;6zmrN>xԧĬ ֲ*.$|@Ҷz`z9..Uxr1etpq:/m6QēyG>pdXŜȤnQxU½əq6W@^(YysZS <qXb7ft2(rdVQTL+,Q F_bu`>T78nѧ=b{JYRJ%*0 +]ô6W%vtv GbM*ХRt́<‚T\ +ղM~.CĎٷ*Tx3i9qd[jnbc8JS2eܪk eOk[4(1X;VY/¶.Q:^5Io!-D쯟,q,3,a!=F}P UT`b +ЌwTIZ^Fay@llI٧~\rqd;,~zX2G~.f㡀*R![[SXw]xNN^/FQQuQ݊Pf>/XUO)@6 7!g-h(tb;܂0wK ԬyA&}D*+C^ q`0߲c֪F~YtBgG剂䆽].Jnr5XS&4) wnZZҤa!+SU#)}],[Klꃚϰ&-d,;m:ZQjNQ*zaoH !$f H@$"'/w8z3יY: fy}};&@>V1{{oם=ʻ|k_ ouG@W0k6rnyPd42=<<)e'7|Rͯp>OB/1.>k5Sm} T55Yxn)r:=v|ipyF(-#ႚfsGr[腗5#RDBV/?5jMjOZ _Øyol!ya'怵)Y9hAn:bܜ0K zVE>YkJuf}׶k.s5q\g +eW&)0:2vp1&.>';6Ӥsp pVu!ld YpQu; BOOD_ Ld6qSU&_jm DSlwy_X2=Iڰ{hŵ~]=(o&\NyC*"hY0Nϊߢ^H@̕^w'~oiW]QP+IL lyoh`{#SQ_dJ#Oꏜ3;~q9~?31[6GE_s]lLDp}6J@m JxYrӖ(,myK !fou!x7E`l3( T҂LRVj +)CMy6 +'GF0jweDߑk?;ҙӡVϊ/S&`$C{pP5ih.*\-)/,An(Ov%:u1 Tre%ɚ$64Ц{đTbP Ԃs}@I DH# &F[u10c W`[O7u Wz52 (3YkD줳 THWԖ +l&UL]af MЇbJ*BSejc0 N(S-m_`P/M#Z5\_[M`In@eљHۏt*QiptDĦnd*#BYXijCrK|`:QUC% EyB6i7sZ=FSXͲMO0_]ӔGt^,o #쎂k."M+;r0lSPG0[E^wi?Wzznp64.Khέ40@ޗ-!"W(UB$4 t]oeٌMxh;|dk?5rG(&1Vn6\其Ja?eqeͿw<~xT:o4~pGX.-v s媙 ~Bd߆K 09&DߞT%kR 3EŅ) +71+v퐺`M`[)U5 +A-z}WvRjv_BW70I*-L]VV 불I(d 2.@^f(zTN&78vp9֥j3L39اsFw8yC\h#ҷ׸Z8&V:pZ1\ GE}v(cv__`A\.W,Uɲҏ+HAG3ǵbC{TuT>ERÐ$c(-8S-P^ VFy/}RjV|m%:L|,4\, 7= +=\H1yIrR&;g#-kˤ=t(3F Xv>Ig?&FH />u9wpic{y;}&u<(,.goxho/Uԝǻ&3[vӝmnwr( +B$\B.!//y/H$HP +A9rhxtȺʌuv[~L~~' h}T/=!<$GC;o76꥜nH?x|yco#-~t{RKR$Ah8:5BK3}"J6L (7"_)~zl?gҙl QqүY}!8p4tlcy2G#AP $me^8h= t[>"B<6$ʏ_Nׯ*j8뜔7yjRԯ +RM +tt^տn[>=v}LB(yoa9m͐1̢ +0oAҿ6r)ʁ490Xo48Lh = NM0bM],jGI RgxUkm AwnJG([|xaf$h>WTkM&iazv\X/^HA-Tem趺 Abj;ѪFSR`YY)}74yޛwg$.<6xs~|ǽ)r5Spg!m7. n %?N;ΣD1TBL/csfC^4+Q} fpKG7,5Fm5C3 Vm/?Ejs0V*!д,d4bmmu'G.pEq@,ЉjxPBVԳӖ A·P%kl&ΔDo,/.„kFQ8}񥊩-_/afa+ڷף0MTw Lx U#6TF?l y&q@S/.RuxܞfOKRcPyCppawFC() ŠSHMuI8fKCRFo3ٍ8g1<2hna@8H_yB9EDƊɪ8Cܭr|VsqȊ$ڐ) rQJN]EZaXQ Z 2I8n3G/`q1 6nb1*vm6i-'ide4=pŁgxpiI,Neʄ4VMWpAhm:Ftf@U Ml;P%%oQ N͌Mè̷ofjMbjT$Sh,clmXJ<>QVͺŨN51"\BArkYbAYʘJ%kn; Z~j肠@2%O`o']Mg:_'kD"(Reޛƪl:ėt_|asByܠ u0,VU)rG +Nܧ C G| p<84TO3v%m޺n\D("oKP>IK'H _IH $@PjٵZ[MvV~zB$yzA 6rQ 2փ`@4B +;61af7~8MyK˾h;=#'>Z}d?"dx? d aPdp:?*EVL+A =0I;bEuqHԃ/Kn$=u`4!Q9v؜8 a\H!UCՐui'K/2JB|a˗$0CDž,ˮGA`LR㓵7Nz.B|! .$ʨcoorhQ@B]=~iᮢ: % 07CyurF[En1 1qOZ B +)? s/PrΟ=q_L1 i:yoC_MA @qz(Zm8f́ŏcKhD6CbΉtYVCy:}5T].@JVh>8[ EbzkLyȩ6m[T~E"Po`w[ٰ)$yS'2LƋ WiđCx}YbK؍f}kZ!/kBSP`E4GVWʏWC[Z 8aA^.y"Ç]z9v(ύC5|>`{z`0P<7W򷪄;Ix4%K>@']YB3}W햽R0o7BHLDڻCɣK>P)[`FaS1)Nr GSyha,F;81< + +@ZRͶ;ٷ\W߲/e$'M_aRuIaߌr,6,&2|WؠThj^˸&BSPCNՊ:NuNHpBӉW8DA{wXw]ӓl<"-YhyX"ؿc_@lL*WUȟ[P/_ўByN߸3"xr7+!_totuߧ E|fu[ Ѐ6{7 =BAcءw8l.0^G7p@KQ@((JlAk5HLz;Z7 .mB6]_ _5&eӗAa'`ĺ'VBlkh4?Y {AA1txNpӖi9NPi wXpqĨqM;`7S\Kn5NQ_bhWT۴?Mw4@Rk`ۈ?UumW-R%đMp] +>92 L]]"w$|<1(PV6$㰺N# +U'j*CE_lued ciR[jj"Û%2M+3;nWֶ˪Ǻ>PYdyaL@/ !B#b@ o>znzz3lsw}߱xhm@oZ }UrTZa0W!kk,fφ:  &8- -)5EX>51cxR1/?9n"%+ٕY!^eNFOHX<þ~KM6[iqyc?˪v_*zK&LU~.Enk"dX0̊@>ҫw x} |d2lWda j_.XJsiKAfLJ׮} e')xXj 6xUʖrX>]SOW{F֧>fi jsxx Z4N<;Qv/a-m/fNS2~HZR3'>":A =4eҙ +ΰ;SM$(]4>Oʎ!At"AX** ڀGK|-EPkе7F?)o~A*z] ~1{̙ nPy}k_O=}Upxeloȗէ {NK'!MA*$2cE¬6_.+'4| }VU#谸 YDž(cɖenAOOʍ +:5zaȴTY5FG#-Bv35j h_MEMEQ|pq==w)-M.nmwz:R c`B6:U !D.*ΐt4:%F#`&fv"12_AX ak(&#KB$r~^QqI!!s[-&Csil7 Mm-)GY;/"t$Vs@J7A"5?1WJm6(+ ޓc qDJ5NTawv;WT)X %l_l#`q%L,X}U VkήY.c15a4/$򓄕 KQFWa'VD[[2ʪ +BR[K͈Qk'v|4'jmQq6_Qrd6pBQLV MWs',(ff(o>(F)x" BШ5f)0ƽ+Q@+:CwmW~!fG\[)-ɥ">Mho Tn".=-f㡹IP+(iξF~՗zwt +_-:Fx:/uņ 84Dw0"{E(Ib +N{7g +/`IA)A}#Ғ}g=Gvokni&nE&[Cjvb-<;C6YGN}i[ޅ\oѴ$ӳN(,N Ib½{E"Ω+؇ْbrQJ:՗':<^ +׾ Oct=$ő|\9`%o5SG)dtj8}+3G1[ j]9"qN(M +? +|`L&#Ie;]lyZ`)BII(o +X8|W c%x `.7+fb4[I!fNdKYD(%--59Fڌ,076>'M'bn8 )b)ڊ;n],dӬ0}C- x1%ȚtZ].UL ^gOpHFH DZIV +<6ѥkS]m0j$VLt"*hrݎ]0[ptXOKXd‘{;F`ɏz +`{Olb׃F|cG",ɇOwVC}R+y,X +켈zV8By'bټTr.hUJ(dU`L5RE,Uso]8X3pX 9>I.RQZ8qr^-_3C9(4\n6zdYmăS#&I3< ueL"38u )nz6"UerEeF/Ɗnr]4_3o1ͤ7xhzE<< Ep\yw-{5?c{U'LyT'=8_oj +ϔѵbW$ъ~ĩ%0v5yf>aǓe;TRQNϹ>/lVZ5/}P`(߾p͈ЯΆz @pqO#nG`|"{޻k`|&fbR4#Xw/~ޫG(Y祦n'f" I#Ot';GoS/ߎaLJ_ ۆF'5I{$ŗ.֍ޙ޴nZ|<5k=t1*if@X1 +(y +%KNCA7*^^4UbPԍ&f^;Yh[j7Pw9DĆ}hy}R8ĽW%#b\to|Hޘ׵кVhSƗ'4R11l`[\Tg:dItl{}G={ ؽ4`Ʀ#iiUhm$_;M`[$8%@Ml&qh&סr +I`0awٌ/ JZӡ LހJ_n;aM$vaT w% >Z\+tZoΰ3~z@IӛcԽVG9rM!Ymx9h]b!jS{8nnYml8q;4\o/L73kjVI 2j"K81ˍ5BQ(Ȫ; j x9t% + + 9!$ P$@PtOePGuu٭rY**{~KeAa#Cp zgFh|FiMKÎ)2iYd7⎃_?.32q}x|I>ʘU(qIdAi=~X|!a^2zTϩrKe~ J"ryT~;Uv){-6.Q䶕ʘ +mbJ;ґMKms?S<^{P4yhMYdiu\{SV%kvw4յI-h DNѴ͂gLoJ8g+3Y='Yʽ0ƃ VXn8mлPmP7Aكsӳ\&3f0 Ns1#nXU870(gF7j +&d2̽ 6;*&}O2͔b_EEm@Jv\?D22jo?uQ֋GufXn +NEorr-XĖ6rw֡xT2S˷  t9n'{Ym+=%Q=;:T\zhty\X_wz7P,%i1ryqٿn] +|m!|\B6h$ }V( L;h&"9!K~lh|/ C~hOu +6o u]3M\n + I.fYbbW58J $b dK#ߍ AY9jdmt>C!Li:)ް?D1rWڱlgt\g}'9!!T;)[*y!^C%Ϧ.fqIZ@OlX[t1v*?$fzս+#kj&eaenX_1ϗ_Y'Ijz_si \e ݸ;v;]B'HƩo10L7sk1&G!vJtHTmap҈ p0jʋ4mCR߄H&-S*ɏ[(Kua?n`\GeUk SudFW,)8hbME ͚l&Uxs,/LգZJ✁KhV;$%zFLm0SR ۦ:q&l;MU'ͥ5]~+.P;O 3y Z2MOy#Ov0=Ejz +.h-$lYTVVm:4 ?۠hCMl|$"!4QwUps RsnsLP[~%3X{Cb;cn ^W [Pwsp%mJi܂;ߡģ!&p@ڑa?2Li"DٶJ\{=r4L106?4D=cJ4P V9k==% E},G9j 7zxň[0 w0L2[i+!"4 @@6ĽLLMELzH/iM/\ nti+a 5G"YtCQSvd$_Kr5qtfKwLuՙetFZdCP wrBp'@p$D9EQ@EW@uQqY-ֳtZGW~ן:nǷv> osK;PK:)ZK֝WXnmRF(:TvCk?RMO()Nt-gZ4bc7kLU"y}枒!jq]uzÁ armuÈHy~a'W9 OXp:;g!wSㅈVVuu@e?wO;p|ol=b`N.|1|~ƁhցY*b*K.RSJœjM](Q鯔X1$f}OpMg$˳xhC>qjODY[[#߆O 望LuADS'jZj~C MaGh/(=}kuY}#=?&KzפZ;zyX!."aI"ñ,bWAj1ŊeyN6>reFTIeTYyC=oű{\ *!/}(eH@C)9mѧcs_ 6{.D'QXrY6"˜.9_6Ұ ]WI'{z~mb4Y#NsYƈ!IcKYRN9}h"6"F$鞞 /@jYi=6?u-c0j#Ţ J" soF|rӆ{P_^AUז6i΃n[<^t\*}?7_OhvRێK{._Hj5rW9sTm* +;|b{Csa*C@/QUWt"E(OK̎qvlyÉGmO1+XN!TsEnRʣhޭ(^} ȭ'SN+UӦd_JʥvM?Nѳm#\]td*!nReJ<˭Y`;0A=qxZ(fHڔO)Zu!X. P*uw/r+ȌHB=v_O} 1.S\ohpГ?vܰ_G3\ϨЃ<{ [t8[(Me}Tqw浪[mU؜ Su~< q?Z'G" @?^e]AXQg*mB+䀽 tf ?#Gz:EJNJN6IĠ ږ_*j*^}c t-)p㫙O{^ہIewvw;ݩ8f@;JG5I߻D|&CBGdPig*xEڂBLWQ3T30z涊jbևᦱ|S^7Q_f&y0\#hV6+eىΜinI.>MkWk +Z'# +#;zEcuѯ\DpH*UbֱwhWԥ+ngRZ~`.k`%d+.PN2'2tqsZ'MeɹY ѦjƝblOV~z&c^b桄dH/\*D-˕LߩTՆ\gA|Uzy5\UT#+J:({7 0x w2VV*)WԖp3 θ9zUWL;v,1*v5b&+W훗Z$/X_Ѣٱk +jTl(o\#F9:aYF4$~_r|=1|o0׊֐jUM*ft}C3I9yE%EeE2jONşdVGhى8 RZ+/nϒذʪH'1cjl-Os7qQ+eĦ%!eɏ2gZ %˒m,Y~Y%KH,Yd[~-?1qlc ~048@t)Pw=쏻3g9{J󺘽iIf;/J/ewo~?\K;MKdq~f( El6$}dFnI,wô^Ogԣ JAZ;oqn<319g*4j ٿ"ڡt!0y" #hRq!]DmA˾8 6v߅ [phk\vwϐ*KQl [F.#CGޡo<]<?%ԎwKD-N0VkV}_<wtjZ f' 0cPn%뫽OZb@+4W߃BL^Ia51zpBݴ:0Ǥ0^ s]PuYI8be6uMkD 7#ڤEktɪNj]㒿+gOGD4ܳ)' ?L71;7p;ni3s( l|#69[PVɔW;FDii۬z.)+?Q N^(`(λ?~1O>, 3ޔ }TTsfQbf`u7Jq6VJ kwp@ -xk+$t"s8$d/ıxms¡”*B$:mrZ78rp࠰)7K{)4ZO8U"2tB筱1$hImў`@b Ļ ['3%hvS\+*;/#5*?ξw{TC[=`\uaoIe=}:2iW%iڷss+Ktw(9 ` +elXeh#d&;0'6| TK?es]DFGv>@1x.=aMt.0eڕטwJ^FWVx}6mfxJ[zHW(Cu}eGQqᙊ}- "c] 7n'A}D 4*MfN?Y|ҌS|G8z-!_ ᣔl ;3z ORـ%Ljrv$Y'38EAFK!0l gر'/#O榨?hWqɫ> +՛lmclaY7  w܎u y IIД +$c5B-M +MC㠜<_4u\&Sj +QX ޱ - -o{񜉗AΚ_pKmʦlhgQtr) +n:iu' I?>3PֽחUқq<:9UET$Hk+/@B@H;EĪ=jqz׎gӽlxy~'8zh? 22@6>"߈6Kt]\AuNFb(#pHGTH8 G/|M>`._Nj^1V~tW@7J@vG@6t.APAbV={XA+Tz %ml\5"cM^5Vǧ:*snd`׮ڽv{w®̀]-$ӵoӵsJ/f6V+#,#z5_2XR^Fy"(̊ qZɾq+zAI義Qց.⍇UVPfRL"eٌ ]s!?]hq '%H큻\`Ó1MXF溼 >L8-/M.$)'1pG`XUm+*AI ޼AS_߾pTviZQ@x`}|ed29ƨB5Ot՚N.X>b}XP-4P8N 2!(d2(x$. +[5P5&| +s[!(Mv| +6`)lƓ=gc j!̒Ox򷞮wSwC˃%4sZ,9-4k^ b| ˋ4XY/dy9 5!I,.* xXX-澎 ޤu\fVB\B\H ."^E^.̎7q!N3r3Y\8a@7j2HAZG +E|r\ۏ22y5у0+s̐v~ a2 3Y QfY4Dj9K*7]ihI %l+'L3Afg0 +-r?G;|,~4b4X൨[CAaK ENL|f͝Ͼٶ{k7wF7g R}SDjQ0^ I3 0Aew~c΀p&pr(<wKb;D̩D"`G}}~ADN_6=:Ϛ%pM؏pƻyc!04,髹c`˯ֺP~*]C`8O0GA;\N$}8SkQ#)oIS@iђcMswy۷w2 +V +?[goY6 +}hC_].KA.X}(=tEo8g>5 Ȥ31uc?n*kȪ*uciZ#E%RS:`^7䎡CE@, 1Gnes5h4JUkՅ +aqĸl(l"bfO6Hdmb4-Ɖ)a_R{u>cj^5LS*E9|CLx_Ť$=}Vv]#]۹>z:[I3X!fN| - kouQwXFZNˉvwH;&lyY]mj5 +@;ԫTGBv<{ /`9`!{Wg>!NJwD)&6Oz㟗ӃBC:JDqWlm.2?%~0=bwa216:-]J-aZҰ1N&Xd'aYmmA𠭖z|QXIIx0P H`[KłgUc벸xq9iYV# 6pꅩ1N--f0,O57>//?‡6`{&MFoP"ڝ͐?BhcAߒj9Q'zV߼jTpl0>c8BʞX5qmn[OHq3TL?ؽʄA7о As0 +˰+L(NSY#Lq=LOo5|}D3$!%$<QXaˈ5}L a9bw;Vd碖hn8$UT3#G}W`WU-9/P̮m#O $gH;]"N_*TD jtNr)TFdx`!}8{6F[ F8<Cu H#E9Yʺfݥ̳/m+LOL*DІ*xYS`NTE~$'`˨BY<:/K**q@9Ha. B$'RxWyş +qI] RoE[2Ra:Ouٖ<7<.ZN)p4hag P4X ana'֑{d e1ymx3A ڛǵӎ+ T;?򙦹g`4(>;6ed4BV!:?Q#p Qw>oʸ2x\ϹfXq3}^@gfdͭ|a5ne=pRLne -ԔE)"#hrуf(!HL }B٧},aU|g/~^ ݹdCf?$%"YdK\! baZ 筢?^>ˑ* +Ֆ8@Pbϔ=ZEbbn^*?RU+k>}VRHuqqzM*9Aɽkj;/9/J^9<T*O$@4CI/)J*V[. +-x{MCe5[EDz$?u15jMp"tJ/t(\OUkUj0>|d|-wS0~C٫6"(:XC.I a0tY**ӘonBDMN-gBe E +F4+ +cZ`hAg|UC.\6fH2L]GzWۺ% +' $;v\暞t~D; l)& }+7@kVo /:z1uYbz2;^d..L/MU%r=L0۵7-ŀ'$cy"x>)0 =&2;:}\~<38sþo=G]WYqE2Ё#B CڎipUЌ%` ;'u49m$&;!7uҨjkYyQuYߎwC7Vљ*%~ _cuu'*Uc|O-j뉥11s <{#R7ߢn (KR]s_#tЬ̨ػ-㷦JU?ٻ?fJS/ܖ6"?9vpfnz/{@& /_]I[Hj5[Ö;;0Fu5g솟r {ƶKޝ9y;M_Yy7b9#`'Ȑmht^Ip3RWrk%̂<,n a4s$~mעX{OJCyXxi[ ANHIeԕ4/izbI2sZ{\GGԅZ7!I0 # ق 1%!! KX$*Jv2v:Ɨ{؞qyw߯ve4QJ*u笋5,ǹzxQ.J.OB'VFFq=psZCSB-Y އ7\UW\U.2ONKE uR* Ӆ ;nM-!Ӗa#H9ҙ$zH9 \ID, EȒ"'}Z>Kv Fm}m&t2k +$`wi=ˡ J-P.8V/t%Yc9v@)69,94O͍_"wvIo͓jHtֵSCd|xgB@y8!py5zpuI5ȦOܷ8N8Fy9W0 "t<Rjׄ0뿯d6_ N-.:LKH"RiJR7); `O טLfNT 2PH,;<ꃚaVC#@H4L( +)zėV?Lg#v!|5wj&n3sảbV!DM=^3#XqLʧ'Cdgߵv[ +? +1A;_Qq7em'CE wkEnPpYR抢dcg U\GSDT{MxՊ +?^F-)ƨ=-%tO ǫmmeQ7㗔'RfpWudKOW`F= +8 +̥X>*(jκ 37? X6#B+3s +儠~% +}QNY=L>tXZ\`78Vh8&HMko;;̶Kl# #0Pi:R0bcZPWe- +ݛn?zi@m%_жm _}O^<&ReK +W$uj߿#z._)^6;}12¯`~^@ {Q:sfw"-F^cE,q͓m_ˡ,@1\CvOعf{@,Y#^X6`Q>'#4GrCoZ]:K7QH[l/OFGJu +X}{ +4\·F>w1cU1hxC110dIfuI+KrDőK&a'[W.IZ6jFB+Դ`)]Wh~aOW8Niq uڝvsf):|̦婌A[U$YcJdP(s1J IS*:i08e柩Ӯ#V +kfT*RS8\| sWF!~yrЀa9aP^n9yMQ&w&zNf|\NG&ϳ7ԏKr~uBPO^-! -@+صhQ^Ӆ_.qE]Y xo*0f3qg9!uW'f2EuA6l,E$7,Sch߉ +ICBqebZl{h_D*j9̌ts> WG|>QU֘o^Ňd)?b?>7u{T]aM]g\ ;kg>pMLgЪkVEm BB +AaB  j0G}lE:fse} t:׽}sw~wZb6 wp&7 [,} wdg_p֪ r&51˜2!R!g5ҵH~q:9Owq?ike0YVnWބrfZn7&.FDz1N\NWM>bSi? +,vSL %U>(45)' + qPmqkl[OCq "~U$.O/@ |#䀸-UvɊ]}&i{H{xKQyQU0r{YFNhiq&HACSq/>?"7CBq/(5ylJI%nO,}qg߳[?%-|aӁ{MT+V'he)Xs^9 +U<ʣb̅~h8]# ƙUQL{6,a}#>Ɣ-r+h` 56rk3?1rTR]-%%%ꏽ߆] M91R"&9D+fQ Vz~8 o9.BlHLJ!9ʱJ?nc֫k*xfQXA|H(JUcOrT .-H,[::$5zDק +7"?3s(f LuL>6Ѕ{u7BFs眩n⻍h0u\3SHg ;QYP? .ca]/AtLҥ~$TJӫW9, ds4O }&ǣԔF2f(Ao[KJGdRs9q^^!)1t7ZT}]y8MTU_UP{\ .S;۾O{;hc EGK ;hAڏ-rK3%'f:2WJ@ +f_uYrnB,F'rgXapoWǐw{9Rg>t!o @["/f]}=#]QP^tB ~ns_GdyM"`>ꢋ\$YZKL1/1}CYFCV%m9{3BEY9SF)-ӕtov3Hm7mrV;$,Tj[wGrG,6R N9k"=actMb3wTI3yO!HƉ!&þK("mhZjh& +^\]V.h08H#t Ȗ1A̬DrnJ ++)pI-Þj +;nۉ}[mgg0sᑃGZtN| +PNcaŸ\O\gS)ogTԮ02Ŝ4AK+pw(t=u"Wzuz/910~Y**ZH|0Id vtfr%, \G 5UZ?tyPGǝuNvR0X&q݊a-РFLRr72á. r-A%Ƹ*:jE݌+M?Sy~~o#PCMs۱{N:k/bŚ$1\I z7cB/%OBO> [6\83T(l +|A5 |A5۩jT_;՜̵eEY8cZUSSy-0oCGD8Cy"Xgb 8wD.a,O#qRI% +E}cbMLl|BT~^O>lr/Odtsi'dgA^,΂i'łVfpzB/1tl$"P۾.j֗%+j39g:k8txv"+v"O/98__vGx Q̊3 7Ϙ)<Xd +uYe*)T̐)s߫Lqε4;LM/M;J ׅr:)X zN)Ŕ5]t2q3\~'LR`02j)8\.O Kr^m?ldSqN= oCAR^`p;f[Jr[RtR!t_4foe$[u_^|7Y|l `@Aw{,"gRBWzD1k-Aegkv:LF FH-@h)2W!r.x~:I JuJ?qL?T&crCՏ09GJ155=.t`U]ŕiA1oXp!5ݭ72G ӶB GvYE"qwnKFM6zB.?s9_\"r^Gg!cd`6Hn2=|y:4(W\ypky8Y#Ҷ +w7>wk2L3q._6qLN‰ˁݏrIeDr~hF3)q>8:4CxqE /9֊4e0lGoLz94n`2J9j;Q3n4%owцOHFQ)eKzxԠZ3݁9\t2M +sNHKXhuZfGa6DªB{L]%bu>mz,mwDjVe``Oۖ@uĨȴظqb%A0֠Dxit\ ]}Ufk}KjlBN⚶XAeTW l*H A6"ֲ.'n?6`_wF:OVLA jda!,ejS[D"Dd$OhbIIњ* q>2->>~0ﲷ8E(8UrS2seDh'ڈ^Bn,UTj ++OEFDG[o`heؘ(`.-[DV0-fe?ʨ(eM4L0{UT?3mׇy, LzkY[T˔]ăg!"%{a3evm9 sI%uP-E)#?l՟0NtR|cYۄI%f Kfr^E R[Go*XKw#hD G!ٰ`ZiG^G܋p2Jڡ*7oޡ=vVϞן֝XxSe0ӋFVWg%Jg:ёiNƕ{^lq?*׋-4Ӌij\ +j9w+ax Fe64ETQ5)TQ"wGqz8uCUmyE"<2ۢc!5ceL +4ejr/*!| aMدP1[h Oj5-fG^m`̉̚鿭j\sF@z03eFB9~}~TpW$XQewyU裈oa7x +oD8>J́ n"$u}5iP+JǍ㿎3wvW.NK O-&.15kLZ aO,CDxhfB*DЈe 3#4.Ģei'ѤGĢp5ЁB*1bĤuI$Q +u[j0R2Ķ3mkesuT?y RBWn.|Z?ȓl:6+'40XKd1vz(u]ݫ?%<ϙ;#/H6DdKӰ%^t)VTm%~zap)n#!I _ɋȩqڤ*AC^H jxyЁt!jFc#싞wsk5 W[^;~M1x=Yo{5H/lac`cxgxF]%NfrVsCC#f`.9,( `t0#!OdƸB7z 9A< ܍yъH1?C3NC<|'tw3-ۦuEnt=uo$NЙZr +_nx ӅS_^^?q_K^P?6MT}nn}_(\ #!41'Sk]|r :РzԠcv~rCѽ!4g5FbdbdP[~BXioM2ﱳm^Nlǁy  [.{װzx=:^ffD[r,>4a֧]NOd E"Rd-8,,+b#d`65ц8i:,s8?vwsjVHÿYx +i硶%Ͼmy1:wb9ՠ!Ba2pMx + 6g!ӱV-R}2q%9&9&Caw*2 Y+9KUrLxrl=ag&}bm84$,n`, šY!xRB`_=;.~Og`?4h0zCslģ[ | ýCedq>-@d+i: X~YJt:QpU l-P͟jPޏC2^KVs@YH"/@_Ԫ  /+Sl*.Pڍ"} STY APX1BNM kSp]>wOvjζUxRJ)MZړ[9_Sv\H7u'O?,)qY֔|qʖTF7Ž}9# Og$IT/I[.VUTtQTr^ y/4ׂ|䙁0;Sxe/Laxie +=_ꐯ|<|#SxxO&g2g*pPbkh΁;$-$ss#J{Zs VaF;xsDrXC;V!{NAOݠ> O׊Yqf\fbxp0D !_SXtwj`a也ܦ+ }U{/n`є@2<\E_g gOU]@4 {ډN "gH>NK4Z'Aߥ jp%g +KL-X'-aeD3cM4 4y (\<E<=x^y]ͮ:uf +XaFL${{Rd೮g]φ ={S$=FabQEy鲭aKPh7%DAYrۭ ad h0)IPTInc08ڣr݂.Iu|D:5Q 訆:SG4Dm#<(`,j6iDQFD!>xl;ljNK)$Xb38KtXX@@7|pDX#hA^D L"=DG7P +{y!?0lLB,A}pNT^KWƗ[-5> ͐?F$a;qx yIBQ_gȠ|;D:,; +ޣ4à;X@=4$b~|GJJtskm<)";<<.Yd,y\AwkS85fګ=-ih,2q\K X=dZbb&`%R`[Wq &lW{XSYr-qɒ{Vu-^˼S@[.:EHr@p1!= $ ENDJ-\uq}h/;qw:{{6ܕ; '΋WD]`x|X2;Fu/h M@BTε;n?ڼ1tm5wP3#WTɳ ER7<~*341eIͅHv\y}!͵%Mb0Iv2EW]J1=pPCً a˘h{#Ü(uhFWLc0;Y@|d8y̜ ֱ=$T j |M|干<*xBfrhl@on6[u7m ך<)NNNh ߕ.c) u4u$%xg=`'W`n Hg\H\lP.}b{s%%Bv⸸s0ޫhy@_.RNŌg" LM>Ks9`v42XrYe - lhӐAC˦>-5-mi,2ƾ#JXCZ)f]jȉIQ'bCOCߕ>8Slʪ,gP+j(.}ʻH8І̜w*n +tOF niDAy6|bf}?YebVs ӄWVl bl]avt-^@'Zq/(Kľζ:⡡h\e}>[zؤޡ/< V|po ayfkXK&s±ĩ C}G eb-҆0>qi|i(&etه:yqDS[9w;qt&;VzVPN'SSoKi xJySޗ1]T/$*J>2uͧ?nxUU5)5'e[Ч7'9%W N<0hQ9!؟jjL>a&"NZBI U]^ۑPsഈIQ#d˦[! ]hi,!&U6noYLp~M怦e1Í3bOcF@oc zj77-kv?>NƪΩ>TʲN6.mJ<n` }.8ZT[a9h̬^HaIp_LŨQt +=lqFTװ@ +f;~Nj^`ƺSddy~g7kmGpnwу)U]W|as۟C$|fXq »^$ ~8.D^zyq=a2i.ARQؐL<_Y=Qzi@Ŗ[f?u 9&:A#'MZ#d/|\Тȭ 1p*N *5\Od_'<"9"@qrmO_H0l~A }*z=Kk ~)(e\!o +q| ,@X*"C1P^.o(>cq=5 ,׬]S1}omHd29TjT:%f$8$9ysv ̾ƵR0}_?wYzzw79 +|D_Fyx8Z< .~Ah x_栯_ڸ3yl\Idd%gຨ%F7mvG U +e"b$Y|NYPZ644 0RCFQ;P)7܅FS-7&AFOFS!7pϝG|ж͑a9;KwrB; +@\׍@7Fg-<^SrFk (]ל@N; SS|im|\~+J\-WLh$V w 0Ң<'  Ȫ7My%);('ΕSB'An9 ltO)stI] +G@J!D≬DʔPXzPFtZ+M(-@r mEvc֦۷{;ѺlSsmy✭䲓Ŵӈv(Q0\G3.ѕ5Y>T݁:[2yo:fHӳy2O0(RQ{:z)u"ڧL`Ie*&8. ivLG?eȿh'AFI/5tUS]5FblJt")/S!NMoVʌTKOP`^Ɂ+$x}4ZY*^y(ON3M,s()zZKHqaA^m&^4U[V|;z/~c'0k\D%:}_JߥΚALd=+m fp[{ AfB,.+܎.=b֒Tާy'b?s.6VH;zGS$غ0@rmbVڟ,I9h3مn';T=NcyiYh^)HWG5UkYeL=fn _}86}zohP. OLS{[ +i[U6zm]uV2A!dhUMPI3}bxUi45T}pFsYc7Ʊ +W60]/ˡBr +:NzI +toS~D+ ^?'@֠[.x +:ä ">{ +5u׻)Ǵ1Y[H.:j j"A&̢IiwרQQQy*@! @BHQ7 + Z.&*0>PKw9^XU}sw=;4}Wf4/ Ou6HIm2]aH< Ƀh+"4@G_p㷀vՙtăC% a!=iWG1 عsV!ieU^em@cѫ %#} &|e]g>.%'F?L 0R;)* X*c;$ +&>#gכDʿJ'"b 'x>LQ h4l#hބ?~<.,҆IM?.^e!}R#}/=}&-@!H-8oOG'2 //BA=䶭7ծvZfcqhc@rQtQ}W61FYWZtQ^VKyu}oW&"IVc D͒I dd4:ܱrpnڡѱ +^>E58B"?"R3JT +%w8FRl\N?>]nKW3ŅfXyufL?5.#ߏB>IKѷfXzܮþ(I]SXVW"ȵڄCㆊ-sFj7kApE=xZ+KJ%t6  WT!ü-F+ F|_n:tJXp(<gᡆFܷ }O99zcהT64  B8}E} bģ CגĚt(,֠t. ‹L\z ;ܞk<]~f\'DݲOzgW-7:ⳁ;#vƈ$Y,i[П}m$be8ꤒctxѬL䝲˫wt4VPFd=&2Rq@rx;MR/طj`}رn>~j\>OϨ3*ȅSRh̿5NU?Jb7T<3bēƒHů,)WJv$Q??:m/7A~3 oݛK-~ͯ(%x܏!OWH_=E=<6Po-~ž܅|srƴ7pI?A4c̠KPqC-O;I n A0;.qᩓ5r1a0`k7ur1<`O)x)F*d<>^"W +M. +'яmڰM?1 +\و.C/ ګX(71pS?P+y!eӷ彗|I80z='ͅP@U)xs:PIErIJfp"ͶVa.XMHfꃢx;SZ涓KLBj.v +ђA@0{"=/u!& Wt A!Z)ѱgDK#m~7X/lx9Vb=G'I{4iUIslW{RbdBHkŷtQ9ڱ՘OT!+W lb}ba%WBv^ ̣4I +}D79z_H(zOz~R q-7Ea%hga\Qނ7D~ƽ_:"^-X/fTDl/:94K@,J7ɰ2PiRH=C*]q:f-[xԩ819"IUE~n-#D!fVaz{ SqYiBTWWY^U0,"*ˆwǻ˨+}gqTrF>~5&1ne/ӼPT#X5S-p(y >h[=v0 y?W]l3",.W95ŦH-pesv%lmɟ-B^Çx~f"}/{ר̖!Xq6/Ԑ|n|3-o:?XB>$ rCqrdAvbrnh8(=21V8߭pGaGDӬѻlɄ2Tn" M1N<zJvERe 8 P^Begjc  uGB[8x -q=f|6q8݅e2<'E%ez>p*bs=!yAՆJ&d>n%J]8aC^'k C6Ć~&E-i#yW\]BCJڪd^ +RCdcosQTsUo`ʰXKv&ŝt < iGD{ HB8',RAQCbK&D[bNc4.\O|7th$kT$eҊ5! @\+Za#. +Ew}Ky 'y =q!0c>'o| a|7]GY`1 ;[MXU6nm,rT^"ƨJ%j}gjzC\/! IxNKZGpf(k܀T%v7 iof)o&IIە+z3ͥhWvh)zyᨘ+wFڠ،,PQ5%7*j&۔v>l3iǛ=Gܳ^"1q|r +n#!` {R?^az#B:.eq\qsl'h,kwG?bSGĖl~_QV=|a}L[xG|Oc5~qC$ޙb"L>itn89$@(&iuMUp?I||~1)󾪌{D߬npJ7e[v3a)y{NUWDidv:`gOQ"LcHE(m!uu%J1ȰsrS(c?Npm6l3BN`[eZi 1r@Ǽt/ұ\~MWP4kZ˸1Ww':4x`RvӉxcH&cMh#VW%ifGvp"jdя ,ZJCU_ ysmS*;.a i+M GtTlh0Ԁ4++ * •<%ei0LawL2b9 q2R]ƥ L?JlbKY\ՁpZwЅ?Z%JM =Epqʥ#H/pIdi57Klьd +EE/úhN[;88beߣ-b_4kFa4H.Wɸ.cC1^5;kEfYY,vO + */t ڇ(GN69.J[s/D˙떣6P4zɵAqPi!ᮊ+?vt8x:G睇+bvĪQV܈ : rNi -%nhZ^-@QW!הTn.Ⓕkq1a8%:*0ƈ|dk3jUKʪcqB Xu +(vgcK'=`ifs;ߡb{(Lჹ=V$G&1VLI|s !(|DV,R'Q(Jf5hT"hpu{bR$  H.+ r[%F4ԧ%MI񿴩;%܃Psj(grܙ E8j  "G>Ul3̼H91u'T|DvdDM NKRS)y>&D3ϮJRL!S=$SjbM%jr"gL9JNw.Ħ-Zg#5Eԍˤ^FKj vEfd'2H2q #=cGh?JD|f$d$d/{p5 a }KD=q &RV$i$D5eLu4dP덐ˢAqlJLӚC5ɠ&|3,#{Qqi@%V@ScDxTd=-c*Qͬ@> +DQ͒@3pEo]~qN;1շ#b}&o [ȺU>³^} + \J JND%w}psB>_hvCX3İm*$j)U;UvOMN>`gxĻExD}Ja sܕܦMiU{~v-Ex*xABy !Yi +;sb59 \/ v/Ӥ}O?bmqx֡PE`[ϜܘF+pVO};Uj}a1><-0(䮰Z1,7,H_R j:dYpbQ|Md߅6xOt#f#}]=$n$kýQoQv8[2|S1cIL1mfix+B3m)y,Dm}xT_AێJ=1tY]nzd ӠLq@XDlv a*sQcdFI7H^XDcJ5?os-{vusBB$Va] +\c=sR4C ;0NPq>x#x3K>^s=hk+kr3))&:@ʭǺ턉h9̐xIFTtR)ف@ ^wFԺj56kb7mtkT 1Ѯ"3dQk01D4(dgO%@MнBSIl _Y>I$˷zo'QF1OöKt Qƪ6 b'>K)H +^H :B&ٍr[N+*-T6TR\ ~.dG( PfZ s(v^vMPj= +䞵z0YQژPn1ML!4o@$͎ƎK;kXZmlp^c28B +Q%tZ,MLQҽ2[xb5'r8.S7)YpR>Ae<%Ӕˉ/)Tx,ldMStX,w`@F1l5gSVd{ߝs 6}aEG?\b!R!ZrxKYIJٰw+幞M4ѩÒ%UTVQȑ)6"o:ϩ&B9ŏnhq)s#qo|fN ߠE@<NT-{zl3}dY[iѬzz^F "|gm8Yh2{[oOah/A S]R:hN<BX^|< ؂2tVV1Ȍ:N!ϣga0ba'ʓA׃R$'R(g[\I?mO{DmN -֘;`{lb5줘yؽp Y@0a?~c~;ɔE]!SV;D'~+~&ؐ\[tmn3,yQ(EWqVID_1y?CV(#Y@+?1$mwz^;~)y̝U܄Ss,RSTO8>"fWvx'5LV{{r^IhC|ہXh4gC{ -2tQڳ e<2ޑB:7EPvCq i\^Z;=@ONx hB}(s vcς\L<@F-[(@LQh9\h9 +ThT@?0)ý5|u[yӈNV_m}۰$! ֭Uͽu|U +" +Nu|; O&Hɓ9'"ahvѮ[;E>6};4b(Xb6'цpI!’Sb[Wp=?3^'8l:膭FysK%nY`n#hDGSa"hn?L +\p iN΍µ{GԊ' Rɱ5c|$Fhw1D 4}V +a2H'7RÎbE}|ݞ]]zn+!|6 +79H|j|_|Yc{TXxp +q.%z&N "?ĉk6(wKԇT9 +BT ߀ByaWv6@1],DC;5]\Dy|-5x`%!A~~)?lUqpp+\PÛxCGFȑ> (/?}\wvuf1&F*2,%+q$p1J gfEc,=3=4A?qЕjUD%f)d*13[fItVt؝DWvB AX6+ e,}bt:T'+i{bDDK9%Xrkp];9YȈgmeU6U9 +I*wu\ȱ3tZ9+U2uMTUTo͡#OG%]SJUͰgԣo )0@KM_v$6H~*+֖Mϙ!dqIz.&&B$`7C-7) z+-=?V{8b[ P'C# +_?F>ׁ +\`ҡiHzIn,ӣڥӭ׆IC-9kQ k8+ +07rI|y-x.h/K\##[йn̗JE{}v,[n飠'۹>tx*5hK]#"j*-l {][3,p 'pt-kq"*-=X9.tJބhԹkР>Fprƪt|Cn蒧 yu<7nCGr1X3O.L?GɎ&#״˶;STBݛYZRVVGݱ??RN$ZeSR0,MqV6ɢDG\k?nuc1h-[\XRc؂PQޠ(3PS&ښ% 3m!Z} 6*tf mJ . {a +K/`U')uK\ yҡ/7XzLt:DFCWibSP,yFEHJQFAƲ_3jG3g86px&Y4ߵ/]-a(N㏽b]@x\` ~Nx /@La; .P9f+boV~5B&0v~W SEw1~'l(IlV_cBPvO5LMTgf*q l{l΀k``pvaiN1yf>tWdCݔS.R Y7:f{f|ąY=w eu$3~r~AE:-J%ҎM+N8ә|<}sk7cwXZ=g5pU'9<^ OjLY`r2O". S8)O_X&y+Dv"nG +lLi( p6 ~x 18bC,mD="-z8Dێ;U㍝lJ .jWREMUEUc;s{|/hdGDJXCiJ*DszB${2:ywrCo/xqmN͏=@9mb GT=ImY +N*wE+NJHRrV5s`g64 Fm:Y۷~hrQH7H#?p$eON]:k4Z a "dԳϯ\yI=SX;^Ar8|L=U^f+;E(Hf$g(ه` _傮o'Kb.~#wNJ\#*u6`\ī*k( .&ّ_?X6,} !k*5Gvq'2^3@Pz@JK`y0ȹ%j2U>aԾ/JtW{"XޮH{(@vm +t9smgN#~!i :~&ֵc+b"|U;‚fdN`AlcMNHȑ(Ԩ/ ~}|m#7Pt_+ L,6NvK^'vn6(@:]0/7$ɾ'DmP: AX{0>wSٛG%Ú8.Eftfpu"F+lkO}.`Z$zeam='60%ΩMJޓxJ%oi#D]bT- 4fκ۴׸hL 'K;2qf:G _b4hP t7'M#>->/sFp KJCIU}²d2A㰑GJ~M]ZF30Q6´[kv5X-UrvOBB+D6inDS0" +LM ٤%UպZsQ1!ztf~fxͼ<­a?pq" >{a&Rs9[yzE`Lw̏ޭ(Yf)h>^,Tפ,uU.4m(R(L_ VlG  +n_=c /gQHQZa*k! C48)5q'1JEڠȟAlL$kX'PBBr_?M{hfk6dBXu||߃o~=@lj'`%Zr:i/Y,C:vAUӰ_}+,SBpB#7NUG ]qxϣ| bH˗hD JO}BJxZyp_y *4.}I a:qp,6X}C2;Ss: XOݔ/6v_K[SEsK7C zW!-"4smMzhr8]<3S#6DYKngw^F%LTJ3~~oӷwwOKNewLB9#m~ʲتt6Q8~͡=p>\?u+S[\`ptΜ3P4Sȥcbg +cEMʲ-P֡~dMIbرΕfJrk-Ur@ 8d _5o,vuRPdefdJٌX1vMז-ۆ +]sK9{nW 8S(o/.$!>=gl}otq]\׻O_'\Y@EFdߓ"}@M8]Ӿ}6#`;Lq\ &3E% +;o3Y熏]{vVNS*CeJ1:.ޜC>lY I_XKhOr+u+-%Ξu7_X&ȷ0P\פ69[K'⋥48t{aEUv-Ut O\+TJuJ#KiŹUEhZ;sRfLD˩FS=W ߛTʊ$ ٻ"T1TuFFwDiլŨ*U0A)k?Oy*g58&. M"l3j%u k3ZӤNl&jZ8Q4(ǂ˾}?`߻w<䱊 APJ$T;IIښ6n:?c []wE]Omg#]RGt[;ûp(Yihsb4-%(d&yyXvm_0.+uGpJpxg {:HɨsXXxqnhSٸǧGTC=kK4Z#`kp 8j0 77J0ڎGGt.F_|!_^Oڨ62uPNP]0u`˛yGpL/'(# ;ڃxUOO5|p7&]NB!Ԉg'iӏ&ҧA b fhh'(:ׯWN '1R#bך8ٙN>%Lyp#7~X8[L?M}d7ɓ@zrC*ݯx%س0v& G} ^HYNXtV +'p{i=G \0ǏL [gvN.6 |<_KLci`KjIWҜ|y*mv3PtIFkV!n#ޠt&QX}osJ*n(<7|ǪzI0 ^cӇXgeBFQZRTQ6A;):açF8`i G~`׃D=lIp wdb/[9Hn(p>a8J~P n%prZaR"&A*x|϶%.(j yzq;%j-!c-xYiun Z:t(R(ULwW )w)txVRW`)@eHc~ǓΡGRZXj5IyEصf -Z@ߒ +s҅ l-:0u*MW[ÚiH方dV +x6du[i܈U2F i;=Rhf$`ɉh||7X!^wGfYTҀtr;>JlmV 8T,,o$qySEM12((??XNVrc"gduEy?V%yrR#׫(YGS{zON1|㵇DUZ l׈ah,:85:ߚr|QIjezEl;{I[)֍-VVsDrHoDlLfTZdhM X@Z XZ&DasiNy,. ЏN=WypR1;QnIg43 0 3d(%16uXujծV]I˲,aeR )g 4Ͱ74ַm{=[)A=_ s.~VlYO<1o˫,,'+wD;H!Ag̐ɦq2@4E$.?=> z&Qsi[ Gmehk/b ̤i=ΘSX+LiJc,&Ai4]}cWHׅ?N/$;RG8Ag #Ѻ\.xK;؀Yɐ:P]YmJ4N#+΂ e8 yf{9gz ^rvKiXzH\#n'z>Z"n $zpyiێ]SQ[ʿXwi. + 8AU"Cb+#I %#(thFZ:~>u{,}P8=V2#Db@"W)*p%2M?'/`luGEBqia +:8/05>^_{gU76oAW7![w:n۳\0Bp[Bԯ@ߜV"ZA-7_b79$Oө5_+ko,|* ȮkǾi<\RDnzsiP>Kp6C[<=q=8 I 皳-7-DId#@ą~v2?#q-+L‹>qBQq@G益>PfiAFD&'b6jQԮP8y.F36ktEO~լ;Az?A}t R@oIx $aCh@o4Mݠ-@s\it2崃]y J"!8ȪV3O&bI2NI MŹ12TkdXP"Ocs"3)A6HGJ.-#X^qN邕|/@G31lo-"ڭ= FmT iuN`A`7 U=Ub&v\f:kVׂڈ>nTh? Ho-fUK5,߽KKvL$? !<B;,55գ/ FZ-KA +>Ze܌ + %dž',[ppTbç]a=Цj_>xwqڏ>/?O_ݮ7Hu$-uUx#듅3x\iX޶z`X ׌,i7WeV6c^#Ta+٬?D|l0 ZXl2 +c1XɞO-$}>GU8=d]6JZ*"ɨDV?ydϵz&ݤ ;4P:1*ix6_ۭ QWn:߶N)D\sr~\ =}Z-Q^G*j˽?ED$a@[MT0b1x"ְ&Y+btZ|?ŕ{a:bmݤ{H1*T+!V7 CD`ygz 30aW">6hB( t8&B}9dBY1wLV1 ܾfd9ٹjjjs(orVW}-=Y5ZpsXDZ&N.Wp +5(w[X`=QLZAq-Tg2ɼ 2LPx|b,Yzcٜijh M@2T:Ny_O(KakE0c$Ӱ*fbR'Ts׊&(@"`d"oRNLuM6=ltW2FFAA8Հb . l hDbVtuvw5:7;19Vw0Hàg62Km[_kzer|Ҹhnl6x֮{(RcK j6/SgDŒb%pQ ɪJf9m2+C +ɀ ۙѼ=5;zNr]z;l1蹓{ͩJbHȷ?\Cn>a~tcItItc' tPl^T(mww..yuw䂯.-*R ,y(ؗ*ɤ9B0)\-lXJgQo=D >o92<~":&vuɯ4ذqE-A]rK8}wlӂ_t|I^Iyv4\DPpu>L߻ eoB~_'mo本ͫݺe#iR(po.?n9Z3ʍO@cOI2mcc 5N =4P؋&3rлYRP".S@q1Zeɠ:x,vQ{#yPUfH? ,X2&3OeSS/DxBBb^p*Un@aټ-MY>|3p4x$',-pRlC&3ȁ!q +`ŋu !O@|GgˏSpm2_|K~#&/_p|2T\M j ʟۆny޵It 5_-6-3+No"Xv[-}weI^zw(X^V?IQkهuYߧ[`:E.y4{>~laʁ['Gѕ!PCqmi1Cx%J&d Ȉ>IHN %O=@<ӓ4 2@:,?m;G#KJy3H40=~T̊GdQ1 wߕ?d$64g|;5#|}S%hV>N^`Z t.͚҅fi|!uɎ%٫A +$đX#B`>Q>+A8m>UR3-$"FOкOج.js73uG]UZuM]܇ֺ}A,ktP6P oVK2lWhfxWγYN(Zl1UT~aE)fr)r'd*J1.*徽Tȇ20E8ogX<23 ڟ`s<ˡnn{DU/HdYֵ;=瞎W_M+ MXTZRHkO`kdAaGj/o5ex aua1+,4 +#T F^ Ck'_Vw4K]CCEⲴMhDN4|ءK 5VmA%v}S$Ꮪ&sb%x$Ɏ}x <KBߌxcc/ D̨GYCl1Q&xC빊$\# {gFԧ>hZ&EM.k7me(] [aLB0)/wɨGkcQOd,OԄh2c\Ϡy)* ܠ|^X;bKUjr>?,W򔂶 ++LEx8La-J]TR{ *97Q}.JZU?8;np^v W(؏9Tr>S@6j"z?vONit"ZDċVoFDkg9hՉыÄ$,ӱNo4=W͚⿕D;+_aMP(b82]=BJFBD\UaM1LrX#'3+{'(J)t&lGToWA1+Olh-g f4I XYN?~Hܗ,iC J?ރA&n:I=ܕY|3)џ\yDI_%0xˎ9qC0UXGY0{CKG[I-Z`9+fZKX)}{LTY)Tfb´-6"6qg_i~f&#oƏ[A77GiMQ<阰gQXtW(cIɢ?F{bIJau~1Iw߶eS8{wa.>ըj~ݖ>/ŻXFr6ԡX2YؓwKCM+-τ'ēqX/rn";  +('eʘBid!Id bcJO|Ǿ)x8`]2 +ߏZ08S43~ L9|[LQǍ{<;QB5Y&OIWdnf3k7VX@WVQZvH+ MbpG/e_" 'ΊZα^r|>g$~l` QK+e# _O9F+Զ +]+Sq\Hgpuu +T✯k,Elf7^-aųm(i:j6/t ^0S}Ӈԑj[L^peR{* j )w6y"1ưϔfIh\Źq:bψHtroۚZ2{s'եǬG,V]M-N]gEbb"+щUY|?[a ^[;CUo=NA]zA{ܽX ːq({Ԩ8 7 +^[$>FfU3 ˚J rPV3e,icwx>[Z?֫<(+cy$շQ&!j UWn$ EH$3\á9ED,#^\ X jYw)f `A |udA}=ܐIZ (KaW)A>L; s'3rdٙq8!MTEY1B1e=9$R%(UڄK ۷pLs*_Xo#s)n.n8P5`h;@8O/mGRGoT:A֜=^x \氶^Is07&祤۝w[QlZo%ie-͊ᱱ [%:ʺT_q#0H{ +4W$GnQIx]~; fWUM*AX'̥RaObgMVX;Υck8Lμ힁-,T$_ h#~~1f>ʱ4q{˞? +߲#9rRR* HKñZ#9p^\NWiN@<ʉ>O==՘ +1R\9$СAKaNnlĕ/nRn^)Vg7xWKa不VنO/" dօ.v4{._RPxH-Je|i5<&~(cCIJ*΂i56:I~R0>8wn5+ `C SK-׎KfOļfB ׅ~ΧT%:LJ" RNn2 w}qpg6[tr[cr[m5Kx?>]iLzaLgL\E0C|PNm*2I{`qsM"*}DDR5c-vfP]AMFňCŏob8,JaW bx-t+DQ㩒]}ilLȂ2lEǘ]LBf*k)=&?/ha1mHgNʹ%D ӻ=OuC-gN#A3 ́. #V٫ X]8{9KcyǠ~ N`QeYqPpYE/#?/1ZS6x|Th%Pʙ[s=*wB;E{;HGաNkeT_q",Eh +&~P[qך) +˜lƧ21XԀ5jlE43lEOSl,P)#Oji-Q>*т=dzjD8[`} 1mdo&M)6fA9 +a_NT*.GEaE՝Ѷt*~g_GI\&dٍR2x/㳕n'#I&pg +A|lSx|?Q-D97@˼+|q S7:黁lHCþv!x5Vw)7 8oEQݹbNXgמRrt* AP[BX)Xkon2˙hK_8t|rrtٕ!tS!\Bʅz["~#.'VOT%-ErE֜CJ Muq7?ךۙ_+ZasYc-F;vjIFmj @䵻ZŀQ"/EV2(1FG|eus=|͊n}BFMXPNPz*GSY:֟qO6eɵ=ie٬I~xS%k%Ո*E3.KT>"yJ:%s収_Xl[ +iV+k&:xeG7%etLGlzڧ:F\F"H0$>n¼S|0?rZ]@h:?hXtÛ%xqb};H+=гW5f +Jk{vz:!tHzja2QrޚCxUiA<)2/5\hrF Əĉ"FЈȳqs^ cʳ:9 yS#)(AMcTT.e0d4JO$t%:4=VPS-::WP6Rj5̭`k pBBcENzǞ"Etl޹&51uyC]u+{=r.C60*̱u|F%( enWÇR T2&ZڨZM#`>F60MM.J押-ܣU㓒8da7iaȅŃIu nƮG=i][.֖GYڤ`unr(gT6NtrvJ%pmܬ=2l?+[UY^O_k/R\=aa\ {|q! #p}L'j. m*8)?KzCS;)j6\pg}GJ ب4犔-N)΢uid n=q(32#35Owpu^kǏtC:94BYQIkئ^^L ^ WX4)[ +R(TSUk]aq X68/U'oa 0>U{WdE7i/pS?ڭl"15.ĢlTbwD7P'5kַqށ>b%b&weMϳ`zZ%6Օ*HnVܝ~٩#pE+S3bu\Qf9 iZ߯IknMo'{ vB#6.r' ٪]]*Eۊ;o\Ũ(,:k +AY^kK࿼06AD?$mhzV1cb*₎bU\Ͻ_؊b5qYZi۪!Hsl߿+ {f}kF ժё{=NMx3,| !P.njNC{+XQ±XS6e4+?oI!j|OQeWyToqѱ1mLGcЛN+u7݈_SK!(,S*vP*]_Ug,et>? QRGDKp: BU_30:ݠ _Vlb=?ULc˦SQGũFڛ0כGJXVK}A~ݟ>#.C7c\eL)>!+ً b0MMuTVwѧND7:t]IbP|nI +Q](MσP}DQ +9_;3I(osDV+O&ܟ"F{$W<\]9VkbQqXhY5zel{K %[LX- awX}*S>w v6rF(XGH9/jGb7`  +8{UH Ho4uț&, 1f>5]x ! r6QrE$mXH^t(%#E=@84#v(ֻ1)osxmý|1aԈZQ?1Hza)8®HI 1qή0~:}E~bq-嶫g5b[uVBtaBw]@Uj]-eKyOOIh!4IE4[vA<:ImGˡ Pc@YI(0F5gCQ4?BkOq dM8 XgJ+5Cً=,3w>qzeP Q ņ=]1MY"q|L̹M K4$ʨ7YdNDu278 49"-(e`>T{h%^0fy,&|&P,>4:@X>?cR ([k>-$w Q!Đ sM,d]rKI  (*̢BZ„ŵA\_La~e1S1٘A"l / }#) 4~VQ_3y7W[vĠV[n_~r\U+ :̄N{ժ#/QyHU(ͰK>|FZնw;7\`K6~e{?~/N> [&Y_QЎW{֜W[Y"}_JfrzִcG@{kQ鲛bc$9uʴ%/;`-쬾b`MKx2j8[rIȾ};. /@(x-SYTU8XZpƥvԩvԡ7zN}~\uJdz8V`j6 ^8dgu.0XVo*j)* Y1۳nlGkg gP_CYa2G[Ww]gzA`P@f` I4C!˰Php { F?Ҩ3%uӸ7Si)Ŕm7m6*M5Vqi=gziosErs\on6_m~e ,̶,[X*,;-&Eˀe[Voa]o-V[[[OYZoYZZ`( bp?{/ x >Gl6muRvn[혭 B d B)P&r!:BI# F XT8 ^/sMV !>79B0$LG"H!]ً4#-H҅A#] GP)*G5 EPE h: +uV#;3b,c ( l2`",یU` ic<6žbq8Og)"| 2܉kz|?~/8GB"18a'&q bA.q!/]>xFפTz"dMrl! +y"GPSDN٩T*C%QoSTKPmTMRR}UjAݦ>t(Ch z O*E7#t;I/}z~Q1VbbL"3Y,d0YZ&)dJL%bj&9c`be3nև6U&al<;ϦLv]bw l ɞe/W߳ey>c-vNYD{Y$lZ pǜV81O敼k9B5)\ue&opۅuM= +n.>Ti.Юpd4!c DMU9T=gaZ<.Em53W槝:ˍ4-fmk3Xq|2 't xm={ю#j!:xo;8-U)9Ӊ8Z.Ù5l.ͣFG܈DWŭw>8#Tr/(>!3']7GIe@Fk+zk_:R"%QK@]oc`9dp5Qt\t{|Ҏ!"\ч{>LꚤF>{m?/VJ(SX/w M RyǛ +oMI",L?pc]fzlbM@6| +3L[N XB*7pg_lH Gf@"htcYQ^4 9CG` @rQ0lߙGH/B'J1d!`|a&dLQ?At/I_HL,į'E6{pcj$;ǤGgDb"PAXramaE Łg()^y߻J[%6Z !ڔ<生l$ )RRr +%ơq z+ X |z]xֻwM\y֎:W8f $ycy`7KxK + ݭQbyIzB&M/:;[naw5%?1>0ygZJ3+k%+8g +ڥLw QJGo?2eIl?xaؘ/7@X[Mtk*S900,4Cg `5[[Eʯ'+ޮQJeQBe)SS"^r?bUhzɂSdBbS>;D>"S2Z19G#"^EKCn.#o8zWK"dSBxе6|Mw59USTԳ/I +­tjj"=(%3 3NznvuuZ=*EV.E$$$!r\!$$Ar$Phn]׮=m~=O?kΙfyy_0p;oc#@g/:OkFۅq3Zƅ%IN2E6!:d2iu8~er't#:^ %;Pf!tXG sEW)H? <='@:26Ggh,J@.]Kshb<֢{0ɢ7 zɤG #i*,# T3(LYt) tFG#SR>tW$dH=?)s700E1tX_ӫBy)YoԚ..lʲ竕0.3.SRo?f2rE=Jf'C7ÊQpo ~U@CB>іJ9k1r+:Bp5~%%@7> Qkޕl"&;%WsѤw|zt {8N9G+gIL1VTV^y<3EB_큅=qLJSIPs.L6Fe$YV<`ߖ0YcPe&CRUƏp\f7z%DЂA7q>sl VՅ'S ^ sT/!FFvsT m+u_Byk1U_f!7zϘA:/d.Fr :9ρ`{9(%@XH|Ѳ+§l+K4x}xs{߾}yB(B +Rz<ś`ZZYTY J{ fcۡoÞջ-d8^'(7A#L)kήH(2i^z7MXW!.hT}tf:Sz}J)@vΎooJI0EAڗ EͬI;7{bl*댦v{ 8 Z-#1]n>=h{ >ǀ,Occ7* )S\PWI(/_H_^E^1&A KppK Z(S2m>N>S~8V-b&>>3;22p^D}шrI3M-դܨľ]fǃ`~)`%i`xyXB)BosD; ?.jzjkk$;i2usn87R%Tˆ\z|]1< M]Zi=fڱ.|0PzAn8cĹA;p!8NwR*tqpIAP!MT" jcvr?]e72)lEBj[Hq/;>kQڬ[+4=Hе;1~ofk4Zpv95_b  cshTSw=9T54ITmn-fVNJb ^ > ਛ[ 82g&P9c%P:L FZ))Ѿ퀥 zmzt2X{zciAuAU1'MLLk=ǫ]2Gs/ ;4ڥhI<%2~Lp+[NUC]./6 V%Uš,H0=).S(9Ig*E`֑ +vKE`;Ol{|ݞk${ْk!WbA'߮ S ~4+0;f= ܛzz垲= 2y+.R0T.h:hQf݇ѥny/xgg<}=;F2=-IWjD2BXPbxք}3G 32q3b)@\57;_Qeĵ-ZB}B,4H?d겚RA$>jU,FN ѭI+"EΆQU#sÓi.t gC!?A_ DxIHZPGq쉁~87P)ƃ*l~YoN“0Cu3sǼO9uNh4Gvan2 F~̟^[Ao],;;hQhQ.IorMqN$l8ᄹˠy}(F zՕқ' 8FZHt()npTȠ?zj{1U=&f5_@9 '<1ӗ<$|jh o&cD<*U[B6??=,8*W2P.¹?c&>؀_}ŭ]nq6o.++n!>$#ovr9Z#P?N}pjqBn7Ǘ:~#\.=Y|lzG&c0gn׮y|fq E&uJ_\P+dghj׺^yCw C| +~1r|cﱟP,r o7j :S? +||G(n0;qf;Nx*iOf(`ms[LO ;A7ɡw<OKkt%x%%Rlccq;*mu&j[EXG?%Hy_Wzl!Z{9 +N-1!Hְf#a|_ ٸC.>/ C"jk^W߷W5-sCmLUٖ +O*fbwbuU]xnϲc[xۇ$C2uNd}?012o%V̯*[#zzt`.$0*5]XĽ_Y-1&G~iZxm q[r\)$u`TnI;rڂrUJDgvN<ёnc|X<}%^R +0WVk7mSi%!7z7F(xt&g;܊ 22(֧+y$M !d.>>`' ®h2xO4٭gdWSĿd?ʨJK#5h)UCs>"7 LZL +ȸApˑ ȳad7R V @9ȈY蘍d93Eɶ0ο{8}:]piXPt!}gpTޝCiN EjnOt](\%z,脤='r[}%(e`gI藾g' Wrs{9HcaU{e &W p{O-6IJJ:®^W> {nvSත=puP ߊd/?Ra[U:s29[(|3>Mx>&eAdhK^p[cp]?k 7QӪk +/&M<& 0v#A +I-.QMbT$?|R cygN'ǟCA)4] Aw I?ʓ%ޠW R_ݳ%χ_D74s[$<&s1Hk../1o|,Te"U9;`:&d%>:/tu ]Uuet(ٗOD_t`'dTɟHb '.&t9]΋\l6`2]aRB,Pxh0FMnp5?'#ICA !+w e|dTo9hƳv214-Mt1>,&g?V@>ֲ|)làtv2V%Gjaȍ+Ԅr@j/JlJ\MgxYf켝9=>[BU!PD!#$!7r';b$Ď8 I(!!QQ`N &&N؏Tn}Zu|:z9:υD AVMhe1!xޡcg$099dm.mr1MMT~7+Fg~s[ ؇?-s-wЖ,!<YL,,@n %HU/8’ + j=eEUNk _%?3J-Gdh j뭑M`ct +2}VlQ [NvS? s̒B گ!iԢ +A%b %BX29w%OHazyV-hUe:pнZ:9/ޣY `h Šjn+ yH}*>PUsː})Nc?@%P79L8IݮE +y}H ZUq_ N w8,Z'ȑР(7!_xJRZi@ov Hr0Jbw'tE*l bhoףV|ޥ!gRBi'nH0Ƭk5%|h%-)ZC#Ŕxك|y7Y80*xeJ p?Tg޷e.qkW&Y"-JU3Hԋf"@+%QSqTKhV&~0ibwr(4!@d0SG $c'З$PM`7\Aa00Dc|4X IdE~ZV5vi/jΠ!? 'ED,ݎ6:}Vm|EGr1׊]~.62.Dy),nFOc?7+3M 6Ʀ':=t ;%CTB4jiK ۍ8ڈ]Zt=@U{xJACg`u +!|BB_Q0}{o EVI\Ao_ޥOԝ Sgآ'a6W||yԕtMk`}ˠB_<f&E{0lQ+a%)g;S2}Z\]w7,Yǵr}Py5IY e[N}kf/Qev8imi?i + OVI f}{Nuh0 w0 1ҭDc`@c9[Tˌ*Q]QFsZ 4:ܽ:A(qsZVWll"3K]]zOiSP]8y \`*2"Tb +b[2iJ[b i*ʮlO'YwXx# worBvkeۅ" Gpt66=QY8FIb)Kx,*}^Ukg]'=]?yYI50hwC77m%Le2hDG|m\9$3zԉ]]Xڵow?+A3](ao'Sxl*IG `cٸ N >@HdxE zV@ARC`)iFqCOҗN 'C#m6Hwk !NnY-wf^aaUF;kS 1V̀%D[n16d }$~xa4 c죚:8!۲NnzsuvsgΩgj;uEEy'$!"!JE|:T{tVk봧Gi}.>|EA5w*gQmR@x_SU K_8 '?lMY0$Wn<|V^ `bV5[Ŕ=X!"5{UqCټ9|C,j ТzɎBwִzkj z)ʊY2Ch*f zan#wɒ;?g'_:b9 +?]J@2͖#XZL- ΀l=,h\ =a-Bߓ|`v)D&.9uz; T)W~!=n %'R8+mZɉHӊQb+Ղ,怲(jܷ$#aG]9ΞF_n?u!f_\d/V/mYZsn&N̄FdN;k{pmrh{[`-s?fAJ0y-я +y!aѤ.Rf*[֓~~X # \w Mr E3Xngl_.K6Tlqyxާ^O|CQSPT$KؓpUh`ƨES>^j,`)>lHg(?">^$h1,T*;Pz$zbk$' =a/}e!KN\XFOYi˄su ,`~; Q$4yP3*̈́p(G "#U],V_/ҥ!"qgfqK?9Cp{qhYMV(S`gM\Nb2tװ(J7؁JsS*X€#֝J5BuLQh$%,7~KϰЁyƀ(dd}j⍤Cap4i౜2r=3qݐ;vB/pǙwB79M;C-1u6V٧ɧBR2<?e}p1{j #ߘTR]N GB[4f> ˿Pq`HJHtB9~ʭ]Nҩҭֺwu:^}ݛe1hוi3&yfLj֌t +GbKUb"}o/iTRu}`9~/s9V#vecn9ZU [?0d'NʸU`ry5މU-Pb'ЎaޏEi x{dh%Aq 2U(\La@(*q +PT6U h5&Hf3~9e>8< qp!K>@g梅o%O9<(iDˊ$"G爈JFdFJsớO^8̟9EΗN[heMgp̨qՈH. >jM +g3^Yb>fp0),&Յˋ@A>LmQͩ;ߜ2{￝n;=;m/d78+RΊYwje4mJg9W %g޴0t=O&qXf"ΆaIIGxҗ= S!|`k3 {kdH0CV!&cɲTP\ci[`;ǖhFX|9a鑅ˇPA@+!60L0Ae2.8.ɏb`DM>|4G܏P&ChԱmݙfnja=޶i~7!JQ͊gv"Uve:b;͏B}#?f>Z_%xq{OUaFGf|nNc͎9)B_ +Ni}*hޞ cG?54COطDQ֒E.?-Xvt#5WSo{:.{yDnsx];`W/ݚT9xc՛;'+ F5HQ6CCߺ"6Ҥ_ST]9Ӵ\P"(ǡ0"Y42%WI5İYR؃H//p.Xx~4˩Ɵgn#s[.ZsOI("k6`u+:~ڠ,HK819tY-ZK׭k YaJb_J:46 +/m^iܝz80TVQ\{ (qcTzf(5pnTNU{bmijzjYOY~\ܚՏXc㺆8eeNǻ+?h"j1fE%vLL|j3R( L=S[F[ެ~lƴ-"^SRBCdvq_Pm7r 8%Fa113( +iTR&(Պ9BN!re3(m^3z~~sT(5qrenha3.# ltB6aL3#%AjV>=ͥ1v''E\H[_¿8N*\kq6ܑc&TLa쁜\N 6+g_#W{YZ\i[eБ +DʻURRX1+?x|ZR =N 0u5 4ԟ澲yi,MZ!1(4  U*zK@5x"pL@I(nZ^ſ/NV}&W +MqC\4cV@ur yH`c̡m +]j/w=3 sy;ktG*ܖ׽HefHuޑږu8=9j9:Ӵ \P J6|Ni([:kE"vr%o?v5ǵ%dM0VJՋN^Q/a[%?hDdr]PG'.M󢷉vfs !ߡK ABl+t#.@hV޼! D6[˟v kAC?XeF01i֒th͠k9!Qx3hC `{ڶԭ`3pNbPvx4ȞPK%*(J2+VHh%1|)^cϨ%Η+ 8jcu, w&GOr:*c-aG +L[&ItOAe+6{ x)qq&/AIȫ`a& ugH1?Qe@/$i&1ڳ+S,v|-n` 8Itœ-y,Q (9LP 8mY@ j)>5Βj~XqX&AI elU@߁IE _T̃2XP0L7$$r ̎TTq7qΏ1Fu^dei>LQO"H(g jlWyy#T ܓ:A v^խh)q$o|ZPRѡE'rzuq1F׾X>:Akڸ#ʫnN ߯v:!*SE~Oǧco#ݏxӛ7r9ʕV$R}*6H`-$W1LU ձvwOݖǻ|F{p-44Q.S[3qձ 0fg]7Vpサ/pe&4kVÔ?U)g:ه?^&?%ky!Ѝ_1@6U;9?:QJ298,4o `b( Xԇ0>qB! & ggq/ Lj4$cCV$f(Kcxڞg$C#t(P)mEsä8UX. n~cva/`Jd>5ikgsk۹fb͝u,ktML"_Ԍ~ GOJ0WGon +е4~R6" ĕ!B  SjB446k&MTڏןV6>rFLb)䛧,NQlKL t5E_x -l:+hj:h+1|^Hz" 񪺿" BLf=We%HF%VK`Mc5I7 зPAj3Bo ;LvAu*U%U)J7K]h/1 :[XUep(t I h-4vI_.- ',KBG?,x +NUkYBVKyKͼζ]0td\OYk?/(;?{ws'ADr#TU(D|ET@QFI|EA@ຂ'Q wB,Hhհ^463w绿}m5VYnL6p[+v ϵ=sY%Y":U"r;>8_u79O.o??<`W>Knuaڝm~5ӴD_̲L.9#e:呖b5wSLھlܢ32WqΣ=}%#ro:"rr}Ͼ[2%K&\DQ ;YȌwHߋƓ^cjkO~2Ƣ +:2gk]mY0 +>rFik2i [ju(qe /l¤MgP}N֍Cpdݬ:iBUxnY1,10sƠݷC~syɸcaԲn T9u"?Uxe|U3!풳ݯ2TW}vԘK +MWwF#b톥L +-jbnlV9y~Qۼ,拶)igtO Yj}UГymL#^PѪ >۾vCaNLU=~6/^k fקƫ:ӈ_r`f?OOdP xka_.Fż\7袥hz'2>iբdlg}2{'ZпQ̟mRg{Ču@t/7oLԷz;X~kԒܝEo.g܋=Ό(;;%[a9=ƅʔ ];[XJoVߍ̽1dAACӔ;nn.9EGu9}I VX.4M*c-뜝J^^yVhpkP4<9\Gc$%IKHxBLJ"ChCx^̉SAK 28K&Ċ &^D21*DC&E4dBpk>mz̊>MCtaXGXLlq,!86%r28;2eDAƱ'rrN(TPo P;z_W)zI|R"e&T*,TWz W~BNN" + :Ks:WqB](.jZl^wp4epԀj/2~R-0zAs|++뤌&[6JES&ioę\qK)3͔/6I.˴ \zY,U>;tޖZoGEgѵʔbgQ twXPT`C]??&M6I[gO{s9s~W5W=G[_Px9s$OZJ˥pS.%Uyn:TyQtvvvvv.ϸ dzF+y*Aנ<]xy&Mp}}}}}}{E쏡8݈>nB7['ѧЧgЭ6yEt;2mJwoooqN݅C{˽@dCCXTM.tգhZ֠kZt>t?@V^8-㴌2N8-㴌2N8-㴌2N8-er=a8 Oć' ꃨ><0xOx0i@ m&6mB;CA;C; 0CmB m/Bۄ m?Cm&Cm?Cۄ m=6mBۄ m&CA;CA; 0C; 0MhCm?Cm&Mh6^h{텶^h:h6mBۄZpf _'up` 'w'w'wgpV 'y'y'y ϦײrUh%+-+-+-+-+-+-+yO%ˬЮЮЮЮЮЮЮЮО5=׵_%rL?%pgw;]=<͝y7w.d>ikpTU}Enj.sjm۬>۲Q׫dAՍlUPmɀ:I@%eǼ45&-DhjAmh1 +yT- ȇF+**U'藲WwڄCU(h!jFP jEd/G+*&t-,BB'!dAȂA(AuAuH5(),Y dAȂ! B,Y dAȂ! B dAȂ! B,Y ^ P't:N: B$tNB' +(tЉB' +(tЉB' +(dB$AI(LL0#HL1n(RmRAvy]:eLjE^zLi/]e6"!sYUY/QɈ'U+Jj.ʫC]b~;3OX_F %KL)3r-.%2$Sj:_J+Jxz,hw_k8[9œ +﯄Z5:RK sE9M)UYjsۡeƈҘ T(xөߞ2FZF"ձG!{~5/5O>JTpg&[;[>Y\S HkPn>VA14>EWNV W^9w:B ?cSaI-Wœ=F~0c|~ݓ"Iђzs)ֲ62Rc$уV㷹pɾKeSBV{ +\>c>l~8~5!F)7uUjxcN"OLYys饭POD^9('g<;MnRV"Zh'<^FE{7;9:oQ^.J=N>XoYW{;ԻفRO( tW/H֮udzSRirޜb6E;N]3^ǝBNs=2:o)#ȓr\d utn9X<9/H,MݡY~C+yG,^dّ9{GrJb#:ey9Ny:59Yz9cۥD&#>rsL͞Yz]V05.$$ᶿ-ٗ"LO'`:Xk}DQ~F&~V|ȷߦGvɧ关>(6ܐɠ\޹(us5bEFuc8sq.PD ĤmGbL 1i%JE*Y +mJjk l +TvY7 eY}><;3}j拨Ϋ=kvY3##Ne, CL3fu |Rהc7+@ u¬qUd-i BLh4be6vej$Nߴ]M-E7r~;pAFU9WwΩ''mʰFm n ({|iGC;(%z{ 7k. Ϯh]mHj3+^vݡzW,R,1YQOYșe$K2 ނY;owK+y5y)7ӋNԷcAΙ KaڟM!CWgd7E(_B7/6QQx +$8aA"i@}!+|!{sx2Cdt^t͈n^Eff:#C|NFu, OϧMOV4S恶m eԲ=Jʸ**0J _3p \Kbd JmնBs]u&#_ jak v$*< ٭2J-TDu=B(+g-EZC +c1H2Ox*CxB#c8铓ڞć)~8WT?$s?@V}\^ 9g44[:W<!+kϋ̦^Q +{4+.;yMyf iO^" ד @SùQ:_mT~$iO2P>(l_5<ҫy7CkjV7F2Uo,fZzj6ߘA]b9XʭI~ #p)Um˶(֘# 1͜bD0vtip} ;(v};V!cx;6]87%8Whwi9Gb4,ȖZ=`CV?gw2~u+؅(lQ:jXk*쨋eT8kvL Ψ"YD0j!3b^ʱm#C#ͰԾJK!+e$dnUV\e=6MA1|~k_?h&P?nA +HLTe +vMjpt+vt(92)$Ry*U5\=+B:x☵ckX V쫵N1f^B^Fw%)\J͢O0g[*`6<}, +/%q~SwIi7 ]JY[񱼚V& ŚXO 5PlWOѨgD<ݬW߿u53yXa.Yt#'W&OAQ4BuZBݎSZHt,IwStK=<>-EEz~N_r +cUzݴ +7h oҋ8Eh7}zp0-TD*hqdvPd^d*0 ZYYF+"C1z*_'FkSGz68mtrnghs5pvn^g>8 tyY::F*HsݹE~.R,+s|0c/ BBBnN f:UZ\AQi3B" cDP:*Ve{usvs͕goJ>y(I^ +z^y58ׂi};\!<{yZ JrFA+`)O1$!-n.RW>Ľu6}AwVm3Zf[hsͶa{նml=aݶɞͶŞmgYni{޶wlk}d}<[Gqϕɮ?Ȇ)b-xDduT";KiJ,'ɍ!7֡6dG ،-h +҂Vd:2эb@O2-dM6iQNYސ_g4C3k>רFqA? ƿVE]=RǴO~ +gEe(O!npEXf:t 4ns5ޭp[5p;u{YwX oymt8m~w~P~~])obYEYߥPrApd^x{oA;`} Dfp(8M58E[p,89ditĸqzCom2/obÕ?ghrrɳxa}kmn6`mVr6r,|ls*ƴ!ƆLk'Ӳ9+Ka QkDZQmI㘍㉑( 2%hQH"8'p=1\BO"̮C /'WmTxT[͌!"x-_>u0*Ly=L m$R詉of"jF2YF?cNQCovj\p1|Zwya ok|#3Lfa&&2702]D!sr#{ML0?'a0C_]Faޠ&㴇^͙S=JL| p>8W9A$s }gOwh @?6"&"Q\j%SQJ U"9T䰶)0ۃdFI,szV(+tzE `͙CyG KB%([F[lG[&bk_*ԍtYHt.]X5D5a\k`Zq\ +ba}D B@v[ULT*&Y1pAw>pC|>awYO?w;4;Lw wV׹$ۧ)g(wiT\}ZQt_rg+κv1¬߰}ޝg[{~r?_7W|XP}2R}OAO d \/U_r_'җ +TJ,57aostXUq;olyyoof"UXdiM4MZHhAi҄?*bqaA6aPAEĚ@直)7sﻙ9GbOYxp07%u/ ʠ>KWxx _.F4\v8t'0=:=lu1qyЇ`r7S6^,Q*J?At:Gt:Gt:Gkt-t'tNZW-x.IQTQhF`xxlp:C.0mww6þi ݂ԯJN;*PjbOWM4{8VK03^v\Ig8\9jmGf7,UtN::Hك'8}Bg(t(tB8*t3_9#%_Pho 82pZ,98]Q:+6HLگS2M/#z7KQbH#jhdFF4F2YN#+hdFvRLj:&cױ:NƻM hdD#O#hdُF~F~F~FFH#E# 4FyJ#id.C#R\ q}]_;\F~7gogF( +ࢷ3K;s +vBD5sT3K5sTjR:YO5`L5k݃k` RKG/x\pՓ窧V/wam/P<=zB43ޜwW@];jߧ y&)ͮ\<]ŗJ3Uijvd+>TɄj&,̈́5 a=}J4S1U0F|ʙfRbj&Ijb| {IJ3IHjkl ēHRIjiyZ+$9&)$3IEHz\rP 3dP2fJ2C32CIf2dh-dmvlv C 1CIflAdAʘ*cBʘSLUzW yv<dG@Φtt2e˱˰u»!nui:p1BG@Q: +rWnқ^o֛Qձ0k]u<-z 3A'H1sN:YjuNAUoSM4jNަݮi3t~{;Y:ҹs">98unn/n-딞B/@?@R?ѽXsG' 2~NyZO3HY=yNI^?y BKzQ$2FүU@c^CY uQ5C#V:a ԕV9aN1:1>̺0>F`|hvF~f?G}ݍ 'fîS``ig)aig`)0=qBJ4I+q%XT`igig)0gYĜ3g e}Z<ʄ acQl50[LUSUTMU橎y<嘧DZu6St6_jЇ!\]p^ *]oY7c^{g1C3T 3fJZf*e$3B>>GJ,T$}]@̓2O +F|bS9 F|BFƧ|FGUq?7$$H ƈaC"FȡR! I T1Z p(RJY*FD[VYC)E3r<~n̽;ΝyaVyU1UF;v("mfa1̰H;Ž3ڧyW/W{NG]bRH{=D9,sXE9>:ViLsOG,EE)#eab/.Y\M ;##iAh{DўMCh&Je9ENl.崂Yiz&7Ԧ mF7zThmKhgڍi?FacBi.-h -T:ΦFed.h'ihk3WA{~4h6ͥt-GIt*Agyt]JWr9/VZIh5g%ZO-a+ sFmMkDLӞ4>E:y;g:N3:. +Vt Fw=IZz(L zoE=1-h,hR~1BЁtJ3iͧ>KtBYt.]Htotn{AzhNodN8@4tϗ)NS :ΣRjRVZIh5g%ZO-^f(ڜi{Hiw7M`:B,}NbO"t3J+i5GxK6[~:KhsJ/]Sw]:y'kˠѝG:E{AkSCo-gBi6 +VA,h[mdڜ%u{/o6__Q6DѪ+XT֢jD)ZjwVT&ݣIxqwđ\b$JW!{904Joo!Lugf-h>C1!npce :]ݘYntShj w8 {^9̽st}pKtA+doY$nZkuiUYJA{1+*ڬ1kMYg֛ f٤W(9*5rBq9,-{dT>/j9=kZ*rY<)䴜򩜓rA.}B ;cyd2xtl8G' C\UFU*e܇ˌNi]#5]cm/s2mC#׻שw;:ƚ|$c{Z ܻպw[^;W:m.Q1Jʌ!Rk2W^7d,,d-KdIGSY+euZޑ,d/+drAmK>J&eld|(leJTfm3s29bc温1'Isʜ6gYsiiΛ:s\6|an?]rB4v8Mh'i;mNy3 Ks6_;uD޻4! !!DL2 DMD1dddlc .!81iL3 ByO/1R7߻[VUiq-%hi (-Z^cVJZEj55@icmM5Vk mivѮMksy3t`Cuet&h#U4AjN:N:EiTM:Sgt\pCi3SeSHh mʥf&݊xN 4^:SRsjA- nK=QH0PWF{ԃzjG,WhL9g K5_-|.RJJKIY)/UTPK,ԛ@ٚk3#_|57ŷ9]?B~"FHXDRRB$\HDJh +RQ*Ie*5Ԗ:RW^zR_H#i"M4/v}Vnp+2-rЭqk:elV n궹nr&rӽ}n;^wo\p8FHGi)tA:I+i뎸;]wԽ玹q;a8Z( +("ҙ$kcN&`zz݌LEiͥy4BZDK)VrʤeVHE4PqLiMI4Rh +MiJiQ7hnp30] w?7M@Ǟ w}v φy!5GTH&.ƎK2\Ksp rE/R(f҆K|T7|aط7[5ijژΦhM"pt3:'JYOӍBܛ܇ܗE?P*ݻQbODQ}b_FGS PHxZȦ8d/ +qOm?UݪUSۇj zǙyW+"^dxZ>7H_ >FWPEATB/!ЀcLM{^e{~mkaoo-zDmgػ[{޷}Dwf Gp5nGqCrP\rCqnT \㙌4y* +Ӱ9f7y7M篧eL9f<\u7h5l@fѵRX99v>_~Q|3Lep 6oO1ga>P)]y0s"OTŋ8x#o=|\) +*!dK$KY$%%Wv~9$rRNY9/W%O +,ے6V5l}kٮlX;yvͲ'){ƞôew.Ur\CŹFd7/gsqܛ$UWx^Vtr +VͮW3g?#ܶMAG~KZm پj +t*C\7S = [&gP'ᡮ+9hPsxK)ޝ 'PuQ\6_u";TG} 6ckCuX~**.c.@zxa =1Cl a)xYp5kL>Ecר ^jyn#ש~js +6`Q i=i=8p'pϏ38S4h&BltmHmCy24071VOއ?6#o%'citFPZ#I`AAeL<˯6';E9jlN^? 9ҫ?rWwr^:#WOdu0rwxNݢ [t&d<eV,yG7*@K +Ѝ Ѝ %ݿ +NN N +NЦhhhhS=*>ڙY9ֹyօE%eۊ[fmemn48]e!sMw+rTwuWu\ѻo?YS(&ƅ`@MS $QDCHBLS 'tSBad<@λ`ř~ޞs{و#tz& +Iՙ |ĩz41]yySt>z$CS@ܥ"ևÈ{ďQ}:pO1Oq`zBDuyQ*pRZjΥo[zH/-&\6.ej"0lb 0OŚӱ)X$7nX|r6wp@]ov? 5optJ3PgP&eQ6flʡ94r)QzHoԛKm[u.}t=LpAUs@Q5@\l~ix9qTD+1 C: E2(,wws+_{ 'y¼;x*۝TGуzR/t>/U9%~j`E.(FazK 16qtXE@QJ=PR%gQoT?]M'\7͠G';_qo9#oK'z 6BZbi=F#nz,uД*bE,-D tm #4#s̗GiPG|wRK\~NU% "d[[̨.q0WkFw0b`fm`bjړ\R\άfBA?A8UrYSbhcבyƼvgS2ǙqcL]eL1BV@+=PQjc|Ѣh|n$PTsUUQ-T[YenSQ媜<ԫ)lBuF7=e: T>+,k idȸ1WiIm^{8H]xH| EQzcF#H^4 ŜpVt̜O@;Nf;1)vF; ς|cŘg3s<|>cȷ"c!㿄\,, h.2E1]۠GޢVh-Eo:[ x +gh.)Ebۢ~ fN' +o-gCtadU.XCB]Ґ7aΛxϣ&s4Ȥ$ԁe% Od3)KCdp6dr.F-Y)8$9gfuyf]7ޜJr|3=9ܐttJH__SSzңrB]=n9'ijO?F4RqՊߗ`{Q49G +? } *Ayo +j[B뭩 =\i'$wtžЅSf2ϩs炙Q?0Îѓ]uzޤK8z95 Ͽi}׿tBStZ89O}E2]+W]RA&$d߇V-G^.INҖˎ|ٓil]ե r|*MR @F/ zFC7+*فNhH#pۉ).`3@];^>OT5S@vc2i5CW\x,b IRT*QauBRgEuE]UTNv^v8Ü9\2M$&t5=l2oafo2LYd7zSlv9d漹jnۦ|oy1^m/֋^cK&xӼ,/+xx޾P3pqUhPhh08,nzfN86nN _'Pk$Jh0*aֵUlU[>clmj[$٦T;N elcsrn[mi/){^ {ޱe޷l~W*JҁYne]~O~?֟g9B/*k]k?"FG#]#i鑵 ȁy}}!Ⱥ4hx5_-wl Əj2HSf0MTGIuF}#ƅTs9ίtώ[mT21Lt0LJif`M)4j`9fΘ暱掹o|fWky޳`<ex.-ʍ-!bCLMsXCA"**$y֫jM1VGCP6*R{}}rYjur;9>s>Nj!w:ZOXTU:nt*;NISyΩD: NiD9#hgǩSNY|lt:;cx8g\uOusӹjm9۾|Ϩuܺxct1n;ŝ'"w]禸oT7tϻ+<ǫyce>ǝ7oϗeB}Y2R/W cF:AsfUF*i_My/}5Ѽٿktɹ:飿;9ݫR5父9]ژ\99<ζN٬zYʜY8{9zp謐L_frlԯHG9gμy ɪM^AUz rT5uG H+oZ=Ic9oϽ {q˽ows<':+b uGh\_HC"=mex0UL:jjlE}狳v4V(+TX`OT&ܾĬ1L* ?Y,6B6(;WJD[6+Mȣd%=JI3KߙJM+;R9t4NǕ)4et\'KOPZAcLՊb +^4)f)f>k1K+Zc.Z`6ZCAZb^|0lpl17H0(MϣiJrSVmM܅ren v-KbQ{ ӑ[ 1؃1؅qRkRDIQJɋR\<_H4RHyJ^JSyZIi.e&iK[RQI%i/HyV:sI*!oJyKRM:Ku5ԔnRKCjKOG0_K-G%}yQLҗ?1<)9d:Xy>/|y)/mwV[xPYRYf5.a<xPꙮRZs(~̟:kh9ʚnͰ!Px +Tk5i|<+QfwNe+֊ޤx9drQ]*~3gIhS%/Ykǣ>ut(b7ݑT Wܕ3rX~ H.;rDʏccrI~K+]Js (gv4sU*vU]Svu]K2&#^~k/99ZLAG8%bJJI:8 A g)~G..f:QK姹,Wj\kٓQ5P*2Q5qv Ⱅl-QcbXKĖ"kF?)~JG[6\_dKܐKq#IoQWpq/\ ܤ\ q .L- h2MZ9&/Lal, N c9EsЇG<Ǽ*= sc'U >Kn +abB߉{*J|"rV*7Bɾwī{ߢCITSI2{%19G[[$}KLmb91/Q ׎1C|ʘxs4K|'9Ch`T PE0 +8qy/?Dgt.:)?uybtN|Qڞ24# `2 sFLr3ȔOk8;{;FzhHf17QƋ ~=t09\x.&O8w`'txz)j1 dE/a[`[rO2bkg\N9]r7\89 +elZ;:T4ƯBk5U8y +akӶ~nX8]97w3dX50u0 +64XRO7aMAnWP5[q/}dCb}wqD8&E];ΛRΝosj[-ϳg˷7crX0\^yy^=KMۀΖqwj _GsW2g/\lwf]8?& hՠARX+Wic9RXI}|4{XA +m3nsF=Um*\PzBJ`i5#P uu$y0~ĵnxT1NYu2K5]^]?Mz2FJl?Dk+ĝc/b笑hg+ֆκk' wV| ݀.G^W+r$l:b=Ena6khw;[u3<@ l[} b+6 +~_M6{\՟9vO>kuYw>co[F;*٧.%ي*7Þt?D8wۧ=חYs +du䁽8n&>߄/#_C5̂`:w"'e?(Tm-Mn7op:(摉~Lb]=ҁ {r⾭9oAÈکϳ~=~dzr_ {A}8g uR$w2{'=xgj(WSؽ:gc dpsg8i_2XǗ:}煬ssbQ7dL4on7[EV[k"%z~([M #4"wWRוFjUB!$=W8!BqT đSšrQAy;&nܤ= !loy7ohm 0g-#/#==r~q9;[rđOy6=Liy {KI˧}Ihc"}pLs3Li8S9l8ANp{%,dNw:f25 K6=<0;ZZvm98ln#ͷ->}̟1W1l6߿yy+ȳWVztC\m8Gs1wsϾK"/)cݡ?ߧo';Cq^7-7]~cM7jpy~w_ +mWwCo)C/V +X]5"9z~6"}J )/ q %vǪSG'|>1B / egp  -xjTps( Ԩ}d .W( lv?J9(L +|塒}WX` +B{hQ<ۖIA}suUZ2:4oȼ}J˭h 3=Ởⵒp$3Q7p= BFj(s"As*2 ȴƪ>e"J|;ikBi/&#Y+щC}7,rP%1,$o X><ā@mSF]:p JmNc.C~1^!4$=cyxsm4AV>. +mId+{-M+7l8u 3/[l0 3T\dXkxEk ]d/'gq~$ +u,^ʌ XUgMly%t#e}N>j +SᨏtҲSM,5yfQ׽tn>Sq1i.:hyu$ P>:Gd endstream endobj 215 0 obj <>stream +HtRn0 +w( AAj6&Ðc3hmRœM~|~%cY}mİ?v由:eo*`%(s M25KXYb*Vrj]o^*Nl +3EYpS1}m-WkcR4EF/*ICrDLxf*^BƾrsDUqH!䲵ԸVsIhoPg68=y$ +hKsz!wԒ"Μ wAIj%6YF Bpَվ7=q,* ͊`c7ϵ^]0ſ endstream endobj 185 0 obj <>>>>> endobj 7 0 obj <> endobj 22 0 obj <> endobj 11 0 obj <> endobj 10 0 obj <> endobj 13 0 obj <> endobj 31 0 obj <> endobj 33 0 obj <> endobj 23 0 obj <> endobj 6 0 obj <> endobj 5 0 obj <> endobj 119 0 obj <> endobj 59 0 obj <> endobj 120 0 obj <>stream +hTRn0+*DH)MT)>Դ{I 9kӴEg=;1r<m?|> ]oix⹷f`z=/Ճr I|N3GۍPBRqVur=-} tq 3$4`rܓoO1FSg: ۪MQvSyQN&IkDI6-" ‘/o">4|OhGlO]<+ƛ"LTL=6 Qd(!LK6,)٥QK.0qLgot#Cuo?qo endstream endobj 60 0 obj <>stream +hބW{TSg? +E%MGϱGkG}!⃀ $H A$ +Z|O}tjmw/]svw;Z|޿BƏCX,zuﭟ-KghwҢUK*I1 )E42\.6ь444a(0|R dд7F Օ,O;bg͞=gJ%o/YD r"X'ʒGDRI@"He +`7"7D/ QJ4" &C% +dV2K UiU$NRj +Vk"V-Iї$D9#PK4i2ȴdH$ t*LHbӿKUJ@Qi *Fi52N@[YsLR%f0L')Dc%$VeviUjl BVL9$YIRHcz?oՊ챻1ڗt`B^C7,qA5㑍( A!H8G,$A dl@hBbDZV#kMq1H,%<.diB+tI uHr:;nqWC3lycD^z}!rB_ŇÂ/_6~ ')LKB-Vq&8$k2LՀSsav_u 28˝X1?(6,#5,fW{X gC~T>=פMQ=JRy:wHƁl1*Yg6q.w~8 ΅̄3@⭋gɮ)n8l/8>`!7;oU!?ЕQңVР {@e\QuuQ~R{ F5&V$.݅zrDTG[q {NW4#XS"@_ɑ/Rr+h}I){ hkӠKzWh^c!x1qXJ7?hCwԇ.w¨hu^¸Q +6i8wX,BM ;FĦoQrT`ӕ)cD< '5OaT; y4* +jh3P3xA=✯ZGOՠw 2a[=_w`!X +V8xEu`;]4͢X0j̊+"Jt=,w0*o|kП($]GdipCmO2f L+_ yBUżA+QYM!jceC3{ +?a.vkQ&KxQqH ~;t2NQ6SG@']Sm s@R4b0 ŵXZ\c탟i6GOy b +;Wkz*]o=A?~S'jeK jbvL(fwpF9 "˜Srhx3@8 + * +??]ZZz+u0WY%jwxMnRWjaB:\}YR @Z= ϩG$>>G򾇱 +uIe_8~Od ~ln,3C@2Z K% >scO=OYX$I=n?~s#$6o;GƨʻFMd!<⋤yb|`]Gݮ}t6KGi3_o@H0λ2Z ht"i$4O/\OiEVcq SB!'8Dzb:nVM-A&y7c~bEp7w|-G.ܕ9_:\h%yRpd\}r#OjQ"1%s.! )]L` **[-(jhm:[FNRc3ydugfm%ƒ|{ୈ?qD$J4flO1QqaL+))զ>z))x|p?8 900o0pwN}ymN:Uc1&THNj9Ng_E!/58 wB0 +]p1=&C;4zy.c*D<Jv-gaLQ9EL0k sei{:yC2^zcAӍnj 'c>MxQ~eu.2y.tLzZ&KJK_/zIaūe%uo% D'7V1ݜB4g9] 4yh~db@&XDyW= +o\-U~ +{UE+Ex#C=xjUWk. +T? jS%N \iVbC| cx5:T t\DGP:&ԳP9 bவ`+;r;U +ZhkfZfIGw椧pKJVTWTWaT.wv67ͭ,):p:mmp4 7hnVr}5ϑG蒬HP^t^eF]CTj+i0-ҀdVi*e|}+Cd"))KZ\8-3Ӯa ]=SDt/Q {I8fާ(>(~hbԦ9idP9"nt*J۴zG8N%j]f0 ({Lo3镣M/b?j=4Z΢i'*. |@u}YV?F T1;>ØywEtb!=:׿o-l6ZKm?F}i@dQ4oFWw1xi&SoU\y ur{~rl=8Kr p2.l*,W] =8+v7bx[LΓS8`%h;}@,rzK:d*L,X3.7FaG-殫^hԢGK*6ml+W,ͅM SU7]hѶ⪢M 28a&٭5kjZBs +0|"Z=^LE̐J% zCfQMz<}s6Ęm%bOx 喼re\-XNʼj;wkj`&+gy(z8D~GU&, LhUa/R/fG endstream endobj 121 0 obj <> endobj 61 0 obj <> endobj 122 0 obj <>stream +hTMo0 >vFWi>F=IP!;k۽&8AYq^#YNO)~ud|{ %>(8N,wb {}g/8OW羱G;-˚^U oAs>1蕽 HAVE h[sg0tb[3Y#I/. 'mx^3+'Ԋb5b4qDCc(Y(BJ!fr?(SG5V>?KP_uu s +/`~x endstream endobj 62 0 obj <>stream +hތYiXS׺N ;ZM[bZ:[PY+Z@E $@2B<& ;4n҅Lׂ__pT, +* +eDkGP,&KB$pg.,YWζyqI\=#z޳˟|S̛.mB4_i5yB=fm;'[{F87? ޜ L=خKد)y#~gZ^B%\ze}#CWo1xG-H$zZ>G=Գ?ĉ -m -mI $W8Ȭؾg3-HUl4OQ8>"l ?=TM0y"'?~ +#VE1wPo"Z4us[VrUVLONq BɉA][n=Q?{T&1v`603leM߽Ooyh"^Wmkw |BuKV vQP2G,BsE6dP@&4rrK{Q;@4= {7KSkx5O蒅'dwo5>Ep 9ED Y5av~dQ1(6s c?D lzs(=+g0w'H5 +&xXȁGa-Y8mo,=miv9ʚ.naR&O!?_ɾ>Tm;N}þɗ4Wf! +^u-C;LRdw`o<`/s$oهs;>vp?zb,f<6v|C%DVN~~v CG3k>s^z2x] +fB>|jk[oƹʁp5d $&i B&.T^i$]U -W$w@`1<*ϑǟc;A`y~X>xsDc +9qߣ1?zIL:@ y8sz.X!optsi|7v%im悒R*0#!{ E]MȠ o__zDiOIG. =0ƒp?X Nن y:ʗߜ S'(SxSds{>å.<@bN9 ;ꕆcS5]zX:Ѱ4[sEFl@+$ #Ni p`3 w*zG= +'`O{mCgU7aS&')胛5=dwIlX/n!TXk8Z>z,ˉ+Uhc_bxv h<"K#`̉,X5 W+-KЁ>g)G`3_%*αJ|'Y[ER Ma H2 w+.$R-'XoQ{r\tv-Z + +a:UȆ +,n36FcbU5S'v֠ޕt9;NQz>U^8mj/-8Nس,fD 7(!{~rj 3Q"5<1d67ʡWhPNLv/n OwEiNxz]Vt4q'!mOR 1 iA[qz7Ӫ*F``%Z- A^T\nώY “bM ;iS\y}t ȳznP[T$mǏDX2 fx'n mrʴ%2lgH~7#0]v^^mt҄Խ8@x˧BKcgsW*bx{R?v\ꯃL`p T^vtkltY΢Uud=bS\Ϯo:'ݷ05d:~fQOTT~jS펹ʔCw Dtx#5T{mVyfz{7}1x>n>~l>z>tr{jK5%$]} %yE5&g9V_g=[@Sv) y֌5^_fUX|ޑ@Og9=N/Pkʩ5lح̀ N8ϔgp?7\=|BG.KˍaDd#N|P?+U[Wg&s,f)K29)iQ <])ss* Svi-pv< +sz ν8:IѨ34e!1xG{oPIKs$I-> aGwGZ.$^cGed^5$sk!"!yt/[݋1H`Aygerdnm~;lfB ueӀ9zkj"P9#$ O""2cp|?אzݖlB l:b\x7ffG ~S3}4u9LRiIdӖe~MHR2eqiiXjn zP=3Do[U{/v"KAeB䕙\-w4͎SXKV)o4ա p h3O%殑FUB%Q[~ ۗn woe{iE-G[S 1H0hLbra"Ͼ){7Ь".9s_tڹK!Kr*fȤh@]K=r9& ll5j)`V +-v tWIr +|\.ʛ[j[ut;'= & 8@BQ`T4wOrijFE)5e\J3./'7$>,$_`+)wXaT*z0'g[@ +Qj{P ex[ E,,#ä#j@"p1jiᕑw^X[+`/@.A ̀tL[̿4;HAyEojSI/fH@us-}JhخR,/a>~>N%~RP7ޗGSHvA> tL5 Uuõ$@4@]u%PkG~ZC4033H8ФBvB&v]Zp5#$?.j, VncJ7V2u( @&8+1Љ?Y[с֋wPiU!h(]qbtmMbC)TI#{s Ԋff˗% e !o^<;8J`ޱXt}*)9MWn\PV:'p/y)yYe 2s~i6E& +dm9q]AxW3۾xc_D>j*<ݯol䷞3r +tCݭnh +^<=qLQM epB_v\at<z;"2Q3,[k$)q:1.Z]id|K10;$u.=:"(_d/+# 1w#@w0j*-2r wT5wDt J+ZZz|?-5~6#lcF^^6n2I^%%8 _e_{ԣ0r,ݕV%c`V R28p +p_=TG757eW?蔬n2>`K* MX[ȅVъ:piYp8w5:XL1Ôa4 K&cS[Kn"[\?Ahɩ*C +nz}(0ޮ=ot*;Bt:(C^ɩ0`PJ4="c񝃴!|M̱1X=|b!&F;V +Sdz)&rj$?߆ՖOij'B:`Ve0kV+VSa,7TuCm0w^ M)^b5VtzvTK+I:T,*qV1E`@UI8fPe{PVRDIԦi\^Ae ̭4Q2R{#&5rU*ѕJ| + +ŦB SrL.:U*H37` DA)l[9V0PG5hcvޢ*t$C*cԘZJ 4) + n(,1fXdqɃN%2zZOV +keRo,6ҵ*oFCl ́2:^g9tPu\ q8jCvr :}Z9 |$'Ut둱' 8ޢ"61"1$!Em%UĐ8ԊIFWk5BcȄhvV$\LOu;m;:tS_] +on3ź܌zJJ_vlu;ih:AeU֤|ta @5t6"VQᤣƉ'/ P RuRʻl;ǯQ$' 50JtT@MwN|@Ј#n֣!jO +y> endobj 83 0 obj <> endobj 144 0 obj <>stream +hTn0<S`UBH-mI{w̐"crwFi|vOf <# i`f%/u"9/l|+o@`O9d؟:>kG7w8,ui^B-jmߗT1؛/)!.ęaYˌ4pE9'VPϵWl]˒TY-qcn[r#D$5\C\/φr'Nrή +$~XlЖU,^w&"0צ endstream endobj 84 0 obj <>stream +hޜ tǥȲĈS,E6[RBB[Ri:v\|ÒeKnFd]uY|Fs8q8噐HҦKZeylӅ{i9ht:7m޲{_>ޖC*P@gNb`0AC~y.Zfa=J" Zjx↺'$%=k*{[]S>vS܍-5*[ēd-/bAUC}zDdx- <ʕ5H/ֈkDm5_k.:ؒ4:6vmFNLmӊv-.rh4$#fMѮ[jq(gfsy;dYm+W]y+_6 3trGΨE~"ջMdnCb( WIEv)j$JF < ҅p=èFY<*R AO+DăjB6.GcS1a]z8%-d6G +~t (nmnJzz(XɁy (;ɴą"aKݠ45L bl8Bd`IJϩԺXT X#5|h03 PYM@gwŮ;p,z1:vj%!550p1Лދܞ@HMt=}f}Kf̌ܠUjuɆzYfd>g}8Wq==k ~mv2QZj{p˩_Aj¨]fz⮧nCVO 0\OQzk=fQga81k 0AykuFA"9@$nkJQoNK &fY ܤĨrŸmC?OJt`7-IUm?dy? }U7gl(rotr4*pŘ _[~,{cVie?"LoQZڐ;Nuz܀k1y-Ӭti3=GY"n^R +P>Gl,>x,1ʴ FDګ xvƜ1Wwŝ bM8zھWbt@U 'Wb**6S0pzС/N#=,JvG=e菊˪ZEx%Z!iVYJ=Ά"ch[*kkBj*&L*<XS贵L.2ŀ ^ +~!X 7KN^4,^cRl +UJI-(XP#٤Z*$Nw#Ods(dC4{}.DAQ)O gŁZ*oM"'pfU+'B(KZvE/Rnn.5"rˉL$âc(uu/7 >>3āLeR(K," kA N]7=< 3 1*\[GX_zm.KW ѷ#4F`1˚7P 9VW76g6'X_*zNZTQФU i3*WۻhH"jog|(2l(z07J7k-O.e na5˫věgӗҿ+ԃL:Zp9`7}аK,ѵi$`7|! oc}#0>Hǂv$\(XPQwV}?ɸ;}O|r+w"Voal_qga_qc5 +nۀ*|kvX4q9|a+G~*55 }\Y'9]0`f)_$bU 2\P huYw'Ax #+N䑱AR +H}5#Ԋ<$fbץOƯ#ǐ +dAQu)GOLVTj8|s~́Tomm 3Yx6ƃ GN'Ճtf2_L( jT F\>A֎|-玝 C&6y,e]76=y6J'%;+s=.,90. h\Z'& 7^a+CPTnD8{r5/}c#OAաJE5oA + T+U#J,؏!Ecuʷ&gd}k|]QT*Zƪ!zr7fOe_py8ygfg/Él/}̰@gt+(o.*zOW\=іQ.\Sk׽SP+ՠRu :]n&., +rM+?Ruao> endobj 103 0 obj <> endobj 163 0 obj <>stream +hTMk 9nكJJ!~l{wu +1Cw6}^`D\5'`N{T_=4mI8n ﹸᡞok4pn>>sbXC]RY5#пy  .AiMq %3k:.R\;9o;u[5Ϻc32|3{KE+PmuP.`z{q? endstream endobj 104 0 obj <>stream +hbd`ab`ddutqvqv 4 c!"Ћ?y\dXW\*a̙ mO\+##H̜ĢԜԼTʢSd a`hii`d``ZXX('gTdX뗗%ہLQ(,PJ-N-*KMQp+QKMU{J5vXNf ,VX0aTen2~}_DOi̩k2RG3ߒ%~l8i=_o_x(}p]nH];(J~L7Kj}ܤ6z\Y;6L0}_ ~+Og[`0a yx endstream endobj 158 0 obj <> endobj 99 0 obj <> endobj 159 0 obj <>stream +hTMo0 +; +V8Ck{HL4B~vu뼶qĶ5AQp74^BhHRнo;U |N3FHSp,i@:7gX _8!]$ҾAƎW}rkd8YIsFuV?ԧtQt2i!ցwī3-yV8#}R %Bt]$(0[2I^6\-yl)"$p2Up2eAz8:滹OR]! 3wlG7` ; endstream endobj 100 0 obj <>stream +h|V tWUYt,UJ&@6섰CٖfI^$k%%yb[.fs;͐$t:Kwz2.dJ@wϙ̙stw{C AV3rETO\ 8QDa+vB.Ŀ6ؘ+Pm# og\_j'_Z ӏ?ǧV<B~N ҿ6>6qݳϮTraN)<͇1*sӕ~^6,if?ؔB+<~P!h^J&>@!}=_.Ig~Ud.T|V_TDߝg E@ƿ2{F4ˆ `, ``c al`061/3 F!f Hz!BeSxOȏp +e{xƩA}QA]o5o[> åQ✈ Ws]!gk?'}ӪLirM0̖iтÞh)QJoQgWZm'h`ӽx|6Uiy(7)j:mnXu&Z +aD=%OT^Zǵ +ii!+"cp41K.#Wa-YA]Ujm5vhci:Dwn`|>5brRf^83uOx۝8$$yRs=!˻>u[KЦjz:ArK:׸GJ`i +d͙6P,)jٍ`qabHɤ7"(܆A럾s`AgsJ!E0-d{P}c|0hT|=K> +(2ݸ8u j溤/9 Ζ7=Kܺ 9PΠC%7xu!?⮇+ +e`WULhnkCAA}>%6)"n0N*q>5RԪiGIB/.ԝ *6:MzF5̝[ц|G3x%mtG|' _9[d`S{w`^] MufTj.5TqLfS9ZY[UWsCao?|xkf ,[{{'6o{8=%/+C.3o*B~xf{MM-`3fgLLjlEˀ7ybyH-W2Lt2C>L1^ +:Řc'o_#;Nj=!? +Xƒ%xMҼQzq YMD7>Z7uS ] mx1Z]^$pUMszyރg1R<>nni=@1ij6D6<`MF_ixJw2T/~ 4oNv'~O\zq)wv2Mc -zêu=`t^Ω_P%E(w@+afGBJ~$~xQ83F+=X yU==ح3M]SѹI|FeMƇ*ƵNC'v{/.\Lt2%΁IiAJO8IIkp@v +$f06S[Y]ltuz` >/tDA1 + 6}MYfٌLyU,#'hM~1ZҒjsxъW86}BSehAOEA T2KnѠeZk b5buS)WN+p9EoW5$ڏ@7&KtPVXQ8vXnGPI-f?it/bgSu, ˪\=d”y˼O{ *x ^z_[+DJ?2Z P5wp:)MRIuV|5yt.Bq1ۺ-&?%gͯy/pw endstream endobj 135 0 obj <> endobj 75 0 obj <> endobj 136 0 obj <>stream +hTQn {L'v,!KMH9&uj;}HfVvqqxpsg!tf':Nl;RSqfox=?_l>jL6dY\0,-qS endstream endobj 76 0 obj <>stream +htxy\SW"b%M{;֥֩UuGE\X"!,,dIB6 $@¾ +"Z֭.vng\zxgޛ:O}bKccob_y:?sp>q㛐'1k\00[s$>Adid6NLox3 V +7V~ZAICa\͸t} <;YPio&G#zq.>՘PG2YSd&}MoXު1I1fm8씍faH& +`9X ]Oyw 8m6 +-';fw>}]dgM܄m8/;8 *η0p8~Iu_Cj@Q N,i +7xkІAc-zܨ8X 7_\86nqp8[V5dWXe4ɰp=Mė!!YPoq8$um mf!N†1OL/QQ[uUøp;Uvٝ$ɰQiznftf$F9N%wc&׃ƠZ9 +j0{*!O#~Z#j+Ub,%?c8t;8^tK_\oYY>2hkHy}5#lڲu ؇@`u&i-P;mdnWϴ[aUOAV16TBl-!je׉ȷ06B,P[{1CF\.zc,+W.q |LSlN\sl( =yfۃS7𱾁A#K±@:p~͞#re2 xKT>>a—A&T j- (`u/߉9h;Y6;\ )h'IF6,!}?/Z( n-Wϝ!,Lόkn3ǺZ;jPۢs +Fjj;:J"JXgg&(3Ks΀sZo[W0܍2/ZKʔթ#ļmbZyhe|c}5;aeG tgBtaJ5;HTkIHkrȡc+ +IU?2Z]fn0aY"ѤEe6I_ [mzժr 4lj"Ҷ(JToU9HWK=:>,L% /p\!fs#@&J3dEZ SZ1QU*[J + ^)Bf֏N!R%Ua5VKKs 0iT2j2 vdBu:AnSc{@|6(jbkLC08A*|28ڮNxȇ*9}9[ޟR!k>xKk]'dS<\UP8 R 8kh⇧O6<Es]!Cކzt0'b:JҖCڲIc_?rɋ~KO.Lõ4m!u|UǓ7?,ڪvժ XuZ߳'ᵘ6.< (/Tf땪7qå⪪'%#˃_B ;. ҷoanCERP)`۠C\%/RA7q`!t+ ,.Y>S * D͍E8:hvƀ?N.Ep,wiǛd}'| +f,m?D2MChRz:$πΠR\Q/5N-Cqy"D+:nbe2[Z$ 6W1ƝGPCR-YĦb +c<61e 9$&`7MΑ+ȟ|-S`Ʌ<ڈ1r`yٽ닭%&5.N:uz %q +# 2%~w?g_Kz';)8'U Tdu8v@r 9b,Sr0-T[*KEc7GC#B> ہ$;ξa[, ^H%g$62SoLKAz +@Kh?[N27g2Nķ7ܠA?y(?wiz΢Ⱦ=.yQ`u"WJqn +X`əcxvwNhy26PoW1DDTʄoGKA @Ywsna8/08׏{{xE^?˶Pkgxe'cbۯo\e?x 5]H֕5ذ~1"EXby(ÂKx0 2仐;VFOtcβZ/{+}1xRV&0Y0("h^{b6|e&`~s EIfL4>aՃc=U]XMyhmk+Z`\MYR@e(xn}2xojAYb-iE1#_~%n['ɫ"2q  ם&><$cA=+7pmcGow; __Ж&<*y|H{K6~^iuyb.j)G   6qg/=3d1 It|ppʺ봙x%b$ &9Zp6͡w Tń)1&- +N|k8 ({bdxt"@ <ޫY5mULw#F!JsP,"wMtdU!S4&!zdK-UU'>'< L@ SC?[(NM㲼E( \ ~^Lr ӕI4Nw1^y(ӓ<B(_jE; 0fmO3|:y +$H7+PI+ &<3)hjTK < 0c74DRH7`$Z܉iٺ;>q##ay总o"uQdM>Ǚ2 XkʍR2 H4D9XRT&WdoԭBw+++L[w +s*uL٩W +,@%/-ћ^k\ +({*P[CmWx[\QJeSINa4%F#bt++.1[oGvjiL||Cv{=PGTF9DV)MG:EKL6u1ɓpT4B+BuW2PwPm~<胏'Sdb.LJ`a +.kH'GBjLjА 9BΚd6`߽r`;*SkQȌ|Ԇ>6LI?g""!# \JGgQf%#R?vX;|Zou^ +QfU6#h1xJ}HC ֜y+YbGa*=ѫ"u*'f;jyB?Y0Bǫ_4UXj +18{GҖĨXhq;<$ K{s>Z:'"&qIdGMfG)J +9Nz}=w ,lNГvp[zOR{˜'rg,ZcFun *5[1nSJJn\p g@qk<$P͏86t샣^pJsH>7VHGab lurVT`g@l;~aM >ȟVbAvr"*o+wTWƛ͒Ee؆* rKH + #U⤺d5% -nVwni+&=-1G@T4!v݅Tnl .,8As鰊l&#o-)Q.Ynb+:t~^J~Jťzh]> ΞK|^N + +o@iMImIk`ҐUvY>d<(&}୬AW :P.K}/F_} +8wC-`"_L +wS'gFKD=.0_jR+7IC B4. * N.x Yw<9 q{9-&k-FvSi2J<_YןvdJy豏G1v2\ +sm{Z'n|0\ZzZt>(~TNZ2 M9t}xk9 @A>9f.,?΍cAX͉hZ) \b&ǩw;AI=!ZL7|M_<ƕޝj ^rr܃D5J$[x>A +@C~jY͸Eo3qPYPW[ߛݚ%=d\Hgz U^=.oxn5;=VxGrޞ`OȔĈڧ+n" {5aE lh8; +G揟 Yæ0>Bg +'7nw.{5dfr 3 a5.%PNo@&$ϐy(O:'GTpN 94Z%75xu7~aKu 00mvTgwU G2 +4*JRH/vkI +)\fvAH̻W/tFm-J|7̤S| RTl9r*iyxO/qJBP_݉:ަ~ =|,j)JV4ѫ`̺?3oEVԣfj:)`K'ٽ!b.'LwnYs(_theMӵ]n?x- ~D:V/ꫨjrw ovi}L6TXHi$8僇4vBe2[m3Fڇ.hm> jZ-j\k[ͦh9sH3&Y 质Jh56cw1E?i㵨g5W*G2K0Qĩ\j6,Dyzv\E;hGoLEM:G{Z-QdEae{I#xKge\;(;ѣ͍_Y#act>|{Sp3 Q0/N1zZ pנ]j09nEGGJ8T-׻t-29MVD5)Ea,u$3q  f6'Ԅ>>!Au:[#rL*,IUrZL/r4 <̅Jh(e48d{Z'0l2lÅEŤn <ǽ<<lf:"ڄ(|0`mj9F&I n2L:DThli:ֶcnqV.~@1ƒuap0L"26}> endobj 69 0 obj <> endobj 130 0 obj <>stream +hTn0E|,Sea4BJ*eч{bːE3H<TM?zu> ]oZxq@CyY iao2Pofw_|ށzq-ޜau?(pXB*h Tf@PSǫE:Zd-NsF(øM?D:ٸ@JdVA5q') +s3gNқqoyq"0FxS$~Qh31דLd)g}EXBb\cx79w ;Z[z endstream endobj 70 0 obj <>stream +hެVkTW.Th#m%*"+ft "q(*h|[ -ݧy(Oa<qԌk&jFhn+F܅jI}sgZ8g"ىDn, \f>ގy43?lz͗g~}q%!n2_)} H$޻66 !1C=;Bxxc"JXO>="bR2Ɨܹiii^dUBGZlJ(՞He(q^/"bA1EB0k.A,$% #ڙ""r Q1A8ZKL MĐB,ys$UR..I=ye&lpt'weeAv0]mbKT79x +^Iu˱|-;a|zA%vKX<LY7\D]S0yͼ2bfpf(KK؝C:-)).c +_ӲTﬢ輦WE_|~w Y$k'XzQ_X;Ƶ ^2}>/KN06RƬ\E_E/Bﳞ;]c7t*Ո)}QOϡ!nq-z{ooA飭d*<}~)U<ȯR#O$ ӏh|eXx[A'HSFSL 2ww7[V#]2-ʓX"QI{] + +WTFo6>p='rLQxJh> 3onkzlm=Nȇ>yuIb{Vw$ +}~/-SQ{Lzk@ehآs1\GMw&q9߮{cյ-&v>\ 'QtDbvOiBG{}&4|-+`XI< 6;R$VYᕛ'nC3~#P0&eDԘ 2mi^E\~ڶrK0g$1{QA TPSn4*N_gl![i&9Lޕ,Y\&7L{1Ӷ;'0dlpA<$na/Zd1לטWh|EDfs:ƾ椣Û3ؿK_p +p|1 5@|ՠ7,\]\;'w\13*dzݎBڋ\Sv+ +Q/8O^s >ux ;aB1h lzg?ߋM69Iͧ?yΎRښi8k7>NXn/Sp *9|Ts; +"ש4KY&POtv/0xœRon*j1pm_#v򣧶hiW)\Ū6oW]`?\:+?S3Iπvv&j벹 8PR0FߩNFK'է4}߳O+XS<,!6p؋bRMGa';`ٯ5 ]%W:BʟA?G ͆ZWf$U\^AJB]"Pgfzh2_R5p;;Kc)қ8uq:ά;Pq.-2-T3m72^ CQ=\nvZ>JWG5qat ?^¶lZ>`TaPŕ챷0SXLvQb13ܡOګ; .v2Uԧ*wӅ[3rYoIRY;o%+ø.+T*yYR$to%X+AMh*m\$TPTjJKƇL+JxvQoC/QGjt +}b1ׁk͢i tG̏NcUՖV'BhX:PVYxgZkD?NOd:lvuS +0 Li endstream endobj 131 0 obj <> endobj 71 0 obj <> endobj 132 0 obj <>stream +hTn0E|,SeyBJUʢ5iRb,C4mjxwL?CFuhxq +so IAj^vi!uq8n7:fw_j- ~q]oΰ:%x 43hEIg9 NW}5NV*tҜj6PWEh(YJN}Jȶeq&=g[fxO 93-ġ" ֗AS,ĕDrISd YtC>pvg2+C{T&UUH]ʗ}CnO6uqf{] ;Zn2ѷۢ2 endstream endobj 72 0 obj <>stream +hެW PWiT5(<(.1  xpf } + (#xntƛ$*5$&.fIJ6ImnuWW~WA칞s9wJx) 9) Iy߹}k 뷥_&C6l$L좺y(a¤Iҕݼ`p6&%Q*͔a\RD*Mk>TM,TVIHQn406604:ѣ]PEP-IJ*fse9X%]uYO=t8ҎB2# 0 t6УQ^D +{tF{Q E%/&;|:%GNQ-W>CW4eeMyU5ܧ/We89c^<HS^%ܤ.u@p+OՐ_c +v-i?v\(xb~K ԔB^kP{7޿,Ækgn-[~oUn]nh*"Lܡ+&&u1z=J78SI l zwnPN0%(;.1%$sgD Ga(q:77MzcK^s0 lEx=QJXx4sHEkf*S7GV%Myܩ9]+R!haN66g7vT7W ?C dfiRNU@@%aUP**Ԫx&84ìf[Mu·LUW"-y8y+cj[ +y! +U{%[d/=ZXT#[/7/O~oX{T {p c^xg<p9Sg23쐄6=Ja',Mej< &=p10 (2Km%Kw9x1)Ŷ׮ؿewN~c)M)N,-*˳X6[tkWrEkQxXWnSSɵK×`a0=EmGKj "6N-59gt(ɗ*Dc7mCք-ϱ"U#Fx=Y_t^4MLt6SBfn=;)vI(K9i|O.6y%ڄZ3-ɨy//.YͿznow4342M`r}NTܧ94KUA=%0.y/>yJS?[ZÜx v1'`=8qX3 +F#&cK}WS}rPQ[יGq!ѫ4 `U`HpjN +v 3SbrxhSp~Y|OoPx_؎ G`;Sޚm) t CcT6yN펪ʒڽjW._1+3<⑿mtH$jg"(ZL {)X% ٰI AcTwӗ;Ga:/QJ#8 QüXz=w,ܤk/kH7.r+?G8)IlfO?0Kb?Fދ^6n^4-p叾ib-|\Dַ5ѱı?\"g-" endstream endobj 141 0 obj <> endobj 81 0 obj <> endobj 142 0 obj <>stream +hTMo0 +7@V !lz؇nwC! +8 xbǯ_pz39-nezl,ľxw,'ŝ>\m"WסnO~fUQ\?5忹"ȰN.Fght9"BVPYhF(i{ٸtTuN19`V&2ѳ +Bfz I^_ _dߥ$QsǠxV,ȾZSyU;RS2ܙ夑"'4QPXg6Ȗ K $Lf4$;Y ѷ+ endstream endobj 82 0 obj <>stream +hޤX xSUN jPSppAGAvQ+딭{M%~sm4}ci) "*+*83Ψsn=eGOI={;l1,6-XbU^fw^c^[zz9mKԲHq3 x~H(fOzlPr(3YU"-fe%e$K䒬Lil¼0_9͛0vi^$+%9?6.Y,eɍX&,Y)^zYL679pn$cSʲ +$i +o%Ŏ{'b=bŚbfMb~bk:45zzzZ6:ŊgX45~˫ֈY YLeg]f<4u΅.";L^n/3Ȅ'^q=46ÂIO{ɇ}dqc+_s'[|JNkU~&s\bs.E?GSГhK:{ ">Оۏi=V:Ig%oג>j!ߊQJMBfu^.~~*_`#d DɯR @~Æk"d^f${eZjX6;TلFd+h;8)#]wYT`11jq qm>a٣V[ eFb|>wSxpR]b)i4Y1å&C +LMT;Jʍ hP#7Um.KUdO@u[s?YzʊYMfRHJm&{H&[٭lzc׻4ey1u]6%luq5&"\a>zKt7_Kəd2}rS.B[ᜑl\#0Kk%J&vMͶh{G[tG dV/@~ 6.,ٺ=#5UMKR R5aj/+VkI\ tᡠ6MjRK9v6Bu8yX=;_夘#D +B/MN*%%8ZZ hf:wm_o}Wdf#ܤh-|s`Rmʶ3\µB!;\o=w~>N |qU-л#vbr\+&]ڨuyfc*j yPwNg0gwofhFݦNSeɑ +t MP&a.f /&ho;{tl온T")z۱Y-D83s j9uڃ@Щ>L6߁pYw2' pi}x]0k}fTI\ƛ? %Ѻmt\hk:5sK_KG ,39 K@1hpDjXSwB;*'XfB=LgmOfqrf^uj=@%Ckp+Նn1$L<"ǿ_ޗQ p/?9kΡ}+T ijǢII%|CPȻ]. @maj1I9K Ptf L%*j|gAB٥1Y,*r17I|qpTpbg>{pg6̫&zYk&47zt3>a8D-\g8\9ON-F|b1Hl78w~́?f1S.3`E0%T&}J>G+[h64/Z&1)q8.me_c8tWaë|dGo[&IK15J0dc47zT:@㆒ Woebs&ʷ)WIxν j`h/.ju] g~M_YhE"$C%8) Zbh +̕S)A{8>Ѭ"4o&ھp݋&zY֙Lp1Nޚh2@6C3bF,w 7 j':whU cZm(„u$3ێz"YoVOƯ@93lUj*sh,)_F_b?&'^QGAe[4z%:(~XͅyUo,@WIacu~dEcRR):߶*H^ky Flz }Oڝ~򴓵WʍF1`,҄ 室&k[6Rb0b)сhb6T:|hc5Q7)-& mNXwյUPW wjXa"^/ۅLf:o/t)(Iٱ[ZX^T|9i./oJUVo8{1݌[כĎDNCU.ZIBLkZ"(Z2 \VcY&6HuM/>rԢ/~+39_34g=~EbM4< A0\Q%Ģ`i}]K] d(FoflqvkϤYiwK9źbh;l'_-Vdc >3<#ܐr<-x[ ֝aby%GӶpw`Y="T(͓ɂeuMMMJKJo؈I*XF$/H]t#j c0a';p?bZ&4?s VGGᔀ?$w$vg5V0 @$~lw>([iZMf +[;pKSUwh~,I$% +_W^gibl^#ZGwwZI f+浙ݤIUL ͑iDˉԔriTA^VvϣC&Ie֕a2]!򟓺d] +GG cF~?dNWJ O8Qgv~k~{ҳ%m(@|QVgCOyz>_VƆdēMQ%:3zԊ/Yi4<9rN`Sꖤt0uk%9 >RpܲgbݏϪGqce;Fja'eo}G1';w/8n՚8eU3(ڰh7?ơ`LGg^\yN8$S +JΤ֛/;t2lپ6U6=u>sSV".`#k SOY'84NOXdEE3}G"{)3^^ެ'6ab(b1yDJZX]XWcÉ^PWIO$?Ýǚn8KeLG}Y|\}}\)/wcEdXhܝ +YJor3zS`[Dɲ$\7ZR^^oVwx [w?grP/3as.I^ꏄ缧9t&W%"CS8K~ -Ǜ"\!_6kXZ$W$dp aBh{]J?"I5W]/f6(׉u"hzmJq5U_;A/S!XWR7$`ϝ;F f嶔x~8-?a-U^7Pjivٶ}|g%Pn-|3B?LeQqXS%SC_ e}PFvOph=.N?dBZܪJ6,罄o-l?슺@p +%eaZXfRֶYch 홭$tSa6AV( r:e]/wٽ?9tRU{@^Wh b>I MN{ށs/ tŤz OzSCpn<PN-jSC¬-`]oĩ#U]hKpbJ_P$JWCʫEXJɆDbg^zV!E1ЪZB%S%dx_S|8|ӺU +B',MCa~peб.b73v=w0Le-:flx!\Ļv,LHݔ$;xnf\R_lTH#Zi#EzyJ#j:gL lyn - endstream endobj 123 0 obj <> endobj 63 0 obj <> endobj 124 0 obj <>stream +hTKo0 | +;GA%D[Ma!1Q~ 6$/Əp55B΂`:=ͧսrB:Nm;@Yf58_aQgZ;`ޠo#N羰G;m=u]g11=#\VP/E +iZ|RlyxE,yudoFѾISo*r!nR:qԴׁO[b/Kor +bEy8&:MCܡ7_TPn2iBojipӛ} 0 +} endstream endobj 64 0 obj <>stream +htVkp޵ iDvq 1- u oۧd'^ďYD1QNxXOl#,# bD?9j lUnc:eccsZlTjjsZu]^)fQשԍJ-^ЬoܬmaQZԢ7X=6RSWT5\ɷFVchU65zUiY%~ˏW4ݥ?-U"Ţe˖(JK)V7Z Aؤ׳M&ƣҬRzc~Ɋzes &fmݪAWXm۬+~lb",&r7#BKzsG"AtL#Z#[@y&  oT +4kšt]\Z~&Z')$ +M:I+8̏K >_@tj7j@u^úZbɺ /;F;^dhH FXe<ш tu3C0 `茥anKi"!>lP}W&5)Ri'rQWg?> 0>J<O·v sgh>NI08}D69a3g^sv*>@~m/U,ѝ-G8G z `4wEF`L&Ao//+k4:Fӯ%We7 l웋![7%cRpo䯤<uzl ^hp2&lO7x(viO/H&\ M{1o3) wQ1cwu9U!|QrYe\ y< wCTP8>q{bhyn|8/&l8GKY9LQ`Nz7-2:hO6/En1p`V+oW_Y*y(bEpXszH,y5ŗ.I}?ԏe"fRB ¥JN]]. +t03>qyTƗJ;B4)vqNפ=,tZ;l dG)[eqas4 !->y4cc1ldc6*[Z:{Z*2S z=>}3 ʂ6~=z+1.2mԘ3 kAfjf4/09mV:q\N%hǼD'Q(%G3 ZxSgX>7=߱~ySv2gz%9"7҆8z^'őLWY1X% L0i^Kj~l|]z-ixaOe7UgC28.z`-`=gg>zHntlVK@XW~x<9`k`G_H\"XmZG1ncPJWqĻO|ΟAX!Ζ҇Lǹ?r ,{hTf#Lfb$jl (i6.S<|D:c2h _CM͹R xX5L3aa>E=6L +KЂh:f5 +&7 +xWKhVOllwDaYx3HgG` +v8Kn9S3|$,x= cg"yTD*%_)GoLmg endstream endobj 15 0 obj <> endobj 16 0 obj <> endobj 212 0 obj <> endobj 208 0 obj <>stream +HWn}W X=wdvN~bUURL5jjUv=һ$M>nf$Mg쟗YiP)G%r Fg3f+Qi:0_j\*(#Ǐq{8¸<=?.ezwq}0.@$7pTyȨi{ˣ`训OJ+tXLjlS]p̖ʳ"zS,˶Ezeړ +9r9{~TyBaRI)JתPz^V`P\Zj9jАN#(a473:6N*tl6X+w\ZSA5)wbLnni9Qt&}drpYWu,izUz˫ݯ7mC8dȎ!9.wͺF]`U ӦeV@0=_%)i\`qQJO3^e-q\pʗVDs_8nlxkߧ2[`~2_.//UYdyV<[*KYDեbJIZ]2-꯬6dw :P0H:^}X ~I n޵OFe X]$+s8XuBRw⡤:!u.\ +Ձr^*ea'N +ʜ`u8B#9t-X!ll}@{|R.ݲe<(N:L3ʳ_:["ׇ)Q5"}TԄFg^zwħ?SLC 1x0KQ'\C]bhEv[z.|n[ปuÄ]+ꐔak+rVEǏ796:G[!UϢ|/{m,tW2 + _]sTJN󋨠&N5PiҠF(GIqW Hv@߅dt2k/u0TNcV~U)Egx9I;Ky:'6}N3a$jj<}o%+cJ>4n1xweɲ86 F׳^!(ui$p;bRB׃-o +3 msA,Tu/r n} a^v"N0ʰ[aRX_ l98Al"oi}нS2ю`}'E7_{Hr@;-eU=bXzrDN7bA^ Mr?&.//vf&˳|O2D.P=* )XUF"}"#k7"H{aCX W-{E@7Ka2t2kv։*jމ: + ZЫ/-DݾS^I'PЃ3-]tߋ\^S=~YF ⲿ൱>)T#B +(K4D +) JZLg@[5[3ld'0lբmW T$w .O|uٴZFᦤkm;ͻtMsTIS׮ +-Z]ЙKc6ht3k=g VS̳b?̋lVA"1G o׫mMb'.t0ܯ|=ܟ&](<ߖx\)T墒 ߣ l5 ٤ۧ.]:mE~ր +0jPFk6_d6+X+-$m=$9z:*M?I"y=s>/kyx;B=υ>O(vu;[~*S@Mzn>>.Wrh\2zS)8B*c %ٍfrAB,|%91N10S&65d~1h]7[]9*_nAeKN}Cky+p '˺1>hEbf/o<0lDe]- ،ݗe8bd8e8i2whgNŮilGŠI׆ŗr l[vP5J9h~ wfo~dI xC[V~q4{kXBfCU*Ib#ec%թʁfpYT=$a/)3mcc31tҪʸԥm&JO? oEc`C1^;qN ;|^(#R2Iz՞SUJWAx* v ~;\3 +w05:Ļ2*Qrh zpUe2C-I8HY1a "Rn@Ninݨpڱnb)R^MN4Bc 1siq2M4F+bro6݈o09NbYOۨob`f߄E v+6 9d (~Q3螛~(}hghK, Si5Uktk/h{<&E Tcgj=sLY4?QjG'(Iur<>d+<g=]8㺥`,u0`8z)w[1Ub]DZ4%Vr)MAgO)Uq!2n0- 3mwp/{va2ݻA|p?{xpA'ZJ*JAv;ͧ:mpVVѶj&~i:%ӎ4)USӸ( +*H<ܘ +mI'{[X LkM#;BINUEDF*$\ibnRH^FJ6CumwP+#`2H Ǯr!Imu2674놁o$!N Y杻c/4 ۂɸbm˧4r綃0gJ1˾ `@GӣD:%qkd=)&iP7qQ䒢6B82 Og4y[26O'rfL.H| +CS@Qi2ʭS(c q5"i/gg^Mz}ʬE^C!G]$DFP-%<祚Q(x5*(9 BDY΃0? ŸG6&'GI[ ңj>nRy@bV|$-q&:Y= +Db@ i5`5Yl$M6C1Zѧ`?TB<2)l$0(3:2lRY}r~JިQK)̅TU.W6QmG ̚%%3j2gR<YQ21|[b)R?<͛G^Fhˬ*Je `^-fҌKR1/Q홦n2Ls`X(y)Uz%,EMb\SZf4%ubNFY|&^nH`Xӕۢ2RX'9AA sDCzTP Zk('rkZ5Np!4?ṗ'z_eϋ52،j/ն6rD|S6[k⪬- U- FV>>1 EmbD\N?ۘmk̠JL\%bu`f``VThK[uC^׏W=2y>jfԀЮWo.ݼ,/ǶS\܌)w,'#WDhJu:y2brzTҍo$/M^'ypYYl”.XBвm^-,5!+usu6򾨟7u@"CUt+IUKɫr[P͸VF5~r%]m,!菡BXx]Xr<=߬C**EnL kFx9QG-O_gl<#0IWvw؇5AmbD 2m}4Gke.݌V2ٱ\a"cB/U@$,E=xfjoJ,o,mmiA` !҆Uu}9V BZ?.Q9MP3:~_60XIúw^ k$Iz=/*EMD +ӣi絈$Ij2_vUfν|ܟu 5D5/,7{Ls +FXRpJbc4%1-+&ejF{c]f} {g6hiFK%{z]&<:YѤYisRñW'Ky%/*C )btdxVMڙ߅ԉѼnϻJAC]JN4LmFH@}۴ѹsz}vq {Mcn7PoY۲Eޅ_[kFڀf6Z$s?䱳rq)1*ڃq6+V04;,bt;MBm?׹KOMCMƌ kxD cH3)2I + +qXwޣvVkEnN=fmG{3=<8?c۠꫅ L7uk~QNWPޕ% 5pb+pZs9IOXzƣWm 0V0i?.f)[Hq2ڟ['n@$sws^T3a)Ś ,*nHA'-Ҽ0?@)=~ԣ*US.qM,K-g4++QʿЌR>ki[Y TbɷТN` @Yp&C;CJB)+6Fepb qJab㊃s3 ~)Ɲ]5Wߘur9`-ɿG}iT4{P !;rqj?>)힙SSw($ =!J(7s?mSNLyo=l+$4M[!k(#ת@EРߠJDow}Xmr_uꞒ_y<\EN?VGM{1,܂^m[a+vw +*,zmJq%-|V0q\ћxͿ[[ $q+&;1@N+Ng0V `s (z1 bO>L~8l~*,inDWXXj:uOMtP]6LNY +%Pk87aJNM,|r돜/Xcec@EsXjQ +0peaqzQFzؿ1) +tq~:_ݹK̩wl46 { 9oq^ލ`xe~ADFEs"W|q 4u{qAPkݸӏ Oc1x1hz1_^V1`bӤ澒5Cɉw]`;1YPcAsdԊaG]ZaT `M77< + gvL∘ Q *QHLvHtIDٲiMN̗H1DTbR`4aǖIn#v]9I +{8&D~BD(n1GJLm:.WP|e'ڊde\XM*Ζ܀fP,葍]™O}"dowt?sqauD$$uU*FՉ^uQ鼦pw>s*B)݃GS kJj!y0WfzAOPغz:cSUO~ꩣWݘ._3-Eyb=tOBfmOțuN؊^ +@! uebV,$`mأ݁tK8PJl@}kWM4w/^c -QHO9(W9&0YNfy\T51>fqGQtԋ@O*]E\AWp,rOsSnB|s19{)캜+LN#ƌ}]_eVӳ<+-3痯_M'MXe0STbJSxX1^>vrvL_&N+Ic endstream endobj 210 0 obj <>>>/Resources 222 0 R/Subtype/Form>>stream +H2PHW0PpL R5PH  |d*Db..}̼|ݠҜ"K4.t 5351VI0447Tr 07 endstream endobj 222 0 obj <> endobj 223 0 obj <> endobj 221 0 obj <>stream +HtRn0 +w( AAj6&Ðc3hmRœM~|~%cY}mİ?v由:eo*`%(s M25KXYb*Vrj]o^*Nl +3EYpS1}m-WkcR4EF/*ICrDLxf*^BƾrsDUqH!䲵ԸVsIhoPg68=y$ +hKsz!wԒ"Μ wAIj%6YF Bpَվ7=q,* ͊`c7ϵ^]0ſ endstream endobj 47 0 obj <> endobj 25 0 obj <> endobj 8 0 obj <> endobj 12 0 obj <> endobj 9 0 obj <> endobj 27 0 obj <> endobj 24 0 obj <> endobj 30 0 obj <> endobj 29 0 obj <> endobj 21 0 obj <> endobj 52 0 obj <> endobj 174 0 obj <> endobj 117 0 obj <> endobj 175 0 obj <>stream +hTn E|,Se&iJR}N0vj0Y J[$ug:U~P5hBPpFʯi W, 1 V|fw@߼Folsqչo` hl =H*{7wv4N*v%)#9i՗d#7>6nyDflX|Ę ,SǴ}/.OztɏTx endstream endobj 118 0 obj <>stream +hL_lZU){%=lhFN-sָR. zklR` +]_6fA:;_Mј{E+r @9tpk0h_*c$?D٨}:ˍB ђRah1BЮLaڄQeg^wFygU3M{zL!;nU.:8n +緞bї|VGt1>`gf=,{ys ̛Vl޶I'2JL/A TG\C$O+IO.fɧ+‚ƍ_X.֩[ή]/!|! 8yq G!:|+\=13B.Ah)]]S:Tɴ,Ϳ/1/B5;*<,-#*\UqҝTn2yBt{XɐӦ *@@&JsT*  e͆[w"5C! |"s_FT< S5ZpOjBJ ]HmynWGf-o,5VlJ qST<Q'>~} +$-h,%?Lb=rW+̍L obEׯ:'U?f|;9N9(JQnj }nzf:OBĂX8-ayC)Hl>IҼZ^mкflGȳ-i#qMC.qxUm=+E endstream endobj 139 0 obj <> endobj 79 0 obj <> endobj 140 0 obj <>stream +hTQn {L~&dYU5i֮#]M[$``W ͎3Vf%B]!N@r^O~0L3nG( +)8vяSoVuKq%|3 3DPezE ooğ!VH}^j?PѴSX26VDx}ٻ'p^2^UpE()y NC)a"#@$ =UxspFm7k1 oxo[9gD endstream endobj 80 0 obj <>stream +hޤTmTWa Jb;idG"zU) ~EB00*V--kARukuwq[=gΜ;}pq\pq?ru$ ېۄ\<S0eNM ' +x !L6C;h\◘SrEq*7H籹r6?ïn٪dPCai--@xzZ8KY,6D.iqjE#VO>Bf.5TT{EeCoY&cA) +G>I2l㗶|8v-j)UZst@S#D +iFZ@J4ƃx(C6es#) FMX7 =n찝8ɺ=Y +9&{`Fun!c4F^-"kn:NN[A"[zpPܠjr +hP-ȷPXb.5JZ^"_Tx~-I5I 6=\Uv٢ureHUp9ͺMj+5qJ ,"-Ab)RAKgQxZHcC0zciY908(C/@QFh҆V5ˤeRGU,B.b$;<֋o|*~9à o(mL.Ny]})s zO<Pz|^stűi3ƀ`nJ^TmvwT$ dbfTi17R`6MN]]7Ҩ`cm;'_ᧆ.w_+\3Ha૗QGRWC{qǙo{"fO^4E84 S}0ZAՆ8]~a|aP){"$-"`%IX + +Z}*`oy{rgr/}{kKzAϾ~9w,|ԽnϾ\ {㲵i0Ly[T23TUfY+- |' +A0CAUpEz$A0aUr0 gڏQ x="BvJ3tFy!}֍䃦gra})L+ܚ{Y6MhAquN^g>jMȯU$lQnf33beˏ8Xq©.خwPH 'ظxMz +'AH!A| ݖQf)[smV/.GL" +~#7g2(es^ +}1lEfSJJ8nԗSZO + < Ci3z&/ @a֋ +`{3=!*K˙A"9YUFS:\0NQкtrRjh_j6İ?'i{WO9t=phˌ@aͦ#c6ݻ&AV#w8.XhWNiYg٦c4ϡ 蝕{Vt30ڣz +:G9ao:,}q*+Xn3'>Q3s7ESQaW,+> endobj 95 0 obj <> endobj 155 0 obj <>stream +hTKo |9nV1ilx#u; %HP~ۖ1fCjj'>stream +htyp%d٢"dvɮɔ@2$PNB0cKk>ڧ^IeK6\M<\4%!NfIiIhxfbHǛ7~|rjp\VZz,åg`NdsU|,ϡ(yAt{&g3uc[gvm +YJ\۹C!y}EmɥK4JZhdEGU!nU%emRvȳ + jޝWi;&iW%!y^֣-Lb,x>88 %_sVqrs6pp9p]tMY= ޭkU} XVt ??ƅ5G}Qo6Zp5^%zI% +¯@j ӥ@>^xI+cfUN+i_ʍ@f8bxa_@KCRi$l(E4P-e>E/$̖<\E\88ʃEJ7/@a"R+3&Y*qq8 +|Ij 7J@A &̨wP4hZaVעzYOa=jƾ/7Y'~]^8pX:g)p<'t䃪{E4bh< +_r~]/:eNeϼ?/ 3ٿ|~JװwJOđH$I{eI\tI\gr/.2ҳF[.\q1Tjă,!%%+#{`' +1.8MWQ=],ErA*: B rju rc3`*[8uM47]ߡMc8i>?a&:8@_agĘV!.@`+Hۄ1Ӫ + /SȑrAK:NloTf*{~hxm .N}̃_ND9ПM"CqL A|A9yJ=4>h&g? qf煻X ּ۠aXg琛[7.Zi{vL3i/ SG}."u]nyé྇J&`> Ļ~tvԍ?\cy~}lNy]|33S7Ga/w35ciB\3#*h6[܎~Py<"Jֽ[IZBN,nVnC6/g^cin8S&Jt#& [ȼ[o:ݸ~wL X>ϣKb: +N]ov˺I*N ī)}9q=X(k: [Jc۵m]V))NNF +A+8Qȑ䑣`}HOO8#-L=;[8qq.gyEhC? a,*DPm~lGޒ!=G5VDƌxgz9 ze<B-JaT'z'=r "Vgҗ`a6 endstream endobj 156 0 obj <> endobj 97 0 obj <> endobj 157 0 obj <>stream +hTQKO0+f}Yք(jGd^HiJ9m ڤ737@^(iN$B68(-fW f<F(ti? +e +TO>΋Ef[# +N$J@Dzh;)\29e9{:azrhycPg~劼 \nc\e^9;V֜&3j#ś} 0҅6 endstream endobj 98 0 obj <>stream +hTS{LSWڋNե%֡ +8 %CNvx>}PZ^-l0 +s:--saq,n$K3irPwaa9''}|/(;f2="^E? U'nE>>E,瞃WEgbpQ,8ވz` wFa5ɘ #0 oG;z4Ab!׋&)ZTVdv Pݓ_\|"km5Shg,Evg{V(g +30A-qcG Ҝo+zyar,y !} +GE䑫WpA1 10*~wP"8JHH}-I'H&)G_Y$ܻ7s4Dޣ%% G8tL^pt:58qܠKQmuQ.*'('*5vW5lm`lGk@޸*xﺪjbY^,#}::'V8$lDM}ٽ8\"`Nf`+'JZ''A0t$p{<*PQ(ޔ+HB(. S#٩&Xmm.}n4S@6:@U +DP8XDym K~eVQNU 'R)}1Sujxp$ KB8" n?(fZ/tlBB 0M @B%( J0}&D*4[g%OŽeLO:e~cUQ腹7]zKf?FZ Zk3 W9e :6)zgm]t"ѿ7WmFǵwhv<' ")|f8&"t5XFz-JyKc9o}*G jq>y]繇Їǿ90#i Z2}KlH^$YZd]NQGU=~]cw5lv_!;ET_ʻo>DŽbCb1EV0su endstream endobj 145 0 obj <> endobj 85 0 obj <> endobj 146 0 obj <>stream +hTOk0 :v$+ et lo_ ?K}K68-ͬ.8Xcu<wplw48Es +jڬ6ȖX8fpD +P`/CO5";/κq'4)kF݉K+Wu&Hܽ>9FkIRKؔw>= +00n endstream endobj 86 0 obj <>stream +hTPmLg]am7 xכ23¢ '/S J{P+ EhWpNqa0臹N &$$Ktf/%}my)ϓL'0LWXPXz +}0:ܦy ? ց^~p%Qa*]`yury޾uhm64 ~=0[vm7:K*vXWG?o+hW+la$}lzVVf*a0dy6a1CF[Y`2Zيݫ#%{\4͙h8’ʺ,|#{srvI2F>)[]Lf~YL.+e`ub\Aܔ\QYN9DC1V3PF|XGqAt0jB(IVQbnS8,#,8>"zx5;''ΔvAhK4赻(hB$!_t$ґx[`6 U` P()?2Ӎ̨LGܔ[>0w(Ƞ4kftU f.iOu#Ldp,9YQD;cxPp`!%N# b/—VXiiV<9bDڔ}ZѻɱG 0;ـk|g'UOt|_w9[9A 5ӨO/')8 9]ai}HtyQd*'S@9PML(7Yyَԥ9)ueNI<_\=/bZj2zJ︓zoЧ~.KrږFlop}'B~;?s7@=JDj$fh\5; /rZqkm~u[%>9+IRm~y,mCIL%l[k‹skR%FIf8<=U_O!Jz*~Wc endstream endobj 150 0 obj <> endobj 91 0 obj <> endobj 151 0 obj <>stream +hTQMk +e&iPC?h:IƈI;jmoțZpXqV8 yڨeS2/8@߈!c^/^7v)nu G dPנgyYo/w8"IB/ +URĹWҳeES3qw1e%*b2La*"&bɇjnZ(5927ąF4=%<z미yao⇫ endstream endobj 92 0 obj <>stream +hެU lSU]1B({ɽha1@x Pk>um۵kY6Zcde8E#M`<w(1Fc9};9(?p8Eז}aݢҍ?9x6p9ya3?C0) P,g̜ q8foW +^&r@S`|)aC\u‘ɳ +7Dx$13E(;w*D6jHr)~$J )$zmn)w {°y ȜpW+UCa w]bP[x,Տ$&.jRg^Gf>r{>;8ljnɵDMrcg?N}8@h fpH_4hGcM[h7T"]$Z.:űGo/b[.1Uqj6$LD*ũ{M2iX9'aε_& ݴΈl7]رamd[U@_~^f3Qd7l=EVhT0X("#!Oaꁃd@U6/ H=;AG(aa$ RvUi jSݪk/Щ=:d*Pd;(GG;Le/E:s>{ کbFO!\V8y;X01I>7\S@1xZ`NL/]”K))dxܰ?{,蔗.P JWlWv?ܱ='l';MF9L V{ƛxFD+MhgdowYuUM[`U=EA}_xPawbUٺZ}#uۢx18@ѻ?} L h]-A$ +>-ir|DP9͵f"7* N*,xMk;a;̳}`$<.nUj" G((/U[*֎h24iͦuBߘ`hw\0N =`d 1pS +w Ƕ)k1În0k]4/u!iL'n&G=!S(P'pȓluh,mer{;'Bs: C\ endstream endobj 127 0 obj <> endobj 67 0 obj <> endobj 128 0 obj <>stream +hTQn {L~5!E*Їwk)ݴEfٝB1}slCr8W쵁ߢtAX.ǡ1w iSaw?>C;[{ 8/b@ؿb[ +Nev>stream +h|SmLSgޫ֏Yz˂28]dv.09Rh-@߮LV H \2>1G\4۔.,Y7999yH"LF$XY|^.!gĹY='?^$> endobj 73 0 obj <> endobj 134 0 obj <>stream +hTn0E|,Sea< !DC%CTeȂдdKfx2hCs +kk [5.Q8U'-0?\MÈ4=y}qCXt:5WXˇOT7kC3Mgi_dLΓE!JN+B7:)_ynԧt)O [8Ļ?7%qXs!e$"ײh%I:ǥs%w+|Dp|h M;` ) endstream endobj 74 0 obj <>stream +hL{lSU]V@qoᵍ 0yL "tnAX׮Yucm !D$*! hcI$۝23;9C$ɼ+W^;rs[L&/$pN5n,6ezETH&OJ`h<|@,BLSϘ򵗯iuF7،fF1hhxg1 FcI1mǒjj*ub-[ZPVV:OUR\\ZQuZAU12u|FٖefsÒ"Z3k2OeՙkUclW7Uh3I + +FLG(AGLE$VOr:yN>ّsU0K +Ki[l>K`S!A0c8_Ugʱ W: *lNZ6s՟qՇI}+.~ǨTϱCx{+[}lޫ^iKQ8b.KmL- WI5Tqewu]^(ԗ@ +#9Quj至 + #)X,l jQ%&dM^jppOi=(v7*i?+J\u:ڠSp!3xol_s$TB*w^+ҝhV^#Y;(kS->3FN=^s1 #)r)c$,UE _oMƒ2bAl>ԟ&:;(n=>K˂iNw?kd*y<TtNwtPk.) +{(wrmq' [357^^\`o .DBmQe<# UJ7 Ăk#Ϳ]It#r1L"(RBx<JLV ++/bm!,P)r0!W$hEvՀ'^Iw܊N_OPP8_Md_hb39),S2}T>%i64c) a09t^=)CL2oqA\B;#/s:?_C endstream endobj 125 0 obj <> endobj 65 0 obj <> endobj 126 0 obj <>stream +hTMo0 >v!@I>vF=/NX!A~7vW?Nvx'9%.k 7!)O6:$V}z\+itUa>Piەe ,֚h endstream endobj 66 0 obj <>stream +hބVPg%dbU&kwSphѪhciRm+@MA!GD$ +$ǫWVYZ[Ö+ӷQ{37vg~}< !HXZtjͺExa)*< /򎛥x?#7NȒ‚ű1]L6{dheqnar].K[L+TMd)' Sx=L, B{pb:1 f qxXB,#//d l2q"1H֒, +SMVw+C/K#ۥ]N:Hgjn!:'$(Ga4 &&4):~ `ʱơ5(M6WN_r>zʹ+T ]Ρus(sʱ+n̽ycu;Ѻ7ѱcoBz#mי8wE/\J.d◼p*A8F/#)+)O+ǏP!ӍNEhr e*#}Qj桀ڊx%U^>GGZcDEyy>ץ]jT +x|=%waֺ6! |La3iP) APpN^8 T|(T:9uBXc4*H |h] y;-=VYXE2ZVBȫK8;-̚Xftyt4?ᡷ[15W9:rdAX]cr&R" OlW&3W'b'Q7B>jLte< K6-W|jkws4;4oY <~oLV"(c `_3@ƫ+"n[sMqss,MN|gzzurNjz6Wla6 U?v|~2|*;0~8t{<4}$WGǸW (BȈÒ.Hap ^̴ӫ"!˭b 6223Mlg tCyVOޖTJnu<{꜍ @7V5i|zA!M~X6\l[Ws_@RPö0$0p/L͛vg6w,]iِV6dgb/W"@!a*ӭht:M^Ct~qOЉ{ݜ\_ߌO2:ϪJ%ϫ:MAkAo[ Q1)RB- +uW&Yh[xsW!&n7b~A1iɳ"ðoNQm>K Rb1עx~缩[0Dp"~x ^ J2{ڎCYأhD93UjCUe|V|a?0~ Kp.Wxm^CǭeETC6znD;ynb ۀn]VdYPp|V }9Ut&[x#Fb/4PÐ=yϜqRδd>t qGkS"U&toE;/WP+\GQ;UmJ)ۘ E|?)<$U6Vmq/Vl q>g%oa15-6d,l6SrYWHٮ{ԇ̓]a{+,#l6r{#[*Kx<ޅ\_1_l GoseVxv?|Vq} \ ZgEͬZy9$e"w>qTPϨ,|J^BօC 0Ro`JdW*&vϝ9dhT``h+J;.qV)Zm}j?55(*QvO |xA&~U6U;SW/ޖ endstream endobj 147 0 obj <> endobj 87 0 obj <> endobj 148 0 obj <>stream +hTMo0 +;JP%UaZi0QImHAO}Gǭgo~4;mq [H7C@P28lm7BY&_`q&͗īo}zhgPUbq/̀ /A}zmdlqrAB)U1m,)bű3ObҊ8 \g0KUg8{"^WZG^P>y^W. .*5\F ŕ"RRƊXoPV}4jӬ;Q{vJA endstream endobj 88 0 obj <>stream +hެWtW!dDbD9,dg$P(!Y@`c1r]V:nU*;6.PB'Hd͆K8#;=+:G:ιw}eAA,kknX3֭:_># @l( 1Ass,ވfCf5Xݟa:\"4IP!LdqU*HCFjb6[ *hL7PZ?FXc^ZSuɐ_MJdEZZyq4D;@_NUoE.4CssU ο 0D%7UlŒ=ZSV-pwa ve8/Ni sq +&!T$eƋZ9NK TWgMUs 4i;TDm܉6Iӳ/+ڂPTHKAn9I*lStR3}Z׈A C5wݝ=T k:{ *GUq6Wt:l@`щCHIkUx|~guzM i"~[UaКl0cd2! +면G\XFK֧C 졍@{nG;6|r\z҄**ҩ8B[hZUD6ԺL^;h4r ^Atvƒls5#SZ·6!oƴ*9 `rm)oW+HµHDYIs-nQQmfW_74Sc2;hPhq|x= }4N}E:fbgz -Kh9-N2JA .dž7 _yD*u3)yɄTmn*DF ŘF2ưlo:6&Ų"R8K{تE #%}-l{f!Ѡy10߯v|`-dЂ8 .-w%&>` ה&R zư +h,FL (-JTo'ʬExۄH#h))bggv,G6T&%1/qVG@j7K +HaዴWMi]O?C׬nOzάzΜ{ 8O#ÑGы1jȌa 6Me~$+ĤMadC+_50Y9jj I/*^BV- NEkXw rIZ*QZV&x໱J;k:m`zL+ +e.|G|=p>fsV0`?Yv:S|Z>^Ux;fz{UF UߞGl,سV 73Ѕie9c?p|] ND)i2b.ysFacwfF#6%n3p$xɰŨ"3SsоG6vfEy/Cefyj.|T'/FXGWvcڪ +]r4[?&ota^99k}4*~s0^ r,ĦfRO \pة4n??,+^Ni<THI +zp_t*b֫+;Nq҇9s\Jnpd8u4`5 ?v\762n2K͂LFWpoPm2ŜQ6q4U ('5iiD?VcٙuWbSecYǘhή(( L@rřw[ɫ>^09??vErXN(2!4sUDžm͵ئ X+XյulDEKhpx{a|b"T?.#17p!{~QϞ_V*0:#Gq\gSf +-%lP։RB&js5J݃=h-)*l 0IfdDz*4OOկ`b#λEG8j0;BV;&abI}pKeS ;8n1}{ ,{{E&^,D 9mQ~Ԑwo)%P`>Y7@RrO玝 yUhx\"~ܦKNBzJX9lY],81{>^wv"zf67^[7qkg2odA׉H)N+/ι`Xpi1 ?փ'Eӏۏ/zP]Cd:x Qz>c@/9> endobj 113 0 obj <> endobj 172 0 obj <>stream +hTMo0 >v!!CuaZi0Q 6'دyc]}_~G޶ OLBۛy9ŷ}vU-v 7v8bdlqrA]n+@L$ɱ3g)UwYŴ4B9#BD[2qX%"JZE2嗔O OK.9 +6$Y( JVR}i(qryԶunt%Z[VW endstream endobj 114 0 obj <>stream +h\V peϒ&QШ{Q^X +P--4m}i潛M6ټ6iҴ-jQ8DANCov[;;v!A AwYv'7>{{`50>uS} }@ѷ4Ф ~OQ?{@^sWs9$ε9GuʃJ֪⥿[z<-zg˗-]\R}J˕G8pD]uNOYU+z~fJ]*r6FSSU͊Jt/Kt+xZ<*X+xQ/(l +vCV\P0WD xG/x[Ha 9D:L$GRAJ!9 +AY*U]:}UTL5 #1&|AmzU*z=u2NKrrRnhrU"" 4EZ<~KeAw&7Sd`< +/+dwS5P Ւ}9N€qTL"x3MDە.$|FBK:7I`qyQ>?Yc/2ԴG$n) @\aW+,hc jc=whN8;Lj`j[PkncXJmTJ:MhxY3mAb'iލV&("Sf~Boe6"Q*4첪D nxȔ[ZV&d0)d?knL"VfL#N}zE>Id2 cG60jEP)Vuz ke.xV0[E;r3p\#xh x?vˎFF8`󘍤@9T!r dwB0ǯ#`czG6D(OΑ2chO !${pDc 6vp98'_|i5_q٧_E&F6;dCiWھ~;;fu$<Ĥu er&d{'\n:₽q qtCTKZ_ŋdףE\\տfsrw >xf-GV?=h$mj#]XWO~vѓCȥ Fz3SiDѦd 4xYb?#>fp$(ҮE{"ރMN8tO*Ƴq/>;Qkf֦EВ~<- +X8\d4;<.җ+~Y0CŻg۰_'<V#i5rY?b̳¾E*􌵤{RƏ0Mi7 }IQj +4mqKr4OX"X8CiMJ,xׄersłI_|OO=eC1_.0 #N#p?K+ 8Z}P2׼ DZH ÇkL i.dVK7EJkG`;j#u|nwEcґ;". 5؋6 E}7Sg`gJ.<3d4zs ۋ&7rL1ϼ ^Q -n!7b9^cCwL;5t`LGloJx;֬?Л}(6V rhT55:5`AQU%w#g/Oszqtɱ_[goڬYX7Qq?) o2P~˓#fmmJzZXYqGߪ-L@8h37Gu'i)޸RYj$;e}aC! NkUrh[GRC 0'󣇱 vlE*4mL:zuMHNE{o'O;Z|PsE\t:@U@HkINܷ07okGױU8r.;)$&^G{Bg[}]|3.v'3m`V &A{Cш +CGhk8% zC( =hE9mI=C,WӪoĺZ +ST I6/ +ꤘ&oجxrsEP endstream endobj 209 0 obj <> endobj 205 0 obj <>stream +HW]o}ϯK`1;@ +{[0r !.$G*d+'sWKI 'mB.̙33?_x?C CRbBRD!(^ۯca#L2\ti!MCQBM%<X?6%Ivx |oNjfB~sRS a5P<'zhi}։*ZvHW/@;AnN4K))#!q7ae aww꾻@cT-K[͛ۻ]wM|ޭ¨LpzO<^(d7ކ8dhgT}(-04#˯nVuh|d +)Z`ilNh +#=X.*ջI ї +Vӭrh$o3Aq}ZvnLqmviXL&Ywj z;_N +)sy#7kz JTC3$''V د[GȊPY?o\W˺sW67H@s8g!fBuߺ1hu94AtYjlkLC&F(D#WaS@hKb!OU7_-õ%(#k+Lb.Ʀa)Oƽ-E::eTJ|,i ({,aт)XiӮ^fشJXJfӆnmsѸ*u j7Ayu%]pÛDwNy"\h.=ۈ0XǸUe~,`egX"%MqbEp<:#'%*y|*Gf$%,Ɯv=Z.by$e!<˵LezFY}JA7e7:1Ɠ'-? R'^ZiҎ|*% ^(a)p;Ľ - CzG<_?H(>PG28sx(gJ{^]܍u&Sgeu="_*Alϻeq}DU7eW%fMQǡ&|Ck1_WQ̺]v^)ʐERvНe:1hz{:ր]7G\+Uցr[ߌrjWoC&dd^-* \Edd<Gc>4H>vd]5H1)hk)S`T/gb)WIqn?!-?ˏlTYEj!rKRB wlVrSוr7Y\EvS*u^Vl +"iL/!Xb46i/ $5ޘWu{ic{Ո~ՖiM `^DJwˆ^5i=kt_3NCQUh})ҸoΈ~ɛLbaYs9;Aէ-I0L  +\Wj6,}Hʲ>dzizw4$ ,1LZ~D @^ $bFq?u=F.Li<hDt/fA~r0MK``->j">84d_g|p,(wQa9,;$_r%ܟ~c= *eB*Sxcz$RgX3≥@%и-X>j'+FB>HT(ǚf;.ABZ \]Q\R ث2C'}FCC/wʧhAkParQ5G*L}\|s}=0x7Y3e%k =x=b^>^Z0h^%Qa־ĀD>p5Y[vwQ/kܪK="=dJĸ"*P'K#Jj}$YGƉ R.qhzsYB:ޫp9e|.nمWUllݺنbنzrCUݵSլ5is6ղ#E F5R&e $ fbYijPwm TREUsHT?<@dS8sۃ;+WwmskNJ'o(3v1!4"$~DigF_0.U=#b%>2 b# sdα +Iua9ƇRcky-^d+ŨC~1o)F(tWt~ zCMYc;Mk}S좰E0ibD8p]_]{Yj<DqpjdD2#y瓀Z`ys7T{<^PRK\\ +#!b9 ;}y~jG- +K*}?)>(ޟVbA!hu6RQJr a% a=*lN1Ew@FKʏ5&Ny3!(?ɂloFF +ى +7<#_Z+aPb햜a2Miju ]7S.//+zpuKr_.'@]7a>F[?FB|#YC0:| @HPÕw, ^ a_n-YPr aR)ߘVٚ*eY^Q)IQ3Q Gj\0֣xj?%VufKC U2RҠe'Щk2Sá{cΘ([RtRU%^+A p0\&}Niҷ=xO:#R?ȃuhStmumi&tw"iGl}KzZ)u$6/+_b7TXonDJ%V&_O}la?6 +폧nD7ǽe sQ3bNp.0.D1SQM}Hȑi,~ܨ8{rܓw8=^8dp>gV26[agdEyoSsH<`Af +Fco9nl9UP\c@ID fhQ(YCq!v%V9eNm JVH¤&>W]S7p`.\0L[dZØ*T$öObjEx8VNqpŠyLxKc+0VpM?ھ>Nj7~&4;zs]u@"7C #;"A=2A uC_eRϰ9˃pqa]nt "KF5O֭ya*Fڣe\>5J`" =ƌBy  ̔n"kӀW+kbӖqRl;Lmiaic4>vE5V-'#bV OZV(C{n>K!Ó&ԅ4Qi(ML,43'H WK!B-슂H"yhL4 IQyϦA"NB\.MT +ݷe;}Na[i9L]*n8`dxKc8L2#-}b[ &* Ij[[JNy/+  ESܒuP4PPyHr"~BUGX%zre#Ok3S__<gm{ +?Oc?=q%ѐh^: +i.'XifK jHk£\ڀgӚEci2Q|VAY0a4{U 9x+ x+̭)wd{(ELNJ3$*s4:/rjɾ+cSGȐ s'Of $g"_ʐ8 4r'^LXj +ya-wbLjz-糼9i]%nD8<ުS>PTax04!cTh<`>1@׵<+>/3!9%O jc?PW֟0uS'-J{`S.Y]oKJB!Q,rb&dvՍU6HR6 J'UL5rCz|ͪ1B@@5[rmRAieR޻+ڍ}μ쪀1A)]sۛוsSXIw([~Sڽ覆 *L)Td˾Za;x≴ӑ +Te "yоA-EFS n2!xX`i]RNXa M( śŏlWLEPɤp1 +Lf6>ؾ~0xu[s<,*GTWL(ΚktX+"?s@=xu+kj.ٞ-^xFpWPW*EMݷw>T;g]iw)+䮩֥oצRh$ +׼eW7Wܕ):S2>H"1{8m^Plg'Fw LzFFS&)۷*j]C ,}'}:j0‰WWߗ];Ե^P#p܉CeH]!4ӦlG]fc?޶qyE_VCKn1a1~b|B))aئL`36HmD-ZǪI1 (9ef 䒪ozm6la:UoJ_Y>4, m{! Ʌa/_'WY~Z:6zY*9,~Z"4uxB4ZQMS[e[Ia)]0$0`=MCNJF?W)ay'~BL658ݹY%GKIߏ B#/>MiGnQnMCQy%Y"R#ůLi(+ +Z|Um BXDŽ54/LToQБ~*γDz?YjOF;P KgSYi*k7xe惧@ژÀH>>Ol0%lpHx#Υ εsrLfkl2?i\ALs+L+bUk- e4θtr\i<f޲KAh2Tzy!沭~+'OrPpOMP^ވ lK9QD kt~W-QKF9WV(cs$NS5W*Q~֘ͣQZo̗}D UFs?10M;pmL~y*Natyqe m&/m +Ōśŏ\㤖9FVEܒ%O'RG* k)z@w%&-LY-pp: myZ *duޯms[E+@ʼnLvfyfxr}a*lM3K0̦vcv_ 갿7#U?O͆ZZCe{ZmMhmg9di]Y_]ٶE뿂K1>vRѶt#ϱVe[r+9ڲl˶qThbB $c]0̰gܤA_.?fВL!5؍墚ؽs@Ѿ; MW EYӛ-<4>>>/Resources 225 0 R/Subtype/Form>>stream +H2PHW0PpL R5PH  |d*Db..}̼|ݠҜ"K4.t 5351VI0447Tr 06 endstream endobj 225 0 obj <> endobj 226 0 obj <> endobj 224 0 obj <>stream +HtRn0 +w( AAj6&Ðc3hmRœM~|~%cY}mİ?v由:eo*`%(s M25KXYb*Vrj]o^*Nl +3EYpS1}m-WkcR4EF/*ICrDLxf*^BƾrsDUqH!䲵ԸVsIhoPg68=y$ +hKsz!wԒ"Μ wAIj%6YF Bpَվ7=q,* ͊`c7ϵ^]0ſ endstream endobj 41 0 obj <> endobj 51 0 obj <> endobj 32 0 obj <> endobj 160 0 obj <> endobj 101 0 obj <> endobj 161 0 obj <>stream +hTMo >vꁄ4&H]I9CK;'CZ"?>nC=Ưmlȩ97Z9 v-:蕖iAi((H%fS:;OXF޼svv1#ȋh`w)?E#j95H3rz晏ob{$q6\z@`9U/M]/>͒2/yF`G>ME'M5ΖO"z}sISb M0bM{l=44^L&v-H endstream endobj 102 0 obj <>stream +h|mL[e[(])Kf8^܈P6շ gSYEڲR-N2 +103 L,tl(E>lf$as}srN'AHWT\v֊HInx @B'J9$B$M]JP$I5"/^oBnokht7Ng#ߤ<eܯ7gV5\Ocv7B@OPc*R+W=',IBW@E* +Dkmfs~b|$8٘TbJJrtZKߘ42bE.~vYz;j7^7.*@.OBR#4IEJ&eѲ},fq‰ +ݙo{z:ǂr>Y{p1~q V(>vzjŵ./: 8ӭϳr@ِ6`#=q(r&yהa +܍2a\xaXS6E= .ԃ+PH^¾5 i7(]Nǻ~w}) x!C(,X~:Io'ji '\ÅDy9s.WWTuxg5^t!nI }DDOEXa +9A|fɼRz;ff"hZ2ay +yQ7־4~_ e|HIS*#-dI endstream endobj 173 0 obj <> endobj 115 0 obj <> endobj 116 0 obj <>stream +hbd`ab`ddstqvp v54a!CGldV_r fΜa^B{ZK22S *23Jb L cnjQfrbobIFj.PWrbBp~rfjI%XMFII~yy^bn^~Q̒ ԢTa``lg`g`bdd {者m6fWΙ=~Ewz?+A|ls疗wWTebꮘ?{| ,]q6r +f2̵{, 0H endstream endobj 166 0 obj <> endobj 107 0 obj <> endobj 167 0 obj <>stream +hTQn {Lc;dJɇ>TXH5F-άvzjZ7;JKXpAi JO1rԋuv81B}rvvc\sQVUz%@#j4 H ==sGW|kd8.r= 2oPڋ/nIbfnhy$ +{O<7UE1au8>stream +h<LSWߣZ'{@mD"N" PUP:Z&+Tt.95qq:uE7cG.{2N=9|sKIʨ1ŬNY"L`HSUI *)k'۟#AA~f}x$2&P3abX/ +_Gf3yzA5|R~>`~`xqiii6(40;E`Tofedek mnЗ #0XF1$L^⌄($nmHgF%\Anp ddDț\NRbk̦}M.-ԚW1%Y\K3nn9j5ٸ0S +vٷ8@,5]PXd!FF+'eQ"t4 s8oP +вSxN>jks +;ok]\ߺqؚ5ltzlFF ehaMQ" 2@;8Zb>&^><&(aa,BbVH)aYno/T"B~9 NxQ~$6  ]V??vE:3dg1Z^ӳgFk:V*K{:8j|k5_6_Kvl9$WVΦ?#Ϫ&a)Ҍ#?n=cl~Tgg>F9XGE-&ZYo%ƷlbppL_ibn8> 䪇k;N7 +wB3{Ċ"d1p82#-ء!i凖~GASM$ǰ̵ ;! FQv! +ǚjerS%j|`x}>{ nrn#ϩʢ?+-⚰To׹P"<3V 2yi9LlWr%r}₣a ڴJD),sC(y +"znO5~&c +9 .!t6N`q +Lw߀vAuMokouG2%[k1m+5e082:wv\>rr}OŨx^^MNnGvvu2E0XګT73O4l+y aU'L<Ѹ.q KM +SƎpR#p$i(Zy6hZ ~UӚ)cl'+f@YYbM. +0} endstream endobj 206 0 obj <> endobj 202 0 obj <>stream +HWMW\~a9$>A{$ +4ꉤ׈lR֌؁dCSQ,Vzų>tIglvz\(~R \pK0gy-C{3`E XYu=Wx3Jݳ*=d0:>(siMug\Y7UW󗥍psKKdy_7ra6ˑ5MM"O/sFvY1&Y [+`Dȼա&^vvc-r>mn}sUy\We,q]J|MѸYo]] +kf9)bĊ.cLѷtKY3]|-r)Gsyb)Z<1BlNVOJQ=wŁ97lv0(#&svf#F(O%IKEBv7紪4@#ʸC "f/Z$|UeTE"32Qb#p leCNf0˂ÌEA^ +Ǣ-oUĚߪةį8S9NMPgcH$t#Mkp +('91Wիfl!,7vl8^_mGY]ͻW,fցK#{E㮹ٗ`1D"b}sXW_çe\ͦsEXeBSX}ٿȻumJ*8cS{N|8z + Q]}whx>#T._V&^b2t,#'=^2 ''اPʊbRɌܾ<:l^NAC 6Q̫*ߑ_dbEQyEDQH0 Y/ h㱛4fim(wEۮJ81Ԭ +@|8^HUçlR$mpw^4 1Si䐙ɐ ,gq@36g9d% +aO:d-qŤ,T]pQ4M%7u8M͙͇f}zQ/7a,7 @'.ιjކk +|Rw|KPZ߃i ڜ%>OkOItC{2Wz<:lǞ夎P&YuY56 _֠,X\UdviU7f,#RnRvf4%B33*a '9\+R=ʗpsTNLy66%HMmy eN)gǨsܮfKjxl۳`Л3Uٴ_0* >5upks}|7mFpy!} +ubU﮽2]DO#\d{H_Ñ(ZP[e9rGPUQ4"~Cj?p|5[N_{d)bmK%rASdaӚt=a 0x:r"͝(= g*x{˜kAKa],ԫ9r@jzM(ѸާΌ +ދj UԷ)q;T/xX3H/2MQdj78xze*7д8(Uހdze5LG(>I}26~#-ndW'kQz4M?j]'8:C|xڷ:ch# `nSC8=xdvTFc 5]khzn R/ɜU6gfYک1yH\*B}d(}7^< +m\-~6Ql-j^|b@G:[I] 2cT&0Gte{7&4}JY MG> ēaVO<׍A7 ?=K PD)`^N2/7̛'yY]@.'ЧhĭZU3q[%0َqAJW/:Q*wv;G։˼/VkͿ 5ׄGXa6ӟupDte $h{Cn7{"G"(jk|Ew>Z+$r|: -%F+7G2fN5i^">H`%TN7E͔~0Ls2R Iz&ؿ>PIB!u)biw袰;pb˷k"Z&9iG66=RO6D|)1aB9[nehXch[ PK%~eܟtE%G!b f +;Z~ƓF׭~Ue9,I'ÄL')?OVl+NQgP͙ՀXTMrl}pZI1ѺpZ,B..LRFyK.rfXk(2kLL"cE%KF-ݤRGJfU eW”m| *SbkM&*J{PcBf?8ĪSv}4F0`d+Q%C"/b,ȋ@"I IS7 s4SGdžKऐô|P/_`ϩTP~AF12.ŋŷg/T}c mgNU עZR{O#FcUZG&WM$H +K˔Du /%r^  &fx;Xk}TAu8@Wo!H'w/bi饩+4#h$>†韇 Mm0ԯ0гGLL֚DQdmōh/|WLfЋZk!RS0i.m>h6Q C4̕<&rEADzۅKpft}8\GJ9@X7 .HTzُ/U9D0 6 S897˾;`\@4Vgol\]pgw}Ys8%7>m v`KFn2͡KvW϶PXzwo?yǿ݅u߯+x^D?1_} +:!y˚i޾9^v쎽B6u,Fe%@&R GRbji_C#cȜv!X7+AT1%T6I܍Ap&놼{C%G1u@' ILZl~^‡xy(c~ccnPSù.П<5pTn\c}DjeP5=!31JH70u`91\qUizNzײBp%[ C&V-za͘I6fmXlUnFʁAo')UAߐrJӇW4 |GP? hdrt F5$K;IdDdZ!hMRLzt,g@ŇgD ۷h58\ʖgSQ2NS☯VR#iK퀆Q\լceB'nd|P|gcD_ĭ6t>E^I:Y$0BUrK֊}ZlT_c<̚2Y5̱oٌOoТ^4]{8u-TkkkWQ VD8`2r[B]mԯfdcn&;?|aTuz?Cy9XEMn7:k);ovd@k 0ŘrZۆ߬Lhgi%"zᙥIf̤qC[8dB:N=挰>RhpXg¬ADeiZg =c֍s7օ>faJ B).-$LKXD4 D,Kq` +[YL_ T*ͩñp]Y H&6KzU 1}R7.Qwk֎UU?V~7 +nĸw\;JyQUq3z6H6wm8L|q D2O ub잌qay!7$Z!ZXs:?ܓ!Z s ~,(ia=6_@z AcwiwBŽp=kz#ƔwH)!ene g zoTiH5nF5*A15O ,T`X>,v %ohgN'[r{|R 4 )xQï^.~X0 F~Axv'Ι7̩1gښƭ +tD0v6d& eStN{I%`ws0MHj ~e +rV+ps5&TmVދfWmL|6m]LKIpf+$p9RMQwEpi2& @i]ʵ5@UtY= pk2$@jT'#8Q(XTdٟȬ?]aNJT.6u@rxa1(MHoZan9~ہ_!bFy:5Gx@tlԲ~=)_C9♱> ;VC^YW[t0s*=7KX5_UÕuyc k (Hv5[/f ʭ?̷Spn~wRV׶%vucjNI ^dfuauƪ^]sm)Az,mʊj֓ /V'v; +Mgb;gyCe~orkWK8%ټ&:=,yi1c"gʼI6dVGFO~HU4iF7ÆO(!2w A,dҽ{/C؄h=\Ny",O9?k=h8o[nErhmmd|>^;)"vNLm'!l#{p\yR/F˼SwP,hw(4Xf .T#wj<{pv=y˞{]<i@(.SQ> +;eU#' ![xLU9&u]4CTZ*@t'>iqG]ڱuyHgHfurb _n';(\Aͻ\mKҰJL+-NFMszԍ"_ׁ=\SIӉh˕ܵ͒1HuO؟8c7o' o;g4wa*D.2U沯kPoP A39H LÈ M2Ղz):G12#/ס/ =&;&f{~WlzcN$+( "۸HcnM ŋ2a02s^G +E(dԏ; +uoo +?ˆ; ͆^V}/]ILKt) ggcxsб}. 4 E 6+DC*!0NҊSqt7 y3|l);;=# -BoS*4{/ ƫ1P T@rP6:GkxZ]KG]ֵ\*8fBq>4zLg3j1_K*D,k.لB>U4F ܍Yءܮo*V.sATEI픩s()X?(!C1-ACR͒1,@ԿJء W@e?2ITyͰ+8H6H5$H<<r0,0Z JR:FJlk> RN mu,QOUQ2z_I'Ai吞ë>hҞIB1#P.cfD 梯5b .C !&_#0=.G#ɭ1Ҿq12..#1rB\"F8kb ` F@Hrho#{'c$1DKȨD'%0[-`!7{-J"ČIzjo1&L;KU]#E +NˌX$\~bt!3&iC. _Q`Д̌EhI;-OFKjhq`9)8,Ox젖 +Bft:x\Xi//}ZLjbtPl-LbDCRA9a,gm{Y2((79ޖ!mZ䧟.^$#Dy\uZmzUn&?LQ c/KKs#Sc\r.}`#b.}\|@.W_~P" endstream endobj 204 0 obj <>>>/Resources 228 0 R/Subtype/Form>>stream +H2PHW0PpL R5PH  |d*Db..}̼|ݠҜ"K4.t 5351VI0447Tr 05 endstream endobj 228 0 obj <> endobj 229 0 obj <> endobj 227 0 obj <>stream +HtRn0 +w( AAj6&Ðc3hmRœM~|~%cY}mİ?v由:eo*`%(s M25KXYb*Vrj]o^*Nl +3EYpS1}m-WkcR4EF/*ICrDLxf*^BƾrsDUqH!䲵ԸVsIhoPg68=y$ +hKsz!wԒ"Μ wAIj%6YF Bpَվ7=q,* ͊`c7ϵ^]0ſ endstream endobj 46 0 obj <> endobj 26 0 obj <> endobj 149 0 obj <> endobj 89 0 obj <> endobj 90 0 obj <>stream +hL]HQgZwr>lCPTZAFnNmnZswVw5 +4|.^J0A_{;VF/?;4izҒҲm%ۗEJ X097Nhq#O6Ltk=XK14m>lvHbSX'Br7]&Y Hg|1&ڜ/ 6]8%$T8qhz.Q> {w|y7#_r.\rP%zEX+J (~c PLMGi ~;g4 +~oQa WGwQ[AOFU[%ЙuXYhӇGu;0O(XZ־r#'p*-(Y +3 9I6-JRa8l:!=㽑HT{,7~C8h}a~pҀ=auCU"j I\a[w{!f0.&,=zJ +qn$3:Ƴam%Hn^ƘOZ;^Eo?ֲNsnE7S1+w!+NDOtl*/x~tE"M%*[HFy$ ]vn6I# q0cZQ}>nZKзl= endstream endobj 170 0 obj <> endobj 111 0 obj <> endobj 112 0 obj <>stream +hbd`ab`ddutqvqvu a!CG@K r fΜa^J{߅{KssK2JR+J *23Jb L cnjQfrbobIF*H[rbBp~rfjI%XMFII~yy^bn^~Q̒ Ԣ7} +~ +`_AR5'~ d> endobj 199 0 obj <>stream +HWn}#Xڋ5a&Lh#/v#-ZfBIbd9"eta,zs7']k7&6_J, ׫c W*:EGEn7wm~ӲMwY1+(<1\2 UJN˦Hۼw{.vaASTFY}$Z$:vۨFzN£C]ge~a m+DZUgŗ]gPC6 2ڧ4ҧ,s,We`&^oxnyuġ˝xjs /mF}"W+'B#Ӿ(qCt3FkRc{V6!b55<\c^n}PdLyPCc1M}sK]wא4NNls\„,ylen%DJoᅡ,{AcA`3&NTL T$085L+—Q}uTA_>)#"f49/"1 +29Y1VbOZք%6_im?Ϥ)XQ,Nll0'PBĜpDv?&m'`eY"br0:E}g+F ENm9wh uLQ,Gb>f ZI~N Q'C+)D#afz#T$Ns3p'ڇٹiIoh t?fbΕ$W+ `MKGIJ7:p&Ҷ_(\cE٢EaĿ-Mw|[3qy bH- 54B?pԺ CLZ}H{ؚk|r:Csڸ',>Mc3@hUEḡehQs9m6PSȞ9B40tNo[WGYYoV%%J *Lv -M"!kDeGEtC1Q|ڟkr4gbdB>oIp cfcHALӆYxys˘N,`HTOmO Mr0gL`@ +Sʿ*gZR(sޫ6b:7τN/ 8^,r4cӋN1/B9 t #rC %]$4r%Qj.(4IbpE)lINKku "gDˑ SL@ qzAʳPop\9 +fK+:=qNb CBڏkX+@(5ѱD +Áӡ =b5; Ⱥ uǾ)֎oxYc&%Qd W p I&zaΑ/R@7|jWNC`$&zxkһLۼ*Cp&Խ> &ng2WPK +G[]F"oGg s!oR@q"_)q& )uZh TcOo׿ Cg 'ٮBNA~>-}OtdGLZ| * jK才߀pCc/Lfԫ.5NvYP&& RB OD?EGˢD+۩Yدh{>Uk6M* 撍4[Pn66'1{yC6XgNSؼ,Ca5]C|:->Ysq%J@uOP40ꃭD.&`Akvsd ?j;ce ]7 +\B\؎ '@KؗS;upR˒h$%YEIŜ$ΈZj@9, Ѩ#/P m.M$f; wl~}ҕhLk:~зGc^ lUfrhZ$}f[R1yf󛨬lEQIqА2iߠH[>̠=,p!\Bfu 8k]22 7GD?#d7S/{Ĝd0hFQ ƢnʻJ&/Mpתg%r)ՒRJbu\=Wbmªt.B >įtG>.Ѡ-yxa*/x;}*ŗ+۴{t,9STKew\6(<$Q^׷Oٱrۭ %RFiN.l irji il ]zr")Ata]g[$Mn/CXvd$;C.BƱeHKD +ĻM /Mf{l;  _CqpOŠst"IKx-Aen84// =`O>ȴq\h&Lv.M4z%8|B>ˑD +y1*-Mx47`?y@"&ؘ&R5O ._ϳ%Z,n>UyV; vn$%1CVg#-Cy C2f/<1# + +4Z?M]hD' x- +)=J!>smwKnWXӪ{p0׽'j(:;M)2zjK@pn|5 X9no!٠h4=T +n` 6aΜ&F[ rj >U~ʴtT6^|(`bBY\:E8 ]zB10N4\'mwa]훩vnTKd~;wb'2@^m)Pو } 5c};& H+OW)TQP*Ρs-t.5i,c$\ư(V%3(Hhu}z ~n ~iˎLϽkz_ɣ^Ej(`S`}=Όۚrm{IHy)rk_JΩc~VQJLc U{ +3]דL 9Ov#3yVj`o4&tc{Ý٩l0Q4tPC}%8At$>&2dOڧ7Ћ*[{z}ڟ/Bϡ;v?r ~r*5/Ot)RJTjoGHn\̚&08NwR I(MjsK&/ƴPA9nЮ b{;, @Ec1Yci1XG23aFԤzy6TPSOJj"rȩul8rag8=yم*[a:hj'MSW U t~=ېħmФAt\(7!%!Ԃof]|; %6:CBhI! +R"󻑍8%\9v؛Ǫ6{6vB>}hM7Wi&LML,%hVE|vmI~XEsC2%4_I8F*qZ[JFBf<4!\ Y ]Q Vr0 LUKZHT7dg+y Ɗ6b DaFZ 4(ѪPO>\}3z.`@FHVgjEAq;di Rc7# OH?th_WTb*%c8}xR9X_/fUY 9PRZ Ajl/˲|Q-T D Qz~iN܅C7dAJϖ=Ul$0VJE0uhl{>Wa^.6*:q3Jp)fz?_% G]ꙅ*Ib9.=V̊~Kq҆$= 8U> hxvhD|mE5 EͩJ3㺽?n;<ļ..vˊnB։Q}`3SlN,0]ܚ*:#:[u(×ћp,-53$&Y$C>$׵q2_|YG}Lj_?M!=d:>+E}dq: `M6d09ܵ;ārd;1GqtܣcPs,J";QRp.bkv[פI`#isrUFSw "ZS˛Uja5(néZXM%~)bVVm62߱_45,0^BWo1} J=n=[ŏ95D++A}H [q􏙯/X-K"ZDh96ǪR +eO=s<(WDdTDdRD?_.gKxy\%Nuq)6}EmvfŊi}' Gwd)}BG˼/J{޾*Qp}ۍ&֙lƉ{0>ùRU>m+@UOpCI&t>OѝMpǾY۵> lBQJ]6|,^51D-N [f)h7neCfogTvwȫ9{qPYXM,pyA_u n3IEsӵO|0$0JRD`k,i( >ɳiRyU_^m徢L}A`x}eQ_ʨUW" 7694StmeӖ+{C RHj}oR%};$RVb*gUabmNjݹC? |N<;Dc{whSiM*JƢ/S$)f/%IB9$%*CbR1RP(Ia-HҮ3c d\ wl4I) (ȞbYn,a:ײxvdwfi XO;𞕠5:a~L$y"{1łMMeoC\w]DC멃QO*v"5WPwaoMQ^}{Hgk R[Gղ֠c#*Mb\rf@λ>-_+jm\reI,Se.HT%ՉE,$hmҊIC{ Cw~ٴNH4]Uے?Ұi;PZ*e{X`k$E] oj?8=4c6 ӥh,9z,QykܼD$(F$qD{|.enq2sH? bGwl#o]kbB#= +q+;i@O*a2bS n6ōNU9'ܦ5oux)w/7tZq>>>/Resources 231 0 R/Subtype/Form>>stream +H2PHW0PpL R5PH  |d*Db..}̼|ݠҜ"K4.t 5351VI0447Tr 04 endstream endobj 231 0 obj <> endobj 232 0 obj <> endobj 230 0 obj <>stream +HtRn0 +w( AAj6&Ðc3hmRœM~|~%cY}mİ?v由:eo*`%(s M25KXYb*Vrj]o^*Nl +3EYpS1}m-WkcR4EF/*ICrDLxf*^BƾrsDUqH!䲵ԸVsIhoPg68=y$ +hKsz!wԒ"Μ wAIj%6YF Bpَվ7=q,* ͊`c7ϵ^]0ſ endstream endobj 34 0 obj <> endobj 42 0 obj <> endobj 168 0 obj <> endobj 109 0 obj <> endobj 169 0 obj <>stream +hTPMk0 Wу>X][I l?M ']otzKqr3k3X*G=*2e +8;k!?#8^`m{w6ȖWlt8"(i`/U75"ȿ;v\>stream +hbd`ab`ddutqvqvu f!CG,w Mr fΜa=Cpi!&FƪzʢSd a`hii`d``ZXX('gTdX뗗%ہLQ(,PJ-N-*KMQp+QKMUYr 09eݏ{~x[/(L]~n74EKz&,>{ZySWWC\|`iҿM\ԝNi?sڏXӹ ^Uoi vuO,.n-^0ro)r.7#ēCmOg|y?|?u:Ir +f2{yx{x HM endstream endobj 164 0 obj <> endobj 105 0 obj <> endobj 165 0 obj <>stream +hTN <whSo 1a; JbLo/ͪ$0 |3zg#7zup+i+NAU:YYqmOic9#W2HMpT`XC]R‹_Wl.y4rBh 탐X}#RnB4dHX|Cݔ^ҋb' +>wd? n endstream endobj 106 0 obj <>stream +hbd`ab`ddutqvqv 24 f!CG,wMr fΜa=Sp-!&FƪzʢSd a`hii`d``ZXX('gTdX뗗%ہLQ(,PJ-N-*KMQp+QKMU;Yp e0d`fdd ?YW0~)lu;KwNZ#c-V`45.Qɛ~1MrFgl|?W|ߺz=%l9FoiO泡if[{{ʻ݋yTV;wL }%kz'm{ݬ7kBbo|e ~8?u߉8Wdù )<> endobj 196 0 obj <>stream +HWn}Wq}q ,ˠ٫3 Фb~UUsw9x|sw$n`j#` +S^XxXT󟒫涩V:f٬p&Zt|8b*fkjfS>'ZlR}#epKzhmHvSʵ}ȇ(mS"Trr;\0[yxE˨Y̩ANoi,ۿiWB)/g,d0tPKVf'ՙ3Jr糿>d85QJ`/%eO''jhdcD`Nj:_HKuG*RbB+\%g|`1mDAt$]k/}td;pF+^Ru>eOTxLqEd {?|^HqX3C'+dU%u*Qr^D=L3E'V4HDYYZm3k}\~YT,v2qY_c13Ei۩9t kZ4q]Df51BB.aj=i| R@Ir ZtaY%v/QzAԺ w<kEЉ|Ņuf+qNG Ni11N h +4WۆY=!A,A̐$ꞈzWϛj者=?3D3JqΤ}fCg,!^R@_,_8E8fop(;:J4V"3,10=_ŽGic |*! +Jfg!ߑ=9@lL#uIX"ĀÙi'"A&ىWtCDK"9)LN0|^S! \ܓx%(J +FCid IEH1qM+8x^ /FP?oֻzO`/2oHH}P!1Jkc~~lhs{˙U\iryCV(68=ɰu4y-`)N,!Pћ*bqY-8LQ@NQye03-!䚰4=uvmɜ/& ׶v*Lq>!FY$xUlˤrڊ1HU{em{cn.CAA$5iK@trsY+wAW aɃ"]ljIzCG⪑$\ǵu'JFBй.g3iM!qt8 ": @gpNOI{+$g#wHÔO HD U}莖XMxZj&2(UbX\ru&Oa{ +s07k b"ODِ6 LX,cP#_]oW޽~th* +Aݾ>fC=!xZJ3MS^P@Guiwշ[LJbXEWvJ wc/*zX9323`/F#{xzZ`#٘:4Erd (;&C5'ڶ Kb@*BO(YсFBh=[1F$Vԑ ƞZ௘pnpE,3 +e(e}JUlWU]jU6eK?67x {[іq&?.Mvet'|#R_-;rFt?_1Kuf3L{ 7Nl ; M<-X-u$' SU ñW"YǩSe{ř?Kʸ /X\LLs/WS89Wg|0s:*Y$8h;.wGFCEɑ<({ѡjf|8uH TSYrk'WH< pXNYݜ=Cֱu;k cTe4aGs>&ەUgs9DZSr=)&d@:g[rmw}و%ko:K*ՔMcmpXs7_Q6oeMw(WAϙ ]ɿ@h8WSCSoʱځr;uQVk_>ȦEr2~k~Ϯ"M5pYhpggчkʱʬTLS؝ph6 +n`Toֺ}ۭl7kXBgF?]O4|׳HOKKtj˯7+ksoWz <,D0MUka ++5e}퇙V&. +Lu^m  zܝnCn%0 qCH-70Ѷuؔ!<*9_!k3/2[$&=^>e;)`ÙIWC|/ +A4Y oXӟh/r F&}d? IvD64a>٤cX܌'4+Mk^%JLzLW8zR@rU(Rb.Rfwv:4n)H6Q fƉp?jFYU-Cdyvn7cԅM +s?Ҫ1a}9YP Xc>$ƛ _bP1  +SiP8M9d$2N~W7,'QF[yԷI'Kkk;l3d€uu;ZL +M +ȶ&VV/kβM&֪6}nA=ծ}x_w;h9i}wڲjiW2{;tXw-=rM7^vPnWI>N5Sp,}'*Oz"2Ɣ{J|+}4X:nYx;Pηn6 W߯ 'p{2+:QЀ@/0E:(Ք>M1E5mC?1-h +WnJ"R }`4Pj7I+֠ ?>zIـ`.Ɨ #%J'Wb!=f%B79Nr!Kv,, .D=_'B|63s_B5\$&5Q W.CqoLAgQ,#t>q88`0u+؛ě00*FƂ&=Zs=*KJ}Y3Ŀ`AT l1䜌J`҃@m*;H;:Y[',C%=iL4承PsHkZs"=Pg+}+3`u'Ϗ([UyYL; UKs}uvܚm?`̻3`vpT)y|:r sJz2,A;%FV3 6P #RK mᵯ ۦy.߇pJѿ-n$ جIP8H>2{#<_O#VkEޡ=PEĔ9`N-1@cA23gL|M>'dEoy,MfA>6 Y;kȎw?1A\1[Hg% +ݥs)Hq,?yJzGϺq(urpK޿'Cn(`B瓡= K`(ֆqo*Ģ2fVT&VUh@"{-;6.)eėքN VjGdUjnZfb,uV4S \Lo?a [LϓJ g"QkT\@) Wҳmln>yavy%h.uP]ae>t\dGٚ ^Œ (v>]e%"K͂אkj!#P% g:;.C+F6\Nf__bOeL|,߷3;n&DŽ33*X#U8u=ޜws.7ߓWd. endstream endobj 198 0 obj <>>>/Resources 234 0 R/Subtype/Form>>stream +H2PHW0PpL R5PH  |d*Db..}̼|ݠҜ"K4.t 5351VI0447Tr 03 endstream endobj 234 0 obj <> endobj 235 0 obj <> endobj 233 0 obj <>stream +HtRn0 +w( AAj6&Ðc3hmRœM~|~%cY}mİ?v由:eo*`%(s M25KXYb*Vrj]o^*Nl +3EYpS1}m-WkcR4EF/*ICrDLxf*^BƾrsDUqH!䲵ԸVsIhoPg68=y$ +hKsz!wԒ"Μ wAIj%6YF Bpَվ7=q,* ͊`c7ϵ^]0ſ endstream endobj 197 0 obj <> endobj 193 0 obj <>stream +HWM۸WH<0AlUv8dJq$hD"$8O7>(98A ׯ_^/^˛nrNl/,%_*4<'TՅP"E#ׅSEU5+0cnb4+NU|6uYJ5v `#߷EUE_6kAlVV%5Ǿ[ҕqwano+wtu߅ u[=cG m}Nt! .R[_aJ^KfD=L(bL4ٻ?Q|w%:LP5Bh;M07*ʰ݂o]om`H0>`͊f~ ( +ެ?m +Lܕ!_an+짎c9\}̉2r&}븶DD)\nY-T"zsmo(i + NW@ ystYѴqcw ͒2[{> \חǢ`stNᶨ ȂSvq>w=h +ֿ_]>\Pna<]G@V;7>!ŶL")wq4DśD3cL$ k13WDz.ZRq  湻$!x9pH28fp%] +-*DCTi1t350dΡ2<970Y. p= dH5~h'ZMv$ނYoxKQrIKH1 2' wlڸ|jUƘor`H*,u9Ȭ -ġ}`& ԧ/y!*:ȼ/Ûړ\9p#tgdo\Bfyy1]n{(c9f B7߇#p 7<*P8*nݶ arUt>H!lQMcOxcS=,40uDv\|yb x^nEwRPSPm2P6YZTiQi |gt<*| |1X6ivѹaqdeO|&kh:& +L A$i]}`U RȰ!;;_̮~swfi7A\+9tا ?^Q3~ϢphM0?d +Y=AH]7PayTK~El,gY@Nn O^=9vAB#ũE'܆7:&e`]Z fb10)a*J?S81fNZHw:_@43m݄ +FQ0VJ:8 ++X#>+&( ҽnadH ,%]g0y@f>Na#?|r\  (P4޸!hwXVǭej# 0mGX´Mw<-ay[4,#'+Fɟ}rD9 ϟ0%a]I W BWN08|l|:=^NN4x<ǫ&Za\{aHQ.}{MGPI L?֩|_"|JA{qMN3R=1إPF+kbW-҇Ol8V6d!?P{zva-ACDhhe3v'O"3<:1\.XG ԟhG&F +J|/)T~  Z觗 hC畋t6t}0pu>f?4 ԙo_{2~ j91{%@E*[]DB3Zq]ou:fۅPŤɜ*Ό[qm uKK(%]n{(۬|ˠsn*xMS/y/#5\ʯ O*b"ύL1ڊ[4bT!}-1MpAtDU۸qEbMpgn4 6Eȃ+K$?!eˋ) C[dd9j]V-L _Vx9A +U*dh'0BU3"ԗʼ^M:SQAiIF<%=yfĦD/=[6i6pHMjHQ8K"zL),e|LLà"%}S.P2+IrE6.y@7S*`!H^1_#? YM^ 究7}r Τ#E6e#%ۀ<<`#Aϛbe[[]y~)^ZhAִ,"˺>Ly +8EX4d ԁB +7 LsJ-Ņ&p 42("[ dc BxeSmñk8ox8gŎv4oh[ \0^/ BX4%|+ d: xWf cN+el&'՝DW9Pԋ5xHy Cda_(ϧLe(y/gS Y!-ꏳj&Yv@9>YF$tn;tn6yr=2Ę'I>č^ V`g"D=.2ct7Gbݗ)+H8{@@DׄgTwC&H/y|Z->C'+hr[plǐs~zD_Vtk/} :$֠2s@o2VIb@eN^'7y)wѵr:MF6͊I {QT7<~7C^.D'.IXnf֗hg}nFM|ƁAKQ4<vrљ1Jv% +(1M>ITbyb}nƒ5n?{]0URD ?`n +ړ=kN/A& j ;~jøK{X>tmn@z&lݶKo?ww V=>9h77LJV"X$dkՊ ]fP4G\ O@gp{GAw MejR&47̚y;wwC-o^;UI}Popo|_͡uF*U3`'msRW.1Bmm$lo6@.> + f;u5F w61cqA~+aĿPAt۾gooßC|#z͛R7]i8?|&RWa xoq4Әxq*4WWЅ_X&?&v{>ןۄc*`gj$mɻ@lvP״pI;uog`6Ic#Eq#[W#Fjgfva =9LH3gƇc4%%y8`}Fi9Jf]m;=!6b  Di1D]$Ecvȥ+ύph +9$^s+p7!ZрF am EQg1n`[$>OûyAAzzBڱ@cicE8Vj"lA)zOl2rϰ  :^#@u+4H +y#3NKtΎB{Uv·.£Մy<|ZͮWkr:;"R/'Z\E?G9ZcD | (!X%XJ*\x0VcHVOA{6=`%g+n4'ofw, UYj}m7ǧbYl<6"GE!c3,Sԑ3oG2ŸP:w}?{^ Mߝ!j. `x(1: ,l- Yw)ɌG'լU ɯs?yGgX'F?(]q.)NP(_7 :M2qX) 0AӲfIXrO29^qaHXngC)gV_lFԉ8NjW_ ʳ.v7+nP^nAN*Zrqs9u8/6@eR"TD軩]icOۇ#\c$-I0]N{vehR;r],0*m|hₚF-@\50E10S =֋@w&^~P`mK:]^If峴dJUV Ձ}nI.dm$1og;whB*?=CÄ3D@XI7Dcҙ7-Y4M a+-|El(qa5,hY~΂B*Y6D^iT"G :>֛Mq&H ʃn-tv->PPKaRB%ֺ&r~[5ȤUI*n`{1E:]ČF+b Z59s+@5ܛw,r*:R v-uM_uV=rQDRGX|, + R$R2O LѧThd [Mr tUtvVuȣ/LGbB`6 wۦ +߲Ru?V)Sk1ms;Өn ImzQP/J DTd?z=M7GHѱH8Wf@Ӕ Ixkmx6{\aXBMCbn8vD鴣Őx~S=x%zݬSG|}xBS$uqHX@ӫly(!Izey)?a4)ѩgnn~aŝ H|v@cWovg{z҃HƤWLKA^oRG{J[xJx摩Hho#{<#{ m|2GQz +g?u|؈|z TPR$hO5l&gUrd +L{J@U+/"}PIP^g0$X:>,IQ'P`2,ODpVIf^;3 ͒:#VOPxCvO ;)0YSYt&"T]m*5hgք` Cx-k$!1'>B@iɎx!Lg| +~x+e1ݩFv,Ve!':wlEx+SD_2)tɬ?ZX=,(E U2U2xUs%^(S0F{*̦jzx)d1n-ϔ22ɞ-&aIV[kY;~7j?h[jZƘcGņ 4Jsaܛ7NZ]+5̓#%a=yE@GsOPav? hR@eE2Oct)2?@FI/ +Q$>Jj xyvc{ +'L&H9A8<[EQK!2Zu( dxazS~eq2nn~ld@\ح8 / m,;QЭ8ö5{JkHKvã냺ū.Ef\Rx)|_bSPt񂱗.xʫ X^R-w!5Q"GDj_V-P~A<'@Ҥk:`梗 " 7 +0]5 endstream endobj 195 0 obj <>>>/Resources 237 0 R/Subtype/Form>>stream +H2PHW0PpL R5PH  |d*Db..}̼|ݠҜ"K4.t 5351VI0447Tr 02 endstream endobj 237 0 obj <> endobj 238 0 obj <> endobj 236 0 obj <>stream +HtRn0 +w( AAj6&Ðc3hmRœM~|~%cY}mİ?v由:eo*`%(s M25KXYb*Vrj]o^*Nl +3EYpS1}m-WkcR4EF/*ICrDLxf*^BƾrsDUqH!䲵ԸVsIhoPg68=y$ +hKsz!wԒ"Μ wAIj%6YF Bpَվ7=q,* ͊`c7ϵ^]0ſ endstream endobj 28 0 obj <> endobj 152 0 obj <> endobj 93 0 obj <> endobj 153 0 obj <>stream +hTPj0 +tlO=n,dE6svnH ==ޓ{EMGq +V`[Wt:G:<4o #{(qxj-v# %/"Tж`qYO/AތxsYӈT$a\Y6H4iw#faNBwVN- l endstream endobj 94 0 obj <>stream +hbd`ab`ddutqvqwv 4 a!"Ћ?Y2?-`9sn8{ju+b`fdhlKIM+q/,L(Q105H +: +F +Eɉy +%%@NBp~rfjI%XMFII~yy^bn^~Q̒ ԢT7 a``lg`4b`bddI3AQO%t/]Z]-ƬYJfKc Cfm[OFxO%l-Lùk?<<@ `\2 endstream endobj 194 0 obj <> endobj 190 0 obj <>stream +HWo~_Gu"%Jpפv}8Pl֭-$iof([vvBRoy3d]}7'z2_]4Jl v6Y2 +.wW~:ET$(u9VfQnJ _*5iƎ~PN3|q:36V?4u׷eUݵRٶYO1JY+E4EM44w究i6<굨B7ZM q9>,*b%YE8b4[iլ?}UTvWբ[ wy~^WmEڹLGGߴէ.ξp_jjȩ|U3Ycw{97N,zۑm>>( RF;D~yg.p7E?,Ldaq -&^E&R3=mi\^vr4L,~''L`xM۳? +\Ҵ~~,= m_JtMًz9glYYtC[a?#huWpL0L6jMgYЛoHn/˪z8A/m]_n+- +ߏh+'/̉Ol(N3^5@&hI`꟦:1O2~DW2W1&ώA<{@ IJ|o\jq`07,:Y[J +jdkWB os6V})x?/{EV0 +bCsh.|ӯ 4@`NXn\Ѝ;8tJi`xр#MF&M_'M$uq@IIZ6IZ- XE OU @:Bx㳔IL#ѳMh/x^pT[4dr?-e42yM3_qnMi o~$7QS?v'ctdmؔfoGx sfevtͮcz!{FvHPZw Tq--J@]? +lYm7<*mazG\05ཱྀMZD,rB +YYPoo̗ 3|s L+ eKAu5sX.9[{ +>Gax@ͩ;EC0b;id2M|sÎ{wZ[v$PgB LMM]-(ǠeW +t[_vM-(2 +G& !"x qڇߥjHcT.&6q= /r (ߐYcԯI3!i$86 Zx:k\-4 7A;PDsh~NUCEEUQkR^D?x(:6l7:x$0]Zg EŊU)q~$ Y/KlThS*RFi5̍x믖p"]ʝ>;s348g,ٶ2 t >^*ͩQG}c!X(8v.QBgHv!,.s(~kGgDB\6:U)|A+f1LBs)bn4̀ 2&ѓ2l~Og==5.dm[O1$Ei:/CEJBEdz:f7YH 4v+&Ao:m8mCЌHS +.V?9cQt,E=BER2mqNPtP:,*Clih31hj~j:/mc'8c˕YMIusXod1"'BbEiy`,<3::dCz&'5 bl 1!|K:ꭗw_MC'Vsz&@}x2bk璶uQqJݐ;ރ&'zc13Zˣ?p1HM ^K/P8@xw6=I;r*Ҫr'{jKɬy4B KRu}4x>h:FkF@CP U-(b +VuZYhXic6Ebwe -R^Fif_-<\Ɛr.?q!ã®P@E0c=[b8JXõXtш\%~J갪mQ|C+GXCV[E^*f:r%Z6@GC9CyU )~?ЯȖH3`͕o}BKe6Ȼit36J!xDBjzF] l6 pd ޽/D[D(Q!z~(YUN`w}z%0|~ Aa0pT^}U0A^4YRr,"= +S/Wf rǠ{׿}SӰPmHE͂t-ro?JI!ΙnGugC?PeF'x&>MIƢ%Io|QQ`A[6t*2(d +Ar6t?6(紡͵:j:@6O>{TK)I i[AnO(l*N,8!fH<G&cPzK܁Ͳ[}LԎ =EFB㳬jk1"H([lCXpATEwvnޫ|M. nPl=ʷj+UÔ8(fgD띛7ɥ\>$)H,",K#sUPr(Zt,/h5(t8[lf^ηKh=_ONt%F?\1yb|-N7[8W`NɕYA- +,>f|Aryz +M#;Ԣq3"FV:eœ`01(2C!@hljX>ZoP!\ݕĤt&$bPȀ^L,E{dڅ{HI" pJTVٞ$NΗo LB<Ħ$:0)=s?ط+rV߅o.x#]^LJҝVD[_[<I\8;c^Վ#YKS~Y GQ?BRvz|}+8 ^5!Ku撶d@c +SQ;MCxUF 81pd=<=>mQZ'Lx_' 0K9l #>8}VI|M&eX:Z&gqW ~>I3ʀySXX5~<>U#n(Nd@9qZ:fJD٤T":UتgD W 6rBFdw"U{Wr;s7~Bh&-%xԁtR +tAXN(:bՙ:S&HFV%esy}1ERhK预Ln&N#7J_eZ &W\ mQnl6#Z!$ZAhF U_UbCǑZGW5ևEA"@a9xH6(R]{.͞C6oX"|FW4 ƍorۭNɺD.R$^Fm# +'[ +N$͌@/"Ͷ+Vp'5;sF Rt_KPbrf!.É;^5Y,XbUW$%JŒi1/#xlPnD `,xgTMSšfuE0;3qr:R)8U]V [Ӥ T۶a\`4n܆RmX TM D #XZ<~^7M?ӏ0h4zyVJyto-"PY21dϋM?\}lOm3M?6 u3m0y+Ppawk^ Grc"roeWG&]kDFmx'(t(.AQp^D V>>>/Resources 240 0 R/Subtype/Form>>stream +H2PHW0PpL R5PH  |d*Db..}̼|ݠҜ"K4.t 5351VI0447Tr 01 endstream endobj 240 0 obj <> endobj 241 0 obj <> endobj 239 0 obj <>stream +HtRn0 +w( AAj6&Ðc3hmRœM~|~%cY}mİ?v由:eo*`%(s M25KXYb*Vrj]o^*Nl +3EYpS1}m-WkcR4EF/*ICrDLxf*^BƾrsDUqH!䲵ԸVsIhoPg68=y$ +hKsz!wԒ"Μ wAIj%6YF Bpَվ7=q,* ͊`c7ϵ^]0ſ endstream endobj 14 0 obj <> endobj 137 0 obj <> endobj 77 0 obj <> endobj 138 0 obj <>stream +hTMo0 +;vz؇vwi(Cluzu0Nvs0G>stream +h|V{Tg!&3-q<:c3+ݲXVނ<⃷ +!/ N-gsE NlYD==v]1mWMO7 +wwibڮmJ%4/=^"͐Hc>mJMMDic"L(JNb$1/MLeIcbEH.bs"/,]bY$(,8Q +"3A {A"_d9x 7l!A"aNH,r EY[tps4Q{}ubcx0nơ^g%1P.9aJOL+cL + F`2 8)=x|W7'p.%>xx/x *sUЇ~C?1 ̤7Uz+ r]-l_+/ |JB2u%,0P+ \zA13o̽JgC2MXxvHn +pT#)۬׸k˜ӕ UֺeL$rwP!lN3Q*-,RY򦺚Jf&+uʹVxg(2ːo;N򌅖BE]Oy$ryexj|ۅn[sOR=RʯCC'ECCǏI:iPjjlRsQ mOS odFR4 +\'?Tޒ*w4IPɁ3P8*f+* $W[eԏXbLmJ("ȇ(ܢk7@r;te,)? + +f='O',S` (zaJO7\h0SX7ULVȚȈ=q¸m[IȽ9:4zK7wEх:Bx`{xYt?Ňnms^D_r.1~DFze18tLj֛#$8hhձS{f/lfҌ74ԶS ++m.6MFSPSfQ7׉&ɩ{ٸ6$=VX}D;rH;sMr'Ok?DLOވt;tQp y>_>K gW ,9mY*\bL_. +ԹdCy+Ok-xTDU4[􁆦Fj V͵у\U+mSwP6JdPTۦ.uX-B&q?)ogAa0۱8Dz~mDľd!x%(wiٻbHwHHNeb~j]=d6ƨdYdI8O5a|"me'׀b#6I,;-UjXQkhW0HY>` KyAy:6XCN9V!wy3 +v +3V6pQ_ɂE`;/OT*$Bi^vEw+wٲ/KH>Z4G:6Tp(Ξ^vޭ4\mjBo*11sPLyAOcw3ﳿs? ΥSκAg=A/ ^yo,o#ovo/ خhe5irZ][k6 ]uuS :Zpè3fj%YŻbv kYÀwMuMs7de!n{u }.CMƊ%^R3$OU?YȇV_{C;M۹¬b)%MDbU6u5]^!?lz > F!r&JaĀ~RޠJL 3%>rA Cu oR첦%s^3 J49YriSCf ºK`0<}#fE/gjꀫ1a֒gup >u endstream endobj 191 0 obj <> endobj 176 0 obj <> endobj 179 0 obj <> endobj 178 0 obj <>stream +hެy8Tq?)B$*"[V"%0>g}7 320}'KK Rv~ӽ<ܿ|99=iO,<O^6i6L@֡a U;0hѿZï$?-)L hQ*MI%*@9KUe HV/t4-:qضJ-@jʖ%rd$' _W|o岁S\hҕp^&ɖJI:C# , ._18 MLr-z~(  PS$5]RW[gWU.KF55/"^Xe[:zE7Qp[i{Ŏѝ ;wGM{Nolv<ڂb)?n5n[Cg9?qqA'.:\}w0t +;C8;7݅3A!ЖwÞX31>"߈nR%I22< uw~tЃµ[ ZR%R@ͥI"Idpn=HQB%xXҝ(-bf#rsO(V* rxa4hŘ t}}>qRSmogn=nO;>>&|˪/3_%\q'Woo(kW-_XPi5ӥxVͩZWl_eFkuuhU_gz#7o|cۆ mѹeWaQn$gO^iƾ|39C5pVk 8CF#GGЎ'3Et25-],n8sӧsC>;?ya*h!. +WBğ_Q?]qOMNw$קBbN@qptqZL[:y{RGt˓1n-J},6it@|Mr>&0kmzײ޼fyB/.(I袔⸒KeUxUWVԜu;Qpѭɳ٧ſͰ N-mv;'uO_|åC|dWosa߯3W?~KFD-tr++!+a`:P]Qpp&[m=otwڥ#&m{jf'!--xX9Z=v!-;cG;|֩¹%5Ս}NzR3Y9/ُO 2γ.px"w!#4rVXvJn$)i\4xVE{|0SV>CǠO>}qu??/2wV{?_cɲ4Кes2W+W踯>}Ͳ5k\ۀوܔ9bVG}mz v4bŒw{21ܣG:IPV֖6;]d ;GDGǐq/;:w1?󔞫i'꽋dU{/LSy 6IHТ0J8JDĹQWy{Zue {#6/X X;e*~#(C6+0i?0ɀ.gSr%IYچE3⇒ T˺%;kCN?[0|Q8V4TX<9qgN.~*ԴȻ>Y|f?  o\P @BE:*TTܑ6TeG< +Kc-PI4U(JEʋ*X%4Ca bՂo +  [s_2P)T!VzyFpO#}H ؇I޷E}G+B/'@-9 &" +S尕|d +X roI ~<> +w. Yt.Ȋg$! Ƌd]zyl4YuS,"` +8/) A4uIA1vj 3DpeD,†=)|йPc~dp*- VVݣUкvFQP,NRӒƒ Ha]>_@C|?AS;_@盹0bh'pX:)=e j0 B Ds&y*iI?#Lm!P4@D ?jA|8~O"G\iaIHMxp7%kqkhӣ /`GȈæطudʙ%z~3eMۀ`Vd Dw|i(J5\̝*+Ʀd8 <((nrߟ d| +$IVèj'MpX[E+-NR5 .z-8P8{;,/<#}׃U5ݡ@RZ'BOT G7nكJԞuŰar?fB' '"\cT,L!#-mݨE-i1>b%|VAccqb엫t +K>LaYȮK:T ``/KOgƗRIJn>RU2 JZŏ8r)vgX/SpzivKYkf b;}ʵdc +~ McTPȿO/G&[ +g"Oy"q~-6mO!yaH(/)()G)Ua#)73("zT~Z/+ɬlƁƼV.-fIJ{BP\N2Wh^mr(듖/I*-PK; .1S/'+n Q,iD-Go٥MӰxӐ'H(Ƥ1P?fr] mY\EhHo~*?^PR.RR)c1kN'f,f$Lw狦D̪IN̳5rXDBqsAm:N hҷ&"bm>^+Q"e;c`ÂvizӢiON**RJc\7 +HZ +Mu] +*A .)z%U|QZ;q67Uκz3#4x`e8\@]d/2Sɱ HͲT1=!N@7Ea}0GTe cE2K&,/wǴ-6s uߝz dl?^Z$ܨ\ '8ɴK3O)_4nMڔ vJ5`u?SS{#tWHXpZ"ooUjYqfY.!ZƆѠmá]>Z~ o8H*2WeKB:ZXG'J8جqt^Yab_@(Cq+n&_>P_#Xxso+ST*vCQ5T}UYp+;=G7gen$uI_b9҂] s?q.:?>ʶ6?"a;"aց@N:\Ӛ^&xMg;#xRAHVJ qwMa-YasDg/7= +eifuJ>Iv뭓*\ܪUi; + (~yeN2R3eRzJ\Ml~K+KVfWD)6NU|,rȴU*8,mVJgVtv[}H_>TV Q=U}i"/( kJ15-7hPkڥRTCqa*BA {Kǜl$\'%<4V zed|Mv*JTM0`y'3$Mm)H3+: +RxsSU +ubi۴ Hm|%]*o=F\V0fԇ*z_6ꌃ5C/z n +\Igo$_mU*P~*OlRHNYt“RаG*$Euguy 9­XȯAtWd[;zc+T_>UE +Q)@ZzuoOt*o}R+SFWOXr-w\):j/#/2B@h^_m#:`ԔFa9d\ytAm^\)|lM݀8uy'{+N"0GHF0*pbNz)bi}=H?B&X4|4to 1#a;QҡAd|Ʊ`1`>Nbק䉙OKd,/3.H\O\Z0=`X-kh]8̟ |~xdGIrl:ec.ڜ2ƈ"~Hi֭σT,ISSM+!e~ȈahdϚa4ާ5M혩_ +ieoI&'wEMH} -@&C49IjL%AﮨK:Nm&-$}3KuJ!)r]$~ʫ8p~H:]A:A3^/>dM?X3@0mfa{cM0߫bna<2&0P$]Ęc08T3xxN<fH $c~" +i30/Vc*O="aW.\N٥Ϡ]q==&}>.< Imc2]̙2K[AEšBzWP(^ԙu({z;m16PR92P*ykFg0eіȾ޶ȟB-`%?d%PzGf3HfxyBhܠ4v"BGw{!u4q4$ +lֺ V1vFd_@=Gs0En +>4,~n*2G\o"ꁈ+eBsaQbQLn8mMYZF-HAP&d҂,TD,!݂<$c-nb }4bÍ"QmhT>:š -zG@67nP$"^Aɜ B {A( fsgv>q}EadW^ɐ= gޅbZd7 uu %py ߈\9ZO=ӤL ᢠNjRC{7q.=O'k`@D5eUB:oؔE|y/6@ڦjƺ{LIj "&Ul\A)j)!ȍJBEF!":u{:i/D̬{m|w~~_DMԓ<0aK'Ρ]l;{ښ),=k+c/Խ^9 ST +b8EuHi78 ;Y/[W3O,4O{x3.P +Vz+U*We`\Omr;6C/L1WH1IcO?RVtfmyνf2{0CFݍn%a +J#ئqWP:ݭ 7醱$w3͒C303ux@z>Z%sT!nf fqQ[}EX)mk|_ُnTci!ۍGQ"X>WDpdϑ$7QKWkc䉓W% w: Oxm^ǩXb.>-:P\%nߢxpBư`YN:M(5oVLjx6E5Utb0fvp%vx^^ץK%}RE3&  Fy0?Ɩ +PY2A2 Ti*(9 $CsBrj0&4ƻ5/~ ?|Ԝ:o U(mK^巀-[%Yk]eD5K5F+e뙬 9Oc"R*y+Ըƛ$:ɪNek&UAVGăUJ*Τ<,;y S1\DO,c@_ĨsA]s.T'2wFw jfV(-1Tu,8r}#KF $wHLe?^UzJRzxKhPU!5qP0﹩)g4;JWv(@fMc㬏4RZ֨#3CLB+-Ĉ`y#yqW +L6?DtKFo]"q6Nf3p"5u|*3ʵU"a²L&VR7-ShҪX?y27^Ȕ׮PR1 w,G$횛]_7eFyNi5*.|RȠ0?ymQ|RNqW2E>H֨,͑㦤J̢ R*4F😬s~7+1;QܳH6},1JƉ;:񦌶YxB#蚚R)TЫ)능oV [A F=o =FE"N3?}^W`6D~gt!.y6n}FQ +sF<_xɄ(s`7èչ*<CMS4nQJ!!QYE^f$ HY!fRo!<ʥfTJ n:Uyv?*+k ̸W͓+]vЏ.ҏv%@ΆtQ.vo w&yԸ\"o_\VTߦF9<bR &jRC⣋5^ 4A zϫQU7Bm-8L͏0Ʃ)4cK]ʕuk)4\0ea96PbԮ4vT~TᆹBѿub꿚C*/Ծ 2VRoFUAW5W*ujP=ᆂ@} MCZSxu lQӰ=%qLDվ6z1.]nRX۲ӚYy>]374`_q +w?s$}*n$-%-I76'PX蓽𤥹BZ5ZU6IS@mLW“R"N|5v*dK; Q u:*5Oq`YS wޕtof犷E^s\$z3K.R;潨Q-7 \.o{;2t0)/IʸRjܑ!ZvY>[dݠeGNTFq({\ +RV!E}zݾYm`i;߸Oq:sK@3a%Vh}D:I͏׷ޅ Y4 ~DWxHDR1̒c{{7RI;dk}}fWmnKv))_ҍQ=p}Ԕv/1C, I_ODkjw3 YƂOuty=!h'H"5"r|a -Ͳ~:yab|^\3W]{y~O?QZR\1]ݪU=%{GGٳRVjYCƵӚa'+Q'3` ȍj9^ǞnD`HK&e tYg"8?6AO3o6ρgab<1o ~3# XΪañ{uѴ r$m|GmP)occ^ +% f-OXk]o?"JAYP6_)C{unԝZZ.օ4AUO!j-k1)*HCvr Yq˔N7ͶG Q7CAjv)÷.A$._/׌r6J)}=~ޘU) S@B+c6K5e<ռ  x\Fm3嚆9$T +YٚZeF|-c 37ϔH,[xQK𬾏;-M?_B)0#)e'=ѧc8i'ty 2END|N #GP;ўcw>W\pľF<+p8/|N@Lĵ]&Dl B/lS.87jG.(%ʩe_NJ!3ޏGK%yޛHxrw.K8n|JkbEư GYa5;1(64KM+~r!]}IF_UlǤ˩WaJ^ <\-}zTPm*WPj@B"rhZ]y23K1٭v`0}v?8lCjZ׼DPQ[ے%?Gt)Wcߝ݆ 8p22^$ y5!dLToN0z>N`N~0{b:rO}h{MXGn[<@:} z::9։ya`9T86|fQQ;(F\?K~kSwS{)M%| w3ENIEiRO%%_C9!L8f9AW{kHɌ I(:s"+u rjuNHu$q.޽ 3ւ|nW +rGOPkKOaRQu(iħ]YiVib"$n^xX/0"7T<)GFL"ߜ^IL%&N֐T>f/L#|ULo:K*"n50A m);d5cH#x]BJPnLPGT{(^>B$MJkv%t@WKhMHh-,k\&Ѓ_KgA|OS%g8JXF-߲!$v,4<.n!NX_KWω8 L\U^Lvvnhf V9o&_В_X{9be5v:,+4e['3x:~g dI9+3_ Y fsA7sÙ1XE?{MҞ ɛ<I~i@*/q1zF(.}? +Z7nNm4 8C30GvLZ3Њy岬t_RvN0hְoǤ >J990jL7l2^̆473ջF1=7vP-r?8b2h;{?Ev#-ɞw1RFlqۺ7}i 'DY)?ɾ)vyH%_ '0*+ nN8ږ"F]?XtՕF!ص*jb% +_nIŢ6_81QS2ـe{%ARVI_NӞKrEi=Ӊ7+w#Hīӑ_ďt@(eLog9} M<9MKOM;J.%_")J^,3 {'q6 ];M~C5BV=.(E>;sSel$o$?4箨v= <1m@` IzrdXoBNb |ǞSܣuʸeؓR`yF$@҂Nq8Ezו[m{sMJyfRwßb K {-Y9eQ/xԠ&ޖј kJ- AHe^lh]0Cp/sC+;D#$<ː#]3t@dS.3?HDO)4v@>\#.#M])]j DY#NxFFWxy0me$?$X%1OKYi 5Cж+0H,)E$}[M[kKƈ }&y@tuifcv-ga:2!fa6q(wҥ6 ٠ZAi)[nt-#@"3%0Dd;5&F <'s)>=VS԰1[Y sTզ7Kl> !"ߊ>1M8p)j"JAjl_e{!{־)\S'$E!N6;x:ѥk  _|wE,NYd }ΧjUG1ƛځ]wfsxfa;֞-'ĺ+IqB_p14dQk5ռi35R,HLYxO;NBK7>a. 4I0IXM,V O}*P +cSft.5Α ?K+-W; &QQZbRm,e {j> βW 3_Łu7*'o4iwG?T-+?U6֣m.zjzd1٘EG*sG;YjY=U^T$3,ϕɿ)cNT\5rVH.).WZp<9HT9‡$T@gEn[ +oO-?| += ßgUDD(Ļ/+cHP)·_eMں<\vFxu>.#1֏+Zj--8e9G9Z{rrJ}ڕQCkNUB,Vһ9&s}مEUSG*l=XI\-4טI Ti  uV9KwL.5$]n{U&77D/(ox> U/a(1$ {JzJޅ:"b_1x'hls?r4{8w`~&]ml]+uYlK(ّ䛹@w kÅIK٘Cu5|~uPY_c+wo'df_ZFkNV -W'vхDmTZ7Q~nr ~FR^7;&ťM_CG*/ueֶeԟbBq֪(}łYnM$5q_ C7I'cbb/ZJ$m ƍgl"u s״V3;X$!ME1k^֮du>n>ku06TDA,/lVN^A}n4Z[Y&Q0j}m$զ#H0%tO &-%2suY>jvոAT?fA 2̟lH) ^K`v c 9E|;@}eJ ~rP +t)~'+XpB=ć E0Sši8UGJ%LTU[/?[QrU'- ᷂Ay̓P+Ǿ=vnX^E݊iieAqBZEaqA\C+ ٕ/JheO MSʟ)ކ@v'g֟_?ӯs\ac +V+1!d}5lџ u+41y43g=`b͎m}蒒sleUoS/ oƌ)œwzQ 9Xr aߔiKx?؛ hADg(ي^^fVcNFcn`͘K%a \D`!e@0ZC|ؾ!*7"BxbG W.*8&/x;܀Bg~ GG WlDĵB΢nd3r66 _T.&췝՜α|cC!{`xx +Q (ezCE?R +ںZ~;TFCr,к9>MOxw;ڿʳBFhW!= !ʹ(+FLV +ђ=c:KB#UR$}+ Iz~7CnHaItNc ks~7BLIKВ% hW/8 _Jp9 nKCtG“~B)s?,U9NHPG7vWxREQ^\HN!qw|\D/'podֈ=2e6G7le-i +Xd66( nn>/7VN'w71z[+%묁.8gcl:fsE *zW9dIgOMg1^ F̘クUu~{*h~Q'oW1=TQPPJTAiwdnT8 ֳSػ?μKX=obE> B:ւQMτ~X=.GeLX>%/D3H@Ni` +qo$4#I騳_ B*HN(zjB(jC7U?2C*p揈T> xUds%\27ce;7s(q Y6!uB"J.P:\\TgA9x;e"2N}t.=!`s#t%8$_#2%)&ș](c[qSl"~`8'iݛ1nM,fYپsru}b?ja7]YƂ ;}>1;U=n\]+|{$o+궕X./_fRVf6}?MW y,m04BM]@R9 %r6 g$w y +͘?f~eS>dBp/^ۖB|Y +jiQM raꡙER*t(R!摦N-cHhjFbʾ)s>i2h%NaoiK#ا=~`%OXߕP?ɶJ@%;ECޢ}KDlmqeQ)uFj9 Y.qS**LM /_G.gg{eǕU#ʊy'"j';%_zm*ج}7oRnWrP){镶'Ӡ#]"sj>cC/s(+ƕP'&oer:Tjֺ?,c}@J[ueDm:lx ?#OGf$>CiKQUrt' g<]UolzU7X]OԽǿKiW dVr)MZIIEEjo*ev 5h\)ΘOqY#}ӇYl&g"v֯ o)ﲺϩ5nvH:G E]:XT᭍J8(HpS۳,+u*JvQa֝1}BrbÅ2\+A׾k՜^pFvEs,Jvo0gr"ZFӖY> q \^&ս뾁Pk[9VuŖMgdGmJ%+&ĵ}2J*k#Kf"0+,ˑ#[ (?rxo^BaCs#,=+C4xYTJCK\]3Ч౧jX˩^F;pG֯׏666, }Z^qFu̡W'd~Y }oDF 1r4jѶw {@$q~/+)CD"j@8zi o2sgcCzЮN}.^ó/8]93jS@ T޽EL =b6/[$z+*׍*P}z1슲{)Y|8s-`h6g}ҎP(9np`f `WY${JNn$5$rڥjv~LQ{ێ4ձmJNR]^~'}"%H0O4TT꾽0;yH9Fm՞rIl+|U/#J37Ғ'uVt`WΆkw=BDmW **Xu&6B^ۈo[1K]K?bO_F 0V8|KT6"8z +PW`#q7H3pEa5$L 7$5]vk]I(6>i?;0{ǯ 'Avd:\f ৹˯#e%yyt:[=Qھk +•_!eCr䯢5PB_/*fM7p4 k_A+eG@hpڡo]^j.ͷ}Y.HyV1X1`]s𓚷NQ}^}ڶ-5 @~u 0io(ar|؟o7®K _!{~>2~v0nt [R +-!E +nN= +X:Q}8EMy$< #/ogRbb䋔\3zO6s*>K%|[5O3 X/[ D4v2TJ(<򞺅*N@c(Æ33/;LMBĝꊓb hhS(K4RމN3r_zs.c8$F(GLj;|3Z:;\X&?TIeaQmx*W8%YӉ Ɔ% ȓwTo2mkL] k-R@]U l^Y};KKV0H@[Zk4 |j\PNjcoi'qi;OoZ)"2"D'KMo3PNzGl,W2 +9cD>~'|Ai<L@74mN:A|č߆]kˤ}?iz +}%3 + ?3.= @܄\Y1%MAT<" +{/76w/&'4Nf>$r&SCBҳ15vb^փX%e!U0a=,swO- []GX$]-~@! "ŀj iv-.k ?jÃu{#_fw#=j"T\ڨ!VɣWyoK?'Ào|VO +K-1ܭZk*Of]'+%~X)me<9ؽ҈Vvbal++g=BcfR7bK<`%,$(4&([z+q˝1XنhCsD\.qEnfT{jm9bgIAΖN}]ҽk MF( qX(8z9o!;i;:Ek9(lRUEu-[DKٱP+ہt9] 2ɬ^l3e? +RE2oXr̼UrY5ŬeE f;L{helӕtTFo}Fg%'0\w l {PG6Nqد(P{w^mf,w%sfar'ON1]/x|YH|)ɫ7d 相՗ :Ɲl3dpybJ K y$sjTIH_*p<ʏi{j{Uq,;ȉ6'b-z^OyRO2j:7m)fBјPvjYTR/JWBZ5k`u;j0fCj>:1azVRߠ/|"Ԥ#%))+)٘ 96=\IKK^'Њpms-T&¼3 V˿qA3{{+㊟FCJ>*ahu2ځ`EVH{8}l/ݾ+yHM)H5ț +6K3:ek8c&K7qc$9@>nu씾%*%G2[X%b߉_(97*oXvړD_NJ˳W@W wU*@Tܘx;Ysө-ODNBZYU+6n0nj¾W2kJ"|\ЕіRyԚaxS:`?eik%zHO!TDJq[_)zHZ ?$-q +)o% Q'``Rxy13ԂE"b- _nG'c&b}}L}ז=AݐJ#'>5S=#S?jhwFN!Ɨ&C{bvmўϣ{XH_O;?e7``E,DzQx-݁ciLN7 +[c6l@YT$0?!g>"NK%S$r7*蓢lLqc4. +9]*\~E(^*T +c= 7WHlV5|9Ǽw +d14=RX tPA;{ޙW{ƒhXb7jk4أ>;Ͻk9w8Ū,DwOp#dl 1*VskpMByx5*$=%}(ZN1 Io~7JhgeƃA1 #7W@am\e]>,\RR+8ΏxU򮢹ډR)m/`|0_g{b+XU©UքsJ?8&qmR֔Gi/0 EaV^TZuVd=K+d4oԛp橓HGT{ټ2V~+UB|9vR#/cՔ H>9Xq"OgmA*ǫ>+95mod{!]HaT+G:?e/`ft .C_'jDIꍐ08R5ZPQ11KT(\V^S@/guTFarDk= +ibB@6f+nRTףU)U0 eTC +b^>ܔ}˺,]?`<jdSy9)THSkK̬(7O(M@InPR+s?IfH7%fxT%kBIR5I21RYM&9#D5ԵEFQ5(Q]! )܉qV+$Wx[)4w5KMׄq (a!qk]CcaVE +/>[Z\+,o[t^j:Gƿo+?!Ѹ(ň@<@6` +z5Z _ݾawݚo ʵZ +[]$Gz7BgiL^&nk-^6 + 5 s I&C N|o6/R2 Q{)R)O ,HUi(I//?e>"`оgWW)A4@?e@`u +S/= +EHm([&.BuBDLISE]*eP+͋|PwkB! uR]Q٣(_**"fY^VbU Wi23ӍwU1lD~C23N>zej:y[U +*Zb_+jlru wFd_{ +w„ӯ*N+F:Cimsdѭ;äW^B+;.7oCp4dA:\<+;CInU~%h ŅݶEُ.¾ioC9Zs-I;-w∦%YITZz<$vMƂUds>.l.DfL6o F@uHZ:T?N-*:cfN6㘦Ap9P 8['t){&"_ZsͲJqU鸬/CaTj҃YF } 2} 墮ڜmvmpaŞwi*E̱[-Sm k&VXyE{ X<68Tw1]uV<B׻ m έhÎ)iyĨ<%?BV5mi< +.yAfmD< B>}Zn }$QvC֍+9u ;Ot$߅ECaF@S’=gD!v/'2c2CC=x[}tems|60 ~X3Zܷ Y?3mh=dj:A06chUu6!g\MnZC5Tb́'!K*i}r{>r'7ź2nء/ǩ{^!@v؃=^_j~(*._/,̾8%,M Ez!3z[!ct>}=AASY۫H*[=Y{)?oI I-%^S)ל >eЩ)=ݳǃtOҦ+qBIy5}{5=Qht\+$q6|JQ툆V5l ? B* ^A%lYOONxk7ctx{<O6X.0EEM=blL\699{!/W4d \H_q+٣wp;\S _ѴSXr##33wRw +,=k*s'r3W}){h2 sVQu_Z^qN+:qYp/Vԟ3 cpo˸;P̧'$%,qitҸ.\BPY2:>2Nӝl3 ᐧic+(#Cg`LU8|m;wj[[Mm3R]1:Ť\1G=d"+/W Ϭћ_ؕoDg!ҁխrcfV'Tg2 'rem.[UpSK6P4]cA:gB"AΙl9nTՆ68ny4ϚC +=#ǑT0fMf$m3>>!G4j)Rga1Ixs$qDC-HyЏހi&qLG}p#/ Eg'a]$%~b +»SDI@*[c+̓;-40j[{؀[ǃ睞Ż $R  eI041"z-,j\<%E3$ X_7Y|k(GBF6#FV +r1wa+\Y%p{ÒҼ~R2N1 @3# ]wWw=P3IV +ho"Ba#hێ]fKD~Ⱥ.7F!n{J@_~;7'v`DtL"HlkH= i/^ 63X Jy QW$u?)XՀkG;߿>Û'e52(eԦ"tģI}M9REN]1zΘ 1hhwu,fӥ{%h +l& }~3B>]>(E58 0P#@5Z @ýg!hĉyħyIS+I^n;XcS#ojƳѫյ*S\1T0WCx8@S|fs3 fD"Pˬ43 +5 x&k3s~6tᣴGݔ}ܡUlg&d`+IBrdV0Dsmv\uNH-.>oPWdQ 쬺O]J[Ur$vZ+$tݕpop+}i<,҃?qaYXp4 ]/_c%6td"˅Ȧv+QO Ӹߗ^:{x+I5|%z3p;D.ϸK +c~G/OaNgix?Sz%܉p"N&S2'Fc-A3L}DO{v^IPNv CH~aah:$i:P':Є>a͵ANJ]%H*d%bK]U+EH}p6|iIo; cH#-:~*H:NH5)n?nLnzgAHDm8dN\Gn2cO&: ;w; '?YtQz.3vn &:k(V^zi}S+WD*W AHŠgaw>蛣]rBrQDO;꧊gC/(ݑhpa4!` A->p.TpZ"L"_^_ͺ/FsXvz E8yƸdw+ ,,6!新"{ j9]roÂB "|nB`f^ݠ$𲛰Ye{ ^rHoFJ/yf7џ`P829Qw&V 1_hcRYfVJD!+K3ƹq+Imt* +b\`fN`L L>p)z7q::zL'+zkb50w!!Ma0xRN/>JwYU+VyVQ:t,K|Hz-Dƅu<^릠"`FffjzNFtS]A^:ZٝdRi&GySZKۛ(Ew + # CJwL2ȗo>І7EŅ2}THǧuY?}4} [Ʊ6Js#]ܶ.WC0/g*^4{)K3XU_)ϒ/?O.z$7mx߈24~(S}(@0Ax\ՒEvB兩o1NK+̆_5``qqkTO7GDIPV 9Y_Z"3[F&~ +lcJߞ-3U o+6jUX`Butl^3JRѷRtf[@>UZf4W KN5D^j4k%* @Wwқ^1 TJpD1$&L2£t'hP"# d&})Qsq $(5!]8Cn ōN^Vpinm2|J)S4_[nJWV{G,U-(zͿ+[HcdO-We@ouYP߳N# v!x􂎟!#^Bد8@tg:*6t4kVr3mi mS]zli9&p[5W~O>t8qW;=کV;Uո-XНwJ<%ݍ{[C, NmDn&-9қw1I?b0vŏg&ؾaogge2/ՖsWXŵYnR-IYw_v4i[*-`%EWޜѢW-B}Umu ++35yfS]GWUBv9<t[~td^ DRp<pфk"ڦ4܂|Va/8p ;d$ޘyx&L&xU+kkptdž5bX +;ҝ0Ւq12inzQ0&Jy@l\G043ʀ=H qZÉ!jpd:atnzH&%gzh3lΔ$P'+YylJ}~?gD%oFp@ Std}|IrVќpC퍜!e"-AF+;=ޏeAQ@v:y+(?#2یH9~p;췸u}[Fי詘z`$+hd,HݳeԽm~H(VlBT+۔/`JY zPtZ^exr?l{T> *H ݃u-%-6݅"vbw9msw}nP`k>!@Sdc!~ھ2+:ƸbV >K.KW@[~ -wJ7ƒx7l@$.ۘ@Ft6-'ɐ ϫ@x!n1|,l/A4|\l(@jg +J"L{Cg>ebC(9S7V͛3l=)nXΰF]|/^*j?0a K@Zf;utӰ7HޯS qtZI>PI9OE2hm6݌8;m%)M%o/ )ZCǴ˘J}ƼFɪj--l +hoَ[9:۠$wb(e0钠0ݏ<*F)^zTЂa ;L(1 ? \8h,Kcȳe'<2ي-$a{Tc.robbCw'yVvV5UqT^VvPP+('(j/wU lTC$Jox%R3`##, z[./iͤBP[5,fjEG!h4b o`?)=6UB ,*RE̚rUIZýPQ-HsnWH-U&]<R44e4|u*kPA_ڸRͮuΆ@"{?u}\q^ ˴ ֪ +/ՙG&r`p2xm(E{:TQ9 F=֡cPQIFUcKR_s-R+ 'f׺\qLɻ}5NGpjv&mJfI5V QfR]YVScˆG5 J ;ofFLUx\^XyP6ߠ|«0ʥP0%Br"^HއR| y*v[1OrܠDf.)1*4Q!C޳Vod22;dߨ5 hjLΧ%K2vM̤9UEW=>:\tY.=^R;_ZоҬhex@'d߱v +Nۗy"[k;Nu&|X"\b0x85]IqDg=q_]jqͦ|7+Fr2%jFo'kTCTsY[TW^\sΥ XH `#/-z%/oLlr^\Z[#][[e7 + y)NAJkK|1Iڏ@ڪ%R\bޚ4(ݖYf{^$فxIUgĉYtbm"Wߕ|h(d4f-}~1*JYv%3LǑvh%~~w%hgQ Sy o-|.UZ&g˝mO<^ +r9up]2K2qj=jqqdo枊y,dyG+W/Poqw +;9Nt}X4aQ30ü!8]TM8kRk ̬^|U4}Sֱ&=ÒjD0?@ [B.NRa 6à fk㬒ۇܙWG@Ȱ!&9xlN(* .#eb-dh9[8vx;]rFfm1cVcٸpsq{aڊqŏK+CkT*/ dXt/.Av(}eeG{£|e71Í1,es8x{;7#= } +x2LotQc?uXdÂ"? =r5E]9!I3-JFn[ٖV(0S=ZvV4WWWEۮ?V ]c+uܼ/Z߆~Sp{Dmjwz4TRuիXű*꬚oqMͯ(҆ul 0JQ LOXŷdµ){2 +8'AP+-jV/@/DN˘һ(\qв9 ٰ@by-J.ą|vk9E=*KA2.5l}k;}N$ +N IK9Qo\z1G% }4e]N? +I}pc]:wZ,=N6>o)b`4<7~DٵAPk9殷QVlo!}qT&#G l4>$.tMy["RXgH\Q&Sl[ }jJ+\vJ.VF\EXg|Bj8bJE + Bc\3?KLO5M/peMfLsS~ AZFbfz^O(.D|ٱG ~MZ^{#8r1ps]zc,ˇZeXFzB |-{HdcMhmU$O跓n l(耔X f}R!Fi1ԇY@D/T Iu$`2ͦdR,L&?idM31 FuI2Fpu`n_8p#Pg} IE7ƓlЫ8({ίM(tSd~uH,:QvM ŤI<7av/{M`?G0F* pO$k&BΣ4[vP.& R $kμ+DJTAy*M!ؐQt-Ӟׂ|(#.+a Zx lR8ykX%4OBy3ehɐkQ7 6,Aiϗtg)He#~DqϘ65W}:wmH"]`#V_2peyD.Ȓ y8#)\hMɱZ,b1Ap9S*5C8'J b')OP?qNК9.Z;g՚Rذ£&HE ȟE;|7P4*' XPCD 5bPHD +Q_"ld.*ƝIHu}WtUNU3ߨe<Uʍ@Muw>f`N+qTj\vcr܊Y"Ѐ]kEK4jN߼2*EZUMeNYP}ƴ4dj7xL%d2/aSx&]!7|_r7cj[qGz0LŌ>IW "㋿o?QIvlI}⹶1Cokvv3: Cjt000:GSk.|QjsTڜҕ=eFPd+RɗAEDn_Qh0~hՍ ^*΢ള=T8ZP# zy715HYjJV!29TX[͟QCUlA1Z+ѩzf1Ak#׭V%KjO;#M alVfAj +GBAQQ|?*~R߹N*Y4m0mgʭ4A|ݏ +KYƾ%ߕ)GzW6\+Ofe\{^!f^3'atPf,2H_{ ߷ & z>?_/'Cpo(LO;ؼb~8[춹jy!ha_΋]\Kn=KO?;?poٷy˗gB5aÏE܋6qǗ%$nL:|7sEGFl&(t= 0(ˡ-%K1珏!$ FReFzcmY/sk/84tPvL~XѯܫSol,_WYRUWR iQM.+淘jf[VZ]__.~=78;osזm;vYfv_{_xp4xxǣ>K,]ҳͫɻΧ5(ee@Qh8X" +HA(ZU'$%'LY6;7c[殬Gr.οSpQ3Kț1l;B9M oI)OiJ7ʎ3sڹ<+q$ZL&UVTQQ+hUѪa5u6 __4n>@KOkCQ23pj.î5OZwv=766Pbݙٗ+ywžq'HO9q0rq8|d+Ϭ?ܞ/xWƮ~nt[Aㆳr)7>xftã-w>CϏ8''xh؏OIW7q?YwSܚ5:9h1eZjƞɝŝ5XYRsw[`nei0`bg9:}q~֒nGqʳK"@݃ 6 &QkND3ns|wBWbGҊƔ괊 M:KsԹj:O_^P*)7@[~%]ȵunLvn#KDDDDHPl%ĮTrU<)/` +)"DR(͖%#˔*ƴܠsśѪ[jVI,^nNՙ]k׃= ^[6mv~}3v-ڽ|O^>u?/ m;iNXL|tsdWagχh)USgNMoedit&utvy V7]e-'/XA=Z/[N\kƒ`7祳p1ykwO/ [d\Xhȵaû#Z"ˣєx,0.9>,'qquIi#33gm4..-+t) +yU<=;Tގ (4:M'īr/*KQ 2oǬ =NG ""3G1YT U-ROU\*hTkz^[x :Sw(7 zRutb}1-`cb}iQ+c7̦D(b薖Ρ<>*&֦riJ7&t.蕊nw;;L(8m@023FxbȦQFwB'*/Ő{؛upkhc[!f]<rBZh! gYn}hEE%I70Q~fG$s΃Sld%p9 }q٦u_BR<. z8s: œ"Ð2y +xdh<6С4y?OA͖l`'i2`J{6 x"|hTyS%Ыh04C8,j`vNv%˵ݎ]~rmW|J^C!sC*ͺ~*߬2JAW U.{v6B `K纳:l@T _(kC+h2Ubٙd vG"۷~1s;A=+zq_}Q)DΥ8(x !C8L`xj4Ow襎N?W/Q&tqIhgb~ZC9@sVf"[u_ڟ)e*>GE:KV+ rx3}zts[8-YGg=K2;5)f-O@hWA15qZ[-eK*ch32i'24Cos{>we{]o4PN7ޗR * CJ'[BU +@,Xم|Ɖ*]u,D[ )z8X-ft8^* +g2|xPc,0 +q;;:M^P^'9\"aKV< ϊܲ4ҠQaa4z! LًETl3̓L*>k)+AQymF|YT&Lf?hj{jLfDEx{P8 I_1DBޖTѦ78%[ϩb*wl-(BEZ aVQUAIyagJ?RV"{vEFVFs?tF}>]PDMs(:0]e {Ugҧ]fa\1Ŋ3E\޼(9B)]%)aZ{;~.ևE@š͉ݖs/ZcvwSV*XH\`iC]'S=a3TxEMV=4}l9`q3z(.ƕ{c$;;M7V)N~ r-얐!PۣĄb["?c n;P`\{ofM }bDyMFr6Rxgi7XDM5S]; oK!"MU[TFP ]=`#nR%-嗸=ˆ:OV*&_bO.fg6\[CTjTihS;΀B/N;$)rc](,YagmIkcTA~)Inuivb,\'6RN~ħM9Tlm[Z7G3d񏲊e>}9yO`ŦTT3GhA~!a)tE"^dsKOiMQNڕwJXR7h$ƛZj#HXgZm #<37mq$:jc|\TG\$0s9 JZ% A,䮮!UeT$ڦ`7)іX*}\.p:`?ɓS?u{Zݜ/䃥$'֐[}~$=q$l/d8Y"^?s:õS7*CN{.d@~A%aNG&=-SXuPҦm:g9ҤInT d1-֒_}*m1TLK-46F]8h!=iMsD8ݶGt*!AAK?ؚLq{Sϧv +>)hN5P1s[YZb{v3|ϼW[e;c*3-2z|6)zX`$V-)Τ"?Z$8 VqQ +|j Nsbo?U=󹅼VqSxEZw.*EVY? =.Fh|G}OE#Ϛ 'Լ;rFxY^SuqX;Y8"z`uvN{C%ib\v9ls<`%Y[I:/6bmڹ܅~hrsg?6/Aw -cݫQْrl˦+R5es^Y"JO*]:x?wdu%c6@5]nr5Me9Kryytquba<,mϱUٶmdw4,krꕼcr4yP~AJǖ}ͮ?YmV5+f4fmNYN9oe!?}VK\[$HO͛!yy yׂD80:1\D>l߬|b,8xV? 8l0Iv%eƱ=ee3ً\-<~NI9$ ]0|=QvB?dJ+ֽ;L6=m{ml;E9Vsp]짏em4Y^qqgǁY]h=TvןsHOQ3kL"e{fP8$dUCLaYkwӥhTuy1㺾 ]GgN]dylzg]jfU,c_i cSd#(:!VFe7XUW߱3veE[;K=~< џhz2 10KV0+޾ μ봭+[U:^'~U8+Y*E_{}&sw"s)`1U>-jrO?My̴)5tgϬh& *k/ǬC{6?YMaV;(me9A6E&܋!v^憶@ihߴۜy Zo/'6bkG VS:&:v@t쌟T:{!Ks0Ő#g&.Ys:qG:}1k-Ji Ek-8NTk2(LOJ Rh}k>lat…}`--< Cf'[L1'Y8c:Yy#g![ 7bXbMйF;KP贋݋;?T?i=m3Qд*Z<^t8mJlPUmb?NnlL[󒚜ㆣ"aT =G$\4@ЉO9˘qti;˭baSǧ2!|&%ɝgZw d>bW"YQ|U/:m4ϕs`$D'p t7% +IO\'GO^$'%x C+oGÃ]p4VԪY^%P*]4><,pN"rv|o_%sֽE1Ƿڊ[2rߌj?7 ıQg&dismh<:@BeyEW R=8tr/fDX +Y3Q/P2,Ae-f sxx+3ǚ`ÒXN,F[Փb1ld'J㡫5FhE'\䦀D1l/@ہxSʆv}9-,I8rOnc?9H 1 +Plu&Dإ e nrďq0l 1Fc F8#oh=GVeK1*]`j++7%;bs~'s"*=>h#s*NCOF?1lD:mMZ`2;Z%˷t?e SA%_Sey7$t#O [tscP Vr;ZE +hZ!1WDѧ -HnzusOA\3EMY +nv `+gbF萧7ٮN\ʂx35ߟnoLbv2?/cƅyL'Wvm2ֈ1{0څkYW6d|u j`Ǡ}d48 P=@]"Nޖne^GTדòK*tH1 \#aS6\xr~CvTlD,Se7Z%s#gI 6;N"ʎe@KN kTmMY[U>RDYhMDx. >ıǾipYeS\Bg, .]mee7[T6 sO".ՌS%S EA̽ʄ&JL+8vh gzap2H\aHl՘O'Mc;w )WowZEhpV +ǧ'k+.?j9Weۖ{<ȟ>_N=G5C!ݥ>I1WeM?-\@oc0^0}Ǭ:^{KҮ_[?r1AȵG@/+)ʥr8WCs*Gz{uБ[J2|c<Ƶ Z@W2)q6QV_cÕǾf[OK`c]N/(F1]嫴6-Ҙ$in>(ܹ OMpjGotXRE }k5UXB8a%3nkodGf󊌖zEݡP1^JEݵLzcwU+Ea+(Zc/F4M ݗؠ {OQ8ma:47eGV~,Ypvxbb5܈ƊRjJ7}IJ-Uܶ<b Pţy'zNuzOPAGGKUFҹ,=nJkXNcŕ001ezrK{oTey+2vsxG~mo_d +w<: Q>Ce|RvTV@ʊ\e + +Wz'*ɯgE^rkuetUMfl(7^S_)rldfhẇ7Ź_NLB8";u\p)Lv(rqrS`$zJ;&_#WI݉fݲj=!&DYw &ԿaO >ªz%#̭,/mCH+v|MVƩhӡkHV̊pֲ|ɯfa^4w5ʬ{P嘉1XVaQ& {DRPT@BBRP{.f)Z^\u/{q\F.Y^YAK Qn!=@Zwr\ƤvHv,&BĚR\ 4|6ۿ贻'Y7:cz%ŪmҼ5kz8~ϹA܊nmG5TzVcV''t; j(vSe xNJS)w)[82a3ݿ{Ȫ^]:je[*xMql[,2B<C+5ή`r605\gV-'v~&O˂`2'Bn#_j` +*؃;¹9ɼؘOlo㧴x_Br>'kz1r>;~AVV6O-|.9]G)꫿3(b-f^$e 8D Zw=VζKGr#\3u?bzstJh͞ԲܪZu YeZ.U W}hpkyTi[WA]@p0p5'Č#7Qs$~  G˶ *c_}B#T`*n>}(l᭒?).V.i6 +3T\x7|=KŦ{:;ת*SibCR .fvL;xSZE8*#yzA17EmIݖWEL,W cWun<nO;9ǯF r[EG~U]O^*pۥ߲47eG;\N]^4;Ru6/$bVщYl>z,{}6A?asQ}#[i + +Ty{%ugW)ԨڽBS =~F ܃<3x4i&-7gytԍWϻ #-p`Ѻ7.]oW8Pxd7=3 BG o?Uܓ0{3ԚlAr!+8uȉmH\eKT/%A]Q]?~)14 +AnyY:= G᪇Pfd|d*8"-i-(J +-j]  |\ 2[vx3Ա:Z<8lOl慎.?'GA-tذ8Q0TQπTӻO@]~7RȒX#y^v9HkDY+m jT#d<Q5 f15 ;Zzay]ǎsBB[ +&0RWD5MQԆdWk_Ņm1mCԳ#\}BE$G)p^FKgp#5n;(:GG|K(;A"! =hk/W>0J}?POQ'kQ P ylC4IAIت=.:#Z,%+D0ޗ=)莵ψG ٛ [ZwS9@V +ϓd`M$򗵹HvcLCVlL}(gE /3hFgdiL61v̆ZBڤ`euanq&*nY!x %.p`,lSm!8#؅G tEDveWXi3( E|!mcn +iPф\O8Ҟ,N'߁ [8<( DU5DRF0?`6̕wW41Hf`Cf~8Di9˹hz_^ +" J@{ <,R`7P [H~|vkujN^%9 j,=-Bkm4|yfe&yHSt.)tؑ#N'G"wkH<6M6k OsM]kSݴ;HRxMKe8lM"vwCl@''.RF i!pʯWןhyIeEJYighbѨ- +6{/-|(ڈSaQ%V5ְG^X)N/ {[SU]{7I +z%g+ϒu1Y96BVK`aɭvZ=5[ƗxJ!H'dl%*4IS"%Lok 6IRaES6lˎaavo9~Gdkו:k6Tɚ)V;6ELQ+%\ص (ߴG#{u2`^u%}̀s>" MA%bfAJDƹZu~YfTC$7)ت~ˣ"+=f9B7FXqw|U9™qam/.V$M9؟,+&e k.0×c[u[൪_>bDqI$WC?52eiб:8}^5 kAȋikAM"Kde:z?j%lp\p\EמU#:ye\!E+w4D^+DTBJ\ډHܫ|\cZ@ =3+4+RU{/YPM(J1**8T;lhc\i7|M]zXխN(|߉ii`Zz*&4ReE Ԭ bWtmh|!*kfAj=CY-U~U`^ ^bPos;dfͺ:x/򃥘sۿU7Eʷ:͔э=񂵬/_͕KYX}=yZ)XyŜ"w z%(W +4ٽ f۷#E,˫N}K!1^7kCS;*T" +DUEFy8J=d}voM*:"@_= kPQr9L~M&r?˽d5I$~X:K?hnfsf}Ҿ`u\m$)'B|3JNBLi\TM\fV5GN5(Q\ux-A8=h:9fb-kk :VY 3G3ٜf}9Q]yQ]z=IE}ę{ħ,T|9{7 586i;m(dsYp}}g9 +奆'zV2.if-nv 1sv =>FsOY,Δ!о~]?x['㽈Mq' U_-3 +jSBɒZ@yh$,ݾsk~JyrKCڒ4N0ݨ +p~?JCh.܏ 4c␡tc8 toXrC OX,5v;nIL)=MOE.=IFr~\w,c2 y$jٍ1]Is ͘܊J}Jg|EI!-D?>xPvL|$sn钞LcQ.mNӈWη)B>XJCtgE[IGCy=5KK]_ZUMGR=u]OhmH^"^mV:Vwu|!<3ԵѥK,'ٱx Adմه/dc6)=k>RNJVZU1 dˢ#CYX w-zͅP☦IM#te'mVpEs/j~E=UDej( e|ׇu_k)e5TWj +=O76yIq0(mP@i[iXt6*qwOLҾ;ǓL>;Ĺ*}8[VިQKi^?zC¼B [^ 尗3%쇬6zveǜ1&n|oExY |&Мy΄{}OY1 T<;؀‘\ H eX x.h$zD-NBQ>l>`@?ns–>VoVLM'S&!W0YrI7&<">kcJ4;KԻӴsRz/(Vi`6Yɳ9$ 'Sh{ԹM+ܤ = Ee9B>Ir]z"~?wGZ޾d#=ƞUyx'iWܒ{]czľ֋Իq T+Gm{^&suquI^{xeP+Nj/( 5DYP{f$jwt q*DeJBHƾ ƀ}y-gA9r'ͼCƁQ>Fm4l3GCFQh<YxY +2 vo~Waˎ"M=6P8cm$i C:\}`*U ~y/(9|OT>e/R"d ֓gvzA}MwTi̐5R5]+MYJZv-o ƋANBr{cI =}g3} RA3D< +&rwq5ͫ#dd#3U+֋7~W嬽<ćp^M|rp9_ZPwCZ~[\ZInQk5|lBov쒬-N/iT˄B.s#Gu^ѝRDfL:T>yͳEjK[ _(2 qWmk3Gc8b0nlm; .(mӐ?6N E"Pa[;JQ z!µ0< s'Za`]rdn#oD ϊ܆ƒpS8  +=-;1@iˑ <)2KL)jx$鱃CP,:ʭofV_$v{ϡ=%P Q؇F$yY}̴^ b`SMԦ )_vze5 yMi]׈9q616Mˢ^(p0V b'1]?6h=Ә aýF@ 7#jjg%hުGb^J Y: =JR*GZmd.X=0L\J]I QǢ7 @朼+t[ :xBW+H.QdE$jy҇K~-k#He;" r5넟l\ VA>ti, +m& }d JG?]H{i'H" R׉.؎^r3:ywL֭D#N tzQvG;hzCL4L.1H')q{>!^}GZ1u?̅?Xd˭#$ K@OkwVUb&GD/~7x"cK~!RXEIį9tYa( ԏf$Mn.(p.:oۘa+]Lx*aE߭΅߉'\/Ùҁ⛺E.>!E9//Ysgmv =J"C zBqvb{ +avĿFqԾEF\|P^:+.~VT[}2w8/M-{{ +V-Y-#.RhEVc0>n= [T Fu-5FB P0HΝ.f1UZ[]u?t} 3@M +l?d?d{*pSȍQ!rMI-{ Y&2_C+6Vluػڋ4 7{ PM b+5'!]yGv/B=t:2/^_kBACCdCmpJ>xÖacVT(S{Y( Y35]*]pf'sߛ2-JO#.(l52.+st4!%P\{'82[M>37*׺u 4b.&ŦWiMn.RdWqQ{E 6z"|s>֫=:/Ybg +olmGȺb3`lôܓ4IGG0r 3]Poa={l *fAŷ|&ʶÌ3{?Һgzɤ!7v-!* X>hpGQB)[n6-y7%ڃ[=BU>k9*So-H16:*7PB8K{$\|*oSTxkY^CKMrrZi'\yvXQ^@MrbOaĆ4 HNoXd\LεftˎGqʊ>}*AHF3}$ 6.[ƽ%5'k9^a, 4?Wj K4rQO-bPa}wM$pBeC}?e _\dk|vU"h<8E,SqdZD aЕm#ܻD6?&~Q6 Z 2 @'oqzV+Sy#5|*g9fţvzE|Xc aeRQlТ gz^u?SDW H43t"l;]HMя^wk'+aBѰ \|tpN]kV +Ƃe jzӏUr~8=T +X}󟼅~IhMǕ-z(B#Iّu.]o1\d҄3\J)?smÿ(o.gDϜ~ȯʶVhL֎~e!˼\r&!C'<^IvGKO:@ +n}YtU f.9Kϒ2ٺy)|11*Wjxj&pVNs73an,rl$ς=#J~Ljs:Xgi%z#*gmӈqTblX=ލ'=bg֎.+O}Q~OI;@2qP{A`R3-GYe{% 2Z;4%;-a*_#lDidn=KkIVyX], 2 ُnӠes-M1i_Eh~*~CL ]ݗŗ:9k4CǏ.Q{9]:׊=蒲Ŷ i8}%+mCǐF޵A}s}*aCJ-,VoTVaTrz#x1m0&X])N*U3=喠>QV4M [$􍙚RS +W~䗡%4p \Cx +4+D;B ago<9J3_uJ<͸h[݃HK_TmĆ{5XX}Jv4]:oWPԓO6SKu<_ÚUN/p\c'k.XK&m[A]H ȟ8>:îj׏ b=Zɭsi23V.fu"Bv"J!Yw` -+˸c;r X/ .ohD,Ǻ ʑj.l1>.kڲۜs*gwCŒ"oS?**?vx#YK3izTțSв?=f5߄Iܲenڏ@#oo YtE&'>Fz )Y0>t;po8pЍ +—a-z)nZu/: 0!5a=a%TVC#Ini],Rs#2C>~^nT`/9㙛uFwmp &Q(ZMվ^d\rNG'nTw{/2{h2,>~_u1ѷbudͅ.cjd!W<|*;]~hwsٸEyi!c+>jsTBq[{PN޴;ruFm,r{ZXK)׺JlIxmC/&@eը. Jcy܃);nGW !¡UsŲe-θH]O8~Oʍv[L䶋$ M%E${쮹|N eٺm=E]Z(<ū J^шAšND~xٲpT %zwUDAN9Ŧu.D/i`c+~,{G^VWgW)3Z|YZEdڪoGr_@sb O;Ϸc*[Λ3)4 uEO]T5IQRq;OTjnb4Nv)c{fM *:b-xҢv1M3G׎G@`&Z\ )E;ƪ*g̦'&5ya#[a$S:Etrifd;{rIYyEBxC0E>Hv,+/RZ M$F 62}3 wI&;!w9_0it$N+ /(9]c\HB,R9ۄd|Bm!1/=zFQ-Q9)E?BoZILuo +\qآlKNYwWW^rmCJ0 J|tla>ܳZY^,qW}{gonxMoElO9XIp@zx=Gk^{uQQGֺNVۜr֤F|[aL+?B(d_ٺEg˱z;g6y)7+^5ƘCKuQBf崵p +xubX0d*~+F8_!y O/#=9&m-cgppDo>Ǜ777X)[/$KKԞ@YE;"`5e )@9(W$*g HHD!%v(`4jA G24UofE[x/`E*a,8*{髡P>l^2Mx@`{\9+&*)@& CREN`ɟ'g*[MVU*8zUT:%ˍN|sV^~4_CKio̭yY~׬Z>VDְ[ RiUyth%3 "xUqu]rS~~{n5;śZK%D1ڒ5l{Tjp6#W!w*Ū ?7'X#1ꟴ5vzGhaox + ꇧ UAZ"Z*NW0e%9W\k.< @uP&DRƃ{ ewE+1`mbQlj%m=oȖ7*t Zzst/x*%9C\NG 3ہr$G +_IyH襔 ʉR.k'j! P0މ4HFd[|S}.t(|(<p)l[W !|H 9jxgB?N2^[ޅH@U6!bOSI$/Pr<*Q;o_pT:+ +M2o\h0V xb~E,QW[{S +E@Y8d;$n (5Np-qh3%)b}wQTY]&-.򴺚ne*[x*\m&kCOqxP_"F{r#5tK$r䕭Q:{m"kWw=WT5ɼ95j;zH{iх]R U;,$:#X棨W4I}[yKRllNVec֝ 5wA:WtHEͅ}UTWB(-D75  +€{el%nT!T+Ar-C}X#?=@ɧ'HDh B|-/ϡSH2J?^ML͑5xuX7X99ޤ {eb\"26Еn:Ff".Z|>Qxeޠ-x (FO6峲Xx|qhmյE^IJAqn&R$˫(n#~vVY_fN30X6+ $.\MjMI& ) (kd~D7Q)g\nXcҽy56-Y(`_CCF hҗykMp]6D0VS3AEn bޝٙݝ;COnn ϧG:dbs?֘iPlEW$`kLU|1_f VFw:g+PUa'trze".h8@A= K[ eKqrOBuIz9\0adօ;Vq5[<_eq9}+lvi% +ak ƿCӏan E$ WXc?Zwִ\7t^Mhfwgh|/[|^"/oi|UM mWho0(Y ]lc$"Y[&u靲۷G u^G(>~Rk.cM\,9~`lԵݢ9WwWj73k4q+DejaYb/C6~6,deJ5in~ +GLl[l.pǢ(mpO0D~ƉlYwdm"n.=l,Q&ɢ\7\/d*u|^+!]͍~@L=-\=;4i>=`{\qH_o)TQfqZ:Y'j˧V48D?K L;S%<B\{㉻#9j_jm!dǕ5P^46ya[&HB#*w%93$}mq1d5트g8ku 0٣FEv%)r:STy5Pn 2ˡv<|UcT&.kpcWMOj/S>4Փ&@5KXoL25Yjt ,yrMOT~k@UVͦFRvQ &giOd]k%:sLZ)W2b_՞2Wub^wMSВɺ.رn\q?뽔Zžu3*,5W룱c-VSPr\Cy ^9Ad 'pIL(nʈf+]\,QShuw+.\@3/ɕ$"qe4ݠTD0pk_)"^}bhxrY\W>^db+XX7%6?)t.+OVگт.Ae/g<]GñJ SMI%aV6S*Rnt&*O!ˊY- -m|(ۦ袽wҜqeޖ+Zso 1>-mcj AâtxJ F/O_7}Vql54UT}80dSqݻ=3Iݲ>MT߿&{<gyM{Kbh9:Hf.a4s2c[ , bXVrʘgshZ-x4t0Ir$J+;ߩ"֜y񋛓轂 ":ے Q!wjP%F_6nLv+eˢ|tpN\ MENKőǀ!_Wu@VC,7&TF&'ZGKKZKT qIfhl|}ia1ʴKF,X|{OxyP+FL+MTVSҫBsi1L8|:`=rd>ǟ#^[u>_4+±kFF1^>3O/5Yd ݡ^1 +i +#goW0U KߙfŜv +zj0F6ƊK86jNAdb9lw6_7 ițͿ)q(E+*yQ0p'ɉ0oirʼ|&ǐ + +gOٟ%-CeHCh-s3̳`5k2s8]]KZ/[)ip&4Q7ZioʪYjr*vt 4bOS@8P(PW7l9CŴӕngЕ7۬" H#,uzlU)8t3ɼrtA+X+b(%˲>+"TGu 4ə"&/ztlS튭YbE|M귐+Px-|1G0=A͂ oL!i1g俩ꖐN)i!AtNI5?@/DF#QjV{i6XpV]D0$M5qAz{g@C~΁zWRQ<ȿQm G7:-ܸVYiDHr^SF[ ڽ5-$kZ: X)mGMBƹT ex:D"ɥ5L^3,?8GC + bI=HUO+Y|f"s&S¸^m$q!}&sx#_}Am㭄Gå1qs:O9\AtPsXY@;O*ZtSddL(TOz + 4F"W)^%VQNRGR61Q/TLDgvkrZ)#mHSJ؎FS~] ծP۵8 2oY]"d+$ad)VbS*FAW4@zTYr :U[S^!r.*,5,LRA5*J^Ɔ, ++, yUCW~ +pd ӓ*g7qʿMd?Kf>acS%;hEj,T53@ mPs:UעP>7QIhn$:X\L\(bZr@Tջg#`b4h9ߔ4J(8$E[ f^rU"- +kЯTAJ}Ji|8.֭x&[;6|H\ռcitE[۵dkL;jaXq:V9L[pS-aYf r(2ArV$,v Xj*I0g*k0 y;1AWkI;#m{ :i@盷 Ƣu oj!PSNpW(҉ԝ6q( +Ɠî +%wif,'&Ujc6!1urxЃ,]emC<馟"ȸQb A \ߥl]?Fj-Efq&7.c}1ц 9-DRFRt{48ʄԧ8y9)\itU.HI7LFOR)͂X\;MT>4 s./tEяꮐRU÷kn \Q\2^bފMFT݂ "DHv畡PZ/̇p{MVaE60-ڂ랄d"߃?[.rRQN +"K%'DsS45IE&>Ѡۭ!UOǔ>*hnxBJJYIݛ8Ɲ ;͜AoQ +J{r\iL,S6F*g(m.YKč^D+YͰ Oka/'jpqU_yW9V 3‹mgA!߫دu_DY?7@Ϭ ?vƉ'cŖ2c:S릡JmR%%%M]@z^s-<+'AF=Zw7B\U*:/vnC-BhS&1\`U;Ԉ)h~3 ;dgh,ci{WeZu5]ڥߪ{kY ">mypt6~rҤ7 5\5L Fn-'s"^`_c>ͷL'ƇȰ#YAt\[¦,"7RׂUu!:z+Qmw_B|9*8,r۠sI_!̿}}[:/(}ϯqQLr?k].o$pVvUn/ox: +wOTyM I+j'A/ +6؎m#y!ba(?*D~F+&z%Ti;)zWR N/otHIut,yaHc\-p.HRwQS[ 2*{5D*oKoUTBRlO?`p:& >7'G|u^7(s/d鋆npƮkg7c`'1v]$*puZy| YdD:+LHgJĨ8k1tvVm,HY7̎bu?BR,v짿76ÓDC]Hկ)}Pо'ۮN)gs;YR!3a=7fY+p:+euSB-SYPKY6N:)auEHBЀwE '>*ϓ +0E,ٟ~!(hx&ˏH2RMuJm9W+Θ9E=V]-M=Ks҆wa0nVCL"&^٪OݠvD5^?\0 ּ8HFGجŀ+ʰ%kiyXJZ$ˎD + NHL*I9la_tP2Ӕ巙 Q|pPBW:ؼ +Gޭ &Wߠ'MsFwR*m:wȯdžaЪ4aR +KW>),ƑU/OfPl#OĦo;%龯L}_VsGҙO|yTH{U%,EDEW*|lgiQIXJXn6 glXG~HAq / `2RzNA'P[YNѴBl !Mx 8!DUe3!#,N-#5JA>O`$]P)ɍ^8NHe(0Y2WfD8ڨ)CJ;X_`\| +f|'O*j-c[_&ZjR96FGg3Fg-= ~JyvOwp:d-N |?*l⩋Lc \~QQPFJ!Ē]Tgsb[)9+rM°5W~Y6Vp+4(\Ӻl.>!垣9z^Ys@!f_uDNXQ7_?+>!,gH~}X +xKd]:%}X]6RXWU܉,Ʀff1ti"ΒTe0+j0A:"sGs\ϔeteqJEڗ=π ?`xpYzyWC?~Al{V3/@;/ݹx%৵(92{ᗅʳMdQBdaҳܸzB))SK盈YH-8H;܎#}Қ <^C1%Y"cnmӥ@`T.{f)Vº +.* -NʑqѽEKfoy~q*vI.Ԕcל oԎ + +NyEEu>ڨI# ( wz LazufOchA#HP",(Hb%vѨY[[ߵ}<} 4v#X;5*f)4Eq6iW bg̟A'G`[VU!*̞rvuqvq(Rބ~.4# nޤ^Lx+i`ڧ8*uqYD)LM;fX79$D3#:M`;c&(KFZ2!+iNjxEafA5)K |7xjоo l> +Ԡ% {Qfh? +Ԅqk(0."y:=H&:ZNc㔜`nG8qB[d (bC 2SKYҼ8Cv[eɜ4OZf\C/2.J*u< %YZ9#RƪE)?w)&Sιg(V_ueiR+ ~1iUIJ4ekb+RDb>%fK<f}ؘ|\3/֠I&xyK (2Ɛ1=fM(r?9Bx YRa0l2A)_x3 AR " "$wup ZWst? »Y?* qՃBaK{#N6{ JVbL[$f1D߱Ǜ'(Yk EULTǯ Wt \%-]`䉡k=ѝI+QEb& SN|SM欧)`T@+LZR8/|_p2?M]ٕCJRʴ;E:}JU\CzVOL]镗~,i3Q-%)TQӭ_)%eWXt6(Xp&K5YTizhPzRҶ8O1jelsSu{I 4$@F +U"B}o@‹ wcTf'u5aނ='Ը's8>t_-#3zJqXi*䢼2M`mْc Z*-1AMz4IDp\(_e8^mP=r-F]CN2t9g}QP_ i,nKEg5h$@n>#A ]-*/{͖kwl,ٟ<ŠKzB.C<*z34xNqM^&Ňҫܱ*3HJUm҅^*Ge);K>y^)Lpv޺)+ܮ@g6k؟ɒjʯf/w"Nwd> 1Is^Lj ̃s> )z:eHtO;\YlLiѓxT$ɻ V*^rNB~[ ++vuw >xqrv98yO0h /Jבb%PQXm>_&mvRS +')ZC@6Jfq?,ϗC fP;hoAƁU$oCɃ%+rk$[d%YL,Oa#hۄf|_@4{*CZt1\uK`?K5#LD>!꒥C4oV RHSM0SxXeȩIWF>Nd?E_[frAص'F h#"bL\/(`;,Rgr3{?!&79:^_y))Ӱ8t7[m5ODx/xޓ;H2&AL_ ܍HvEptˈ;9 |'#N(ǬskrPOvo]^$`O<n[P<ğL/kl>ߦ +ݗ(eoGif.etPe.M2yɼ) (5rTj+=;O );DVԝR(mX9-ɶr S3BlLj+B#%>y7i5~_ j]E:=BHZcbI9Q|j|9]#.ёH&gji1*v (Pp_c2$ @ʊ$q<̲P_lY+ό2Ƣ%SR8ҚϊNLOJ%r{Z +v5p S l<Ƌ KR2Ad )md Fܣ@?rR18 T8zAkbjs7j#W/&P ݙ簿}0 1|cEv_## 7&YXkxCꃄSR2䙏^Ĭwhxg.+c/էZTW)qSWM 0XLuH[Uh˧e3j]ј0y"a-eKHD0 J!|N=t#(ਁb"cc؝ُM9RIm5AASbm'fs@iHM#D6S 0HqҮE]N e1k-n ƒؖX3.[Hu]!)NIťU>7 +s$:edƣL j \~NMsMO~h6Tڱ%:^R6P\w9YdI1.\)"FDIJg[Ye̔-aRw.Rx9?J}!c=1 +wdn'mu"ES]+BRF[M)糋ӆldifuXֈ8/^ut̉/ 7ɗeS{0>94rRXf]cBHYdGXʬ(ړYJ=s ݔb玛Un zV@-ђBdm$ˉK!~GzvAY/1SpEDqBzF/\2;ST\ 8y̿C0K XHӄ1+|ڃWhaƢQ43%5 V# {)i1z r "jAer#/UHrCƩa2zP Rl hH +@vFo@BٗbN2+fJ اTHJO]zsxaS^#MS8Qy]W.. mPN.7okpwqi 'Qج47ŇȖ2QZ dr2#ELI-J# Qn Y+ٿPbh!m3h[:%352fIE$Nߔ^@KϞ0>1"أڼ XxZ^,ƴ{ V b/՝}Go7aY.&)ghq2>> ?žIJM iєEN0mR)*zD +"H oL#3nî>Vp m.Y@L%}@ſ%ea/^ec6>| M;-~d*ǚr1ODԚ5Q/5c,U5)}}NFX>QcN֗8-mCd~6Hu׉s)Ṱui"yy,HM 1;ݎt8e +Y??!  }(Xx,qt70<t88>{h& 3Ňf,(8ftƍ؍v& #sFIm9}zsECx!0>'X#@ ZDJz%O#pm;6Cr +W jÚjQBь +gt[pĩA{ e;XG-5'd$Il`g,PA>lQ6|"oS oVpI`?H'u|·L +ERL:40@/sq +X u>鹑ÂxjaF3fwQd~pqZ# 8=40pV1K.8q$6;B*JղU19m9;qo9 b\o(M&FUrw}iY#R-Eƽ͐N~0 %ynM5wX-!Z,L6hZ:vMjϱrb_#6ٍLqiƸ_;0#n'1F%[tPI[(FN7:buBu}֏.b[}({bX؅3$fQIqh,r lLZtG1 +^XKy^ϼy׻8}pE7,i~e˗bke7/MG_e~]e3?q4A!1q I)L`sJdJU~aQIٮʪ=u Mͭm=i4'*3;CKS[<}|g/^|5=w|O??׸zn皠̇M҉ƱMMÃM@d_lO|Jqi_FCYï7o9|s9x Li`VG>Wc&q7 ju$sppG2[:-QuɎ*:売NűezÈqKAcH=7 Ҳ##C`_A`n6+=8 ȇ2aa=wy _hSnnMy=AnPrZsv܉A$GaI<d_\j6vͦ;vpb2D6NNk1~tBEǡ&1?*nJZCjFny֥FWft:YA.^M8ys +9Q%cw"U_˕eҸz=sz;eȟz8Ęײ+ %u"OrIyY|Ekj2u*4cMh˺0ս5'vzGwK W(F +sO-8ݧ(&=S-9|sCucmp΃0Ն {SNvF W)R;S5Ww'pKV~I&?57(UC0Asv)rTCr홺{FkC5ҡUc˕zU߯,nV]\o=AٺWM-ES-5g N6{5׋;X%?Sܙq_Q՚+{-su^s5%7CwS=ޚ2J:iiFN*&v]+ybvmO{| *|gR̎ݬŮ}E}&x=gޙLvv&3;)8Ľ0`c0jzB * P`PԐ(cclk\+;y{\|?/5":Ǫ\LlBc`m NPTr-h +Z"9xhgvY[;hwo*T|Lv&dpsogGPN},i D]8LLw +'Oz['3"nE^;ED9wm> zHտßtn{؛&s8 FkU \5nI$I gj$YFi(Jt  2b}޷ɯ0ՑQZ[Ϡ:>ߜ4ؕcb;C϶ZVلuэno ^|[]ԏnu@e=Pڷe_d6SDb'K(3; VfuMxWm'zjIv^e.~ջůbo6(izNau]5N\gM c%PBvm@i=hrǓO,̿{X"V,LHCX"<'&U(=pMZF\XYwav j{~WO6]ZaƟO?l,b.AQE SM|6f\P=X%P/RVՏWa5^~ۀOVz@巟&nͧ,pksi$L~}TISdld*Cƪ9hn(?{{~Ӌ};y =Y[GJq0S򋹸E2b\%)\9,=fV2gдL657G `ڧDfCVNL+ϻ^.f^-g\)C\L[N[RਔKHt%m^6 OrbOyY)vx zq&&.Y80^{φPx;`:-'OzhDx*ʾ#>^uU?/HoFYU/ccFt5^U-D(p͠- 7"#N<;+,bk$)Mӂ\\=B୞fr=6<@F DqϤY䑕ˊybI&LX }"\tJZY4ha R>VP?a@\yOQqM]sQ0HMHC~l@Zsg܈VeE]ko A $Gb+B3˯k#XYM2gR#RGr]LHi&4$'rlH0~8((c^ W:`׺CkI ci|DcXPoQdqq/OZ|b6v < T^J}lϿ;2q 7w&np$c)V fazMmn>V&RZ_k?`v'~n !4a7 +nn +ж'ۓzCe ! @D.ֱmPshu5bZH}oYs@C {ΰ1Fw8aw~}.e2Dd:1 ηVZ#эi'{ =pCs/\so }ۀ~t߻9lqnѱmYAXś%{J4'@y}QۅQfa`niŮ-ySƃW1漶բ*s<0#nBa#ڎ3!mx +$w@:;! ]k (6>vkmSKy}oP8FN&1#y|@@"Z scun·U2'I]s@`Z w>:l|yde[A$y>LJv2Y=ZƅCUCpQ`|--be%8yqAQGRЭ?\olI{ +HКt"l6V9]X6U\2 eM[ +ƫYhv;x٣ukXǫn#-n9I~p0{+,J/.ϗAsPr99l5%cMMN֧E7~wo?Vdσ)v< NE܏ɩXI**y3Lߧjm '':4]xfU;=\U"}2dkZ }}daYU7TK$ʼ,9-.a!vM[?d۝DVbefP JuBTkZ;CBȉȲem:yFQȟBB7w7Q&oŋ58at^.F߷`:{m$@r:4.V1䕶uZgyӚ +Ɉk]LQ^%?(%(5Vv 6~~ :qjx(USl96genxUpC18ڣhh!Y6$FA:A׿ g8|bhъ(Z%{yޞK3 /Z팀pƠmlhJY-ż:Umf2#jT"t޵AB6 !058#zO |q0}7g+w+z-$\1̧Ӹ̓$6V5Cxֻp:?0:v8'xyxx:lԛCu +yFkJijCsӤ:1}' a G3eik ~0  3VLN(]=\T)BYȮz=U!bU ^=Sʇ R {a`v7)7&O-.Ț8uOdyEOlkw-Hp# ުVf^-іu@;iKg#4v<%nf6:j0fatCۛ<nOASjЯ) %P qe& |f)0yۅ(n&^8eze*-ɁjuXNls,v䮵$>hFٹ}bg=Gۗ+u x:c4G}RTS]݊ouNZgEGSWYǗhMtu˖Wv޴{q/C 'ln`U{j :Cl,7 slӺ7Q_nzԻ>0zmcx«D. ;RE }o޼;(EnMw37|ߟ-O~Տ7|lsނa jkΦRPStDi d )JCQ N\0@yI/M(_K@:`uag[A0ȅt|չ|U]<1$CPRgk)DZ yMïLşK'{סN`唭$L/˾[\MZKRHE\W'/UW'-Qj'/bԙ_wsl7 €(؋ҧ'R%g>LNr ?NI; +E+%q%boaˎĭ_/ޑ߮k'0`9 .ĸN%|,/9iaJӒOScT{ 9z*"=Quz#tZơO=r;h섔ǬԂ;l2XSj32tMxP!9@;  +a}dٌ +?QR +0M%8mcԑxq ׆Q$g놠׆JM`(3mGv?zŋK~M̿N̯Ylףg(utI5fiA[%7z!s_iqB:-k``o|%Iz"ϽK^bRp?I"Ka,S?X5x"S?Ta謽i>Z|vħ{Ċt| iiD&iD(^=c9~ SvTv!*KW;ҥ7 +x(<H"O>dߗ$. r Y{V:JMm^,[-聩 p Hx.| +%KB^d.ϲS x"5װ=(a`ftiFarHfj)`l@z$(O|x:^|[uL]-ӜjX^Ou-]5. JhG\:D{ܗT퍁3pQehܷhCR49yEYԨ\ $C'jijlSQuepF'c6 +ć<(CbӅ=nʿkўZ4d0Qu6 4İ+|VvtR^P:ɥhEl\4tTڈW:PJ` rQwB wFj|3H4{vӞ][X=>:;7 deLRY (cjt1%BGaY19{ÁOl&߹Xws渿 a.E?1 +SeyyƾaRr"Uv\{l.lwvr΂6Kj}΍}vڵҼˇC.%u]i]+bu7׏T/EsIDFd j-F +4,kPd1UF|՗{?܅>xsVí{oV-Š0S oJOCE14'w=BgSCt!(mP ^m@=uϺ7tOl>ߥ{%LtIGPWNa<|\ `;ϞF5fNOO&1R')-Ilj~ :ȵW-o{Z)H(/\ʫ],d_e,@kOG1u)8bxL>y0L]mwxw~at~:FxzZDvɝ%Y7rӯAҖˡ)W`W+Ո1Ȅ%\uR% +:R=f}N_˿/˽7^/~(9=aFVܜ{y'$ܩ,_ŭ coW)+=v,&|z/3!olY B}4 I{]zBbZCUZcGgGɈڜ#??7!o_ZV v|] w#~ 20'82F(PuGGcXĄhL+#cC^bVnxPB7zn'lJKyܘwZZy@]/D#}䥕fp$|,ʝB1D0|R)jK,zoK*wZ+ˮ}E5}mFEd+@HdML; A((*V\&Ogmuېg km(5z# +[( +{( O+#NיޕlbW~+.L-OMl;x^|>x}euG (z J=_y<+y$IW̼-Lιss/3ݙV^׎kP;R:+:0&,߻Wtp zAW%)O&f_C4Q|Sekf4$u, p 滠0XA TڻS q:0/K$K13yYN&XEe+Hՙ +|EsEkkZ̎͢Ad +MAz+-Uzϰ 1x٢T)!^⒋ e%_[J6J[dYL*?K՚Ghoڛx6(29mn 6Nxͨ#5G&WzJѬv)V Wrh G(ʖU*U!Tlr[ ޼xPl +c63`~߭Km gb:+EQ84/[)0kF.ES6zJEЩo(1<J#]35I)wɞ{ڪ²@LR PY*2lUQrZm-|ͯnRPep _YX͟wr?`dh̦֨:TR`B#ɩd%+TWU,nkY + v@~? +FN͝=i36j@d62JjJL!,&Ϯ&2dRykZ"QbZyy?M:Uu:8[+-W6+{Au'gv~u:{N36lcXu>`-{7%jHrTR<+B9)8GeyQ@Z{tPkg.l[sMTU7s- qL{37")t۟v>+ G$"pgX, S7(v-? vljvmS]DJԃ&2瓜<EM! dĵTj8')72xI^Ky仾_?Y+߬:3gՋ/^p^zR^㞸GcgCQ3HL\TJfM!`@&`Ps= rb?rዏ|E owg 坅;?z+,I@b>,62!~|R,w7=NF 9MzL3p9x[. ?~|G}W>w_+`& džzd0āS[WϘ"^,AEz?NBz>Jƺ=̌s}HBQN8 Ug>P]_~NƆ={pT &I`o a6u?QJp}t~<3)Yv#v{Vj^Xb|φɰ,j%(5 +s[ww3DqbhW[Hs ww˷OeiDC1Gj ~ צ-񠫉A`} :B=fV>ě[@9- V&ie DŽ@8dYn~` +!hQ񈧙#,1A*7% ɷd[1)dEj$=Lwrn^ +=o?@T7-~?c wW8Sb*jOH9ę(m*qYfO 97"xOGQRa P̷n\ui\`bD<$2RwXyԩ c2NΚ@VG6!:٨%I@R7PͶv9:/oVT-5ONOIʸ Nn&"r5d`<9*Sx5B9'3fhI@V7 4-;A77"l('5>1+cO#J'k傫ѵ?ZWݒ! rH3(=;(k[ڇaNN vw?g\d$l<~&+E gh-Z&:)>pGRE$/^Y؃j,,@)iJ8SZxTtH剺d'eĚҖƄ +toyI2yҀAb Ef-_W:-{̕N#bn0\';AU8Qa#F^R,B7U(]ҔU٘>u}X:{~,6,9Koa4DAe + Ro໪]n7gIh&(4 eFLM-TI]LCg,*f哊|ChbNU1]nb)@S7 "M Woo}Pmw{7͡agK3 +RiJ!W#%"##SfWTѲ٧Ժ.%ҭXʇƑ5 ﷷ^5>Bwh|ː*$.2UQ]L+byR!Qǧ82SXrKjT֥$ҺtuS %[o74|f~7ñoM 51Ĝ9+eXbjaN>*2xŕXnMQ±xfb)P72 Pvi 3' FzNq". sYn N"H*"UU2߭L(s'(^ڛ莿t53lꨃ^qe(E֠Y4%V@('Jt9W U)1E-j +"A4ݶZ?Z<4 M]qᲽn}Y߀ʞNK7'0|lm8Z#R<\T^[Yz )_0 Ph +57k;əC ]46xNsն~ǯd )<ELv2q,Y\T&jn(lV- |h˓ٿf|/Ӧ;z[X+.{yKGsa$ON>Bų#).V~`XU&jxwwK|N JTGP[ܭ;~?k7v~un{Z-+m &ܽ¨WBRQ)d܀6gX.y4܇Fg-xͯ~ϻ6~yU3ۿ@rXvƑ3K +M= LnPYTq!zZMp:@wreIe5(}m#~:2泮G4?9C蘶tĜƙ;8珌z +t7)sgfM.DJDک%Ao+~|+U<߯)y~LԂ ;W r! m WVh^~?"S`h8!twtZ!s>l +GL R uu!EGҏ^Wj@򖕀> L@v>/} ZBqoR҂_&EG#RaB+pZg ͜ ʺ9k*z֟YBn.ۀV7Ҍש_tz` p'zNK ~L|O+)B?Dͅ?˸ܒ9t"k64na:O⍠ċ!󡋃uCkȖہpz@P' D{&L͈\H=AS +GWfΆ$ ' #OBoυ] ,Rۀ7\ TmkXn1z#P"dLO\@Qc {%JzL<ܕ=4}3rkaԾWiWB7ihۀmý4zDGϡxc$Qń;JLX=e:z;7v(jUHUZğ.}hk!l+l~0=0!_\_ H씔%I298eX$J.𿯄[g(5FbFx,{TKNϯ(?rXP ;>rhӮmݱ_ f a_/@p~:ԝ'Iܜ Lu,ΓL^c,1bnn *~zyr'w}}rZo}-sMŤ%犏e,(;4NFG aӃHx\`>c6XGq:Iq9wzz=])oU>_}4pwӪ{{h~ɴ>5妇+v/i",4ztTkDqk6.LwVuVs~xc xi +4:cPnuw+. 1p'7}Q?痲GX;ڤpI5:03%ĺg&ޫLׂE[ߛ@L%/d?} }4ֻZǟ~Io_,Y/Z8s0i(}*a1r=d!o!k䶐⼐4; +i(2QS|W|kUgWit\YQ+n}歭~['3[ww>]h=FاO\_W`Y>tƀfX^z`` Fib hf +iƀ0Ьmy6 ՅEN|Z!Y?˄?I?#A{c0oӝ`N{m4Cv"A$Ճ];ݣ #? yb\!.<7uH^AҰWň5>Mϼccyk?>ľBE)ED1,X%1Fltݭ`e(*HX߯vپ5>ov[BZ;  DKABAE6@5|]@Oe|*>EÄKam!yM어HRz%OF|4Hj 95fӋa r H<@Jŋ}g1G9/BgjG0N^z~3ײfi# 29w h } f A\gxXE)㦰}>{>Ւ!Jt|otI xA@{p# 0aK|GK~lv(һn3:UW;ϳ:ύOp9v/51ƐH#`$*GI4w7ŷ'G]]xM?증 PS?ftnl=n D+A4͂X!8C:{ f-Tpiw/9|:zq%6M}ժ9y9}~gl F[z,H0[V+!q#dL])6b^?Km +IS sEwa57X¯D\bh侈yy"B06 ~'C:t!dZ˶fI>d0$xtʼ^hTGH=y-~5Q~%A<&OCt՘z1Gbb|G$˵!`d6L@gD=@A?OD+طj5UlEy_vX0ℨ"o]jAS|ӸBӸ|ɳرiPl̀ k +*rtmG!yw!e.a/v?JT:2^\PϋƖIėO'o%JZdO={7! ٽ& >V}/0tŠ kQFRp']I+E"5TCŬSrQm\h@EdTp:ISt0>+<)CQ(%Y89Iْ$a,LBM5E b٧}:s;eTKbcu,_X +( > OˍO )MJ >|.5695&QrL萖ıiC6N +ҐܧMصxv7'Vջlzpc׍J/s,‰|*K&,IWLRc4i)I9ᇒ45)3]ģqFݒ8G4k'B4(@SU-Pgf3_>Bvl(I| !(MBbRtt\f|xLaRhtUJptCjPTUUȖıiX32B (7x] :/X/l9of1C]ó0QT$e)񪤃I) 'S'>J mI ,Qu!kUg=k:Kv믞q7iUu#[4Lᄇsڳf\ѻp͸4޶$[pEͬ$K%Q +EءeAt_~r(7'^p$$NEDKOvK IX@4$ ;D(4ynÔw6Njmƒ&sݲ^xu +:7%'V, +V"HV8# ޅijƍKCr(\ z 'XEOΣ/ܷZUwiG5޼K$״s bi.S]/ʎ)|skGGPk +(55Ѥ#ұA3tίc˵.-hk>3bѠ.b-S5 +(|g2q:.ȫ1#PoVϨ=N7qZ54A|-Ynzo*mZZ3mFӏڳ䙽~vY]x:.(ç nI9웁 r=Ώp=#w@^~F~)jsS53 +s=2uW{k^;H%sm[]M"_=8ɞ1D)$?py +׈\ZΊ4[z.wJi3ALI;'.LFտ7Cow,ݽ:.Mwcvq=]bKAuQ1] tsw>˱scscqhMC86u.m]Q u +9hw Z͠Aࠋx;@)Wp t$8&r6C^kVg{?ޥY~|Uk)ԹK:Mw]1qV܈b=k;qci{H?p?X{ןRGǟv?ծֿܭ~-a,~Y{T u6 mT]TZ|R +C6wX ,px4w;w=-m +T@.H5 ;3ȷ7Rq41?:zQ Ur<*U s``8BK`*m$7 fbx" 0d@v[;u-{?fڋvG i 3$@$mm +\_K`)l ^@!8vvZ<(@߸^_ ['nG;F?5nюdyHeM Y + +u \KX Pp@%7QOzEmo{f/?|Fd="G4 \P[ +*'=n9,K( R@!&y"~2~{\b~c}Ŵopٝ]inۧ? sX 譠";]w"-R@N*c0O?{^|ytI>[k^*mO a"7T=cbA7K3)U:n,M?'4Q}oz /Si} i`nS!h6DZ v!U<@m3 v$ $$Q߱{״2.Z~QNJ~$|Fy-^tNrNrVz{tF8'|΂݋ v%$l?c_™C*s\핪8Z/},?aT N$w^9F_=qZ耳Rxz:w BrHs^+c%h:K.DZ'Ӯ&>E ,]nLrY+q="4󵼎#?Wr{ףV7L3 |>G,ǵ#Cxw)^qW@bBC-\ . /r+9'O8]*nץ,w>ZaNd̓ſrW}uЗ㱽'l֚ʲ~v7Rw^HJȋHdYEܬ0vY5+A;-K/҂Z׌>||ZZuiY\waciI)uq[b-YK (+}%nQF @E/ +Ft3r;;Ur ֯Z} ǵޜjLݭSn^Xsn]%wsɍTS,\h8&eJk}5aBNuQOW+*ĊF%_ѭ$t+)E݁Zzvi +a͇ǝ}yұf߱Ywu{UE%}o, 9-Lv}T/dp2O;Q=9y=W=:52g|&YdP7NF]xp܉u+)xoeF{X3m>MMD`] ] a/GRKKo#n}@ uz^;uDOlۨ[j2+҄4O1-D # !׉@5H!DϦh +)֔Gwivjjvlp?r9 MCF?1uT݉z?أ?%d^\. NO;һm&t ڂmQ׶s[c{޾$:`6Hy4uxT-TӉO%^ௐ/f ].bÀdak<"0`a;b[o{~1;M6ٛՍ^ UyE uY5 kVo= dsKxYdp^4]XlcH -!p!͌!v±;pb4 Qs(Tm**ǴqP+VOT6΢|s+fmM@XsZ[Wzr]R.QNOܷPz]t1 <#,l6Zh.e|N:Ygp]޺ݰO/n_ 9}w}]`Mξy 88=mr3kG>dڂ[=vgp>Ng]84};oa7ǯ]vxt:2a\#3b%x[v \k\+8uk ȩۏ+ێ_v<`@8w</!Zx-b]b`K .yN.q*7ps3hp&ovN=F>y ~x>щ~|6 + uEx,FfkAD w?>i;`/0Զ2\#%/jg Ϗa ؇~M|&t`?}!7y~$Pnkep6L鶩l=bP9&"Ot7vh!JfT'y6zqWȯq]nrnzvv~߀4] ٠ZǕAB!A]?73 }G5E)%vjȭS^/  i-N62Y'fG)24&3!rD/Hu#`qWo- uAbz>!Њ(&1=;[k avuSG҇8G (H{6H}y2D vɷx518pv,ȹEi%r2(XyWլK KsfӴ>'Z{W9Oj< ;M h:$+ON+0^E nV8 ^G/ .d1p +X 2)Q^1ۂZA0_Pr? FT8vLtY#V 2ﶶ=8 FI<0y\pS+UsS2UQ)O('fOZA+!f.nY}:`9}\3=Lnr] +9 { + % ȒYLaaXP.,/Jo%Yi>B_+ds"`p߼B%7N'_NdZu>ֆHay<_Aiq8KT+/:+Kݓ_RoIwD{q(9ٛaMӁ-GM?d6tϬ%6tp-\*cSm[ $ +T1^<7ݿH"tgT`a`E#5$@HHޛHQzM(*b8gDv&b]˽~Z6 + ,<'|*,;ehV+)&Dfck5ZGcVO:U]n<]3.s+t3"i^ ~Eqc9aQCQ#ӢGEOF K~% X/%ff:-IX{ck0P*&72kq%i^y~%AԄ 1S Sa /C_Ie_lv ֜Y*?[Smnڊ_pLƱ& +}]?(_RV,M8V)OmI9r:22W̋𨔩䗡I?6;nAfM5=;bn@SQhXIu*- GfOd&K#2{#Y#C¥Sa/C_Ie@9$AjTm}l"W͸k{U-V obmi4j}UAԲxτte!!~'#| c^漒f!Aڵ]pώDwF7.V6[10hQgZfSMi`ֆ cEQ)ޡrJK;%aW0zJ +aXg,Arizշvj!vfnyãqf>p~59?nm$uW00o*>cdO0'+Rߙݞ)h/qmZ1ouZ ks"tG]VA)SЄB%_(ce +Nl"%cN~Cx{Bޑ +/v_7o@8rTtC6HUEP=lQB׏COC硡QͭM7V\\-Vq97qo[30G8T:;Z d84Gܩ1OFދ>yP9 jytSRD'PeujMMJѯf˳nJMy|?jJg"Θ(`'YԉebKrk {|Y,_(rat<;nQd>1].궠ٻ$u=\Zlh +HZ(v9>otYV"4!NȡQyrYUJ_nWH[7eť|ء=0dt4a4yV W1㺋>c0]ۏqOF*L?73g˘f_04։Б* +(*]'>CgŮsV+x?0R7ЁFۀDwXA9${ဖ!TiCՅS{&W#r%=C1 k$EvBB22د*Xp֛Fdjy/dnՆ@Т kIpJ֣qlu"m_pRNYH-%{0Px ,)s벽 ^RbWi@Pf +k@#S)l6?L"$ +Y؃<4,AKq+yz`9OZ`h*;9_x낭 ^nE Aud +LbYASHz@W2L^ o&8Fk5] lL }@8f ֧1瘷ր7"?ڂ;;ـSȺ܃(P-U~%07up}5 )@-0}@36s!+ x0@ }gw$ kpQ^E+>Hdy$$}(5@nR`wl:lc^b_l l,@@R<4U/ەDm"3V@rLj`HsI/쾒>~W M:T ح;g6!:5 +3g3ƛq +d> + w7( +/w%̳ӮS.G']Fǝ/;s~<ιK7vo-"ـR;k̓_,˳]5M4[hh}W¬/Ǔҩ|NzU!&۹k9nnnm/n__j_]e`kKq@_eTUarYo\N;l}*.Y+,p. /s;ZQ(m 䄜 +y(ɔ ~< z3 kVkM6߬|jJډ2"9޾Y3^~3bY AbR=l-@+ +G6w:lje49{3k|Iɕ!(fD49@WQgѠ)f˳pF,) HOE:tS]PA熗G,l=LzU!0jY&7Klc""BjBϊrwf~,Oa{OO%A^G[o')㲺BӘz[!ЩU6HVAOqVХF]q՗v+\4% xDԂU`&T kwupb:\{%c E(B?!ga%A]Z +VhJ&gz࠼T;7p;D, +I!5([1K6FA Bo f11>`f ~b~gK0$vQG8S*0VZ%|wM. mU^z`1W1 | +,Y%i<䁪Ia( + +` ցB%a'wmTQz`ݧ ?fˆ`#hwF_`7&6[n`k+HUAH]<:x#x;c5!c\lz fˈO&L>ߚ|f#¾6`&e[l v*""+k-ܰ_5u`EjSt(A6%7}4J:bt|gqOvL5K;0aOI` Ve;M US<恷"[b.Tg?twNWfg"FӴ:Vw=fo2MxIyd+gO)?`}ר@B7 k]g5=w(.RMkia;^ߜzBh>7.#&u^rq';-PLw}RP_<BY%auKQΟτYOMxȮj%f#d\gܴct1g? @>*8nF9cۥQ?-T?G-U`sO$=c ~uOw%↰_I5\v]۟㌐ٗ)cǔ[cj utDc&~OO ,yY$wӣPю7| x%^Ȱ:^@8Zf;RM6SNzhGg{#W/plc3 8EX`'~\LʫtKg)nEh\ \ +16;%IƟʶ9YDSꨇ]=.N]..י.2]?2]Yjw`Ton+'wyPUfF :ή]Ԉr<>+<؇:/_!a hx)\խAT,>d1M:SPZUqrMAb<9'>H.$F";1QQ:GE}DE"0b9aݝ[ޕǵUBNZj͚BWCy^&Va6iZrR.#>_Ëku^۰]m^ƛ5 ZhtTyoIqAevmDMvL=K' +;'?L g?x2/X{g,DϊRAכTh}`JWղ:ƪ*Fi@Ld]cZLH,$'8Df8J YY\f$+c^1˗a q t +L ݨUF[љhkN]6ͤieWVx% GۆQƒlqA#OZ-f'ʝr "HRA r%4Ѩ;ЉêO ѫmv6֜fF:ITehTC-Oq:(*+eճ=\A(_z//O +ytZkOEtkh=ipbUjqqUnU-3Y'Pki7$ٻe;8y NMU3b¼f22YdUD+9<(H}85OF'vʗ7\ <}!~=`waw]^wOGWkgQБI 3kNm4z :NmBoߓ_*:"{C5)3Qr,ďD8n>;kKX}x `iHu ^HG>ۓք$aVdg@ $a{^"C@P@d " + +ŭDVQ{zǷ->OyB;j:g#$NB9i?AY|\DY)B5OFǜH28nz,:Xjf&ha}.nG/Y?=~[p`z-[| + ++3_5\#|[.~ yp!/"%(9mY峭[~P0\h6Mt값eeGij Esy̛y+s@*QMBclttF#z#_!jb:sč\$p.2x@V ?Y܁3WH-9 /J'.QXGu@SZӬA@ +#O1THpf +b2ֈ(a"UaQyII N?No|He(6N@] S тt6:P5ESCW +zя&r# )2#( %DOaNE ٖ4t@W!tuAqF ;u6:("JՐѩ5n6mF:h_mcCu7I[4lN  'W=$#R]FN*Tѩ^CFЯ خ{h/ 2ѐ0ЁmB /[}|$;\=}2rԐEti.: !s>2w!:$.~wc4Ïh:+G4Tt5"ϐ| @g I,#/C=mr g{e]6~g}c3:f<ɺ`u{Wo&/Xh͟9#ňzTHj%aLa ǐY GT@^7ϥzS݆}r2=w;!ӷܳf͞s=q}g>-q.orf:Sћt@wiE8Fe0<\{Hd`'o}-7~׀sύO=F̟xxqU<Xxkǔ wꎶW]~놪S1>B2xғ1?Dƪ Ox,q@CV.|X^?λL>}%ޔy:%N{1!OAT$7bG*GSK۹r/#$k܏ֽ^j8Zmgpk=6W~;/29r8a>:?t3%?T<2nd |Y`/6#l0s{-h0ס9Թ1w.fAע^a~ynҌ%w򋳾g=ƑdH3Q*τumG5{ WT%-L7e3Kj*9 *[r{|s9;sN}헗7/} &T &j&A ҦΒlRk Za^oִ8fiU|!֭٫'p?p?f+¯B*D0 G ^/?aEί=ҰG2Bh +'ɵ+[;75Ě.KͰs*]T.v˫X];^/Jٯ Բ)~jt,/wpA. ɕBph$Sl^m&QMs9_=TwiKIuSUEC]I}%5#}r^ʢ5s6%T]!&VOR%zO"0U$7)pYN#w8lP~5]Z{|T껂;*:,JR-  +3UpRַy%,][7?n]7zg%S3eo4ؿ#aH i+ۊ e5FęuϳZiޙϜQ^ˍkmqj]Ѳ;eOXEwX'^X›k:̦Jˍ';0 +;l(gcpFTͰAuẹ1ƙkZͷ:[ʌvX ^=ؽ3g@CπB5ZP`鿛I'sةEYBf)p|͡S6$$ Y eD ۇ_9`o`=w`g,q={ {d IKAҿ-%)|?CpW:{| ]Z ;bvGdn/ +^E`mo:֝N[[9o Y *oI + +Pz܀.uEp.In<-ϳ us.7`7b1v>wk|歱鯦Sh6v=dz%07 Hq7(Q7li7B7xb7%|oDH':zzˍ%*N7՘7֪;] + _h]Cl"; N$41MIB=eO oEg + +y<q{"y% I|iLJ5u϶y4,ox +(X>|`Oڍ@?@ݡ@ WJڜڞ~p~!|rx"l6J.I]Bq$L7K2IAic2x<$wn;?:@0&}J8SZW#7+7EN@3 4ACLt!,E""IT 9Q.r$H uuJX( (6CDc)ZRЖJ.U9Tmj !4)<y +Y(8W +⠠ <ʏx;,PLp6sh>EM(*,JhKQ@&Eٔ,2G0Sq>U XK60҄pOҒfъ t +"O6EmѪR-fElG~bXͶ)n qJ .wg{WsT2GI3T&TCk0)-hȲ@[|9G J} ږDzڴʣuZQDAbZ$(q"qxՔg+Td*-Q%Mt${?6 rxCV$:eʠc,dTF&TD^uHߨ^U!Ω~P?RD>jolPs:',gRыË)4]c&.r\IV_6et\aW!)I./?2~Q˸ZäSj>acz߱4:oxuK!=/wPO8,m +zhPG:T 1a(]CXB*5O;CWk*j4vk>z~ݪG>_܋:wt]e6d:| Ӥ`>"q &8z拀'~9J}T{hkҼ\{sM?<6piA_^qit9O&g; ǦAwQdqTL0}M|y#8"\^xL? oWj][sŷE +K>.xm19kzw$1Gx-Gyh{H$7tx2dMC+yLI3nK#52Ue,3W!;OHfEޏ!Y)VkŦ L9fKRݙ2Wk ͉cbkVG0VEs"bԹ3"#-sk$:DlCdcIK%ȖT~/Wr#RB7ɽyr# lHNK_m6|uRuOۮfθ.صN1X1\Ŝe7eǾsYq\70һ׹E="_?C $& 5T8HV͝ +Ӏa+Ɩli/ TnЪX_dIaME|EvjS+Zsƕs-+ȉ+Gv|9L\ g9v J9[Gj]oX9_5\9V`\fViuKM̸nVt ;z' 7'b{vbt?aD%}7'o;CTX' }ڔՖ5=|j : 淥f[m)oZd!qSx:VhS]w﬐<ݫ,.8D.5uufhE?Wx켾 U+S Lc +-"WTڄwۅ,_\߱ɯq@_'{\ ul!wղQ6)C&#BE9^C +*Ib5u3 7 ]I&uBՄQ3jʨPXAa"fW ؛ߛDsO۞}^CF.{0bzisi:ۙ.K:7I+H=B0$2Ğ"ONy?.{2Vw"YDۉ"%ΉE*.'ԜORgؤx⠦É_5deuq#wk#@@~#i ̹, a2nF gP\q! D xx JL+쯬m{e<ʨիm.RCvv;@ M$GQ  - R =pfR9h۾NwBD 1$-[+nyCIvJ;#iz靷&Lnwpy;b2c$ɿ +n +)J&$j 0E@AY 1ΥP0XE4=_Ĝ&2-mihFq0抠B1ԯ-z}zIDH>(qN<$^K}"5R_~C'4#ֆQ֔"ECko +B$a4[ &bhR#Mh)FRh4@lFmh8$gM r[~?000J#!)!"((ncGݽޜs"ֽ]e@k/_?C"#\RLfXx~b"fĴJ661b%N8%gƵJ9*s^ G+ɷ&%_9DȾD>4MF&7ņN1C 6iĪ@*DeO%?,:$H}5bAOcJ7?++,><1'r͉C3М(>0F"\xpwdW>!@>-W}'jRmڤڬ~cZouGd_Zo}n_)'7dG^G80z?/z/CO4m:O)wtv]o;E) _콡d*x-u8Gʼ63@bxِdA9W[6۬ϧ]kw.ݝ^z۽vz1y`sÍ^_{7asNI.Y$Y\rtނ'bGˌG+ +TmgѠz-:G{ 6gof47n1#ןpV #>?G|M2p'C.eQgǒ=XGIVyfp\jF!m+9A#&=AMW ~&]BL";^ÛLx- +Wsdl>u4ۊ?ӕ5/-9BfSbP|`l@LN_T^odafNզaCfma;̗h eƢ)2 q'#ػX8xrlA8/ t| XlPXdIٚ :]e1ƭmK͚"Y4Fnl<ī[Wݲ6XDH0>€;tXpj,ք]s7]$ݗГ"5C#eN۬JvSBgQ|i} +ڸ~ͼc/ZW=ƫ'b*;Oʣc>N`/j0ZfB._W.W ՝!ߙҖђӔV(u..S3 â277qĪ,qMi9%I_Jf3$Rp/  Δ0X9 +\aD[?׆UO0L5?F9oL|2*NE"ny2^ޜ!”6)glS~O%Vi,'#3i)`ߚCr:?" U[1{9 u{K5͉Rj(LTO^0;O"]S)ɮj(e8e6;uv&BH ױ-8RAUt^ÂZyXWOX2WT9 +Uz7 m(TS68UknQ^iaᜂyܼ-y+y;lrOئGrMEbb$vkuAte k<T+VVĪM,)-,-0]RnS\c9|gnprb[1]v.^5|_hQ~;5Bi}>bVHFŬJPٓ֓]ZϷkь +w]0v_ؽ+ǽ.Ybwp{p6cnZ P5{p֨0ozTvsZvFvwQ?PhqmIR^2e=ʻmPt޲HqK-ma;B4md +0ߍo\3o+@6Є}L/ 1nL[ǝ~^|>A3]Dϖz?-oO +{n4.b~a~(@nq 8) 'xi;+tch>ӳm䰬ϔ +[i1;F{fbg(9SsHNoy{fy .+pEݿ`sQ뾔0_4_it ΍Jэ&>#||z7^^*{k<߈?{@vK^ˇ"`P!pc{`?q'>Ji ,|MRڋ>ʋmt'=tg_Ӆ _ ?3>X0G"~+A6hg3`j@'(} +ϑdJK>%u%&m&8fFOĵ{_p`y[_AAȂ2Q rDd%H{'. J|@IRIIVS o1S1?<ڧ<x @01S31O0O0O8%@2Q9Ɠ=#R 9ѵ4M't>ATD2J3@|De Q^6h/:;_U~}V%U'š`E8x ߏx҉^($0V6h0fh46O4Vh؊vC_5 | ^';MzIj7S#]bbⵙ ҈; ;A ҙDI*^=?mADGn?ͬ;YtY_tO>^g}zJ ]"\.eFzhCgD;FDb2b>D[2]~8L;PwϖY-3d1|mDYKnsg O[Dsw<y`vQ#foŮqH\?D"H_vr@cvQ#gՆٕizC4+TvYOmT =no*rj^[VDoX]9V$z+uI+"{܊"Gw7)GP߼ͩw3^{1=pI%xӱH ++]rhLJ?H }nI2'N){ܸWDq=QڍvMAIq%{ 4[S}7W=.zs=V"~uq:2Ge9up8qÊTTi'-NDuASg?ѿ:Lއ+0ʥȇy: u/AOA|e2{gThhQީ4ޫmPeVMnԆΪ =Pt֝h5:qloؿEk8;p9 g#h#f0DJ-=_$o&aF!V^]j5<5=wiyF{OD{) &X,VƊ88GxX(?[$CeBKU* \:Y}f_Vz~~[]ş%S/΀ _"p?%$$ G`_mg#sk7k86Dt}tڨdپYJae]UCij]VoIqA ?3ljPB BT{wf .2l?O3݄ڒfJ`M +KKMWSn*VmhP)Y1S!`a6lQuYF ?G2LW͠,&lؒcD e0f +NY.9+VfYb,r*э5QD229f<7,,qY41*&l|5l#vc=Cy ؓ' f+<+zo3WpGFDkZLsJ|crR}RjmbFUBzyqK %sbwpb3){)#F= x: v#)[@`H+̟ߞ)4'H|qL醌xTʔ"yfZbPO\k8jx$'IN;NN/$bؓPGұoa=s-Kd`M6t:8--Z/V.U+7?{⼬L2j&N~NfVC)7LSߘ4NO%F=ٯ{I;`+|c%a\MX>ׄZf\\&XW+Z]*YY-[XRS@7; #Il2+iR5dVY89M­܇\spk3vuVÊj6ߘTiìª.( ,+SPPW]0G3#R7mv~r2vbj&+nKxgÉ|}ؿG+qU9ЊjQXV5lǨr)\Z(^4/B:n|NyRfYjZifr<:91E6r" ,h2%gf7Bbؓ=N8qq qѲzahnP}^Q7tPaX^MTvU\$Ŕ*IeZ1jt#.1(fo0 +)m\~89jRJءp{Lv\:"]5uͲPDK+ic4rd. +HmU P0O5D#J;I7 jпjWu=e-b?L037_gtRmLL5ݘofd/sOoJn M\!'$E>9[)yjP| ōZuy6ПxZƢ'z =뉞g.YbM݌`Na1me +^l\h鮻N"JwؕɲU$d=@7,j1#f>6"f6vH;v[DIc[3Z7pE#c \a%p<ӏ`ԕ=KY -0̏1[g|}lH8KY z_מ Cx|?X`~N+^[\t>3 /SzP:jhڗ4/i\ٍ_zAS]"aL֋0n?y` _B}[n+иVvTy`P~ J2@a ?uQ))'(G)~Ӂ _9bq_0y/A8(Wj .m ү-AHq _HDߥ>vMt]~ӈ= 0@)svp\'S/| M$K9"?@2b | 2CRA'gc~> >"UlG$> +D c4QEZ!{B~1 "|ɶMh!l(s)@yOȆшt"HЈd B@ڀ6h?:.~J>}|K,Q>HB1_W?&5MRDO0(ш|JTԍ A_r{?ѿ]{H V<-O^dDO"s'k1E(コ(QK٨NTjb/6ʽoC[韔w?W9GrRo3կX=[ 1v~c% |&Ȃ"F)bM#4HM]L5IQk V;J[>k61^id:xuD.+]| Mm"pCp0L%SMhcho / k O [O 3b>4X|`0̼gyp?i ̫4:&D -%X#;y 8 {CegI}q|i/-"hO͓̲0r+ư|]3]d e l`u8kSǹp!.;?O +i@(qւNx5͖zNݳݲ_Ic\wѺ?YgxKO:Oz[>bCAyEw>#RSvlz4|P n:Q]|i"gNN86uġ\CE"[Dwe7(nv$ݕdVzO Dv NB0 A G ^H=/eS^3hGg3zsOaqs#esVF-NH9nSv:rNW;}u" +Pg"78E ԃc<@ msoOt<3J$6xTJz,^$.JmPa6n]n=SpN q|/ +` +z.l$ ӄ}fXtڶ/HpP``,,5>e=> dWz7ȭZBݳ_sJ^ϳ^T>6z * nΉ3EtQ#Cm E3E )/&"(W3pL{<&f~Njר^O&U?&>ZcscNH<NJxEؔ`h._Kxn݅e ,UQ{-U (a/QcI41_Qkc5z ܻF7̽٨qOD;5$!5}=Zv4 $H[>.)Dg>J-T23x:MW\T"Ϗ%ir399FI:LTbTGF>Kͣ2YLt(?Fiyj̓2`-9p];hPs+'0rAa(4H3$RQH+JW&K(,5-;,: yF#~"finz$ơ]JY54*P;s3%SOuUu8*\\'KHՎ+֍.+ҏ(1 ++m\$xi@34/zjPĚaMÙl@1y'寯#ډ.(kf[NvL^Fl?Qb}f\}Vt]KwFZmx{lzLkb(O +)o&!A}wِިBHnиu⛿@sh|(q#PȤP) `w y~ P~@vC]MHʡyOL ? |`? a,s<,&(!}ë}GLl C @ٳ({ +el/oM@#+g"=L3=pb$1!E,XaNS[tR[UP{VͰ4 6!Vk7M_+>ßx*KWS,aZ,`)kj ֔߄0&6MuLuqx3N8j'1"(a(j-KyB)_<3O?,+sG񔹭2?hurkHC͕`GR;Fј[S=`3 sBJw~H!RgC}-=]]COg17 1 r2d9׌XF,є?X=dy +^[~Hi2IsߤkRd6ig~~r~ƈu7&8_\3s.OX93֌|ر=^ 5y$m2q$^Z[y a~|7Ʋ?:5y-;9W,p?^\˽hycygF;9ؘ7jGưqp +|kM`m5Q;Ŕxdclpk3k"&$s.Ygs.Xq[WrZXN[-dҪOpjjΪNm֯D;Ywl;I`5ztp{1:W94`XI4)Smm>mSoӥfpj.-6{mNlo}O5֑֞ߝ,O3%j-p90G8#g&욞czvCh}x}F7hSV%>;OeX2?]8=G'LflON`ހk KYY Ekūj;h9vj:H;8ȗ:w;S,r^vpfCHǭRĭ^kkuuu|׽:mו-n)^q63v&ߑ~|Lw"mA)ȖYY,V_$Z쓩;_TݫF,٩\cn.:zs=ԯE/խz=,7%';Ap{CSbCHȬ uuƉjdKZH*~ :5Ku|WUl/=jP{ŠAKb?v=B=?sFǒk+w{6Ŋh+,tErDC[¢EMI!RyePvyG4T Ti@XVI"~8ďx;=֙;/ƋV!רHTHKËaUsš rC{ rB7f0R^z(3afk@諆PrߓBOD $aahOaZgrjUqaqILfQJZ] ϋΉj͊\ =rQja)3H֐0 s4NSL''v,M4}O@sD>u:&ōW#(M +%F 42䪸2팸:eZl~JlARzؽc?OcYC ai=<8LOYK,L1g*Ѭ2GʚΜ)Ϙ+NES5U)Z9bZebR^|RuFщE%!'0Jd YܢxQrݔ9/g)G\Tcr8E9N܂l~NJ&PjfH3d sqʘyzQik RwzxbҟC,Ls9[ CepB&p&7`6?3W--?D-NMfJcr +ٕ:MY U;T'c 0D=_8ys5%g@\E KP\j2 MdTR^J $H=8RSY>'ORX*lPto3?nwoy |X}.XJY1x4t?RպȪ6GFZ3X̍TEV *c!)9Z%r:mGY{V=ңnJ.`f9Ov*& +I HoP q"ɖnɉht5C~IbzW- +uk7+j)k*j~Q:UR:UGT}T-P]] =]}[/EL!:,1!LP,'׷=!>{~ȵ@ùJ:OkFk̡uܾ|Zrr +&8Osj5Zhj(p>I@%8,ҙٜK}KBx𝖤ft;t u75l״Y_2yEɋkNS2ʾҷP}hPv6e',BV J٫ ? +.֘zV;33W{0WpWGpNNWlԬרCWυzYѸl-{)eSn iaAKOp%MY[1m1n 1e=l/Lb& D3Vqjc:}҆Gaxj NYAN;A'gBs&Bq /:H/ WHOKZWS7:  x;c'3y~& W h\CL z@y /zb+Nvx+uoπRw} +s0п ȯ_2~ˇ&xe~,%psp6ϦQ0cA4oSNP~FPOEoπ">WO>?t_#~R ܕa/Sncz!?*`Pd3he;K`ؗu@r P`Pw=1K5mV-Hߤ,'hұ;U!ϕ`仂)`.`@DQABb Kkl+ 9) w*c^Rٿ?# vRc`5&9UˏK&r]%D-L5g^q9Ox##|̏x<=+屸' kDmVWm;#&ԞjOXq6^Ϝ95C /#8M7eX^3gh;^cO>=KSeGMU O\'q8kΜeNY0'- 16.ae-6s[d>>{|h|'P|Y;dFOJIOsO&> +')|:Sʩ V˂% EA N|PVsˇܟ|4m7Vҵ> +@}čEE$֑3'֝ˍgEGeF% ӣTBJfY|"ylDvLvʨGtZ;:U\q8;xGAۮuI[K:iʓƠ8i2S8Mtd%2ij) Iq|rILl4*v<"O;DwJS8JBiY ?m"rU,Nz7%%!HHSMNE'jD&J“ꥡ -:u$J;0U%\ }{'جzNFjGUPB.rUʲBFr$< *^lf :3F-2#E-I/ J.K[.M۬vP;Smԇ>>7_.\Pނ3 ȧ{5ɐT< %-R&d'ċ\ ,ǫ{LT$YXsFZCġġġ%o9Bspw]QIUR~ yG FP6Fi |'ûفlvaܛ8nAHsS"ϱ)K0X;^}jB]Cضaضضv.d\VƯsxW6r QF CAA6ޠ NT"ą +T$N_Ye: ~}|;x繞N8Քr.ZT>v2 (tW  5[qwD&ZIGdܪg]ëW+]WV_ _VqZ)8B6ּu9ɂ%3k-0|Loԙk<6ýVZ?I^/ԧ Ny2z٠rrMevjPmf/sFݵaf  ZUQaMZ4y w:`a~phA͑oN h#k^"6 +ֻVͧ˝ ;i\ +lJ.X85Uj~iu X}ϡ`> C)u8=p L7qCO`+J_Wqދs!h6sQ7~܃0=0}@S*kan +vKHap c&1td@l迵zӱ33W]c6q=T朼hu>! Np7YFo|@#?tgw8wpL݁{0W{nDn:coܵ>hqO|oaG gbAe'8ۙYk|м¯3.97#; 7^Sq|E'3(9O.w1dǞ&PQm׻=u+3uu'P;ySRk sZI5T<jV+~]GY/JӉH==QbʚO1AoZ1sb!(se>S=e>QnGf|<;cxOynC}%\r7Ro-^=5-~7tďV;5P3_h2p_3 h +f>T?J; قMm5Q\՞em\0x?጑vr2 C!~gfd8>7p8'I6nI.eŸhLYΚ5l7pڼ'oD8pBZ{Knt#Rˋ4@ī*Q)¢>p;GF\ 8k\[)b* %8n +GUpȺIh/>!췹,v~'6!63Hoi%`.= +|jlLp\0 qnnZndGl?"n?'6ؿ/nTVAo즶N +3\͡J\v0@PK8G)fLiiqqձRFɱ^VS^*tF|cE/*U@ڟ^^M Ga4m<"##SM#ōBz5UjZEvJ +דUF>T-jZME7/qч#琇.y۽P*z&5ij\*e˕K*oQ-tߣS~L/tyH$ݹ?yo'ywMc u~ k`xa$rLlLlɘL"i>>ދUWޤ[ݬWsXl{?s׍_|ڿ\#T(FƱy,&cE+,*TN(s_;ӿVQ?߿U=zZGߩ+uM<!;xը`, ݱ0O(0A7aX2>VV4>I^4M9#PT3-pn^:uvMVMfmFз%9 3>L+Xաh%aX6an# +'Bd3BCBry!3U9!tBeOުN iѤ&K5!ŧOR _/cXa9ő#P%̌ +"i"ļIqI,eFx*-X'5|^rx~bfMB^VoxM39\Rw]qL>۞u_}n c911+1+abft,=:QHJPorT~\d&6r6:Q7׼U%ib"%_~8˼PwPPGc)`ds̘';"o' ibJ|,)~M1%>O7['6L/:n~d\&"vvRqmxq_icL:Q۬y;ڒzdր *a<O4E^5#3i^BJR,&$E&'S19ʨę: t*jա ;5! G W#mHKMIIh7XwYKrXf3驺I3BfZ_#%}=0%OO/Ʀ鱲$,EXZ*4mNpR RՁ5R/5)?S$u`Eer>*RAϗN}^3H2@rr`rrG!&G'D䆊Q9 tńiʠbոźcg:ͺD}3ReJ~-vp.>Aԩi7 16*Wx! @- "T<~7B3Z{6=伞*yIzotywzۧk^LTR@7c&!lN_!G#x aQ[$)ʖQ4K9L>J5z:nSm7:9fp,R2ٳ)siB)0~Aز~(rW{aLy˃H|^!*˗,/QB>^RO\z|t^yDR:}M-Bd))"zojТM\H]2cx- vt{([e FVNĈXaxeR9Up,V.Tn9,-#lВWA7 лa>,г ap flKmn.⺸^ƹ-[G٣蹷'l sɾ0°%-mYJ6AӲsP ϡH]Ԯ|dVq.О'o8g4uM}~MqLP7q+q' ?(OLdNB<=q4~ /BZ ˏ31-mz~7Ӏ {V9 7<=ĉEn.vG>.q].!= GYKYps^?B? + K*>SMao3͸!Pn̹I~opqF}.seGL?`"{8S(lk~0w}|@>$+O)iNz_piVF_q7 5;v7LSB,O*kżQ{YffRWթ}Q: J`۬5xf +|ϚhLq\ c7w.$ސT<FCR$̢{Q߰ +/??a+^/~@F y?z =l# HuE|jRF20W@ , 2R;1TjQk&A u!VR*BFix$[_q"oɰkAϯ&FEϿ8ƞ3KV&uQg6[Od)bZjQg5v1A|\`%ϳsLY %%Z>ѳOAx"|,cpWȳ<spS1X+ոX8hYe :pFyu8 %qxeZ<ךqW:IEM.kfଦoivڵ+pJ'u8ݎڽ8(8Cwp Z~^# {%]{YoNYm8WFࢱ2vH4M t3Q8lZCfh5[fl=Z̷`.ن]=`gh + /$lfs7K.+%F:nnh3'e,'e Z,*{b,4[ɪV˰ݺ uj݈zBuKa}$a @OQߑK-+\jpV,6>h B$l6lfid7uvZ +aJaza6~X5貸rgbsq$./rieu2ڢ ݱuN!uz)X똊1_r#r,V8.;V%NͲENeNe ?9'['d7'.G0Cl\k]}P*0tAk5]X2"OXMQm%>CQ2, -P8AΘ䎂 _L + Bv`.fNSƕ)ǭP&nT%6L%x">x2.x*&I':NTeݨ'KN%e'79ک~Vc=e!1NT`)Y#7YaÑ扴0?…XqJX% +DŽUD-UFSM +ۡvH7,"ϒ*|bN'l>,a,W!c)#dGEFR#]9c0%2P(EF 1 btd,2r|Rd"#^Z$L1G& FtD&z""IBhb"NHȕ%̖K(W$T)|:t|>wʟ*ɒ/0II@ "R̟1 ^d5bRLjIOsĴM@LH(E ŀ,?m7m'u;^F>Wj3+;W79yG POVg@9$)<2SYͲ@pvLycs H7w!/z̓yTG)FeQeRg +WQe޻3 d)Oҹ˦Υ*Gt-M7C@5 `g/gkF8Po!)}IΣNIc>,]Q%^p+ ȒDaxI"\Jقc"qhZqpqP|*s(d_yO0I+=i[KYňr3 _ha NXსRpH}EV *ۅ~ۊk¯۲m$.xM3֑Ed:5v4~"J=80Ġ`W:`*_5V¶j 8GO)88ڹ9m ðNvr?s+>tQsa?sGs +SӒ'm;%9pq\fW=)osw}Ifb$W']mwp.B8AS@3Y@CM%Cd,]Nk|d rϹY~8\̧b8 3_WkO>5b6}i{(}¾yXk 3hZ~d/ؽ{ ¿u!M<G' $$dw̡__|9~j:<{3۾ +[xȖʘ63+2 tiʣL;Qg1uVP:SOlw7$SWe|@>F3`-!FĂ + 7u3(%R+Zө3]0:YBԩ'e[>u-28|&n0kUo$Rǟzt;DV3Z)fByYJUYK:\a-.a.#h[F*fʩ ituyUC X^Y fAl-ԙCyYXvi$ d%Nrd\e4M8(J8 ).qH/sDdqS憫r?\<+qJ73pB1qDhSAjvEՂ:'G2vChRFltGYonmo.)\#xDsZ2ꍣƃf>k],faf6[Jټ̗| j{nau53V?<+'AEAAN;!a K¾}eĽ*uoK[j7vڹi3N[gZN'yۄ|y~y&%f n9I{w_fv8;K4$》 +\׵]˵;\[ݵ1[ܶb^Lxo cF~z!E.m)y8iC^ؿB=i杍ޅSIjli„O;}g>ڕ;ᕇ!s€SBMaoBߏ*?}zH m.aKQer:8X2}KscS@46$a<@u ,r b(šauะ*pt@:- zR|C|[5[ 8z9h֗!fb nX/è4#8 IS1 Uc4}VG t a}B{بEH~B~Y!q}w z?Re?Tdz69#6r9|>Y4zeeSm2ZdBYhaQlRT+->&(.eR"+"#o/RB +s'Q?9a(kb+D<"OE\&y%W FF)T *&Dq;eqGĥ񏙔ĿD>4);TC=3XXcח vhWE!^!E"IMTF*BybKl&$%NL +5)Hz$?}Ooq~7^7eއ9ueXE:Кl}3R|P(Tģ"% 5JSQZ*0u(?uT:%֤͘䤝#ϙd7/;_HycKd^0G'ciI[t+Ԧ;* e4Cdh3(EXWV ee+GY-b*If&?Sf~L218,`t3-!*KTQvGZ"u( +W+MV6rBvV DYC}&i٧MR&oLR~!qϱ5 cLmT3.]JrluAArB&YT5j + yuBz^(5o@7)N+N;eȻJ"_(4?5Yr ⧩q6sL!ڂnX[!'dz!0*m82PjDZE%BrQT*(ֈ&DqEآ+&E7Mb_c?兆x'.2N;U[D_Y%VP8@Y2 BRdIt$r+BJ뚅X*QnH)GGGMY8 2Rb_zڀQ[<{T +KYo}EH@J-\X퍄@WG &֨SSYM9j!fTl\&B?TDg: ~5} q ֈmtDLdM~j +E>zk ՗"D_`}S৿ H +ۂ{_7IzGZw5)}yhDX.Fpg :%G@W +BU߮Vt k3fϮqWl7mej&.ȿ˩DBK{E 6kH8>+QH@:<4p(@#\WypY8@>op3FQk#YCZI a1B[$] ,%p 0D!Nn 뉓VzX 1Qq.=|m" N"&Тӟ;nmX26ӎXm%1X=\,av=̷lVNƂX t/H;a54 +&r۩Od/=~SXb8bH`2#xFA.䄞@ά'ၳ}?/w,5ܛH#]F{;ϱ[K]wZe遏P8ϰ#ghO?AhO!bngj$ǀ_9hQ$i-b1 418(tɼŎܺzU\uku0˻sg!{6_CLi?cN,F-o9w9w9'z"#)$0]q'ѧwkW8L~_ W_o+|P`E<p{&' +JEBUPwJj0>&lnyp ,g^o=aKoe#Yස+N5Dvjό}Ќs6Sg;ߋpCwo1x_̬]g߇Aa1.b_gcpgO)c_jF5zZ lN/0xWN%~e>l.e?=_M΋7E-[+F-5˞Pg:e%NqV\#Ytq>E%#'07>XZQ׉9al!Ze_{[XEA ) 8QFq8$Aѧ1&7˾y31rKpy]lqZgE"eH\G+qv +XP q̴GLptMq`/܋̎b#m4v;ƴfi[\VԾey.O1+fhnG,p2',cp2ppq,.ŕxȪ{Z۪ ;`(6a.l>g*6ڼ%b3gl?sZA+}?;c;'lq3v Ǟqص4 ;faziKž +0iߊ=pĸ-Xx +ÎO`5 .a6u^ 1.mGd,-{;{a%[\dtQ`k]sεceXZ& u`m5F} ax\Buty~oeOR`>[*_{N2i-KWH0" kNƠw&5X]>rzסǧ]>=Bʍh[ -+1A$@hSh3F$g1rKn3ӌeSd>ZaDAX>('? jtͿUhh>hG]v6PPPP|GG qpY(-Ʋy 0d vGgC$Ch ACu:Ԇ֡:U>THDŽr锠 J +%ϐw/BQ>uj^fK}2IzЇ1"QGMD*"ԨCyd t(ԣ$G(Q[B>@vZ/{J;Yȋ6yY^%!˞de0cY8_z5dBu?*P ]LJc(AQژ +6 ?Sȋ4I!WWȖe]!7"uO|5YY^y3dg,݌5Vn8{ǹ,%q!(ATǫ_MBrꐝ.d)b#('DO7ȏ `Ln̞3FRP@ʼn&z 1yM#;1 IJ@\Ur ɭBFj!=e\HK%>.JNA>%D)O9R| i[L|0d֚)(LA~rS=ꇬT)TiLS@!- +HX%$e3vcˢxk(>m%G0>vL l'HiguG9)f\UZ![L_dd -3 +xRB +(ԍHPqQAbGW_E1AQXrYuIl%#I%c)E<,mld{#9'9PȑLA)Cњ.4#BfJ"4 ᚗ'|k"r B$9MC& ,͕yoE +<Wya(b S@tad\DiKAaAA"hg`%B + BH,Ϥhfπϒ<H{B^b{JUȲ DE ,ae"XW ] uMO_Α_GARo #.@rO]ZJ)k~Z +DTZ j B#~ E`M4j_6:mO*xN`E^x՞gs}5g=pzmp倢5~>fozW{Gphë9h)[K\[2]XrNOñ?˛~F}vSk%MH!UU޵Gzw]6pvk;\W¹'{ԓ%þK{`; i,9'alMOXi9DکYGJi sN8ڢHNoEҡ%r K`3h ,,)H#,FVc&,zfC]܃yuDOBZuUu>SXLZbѤ-q'&pR +I9Ocd>L& 0NC}= ~I#?ay$ -m<!Ssv[ Xc>\Nqw9/^`,vsߝ0{x)~(I7Α󝱆pUM]|?`rFB0 6tYaGYcsq.saDq&>Bs}3; WqMb5-q"M}j,مS4!g9s4?|<|~8.7K/q/sۗf-9Z 9f' r~} 5- ϝ04T SE,iIxEKk|b΁~B/3/IG$D>8k4̔^__^ J7786o= û=!'o>`?`>x:9]sgQ̱?uOg)lrmN9>w0yG48>а q|B+n<_y ?XΝ?8=NDM^1z|VE]5=WF_}1|Is/x|LWϡ|4QB]9uөV uӄюo#g??KG]߼ɖd?1wҝ~Hj&RO::_K =5:a}o1N³>O%<3҃0S _+f͑+s, ia_(FlZjLͭ.<^>'s((gfSU3mw눠VAɾhQL +^uxq J ߾kPUMqD~t.[vi9D94/Ght0́'g+5F +#1~@D`Kz\R嚉N\͵-uhvkE*4}+<4=&*>'?ox2ޟ![3epVyڡ ^h +EW4W(_jԯG݊zWڻ U]B&VE >(|"ɿ7^ JK!cCV%TvȈwFZ + Ah$*Pd A%@ԎؤA$mFtȒ 煨OAobD^,'jFꈎq\:QEHMAr#=H >%q)Q#65 1وNBVD#"}~<i#R 851ck<"UNOcfE3 pCl)##23*g LUJPUBTVE4ϐw =eLt`tz:Q}#5j>bԖe!2^4[Мh$"8G\ s^宇D)Լܯ $9H $N+E+!$%yR6 ]iD[i B!+PHqH +S[bhk +(;}+-%< g+W:ς&RAM65uS4 ;KLWR;,sOL +/]4 mX^~NQ;8>SُX^j4a`DC]e>wѶTU5pqk\j}\\LXeupNu ۺCXRw6uæ3,ՆGZMKL*ljR[^DW _Xb %XVwض`,i-m*Xaq[,zaѶǢGaz -[X4߃ހ1juzRF[OVP[VЮJh߽h{sޅXܷ} }X'yf}Xؗ> U`^_;LBܷ *U@}B!`.&Y5g@fu> =|,]y.h(7Qnc7qR;8ֈ7YPaQ8#zFRN jS;V>u?N@fKE=d[Ymf;E~'i4[h|~MGì<*m7BH!{OzI! 7Aik/+k﮺k[|Inwf9yyxƬg z*zf/|.H.HU49JWR^IQ|~\&M\k >x>L,l&ի9=8!4}Naσ88P! N7Q L1z+~Fru.}"X܆`ͳáLڜu cwCݑN7JSέXBu]dtt^}?Z@J~?Bx5?NIc>>Γ>)}:339d?82q_mov6NGUQI"OߠuDc~tq>F_~|}~oߵF_Gn%\7 W: 3YgbF틥mxo -ptOz?^980.%eNЕwG&Vc b`:?|-{x݈ +/UO=[O(~A G5z]/z]9Xן&툜+|޺[a%lQL߈v݈uq?h +XmdC:ȷO_v][gh{ֻ'k{VZe +CZ0K-bZ\c5sF<iF y߭Ag4|_o8'R:F r]06:oW +P-iZ⛧E%Z[1?5ץa> h UvPOtf=w ǘov y>  '- 2haPƂ#5L h0L!5iT_HzBhN蠺+lf_}j8;̑oo`DE&IARl+ g!Ek$MC>XF'2G#ꎪPgTfE#Smj/sr5S5^ƸkwJG몏 +X)nkE-a|Xzjvl4+.QqjWk|Zߨv5&!aXKܠڤݪI>[U0x +,Jʝ ,0 ^ҝYIjOSkRZԔ5$>BuM1&[թCJ[u*OߥTqJ3RIƫ\,C;k@Kxs񫇸t4Ԕ歆`էG6=I5NWez*2jTѬNf$kȘSE9TsxP9_p3L$rEʌ`!}/;- ͓5M,ey:;@UȎWYvJsTcTqN *Pa^ +ƔJyە[p8]oQ.!oT@?P +\ws ?TPe}U' K/,W^ar ۔SԣlJq2۔Y|PǕ^|#QFNGZA}yeFGTdVAq#[te)T(mQzl +lRʷ*|?AI*~ +~PreW÷|u "ymuܯ䵔{Eev/wUn+Y8W*2GFTU)IIU]JRBޤ꽊^15wSb*{y4 +@hUTHY[M_3CJQJ]ꢕXL(\&Ř:mPi"MaT i5U#WDe*x.{#r QMnoTlsb4E*D- +kiUW! +6UUN>P@w +l(\Zf&Po1H&[jwVD:|:+D!<+IA2YJw6ɯ[]#Z)<;OɣI⥙#rh<ȐhG4cENr]$э'5u~M~Ivßn޷gcv&Ut])5~?s4s]4} qُn'xAuܗrtE~Ѻ};I,Nn9??9>f]q@{ph?筿N$;arMbr19MQ~7Ea9B}{u.mtt_q/}U9+^O)6?ebu?ʏ g1|D-(.|}&7x ?˨Q/CsE5?COa1YqbL}&? _!W90{+ > ~<OP2$'= VOѿӆ=S =% x~VMJcy_A>;v)V$q+'-F@?X<ڐG%دv#ä٭藓 ݀Q]HOf +8ƔrXwD/}ib)XN^ܪ xbhCy/~ hat%yz?q?iny V.&b;&V>EdEpos {lSI:aG]Z7}mpti~\;6&[w6Ɖ]*w'l^C֭fĭߊfHO3q# 33]D“GpQ G .Z<8`wVn-_Nd֓CKSТi?^.1&}Oi.⩭Sij6LKѺi9ZcWvZi_MZn߮w-vXkqOߧQ#v:yNkhƟ5]~ <Ŕz;5No69h 7ᣕΡZq4].ZRsm|huHCn 5Rn[vzg^4vM݆//2yYHL} +YT Z14bX&pJ5qE3/~vvӐ'F>lBu˯F׮6ϓ֩)b54T}~Iu$ [Ky]ė| r֜@u3(BAjJS[pFW9^!f5t:Wu UZ5aU~*#T*"?? ؖ 0߃/j QKx£LG.TժlTUd*T5*٦*#c2}~=t7QjlNFw`n4l'.;5E!S1PMLbRU"V4֤6?e*Lت}O^yIg,w ezP1\wq ?Z%8:_',!Z% I*N̔11_E*LUAR򓻕2O)IݬԽJ;̴H; >{`QV*;u ^`6h^3K TLWYJRdL RaJS㕗+;ZMJTfƠ22(=s2/UjQdݥ߃N \׶L(y:6Ty9%*pU~2ef&+#+KYJˮ JPJ΀s))wsw+!Zݡ{\\ޥùy_kAT:++]>J Vj^R|%))Oq [V1E]tnWdѓQtebCi4(ͼփJ`.DwNWj^J2(xcS[bE(EsQ:_ᥫVSeWR8xK__VbѮ`cpM5P +Reqr%^ .-7(OQ!VDE+3VYJT5)[AU +Z"G[/ +DMgm dr oN5?%qR%zjf(vR+>My/_ImZ*/Ӆ4].MaLGY^um.<6NP (pgT'1fW+yD˫%I$(ܯֺI\?ɵsܚ-Z  3JP\M jT$||Ռ6Km,': 5+LnLh]i _.]rjҌٚ5_]kеG]du:}Gk9Yg; jAm.;$ǁH$n K2DrPG?Mw"qhUTΆ;6"ºG.z#v>i;=$6m5OCȏ!лIOy Ak@qs}>wG: LӔq48w)Re$7q+ra12p^ y|o4βU5 ڜ0 E QBϼ Lr@#S4Jzbk#& + [Qܶ[hͽ؂ތxބX!J=pٓg2is+VKNFRK;(wx\b-DcOdA^d/ X1{7+!m +GRhs.p(mk"IWR_Ea~xt q~9Fqq}rIvz +7)Gߙ؇SEM:m% ^~y/ֵcz~.[ls(G0r  7`4J yE5,aN;{9P(RǍ9qXН=(Vm;syk"?ɑ| A?KRDzbهU w>):6L>vA}5>=;Po,^C5JQE4 ?xۃ1Nw}/_9<&8ZQpmP`(j8ZN8zb.$+biΧ?Fz|Q=̈ߊǭgo^z34)0.\~G9pQG1O~0^aSi`NOB}SoTϴYͱ@s_EO.QlzrYbZbEvԨ}F5!WCF :Vhc7C{4iHkuخY|ڜVY̮nq{/EJkyd_F5!ou VKz]㚩9Z.*u4ͬnUB\&wo Ϫ!^u^-: ^02KfhA?uaU!Em, j(SGw*}|,80b@c>ua7tcڽdRO|" O}rUkTo}Uת +*2qlTq2QQ* z +oyp +HܭN3fȡMSxwp=9tDGӳx݈nDT7⩋/<>i΂T>$ڜJhs=t>wŤSmQVי$I&uR&@B UPTPubY RkY*Zֵeu~}>?gs=;7@Ix擀,`_6¤>D?cG4‹ !#gȭ< 9\[{l +zlj@96LG?zPE|8B)tx($;H4 Y_+mN^1;lXg ɜx|_4 iE΢GfDAϐȤi$Yp3IBbYV_>I|q{9 d :@ 2GЏ^z#hBܜ9Q,vp߾mq1؎;wKKN~Q]S072˥iPzms$GX˨l&$>fMdQ!JRNH_˸!uukQ/nߕPI_6mM}WgEɬO:sGt'>9H8=aayw3>:wӥZ] R_+zu}f堹/ސ{V9B%NN7?ERSSړ({=A#< NL9ï5n<39zc晜Sgǝy'F9 ܷqwfI gNkͳ(macS{ f[~,ڨ{Js3D=l|=3Ӟ$,Ϣ-E-tTbmGax;^a]pCA[aw;xL >A126ц\PuvŽ;wocފ73羁>^,݃WG0=ۊiGz3 -gې=ȞȞ s_K\[)W7=7wf6`E~,v;PJd7 C Q8Y|>0JDd]holD<;[Ǽxjw͵r.#+.](7Jd70]"EdOC,2KjOԙ|L\u7)cGcD4%t1ezf#8,RѰ.zѓltRtT3BӦ~4!M)5J7i pW_!PO |ƴ;I63>1g%ͱiNE3uZHC\ԐBM -`h&6iRXz6 фبꈼN푇f9ŏO:ze[jjId[2gUH= +Mԩڪ.k:aj-W5ٶ~ >W]|g@ƟH;FYjӸJZ6/&@}l`W=U,uf/QZ-эjPctbT3WKU{ʱWq1ǽ>0:+Ybtjܟ}]vU5;pVPuq媍SM\'2~P TxII[Ut0*ntm@2Ry,`=~;bgsR"UhWmbJTeR*JT\&t8e3T\$O]KC#r^s=Ƽۑסw4˷e*|o~3@)U-թaL<5FI*Iu85GEi*L+UW>܌dRvee^۔x |̬FCM΅wW-PkU`dXTa'#^Ned*73_Rd(;UY=RF|W>Oi]J3w6% oR +sTP&;V$eӕVFnkRZO`R +Pr&%yP%x~~>Tb7J*Ft,CCvZPo%= T2Y+UTU| t&aNjO1ȃ>fU鯤0W[娎QlMbj]dZ;]ֺEԭSdzEޭ';\K5?h%mgԡSՃ*=nhJ:TYCUp+1R&pڔ2eiWdS9hPDs›(yBW)5_ +h:+cQ"͠TTjPytB_+êu$*å;Q6wB`;gS'q t:_kq =}i ڜnW#(qm臶Y11L!=˄@%p{+|>DD"SBz!C=3iS3:Pb2Z>B?"PL LS|EtZ斩 dj%<{# >_iz@'h5><ڜIPC?U +F5D4$3Y\gsgNgtl^M^ γgAf>Ȧg|!t6`ր<96@A#aR#Z cv,cԘУba1!ϋ!">$-j@9߷(WkQiLl X+cv&:3Dw:|\ ^G3ĚG 23f^Eeb.\>l&ro_nƎDžc6&m6 [1|+q$-SzJ]@g6`T ֘:=0j![zfM#r>"w>g7qz veQ$ K{0xQ:w-.\Ft;M}\5~ʸȍ^rDOn#VcAqIv_\b|;D|ۍ "z/3u5./{PjNsp;c>Fl<Ƅ(yFcGUtg·AL7:D>/8gƝy9oI}%t4@0>oU_jԧNއUL `to^'h^^!H^āҀ_cSp'OgOGs(~)JgHFPNs_;z;Ŏ_cS0'`ccǣ0Q:`jzŅOǥc2vw '8I|p ]y up6dO=?avv %v)N/ t=t#o7{0~0` A#iC4'!?Vx >[7&o]q-xj8U%V+x2O0?0COg@Byˊ2$r_Jd7 C !wv`ǥaĶ|B ÓAk02/CF@~$N@ "ULQ nEv{= YCLr6/gk5SFzb|i8=ykr9\nN\";cz.AvޮgnA~'{?Ge OBﮙZ@l. [0ŃLݛi,|1 +޿\.'@>K_zhv,Ď1_ÚGټ=_`Ƅ:f Ìa8GI63j3/5D!#E OC~6#% +hAG':z9HtƨY@.dze1@}D{Oc)2bm ]bXi_zHAG":\AG:JXz=X2 DZMDtDXhkgķ3ذ8Δ}zexߦjjplЀ_VG4Z hWG@8S-AZMS !>~Յ< _._J6dR~Ŗ^Kz#51Ԯ8u:\%\aj +oQcx'.4F,TM*UEnVeNUXnQ~Y]ѻw7 L=,vڭjXbV%A45XToWD5jU[UeT_QU5RJSm +c +σ>:3tt ]|oÖflk/ сfS͡j[*骰Un/T\%:G(W1C*ʋݤvܬ}v< ;+9pt6CT-5RUZTx:U)#_; ʍ w$QV2e&2$Pzr%ޫ_rw:j@=ʤSul2l-I TQB< 6'*/!IrsXJe&5*#KɓJ4:ܮzXIO?+cZQ-TsJ +@3T9Nt+Yr+-Liur+կJJ?]g)!g\x+GK֢cQoP1+7ÞHmJMwștb%BNZիrd/RlZ\dϹ 5?Z9,chYA6T*%C +BW`QǮO=)fVYuR4SdJEoQxnWXQG +/FK?27jPB{з"Qpʬ*[eŊ(QxyZ>KTI;P~/s˾"{|@+9 Nt"4}PTU"k, ++&N5Nd)ƣ +@k!pѵPA!9!!{B?ŨC٨ISTНTJWKQUhEAM6XIAD5B3ܪ" kS4p&&HBsfcuPYfA k>EFlT#9@ +lgmgA6ɀi Bƞ.|d @: DdO/4 =լ 쬃7Պ8x&hLdaqeLdF;װ~ ?Na#[%AdOՀ}hs*"F1P(1]iL3B1#4dd3@=2? &&wDqr6l~ꥍmwڜ1$8 aHfŽg$ }2cIibs/?@*C&=#}nٌ:sPmNI0Z7ĝ:U!dCab1ۗ ;*dnqƬD% +(eWjBo%ݾs`ɴWV }2L_-dYYmD">X}Iٜ- -t~+M]g5KrtجF^E'^Ivd!}{ /1?3un6]lB sٜNq3>Ga^'Fd"_Gyi]qUa¿!M̽/Ɲɹ9nȩZv8Ng?DtN?FE#*Aw6m o֘v3rIwT-!bٓIk8U:4etg5AS?Zsj^&?"׊h$&4F@65;b옭&tt w"#eQ:̿Xѳ@Itիs0ƽ1oɘ~71K</f'Fa:u;aT옢 +tԢyU?w{iaVO$.lIt2:^{i7S!\0#4{C6b2}2>Ɍ:rQFj%zӂ.F#gǝ35 Fs^_1] A?zI zB510 =)IGOz +@)zv`3֨\ᱽ 3 `TƱ(R,sFt[5"H!j) Z w. C (Tu@kUجnMViL␵* +٪=PA1p| yt΋_Դ %~. bjtG4-YʸWoX?Ą(;&R16e8IRZLRcr)QdG&*1nH Zf܄p):$D1{#1Pݠ9>0j/{ +-[rx. [2WjU)JWbB*RBGKj#[SK [6:SlKqȑXgbyN-=NN&+5GVrY\]tݦC7E}ȟ>jcOe8A"\uE(:*{ze)*#GbP-Kf"5CY +ڠЬu3_Y)8=dK#BDY er3.HI 1Yg**".;Nn"ܙ +w(,BM +ɝi +[u +ȻDy7/^?_\s3U"l䟪3 $sX(=7@QyD*cS'V!${U@a g(km.$Q/|{Ș<k&s|{@9( & =($RVF˯tVxrrf9ܦ̠\ P +.%{,\Av3԰ f *{qhh[4RUFȿ ɴ&ɷjV]o-f@kd Տwkvu!{ |eW/&6Z* + _= ^ Jcob7 +-_R ܪTymS4C`!.MdmMƷmm<^{\6'j)a RS+ {ܲŵ;E7D2/&TLDO &ɐֺZ;xsM@GW:Kcj`toԕEp YÎd2Oa2/Ј)S;z|3JT6?GI 2QC1 ;Rfaǜx_| 05 +x3YidfY}@BSz#4`F8 gv 1,7J8z: }؏r&Ogc9,716s+60>6y~?|]F?6fېo\SeYdb(_BB;vb.NN: +_dۙ.yFU;Hmп@5wog=(;ƝɹʬQAb~}񲟱rv|uteI={=1L|S={r/0j7?|c|N61OP/A<c x1#04 xǎ{aw<$` ۱dyu_g+ˬ?|{Ra0(Ǜi0v7]Fd#{`OA0g ?J򞸸`ڣ+u5wVeNZzzwCsȳfob{$rA"g ?`5!݇ۻLøܻc!b;0`~3C^37`W/P&[*-psMF؀gk)k _E+V+(mEg*3CM@vQs1Ɩh)'E3"MR-9''1'夘rpw\O~+~ֳ^b/d΀l{Ãl ` 擰 6#/#[`y9W',3'PGҎ&lk 8cDz72`>/ d0ق݉l9OP R=X -ٲ!v)b̦`d v {Zxfl؟{K`{%2OwLeȤ%Ř+cYYi 80.S2X)LkO=Y} ?@]le*"O.$IdP*8~ :Xc{ Wگ= XZ6k`[ g>ǀ\}9#,ߖiDi菩1^z^8@#fsWs؆ z.˳LߔK~a$&C n`KN4N#/C?4CFijr7@n/>r1MDq 9}Gc|nIl9Lg poy LhGS9BԊړ;Dž8!lr.$'Jr=Mɞ ? H%k~9Yہ;d [U/fj/Lo7\Vzdme@Vdn!Db2" mI`M|"afDW-2+$&2#CۿK=0 b p.vY֐D&$AD|s98^dG&N ) 66w>HzX !u¦ zq;m][X-|v\ ^I`HB';"$S Z#N!}7sc`qPq@q8pǪ[UKE,[~fS]}; +0k> ] IfB)<2=Xv;^L i*T//P^9sv/_3Uwi{1= {fozT.L$7D}ؠOcC1)3@S[%xnӂ@dcD3a2D7 l lhٓ ~~v* Hfb_<lWrg =~Z~E5#YXX3 |&@g]a)HX\6? 7kZ fNՀ< wO6GsD+'$қ4BEX\ K?bB, |0|9"y92GKi)6GwH[B{9.LC74:6 *Xm[uVАuxX 'ğOA}艿B.{hdϜA +k_L=!<͜KAl}?avi!'6#/ +|J'5 93@b&L 'S٠[:Yflxc7=\vcwA.|`扝Rm4mߩ6۠b?}6̭le;{'AlwtTA cJ60CP5o^9;}!}lXKg>kmK&{[{y-zȇ\[ A0^B#$ ,W&b7T!v}wrN'HeT+?304t +KHI,i ߖP4:90O[ gk!*>Lm8QPXT#Uh:"3ܞ݃~6GXJW}~&k!#aσgAz#ȏ! &t~?i/::q?{ow/1v7ÿu1A2d ՍDe׆ И ڻ(zEPW՟f߳ϴ9kW#ez;J<{wJ 5 {h"(@!Is0tdO< L B0 >_B{t׋꠭*gڻ(n 3 )j'V:&TLT)PDq͘J=`62[;[Гϣdz@{8;NӔ!x` 0lgdl{ölφ6} td+XRICUcTZIJav.Ak%=3=> ,;vFԧ4؞۳a{>- D)dFZ) n2f9jnFReL[M{fvZ.O'cx X<.ÅhI zgzq>Z:1v.F\ȹ;0]f%auu@nXX,WA Xv S`π4O,Dq&9^ŨOx6Ao.#u-2`!^y3 @ 7cÇ |Lisl#ވ4TD 3f?Ğp6hؚ.\`aO3 a @a 7rC?\.ygN ' +N9^B{+/ںw7ޛ +>^C46%OCyi 7=rs7 +3Io.9-%5d,"[SgB|Ou[5n,c*餂/^OsO\3&Md,$'#19Y9dk4lf1x5,MA279A$1#QI kYgt_O.Νں|.xQO#K\pDd͑ǚ,9dq# 42$ 7$U$=C">fAOI4$^K$,kw_ZZf; xlV[AȬ HbeH"kC|[#ڙ 1y8c0Bap +b[w9^}ej?>'k0zK .{?9XlM>3ȉ Obn/{ uCLW1_Y3YP).IS\+R) Sn'EK$'>Gc9)@ޭRp(BpۙIǣbOZ?V7V9__zPS%P9*卬[iIaw#?~T0y >t7M/jӬ>_PP 4,Fz*9vQqc76s}<~]MC#PY hv|,#U> +Iqy^A^̥i%k4KvTCIl K6!.&KxyT ޼A޶+=Φ%uj+7U(\Y^t(+S:!MI^K +؎o[7L[oiC3u+ +!'[:2 I3~LU^T rmysx/ws[4+h./P֝' HL!. KW^{T\̵$6\_>RRQG!8d\N O <2%ϔ(3W}\!޼˃:xU5[4%-uI/e_  # ͖ ʳC\CAfTTx@fKnGmY%!஄h$"//#ϕKs~MwI @]UNim*5gt!4=$tqȥ袐Biw((H G}0wE )/~MMF͎sUZC.) i) (v:ŲbŐ"SE+.#'놸Y'6>QTSPVC|X5\z!L֦(!a!U1ޡI4QSa}lUJYSXY7Ԋ%XrJzX)W /qvLȔBZ-5;BpZٚ 5i4y_J>T-JT$KaM|a} MwϹ*\[ p8ڤɑdɻ+3ibd'E~*)Nb|ŷ_0~ף]EKK: +l{]ӘsI^#ȒeGcy*[a">O|a áVwϻÒ*[!&M~p{M"G>P)O_NUg@s@ǃG\rXU͇ŗm|%~߷ڂѮEEa}c4'zPOYJ!8@cf@sRUUʛ)7#Uq7w߶`ng+[ 7ݤ)9 sdyYLhthRtlz b6g߷m6._Qhw}S%ǘDoal ? ;;?? +}:Hxh)M3w[lv),{B7*Ju@1?Z7?4DgJG"2dvg=4wr$_]2Egh:S_ԩ^n{ڻxgn*tw"t+1- +˒ )ҬЇEn] _tJx^]Y٪)Sj-"iWzaHOR~p˱+P"OWi1z#[ӟu 66,R5oτO) +_W]Q/U.C}Khw oh? VU;gi(?~!UCRdQHW}$ǘ(z +a~&2v7VۤRHbi_^,$+_bk] +w!np뒫Kz1xS:%\U&^&m -+JREGH#$dIXâvqVNNOJhPtnOwNWk<])m6e-jy\*+WJ˕C/* p,g*j]㾘7{cU /gE,8:\sJY\+և4s xzDUUa*&VGL!ܜ1L*~.*oOU.qhms|T!J nnQn-~91Qg!s^c}7VDu&T%iM>^ߜ8ߘln8zAQq64FS- +>Wy2jx@c9<|^VX>gѝ)RcM*IʖsʶڨȞ*eJylEș+SꓩC'2Od]yPLԛ '&jCˢ;U;tRjR )VMRMLhOUdx_EXZ3X.;=\8RvTpީſqP`iPMkMSZpcCU[WtUV^PGD g&Z4ZNHpvHЃbB#Nh&ja8,Loִ}iL?ԥ/$*z**ձeQ#ᑣšq׋rX,}$]9`9xNzW1sM!}Mc${+gåaQ #bo' U*GRC5b9;ω:?8,mkZ2֤:HWJާN&( ^q3?&۩IW2 rX}x4pH{%Mc1]$S[/O$)&@>M;x;)&z|Tճ&93!^Riz[Әs:@Y|8Uy=?%VvRĝĨORğM?6>o OY}jC:8diyKӘa&/&WS-(͔_-HS\φOO~lrܝ37bSGcΤ_}P qи-kwuKAMc͚S5r] j.{"Yy6%VLrU⍨kQiW _l<ӸWd^\g W[ ^4ۤ)9Μ(ɑ]˔dfFUiTXF*FxkiW(~9/hk˪{YQBs5YOn?='Jrv٬ѐ!#,=~9^3O__WYnKo_QUQPرe-Y*M@顗ҧkf2{5ɤ7+ͮ+wN~W{&93IqIZ'wĂ@Q}bYXB}ƶωocoً 7zNi}m ٠hEfbG _'2t>*!A-me`)urML>}/D7yJy/rۼ;#gMRkCg[_fwNP` ]t܃7P{zF/FϜrg2w-9@,v2\yʣjW]B/r|¶B5:PDo&zcbL w]nVet36Ϧ x+# +w}\D'%BJ`'9ϴXI9#Z)y:9c,So8wÍc]Ggl̠h3/Ļ?,4DEntL\'1ɂ;H)cr&9(iiha`C3Hm>y+^DY*PG^B&.RVCpQ&Njp!u2RC=7\?ܱܩF +]Nj Œm(ց0 Qq!=2a+qA2/ ;NFV]^d[# \E#׀M_kFeeڕin$$=0A+p;|DAw{׍ڐ3528{ B%cMҜ+#{DXDKy]2M~en0:{*w0dx2k+#`\AFd h>azn(tCj؄Uھ6{*28!e#򍲜d+#?K)? !)%Q;mfO 4I5E9Ț~ Y3& gECyy+rj|FPm"ꨙ8a>mcI' 帔:,iET]TCeub+MwD$"q>_um䰵Si l0V}ȷlsf5{);(oVi[(Njo07<'`7c ՃLo* WA W'w*6dc";5iX"JZH C|lKC4*7r9aR94;r}?>YǕwm\MGZ 87Nitpl}2Tv&rİXaXe;ָMޠ`iE zbo߬! ŷ(cV1Z4Bд mS o=|s e̯YJ:lu8ar3HB% (C6;H1N{9 {^YԘg+1}m YI X7b#wUO*=ct>^;@i t }kOq:ҏ%wWDIQiX3m|pguc ۍ0ԥi"#?sj'gɿLU>R#C_1^jEFaFPfڵ#g x"MK?Y.jn#ehԻCL:(wԩF52H]SoHc ).E0&I[R[Ron5}7ޞ˅[.> I߭|d;>VEk>ĮU7Dz=hɁnd7^("+ TEE'cJupuj`n|VfO&_\Ӓoj8rOMV#=H,?'GQvc;cDڎQ2}(mɜJis_;$̞O-7V"|Cïiky󇫷znixP e_a7}o% +ltYL\LO .*>.?'ގ:?5js<'ã\V 4^$NDcQ<$Y2R&#TIE`tɚ4S/+W恶mゃ^^.z2|/clv(AF~,Fţd#KEPdHLf̄o-]j ̏ /E~S.?ۼ=.v j Yʓ|)!#q&'Q a4B)!dk.0S 0kԀ>0n`,][˪g$[0㢽.a1+Dx2"?%|F$fţtN2BCQ6hE>lm t^7-pkԀe]<}a3vyKtؔ5yb?L ŅhLDT|G+:}Hu0pcaj7 -RbѰ7ʊM1NqA|М7x?)%bZ,ʟe4N>@wp/ZA8 P0 MZ%Wjc |vLM\hgJj=i)ҟ1 5R!#`}d^1>ZoAi{ (}mhXr\6_ o]6(a[ĝJKVzԓ 9>Sa15~PqDNbЂQ1> F߭;Xs.lCkcMNY%+?I+ %6URa)%Sr.:Acz\PN߂wN)ޜ/5`:`+ oB啧[>ŽwwYtK] BE*r2|TpsJH?w02GB4v|N,W gZWaTkĝ\K'z4P#"Q5!TosĔ>jb't 9U5" )!)vd7ހ *Ϩ?ČW -/M;9Oh#-.А=*rCA6Khw 2[uLl1t\K !hx}3e1͇z9HĈJ vkQi_*e~*Nr-lz؆.&QjyږV-AkLyWƲǗ +G aӓtma4Ɵ?ZF!HGi\cGkỀhX惪ŨEn +cu#N5zRo+4Մ4@1 Z+@T}h2J 8O?,W\,,rg񧨣]7oM@L뀥-+_?(ߋ0H{Fu7Bo(p~-pϞO=|eѿ!L{#2g=->S9I%4mB&B9]3;̚ۮǟV+U L܆v=!GW8U]A:*s!Rh8ih? YyZ!hGYX n7YR[| sg}h'JN܁t?'mI2K~hXAD.|x4NIE8YM%R-;'n[9^=XUKBqnu? WxÅYb&).r&=8IB8y)S,C3/ny-+pu`ֲ拏oa~?xZk#C#uÍ}CpN [1=d>pWKTj.x]h|ڽ?f ڂ=MoW:]U_塦/w^YjǧS(̶ ,v$ *& + +_?xY`"xu1 +, | _غ]{vXY~W}`7u˾i -AfIYy6Ą5$<(Y>Γ).+`p&wRQ8QGt˄`֬faHx)C۫醪͈ .֐x dOZH'P.0UG\n{`n͚ᶴaOjx)MtO\6d _Wu^1!T(;5IsN*LdwA~Ç0vv’!6=B9E+ _P:\P1d{Öls'-MxJ) Bvn#ةEj5ӂg24,z(VQy)rSߒy2T !#GbZ"ed4N ua hmoPPay֚a) /ˆsA+dP\kʯիa>f nV{-9E'JB$"BZd8H!#N5Ҋ)pojY1ROûo~UZaӧazyWNS;'ԘhDENN6` -R_Lw Ivْmiّ(% 9Ks2Ml7eF Iuym+?Ka2 |fM%ǦПd)7ztA(cͽv6{^N9k122 Z5iX dKLz9N:˜3Þ,%` FȠq.h \4.uQw=esgl5?p9)Tk LyAr,4|S;kR8T)]6ꩉ(d)?(# awA3ɬM9TZ3Lw]̏oǫ+.]3N=qpqu!yk#:.tRL;19,4#-hof|Uo0YrMZky5L`~v0-)GF_ţ')wd- FI%L"&NR8l+34hWeLՖ.%``}h&<=8ͿѳZǟ'4>+7\~zHQ/h'+YaNQ)K6ZN}}¹}}v̭S,_"tnQ2dCډ {PA@Cu>q֧5R[nι[N~wDžw{F8T뫚_64m9 +3,rgDT٧St̆S !]ivgm <|X>^s_6V\ܺe]wRklpk*6PXպ~ٿ;%X-o8J)*OߵW}~t:xxɪxKvP{7;9\ES P7T4 +5 \=oSx1.V8CV3*3ꎌ܆v_ߚ\BP6છpu*P/&hDnDo j3[ C[oʔ =C OsԪ&Gז3F̀SսA6F%Pi&ius F 7ÛA(+/ofpZbY_GT!%մdA@n@r ZC+QvѷKN$M2&~3pـ8[HV,v*L**J.:V~J]s>UݔGsZ\5Hv. 9|VvKlFީ#\<>Y=[(*.k:$4a TňVC~*6njm3'UݔZI4g1CfPly{>68RSyw&T:U5NYg(7K~&Y:fTvg1TY-Yu,z!iÎ PzTYS{(*t>R{Xoxn1XN(K) QљܒS vuGFVMkFf]3nb0s"dƑ!)b(4 J3d6Z<6ZD^r ^K>5iRT0Bdf3KħɒS)j^U'jKͩmIcY1b(zcؾd~g}Nύ}t:pIoUwE)eMz1M(O(# >ITI)֔ܺf*G4WPAm){Bݮ/ ;uq1r”yKbSR>b ꜮjIWBUeW/UE5$Ams28Wo _BbP^wn67w;?mvٲo11qLUGjY[ؖPlCT 6'm!sRĠX[BAqۿ-hv~jMm{TSQqvgT1_fu:6Ӏ5%h$MRc99#3rBPl^ +U@ڍzWo\G[U3diA?!'(_Jn!W>mjc +m^^EUCɊ׬xV \7G-A{1yS1m Vܛ(wo2*[U-fquXKquHKuuQWh3P"ҟ@o_}u%/Yk|oNۂxLYGS/#ѹ! n(H"{ea=,yH7G%PtIJu +NC\Ag((_>ɧCW?wUWz'ޓiqddpZ(FX|V(.'L27xp7 EBz\Aŧ(G ~4'߫^/$C<ԋHH]7;R%4%b"2)B +{"=<>a:V2r>W9gZzs'foI…կ>[*`)vڦ>L+ɀޡ!"ގIHǺHNQļ^y)"k*D}1>b>g23ǹ89|&g(d? 1"4@C d@<v@({f&_O^A3.LjY.FgOWp.r'B4yD)hiީyay_@:bHG vb;==uzTtC21NR*&rIϚBؓ12΅a5P#Rp4T)Aw)a{Ab<!HwLzM&]ObЮS{23+V"+k +΅5ΆφO#ĭ}bcA:b@ @G vؾB1'&ܢQHD6".7g#( FFJ΄ge=Y+!G=#g{b`" Đi8e:;YVD}ff&DJKO%g/B(Z!)/GCNEKLR۩ ա;X۾b> rBk׳{Y1&|%q9O?bxtlyPd0X^VCǵKKf 2r5pm9ڽyy= ljdc(,2c2Oa F$8|(A^r +]Q>S_R\\U\Yi,ǴTb[g !2ѭ ;B tz?/$aCfLw,%Y_O6[C|U > 5:,}Zq{ԟ2dxyԢVfV*V + |Nã4չ):nv 1 bX oޫCu15!wԾ (کbLnTTϡW1r + 9ZoҴ:M͡5g4}\S .b(1懠_ 3ᗌmDJgeW+BNvCn9YP724,zEiXtngq>"Ao=*3s}vbqw/)bTcR[lyZ)-KӘmHg5hL&Xd#.b5 =A6c3}FOlk&5Ff+j%I ],7$J*BuSr^ 4NClTff r>1\5Hw;Bͮ-۳Y遻];qh켋kϰW7T%ңEY[ZEWJ/*4چ$^mOב ĐCPu oouejG ^rvn#B܎hAj3VVE]6N.it>QWyZB^Sl1~[妥ڴ~[_=we=׭l[y/:G(=3tPdnRFI-hͩ nzCmx6Ji6ĉxz 1_@%PkW\Y[3m9h_{WqxL%$Ƅ<I +czSda]Yʠvc"22BRYZ>[̛B^oկ_0nfo]eY̦Mw[5s߶ ȟ9˼DMÝB`")~fa@/O+e=rNCPӡ =G "Pz1o?'V0<ްCdUѣ?\Z2\w/MD#0!ɜazikH,,5 +N +ݺE>p@1 +$>E|Ɋ5.zÆԕ?C$~#}-y9r1!5`DOcz3ٮg]V8mv>;<8q@}|1lGN,o+ao2ذ7vY3)[o#{^A7#~WIdK).(Ĥ2aRdH<011k U_m]ZjhA|D~˅M,_ٻq +(0~D_(;7oÖ Fa%U xk]QQQ ?^ k~̀`j1`,\^yxpw70~Ov1myy _nu&YBGiG^=|(}$8#qsptwuxHNVi·_1]䜴xw;BnY՚4mP%#&(c S/8ؾ2 <6p{~[7|`-kaI̐V!}PhGfKU܏B'Q(,0W$`q'\+rQ~|7A? |>ٺ@ޱvn֮=[%(TY~ "G&h`oXV/ίCKn^pZN~~+A-j3 iz;09߃![ 'B)ąYCL#D_~ (z/}Ww߷"O 林!g84n*,c}߼K Ht +8S@\ %zJ;<+IhnJ_~w}kpw|4;M^I=nzOJLN:=KE !1ęأk f>hqxgQܘ{@%N@9ᶟ*閯4cL"x SxO/N]"_;H=H@ kȞf@ +|k xJFp>nh!Nx+4"Ӧ5RoЮ{.NF/ROLҺ'i]L|`7- b Y)ۀa) +69q=A ;Hv8"OTr=PEMג~շ/s郁Y¦ދމ%DoQ] Rѯ40ۘ~C1`;x22/Ml{HZ r5-Ѓ]^Ң|%'=$2p8YR`R.k*}! {(x26DfG1CCj`9Φy_f>Ņ?H&%g0ٔk( RxIŐ B`?w8d6>UG窢FճI_a< n\ }K /=ܓ6qzyƈ {@IoY+ yK#Kr.n  #ڨA~M 2f(,vW{ 1 1]9~n𝬀qovxF|Z2)6a^eOD獇c!]}ƨ~Q}t:_T((N  +C 1drWF( "K(pu?yA!w8u*f?7rǣg5⡰^IsTD#DHK{%B)_\(c +ȟ 1kwoDAb,@teS_虜x4#z`&&HE1ղ%/+0]r)[&N$ +pb>_1w~?|Y9(lVܗ{ޔ_&)̎6@j0%x]I)DQ,u*.9]#Hs }> +b # @Ύo@'JmPjcQrO+eAAElJWQĢb9V& :sI +KCez%٤w)hCoprP+o{ZU{udMPiDl$3i|%=G&KU\rKEMi/ɢt(3)]LJw+iAPaE͡]ꏘjt6ztW5bK_ΔqVzY=ZNOk/vStZw+E+~f) vuk̷e}ᏉvWSzhuETaE|N~4+Ia++Hl}%9l/MatS3Tzw-W$yW@C Tc!srP=>6ayz~#]^:]`TemD< 1$i/*7T`9%Dv2)KNbu˒قT@C Y.ϡd˷Puٿ;Vk߿Fm:a^ЅuJR"*"IIDQ}i-(NT`9E=2|VW 1.9ol*6| KlYzk`K-Ll|Bԩ;}~=ٹc+c.=yvvqVH8~x.ꕋKs/gAO&8O NJn|I |@?Á +3`F2Ƃy$Y1ort{2yH޶v۾{3"ęsāV% 2`żd- دŌ \;&4Q(:"nG6(`Ypf>c눻=Lȃ}q,,QH>Fӕ3>!+g`AL5 L}< 7vskr8@2lLPhkJ;Cl&8䨏sN8"sQ{ [ "d0S! Jt+gx` hWwUe? $C. +Pf%8<"O%'KD]BêIN0j e`_ \•]5-$k"gR,:%]F"Y>AD,"2|u#=`yVP6F0kVYp̉LZ +d ,x!f$OOFsQ2s.F3d!\("U!p 0I縀[ʀg+<6n ߮yCF/_˾ۂ~F3GA`$ . ?ҁ\qFzy3dz%%3:˾c ^Ǟ BH !@S zH2t;5dV c4 TDK~m~l ~5ƾ6ŽmKxӑp÷#=_{qQGAϕtY4ȱY|6؆ ݏPt, No0 eQᨉJr,Pw,g˔>%ɒvFwJ6&ԧ=;Hp9YΟ Iށ'y !r<ˮ>C%rbr4XO]j*/B .ٶSҤc cëoK2˻p)^ᱠGE%vJn }\%Iyß"8̖C"5Ǒ7&wԮ줐)9WcR/Dl9-YxLrH𵲽!v6ֆ?,xT>q'UQOFdF:.RD9VNB,Z-V߷{Ztq6VJ}oņ\J;RWw !@y}XSE]ĽʪbK*b<.,}?"CBEjAB>, .E2i6ֆ`ߋkBN$hH)ߞPS9bCu1w*U//o.-XR0A:$3Nhl\ktk>}q.ƕZCeq 22겊 +6UU$*M[TF$mM͎RPV}E7mgy"#Q {3vWY[\A%GE! CKHD(%J-gz;Bբw(zj.seg$ '"d U{QyLGEu E5X4w$*ɲ$Ϯe5N}wUUsK5Kmz*'[I>Ӫ=/7?RXhPSB|v2\E:,sggs<,W,ǧy`@2Y'7xvn4qh+UWjJ;u'k7A{siNn|$wC~CoeGqnUƱn'oIHd6LaoKjMӚU6"HUAxl%FeN2q(ۉGߪnx3TݪNvCK.S*kxs^d1_TJi-aᔶ0ݑ]1sb'^űwƏ24h#O>H\Hz88;YnGq?̬`8N;wlOaxpzb=.=e~~'z#vz.{˿ =#1Z!yq"(bi +-V-~)v]Y~{n/ŭ?bSrm!G?̚#Qs\Hl%o dH+s Z+5JKaVjp.5j.<Β;\ep-U44 Z #õJ{06;TPre& w}쯔~{>ncp}xjr`}eOL !j7@HcxX=kqs; = Ў@=ņeWPHbsXc7xdI:W(k2L& n& ЂHA xVq{nh`oeA_.<>o6:O&FQ$W"OtֻOtzK:xK RF +M#~蚈C .f/[5䱃?9{6zWy'>GF/b,UBܪH1tH.C +G |SD t Lc +\«|#qLr[γv{+!g|I'|GA2>HMዕb"f.r)f d0Id( (ֈ:}_KZϸ͡{B/߆}qD&bۈݢ=a{B~d?Kb!t_3VQ⬎"_R)ob؝֐"S:q.`oM|nD]y}RsP:!+f+zk`wԖ7 Dd $[9Ǡ`"ZDŸt/esĎmiܻ~7eW65G=w1_K΄ [^o~Q:f;:;j8?Uyr +(6>~ .:+-%"\)fZ aU!u& < e{͒ Ҏu񕡯ֆY5,ß?܋eX;L lI{ Cm~sFq0RNdƄ\遘6Koo mM +kK]ޞ\ёX_*8upG DDϔC\9cMbzOOV8]}$;oZ>(6:qcu2*"dEdDEL)iOʏHȋ~O7ODN.KyUzwLk=eӢ{,ݫ[Ϭ1K{ cJ7T'W$'Ԧ̏"3'%=;-5;erV|GbV\g|Vܫ@ D[ O +غB.Q8b1!70V_eul:kGyhSQ*7;$,)?&=+!+-LvjԖԔִ)III A2RrȢtٸHM{rP^+N<͗sSp!%%ѹʼnwfe̎/+6%#>5->eJBZ{RbjgBbJgp O6HNߥ3dei(tV||^O)yRW1owQY*,#ɭJJ-/H/J,ޞVt,KZ|?+%#"--*ertV{RLfgBLƫ@0Y;b,&ɠ?Αol-e]Z=99'ORq5ݾyn?߼MqrU$K+dWmM.iK'w$vƇ缊H$eP=2Gt\B<1GƞdϑsNN77z9TvHoˊ-KmْPˍTߚ)~ړv$v& E6?N C<>}g[ڣ_7F3E'|C₂f Dvo} ѽzΎuDcD]ÂPr]>6xzdq(QiĩJMqV}5neEVx5;dDzPMQcעGtE{ltG7cQ݊ĝF%jq(Iġg +;Oyh=>eEqM]u?Z7+ޗX6/^&qAB;N<.'S.} FDk,qwqq"<>U]CqK k[-gpHyҍLHhL=f?Hsg/oSujӵ>ObObƁaAhCAAv('f{*Qtvf겛m[7ۖ~w{߽}vl;^1Yb"Qj,Q;[WsLV)s"z~i~t3t`fIMusTdbYs.]TA_LX^I7 49?-Cl&KT?R JTdɧ,CRY?lRxdi~z: J ~Y01*53baZFאQM{H`;ٽdFz *D~2 #"T.fqE,54 + w.V`J=]YIkxvāCdQq rD%"t`)xCk4z* LrT{8ϰs<gup%Ԗ#_}/N8L4ЫC bIUn&v2Ⱥ{A'~',Wh 55pR}*p&i7El46M"ok9lKWzjXmՇe,̛av/La&_H@sWk~p]8(b +i{5P epІ}l`]g݆_n!j mv UM:IW P[*`</PP}x%k Z[079^A +\NQ(Wi?)O=>wz7'9cu7 gxF u9x×$PS aa9mjI0+ +^Co % Bz +X:;:QDE}yS~;{d;9 +Ӏp +$ͥzNk6ԇ׆NՄ~/xcRp2$(UJœ̖}Yyr odG.%8 $fy-鉪?v DKQ/CG#>FԄ + 1\1{}/S{RH7x@]^.wec{XGecvDF4Et #k#TG*>DF > +BK >>ΞR;H_4GPj5s͆uʗwQ{G9Ibudl㶦Bk#wtTĜ-W;S7"(1|{ܧر. ^M>H.vu=*wE0XrZn/J񬽹~uēMI8),;q,t!a,fBEL&>yNC:ovXluR<;Ϫ2qoYG]a +*?_]V[/6+D|FPBzȌ)c EػWɽJB{TkCkOxv6Zv)p*O)-/(,ίJmM9s%!>]\BpLbֈ )s429cxrXB! + {wRuKu* fOuo=Ǽ)6YZ]PU=$tgd|qsLtȢ7q1yq㷍.b$BM6ǽKН3Еj"}=&+rl6i -(h̪M%WV툈lVtU V )+Q8Y)<*o,t! BvqmbU=8"tjt_Y62-\k{Jޛ̍m7EGs x5*G#?| + - YsHYxz^OFEЭcZ(@>OOpIE)<ƵdɌ9ޑ _nkl;n{c8SoXA xbh5ЭNatG CRU]K.8(s>1M9ŷ w +??{HG@f #O]&MLy5|_GGFϰFBɨ\Bݷߥͷ5U4]U2d'sU-%v8R3"B-FEƫ$TuO KUS$[ +zG}*[_]ûd]wyV{lO&oX rB=pIEDѶe(eb1fBY8lBoIge>mְ>;K~f8~m`%Nr2SlDk׃ڔo/u&uu?3( 1ԌɃq9v !"(2B)",l 'mFÏoYSНKCKگ- +`qR%CSN&c%0|6S 'Ɂm2vN,[K,z>]̰Mb`(V`/m/[0yh+`]DG0RO=QXJJ`{nΙP]`۬6>bF@l ?S1F04[[0J?#X\_KV lx"`&s?YT5pz? fZf;M{̦v^Z,-Ёn9U\~~?I flV@zȂo,'^c3Kwң`mkGF#VgQ:?tH{4k@Y7tzǯ#KﵑP܋H<C]u͓AQ^޿|^;ްk-_zRwY?e{3W{Y| NU~lw>4wqq1r=Q/`vq\|.g3"٤ȓ SKdzx47IrFF M5G_nww9NfIWກط#cJ&vl%R']M_A[ybZ߶@JOZő$,х̖FﺰnMh/oWȐзaSe|J§9E^مnulveWhjU:m[Ֆ+.W8xwgHmMIwjJw+gWr*xeQK"/E.W L fsv>A,v9.\&+Wkѳfi½fMkOVxt; +B[rm3Sjrv&x%Vˏȉ=7[VW^V7nf4'3v+3vs>ƽ^٘R 4^-^7-E֣-Mof" 6+/.m:͉ONH]Ι}-%6{+A%vߺ[׷7(4{j +q-Kq(e%q +xS;1mS\A4G1>5Ż XwA.%GН"QQay.}Ե{9eiV6[UI.IM|Msrf³gƊo9$dݩBۄѥCqI{| Qm-W7t:lwW+n 4hIlw`wqwVT]njr+qJ93^ <$zwh&QIq}JX ҥK3:u2'n9-p5Wxx4]ÌpX3^3^YOnwow| !7۵]j#Dt_IՅk/-;m!E>ㄧF1Ep$,p4-+s:X~ݵq*˥c;˽|@@FosMq~jU_R"]4Ͽ@]1$ur&*d7ƭgKOn+.']ǀNե\$"hED'B{'ګ¨2Trk+1年Xue CטW8J~Kz̋f΃M4nk+akzׯн +.b?P AyѶ )Մb/o"c*Yʧ-zc'tYNi;P~*lDh;Bmxk .!q? +~+.E))kJ:Ivf(l;m)F_l1&a:Ñ4 \FНM[hƏڵj?:׫}пa t,6oNS!OOx7{76_{83]KsڿuZq~mߣ ;O=ܣt038|r3p;p?H%!&b3A_?|}ez%*be>w/xܥѤХr]>ߝt~iry3_pS 8 +懙`fk]g "@4-GQ%FV9?X/^4:F\v;hvcqy($y}lja|g2WЊ=e ĉDmM/{"`#_vp?Q_n9Nӳ ;ב}X>eo$ɓ'>mPd/پ8JotDaYf Vڴ4wl;\t{Rٹ*|v>!u?U}^-X.&QA^`.1lK'O;!L`l>Aވwg/FMg| D=ڱ*W#_*1N_ӓp&W#-X5I`l^V-(r,hv)dn;v-/#379C]HCsD"1U*e@ђ ]e:8-ڍ鑆Sw&e +űN1 A[{G`-=\Ӣ%MNǴ("-҅|!T狡5+nEҙ]UX:X"ZԘUfPkVJ۞KM.sJe%sK??=!3! q 10Ļ$ ^fУB2S!/C rĞZ}C*65jyC(%yf9lF|j[L1AԷQߙ`D'sL"8$|B(}M·ne<5x6R {cM`d2 {ۋ.%ߴ9Xz<$ V +\kִ zKPCE\sW``r kE,Gg=Ʉr3ac-Դ]zozl@ϹY w4 mub@ Q= +KNrX%'>vtZ$YrB-1;d5usꦝw}=k뿹P?8`d?:&N0,$ 1r/Y_rN w1B~ޅ Ah9dy~\iri:B+ǣhtm[=6QwRzrXPpUoA-UHaݲgϻ-~+D,VTT9y7Tn69p5ZвZ:[o"r +ԃ-tvt (#ͻʄP΁VG.| /k W7oo-1}W+jK$!t@1f`%`aRϦ[?`'qp_4L392pbk`:T͂s +>R +)? t 6kqx<p( +(f h0@ 04х9ThpP n,g\ʷc]E2ѝB7g>tGyB0_ +%f4ZȢUq9e٠M>* i=4l vB+/C/"w^Kx4ޥ}nCm|GaǮ}O\ ]uEsht:޽{C(uF31ڂ>E +""(_Ybuj5hԹImI[^g {1ߜ^hz ͎{ٔ/Cӽ_~!QT$m&0?&ٰ$ ,8:^AT9Cjn.S>ˁ/l\0=5Ȍe9܃ȝD\n B˭_T@rxrt5gNI'CBҵ|oi?dJGCF,MOZ>o76!h;FHZoG_Thi(q"HH{vGvGĄ[o;lx8C0n<%lf~TprxrtZG|\ )Eڌ[Ŗ+ ݅KȉU>9_|RIcͼ+lFoqw^}e0[\bEUqqh5H`0›bqxT&Uj)\бERQɚ;s eqF+,G7 &8'wYͭ'{w% O<:?u$k[:&SK:3>k <~x\?-KD*8_e<^ 8Y+4\i(AstAH~2ڬj.箴n){jI}Քѣ) е> 3 8  wJYpR!̩Z;*oɱ%Jb5 -(ʯmpXҚޔ9ِۻ6Ou}̿Ѓp[.L8hX9~yoTzA8D߬d?^!1Z8Tǣ:oȫ2wܧ"ܟ|^ey^e9A`b%W_._14 Vk ied'&V*Um^(+:mYNSsQmcyeBŵ vU{e/ɨ8;5Ǫ@U._ql3>\!l!̀`O6 \%ݾ2XsV$%mplk\3V{nNX{xT螲RKZl0i>"msRk[e{]n3=b-]j9f6ӳp!ժj0G#]aӐXz9j/Xjӗc[dSi>fes!=na+/u=w [aنQ-V<B= ߭a@/OV hۦhjή(xGxSbHZpLä q- 6Xtم wZ)pSgk1cp:t9{SP?אw6*PۘYV`N;"Rkl+ЏZflh:+ѝ>g7?km7"NA:+tR&u\vA~db*FO/W#hoN}߉#AqS]_\vt݂ngd+^Aor)@QdSvHaWD<^] |uervW(\ݮh}픢'X^BUn~5(`  +к `t1' ! mQ^w'+OL,lmT{A*QL<'ιO(mte oWLL5t(j:8@y+AxbTi3S~n=wgX4==e"mb1~ݗگ8/wP@9 +jf3HgsNR%(ڻmxov;0$hAh:,z21!1 qdbC[¸)S/vQ~t7/clL)GyABMG}CSFk@g`/K:,&AbqxFEET[>wGgMs>()ZP8ZQXLyaJn\" tq 1E1P0 -cD g&*P!rY(SFjXE Fb')?\@{/t/t/r(4 ]SrhlBLsDuoP%JlTXB4BϏ +CVTEDエxxB%> B0**囐0̈3&0Q߃:!,J`F\zuIƈ 0%''/(YE>'5A#5c%7WeKB6d^?V 2A]IF!":DQ( }})A{={ouQzҿM)GoCm@[Z–aBnZY !A9EѤW MMM$> M~|M%/9(eSA{AKrl[roGmg•fLWMgw]j g%X=JkkїN;K>sl~JÀ#r{`_ID{k8=]".ڣiT?j3Azs)P-BLl<دB&?k=*<~t_p˭O J߻nUuϜGT/~zY׷']Q+j!P{fN +|rZO*|c`<wb= + 9$ZvPk/*]mU9ROi͓cZǽh:sAWQ'ިlЕߗD#C뉗 ,ވ Άy;֛y"D&Jϒ;Zt"dɜ kM98/`T"`ncF;5 xn5@4 Dshp.=(3|/\0֑(%y!&!cMf#6j.@i_(rzdUABT>/Sq0<Jp98w,_d2-Rzor®9c 5Vl3f<>rl rE^n_no}^w{HB(4_3Q \Lrr)0dͷcٝ&5e~|uUk8}f=k,c6V9nMkekCnsZ4šyc}ڿɷwe>PIb=ƁbkBORscST3s֤Uu֛HnXkM`ݜö1]}uWIh]<[UIh>;):ߒ_,f~8^* k\R7MŁ $eju,*3nϬ6[b8U]ڠMM6KR:THC[º< yey*Zɻc.c±rr +rJ `mpZ_$\8^k| /2n̫4iZk[9j_aQ7ř3Ѷ8 +gL0W|ZʄբVFkMHTʯX;4UyQ^}Bf -,*-Pױ c~S/vyhSV+A˙`8$9TSw_-wliTFc{:/rKU$iԖg.-[`TQZfZƲjAQm=Yg3 ;d.dm +*{ ;YxNVy/RNzE)@!w fѶƹ2uJ55 :.ZR)/oe(O+Rz1]K-EJ+F"i2gk@ o Skkwili W\ZژUT_PWdS,Vet]B}\ _6~ $,Ar%!w&_hOzzFA-+Vi1ں-X+|%*:CKǨ,lOkZVh8ToɋmW?fY.md:E^t5rcL^&H}87]=ezrU*|8,W~Sf{^bzdD)t'fLLK,5[<ھ*q*O^p+rCehZ5=Y K}+ize8'QG\N=X (a `ʟH>FzYT{ +Hōdٍ<fVѭA>׿}_K~(|Pl&t67Q~9>哇G%| 6p~2`@ 1Vίk +CqCqS +ӍL0Tz,Vf2BB(4@Er+X0"}!گ@%PC T_(u ?TT) m3 PD) +H&MQQEQ,`CT{Q$jcרkFK{1g (އsuiOdsso98ۓSq嗖`נԟp1sD\!+-"D_i62& ufKRևTRfCH7b!"w{bMEl})G߇D P_-&54PO a @ࡈ&ʾQ?ǝF}}XDvmU !%̓HB&U)h +x08fܛcrY 915?LysfB=,VX`p_߆cJ3ߔ fq +,uMpL?1c!1W]@ǚa=\s_ z,|#|-,z)!~.+~*oTx,_&]ZPQ@)/?xO~V-ɯϕ~TёI3Kr~wsCvG$6ЋAثwagnq߿=p-s-qrWXW_)U~ΧU/\W߸0]qsܙa}{ R%FÚCqO}swG J<0GrsU.zԨXvνY[U7jrߩu G<pKo; vN|݃o {W}daȞO2GNw-?Jx/^rwUO~ܧR\ uz/զkvz3&of{3.mhml jtG!!LoCQiNWBo`щ#Aɪ'^;LgjNyo`wzߓfn{eҏY3̖3zD&"t3BB"TrQ}JFKkn 9ICpa9&k曭Zf2Ͳ%plyW>^ĬBc-b #EOG̵X.ѥXEv6q]cbC6EǪ:5|ɊQUfK,6Y5Y !lB~ ث&ـ0f5;f|E]%y8'4hLv$6 VZrl1KcsG.]a jU}5gv֡*Ce{zMd̪'/ 6>2U?Lt2Bڟ*i|{`J-)jIcƥ/H`\WhV7veֳ͘bmbgDˣw8Nij=)11̾4B/|m39YֵF滔̱̇/y g;q'xgSZ֘]_a<')߼:qr veMq'm]ïҐ5𬟃K%G iu<pqyFkd&WO3L1H+MM-<Ǯ8Q^)?qKģ}rN)'lsY~kЃȾQ{7 +HVr܄ +}$u"rWdM2+*dL)_m>_)+OFڡ~3>4&4flg,{k/";֔hdmZ\j-(uMR]2\hfyaޔF%fy969UvY㳖9fm蓜uoR>IYz'e1,搜R2mOuhTdX\A -/?{ qa*ӦjN-`884("z|tԉuIN ypc\rmB< Ƚstԯ@FUf4ʉQ!*4"X[2\2zEriDe: +-0]:ħ̫yS惗<2Z,-dt=8uE_HTkŭDEIhl6Ů}`(*ҥCMn=V׳m{mXPjf趒2c/(A֣rDrhv;Q""ZVR +nD#:m)ӕ:s~0wgxpgij3GɽTŭsu{s&~_@֏}63ޛNSyfJ_1dyȡ)[wF< "4) :@"4p v8w=;=R,}dHÑ $G+d{T{eҞ%Z/AڕD#&v O4yO}NK91!v+9"s\$n|Y}7o-ί/ν~˄g4ԎP{.8gz]ُJd:lH?ې/}'_FFDҽO:7Hf3iFϓW+4όiGgP{,|j;^ LdLs]DP4#އI)?EJOIYI&$zO i!\}5~#^rG" 6AyHGoH)C +qDp#|?~b(<٨? 3c0`_#2%FHHA zA_32~:{}x9,ؓ1ᄄm}C"'I,k,`d ~0crbv`KLǁzb9&1 +8Ȃsa.8_p^1B}bG/bZ$cX'c|LYcZb\l}p.;߁cyqE_bfoknATtt8T81 P RXv,YA)=?keƽVa+տ,Q +y +9xoܵ>rL+cX (BP&Xk{NAi5c[wM?bC-&x?0Ե]b6]{C0:Q4 R{[ܟs?p+3}cCë=G- #&՘ 3/7 ݜޣr'bv?*CZ-Gy}E]˵-MMn8M#[yk&>gf3]ĜqI#{Cus{Ws/zׅ^'y wWߒ& ~r\q/,ayN9SN8xԑ)vdʁ.rswU!r21OC 0ntt՟~q .&]3߹Lu":R%>RpҹQry1絊G7+vޫ|~ʻ]^paj` SuOs<1/11oezFmOKi`_4țɟ#810Ytt`a"2}{=Ey5WSC1g g]C<p݅mcic!Mpw~Y).Dqhژt\YʍfD6)l4+h(d9)$_E3};OQ0dG8NBk%ٖSECD I#$u"T$UOѪҭ[`P6fؙb̋c[Doʏg}:7,'Yyn 30룧ðFȞD6UD-i<ޚwӽsӆKfRLUHN*K-M7(7ٸ(tb|En\,;:k댸l=,39)|p<4=@B djPKL(W<-cڔ4ݢ%ƹ)Zd$-'Y&IN< [''2X$230^a/`Π:^` ^NhN73C0=WajnHiф8͉Y):'def6~EJ"Yb넴6imZǥ}ŧ1TfL{z:{a I`d| V[J؁(/R4D\RXP71V#;?I;3/S/=waJj cVYdmztox d1,6fǣQgЃ]yȿ'P[LT=IfӴ)T:ŕ/.M əU^?z?qDf."#,"ɯ$A$aEM'n;x .6=l{ps?#ԟ (=:ljDq sa`70D^ëW({6wp3> RͰ.+At>sļ=P +{ sG$骋Fh%_g!] QO ]M^> yٖOcZȷZ/vķuo c`<@̂zh6V Owx袶.2!#1Q0!&C%̅ `t>U;~IOo{`oh"kUJrb + 'FAdBLԋyS/Vzz^'D/:yO{x3:@7#= R01I,ƔuB<>kx>/7CFěx'=Ǣ.D;Y1so#M}x<1QLCZHeB:It!=.GUP~v=tW,TM_U ɸ/F}k}+Ub2dp65zaf[!J$=ՋR^.ӛDw*l@5Yo]F? ÛYicƟLp`oL]胍%9tSpH^'8(_$/_!+_'#&%?,xQx_ +d=wq->uŏ:}O%t]u2}tٓNk<5+R"t)ms%R/DedKz\(ur+SYMy?0g>n7wm? %7Ew=r;p6Lv (^Y*i󜡸ƣFiGrr=vHz|-]qCZ'SMT{uЛNxi^ ڏzq}u5CD+* ɖ,RԧLyL&y҅KxhުY}Dfs>Lsnj ^B; ~dpvKik m t nU?"0T40FdxdQ@Rc@aMWѨ_9ۯUگConEOt4  z[/67Yv#}an\s)4X)nS<7xBeU#5-- \7%p~i9IAK>1-W C &ڄ׍R:,ҚGpQ^|}pam(X$ Qa5. - Y_fPpbiü sC2=k;dxΎCX4ZZ1}19cձ!1+TʢӤs'EkEDG,2?ck~8;v`BiҤ)@QQXb5oܴkbz5$uyyAkff]Kaa+yQ'yQ-!Qs~b>iW%aYJw,NuAchɼhuuR*1S_P`V0ݲ$ƺ(6?n}n؃3b?!dĊv63V&Vsp>E,zt{sMhBmtVF*=BU)KKӗLOI^`>=iCjbcJ.ɉMIms z_dS<[ZnI}asQ܄)X]~VYNfEf 􌹶)Ii9ƥsM%.MKmSEb/8ߌP Ȋ|-sը-Ƭ>*&Ɋ +C꜂$mf~iz^yJnUbnM|]8Deu<%EeQMth9%v u@k ԧ)jzbZP\6ZRP+˝ȚJ/פK⋧[ZG5FO)%CH]B +~mXhCn}/vQk9}/}B2{n~/4CqUWB֌ )u|e6"GU^j^>2lzklv/g0gR6T ,JD|Z7 Mx^!XW,wkQ o]ںQzPzM;jy%Y!j[^pcn-PuWPsRȧUMv$QF`f`VFnǶ^p  ۃ0=RҞ$ ۫$Im"YfQᴉPۨKV[B/noG\I1Cv7pF߃s NP4zJGC~h^)8-8 8Bp8Te(Ov]_~/_ɹ@[ZAƷ'u==t;)i=lOL؜n:; sU0;fByӳO`zF)QxY{=c s@?Ls?fvCvFb [ľ2Oݑ fЪޣ׿O>llǧ;_8_x߱xȉB&vO^ſo8 ]<7{ꩫ4~L>7`oC9~4 7dqKgAΓ׿YMHy[;-uu5A~6ak"_JOg<bx/?01[߈N~_ӓ^Aad &$ZH+D^r"Y_9OAJߝ?M ğDTRR,%z:OL o#ƯAofXt50c=(>S]1˩:^O8:x~ю6l%sB4l9 1PJҨ[@rjͦ|, +Ri3uvpt0'8t/Se$P@.6z'l)sQ=b"H7I~dᡤ_KKt)>|(ۆ}Q#?qGn~-74"kh^ v~7 ۡhϫ9X8@|gT|}]U]\[xK׊xS7Gp]LoWxqRμi#b/-Ğ2= ǫl;㑝#,޵ 8ܶMB\)5j;Jfr\+ G b_>e}_:Z}Wupͮx{.…8+gzT*]+ ,uZ#v,r#9t\>JvYWn#[-8s9y̥vo.^&W8= +ű8<8M888Op&s)\/HӹE^ݹ]ly&wd\5b5Y"_F6puc5wફqjHO6G>@vv% +2%[ +%ݦK7͒mt'[Dn[GWt;Zv[[R"O#(c-/j{sM|zz=cchlMcÄcc%ƦJ׎͑,Tx){6*Ǵ٨nd14=|)w&^v4='I[b[3 m>nX- VFI$J}2K|Meʅժy&jzju^Ggy}n5FL:yĸ~˟dyͶl&?K8Nh,"]+kHQ/VWNLZ9ioiAr>267I舖hJ:ȗۛ`U҇oe[6 +Xd{9CG %CCsCeu!!Y 3&OTh˃e-A̋[("?W`єD>燱0WpOmY}f0rGz`NP$!HSK5Sfꊦ3-[f"'leV̰w,3~͈)g:5-]b$?`3ߚϚX0sc.vjb 3c1a11iSSԅEJ]NTiVui-S"OY%GޱJ2)R4OM>9B= M[]~xmv?gx$8afPT&z +$!(yAB2/!C_Ɍ+ץ՚6'ŮHiUlmؘ,ccDь㦊|<\gOS 4ƀץl|Ƥ6IdKTDy |$AҼyvj23%MII.%%՘'-4M\m152*Ud-22Q4J͈>*^GNj:+ܟ_~bCMc[hZJ83{ʕH@|ewV *wDU"%SBSeEzbEƧ|֫|~|y~\e/ҍ&ƕJ:cvSCPGI.I3Y"kSj"v(&׍ApX$񯍔&|j3^%gUD5d2Կs\ , !G$jG4MR .c2;^;cdx{_3깮AKcݠΥFދ6yx\YGt߉K݃>32g[D?0߉N<;={#e| a2CW H$Ck1sB9 }Ow\#_ ~O od|C<}UVf C=hKtRQûc +kx6jlg!;.3! ZP׌_k +Q+9lMfaPPEZj,XL+`'3px=R25u-jWbI_m8u'Ps2bJ<|̜|ĜG>xc7pnm.:[|Y2T. ". +vCyLTǘXOew( S$$xKZ7qSV9&[pEb7.(Ϊ[ ǵ:G 퀼E/jwQn`({[':x>=As4]h Fs =3TX9UhL,̔,,yj=5-1mc)+ǜQUxSMQU)*y +"ƘN~dA3uM|Ԭ+`X3,KaH4xcO0'BNΕ.WyTTxSNjVMZ*ڭ.:iRuۤ:[Ty/j@ds vRN~1wl?L2?YZ%+T$/T(T,[[kCw\wC&cUDI;r ~)cu![Ac  AmjbdOTN(O,)%) -.+ Η)sjTYA AM҂kRji$=5I +I( u r[܆-ᖰ~ +5S\0=|{ ABax$J4wJ,{J"3TVJ [`BEzXz| K*cCEUl|·WW/h-^vTPaP5( E 9aҌ$YZT<%XUg\35r6*.2."smDğQ.( ׹ >F+^'1ylK5Q-t)bPqÑ?VȌ(OEIdqELl*:v:2YӦ Ѕ\ԅ| y **4ZTEJw8Sp"D`T0.%lS~9vJrBF%FJ$IH%IcSQIy)%&7hi/h?$<6 Ձ*0JB:Dup>2Χ5&%lO&HKBJzO$e8#!q !:#L1U, Ȗ*kTiMIiLh|Α?L|SD5QMLy{/zT4N,9Klstɸqٿe\y&jg.C@5)%myL"=‹V섐L.R/SXoIԻ@6J>d³xrt}ȢGʑrdO:9r뽼?$ZDWBS *ïr&V O'|U5Y_%Jʑ.#sZ!^]>|hտC+~.ʇi|o5l*1l~OJ p&Og111~N^! /\k%[KԿ%Pt@(0Tc>cTjOv0mO=|F5-4Ѕ\eH87yapS 6Eb@S27oLI&j:"\|KGG(鱀%=Ƶq\ͱH2o่|rzZ8D赪/zrEU#}7F1p\.k~حiXy6f(شdY'n5}8n2ad#_ӛ;Ӳ?&fV[,,oI|`5[ߖݶ0zC)tDNڨײK2IݘA ?u=]'zsvz`W--~':\ c"NNzzݎ7'bzY9 EO/V=o>ߞ"C\ E33L݄7,ܵN(Nb_P5iq +қc_$$ev\a;:p3j 7؎|b}7ioG7 ZЎ1qCN2g{j\$o/6B~9ܤ8xv|lxA 21'߉s8 S`2Sw Ue||@>4E1 1C>_27_1&ZiT~vʍ#f W??pľ2.C^ uuo_ uoƼ\ yv&my271.7jb(b,}!~߀s/2$I2C?a"IYw鶿w~Ŀyl<; J;`Cyn#7 !qa rRc<_?݈?^sٻ(?2H/g04Vc, Oc=(IfrSB*jx{-ӳv0e'ٯ3'yxuU Z~3`aIϝ>EbF|jL Cd￘ZCg Xy;F_3"qw}΍ͨUBJMEbWg"^eRFrlvF5oJ}PAPEQQJzڀ^"( ŖdٔM6/dSv7M6M]2999}\:xӚ˟ָcOMf!b`QsZif ~܀Vqj/M?/cgweƬe<2K2Z<<.ryK]~~Z2}.tk?82;hpmwn+`u5o #mv02ul^ظ@ȐAg@\Q߃r:sSf|\}!س(clqv,)JlshVlqðqx@ :7:ߊ~OjgYUNk/}YrKd}m爃18Lsqè?FFa˲$ /FB i1V#ZZn}@HRI E#_R?s<˟,0֘@ g7ݡn C{xZ.DCxT^)Մ7)»ʊFFK|g 0Y0,7N'2,1 Q莰DGڢ]BcL(cbQ*jbEUFZS!+b:%1kE1[ +D5΋5)7ܘoreQ"YQ*1ÌeceN:c$Z) MBMb"1I'f|$L*NQh۔ }Fy rƍpsRF[ d#u$ +u g_oSR:p(56ˍ!Ʋts1? fMAUbHqGy?R#P/҅&-W*H-R9-ʬ^MFi)&ܘ89E6JN:Rdy>Sg+u cLUiH z!J38Pd"?3EffLBhTe(S26%e2N89)>&ũ4SFq2^G<$ur|SЧ;aR KZH2@ +WZ!jUjDD &5j +P$լ|(|*/)<_PxV}+dW)zY *}kk0GH 䊀&7ï9˛Si.^³[7o5\/H.I.M\eɥɒ;QjjRYNl~3o |VZs.: ] +8,Võ.UpCXҽG,>+컟] + d&KYjΦzEZFRA]ہNww5fp\;kd#uǢu~_` `7Ќka;09a3p65?av,fzN4qE%f-)Yh/{p,6s2f#fmV#>RXbdF|Fޅ1m.b٨p7%j^ɹH\@ZAoVیу69g`<;bx &gxo)[4N=~bː<[r zCԬ%~N[1Hsp ̧MON>&Y gzb>au 8 $\XNrOrO2=ɏC\זA=;8?@#' sӳhLr280,r**\J~["ynLݰP1`/OR&yZ8n3w3 {\AOc/"Oneꖲ5ԧuƷ /l !/f + +ҫ4 O| x*ѽY{y;$P7 qck?C1y )s',0Ϲ1e#M'WLWlw+0$9]vwLAwPY$;G8Y$0ɖ9M:NߟiYw'w@RÐqN:[=wpNҀ2ix$ppD^N'_TٍoqW8/$Ss)zz_пu1Lܻ}3 <(}Jc򩣥F-S~dFٯ=! W\{tұMշ؂.4>ƫgA:)紉1KEP"ÞI 5*~ևa -6ݽlG^b.^Ck NtلڂS:ĔbSs)sGH )=-*΍G!N).#qwɛx&n =n902Y_G| +c.XL=O'ZIF3\%OmZq x8 8HC}q=at!&^-t)u$Ғ^8SONg|5 +QF*j4Ih B|B0s ~ŋا;ƍÞI2vO!tg0ߒ0K{Ҕ'B\RQGdcS +qDC&58hڌgڏgzcfk5{?VقCl"?pyd\ +rn mEf8c6'pt7Z`e,-Ӱ*;06;atz+Xegc̓`}ֿϖ36z_/;sqsΜC3cBYGfa&b\5alWAF[uv0Gѻz<JaU-or+'^Ʋ{-ŖNظC~q -I,9bk؊.UtB9-NDwV9ˢg[+Zn-PQGbnbiֹ,B;V/Ǫ^NttE[ Z+ވ&.NԻoEYQxSTx|-=d~?O,N +3Mj==ݦ}:z<*y'M>)hTe^U:U9jTuJ.*UBYhURiTI%B_Y -j=K+GXvﺳN_>JTYm\49 DM@"ը CE`VQ+7IR^5En૊ϥ@YO,&Կm~$}ˎe5c +`^QdŨqGe*BPT8HhV°F- IacRf1EF +uˊia'=D:^h> 0y b,mamTTDEBh#]QBqTNFAt& EntȎѝ:zCuT}E"1Eb,M)KIzƓ'X +s2v8)(;hbP@G"'>jd牌R_+R;RbvEBaE\eEl1q#6Gd 9`LH~N"sEXN鑂r_9iyί쟤Yl{0WfU$fJ|\UeAX^Ŵ`5,$:$V9m^=)#9T1eoeu~`pXZYO`>Ia6C0*P3 `nacL1yzƚ7m ?1]ߴ멿G05%6F@r >;8vC;6BS>s;lYɵzMobWq [9O'sb,:P'!vO,PAՆ{8) wp8`u0; 6HBڄ88q\f|΅L yvB3}kfRP39L?uEOM+z?\"'tH5I׭7Y>/ns $lu~'b0`5;0siy0H7 g/wtPȳL9#c,̧ 2xkpu룄yxc?Etp >;ѽۉt&S wAl'`ag.A59Vz|Lom/(wC$?W g:~C~m8k+ ~5gOM7-zTj=o27kwt݊0Ʃ{#s.a4w-~֒ݝ1|Ø>|\G̛Z!ԉqK%z*68nb5U2^?ޝ3Au!dInJۘJ͙x Z~G5ql?T)0K188Mxcr +9;O#9ˆa:D6RS#kˀ17ZK cF2g\3](F5NUls=qLƙ!qt08kx1\ӽ~hscn)65gP+:a*g^6BZ씪ԄNlWcr*ǰ06F14u NyL7,.C\NnslK)rbYc${↝&~x4Smj:bY*Ѭ0hދCXgkD9xo+tZX_|F7[L߻ 2~-#l免Ӄ04= +g$a݌ %Xm]^FXwk:tA><72h9le>+,?s'`'0ͳb5c2慡{^R.  6_h^І}hX8Q$ed7Pƻ܎ܙOݨxXa]0XѾKм$MhpP1%qBS3*zPc(s>(v~E.EFC8x[3,}Α>/b,]N +t8Zy\KP4 UbQ,nY(w@VRw}w?,/\DLJ"_"]nz^Mn],;6eEɼ0/ nfuFBtE^(Bw"}Ч >S#GYm"SuPUt=@~"H1-w-m~aLmc^|LP2_;,wBrOhP|8!? BF@+Dj_$ψE|"_'rz8o%kXdLMyYA'8\ 7/Gvp2Cb uHC4H ]&$aWĆѡwDT_DTDQzd 5/DwDz9S-`^JHay!Ӑj0{dB FD"%"ɑj$F#!q ёEdyFEDh,Be#L(KdtEq H%)a==2#͐5턤O$#!6qMCLl.cKWN7$Bv"0iE@,uDuOsH:H-Pgx+$E\&!&щ!LADR2“T%u 0iO˓N +ߤ*OB-*AzGh&wpt?;-?'IlوHGx+ҼH' 0=KV;}J?.<ү ? +o{,ɓ8W)?JKO +RH2}B6= +4%FXVjҙp)%p*s,b6XX^]+߄`[~9a[ʊD\2o6'e$Xji<`au¼Z̭mm%av].fU 31nVu`Y<,k?UU*ea֓BERDH"#J=i\k_5 j56Khjwe E{ a^ Lm_1?m`J0i 2h;)DI>Iw*ouW)a7}V0雍)}>Bٗ/m%GѴҨ~ Ulky.%9^w>۩fуJ0hw >T07an4\Xu/S gϾS#L+Kw8uǹ\Xτ ھ'+? $_at܂-go&pHe`Qwb6+NY7ߨQߡEs[|mk#i企ao1DQ +@H-ve@ѹߣsŎo+R ]Q3wQ>A!?j//?aqat2L_2 R7J=?HC 2^M6ޅGϏ&ངV?8o"Fh?ѧHRˇRo2&_E;.yx;AI?>ǘ<;Bs|CX ő W,"=˘A{F[p:'",xx2Cp0 ]Eؤ0oWz~-VK>"{e4a;k~v;i$'+1FS)WkJƩF&7hsV8jl-u^.ke\|[4>q}V>Ҁwfl5{ͤ!n6_:A\\uVk{ydjg{k: M1kN=V|n<.:,ֻHE-Gbpٺ t +Z㥅~Z05Fhδ͞V*ЬV Uou.Ugu^tJAO/1آƠ_b[>-:ը}%7fAyh0_#4kzfd'@ݡ SGYaj PK"ת1*5Dܨ2E$NE0o`QaHo`/ RR^ҠNliM$G5&{hFSUtU*TiH7,[sT\EUW*7!dU_+;ݢ4=E,`XjdZk/cK 4OW]j2Tg,+[*ɮRqv +;T3٤=9rRZEY2-z,Xk= `OΞz4/Hy*KTa~ + _܂z)O^AiRxLɅX TbEIVYkѽ6@f47@%K ƪIE/W^qr]\e*V-J-!%UB5/=SB1%"N!` A30rP\/2e)Oӕ^ԊdTf)HIJlR|U)jVdaWݫ +([QfщRi~k 4jRq9 +]=Q)5JRbm_t+T( E:n0ӰBL5tHA&v`s +0}:2ZPcQ08Fڽ-PHZ'1a48*]~hh5%))[!M7*ܪ@s4ͼU~k>%oy|,m ͰP {C,l A %Hж +nwVPv+#Lڑ&|vVʧI^ҹH޹On'y|$_f{Eñ,}ԃ +$ZLy%ߎE:g\4[}苐{3_,~;5ɱoӤG;uQ3-r jAq3>;D + ?6o8iUC>r +QJ֤\Mfט=t Q F#k|PNƠ7 ~\ N'i찳F x dYɂɴZV.a +D/Y2!0^ OÿHZ&Iq = +$"hmaQ„ڂ3Ȗ`/?w~!,#kN@g,A_*E.$4m$V;5$~c7v\{HQYܮ#Su==k??;7[wuN^)[%5h=p7\q܄?`Q[؀\nACߌx;oK ˉUC9 SvÏTd6/΢X!wܫS$wKw;ail|+{9.O?#9߳``5:"<?`x0ٙPxuQwT y?wgp0^_rPj@3`,3 Poj(VߢaF1KK4k⿌3ϏI1YΣXb~Q~T+Nij݄^.t~}Eyo^~8qq2 #Q~VOpSG#LZwmv6_Agh??zOX|ŗSG}ʂD2&/_Ž?agOaǓc(G3X~ר{X^'. #+dlɣYx;0.R]S(퓨YNƤ>Ǐ73GsapȰ'1 G~9vm6Edd/a_hZ\ ?GnLFɁrk*;xM+݀8 ;NR'/-r +(wN\,q.ԠK\b,Nu\רm턚eVV^A^P߿TgA=eD?vdM1p6 `KuQ:}Zڦ%?S21N ͪ)pj& +UQE-*:UJ-* Ԋ@dHl+x.Rҍ-Ac褖 O8=\ 5#$M\Յ6Zա +PE؀4lJw(fߧ?)/s`A~  +e'ly'f|n2E6"D5ѪLVeT* +U]zD8O1 Ny1('戲cQfsS`!چH%HWtY Tb&:Eު RY\JT<& N MUNe%QFJOIw+%U?`QJxL"Z{*Ʃ,qJ–2l*NSAݕʈVfF223YJd6(9SYBqYuN)2)Ed}̟EQE[t+Hf2,ЖiԀR^3ْmlx+-'PJ΍WRnW`<@QȤ,S@Wk&jzj=X7Uu!ִMy~2mu/9!'Ǭ [\Iµ +;Vhf `a[I_hv~ 廈ذҢpf9^Y {!۝ kGk(xqd6؁WYe;z]=0WhGy(#tTz4^7I»\#koz}{d\aMlY7ѱp!!A2_J7b [B +|!k?x]1;/Xk//?bDn''H@Dk߉wMl]`wё]I≉Su[8$lR6|m*n;rץ3(~&Q9;Fz Ը ʍ m`&h5M( +}_|j ^2Ѽc.c gUGjmї?v 1#&X!pD_j=xҨA<uwк/јZ7]x ;|]CL 񢮂c/Cw~0> XXqڨA76{XI?G<_9Wgi8}8zQYC4>&='u'/Zw0u_/;(0`cQZѣOO#7.Kl3yx#QZigO\+XC4T| ڕj`LЬ9W=c{2uۤ6Zߣ<#'I3laֻ7,W ^IC:0} jDG͝IS?)Tc5!E=v(Tc:hVcZfTMNGerWNϩg`nA<~ 9Y^tTK\⚮f\]KZջ֯ZEv_*pIewJ<>V/kΐ>lk [c&wcOO6G5{shW꽒U略ZBxǤJ|,PjPAR9}xpw(!ZxgcƖFliWjfjErZ*T柫ҀԨ(IanSV <'p7.걱[ƫ2YAST쯒**R~HB*ڠe*#t¶(%lXWBػC-#H +6vGF4g[ϫ[ƨ8Q*S^Dr# eE+#\Q&F)%_IQKu⣯Wl EG?x(b"m8f= X^9vRjPKE+'EY1ʌ TFlb\%Ǖ()V Y_N),BWXEVZtǘ_Ҹ$zC`]dg 26$+`mVZ\;ees`f|l<3u}톟z<_Hnk f5Xkvǎ cv\[cu#fq2vi+m][қwolgQ3:ɦ{$Av;p'?13T嘘Ics:NsAqq/N^Υz^,c u6'?0oc_HZOs6ɛ:&bg~A}/o Pk`a\t c`y'fXX(Y$&P$h>'P>Y :C7n//i 0<!}P|pa}9;s^w&>,]x;b 3ghyg/]q''wQ?sW%X lZb$qXc,Gua+o}=7?0/Ȇ/כ0PoFG;G='!{1rWk&Oq1n7 #h0t^oa\5fěf$t䢣 ]x?Їqq@ZMh>XvScuA\=?tˁw_7(: +l'Z݅~d#{&t2' kҶ`. *Нe^:уqgO2c6sY +_\.:Б6YJn^.#7E +u:oŊX Omи>8 ,enIl$p !Hw#yxhvlMر;6`zNK*U_ -'JˈeRt/5W lE?8 V|tí5FG?0ȝ:f >O^y8;8*nF([` Oc[qV1Ɏdte#=.VC-zӆ gGV"vfD(5W |P8c[?lk˱gilFX8̡i:),OK4Q٬N̨͊aFHB E-!jb.S_Mzc^SO]W&H uy +)Nž EhbK,i- kF5y5diG/nƝ겟vMVoju|g )n Y,8n&rj#WNW/NSՓЩ~u%PG<%./iZv)頼I7ȓ^S}jHIbD߅_q&,Oǖi2d$'%SݩL-SGjӼjKkSkZZ҇Ք>WKXTq׫:~Uey9ku^>)(J`6 d+Ӣxeɗl+ՔSƜyrՐ3MuUH5kUC;{U" UW9=ro$[=fiF݃Ӊ_@k^jO7?[ E/(W][rvp@UE3*Z*+ڮ T\t +KEσOxWQag:=8e 0 M:wPk5;Oqms&PMIKJUUR-WGm*/Qⲕ*,ۦ}+F9eRvٳc J8;гkʉEh,0 Vk/-]r*+rU"Geb\*qY٢VrByU+SEYU)jWݥԪZ*pqAyMgԀ@?>5:P \<+Qi]Κ$d]Bw +5ʫmTnmrj)v2j)nR(*%ީ'+Wr_{ ˍ> 0͠ԀZԴ>B V5+דO=Ney+mPMi~4)qOS|r4^!{yd5zr4?VuVU~Xe֚ؕL(\IZ%Z7CvB-rnQwi}Gei 75{FPh6j@* ultD(˪x9RANuW(kw,C힧UޡuB~ЮI6 +tz5 ZByДNCzC#@,P@9P2XudO`C kc>~TUf Y=蟊)nZb9bU(((hq0GԨQTÒ׌ + PQY6 X|vܼ/"}2;s"fh;e<-OLL4LN@ù//{\0`ϬscΆ&qm̸v ΂06hibXAᲬ Xp^$/CвY" @R<|a=3>`m +自ƣ:_­!KяH_Idg5veNN]rsr|f F6 DTZ25&5o+s碟:kY&EI^Eqmc;vgbNbc..|wB"c>klG~O+|NeƮB7L v(M{C~B;r d?:/YpYEdX.T3ZL 4BȁTșfrL/5{C~f!Z8츉9q֓<#m$_ _׮$N2c?gRRrك?1kLekK##ltdAGe11d3XNufm2{B7I#j!0ZBf_`| +A +Ae +L9߂6xYoyǽ'f_ȟ'A6A!{ƿd>3\+}ʞkxw b3{00 #&3YÖV8пaE_?~J v n>,M-ꯓz04k=>LDW#z:a /8ޅm{&u0?u_™>t>$P{yܬc n6g~%+cIGC8 ?+93`x Vl!]K|;(ؙTt䣣uHj%,=QdFIbBgOUn$JH߈%^B{'K:ĉ 38 C+ᘀ^JրVdw#{C_=٧?tا߳yh< 8|n2\ዟ+lA9w" +=lQBv?2g!s:W w[vfev`v66frbk(#>c.ws4{d,4!xC" }ȟ8bX3p;Ƹ +oԓDGx\7涼;PB D~ˑ_|^oE~+CȟjZ-aBF5owqƶs+ll;9~z|_{SБ͌ntxъ.Vj?`6ѱUs`XRt +QlD}f`5rrmu )<_]KwI`CSFD v Y 4fmFWT"o>Vo^rs8r7`)㻉08t%'-*EO3PS5mJB29 ]е +ݮj=_ZÎ5[F7@l4Ulk$ڢHGh0*GQE.F{SWL:c=.TkjĞ&>y-R'~jѷTp Tf>OcK-R}Vz 궦˖N[mjעָ.5d%}Ug?]n>~\r|8@ݯqğz0 +yj: {3!DjwOQK|ԔP.o[F5$.OI>wߴbKsJm$!%CM-;J5i NkUeZ\*OWY*Iߤ=*LRw(/q妿|Ttt$:)J@Yh%/~ S]UxUg*+GYEreWeTZB]J,L7Q%J(+.䞊Ёд2f<eυea/(ܡdeUd)PrjjQGɕ#J5rT%{A*!MldK`Wwdր@#Y(|ί$fVG+ƦԤ+ٝ$MtW+ݨ.9jd' v,S{?/SW,؊s?ݬP +nIMSÕ`Q!'d-TB6o6YQw"[ݧPﵚϧ +m+lD +"A#UF \tg4*"{K6YZۚ4n= O?^|.X|u 7Ϙ^9y,t6I-D֎(EwYPhwBnq tl7M6 Q%tbC?S\h4ttyϪA) PTt'@Sp)~>hY A!rBG?hoբעb ɐ?(h[0eC~=7 }٬`s2 = "7" wNB0>`ր9֫~"I !ٙK1k m>o\$ lBm\p b8`6 }@=R^5K0?I`%ر4M`*lK[=o%P| +]}zu1050~0ޤF-0Q֘=)덚dl3;sasn;@N_ ȘBb7@?f^uL qlEoɦrًb&v 9dѐLǎquru!ξ[dyOx;[ǘK'X w _oXL)"k`D]b$}wu Orba6X+G9⋣,yv%`8O=#*?;1߱8xo+Oa3q2awq07ᙯ=]{;?=A;ANs.5|sx0}X?a>oúyvLо@>amOᾏY0t n0yŸ @OރNO%sa:O´}6(l7l`ǃ=LݺzD39ۀnq{ ow`5?ê'wQͼ ۺw+ fMp#qȵkXW +~Sr93e40; _=o!ْKŰ"g FWUF;1ź;.d^ ν v3Y^\ȶ]{YeȮAپ@90ݰΝdgaμlsofj#Zn +21f.0[&.vuς ݡBk+vlf^6ԉ>dN VXѲcg<c5ju-js;<< +pl ہ"W C+e(O5X=5GA8_c^{y$l6Õh!?i۹h(@AG+:׏'FX1sD*G"zσρ?``kgsm∌ +?8/f t䣣m.t2 ^Ӄixdbi/ͨ"(om:8}Ƶ\5? 0Ƴ#3.+ѓlPRT]MH!w&20MDV#euyX l  +w-Lf~ ƄjjdzlIPgH:BrZ$_hZjQsOM=j '|—.bTqP7*aUʈ/\bzp-Ld`;܂۱|vD'9&S1Ɣ[z66Kn4U[fʲX.:[vrP%<"*~b_N=[ѹ"ٸwCKkh#Un&~蘢Ƹ(ymVyl񪷥Ζ#H5qs$}Pe1ؾN]*_LJ&T^%[U֚xYjRK`xRn!!MqCk nHH 'tU 7w;Xf {(y}&Sn,A!E*cQǮpOB= +T[y!^~{9=-u64AԠ]0*X2z],Bmy()Rͱ +iame},"_qPL >Hlo0BBZȞZٯkĸ ;XY)b +yYZF8`3a@bCN nnbl/D^ pY@f ;@#pk@ż9݋~dG]  +8t܇3a1a8Z@v66u z`,m*j<P3X' `$cvŽ1옃Ʉh8o=|̅%.@fCYpeᠯ?WZH8e$A|?dI"Xˌ&T/^ˌ~ů7S}Mڸ%&130eY1$ckuls 0zz~~XY +v\kcΝeGo4z,4uen'!9$f{I@q#>1y{N&a-KL y I,6&V򓂙Aj: ney/Do&10jW#`u8Yl?gbam{~t%˿Wv19?;oZS:ȉ>͚ĉC?'c{{G q_/|~)[ibb_''=7' OsYo}RpÓ F?3f/KƋ LsL3gA,aTOFzUt'3V`aG@%o3_Q!Ga@9E P}_x̿aB_U~}L|2Y29oí1kj2xqqByo*'0`ǻlo`߄}ŰiX0Gqد'7=WMSqn-x?3S| vBp̕ : Ǽnw5qv\?.1^ûwbd1rvj ltĚ#z@`1a}1p|<ʬ5MDp#%zo}8Ep%uGpD0eU:btl=CO2;ߏgfO1ĦSCUWT M +]mC6 GI/3lđ{bKQMxU^ʈJ"TѢnF9*ܬȽʏZwgr"WN$- >xƨtfY߹:nUU]DUĦ,6GE*iqҤBK +,ӕg\re[7+zҭf[b9뷼 twxTWzd$!Hz HJ!j(THwBU:R"6DQPQD93'\>?5sΜ^{֬?",oJQT\dB|< &'IrxAcR^%Q^b5HIHxI)KM4M,%b6oE#_MW[BLZv՚>2LAJ%ʬHX0IOJO 4?b%_-SdY$F61X΂(2׊N @(\ y"$]B o  h H߀rb &ZL=8X ExnS[L<3~$x5'=Հʃ {1<B@P/$!b H1ƋwhB1Z>xG؛6[\B׋S1pOC~E~MHWkU4^4}\;OF1Y @p1Fƈ!#+gdMl"n)r8D˜VA+1u@Kk F@MߓPk?"|}s}It1"1 i[MbC,J,yE,;Q,ywj@P`K4{'t[÷>!g5T}+oG1ƹ.A'FqMqL X98DDҒDD^W$Qws[ @dq/Yȵ4˒yqCEt6lvUPWW ,hL V>A"ATĥ:5rm0͵^J $5 do׾N?|=E\dDQͶZgL5b4XMD7$*i@tրD>[=غPGFЯ*d%NQ ڏ;^q.T޵E̡zHchtff6BWkr֌G+V$-Z5wԭ9>0qko׭N Ml @ΑE`3rtEl=8Svg~tnD]~N٤X+R1+g9.V2z5S_fe$H ,v.S?d肰}}iewWq-dZ0>kqTPˌU֍,x09"'y߃yoonh\鶮X/ρA>״^PkC Eñ1w Es./laPEj/H-ۯ/2I`FV N'![_bO:OlPk '~#yES"DHC;LY >%AVvNt9@'0~gohjmL} ջx +!-#0x#HG*4RұZ%*ȕC48HaF;jllYl k~u}w 0F! +>q)r6I,ZJILSXI I]bֶY4,2VfPj|=0Ms%H: $]d*$]%Y/^`xs^bWNIC=:p0@Bͳz=8 RϪ<ۨ&{Hew zwr3IE"].n(anVYBH{3 t$>F|fm] (kAX^lɶH܋> +Djp^':}#%H/ W?Cm54C'1d+^hX#!%(Nϣµ^@JH0o' 1H{%h@/{U|Mqb1%TIMudj.FSg1Eo-:L0逸6/08"H tZ"A8߇"K*~fO5b6 >a|ʈѧ,dN<,}2B\-3ٲR|g`EnGj 4Qj}:X|].~1 )zxG@Uq /.98 bYvD1H~t~U5DP +XI. X"@71D%`!pq .!x!!IJ99)siW==^o~?A,brSCDp,.~"Vr+Jb%h(XsRF L .Հb%g|ϦPG1;*ehyKڋ71"rFOc؍bHHJ-Qr0{?RU(:YB.9ˉFG9{)qecK0'r@ IIeZz0=D%$!D di#g>h{ ({ +?᳉FŐs|Kb‚-ҰE/%#5*x>!H%"s{"z,+ go᫃[yik!Gy䨨n.,*L*آ +/UI$U*ee1a +] +/|o'|]!@f PMrp6 uՉ-b:$uJjH"Iq꫓3teC$2|+“e#]CC!Gc}kc/6Wxьi&̍ƫsA̋T}˫}8eg"@ 4u~4qq?Jq=#M13uAމH؁s#֋R}8|F״Q%zCz'6#P q`l^?gH$z=Eᗊq9,Ljn OKg,PBr39CJGIDsxK= +F~Cd_I| Z3DJ~ɚV(QpG2g y͆DffKIAR9(t6agZp۷Dd|=Q g83W )؎lv2ɶVg<~# U&23T=3HC4='hfmj~@;S_"L&*c{9N#I2cd-H#Wp;o[Z ' vসerWe$8>,;Yme،3o$_CWz O,sj "jgvڐo%B~1D޿|{-*XƆE{!c! ,Jx ekt ?CA_pI+\|϶M?Wff2=29"dc?{eȄ~K=Gt#iĹF|a;w[;EC}V,m+:@C3#`e9@lH?Ʀ/xH/՞;OueL`ΌP'#+g@򵥩<g `h[ $±"Wvm<4hſNcIS4VhGk{kB{mn-Z㟭VFkv0[D@"V:m̖۪Dd<[\*atF"Z*oSdſņyjoL[[ UG&UX30!зB?ZICwS*˔eЬ43! NIx]"yaMj1RD/@>-!C(d"MHBgAAG1SD(!N,,V(&x);[Ĩ0AXbXvrVRD)[x1hڪHWR>Hlgy5PJ"Gڑy21X;^hZՆ5r˝Id{O _Y שLxzQs2}#dP}x)>ѝ+TgER3!Ta=8kiuKqOHG/dhq9&o2c!>% +DoÈ懜TR7 a|Y ;fjn~%j.ZZZ9 0xyy֪$PAqul-Y\@?'P]5n=םLb L֣Zf,QU˘Νͦ54~s)}'% Jj{EM+7+8E> ?Gڶont%S:ȇZ"VڡW@@FŅ 1fwa*3>?kdte&P1RժgԬUn e6iڬyV۴m׾c]uѳwV~ 7$#G3ޚ4yԷ{3g}0{/Xx+VZf 7mٺmG]{ǎ83_+׮_>/{~wϏ< /QMUY&Ui_TSBXU$Ut/*_YվVoh lA5BW +0C_9!ca) +8UkL3T{dYdjBNf̲]n04'Uۜ8U\UsV F5F0Jf녒-3GG''gltzSxLXǂ=H`6(X` Zfmam0M&Tb&uԥ[^Y}9z&Ơp+ .lپ%m:CE6%U-Q=QMQ]G@= ?y z>_/^rUV%Օm6u_ރ0}ߞayl1-puÂi ͹x-k^Z2 e˰Za 2l@>?չϧ{}}Gr3xmo~h] +][dҧի&C!2@C)u8ө =>oS9=a+ +G_|͙}[ȰduU.tr_}gsًi= 9r ֎צ-tUd؀ j[)εrm7zO;wGs6l;hWaC䟘ak +.M\5ګ&jdTOSD[F~e[oAkݾdנ}s>a&uvܚq_ZdX +)jEyQ_gm;|}SO{M9x߇Of84pˇ{swܙw`78Yq̙W6ZlLn6u6oqЩzNu5/:ޛkc?<|c +e]vT8R+ɅF,_}1='lgs=S8H7d,P#úeW'j>0M2>}Բهrvc}f,ެ39K-p,o]Mߚ`ǫBـ a_əwo5]㌋OZ=}G-gk3_8oAƜlĩ+z^&dZVtu^~=8A 328Ut\_Ǻr`ыZ z*M꾯lo}ֿ𧃺 uh'#z<ݧiBG_ vñG1+QWP2MRto6Hr2u#Yǵ|BNvSN<4;3ưV8_R3MQJyJ~*u{+{*P +vW6ꪌoEPF(K%ښaʶʮVU=+El:檂[}ێ͘w{k+摫.,^Z2 eɰg);ao˪N͞វ_m2ڑ/;Ϛth;NoͽekƮɰU(#͟F~s/9jԦc=0w3>+̹ŷOX~e,dX 3B] -*G:4vgA]6t#Y^p`q͝xi7̚wkٴEL]oV &d A9 :4DߟW3/a;ydqgOqь+ξ`֢s]zeaa)2DȰ6dOOwlџϙu@^ɢo]ۇٸ..Z5e3nX:ӷ-ɰ VWQ!/N5%kܺ'sV?hӎ!Wnт._8+&2q٬M\蓗2Ap~Mzf?^uV1W}vs9Z@j1+(X9BYa˰Y)ǹ_mY_~}yWl<4p˲݃>ȌNNZ?Xd)weaayNY u~ܯV_}w^K l/hnzD8LM?PV" +dX[[=菓c$-߹߶Ż]G$M/\zbny{oηvcaF2SN,UȰ7)r^7TmƷy^EzO+OX>xI6ݟ}Ệ.;p&zY(Vge2(/Ջr7oғ=|%&.o欋9]?2bC[;^jdX)gxQ5ݛunkXMxڪ:Z~ט9M8oN _wf䲜Ƭwr|a։I_gesi>Vه I}k>ZW]j[[vhjmD\ 3@$d!!HȂH!{Vqs\^/z9y}zJx87+Y磲qiq'Q#cEaGäT.>z[ۿ1=ݽp~pxmtLxLBՄ+IQ YYI9MyѲdSN#mߪauV1zI}0.,\D=<}7=*!:VNl-r\M &;iL|ߊalؽ!!B`FDsGy^C< zF xJJ =jhtU5v6,b`o7sk Dfw D HN@9>@>@L+&3+`[@nE[u>"l!f/o-^ < _ESbwu/Ak)Tϝ +v} ++%Ig sNPiiKٍj:[Sk2DiZ,?  ň1#J%vNP>SbPwd)3ct?^M`j:Ҋ)Q_٦n1[_κOAKP"6umS :*>8%$?d(R4m9 CKFɈʻu >U*Aai[pSlՈAdz7{?хoƥGie}lN ~-| +'$UT$),"K@]؀ŒdS&0V{xVfvFkܡZbű +|1aOZciG \Pdf`gMoMC#,kX$jMř"J&3\I)?. GAgiJbP9$z &L}\*Q!IћʳZjc@^ǹ$HQ6$-D uG_ux{< ֎>m WIfZ@si£BH]tA1(~K{g!Ptv߁m/<E] 9e&ur}"R%*yìbqF%_:Da, J6!%bG -k_w諃ađN )ҠU&Y*g ÌqjhȒda B *A̎k_hqKGCC=h^kKBېSh&2XN˯ QDc9%ҡLlҠĈ1}AoF=D6"ʈՊI͜|eVYAȒ IKVH"yAڏ@c4}aͣcvuu5r60mU*k9:U]Ude0A^4$V,흡1Cb0X{_zgdcaEnoo45-T0UH@J~ܗm;[[ݶbط^{g?ߏOs;9s3 qv='1ZnRUZXoZN:sIݷK%l[^q[8d7ؗ1^Q|OSQOCg?">?/Dg[M:5<˪֜Ɇgg+aؼVa}ފXߋ}(HpA~([&gyY˂Dm$Z+goZ hkwY@#a vr2p{} Uf HV}#H<~8N'.s,i<{W&8_!SHcQ>IՎj 361b*tG@{=&pӓy4hri`Hя){cT5QZ3ڠmB5E`L(@%>A +T.@"yKzE=CGHeC,Y k;%mUhQ3E5,靡1031C*j_7a+c+3/2' I%CT7#XgN*1-Mت6mTu{ul]SU\}%k_b(C @whoӛP5ѱ4~:YAZ3RxN}RU2N%״HuD 5AyPj| vzU_'Ha3$݅93jl&sJ; IbeOy,Lk ňAA ycP ڸӊ$0Mֶ0iM yLsYM,V +>~ju7ْC@ m_n?wA4{:=m p>|:/Wfi lrSmAYIcwȥ=b!ggVw25&Kzg(a&pd\F =vA^x8=61/5nyJeSYV#5)ڤE]eyjE?(/QuhZ,o y淹޶Cˁ/ܝv KU>@#+;idu%A1b`!a14"6g]nN{|N#z15ZNQN0yFWݛ_$Hte)Om$(j;CϳAۺvs^W>Wp;iƨx*N,0ˉҼN:-#rPXc Pt[i=N 5pa87Fm1Ekqr:VPȒeԎ,!7L֗Svrj̖F eA맠eO1r'C)v4O++Op4 [In'Reܞd7Q fKzg(^:D?Ո~x0[g9\wt7|4\EK5 )Zbk:=W]Ru*ԭ\A ?/m2qϮ%Oژ3c}(vi7F\$ɆDmzslmN FgW43Z[lIC \ [>~y쿻zq{o^D@1%hIzk2)Qm" @]_o +K |_2Vú7ϻv~N{_ LAQ1E1{՚ 6jbO)P4PfM^ܾpNz{ P(rډc.z $/Kԛ[Mt* n*zgsg}04}Qۃ6 /k8"zG$d\NMO;L4<֟^nVg wSә&54?qRPôаT}bxt=:nahKI?:6:ǢiWsq1̇ݿ`tAC `! +Ms zCp xMtE}IyY9ǒ^>iz}׋gz/̃-K `S28 ܂` D{?ސ rz݀5hfe::Jf&~63vq+C:/Cz7H +.m{Hu!t-sVbx +Iyqۗ(غ(| Dz#A@8Q+!n~H R?;BjEZPCm!06̅ @\m4`;p1zG}KC`&s3X1b~>,hm`hD ?I1X| tvaLU2!Js/aŴQ*hd4s* W2` +dhPqD;@~ ( }'12d(SxeSX)DRp<( FK;Cۥy(kf9 HC6 a^*JUqrMgtΌ  juY>р9OOAKPkAG^TF!ILVs(V:](E@/3cCtQUߠ1jq-U흁*Cծs:jtxX9> '},,#1Tbm[zY /7lm"Vkb uja:"/A}7ZGawj/KJ3xEDYW^^M HH(1+jS$M8 נ$5LwB,!a{*-!?80;\r܇D\*Db|=Mۻtʩ ˧޴ny=>=r良AXXƝh܍kI+驨KɄlsLY.cvF>ɠjSIgGL꽱|f#ov,K7GQd@y'={y~/zt{}1^v]h 7 Nϲ3Y7+`R.\$8l8@9@a7+GLDgT_ߧ>OY^Ox˂I'>:>êg}+ySjbb-v̄6ppCl({!2}!(9 +C. ><4Nne83J O, NKa + 8@0} p< uq PƶPv2MN:cO+e9)n~ l; }K=etU!C gX zl&cd&3᫩9IHX37 ۾r_}|"쁨%!n.H\j)?4$2; - '鐂|+}[`YL T~ f&J#`qbw"oRoZ3vg% +brnװcѕ0jڅ=|xKYTd0?+}"Ab 3a@G 6r/ʜWJBv'8G'`e\M.!]`4u瞌h-9 +B9&1D"bB 9?ς|dnA=l,hF$?(̊Ef/r飸2)7]-<GJCda]"cx?_bO f1|b[R7[$!vF8yO`N& JKăJy?F0Z :LP5H@BllO^5 XA)2_T-JUPjV\~$-*HJl\پyfw&sИ!eTf{Eǚ:"2 U1y5 \˖i̢ZZA.!04 @3h҉ΐf1~~ҴN}k%0EJתi +E|q8#$&Pz,(H@I @HBB(j{oR)"X~,`Ŋdž~=3s^\}vY{3UT9^Ja3'%jn +NXpO! @"dEVӗw7=|ZNco7rSHTReQQHqt^dexN|GkbdV6MJA7n1w^ 'oL߱ҽqFj`'EKRkJNQXiDypqL 0޿ ZP~Χ7OrO!fHC ү]jk my>b|C / xW_3;.b ະҀJjUR JRUUVOj*.. v4o/{f-k]z`kx˙P2cݔNBVAwܳ9RZkir?U) ͲPs4ڥue47j}lc]s/Ek~I}A>Wx^=||{YRzrcKB׋}$ el,}wTnEC5VPg +1i1QBPJ(]w=6/vHBJ+$v% 3e/;!3LqIτN4E`(/g cNq4X?i# }Tؽ 5<uybl˗+~m?ɸ? ,m}gߘ.spR2غ  -tlT1@Us@ 'h!\:vk z6 ? VPbh UFYT{$ngs(8mŜ%d-{bȃP#Y V@=Ap-;bT?HZ}!tR =c209YX QTݐV^ Fl+"[KL +ȣ+a~Ej yAl {ya}s/;z;>߳ Hgh+d7d+A*NDcD`?{OqhAWE!OI ^bW{]߉?_ n!8IW{&Fb $Jр4(5OTDhrKV&=?,!NtB}=iÉ #MBxB,␂tVߐk Us&h%A񚈉H yI2rGJ҆5֜n6BfPr=Nl `.4/ iް} !itq5]PlYkŇ,4y<>9)o02ҮeRs}({ +rjȃ>Éewcq]K q%;R[bwˉ| +f\0I=) Iv(V]ZT]\s%ڟYHJ7?i%#%9 +C_4'+V/c~&Zl;2:"/QWPX^\XRUZ@.ʥ_88:#'Z 9'C:>Sovc:7nW&'ljkx)Ia1Y[VUԛLOcL !7IG|ġLmm>gzdV9j" +튄r1-<\-,r BE9܂LNUyzpkE2<)J3J oQAePyfzm_ZLkxlzw\֙G i35!IQYiEiṥɡe剡*by=117RB. DPg8c7]V-oTy](r9IIԘD46":22Ͽ\ɿɿ6:l;}`! T忷l0>N` UK6p*B [*NI΍OE!%",^". Jx0!t|Qu@Z*'Q$%ܲ2R^S9Gr57k0}. q$ mPWYSy~ '#z[n6nTэ%ɭ09ZLX=3UˠW }*DY"bBB,b`\iXY* <XnĢgՖw}qȘq-O ,F] ^lvoheN<;2w)!͵+3éXx!#vlt~8q.@FR/(emFw\qJur۞MuvoS+˗ؖQH?ƪ1B͙SS'd8qO 8/dw>o|mVSߴYY3'\ +nw-D]>REe33j[ft}?Yﻇ{w ;u&=Ml7]bs/]/װsQw[PW.G]UcL1]@ev!:XDၢ+ BC{H2L7= efPgn,̡r.HC^zUkeŰq]@c/"~vxC {`(5U VRΘCB14hA\Ftɢ*dP9oJ†yBص ё{A3LكNpm@gt !6}8 GuLQ4CDDZda?سGj4h ``v y>qlmܦlߡ1;΀h*dT]sQх\Ba4e( :%6TV*=0\k4fת:p_w +땁$m8{1Q+B윀& !Qi! VBz +׽&+BDi-I|%F@)6*K 6\ f-.SN\:v}06u6; ~/`z +<}VC|- /| -\i v@lEg|4v-̔(v9kI)lu ʑ8*+!Lg=Dm~#. Cu!(2/|пȵ.?13v7+O)-[1ǎ:Mz!āzh!@MB~0?ur -T[8+vNr&5ۼ?y|bn>9uzE4{6 >\KjAVB ф01p#b00 =Vx$|:O$t0^`0\o9?c u{{m28"8&0үR{}-v{;;} 0 1hx0@[QH%Xjk@,Q['d MD8'1#%$6P8U7HhN't'yuoǷz4FCkO^σf]{>DXIHeYz!lL,d:UB i~H$k6HO\PJ/:R.z4VKɏ%ׁsEZ/RCΦ_E&)Oc_gy>IÏİh7"WnfRtG@fyZARoejOsZJ`zϭ"Au,4;8#a@_H媬"3e{?[+O?󴻟y#A +c%$W3J:ą~Wߟk wO87R$;d7"*1 y!驒Kډ6mϺ̎iktXk(&Xybf8'LE%' +b2^tu' Z7z(++F݋Hw' B{Z_ϫɿPf-r/B*3+'0,9OLK e'f1+9$A 7RŎfXo,{UϜ;x: +>hp)!Rr}Et^\[&2Ӳ3iejjSoZ/F +-N҈`6? glPs@yU=uWz4Z;іU1Zr`BHT)3Wċe D\Qovf)$+1ӓIJ&Ɛ3F F:2Oo;ٯxta}j WK:].Dj0άFGSⓈ%Tt\I};_r3ɣ3`6VG4Tli%;GnZ}eDgOM3[^gt%H l 5ɍBBC\<>]VWR_T)٥Vk=[}lqHX# ynԧ-Rnnէ*쬿g\t0ㆣ]\?G z(tZ7Eb<;#qt!0־.ήR}-#FfxSVKA-kQWn=Z#*k,}b|MN~43Xwtx_ ˀ+tsp4>er NVb:JV[i^#p0[?̾vxc~'v,f<8,b? !LHJ@ ?u ejW>fLOaoΣ6Nؽiwoph>PA2`iCpwyh?D1Z8ur)p5g6;;,`] dcɶR5xU$4;t~3f;i?818~r<8:8'Bj0Pȳ;!0 _ 3 o|wB=Gv(K7[NA}_]gā iްAjb,v0DOuCL26h)N|$IR;b[&WN3Gw3|mЁ (L[@$Ҽ1 ^oH4 #?*|GrHIO1Zy{ss3؁}ws68x!3}.9Ez3iRMvL;5O pϰ~>eDŌa|u +nGm^aMe]>4Įc"*($$ IH#@ ޛޛtf6 +?+^^wur&zf9>?X +n xOwPb~sh1"4'󉆯hcI\COq, +,Ŝ x8*j2[!73gZfcXA w;^Hż(8-aWĜ`6JlcKja '3 zQ )cf +`7˃dt&rP,[+?W[nsTQ3|TD]KSYqS/m$%װOTK( ~Uy** +`8 B=OD|(;h4+Q@^PN''cLi]ha\UHeR)םvw)WrAt_q9/KbN 1(ؾPKᲉ#_y?\M\=Na'IqQiҲagz|Ft4ѓT36A#PF3U 0_;ekzr*X_G6٘&T%E%K 9E5iII# $c! BL@snE{-n7+f]. yP\+Fg>[Z*CM7 o=fVՏw*gtRY?1<[TP@JnO&UK@|E) +DԽU2=kd&sZi.8;l농Fe 83>S=AГ`NgX#ZߞۖMh÷{x7?ƄD_jȽ; >Pg[msanA +!<9aDiT*7W!kt?u&ҽģgT9› D!PY _RF0^m WU?8^?E04"BJ#]$s؞vc7xK#e'H^<˧9ݫb89dw74[ /?!Cx*nB;mSߘm~m%ވ%ϞB{"eee;6bP,\Gz/( 2S[Ni&M^5eQ8e=Nӡ|$$}xOSb3ϩ ԣV6Ͷzl>]s2R CH)92=, +m_WU{xn%g 0AY j8X.mўMA[+pdبh:n , ~m6VBx#$,>h+ Urt PVGI{ը 㺀; zq<LJ>1 Y).3S ?8Ü?^i)P Tp\ u@ 䰝9@(]\A; k<3#pmmxuxe7q0 $4^S +͗a%0pF +]ZS|zO~.ns+q)#n_sn h,>ZJ8Xe={ @ 4]+<U@j2b)No?߱Oxwywpd.a4:8&g +X}hC`A~H=V@8gl?b70}89cW}"á(~:B1Z BBH;Tv.-;OWR%;S^q0/11'Ǹo/ ?A~O2P+!i{P&!Xj<z -4oRvx?} n45u7p kWw+Ca5X 1 $TYG3?|*8v2(}1JWF q3B?)r+m8a2q?HŜ>Ll}ҀI~s,]%e6WDT Iʘ#دY ,~Eg"}N+͔Z4^eynL.g۟MaazC|:xf([',畅p#wE܍ yI\F"QRwfN(՘?]xhƻ.K&)2<;y>-q:i42"W-, -HQiipT*|Me$ 'uM)J::WPeGmG78k Uv'riR]rh@E|8:! +/+#E-ѩxэxxs~ 3N<8epN,y}٫0ެ츾Nu7Z/bz|l jǖr/N+<<{ɚ.}mJ[i ;K e$eEqb3C$Y"IHRI<DŽW::d!c@z-OO풻w^Sig{lv8voYQGv)3˂B18Ahvz/0Q!ge=03DŽW촷&ڃޛ\JW|mMMz6 _79U};ۺ])nqn%װ|c*eb$-J eiHJ(J]I@00U0--c. CbԽ@2d}l`rr=g/8qr{cy^'!m"E4rCD NèJTUI-Ċ;>%wZ;^M +Ԑujn䯋 _\SڡeCGT]p.2|J ~Y K964X|N#k Rr)d Г&N)ROߝœ, v?u>uufyOl @I2ܩ\PD_?PElkV)dmmIE +ذ8.<. ċb``i`3qp6OO)#;s +H-%}t1R?M_]FZmIS89̾K4 ߚ'ӑpG-tsxhd{gd][vgpsrH%\mCN#];JHe2/w~pgY<Ljcħ,3Ӑ#O#]&:=qZd;l=v-.VO?;[=u'rA:e9R6L͘ܭ7*_0_ǘBp3{;NH;M&OfNXh0p!#[|7b6kpA uH""X+LJmOz Y7;F7a@`܍f l +[!}!ۦCCз \Eg\hC/!Hz&@M dav)b` RE`8.5e&_n+!p!`҃պ ] )iAMXk5Zu83' '$H"2Ys +Gᰲ1.˅^E\Uh?i>/Ż@d-KB-Pl34ID x\əVyأZtࠢ&wNW.[Sy3x/끾`-pⅫ fJHSYs.^C恧" *{%`րGpO |8Գǫ/upxV>hgM;МEs[MS:}X@pX +޸UE[ M +Y;d}rR\4yH-pzIfu:g{Йrs_uyP"**-fց`3xEol. Uެ 6M]pyx\^N_~rAo tǝ@g9p'} +@Tef)PW|[){+_ӠѣC6rܞWii篆`߸sh=ߣduEQ*Эu5l*{w)Aڀ/9^5r0' xmYf3̧ܦ-]gtg`0?<6ˁ.y ^g0eKNz@*N0o0a{dsM)6ol߹O۽b!L`g'C^|RRۯ>v 7Z/$ibjI|W{i+.=G\{t9>l`qkfo+@}>B] awpYZ̰ÓXt7|W2unc^m ޏ< #a?7tv`=HM@DsPzDwD-oRM"{&Co|ȣcO(n} +#J_ލN߽|oz]'_K ]"~#}w?}` ? 17 t&b!@{‘6xyA=T6} vE_+!^Dj@졞# ! '?O}vRS?pe0bt=bPNܯ)UgWLm|3w?a~[(^fc>J}@78&wFٻ!`S3 9y?ߋG:i߲~1Y&z z_ +q}ēlNz[`5ſHaSX5GD@%}ڧ1UQ3z. :o4ڏmoLFK]0ep^j"B4ˮ?"ĭ;TuOjSAe*F..\|G?WLgb</B}+utGaH[uڿGV]z`*٬?awBsk{5bH!ɔJ^v`)8].`sr٬߹9l$5;M~epbѺLwQўdmvlDC*kWQc;cz2%ж->حAU-$(E|AaP628M)씐)ߤ|RԻudys7Δn{[0p@nɊUv{M:2mY\it02Jc' +yq!'1!CXSN\{ZlGذޱa3dtd +u޴2P^fb쫆۴n=]u`ܜKr)Ma Hٱє4i2-)2Q, I]pEAxcD.|H">$P9\)kd&k6g9lq̿dޭpS@zͦ*aeeQaSN.BHHN HN +M,Wq9qm|v+o>7m7aʋ&?=ޝ%L2UrAJVNC{Q[/"-wL+bz$𽥹brxvL03Mc9-4?0ux6L&1S>0HR(RC>/BN QCl;sJO}- +5J%.r +hAy9`jNͽťaNPIY?XhPTE&"#-JeUd3mVw.tjÛ&5mh.`ZH`WJL:I,i`{%7IJtIio'.ڇ؅ȗW8.KqG#jhMDJC٧>߻{0/.].>_,0EyT/]&ў${NߐFjY-XI: E[cp/z'߻)̻u{ힴ{TC^{y{y=xhAtB!4|vQ/TBX@<繥NJϩ*Y+Bh>?>O5b?5aR6" 2ڐ$ Y VBтP#-rˡGNUaD|^G(#@yAh$s'Xu +(dM_ t+ +* Xђ YR %XJ *@<޺D0RuKB%`&.F +TV5mWZJqM)6PaOW MDg TpŁo' |71K XejhPv 0c}d.6]n1>ay t?@G5Ќ}7$Rd@#|%.n*pW{Zٳ +:د >j9؟@}4:~>V(CAl) !2-AXLm"I*w#qH$(C*GkǤ},0Va^`&U _OWh9p_z-8]+`+ +$:|R,4eH~Y>1Iu\˨«49'qwuw=\b]B6+!8l-"{ +^K&n\3Is<Ϲ,շYZ/R $Y=wvfڍƯ.~Υ}~sSـ3> +0.n@D<1(4b[/Ů ,+?@({ɶ7)Wb|E5τqgz'Cc?  |(aD;D$ǣ> }. +DɸZ +(3$WXItVx^A[y0ZNtlJtbc*s,70+@p4p辰ӡ{ G8378Usu{./\f6{,qLht0v&gTF6Ⱥ"Dr%wlMnP`X]Q'#z~l}[TQ^olAr'翊(,TX0/,(AbݵkBW;2C:=`hDzNP1ܩ>޳f-*[]^P^1dsXaQKTކ= $d)S2[ Q ߃LݥXz.ɡ{ēd`m7l uhioHޜ)Y_\U_QSQZ;>t2!bgQi7Ww{/@ʢ;R42$k!=uP?Cgߴ3~˶hDiE[r늃jBjDlX5_u(>\|BOoɛ+ +$⻰^iU]Dйqt:3}.w5;wtGR;hEXym~ͅu¤[ڣc"Ɔ7FnyQ[@\pE|ߛF;]@{%aItdr9aR~@p]qy;R|239k;k:6ƶo)l;v:*x#Z+ +=(%[ }8:1JFGǗ?wWl;V?֫ 0/j'-}w-e0Пlj+Y(m +zw{Ow΅v/|El +${$4:%v(=6r S*UE|CB봃QNָǍ"2BmGNas{) + t>"7IDds^"n9k!]ueQ)oi^ 6#~Z*<)8Z;ZifrGƸ#9{s|X[ք0;wHsV5]A]qTȹLUIXsQ:BI8ˠs)vgg(jwlN/1OO3N; nܩgЁб~Dc^@nˢww YwldqW\;eȭ}dcߛY̛EV6^7[wi^cgSN2vzWcG`$LB q֟F +GoPەطbao-%9yʳ12߇,Y>e.՜>Ԫ;|h[iO㸦ͧ3֟дFW&^B(BkK8P"]LlE +4Yw`Q_ B f-(YC%,2ŦоR#8c/EڽN|'*9P ) *h@wW ; X"e !Qv5d.Ѕ"UP+ 䵠OA4vYQ|?ϿPFx8b2 @h$+03[1cp&;YW[\ %4 DbH.*'*C"V!lLG;yϿ1B/F(a ~=*0"j9IlI HK&XbJS2EH#BYĥat.Dp1%Fo;qI)rJ@ٸ\sRp޹v2p~^U{}T'(x $fb$}d(8ETV\Tu2 e*Z.Sج\b/+e y + Im8:K[@^Ea)PUYX|JeC&α jQ +non0bk!N2CSHE5$yǠUe5vZ |,qPÀ?mp(s=vU=.~f,O@00P%B + H3"CtW>ʯR˟~bp/"߄ՎW]. :.zSg^yS3'S PQ! IA +qk&dg!>IeңLuan&1ay1lDn!͞';iǃG2&C3|Ƅ#h/hۜ$ G;Vn5  25^K*4 G b&;dfxu+Ha%5q;y[n9&ڤ~u)_^ukGRB뗠э6&[zG9cA{J, z\gQ2}ҫ[R׶Sv *'.K5|K~e7VUxc#琈{/{{ˣo5 +yBto"tCxZxu#=%ֹgSe3븕ei;ũ#AR + R/ 7_]t̳$<~a$"qz]=j]nuɡ]햒nʣ[Cu;c[J)[2=k Uey5ܒ&Ys3'Y9O>s +b?|,A*qwJڥhWp\`EiOϊ][yzu!fv[*]j7yVˊYE6q s 2?d~d¨?h|Ҥp{K5d[S +]%;Mw;+txu5nMpܴΣ2ǻ|3UO+n-J0.L,:#L,~RZ̴2HxbdJ#+|:3 .CFᝎ +;T;sV5lnTR^9[Sشw]e/- |W`lXpL G`|{n&`&mZRx9䈡Ѕ2:nqtxo@^Sy[+#̪-֡%5)uOJC){M]-7vs ?W^?0{Ⱥwz`-~Ih>;LDgT?hhgl۰F.~I<;.ssZGG\Z|[1#7/y?i_@`ӉA7!-kf֑гbn#$CD&Q6}Rz(Ey^=~";$ZKܱSndtusx]#~~]S~ܮ\~V@7?L#ti+B]4O@q D~l%DBmYf@h}1{d +C[霡.{h~g^{S5>ALoW"jB[fTQXI{'<eg׎?u$4l22p|G +7.=T)*m⶧qpg]؂~NB5g%PeT|AwJ2|YY?3ZӑzSk yL}g-3-v^]#3'g:zLqi.Poh"Z3=gD +ssx s!s1KRT=J)s5k9>vWж㳖x'B{G(:%Hle:KJN,\ 8vF ̯b`ϱ bGRkp0$Ő&9. 2HljjAQۛOws$ t3s% + ***,aלb:;ޞ?>UBU/bB2hyR-/we@ _i?(RЊϽBݜlЕ#atJE< [,MAV,2!sC>99F'nɣS<2gWbMPi31 Lxۆ\ nb%T/mrVh?S!E?vW~=RfVW9vTtդj^L G#3U +9E^-AѥW ?c*?'U;O}u>6|I}wί4^;jtFlT}F.9T#;bz``,A\> +߼g=T?{UI[)7nu^}z[ n_tﻣ=j@vU!lo +)Q1tmƙ`c\1_Gx에JT[ҧCwSAǞ z0~ors._gf<>{%ԾZ|q7tWI&}w!I +G +GDoqG=z\w/_~}}7ү[^ø}eޏg|>XCh|" ޱ ᆞ$7h;NfEm;e'.]yJÅJw25nF^2=bJൌA֧G'=?cw݁7VB7 Ma }tx~L[1]5|JWS4/$-29]K?q$bA!cS!vs y{3YۉBx4Ǡ17'$?lBrRuʇr=EteB׋/+d&jH28\l?qzݱ-ѝۢ#7"l8:~m8p'ǡXd šP<҇ЌĐG:LrΊL䑊}%Q v$l6ےUɨd4;%vY&qģ3aҫ#w{5W%pZhݑ0]:;_qxS/ nWW,k;VǖSY`4Q(l(?џSͪqXܙ*Ӗ2ْ{yA˾M/<cDld6u`ٓI' Zx$ +ZbT9&'u>'C5F*RMs݅%r[[Vduy4f xglY>W~ޯ&Y׺\tCVC>Zs(dbכva8J4 S~s]`u^dӵ,;J mͅ΍+V{[ǯ"{Q#/nK +ѩ cgj\oj!8٥Vlk 7][ФcIekeEev eKK]=* y/*8Eۯ{Y):/*Crdr8Y< +R +^yaf{ҶuDFv7Et4$.Mhɵ*YiqEk6nҍy9'KT #&R |(pt>;vӶtvʬkU^ݺ"Ψ1^אm]]WdWQ[TZ]ZT[+r7r_ZQ[K{dW#;rkЖ&](WpBv<05 :ԍ} tͦ$LE X% .9+3vznIK=P{/GJ=!ma*|*B }T8K=mXF5k%{=wiԭ[ҙhZ*ݲxe3>9-yyGBSWlVMW}bįN\ іfY0r1D?>&a6e c,-nKF}6.(L2Iߐi_h6!9d]kк-]&\}w YmEϬ8DNVMCn}Z.+%Β۽'UƣRnΧG. +Y jiN^6]vgw[aF+n.6#w0`p+韤BA)XzPRyWA4wC&coBxݩzr w쬥L0<'{9;Fnn;^ڸopߎmHvir{& I_>#48% +eT1-$S Xq_bC=Ruƀsp i3#9zet4&]Xpx-فM P`iȽ(e!6ee K (-/y_:{.|/d2CHZU> Fo% _4|S9Jp a$@ɏBz{!, n_EŔʚZ:,п~ 5g=_{ZA+5 -]H au+㝐0HNw8O((,VG1ESZQў.T-i`M iʘ£i|k4N;w~ .l?: J*.9PшEGBA4B%h\ Wh8L;}hp#nWE~ȏmH{`14c U Zf #}7Jrq4G b7qPMO$OYof(>K|1C'.hKA[- +:jRR\xЙ͇~h-t)EZqq DF1,1bR-Eg/?1>Kg[Jc&+W5GEO pE7/t BdQtGŒhL +e~v5!7˚:,uV/7g/Y䟱P-=yPpC; +PЃoM2/ W0r-KkZOfΫ;4q+I;RyC'?q| o:ugrQs}) @*yy8cGT^y.iP|ަmCjv٤qeb]cZ/iP{K?5~sCrf8 ]HNi'}2>Acf~j6h? @9Гt ?IO#K)S"Ӝ ݞo+2-T<v"DhC CZuN7>r{Ƅ99GC`4 u -n# J^ީfI÷:_ ߐz3{9#2,s<9NPbt\TLΨMn͡FBǬ7L1BN6bi`}4rCr-$29$c4<)Q[Z% 3."GsegF)N&HO,6_i2Wg>l1ڪ?Ϧ/r'bڈk"wF`u|E84G}nHfM^ `|*ebpB +TtNE>һ'7glJ7L.3O&62VZwuVڵǎ;wlͩ9CK¬uK"[Д0lMo27һC/ホpJ~QUBʼƋCFcՇrRr eM[LLcJniKm^oߔqYNIY )h,͖t4$,<( +^R- +z8TgDܶ#5Z8$Jpvw^AgNI{v95"٘ʶ>ס6eĩ:e{IIʔ{%im2Ъ:5Yh #.PC.2?xR>8L5þeL-5nCKE-M(No+5Y_Jo]¨i`fUev;Vflt.Rq̥$KY{^yhZHNxL +wji0N,Ͳk.uk5zkT:*4[Sf7U2 +l*[8:ls9⚗sݵ CaeIqØ]O:SI>n=mҰM2b?Y{^֚ͦ%IzF5 +[.*))Ya[XW4]8Yx5O׬׎9%?/CsWGYK.ՐH#-4NIX@j:vmk RjjҨ[[]nTYgVԲ:6gQCfz紲1Ie]S_9U`fT #͹a3 I<_pIk`u.35"+Wrd(֭PjשXjPZcZXWl[*f+>)qfv}.qK.WpLLFFr SjWO/#ݻt_'I['*нΘgU7KhETjUab[󛳌7U0Rl{G"8GԟwۀehGH= t$@7(@ǀZ-Q-W6XhMF^B̎ UIZfDK]X&)Ǡs-OB[ڄeD+fzM@3-$5x}DGt,E=e +r#T5{SuFYZ&k#˯ko 5Bz`r{Dp;0N&u IX:AYd2ӄ=~ycجlA=nm!`s?I%s⃜òqXrNK8s#q0@<`tx9i +^9+T]i8OtԶީm7}xmwVnjMn` t,'U +S /ğسu֐v֚|[g&Ds&F}&Ee&Wi|Ùzy3 +363;gf.y2hRh hbJA_S1‹ESE& +nq4(\>{?y $@PD^C)((,¨ h Tr gt'XEKHV+L71shlIE=;jy0TOE>T"^~T";|t!?$^s٤P̌FLn0/j'f.jT2ջ >BL)痉^ A|7.h|.:Y =*,hȃ ^C~4-@*A4nBUBh-Fb-FD~͈|3.o +6FWK1 +qCKR2?8kd4"+m*GhY'âEEW^YgOIi迋?fN([=.h3@A6nՃ܅Յ#>]](i +bYoY+%^3JdK$fB͔c2l.޷m7e1QOJ]!~g$!+S$92rL?:}xyz}t|$%W)\RN+d;v̻Nà--oTfPY(^xŒ#ʟvDSN({ eNpA'I&;#T0L/6|ĊJQ$}xޟn 򿻶*\rRҧ|eY)q+GO|V=nuGyBWBrH~asC;Q](:q0W.;[:wIFc+ՎxQ?ѿgDs]k/9]֙x5&PuǽQq~$׏tP;9G.w8@@"}Skך3;3{` Q|^C6*+$?tHIL$Mnj)ԳI.EFIN#Xm"l!uZuGVo 3 +d!`I!Ӿ˦} AP\@wЇA{1-^ L%WU`&ˌz,Ñ0 ƥ+o.Xp]ZAӮC;BC>G^{$jGBWG~0*TxFɌMr~nѝ x}G>XG +67J&ui4/sY/Zn(S)Nլ()-(/ʯ4k2vYfWYo.5]*yĈOِ(t|X#{lhm*՘^pIDk"نPdNI9O4_?(4"purMb.Sv$7O.") ͆,ykЈ݆ޅ<)Cl4u-hkskhn f5D%jdpssxUiu&b̍.aUv6ܘw8WټIl֠`O+NnQ=T{5khuT¶ܖx4͌b㸺6>ˈ1밚sCjN jߚ:i +؇3s 7 P5(mZT9QCO6gibfWJZgFRG7nqnt{AD[qhkYPE@VKi+-àBtg xlXM?և9 мJWC*Zɐ`J7>RQD՘ ey +ݠ&ncS-f^<6^g)"lny8U5lutUMUbP6|.vp꘧xpxŰ4U|u2Mߡmz+l(rmkˉrEf}1֠`IJ:hZL" -ZŜفipEaC&cd'R|'^JT<6ԫ_qY?5o&#\N5ἆ4vC :x':hF/{% ~ +5"Bg('RswL]wղvuvTߵQn]mwVNm%ۭ_s? v`+qK7BM NB&7|<ݏ2ݎ +ΟvNuc3Xzz䶌72Ga"kvkvag `~3:pN#a'(9 brQ_Esp@9\r/l/ӭ/'2,/g3/ ^n2< lteC"Wn \CDQDL8}XV̯La4@w_O`uK,o)m0cw; FPiriڿVӹ.kepdh?P)CGT5k oy?A|`L @9t^%h4^ᅠ*RzD)K^w^ɾOys&M'Ku`1?0 8\@5>'Pʟ9E2'H` Fr(1RCJSBd?%HGPϯX_y30Ǐ7Lb@<Y"y08Qb=Љ+E!@>!8hL}EݮwI3wn|~ @ IhGa!" \ EX"Zb 4? > ~k@]=!4=iD!NDO'H3DFu&:ډ@#[?3چ:L(±uWQ X:aDANA䇐5 ًC7O +Qg? mmA_ehDgh 'NDATj6IT#:d| +9|QGUx^ bږP_̱&4bk $3 INՇ !cȄgm |ԚxuAO{^2s?0q1@1]FQֈ"6v4bN4ך$FE k? +7X*`P*Bl`KB =1%s_ ?5$·DhXءk;;)\8[RaCd|g,*Wwr ,:<2_!| _ͷ3? v;[濈]7*~e "~тGYѳb4xhq7w|'LEwEo۵ݰٶ_'9l%,ufEi6WO<>iV-:fG$ڑ9GA0w>Cg_=굷%c큻/[Ϯ).+\'yιMRSN'GN8vܦp3)ǻ8]Dv31H!!Θ@ q3?Ă?8(gO]_~'XWw 3$NxKs/9^nʭ][kr=.ٻ\&vVr\eO\L}bop# <"Ν̆JR8BP+l+ ?bS~ɒ|dvdmjdoPڴp! Z}r󾫽 wQ#ʽfCc t(NjE8hHH(6%5$7c( W jh qt𿡿8v{gC8O1w } +Χ1LKiԎTd7~bcRbVDJ"U{«5š5;Cp괆5lo >lrհ>^}pAT_ +f>:ߏ;ãt&ag62 LHMHf-)u.)hjZL6bD:bae O *>iWDNe QCTf3Ӈ7w/cl)a7_6r`=ߜ6$)ڟ(ٝ)ۙjONWjI6&hhĵjWv l0*k\s֤ QaxY@|c ?`P VV90"Kte[3SҲUS +5*+ʒt +W%3'6I8e8'.?h Dm6$!t\G +c;2Y"kJU`Ĉ/cv,h4(d%+y*eyiz9);LS5MK$#^f: Ag33 ,^Fw +wwVUlЧzm.-Ay %tz^vfNV6׮7L3Nny4!IO,hfp;k۪ѽkнkaVzku+zK< +Op8Te~AZV~fF^vjn^R2QI I4Il\G4l^Lpa 0{FtF:6Bgjm; +VzVIVVư˓2xiJnBqnlQ~T*ÈG +oYD&>qW'=a.^vIAKԷҪZ홥n"M`i^}|z]";6C%&O=\3Q;r^hŰApFCF׍+^WnHVOxkkc};1]Kj@e!UĆ9_(K,cqdj[lbkB\KRt3_5T#^+qJE > }YTO QM)< q;{7TBi"RVt^@2^?P)Юl%Ū꾝^˹ ;6h{tq^}K-ń{\Ϥi<{1u7@?f/F^ P8*Z La{F`H QRAeg*(z T+{ ט߿3 +g^ ˾_FT\zlԠ?+QEуKQ2œI@ze[o@Esf[(8/7.6Nsm]^|ۂݶE lKuޚ#lf)-}2sZo+kZn$_s{up ԱQ~)XxP<*‚)p)jޔ;4Gs +M3m2,ͧzDLֈL3>tQs1_ qýDb6;p1/z{Vzh~C(p8)6$a)%>V-Xq3Hl2l.Ml5]lC(CNys֩OA͓_o1q a>ji 0^ܟ{ ZMAg{ 8ƍHP7@f3|kbH):NnF~yG~&4_3ɿApG1`y3q4n2A<GHXMA-=q٧ 4b $^  x +b>:;1 m1G ;4+ +o@HS\o@~ƧPNڗbOOg'+gށM^نl2$?H'b B$A"D1E7HL +A$r+1W\Xc]ul\ FoqDE؈X"Έ~YГ}_A-9:OESHRDҍ"H" H'E!d ـlr y|ڿ&D]~9&CŐ",+ǵZiD")Bj6Y MrC^P_?P ^⿼D[hsptQvšxSD!FiD&@NC1dكERoQeQodQ ! +1>kшJ<(a?H-`c-؃UOqGF{N;Ow??^Ӟ*=R"J2?@Ϡ_f*1ïfXS} 1p"~hD+I3^HYFYAYM@FG9AȹJU柌a\1\Ki seμ(b@}6^%_fџ00w133eļ1uW ~hF!9k FeVy y)X\1crQnUPZċwzNo"=/^0fHs 8&`수Kmsel]$&8Ld4(N|80Mr̀_\_B&nN*>|\ToyִRa!l;W΢󜈣&쏖1ւqFy E GI%Idtwڃحmj{9g8UiTW +"`#r03o/ģFܟH s`c:'R# }"1KGɴF7ªuա]j!+4CqJCvi* +U(ZqQ*'">=;TqOS4#jy}Y@WPɦd|Mt>*]UR١V1QF3/bVnqnN.?O(M Q3}'1w +sw޵LQ) +>,s.+݅ٞ-ܜ$V)Y S.Wgė jUc1}Z̘173b_kdxċ'E5DAE@V@W=ۙ[(T V><-N8%E0%[!/ORJlQL'h$l&'NJDTSRjQLM&x9sg586kgB_,,-Ђ|sZS#.TH4+T#$)de3+ҚRRrSS6rRcS!s҈j|QNH#lDyiXxځЉRQ)h/р؞QQ&XR#R,%OɐOUL.SNjP-шԌʜFd]юЌ,E؈?<}-9@ K*@c*VQ2R/a~I8B2(^&0M> _Wס^+8w7("E54(#\ya2j:zvtZqcCyUTkM˫uffW/ʨM H/O)R,+R /Q)iW ,/\T|yWYտ(>|{5` +܍4 P"-o1iM }bD'Jeʅ(TjZ}Tת{VXX}Vca5ϪO^U(zW?\M>` vc7bjtԒ +9K!Kһ%N/Ȏb!sӤre}Z<[=Z)-hSqm٩rZťkGka5r.۰PEVvb ÛzK@ÀHwg- ^,F̻7E³7GҽTƵQn~wsjcESK>(8.!lN` `6G0=z ]4 (jDGd!t&0jK|F#LAU.xEKlFmNfCiiA"5wlþ]8]<sϤxMsR<&-`:?Ks ;N2'l'N[N,5X%f6Ut⤘L}7'&kf7{q9U~}n.˽^,P#X!t`AѠv+ƮhKh5jL$FDY[:v|̙9HDzSw=7EmS 5Z]jIj$jFLVST*lW9pZ٦枲FV쨫Q)༵u瀀@,hH uTB&hwMv-\OyhsZC hY sly2Ymϥw&9rߡhdâP{v q½S$ЁY^T=/RK~ہ>n +a? + .?[%!yO%R3w%_)~>܈ ڞm #4DOuSҊ| "\ֽvCp )xcq_&Q?cn)`y3nm=`ZmC?NfԥCtg;kx5mqSW\ 7¥C3Z1S{LS(VX:DYF:n4xa=Lvyl&՞d0)Q}yxS“*<^w~i:8=D:=Fv[`>cU{} +v{O7=dwSeju[mگuZSuCf0[#LWu0MNE.7%\ Pᪿ)>n8ڧ ꕠ+]U3hFI*"OjVhVݠ[K~w%~6raVޓO;^כPNr|dA8 +weMAʪdu2LVVW7[wvYYK-P{EYm zfUռ>}e( : 4RW~P;A +AMa~F(W&/ IS/0¬fapiJ s-VZl=+pMQN~a5-X:bNԿ#@]cMT7ied|Aʊ$ui0yFj 803tŌVBL ۮ }~Mm&0qFpi\K1ƚ*]wHrvBQQ|zZ\ٔ Q1 㣧ZEͱUa;:jmّG.7Ɋ>+Zda FnF;e軶gIUaY%ʇ@iTC63bz@)IQ&CL' M5d9*~Mv\݈Jح>k yfX ,2,\e?037{m^gPGidtf&+L44D51mɸxӱ))1)G&1d%[O*8nh +͎)$%^ 9$'MIV"5Iy}98Hݝo۟:g5EQ;fy +F 79,Ya9t~ CӦ[}l~HFMRϑim҄5&,gZ~nq>=<51SƴEҸQ~#eeGg% :<[2|ERfuB\۸%1UQ{Df|E8Dec!3eLh'>g902XKd0혞ky6 +yyҘcC2r"MI0MM=B0*7jU96ً"?q8(KǁmX +Ģ/2ka;rr} fRoq[Q|Yf~oЉ)&Ī'Ŏ4W`;z`nmuv[K~?̀ŠXFx9WS==Ǥ`*}W +Țܑ>:_TH:H;58zJ4aG4Q?`RepB56;lSp׶o2`0(Og?p X|60L YdXivHs<9e1}Q!كUfJSm4sy@t}VYnWtwm+/, 4'Fj:,栄9q@/K?c ,S愨Q% R/Q[lwp^sMK 5K+u>ޥJyK5W{C1S[9〺*$IK% \n5Wx pEw)`Eϊ^+'(|Sv[>{d;/[a깬c13e7M;.ӴbaqxρcK ;v%`Z@*U3UwC'tnIJ]7:oHynȖwܐPUlWT^EVuDZuCOQ۵¸ա6Pc/[BM>~ 'uiGwsǿ':,$CBLYW^>0w50 +HvuK?yNv_(aqsݹ0?>$\Hم10P0 j&g`K_ȡ5JK}IM-+\ }%Au5(~冨?e^D{cf G"_ob|qxhuhr^L~?1".=v;s3DK׺YPw>>&LcWe&~s3`=`o;ԾO~mw%m'Vܤ{/Q}E.FΤpy v?apLA1qk=cvt=B~#xA&k2o's"\Hzݜ3)l(m8¤EX__ +]$$d<2d $f#G +xF޾u&/lzSYB҃'1d(C +HPYFV*A$^"Stz”sg A, B!o%,2!|:jnv\<1*e# /9|2D?, + Ea00FQ>^M(FeKTD wnOX;kgW<-}rӮ]&-Оu5\KW p s䬅Phmњ D+ ̇ ycہxh{c= +'u![|\^+q\}8g9^KtQHGpnwS9D;ÝhkK;wOC< 4ą98甏K_:͑jHH'VK;o98vJvl_=-|TGkn20ƋZfZ;ض'κ5']SY\k ~2^e=\wSlw;bcF*wP=ڜּ8 qMnt6|g:g7 N~iglHv<6Ij"M +UUT=v8jJχF+<1ZI-$TKQ6": )f/2O^8e#>Pӭ vwCݢe%7d?X3^{j,ޥF˽/ZkīZ뀺+Ӆ?.y.&wCP5yz*{z:^/zIk{EV왪X?B?GoQ_q߅+nԔ=wK;﹦_ a20nDt_S;Ak$ +bk#ܱ6+JCeE%*J5);I]ܧtVR>K{7/C7q><1/+4”I#2k@_ >o?;ٖ-L>B`Yh, +)D(SOQi\M>Ts(ʢ0/IEQ}dQ!ɑU4ɍc>Q3:|ȰR}Vr𰍖aJ2=aN4Ĭӌ3\75[^Ҕ`0E^L*'&ht0#MkGgDէG.HLkuR}W(a-DC~yaY9{}~$QI:Kdy9C*F'D)Fħdg b7G"1veBnZ؟^.!Nhy` AϗI|aj- +Za|rӺKSʲS(F Vf$'% W$%%NIK0 Yk=dUT);0D% +]tM#7_18~c2&a dv o)+,sX<}X2-=Fd84C0tY\Z6&m.2u!"uExvVR/CXЅ +-4r5WøQ^ 'f)16ˀQ͐ҰlYZV<9k"qD*a&GFȜa>(s>4cEH6 ds F.d׎5!Y9qİm6cs+īI34:,d4mQQ+FVF;!`s}HaoFqI ԮT_븉'!e &#EM EL SMQl4`|qqS=nyq[t:gyB3;\aHٴA5^O5d4!ƈ-@戜憈]6W8-@2-Tֿ0RT8DP8Lg^S'MccRS6i||zE3g0#>96Qug&H2,0hsR +K>BPKzI%RpY84E9#LTy6ZؤsFujo՞0%Lja[c'X׸ª,@ p09,S'J澜y|םávb5N/G}z򖴧MVO`ZLN760:Um(kH4 vP߮?&_3%pF2djGb-N_Zzs j"=Ek.z !7f_f ++|ரl"-%ߧՀ{ +|כL]`0 l sn-)omύpx'_8~YF>%miu5 (9<\kwۜ5to_ 7Fܐj! x nb +N<ᯘWyu|G^] ]ŜRۛ1]}X47/u Rkj?!2j~Zs"ڐ.xwx[>Lu{0!鱛_}?Z/@bIga'9poy’`%v#>$DMƓ†ZL}L[F6jK84t7^xc\Gax{ (mlR| +\kr3.+w.-3~3j/LjNdќQD 6ٲ,]#<6?k&?j&5V3hk.Y*|݀/Qk~t_&Aࠅ@RU_Nƛ&zQ"!r2,| sg(K)fy5*ha<2hr7"yޕK?^N맃㒷7)`+, zaa i~˶yUqo[肽W \;HPDT ,ذ ƖD1fO6^6M1}g3s/y3g|i7E;>^|F 0۳7PAC5x26AG' Qx)(MZXXT֩jMj֙Vl7 8d^pba-ZbV$|Ÿ_%yEl + XaU74G X.ױ]X7K㦢N75:OT +q,6N,Mb31 +uNLIVLYBm=aUJ{RbZfijl﷨uɰEy(~lkخ fOʼnQ䈊Dw% ʼnabaVOHrf|J2&Y6'fĔx#c9xPHrXI!<%cQ92 'f(3"U$N4&<:}EdKY; ^6פfĔ{*sX~n!kK%( +y;ys[<!%/\Lʍr$]n"6@ͩTG4jr֘tɹ`r"8[6 ɖM{YI˲sG% +hq"~SdaH+b$CB_"G1Rtq"8O^PZT.j5 ,jPxܯ輅o] o +e3ٔy3c}o5m1}g-"lKےVFR *AW9Vz"*P"*İ)2[TQ UU}*6xzT3xlAצ 0X(x\c!5{5z.ZZ+D- [D9"n>B|\*E u_]賤H\H`ImIj}j%g.K^Q~vYڥFV*E\4gx'9'i7xL%1$t i0;iWo7`hQi艽v{YIfk1-p0F~0 V`& 9k>l}2lcR+c]I;K$i}҃?EN:)HXM&vs%苀y_ +`ҷv(BqGCyNy|73\Hfm_z>40؆VU HWC2dB}*k|^3l }]=F路|B~$ľ^ؗsOgOY7ڷo f;^a;^a;^u^c;^.'drewyѻ9gsg3a/V;ԾGJ k!oXYo gQ:xfa1~s ɳ, _Y ,d2pvu}a`Xy c7hG {Q>"C$S +7iTlYX6¤hZ?X1JG\\5ěE:y='ʸ&'9 a;llg;>)o*R"wme=n*r5^Tu6<5!\Q%e\4y>9G8k)6`%y< oÕj>2➅7^ ˖aVfU+VpiP.jy6a2zB+O>S1Jw-pfnǕၸ8" +F$LY#Q58>j)j84z ލ1Go3E>vA/ ]dY-n9pͩ|x2kA4Kц֘lG%ZGaE4, tB}'jQㄊd< S, (Kʥ:EaJe~Un@:':+IfufDi>oSO{8VXbe!P2CQP?, JCBqhP.y!RNbEV +ef:>d:-Ij%7w0YE)( X_@9A;[Y.0Am`Tk&Bc2+J4(#_)jlM34Œ^SHXLhS%Et5M4M51i"eUcqKs?qRc[خh*P;(:!OmB6FH&i 1E[ %i+ev*NM=h՞7j_3~sYMTD{~e^x)UſYP7 +y:[df#SiP!E-$D]˓tX]RkUE鶨#uL"tpW<*|Ne?V2/e$ d' GFd'#5yHAbSŘ):TLUD$(Ò6CCϚ'6 JUIec9u< ғ6 8 棐mJ7EZGbL$蝡{ V}ɢF%닥P}"X߬ Lߨ +UԾsoo*tYOxOfRw1ڒ6X +Ij eAlThsf#* Exn(fAb@nӨY٭9}|E-%+ \eNr-I+i8`[2K;BKD@D$!!^* D`%:$M)+De{qb~.żJSk +"YZ'裡PvԒE]lOh*#r+÷j|] PxTi*YpU.UsZinivSccɱ'ɱBİ'0Y lЊ,_Ʊ@ry@$xYaAO[,opƼ4¹AxibVkX-jg47\5|(N$N["3v^oFs% 1$xSiph*حrŬUޘ*3ZޚimƔ֕Ժ[ [/00Yi#nƼkW1kۀv`?"X`X !=wk0hwvrw-,vg7zLw} | dkga v0z]{{9i҃*a~&dž@}l Tl<17!8[H9Jc}yN4G~ Vck09@!t.:8OCOV>3 Ώ#S ,H.I' l(r=W>l`Nbާ7f,:`IoJp} ulǍ,YV[oom &M{?Z漐q0H=06dXM^%p,FGw6j^}ﳃg"{|ԱK4Em_:׸fԋ̽aqm>q]=D˜99|8% 7v4-̇e86d&&[~ʘ=c^N7OԵ?A4|k\ >-My6d(#:EԩF5yVjtPc5y=!vIcvT-}Wz ׷0,q-ưe&5x-;:9)F55ꩱf^o;a3x5;lm^vJO ۘ0"#>0./|0|qҩG2jTS+x-N 's^23vw8ZӝlI8e)~;1ΠpROIR1O y+="_tJ4*pSו* U8.9BUנϤLqҴ On1ӝ8bvN5Z}`3j'GSۗ9吿!"^y|8g +)X4O#o4퓽ur6OFluh-Z*GJL]S˧(,0P7C9K|\`ϩ<fsl13~.vhKB}VѾ k`\_#,",v+89<'V9+V:>+fbB#3R'!ownst:ZcX3-sF`,sDuNuBSȩBr*[rbsX|\,v,M*tN,p,~ĘP +>w5.X:ltlwG?MJDQ' n5B +Cs./JY I %@]"'= 6e;aPzL"O;Tye^(DW +R%z 9^UB21k&{RQxQ|HCJ xԹi`hָlO QB *}ǢwJP?!O,Dd__.׋)R)ѿWpV EP.Ȓn=z}ڇuXnᱍ}MV(  [9";h>|H*$bBp ^)wJ1ڐ>Etˊ_,6r%S>h\᱕}Qj0; 5aH GBX,Ó]x^,Ą׈MRTIGqZ",3 'qp!suvd`1QvF!C3i9IsH?E"6*ڨD!:*C*4QbxtN +QGTE_Wj?QFsY'j eVzvUlWۡQ#91cوXD#2.xǥ aqBH\L kvJ~>Oo' XmH|!|$'H%X!&a$D'z",)IICPR+'-|DWv3|MZ %?~?I HK؎L$>5w"R",mBf 8}.P'[%xK]ZJ+Kƻ. pq=ImMd1 ؖ|zoڥlSf?{ rlWxz37pύ[n Uܼ✼KcEc,6=Ya*d?,#UU]lO$_, + ýx"܊g`^\åΥap*4.͇ci5KYeo +K(E'c/5Sw=a -@]/@ ]0sGcv8Va ynQ f.ČDLԚr4brFLُ51uLX&T„*YX9>x-m[a9g#H~ nӖ |*&/w&4b|c,511#`xY k| ÖXA0; [y9hxHGB'2L\VvFm0chi0= 6ynհj ˶Sh _roZu= As@Kմyx?n4e~.dy6`5 ]4w͆Y;LaҥKeBHV@mJ#BYi5U5bjowv˓{{"Խzq{G E`/$$N4T ?OuBW"cXYx }@8jӏӚ:>ð?x +P=ECr# v>'Nz,p> &OD>X![@=d2Fi_2rv\a;$\ca(f;^eQ`xIE/O~Ml^5ǘv>5'1u/VS?^yBnD+4J0ݣ4M-o6'yӽqqr|H'o?b^\'33R aP!<^aN>Q`hX`5 o96sϛ>} +gbƞzc9;qZa _0~ZO _ MO6hp".328Ab؃Hbr^wb:I1s/t3q?s==_<4ظ`~'c|''>Lq/HB36QJ{'=mU^v +qwwwq7 Q"H$H@w(P + +uLgJ[Jvt(+<s}眽6Ho:{CUpJ!ţ3sZ_PkCq#e3 O?Po;om`{l,>/>; owZ7W='5ulR&0#}&=>b?I W8n#pJx!p< ~[dȗH,UhHc19cklU +s y#rsS2 qFYC2;~hW0e>-DKB\]Vшis"8O;۞iL1"}q88Hi'=K}N9hϧjr +GQK%Q f؟4gN .,%09/f#إt;cjخ+&UElU <.+o+u\V6ąYxZ OZezaz f4K ;519m19-;I6jŸX9tbTWĈ5O.yvWQ{r}P-m6AgǴ^v%c~b~6b   ڱΠc5I6ڇF1l| &r_LDKK+bOn;̳n˪16-ybl1s FͳƼ,*ҢC-XaщXfVg5^~6`Xd+Î}ݾ-, Ӏwj.{%lzs:c#0h4;bC 8TǡݎX؃NAt8GZcE,p~Khv^hrGp3/n{A܂ùG2&vR{soF51l.vw`E-pG<`{3Z<c=FQ9)< y=#z.T{#TyI% +v!?&0RE>zcOVJ$erzD)p5(]@N2Sf4H|h$'!!=˨DLF33̕BD!<RhBh(G(e2 +umj`o],6gi@l $f;">qف͉@LNsr6 ,!yCBp&!0wAWE! 1γL7ggqǘW©}]4l5l?MZQ%(S{wr8'PY )6,T-8/0 8.tB/ Hض&5V`nm]0m{ +ma L>-rhR܇|XqXq ꈢ> E;%]Xv=V/ä7F0-Ao-{Aw۠{ڽ/A6Ng)Mlrph9?%r?M$!@XCjօ1aagZáD41\PF:K5g^!Be;ω`*m ] r:p",Sntƕ> =7 q&Bԗ'sR3q6n3o( gEC]Lqߍ\61[I>7NN]L~w1e@%N3f4Mf 4~vQXA:u EY f5{'8ejy⦁[%>@J$,BGi1qv'Ft .4'Hl81磿Y^,WF.SirSS(@Qr@;.Lczv<27\.s_/.Ol2T4bnokȝwH:9_Pp]W]T yGQQ=D */3-Kk7I7B-'v;݇ėϋu'U@S{9i zWO aƱ}(!c!CPExx]qQ@EjnXbhQ#wb)ŝxH%::U)~HkwAg/VclBZC,d]TKadGc{\|H}+iKⶢGYCzA y$O9dwQ~@fl폰 l+gv@vTb+{CyG}+2)f {?#!G)>|&1vG;8CvmpxxߺJ_(n-=D%FS5{glJoo9?1#=z'-=s{NIF@ٗi!; +1Tmʵت܄m8c kUf0r i +q D,ս>ݷЫEt k+y%.\=\v(cRGXQ}?6Jx aa oXFhzxb$:Lf_e4N iۃZOX34*Sc a`ayz,eN4[B&4X|Ө}Pc_R`nBu4d›>Ya6豵b;gt> cb&L4:a;Ԣֱ5]vDT8M$\#nwוPy P4Sb3LC})cZb&Իbkj]Q햊*Tܭe(u_e(CxCey}\^:#8 b<XE;86-h4B5\PrPyǠ; (GO +|ۊ\> o2 2>Fz/(יf'Qj[1?|-u~jGJQB@G /  Av@ A=H ZH >䐋BrBRO(dqM_]SI;hGe +JtQl`;!;Y!AzH2B2ZIh%Ršօa$oF|!.#! + \ׁ3 8p\ՀND":z#b!2oB"b䈌No/3/䳗/?BڑhHb,〤$#>& qq &.q/GX8B $xQ"^D-LJ8Di///Q I zHH0C\b]苨D&F#")IYK.Fhr BRZҏ_r~+C2ϐ㰴DM$#@RqRg#F(1"%VOuBXBSe UK_ߌ>d+c<3O#xd rf_H@Zg{%ywY&m,e#0_v| +>g˙vY0h%Ln gvx!#21MzzvJy9?@Y|P]%bd@~%fpg)? P׃ZTm1*~  ~b?;ѿNA7;3^:;o)UbP“'ֈQu:!'9g(7Q.j#>^C~5E rQҸp=8!ȿ[6IjI&[M2!d8@xL&O I 5 +͟qAecr.ac@mSԜnԧ> C}~`RvHϤt=C؇l~?e?ٷ2f+<rGdrM8Q]Ik/R]S^Ԣ8PnF;^gv#A :9>"!j0{\r'7}s&\~)9\R\S\5 +<21?862>_09MK.Ʒ9o)B-ärYc(ξPA58j!_+j!3^x{L\I?o( +<bO(Ha*gAE'QbJURaާjuTwU}Yqs#T5uE]Jq''DqEzTMl +/clm'8-km[!d헳:a~?fۣl{#53O* Kg d lr08%Wyȑ-bl7vqvZ?]ô,ez3%=#r'AՊMYk_䳦g09Hae".Oxv`|Gaq+uOӊvd{(-~\rRgˑ/3.0..„|yB~# Mi#O7c5616&ZNd5-Ҋ'+[\R?N\p9'9"ΆrԒTTuTѫjX}:OC5?E]jX># n;8u;.uAC#&XiA- h_;}ډNCvtѩShmEnEwMzh;z) PF9i crxR{0c*-p@D4Aaڌ( lF4WcqLdզc4BQ=Zp{o2)n- `ZGݩ/TF6L``ᨳEe +,3QiYr2YaU+Jz +m&Q`sgr~B(Jx}c2:[0>dǧF6D*Qnyv(O@}*sP`_|j94#DZَrڌLHw>to|>t5X >`:v:IeNf(qC; +\\$!5p-G[:!q_ ${EY$z@wHeH +|`ljU|vtЎX5 (p7F5= {F 3Tx"٫IuHnG|#w1~g*%D$^jIju0SWvҎ\Md >#IHA_2_D,DTRD!"hƒN!,:B&𵈰 9.Ǥu [feJZv4Ӷ*QH;2 Crm@o!:(QA @DpC҂% EpND`_~"ߓցȽ)RZih'lC˱J SABbCjP'Dz"<,aa CHx*#Q&D?j |}/?7(9p oL=WRIϡ:cIQFt" e({G!(!L +br;> g*xo{1_k|#%TD%%Dks]QDdpikX:o +x%87> ANgb<T:&/K01R>&1Y8}AZ"XץJwYmSG /<%8=npI sZ3n9xt8Nqpr I&OQk⸜gs  ;{ xxS^!w$a%q'ϡ\P@z7Gu2}rcsՐI*x]~X:z *? mʶ +B]A$!@pw(Z܋JzNm*Syi;-u-S׹wsax}7{>u8vwYJ` M+9콘]8{b`NYk͛bR G\d`_$/.؋X{0y8eHMΡ 8b>{?2̷\b#sG~K~|GEʏ՟|~"&?ȟ *@c,.ܫĬGAn(P~F=:[]Be yUp_^?}Xhѯ躟ѹ?iiksIS)&0<"g7?S6'+mqk61Z4,E hmVh]f5iXMT^Q2MvؤI5ϫEsRMp.ܰrfCI)v-%r!Z謹ޚ>8MsNSKz\JR.uҬ.vuN8>u.R:uۣ~V-ϫ㒚Z ;TwT~FLW8|Of]nJJd`N_u?Tcc꟢l5jT@kTؤvMȠYBU[Ur*BRy1 a~'7@co/$y;0tFk{ qTKF!4R MWMXF:JUa  ѧ*VQTu +0`}ད%~_\dw ?FEګ.U5UD%<*Kã +U]Ǵ(f +c v6*7rO+;Q [Ҹ<]Jۨ*Yq^ҸH%(>]*/U~BF)7C9IS4_딑_)(-JM'Qi&>2{ 8QDos=сMQj$G'0_IaMUNrR̔Je6(=MiiJMkWIx |L3LP~R|"Zrgx*5'P9JʉWbnrsWoQL~ f*`" +w* +Sh[ޛx +L#{h$j}^y<ϛHTBe Qr _觸P((YEي*.VDqKV2^RLAXvLe_ +M +,5I'av6vxs(bRM7ȷ^H'(n|+9ɦY=A%0wX6i5*O~A֜D%9Ѥplk dΡ4ϡ,Y͏߹G0t0M7-5"h6("3m6 ;9g y_y+&s'o1F"&ocm4v7]rcnA!s>^+oa95rBo[f;Pccs}ZjE3ҿQ6v~ESU#woQ(՗dz>_\}8 *hXlw`wƏ/~| +  #$ϻt;{q%|rü' ˤ %ѹ>Eo?ux?^F},:)];cDQc㼱q||C|!g|iG\5tK jv;'`{ +h\l/]Hmc9C=z{'[M|zXp@̲VJrT:޾?A0zd>/ca+LO^K7 Ʒƶ+?,[#{_\Q#lPJF@-Mpc<a\.eZ]w~Q\7w;~0],[5vM1‘ G p&xh%~,Ǐe",h?9YL3>Ft~i?V i>~fzb"G(F+sD c>~(xөG^bC&ct7Y$~R t@ʐ$[YzUpWP-i>tlnИawjj{Q-?< Ht/")=ei<46Pvd xu8TݡNcZ4qZ8[ME NUtjPqTj}L2K<ؙHA)%oAe1qQ9{%Xc]5%I-.jvWk]ڨz1u>p[jMt? +*xD=p +,(n>/SN_+pTFy3\qLUWFxګ\U޵nQx US>RCK? t(AoEWRtS9#&YzQuH?oU/J2<$ZE* lSAP*7xr(ƲCN(+~e |0&e?*X^791?Zȓڰ! v`88LE!* IQ~HB Z:eQV$eRz*ETjq%GWrԫ`R:uhmå` ,J|מN ( cTpWG(7"X9QʊHPfd2"UJnQJtcf()fb+>*6%_V\&tm> +>J-\k +rgc ~G9~*;E1J PZLRbbl%+1Z MOI\ĭJQIg||dS?L:Mgqy=_:?jȕR,'y认D_%&(>1ZqIIMTlrb+ҠȔENUxbmVh߫7)taЍ 9^8b#|4ŧ*6[1iAJPdz" +ͬS"98GAY I/n|!,~=%r\^K;~4_q*$G҉I\")$'F9) +Q`nj7Z?O^YpHwʽi癉!~RnE/m#yFy=17yBLK(QE +(Q"[(LyɳZ%r/ 9r-]+r.CNeOOxLr)1kcH5EH-wqFaL[)d!%Z򯰕w<=Q/0Uʵ"˥BΕrcL9T}^VݢaUx*a8vi$ra28r_]L Z ZW9z 9Eʡ.Iuٲ+m]l5~kPNYգoɪ`ҠZ)ù~ +xT0iր$)×.8b?~+9mlZ5O֭aA V&֑@blER! LZޚ⚩Yɼ"ߥ_4'w/ 4xO| [ \ L _oErwN4^'}A~ďS)Ibq='QU|MF[W.0؃6Cwc|@qTQY h^Lѓǥ {mC;Ce:+%Js~Yg07?b<@H}1Q56EDlbw>ŏO#xU. +-M:j5e_ nğk~D}+?}_ovto~| v<~< +/$c<§A>cq3 =KGr-x2_UX'DlO lϣ]Kt|{/] ;t\!o-;a} 1eT-p$|ah`nz;Ӈ%5oe:N`<@,^"uqb+y8t=3w(6\t)WMߌ6w؟d2s}'1 +a'!\ubU^ճz.6ޫmg(T{e꽞)wW< pÑC)UZ-ƏE1?0^fd^M4"Kzn}ɌƉ/L2^ǟLue'It O"mɀ#Oȏ&xƒ]b.3 +zi2Kw9=^ğ6,}Xr6P".h |pkiO<Sk%,m$l`,ۧFj_^Ue 1]=0Ht/ <[CA\f9RPM쪮A?8T1jN֘!=$_-CKS+]YGyF2LWp7qJh>K<=dqj Vl9HTK%~v*uQr|LXe(/[iEJRr@;ثE V+&.E$GJלJ wPR¼ذpń):v:t29OvEU+EY&chgEG{(2Oѡ +VXLBc[ +kQ`#o~y'WC"D|M?[kG9UXho* ștr$.y"ঐ')(1R +HʐR+m.вs(}.1s,#`"oh +E +G.0=͇ L7fM?&C>l 3  ~!LDV/Ce>x_r R'`\ +s)ZΤa l&l:uFfme#,g VbQ0i\+:2f5c5Rr##GF +q,Dǘl$Qn< G>3vLrx1cG!a|9c ~ KOA5xP>Lr4I?4~@u| *_U_B?#P{f]ex؃{ WΣ +_lF=!~|Q1DY9|}!I_>G~L,.*%H;FEx?C}4~<OHC>zzOgpe|q3 _Wޕ&7#y.##~܏s)؞y(eelCd(dH1(-;b=1v>>j19MB~:PXnv+mi~~=0Ɉ p« mdVi3wq׍THU$&Ñ ZVt5#_f1mvb}d| YTɣÍɷ%Dic> ku޿ =6jZú]+c9~YJ|,EΐD-AM f _`[x}}BgXt0$p2Ks)eU4N;83ee<۠F%}]SNoa5n4؋Bƭ뉞Cdwv]{6l;ljgBMEK`oh6rN8e*jk X]Q{PFP[\!-5>ưhCv2۲?)~)uPYB45¬0Ƈ1/hSFѤ6ȩj>GmTmDTUUU=UX wLqE) y!Mp-j3;bNs9jRzKj-#TcPu*3Ua],ozS턊mW3dP}R\;yRl>MT_H{l1ŪƖj[*m^)Ae68&ѣ"8*߹G7{r.);]&O7Mqy9Cg^#qVXMaYEǼj+dgG5C1L=?YJI6q)ج"qr^%[qbJ*d-it 2M*[ȲަpKȟe*Be_O} ~+|z-<d +z.#IqRM2IRMZᔥ"I2Oѕ^EU5(]) + +'T p+ZC}$YPE]i8إ]蚋MRO{}(ˡBW4wrK*C+Ӌ lh86qlxH&qFc +AXpNXX1a#ݺ߇tŨ5Rw2')U:Pb-anlэ-Kfux7MX17R6 ? u}(PEH;W`/C>|`ahlz5^ +b>'e.Kr?bLbN?Be4R7 8mؐ}w> a#_k=.[Z@̍^Nh"ߓ=2 +ee,c)]ʤaQ).~_/qhxJC4ދJ "Cf=6fbc3f6Ŧ@m#nD\7`P;.cL߃P\@ bG_l <"8S6$$~ G\e}^/e=1'F\G.8:yiw\;g-o3Db:{d.sCg-D~|Y/=!`ߓ%G|B{}f٘]}Be_a>ø> nG`boܛpz@~HQ} +eVNfz=~o¸~C%z?W +3}1#1޳z.92:8wF߱G2W`*ṯj~y=ϡdzžm~=B'`ďuIhr?z0nqզ_^W-~ +4| 5QwAxuwx<^=ϐL'YP-pnȍCwDxऀ%,j%6ǭ̓1|}o1-D=ǵswwb(p@?> +,N)r]z1XƟHʜʬg0<_]cl}W[fFlwxW= O⽁Tt['.F)ydeډcqXGjV vL3XL.e~O}#/J@;8O\77Nc z/+0>bX=h>c/E3d7sw"&~.nun}=1ҭΖɃ<{+MAbJ-9U jܬѪ ꐫTګ + +/oSiY?Ud"}r-X1V?rl|ua1PDEdSCxLɪ5e:£"UDP>E|։-I%FMzzfRlKS;ɔӝ/Gji˖>U^Y2LyRQ f}k[k%<>Sm,6ojM)6&!ϊ#*{SD$]1fʒ]'s(ELRT\EzV٣p7깠s<[vC6W#׳eztP@t)&٬dl,0)&"K]x܊HQŊ̯UZ8[!+TS*d'*dW,d.Z('ΥhGIɻNY`ŁwW5K1?`6{d.5+&SIKVBHe8${!^8:K^Fq\{W:cs{e9r5<:ty"Fz(c):`Xlb SdMBcTM&T j5pu İT abBAߟ;0߇x =5n U(ŦlGI,fu3̗\3nk4BB'5|;9{f5^Ցn.y)vAdu`3w_utBId,vӎ8}>k2E&Zu@ +&[ ?,`MK%cvC+115Mߞ&?[=)]آMd҅?.ՈX`4C;ѡsP\E,˙գS1gb1HE9b6,W=)3l13ӧ# ]aNn!?b>df?jͼW9w  \Ciѓc1z,'HꋰBB_d^|ἿzQC6}(0p$yy \;~^XnNbd; =MZZ6ktg{/ Y"fV'7A3dȠO-$^^oCu.v`ƨz]1=Ƴ^ơX14Zѥ2/5V<]Oב+jxN lw$^n /.s(׮R8ffc^q) t,/X`5NBЪmkоUr*#J~%MʿS^G{p۵$"<;X`%3 <`UV*Ƌeآ9Dp)ыXO !gQf|#O: ߍldM4rL8XE!*iP~hB'6]9a^~JiJ5=/rG|*w8A(d}?ki 7:J%V7VnDr"YeDTzTҢ}J2S\o), V18~m(QNM#7Ŷpy,6(T9Qi4Zr)R$krY*ګؘra;!ly p/:JNmPNENJQx0qAʲYcSbLlr2oWͫX{r8&'c=7dqޯh糊}Wx :g7}("h,hoF'5H)7 !JRêXCNg4c=Hlk5K2V(ڵS p^ Ȕ 2CSJd!hfu4Q#%&ߤaWR.l.b\& Y$ɜT褑J2,UXʀB7(}O+8-BRuo[@|u[;6j7Uؤ`76U;ZMfwIJTDjLi +OoVhzB2zaˀd dPfPlf\ƨ_?ߒn,G6@'Gc&BBb6MydG)2˪,²<d9(A=fYPCz(=O stRG >e|~zCFtb\H%~ILIVhUP 803vPE q5ltO$2PH=]K{ws{:߇҇gWA~t&JY$9su+2l.$1/%`,rOB rvciJuw =>\dǢK3CI*"eM +jdck`SSՑH"u$غ|%^f Ol--Ʊll4>~5* 5`oa/cM`)K Ni>lNI(`'5kdu+ ts:Y3|J=)G/z1Mn>Iu eA7G(>9BR;-Lc]HWs&(yoxۮs[|t@|g3qye3>-β>z}PX680i˹9s'p.^!OMƓ#O7O|O݄'^$r<\sq>6 ?y1zN_F~Baaa"b㯑#We!$?Pz^{XooҌ(?ǐbQ%Z ~shر]Q*=*Ke 8UxD|E P۽8(☇C2>aÄz  +G`E'qϣIM>Xy=0s]~};88r$Ѓ1ta ;pq4XvpdBƮdݍg]0;``abtOI_,wzFapnc/3Ѓq9pZ@h/XVpbHa.FJƮgc4w2$ƟF+􃱝aާDsZO4wݰ/cS +/,K=vvۉm-0Fbd={gsк-ƃ }DAG~XbWo`\0g^01=lx\+`}X G/hbZ3_K@FW z.Rn_kb0Qŀ F`x(UQC$4 +N8s5&ab<ÔDvI(-Oa`*H# S N#+5pdOݐ-Z=#&Di$4o%[MȵRFY.F052CxpN!Uz2H5&44TsF6iLm n*-*T~E NTFp҃F!JWR(%u>[ktLݲled:n&ʝU^Ypd,~ }7^$,s"-rlJ6)1"I rE*>DqQ5rF=A虲E/ռ 9&n-O)o<G:YC1JЯ1qRoJM.I)8Ufx9)[d*R)u,Nc+:fl[a^&WucFB wPxONGeJ&U,7|$3\v[4XVYctmy+ި\PF8+((g?C\ǘ~}(ːP(>oM%)&9k*:>)XHVE9u)"6M8J_v .HHz8 _>mС~xo>dq3P`@b6]a Vtf- +JcѤxt N e`ČZ: 4)3(N3(6! PSryX8y=bH!~ī(X=$!=(ዹ3s!ֹp=;]2;x:N7Nb]bE<@LA6ka *`B}ф@/Bk-WӞ,N.L?L}G + DƐM/VC &fNkCԠE(}Ro +n`"iݓ |ta ?k0`k0pYV0WZB82韚 ?MK6SдMqpj9)Q"EȋA `T/u~n 2.3a\<ߧ : ~x;1yIrO0F е0h .]~RzBAgu6(6/$t{(q= u # +m +~E.鰖`gpZowKٺo$|$t  +{51A!ön߹+"*&v_Ap[R`M#Dl& a8a0RG0O`50`$_x ~[>~ď^x^x^x^򒣽Oy)Ub+OBr69WCɭ_晟W~s͸ EԤfDՈJvOVY+4.ߊ˜Ww /<-X+ѩm 4j~}!rAM&*`}ēK&  `g|"4Uo|M.E6ܳH%ITmhDZ-doY:ف=&-k@я#lyk=gK{ wVYJ_#ģ`4"UdNV@>m fj(+!ٱXΙ#&;o׼ErtjZXk@$h/5iey&1fۦG؀֟=N6`s7kYګm6z,]Vq0`BVZ26T00Hs"BȊr鐙_~Xj):#ihO-}~|TYV\TrHSe"OnYl*EMV^,[3f^n?pH_%urQ,HSdo*U D22d:6] f, 0p=dƭ3:;p8r3+fs?/ Ie?~)֍;l?/dR,sXTkw=A fq7 rޑO~7e\A@sh8eL@MfпG +v">(.+,wԔdVnڷX[qвq4sŒWTت*lLdX4abiz8FgN" ?#p?tB!+0@(}#\Ir[qђe+7/{9{7V6SkJ_`i}2,Sgz7{2LY :Ů'=pGS;"Q( `08!b @EWq/ F@.Hi#J+CMUEa^~aQ[g_r1nʔk1Pr_X"V؞䈨CiqQ{Gnƀnh7k )p7c pPh!p&A# it ͘=i2/yni(=q5Û3az7RdBc,c<\E  E1بGN@Gp)&POP'0BT 8 ؁@Ab}Goܞ H{pDllŒ()r18Fd%ЕeA43K7ս|;_!o7^saϋt,d>0zʐ L#L` "o$Ƴnp ,!T F(?A(vj<$T ڀ#{fHlط? V-GxA*D|tP Qg1j>)2>#G9R_U^x鬌c$:\;bc(}zvQl/MEgІy5)eI@ +WSE,pRNZ @9ic @(" GRa•lN~VEsxCvy˻Bj2ElH'AKQUeǕҟtf\Ak Gf/m8q%\VI S (LMumFU*ʝJNr7Z62A|c5WH hT+' !UmHq$ᚢqܥҽ2]OܑAn$dҟ|YgWˇޓŪ-kVp_"Tc:Fc`Je%}ә+j\.@B8MԆB;] +MjU֞pUl+{떴[:5kd륫w'=g^yP]uF⢢k%742O{-ur=jBt^]۵zuk1X!@Ҙ@1>BE1F_ 39m@@:מkxYQ^uWiʃǚQ̈́Sb7pk# LvfFzڱgyR3MMM2426툶'We(-@GRzNĎ@.03z-jm`y D|S!U}SR*dwGOr$]GN:whuiMI=|(n}qW>zD z'MϪ&#>8%IzPVnc:eV~S"ΑYEGz`AljF5w +ɾ-Bv$vK2hq `x)?mhhx {|&%6rWxxIUOafS&N26v +Jķ84AuzZ%pͥ&ˣ/,O<ܠ<=9ǾUevh},E\/_.uq3vl߾3"&.15cO> endobj 188 0 obj <> endobj 186 0 obj <> endobj 180 0 obj <> endobj xref 0 242 0000000001 65535 f +0000000000 00000 f +0000005327 00000 n +0000000000 00000 f +0000000000 00000 f +0000172622 00000 n +0000172020 00000 n +0000166361 00000 n +0000236557 00000 n +0000238189 00000 n +0000168873 00000 n +0000168252 00000 n +0000237176 00000 n +0000169506 00000 n +0000335729 00000 n +0000225237 00000 n +0000225314 00000 n +0000005204 00000 n +0000005617 00000 n +0000000000 00000 f +0000000000 00000 f +0000240750 00000 n +0000167374 00000 n +0000171389 00000 n +0000239221 00000 n +0000235680 00000 n +0000296651 00000 n +0000238757 00000 n +0000328163 00000 n +0000240118 00000 n +0000239412 00000 n +0000170125 00000 n +0000281689 00000 n +0000170738 00000 n +0000308930 00000 n +0000006077 00000 n +0000000000 00000 f +0000000000 00000 f +0000006394 00000 n +0000000000 00000 f +0000000000 00000 f +0000281178 00000 n +0000309108 00000 n +0000006802 00000 n +0000000000 00000 f +0000000000 00000 f +0000296508 00000 n +0000235045 00000 n +0000007249 00000 n +0000000000 00000 f +0000000000 00000 f +0000281546 00000 n +0000241239 00000 n +0000007670 00000 n +0000000000 00000 f +0000000000 00000 f +0000008104 00000 n +0000000000 00000 f +0000000000 00000 f +0000173342 00000 n +0000174103 00000 n +0000179661 00000 n +0000180562 00000 n +0000222123 00000 n +0000222965 00000 n +0000260406 00000 n +0000261118 00000 n +0000255937 00000 n +0000256495 00000 n +0000207378 00000 n +0000208107 00000 n +0000211425 00000 n +0000212150 00000 n +0000257974 00000 n +0000258657 00000 n +0000198825 00000 n +0000199647 00000 n +0000336449 00000 n +0000337136 00000 n +0000243783 00000 n +0000244424 00000 n +0000215402 00000 n +0000216170 00000 n +0000188361 00000 n +0000189020 00000 n +0000251817 00000 n +0000252408 00000 n +0000263667 00000 n +0000264359 00000 n +0000296913 00000 n +0000297158 00000 n +0000253637 00000 n +0000254197 00000 n +0000328381 00000 n +0000328872 00000 n +0000246655 00000 n +0000247241 00000 n +0000249648 00000 n +0000250281 00000 n +0000193783 00000 n +0000194521 00000 n +0000282359 00000 n +0000282969 00000 n +0000192392 00000 n +0000192920 00000 n +0000310386 00000 n +0000310879 00000 n +0000284860 00000 n +0000285410 00000 n +0000309324 00000 n +0000309813 00000 n +0000298089 00000 n +0000298292 00000 n +0000268337 00000 n +0000268989 00000 n +0000284152 00000 n +0000284353 00000 n +0000242070 00000 n +0000242655 00000 n +0000173105 00000 n +0000173707 00000 n +0000179277 00000 n +0000180180 00000 n +0000221797 00000 n +0000222570 00000 n +0000260175 00000 n +0000260729 00000 n +0000255837 00000 n +0000256158 00000 n +0000207145 00000 n +0000207712 00000 n +0000211191 00000 n +0000211746 00000 n +0000257777 00000 n +0000258299 00000 n +0000198535 00000 n +0000199255 00000 n +0000336259 00000 n +0000336744 00000 n +0000243609 00000 n +0000244066 00000 n +0000215167 00000 n +0000215750 00000 n +0000188195 00000 n +0000188633 00000 n +0000251656 00000 n +0000252116 00000 n +0000263483 00000 n +0000263973 00000 n +0000296805 00000 n +0000253538 00000 n +0000253853 00000 n +0000328322 00000 n +0000328583 00000 n +0000246533 00000 n +0000246886 00000 n +0000249492 00000 n +0000249940 00000 n +0000193577 00000 n +0000194140 00000 n +0000282215 00000 n +0000282621 00000 n +0000192311 00000 n +0000192614 00000 n +0000310327 00000 n +0000310580 00000 n +0000284777 00000 n +0000285076 00000 n +0000309270 00000 n +0000309523 00000 n +0000298024 00000 n +0000268183 00000 n +0000268610 00000 n +0000284091 00000 n +0000241946 00000 n +0000242328 00000 n +0000340145 00000 n +0000005166 00000 n +0000340368 00000 n +0000340171 00000 n +0000724993 00000 n +0000000331 00000 n +0000000016 00000 n +0000014495 00000 n +0000000196 00000 n +0000166271 00000 n +0000723800 00000 n +0000723630 00000 n +0000723722 00000 n +0000723610 00000 n +0000329388 00000 n +0000340054 00000 n +0000334795 00000 n +0000319077 00000 n +0000329297 00000 n +0000327229 00000 n +0000311482 00000 n +0000318986 00000 n +0000318052 00000 n +0000298841 00000 n +0000311391 00000 n +0000307996 00000 n +0000286907 00000 n +0000298750 00000 n +0000295574 00000 n +0000271465 00000 n +0000286816 00000 n +0000280244 00000 n +0000225481 00000 n +0000271374 00000 n +0000234111 00000 n +0000008397 00000 n +0000225390 00000 n +0000013933 00000 n +0000014367 00000 n +0000165854 00000 n +0000014412 00000 n +0000014447 00000 n +0000015666 00000 n +0000015754 00000 n +0000017838 00000 n +0000234628 00000 n +0000234545 00000 n +0000234580 00000 n +0000280761 00000 n +0000280678 00000 n +0000280713 00000 n +0000296091 00000 n +0000296008 00000 n +0000296043 00000 n +0000308513 00000 n +0000308430 00000 n +0000308465 00000 n +0000318569 00000 n +0000318486 00000 n +0000318521 00000 n +0000327746 00000 n +0000327663 00000 n +0000327698 00000 n +0000335312 00000 n +0000335229 00000 n +0000335264 00000 n +trailer <<524DA4D40AE2406EB10A2A97CC737239>]>> startxref 725487 %%EOF \ No newline at end of file diff --git a/biblio/plingo/2021-Solution Enumeration by Optimality in Answer Set Programming.pdf b/biblio/plingo/2021-Solution Enumeration by Optimality in Answer Set Programming.pdf new file mode 100644 index 0000000..512114b Binary files /dev/null and b/biblio/plingo/2021-Solution Enumeration by Optimality in Answer Set Programming.pdf differ diff --git a/code/.vscode/launch.json b/code/.vscode/launch.json new file mode 100644 index 0000000..c043748 --- /dev/null +++ b/code/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "julia", + "request": "launch", + "name": "Run active Julia file", + "program": "${file}", + "stopOnEntry": false, + "cwd": "${workspaceFolder}", + "juliaEnv": "${command:activeJuliaEnvironment}" + } + ] +} \ No newline at end of file diff --git a/code/asp/drafts/alarm.lp b/code/asp/drafts/alarm.lp new file mode 100644 index 0000000..ebb5f05 --- /dev/null +++ b/code/asp/drafts/alarm.lp @@ -0,0 +1,5 @@ +burglary;-burglary. % 0.1:: +earthquake;-earthquake. % 0.01:: + +alarm:- burglary. +alarm;-alarm :- earthquake. % 0.8:: \ No newline at end of file diff --git a/code/asp/drafts/assp_pag43.lp b/code/asp/drafts/assp_pag43.lp new file mode 100644 index 0000000..3267d55 --- /dev/null +++ b/code/asp/drafts/assp_pag43.lp @@ -0,0 +1,2 @@ +q. +p :- q, not r. \ No newline at end of file diff --git a/code/asp/drafts/assp_pag46.lp b/code/asp/drafts/assp_pag46.lp new file mode 100644 index 0000000..1bc10fe --- /dev/null +++ b/code/asp/drafts/assp_pag46.lp @@ -0,0 +1 @@ +p :- -p. \ No newline at end of file diff --git a/code/asp/drafts/bachelor.lp b/code/asp/drafts/bachelor.lp new file mode 100644 index 0000000..30f593e --- /dev/null +++ b/code/asp/drafts/bachelor.lp @@ -0,0 +1,9 @@ +person(joey). + +married(X); -married(X) :- person(X). + +male(X); female(X) :- person(X). + +bachelor(X) :- male(X), not married(X). + +#show bachelor/1. \ No newline at end of file diff --git a/code/asp/drafts/bachelor.pl b/code/asp/drafts/bachelor.pl new file mode 100644 index 0000000..7a3fd9d --- /dev/null +++ b/code/asp/drafts/bachelor.pl @@ -0,0 +1,6 @@ +person(joey). +% male(X); female(X) :- person(X). +male(X) :- person(X). +female(X) :- person(X). + +bachelor(X) :- male(X), \+ married(X). \ No newline at end of file diff --git a/code/asp/drafts/barber.lp b/code/asp/drafts/barber.lp new file mode 100644 index 0000000..2682de2 --- /dev/null +++ b/code/asp/drafts/barber.lp @@ -0,0 +1,8 @@ +shaves(X, Y) :- barber(X), villager(Y), not shaves(Y, Y). + +villager(a). +barber(b). + +villager(b) ; -villager(b). + +query :- not shaves(b, b). \ No newline at end of file diff --git a/code/asp/drafts/choices_01.lp b/code/asp/drafts/choices_01.lp new file mode 100644 index 0000000..189c5f3 --- /dev/null +++ b/code/asp/drafts/choices_01.lp @@ -0,0 +1,11 @@ +{ a ; b }. + +% Answer: 1 +% +% Answer: 2 +% b +% Answer: 3 +% a +% Answer: 4 +% a b +% SATISFIABLE \ No newline at end of file diff --git a/code/asp/drafts/choices_02.lp b/code/asp/drafts/choices_02.lp new file mode 100644 index 0000000..c742984 --- /dev/null +++ b/code/asp/drafts/choices_02.lp @@ -0,0 +1,9 @@ +a ; b. + +% Answer: 1 +% b +% Answer: 2 +% a +% SATISFIABLE +% +% In Answer 2 we (also) have not b. \ No newline at end of file diff --git a/code/asp/drafts/choices_03.lp b/code/asp/drafts/choices_03.lp new file mode 100644 index 0000000..616525b --- /dev/null +++ b/code/asp/drafts/choices_03.lp @@ -0,0 +1,10 @@ +{ a ; b }. +:- a, not b. + +% Answer: 1 +% +% Answer: 2 +% b +% Answer: 3 +% a b +% SATISFIABLE \ No newline at end of file diff --git a/code/asp/drafts/choices_04.lp b/code/asp/drafts/choices_04.lp new file mode 100644 index 0000000..44e5e93 --- /dev/null +++ b/code/asp/drafts/choices_04.lp @@ -0,0 +1,5 @@ +a ; b. +:- a, not b. +% Answer: 1 +% b +% SATISFIABLE \ No newline at end of file diff --git a/code/asp/drafts/choices_05.lp b/code/asp/drafts/choices_05.lp new file mode 100644 index 0000000..f991810 --- /dev/null +++ b/code/asp/drafts/choices_05.lp @@ -0,0 +1,8 @@ +{ a ; -a }. +:- a, not -a. + +% Answer: 1 +% +% Answer: 2 +% -a +% SATISFIABLE diff --git a/code/asp/drafts/choices_06.lp b/code/asp/drafts/choices_06.lp new file mode 100644 index 0000000..deafa47 --- /dev/null +++ b/code/asp/drafts/choices_06.lp @@ -0,0 +1,5 @@ +a::0.7. +b ; c :- a. +% Answer: 1 +% -a +% SATISFIABLE \ No newline at end of file diff --git a/code/asp/drafts/color.lp b/code/asp/drafts/color.lp new file mode 100644 index 0000000..625b4db --- /dev/null +++ b/code/asp/drafts/color.lp @@ -0,0 +1,15 @@ +node(1..6). + +edge(1,2). edge(2,4). edge(3,1). +edge(4,1). edge(5,3). edge(6,2). +edge(1,3). edge(2,5). edge(3,4). +edge(4,2). edge(5,4). edge(6,3). +edge(1,4). edge(2,6). edge(3,5). +edge(5,6). edge(6,5). + +col(r). col(b). col(g). + +1 { color(X,C) : col(C) } 1 :- node(X). +:- edge(X,Y), color(X,C), color(Y,C). + +#show color/2. \ No newline at end of file diff --git a/code/asp/drafts/credal_01.lp b/code/asp/drafts/credal_01.lp new file mode 100644 index 0000000..5cafa70 --- /dev/null +++ b/code/asp/drafts/credal_01.lp @@ -0,0 +1,4 @@ +a ; -a. + +s :- not w, not a. +w :- not s. \ No newline at end of file diff --git a/code/asp/drafts/cyclic.lp b/code/asp/drafts/cyclic.lp new file mode 100644 index 0000000..20cb323 --- /dev/null +++ b/code/asp/drafts/cyclic.lp @@ -0,0 +1,9 @@ +% p :- not p. % UNSAT +% not p :- p. % SAT: {} +% p :- -p. % SAT: {} +% -p :- p. % SAT: {} +% not p :- -p. % SAT: {} +% -p :- not p. % SAT: -p +a :- b. +b :- a. +a :- not a. \ No newline at end of file diff --git a/code/asp/drafts/cyclic.pl b/code/asp/drafts/cyclic.pl new file mode 100644 index 0000000..20c8813 --- /dev/null +++ b/code/asp/drafts/cyclic.pl @@ -0,0 +1,14 @@ +a :- b. +a :- \+ a. +b :- a. +% > swipl cyclic.pl +% ERROR: /home/fc/sci/projetos/plp/code/asp/cyclic.pl:2: +% ERROR: Stack limit (1.0Gb) exceeded +% ERROR: Stack sizes: local: 1.0Gb, global: 27Kb, trail: 1Kb +% ERROR: Stack depth: 7,455,777, last-call: 0%, Choice points: 7,455,758 +% ERROR: Probable infinite recursion (cycle): +% ERROR: [7,455,777] user:p +% ERROR: [7,455,776] user:p +% Warning: /home/fc/sci/projetos/plp/code/asp/cyclic.pl:2: +% Warning: Goal (directive) failed: user:p +% \ No newline at end of file diff --git a/code/asp/drafts/disj.lp b/code/asp/drafts/disj.lp new file mode 100644 index 0000000..6d62252 --- /dev/null +++ b/code/asp/drafts/disj.lp @@ -0,0 +1,3 @@ +% prob(a) = 0.3 +a ; -a. +b ; c :- a. \ No newline at end of file diff --git a/code/asp/drafts/double_negation.lp b/code/asp/drafts/double_negation.lp new file mode 100644 index 0000000..850c811 --- /dev/null +++ b/code/asp/drafts/double_negation.lp @@ -0,0 +1,42 @@ +%not not a. +%% UNSATISFIABLE +%%% ie no models. + +% a. +%% Answer: 1 +%% a +%% SATISFIABLE +%%% ie there is (only) one (stable) model: {a} + +% -a. +%% Answer: 1 +%% -a +%% SATISFIABLE + +% --a. +%% *** ERROR: (clingo): parsing failed +%%% WTF? + +% not a. +%% Answer: 1 +%% +%% SATISFIABLE +%%% ie there is (only) one (stable) model: {} +%%% +%%% this program states that there is no information. In particular, there is no information about a. +%%% Therefore there are no provable atoms. Hence the empty set is a stable model. + +% not -a. +%% Answer: 1 +%% +%% SATISFIABLE + +% b. +% a;c. +% not a :- b. +%% Answer: 1 +%% b -a +%% SATISFIABLE + +a. +b :- not a. \ No newline at end of file diff --git a/code/asp/drafts/ex03.lp b/code/asp/drafts/ex03.lp new file mode 100644 index 0000000..0300b60 --- /dev/null +++ b/code/asp/drafts/ex03.lp @@ -0,0 +1,3 @@ +p(a) :- not p(b). +p(b) :- not p(a). +:- p(b). \ No newline at end of file diff --git a/code/asp/drafts/gcE01.lp b/code/asp/drafts/gcE01.lp new file mode 100644 index 0000000..6b49a6e --- /dev/null +++ b/code/asp/drafts/gcE01.lp @@ -0,0 +1,9 @@ +col(r ; g ; b). + +% var C is local in this rule. +% More specificlly, it is bound to the (lhs) cardinality contraint. +% Also, it varies over all instantiations of col(C). +1 { color(X, C) : col(C) } 1 :- node(X). +:- edge(X, Y), color(X, C), color(Y, C). + +#show color/2. \ No newline at end of file diff --git a/code/asp/drafts/gcI01.lp b/code/asp/drafts/gcI01.lp new file mode 100644 index 0000000..05a2c5a --- /dev/null +++ b/code/asp/drafts/gcI01.lp @@ -0,0 +1,8 @@ +node(1 .. 6). + +edge(1 ,2). edge(2 ,4). edge(3 ,1). +edge(4 ,1). edge(5 ,3). edge(6 ,2). +edge(1 ,3). edge(2 ,5). edge(3 ,4). +edge(4 ,2). edge(5 ,4). +edge(6 ,3). edge(1 ,4). edge(2 ,6). +edge(3 ,5). edge(5 ,6). edge(6 ,5). \ No newline at end of file diff --git a/code/asp/drafts/hanoiE.lp b/code/asp/drafts/hanoiE.lp new file mode 100644 index 0000000..453c7dd --- /dev/null +++ b/code/asp/drafts/hanoiE.lp @@ -0,0 +1,21 @@ +% Generating +1 { move(D, P, T) : disk(D), peg(P) } 1 :- T = 1 .. moves. + +% Defining +move(D, T) :- move(D, _, T). % when target peg is irrelevant +on(D, P, 0) :- init_on(D, P). % init +on(D, P, T) :- move(D, P, T). % effect: move +on(D, P, T + 1) :- on(D, P, T), not move(D, T + 1), T < moves. % inertia +blocked(D - 1, P, T + 1) :- on(D, P, T), T < moves. % D on P, T => P blocked to D - 1 +blocked(D - 1, P, T) :- blocked(D, P, T), disk(D). % P blocked to D => P blocked D - 1 + +% Testing +:- move(D, P, T), blocked(D - 1, P, T). +:- move(D, T), on(D, P, T - 1), blocked(D, P, T). +:- not 1 { on(D, P, T) } 1, disk(D), T = 1 .. moves. + +:- goal_on(D, P), not on(D, P, moves). + +% Displaying +% #hide. +#show move/3. \ No newline at end of file diff --git a/code/asp/drafts/hanoiI.lp b/code/asp/drafts/hanoiI.lp new file mode 100644 index 0000000..ace48dc --- /dev/null +++ b/code/asp/drafts/hanoiI.lp @@ -0,0 +1,11 @@ +#const moves = 15. + +peg(a ; b ; c). +disk(1..4). +init_on(1..4, a). +goal_on(1..4, c). + +%* + Implicit relative locations on a peg. + In a peg, disk are placed top-down from the largest to the smallest. +*% diff --git a/code/asp/drafts/heads_tails.lp b/code/asp/drafts/heads_tails.lp new file mode 100644 index 0000000..b2e30b1 --- /dev/null +++ b/code/asp/drafts/heads_tails.lp @@ -0,0 +1,4 @@ +heads; -heads. + +tails :- -heads. +-tails :- heads. \ No newline at end of file diff --git a/code/asp/drafts/monty_hall.lp b/code/asp/drafts/monty_hall.lp new file mode 100644 index 0000000..a1c9f74 --- /dev/null +++ b/code/asp/drafts/monty_hall.lp @@ -0,0 +1,20 @@ +prize(1, (1,3) ) ; prize(2, (1,3)) ; prize(3, (1, 3)). + +selected(1). + +open_door(2, (1,2)) ; open_door(3, (1,2)) :- prize(1, _). +open_door(2, (1,1)) :- prize(3, _). +open_door(3, (1,1)) :- prize(2, _). + +win_keep :- + prize(1, _), + open_door(_, _). +win_switch :- + prize(2, _), + open_door(3, _). +win_switch :- + prize(3, _), + open_door(2, _). + +% #show win_keep/1. +% #show win_switch/1. \ No newline at end of file diff --git a/code/asp/drafts/no_model_cyclic.lp b/code/asp/drafts/no_model_cyclic.lp new file mode 100644 index 0000000..729189e --- /dev/null +++ b/code/asp/drafts/no_model_cyclic.lp @@ -0,0 +1 @@ +a :- not a. \ No newline at end of file diff --git a/code/asp/drafts/no_model_wa.lp b/code/asp/drafts/no_model_wa.lp new file mode 100644 index 0000000..4508a01 --- /dev/null +++ b/code/asp/drafts/no_model_wa.lp @@ -0,0 +1,8 @@ +a. +b. +-ok :- a, b. +ok :- not -ok. +% +% WHAT ABOUT +% a :- not a. +% diff --git a/code/asp/drafts/nonstrat.lp b/code/asp/drafts/nonstrat.lp new file mode 100644 index 0000000..a13ff51 --- /dev/null +++ b/code/asp/drafts/nonstrat.lp @@ -0,0 +1,7 @@ +-a ; a. % c1 +b :- not c, not a. % c2 +c :- not b. % c3 + +prob_r(a, 3, 10). +prob_r(-A, C - B, C) :- prob_r(A, B, C). + diff --git a/code/asp/drafts/onabove.lp b/code/asp/drafts/onabove.lp new file mode 100644 index 0000000..8a809eb --- /dev/null +++ b/code/asp/drafts/onabove.lp @@ -0,0 +1,5 @@ +on(a,b). +on(b,c). + +above(X,Y) :- on(X,Y). +above(X,Y) :- on(X,Z), above(Z,Y). \ No newline at end of file diff --git a/code/asp/drafts/p01.lp b/code/asp/drafts/p01.lp new file mode 100644 index 0000000..4c558ef --- /dev/null +++ b/code/asp/drafts/p01.lp @@ -0,0 +1,4 @@ +a. %::0.3 => a;-a +b;-b. +c :- not b, not d. +d :- a, not c. \ No newline at end of file diff --git a/code/asp/drafts/p18.lp b/code/asp/drafts/p18.lp new file mode 100644 index 0000000..8075624 --- /dev/null +++ b/code/asp/drafts/p18.lp @@ -0,0 +1,3 @@ +p(a, b). +p(b, c). +p(X, Y) :- p(X, Z), p(Z, Y). \ No newline at end of file diff --git a/code/asp/drafts/p19.lp b/code/asp/drafts/p19.lp new file mode 100644 index 0000000..b1a1019 --- /dev/null +++ b/code/asp/drafts/p19.lp @@ -0,0 +1,2 @@ +q(f(a)). +p(X) :- q(X). \ No newline at end of file diff --git a/code/asp/drafts/p20.lp b/code/asp/drafts/p20.lp new file mode 100644 index 0000000..3ea3934 --- /dev/null +++ b/code/asp/drafts/p20.lp @@ -0,0 +1,2 @@ +q(f(a)). +p(X) :- -q(X). \ No newline at end of file diff --git a/code/asp/drafts/pasp01.lp b/code/asp/drafts/pasp01.lp new file mode 100644 index 0000000..18687dd --- /dev/null +++ b/code/asp/drafts/pasp01.lp @@ -0,0 +1,3 @@ +b ; -b. + +h1 ; h2 :- b. \ No newline at end of file diff --git a/code/asp/drafts/pasp_general.lp b/code/asp/drafts/pasp_general.lp new file mode 100644 index 0000000..ef0571a --- /dev/null +++ b/code/asp/drafts/pasp_general.lp @@ -0,0 +1,49 @@ +% 0.6 :: edge(1, 2). +% 0.1 :: edge(1, 3). +% 0.4 :: edge(2, 5). +% 0.3 :: edge(2, 6). +% 0.3 :: edge(3, 4). +% 0.8 :: edge(4, 5). +% 0.2 :: edge(5, 6). +% +% ======================================= +% PARTICULAR INSTANCE +% ======================================= +% +edge(1, 2). +edge(1, 3). +edge(2, 5). +edge(2, 6). +edge(3, 4). +edge(4, 5). +edge(5, 6). +% +% == HARD COLORING +% +red(1). +green(4). +green(6). +% +% ======================================= +% GENERAL DESCRIPTION +% ======================================= +% +edge(X, Y) :- edge(Y, X). +% +node(X) :- edge(X, _) ; edge(_, X). +% +red(X); green(X); blue(X) :- node (X). +% +% == CONSTRAINTS +% +:- edge(X, Y), red(X), red(Y). +:- edge(X, Y), green(X), green(Y). +:- edge(X, Y), blue(X), blue(Y). +% +% ======================================= +% SOLVER DIRECTIVES +% ======================================= +% +#show red/1. +#show green/1. +#show blue/1. \ No newline at end of file diff --git a/code/asp/drafts/paths.lp b/code/asp/drafts/paths.lp new file mode 100644 index 0000000..baa83d4 --- /dev/null +++ b/code/asp/drafts/paths.lp @@ -0,0 +1,15 @@ +obs(a, c, 9, 1). +obs(c, b, 7, 3). +obs(d, c, 3, 2). +obs(d, b, 9, 1). + +edge(A,B); -edge(A,B) :- obs(A, B, _, _). + +prob(X,Y, P, P + N) :- edge(X,Y), obs(X,Y, P, N). +prob(X,Y, N, P + N) :- -edge(X,Y), obs(X,Y, P, N). + +path(X,Y, 1) :- edge(X,Y). +path(X,Y, 2) :- edge(X,Z), path(Z, Y, _). + +#show prob/4. +#show path/3. \ No newline at end of file diff --git a/code/asp/drafts/pdist.lp b/code/asp/drafts/pdist.lp new file mode 100644 index 0000000..a62615b --- /dev/null +++ b/code/asp/drafts/pdist.lp @@ -0,0 +1,2 @@ +a; -a. +b; c :- a. \ No newline at end of file diff --git a/code/asp/drafts/pqr.lp b/code/asp/drafts/pqr.lp new file mode 100644 index 0000000..8acdf51 --- /dev/null +++ b/code/asp/drafts/pqr.lp @@ -0,0 +1,6 @@ +p(1). +p(2). +p(3). + +q(3) :- not r(3). +r(X) :- p(X), not q(X). \ No newline at end of file diff --git a/code/asp/drafts/pqueens.lp b/code/asp/drafts/pqueens.lp new file mode 100644 index 0000000..c87e92b --- /dev/null +++ b/code/asp/drafts/pqueens.lp @@ -0,0 +1,20 @@ +% Column and row domains. +col(1 .. n). +row(1 .. n). +% One queen on some row per colum. +1 { queen(I, J) : row(J) } 1 :- col(I). +% One queen on some columns per row. +1 { queen(I, J) : col(I) } 1 :- row(J). +% Number descending diagonals. +diag1(I, J, I - J + n) :- col(I), row(J). +% Number ascending diagonals. +diag2(I, J, I + J - 1) :- col(I), row(J). +% +% Negative Restrictions +:- D = 1 .. 2 * n - 1, not { queen(I, J) : diag1(I, J, D) } 1. +:- D = 1 .. 2 * n - 1, not { queen(I, J) : diag2(I, J, D) } 1. +% +% Output this predicate. +#show queen/2. +%#show diag1/3. +%#show diag2/3. \ No newline at end of file diff --git a/code/asp/drafts/prob01.lp b/code/asp/drafts/prob01.lp new file mode 100644 index 0000000..7ee0efb --- /dev/null +++ b/code/asp/drafts/prob01.lp @@ -0,0 +1,5 @@ +gripe;-gripe. +febre;-febre :- gripe. + +#show febre/0. +#show gripe/0. \ No newline at end of file diff --git a/code/asp/drafts/prob02.lp b/code/asp/drafts/prob02.lp new file mode 100644 index 0000000..597fa4e --- /dev/null +++ b/code/asp/drafts/prob02.lp @@ -0,0 +1,2 @@ +cross :- -train. +train;-train. \ No newline at end of file diff --git a/code/asp/drafts/py_01.lp b/code/asp/drafts/py_01.lp new file mode 100644 index 0000000..9b69a25 --- /dev/null +++ b/code/asp/drafts/py_01.lp @@ -0,0 +1,22 @@ +#script (python) + +import clingo + +N = clingo.Number + +def gcd(a, b): + if a.number == 0: + return b + else: + na = a.number + nb = b.number + nc = N(nb % na) + return gcd(nc, a) + +#end. + +p(210, 213). +p(1364, 385). +gcd(X, Y, @gcd(X,Y)) :- p(X, Y). + +#show gcd/3. \ No newline at end of file diff --git a/code/asp/drafts/py_02.lp b/code/asp/drafts/py_02.lp new file mode 100644 index 0000000..f0fd009 --- /dev/null +++ b/code/asp/drafts/py_02.lp @@ -0,0 +1,16 @@ +#script (python) + +def main(prg): + p = [] + p.append(("base", [])) + p.append(("a", [1, 3])) + prg.ground(p) + prg.solve() + +#end. + +a. +#program a(s,t). +b(s,t). +#program base. +c. \ No newline at end of file diff --git a/code/asp/drafts/roads.lp b/code/asp/drafts/roads.lp new file mode 100644 index 0000000..0d5cda3 --- /dev/null +++ b/code/asp/drafts/roads.lp @@ -0,0 +1,14 @@ +road(berlin, potsdam). +road(potsdam, werder). +road(werder, brandenburg). +road(X, Y) :- road(Y, X). + +blocked(werder, brandenburg). + +route(X, Y) :- road(X, Y), not blocked(X, Y). +route(X, Y) :- route(X, Z), route(Z, Y). + +% prob: 0.5 +drive(X) :- route(berlin, X). + +#show drive/1. \ No newline at end of file diff --git a/code/asp/drafts/s.lp b/code/asp/drafts/s.lp new file mode 100644 index 0000000..17add7e --- /dev/null +++ b/code/asp/drafts/s.lp @@ -0,0 +1,7 @@ +p(1). +p(2). +p(3). + +q(3) :- not r(3). + +r(X) :- p(X), not q(X). diff --git a/code/asp/drafts/toh.lp b/code/asp/drafts/toh.lp new file mode 100644 index 0000000..c5805b2 --- /dev/null +++ b/code/asp/drafts/toh.lp @@ -0,0 +1,29 @@ +#const moves=15. + +% instance +peg(a;b;c). +disk(1..4). +init_on(1..4, a). +goal_on(1..4, c).% generating +1 { move(D, P, T) : disk(D) : peg(P) } 1 :- T = 1..moves. + +% defining +move(D, T) :- move(D, _, T). + +on(D, P, 0) :- init_on(D, P). +on(D, P, T) :- move(D, P, T). +on(D, P, T + 1) :- on(D, P, T), not move D(T + 1), T < moves. + +blocked(D - 1, P, T + 1) :- on(D, P, T), T < moves. +blocked(D - 1, P, T) :- blocked(D, P, T), disk(D). + +% testing +:- move(D, P, T), blocked(D - 1, P, T). +:- move(D, T), on(D, P, T - 1), blocked(D, P, T). +:- not 1 { on(D, P, T) } 1, disk(D), T = 1..moves. + +:- goal_on(D, P), not on(D, P, moves). + +% displaying +#hide +#show move/3 diff --git a/code/asp/drafts/tohE.lp b/code/asp/drafts/tohE.lp new file mode 100644 index 0000000..df4a5a0 --- /dev/null +++ b/code/asp/drafts/tohE.lp @@ -0,0 +1,26 @@ +% generating + +% Only one move per "move" +% Also, restrict the "Disk" and "Peg" +1 { move(D, P, T) : disk(D) , peg(P) } 1 :- T = 1 .. moves. + +% defining +move(D, T) :- move(D, _, T). + +on(D, P, 0) :- init_on(D, P). +on(D, P, T) :- move(D, P, T). +on(D, P, T + 1) :- on(D, P, T), not move(D, T + 1), T < moves. + +blocked(D - 1, P, T + 1) :- on(D, P, T), T < moves. +blocked(D - 1, P, T) :- blocked(D, P, T), disk(D). + +% testing +:- move(D, P, T), blocked(D - 1, P, T). +:- move(D, T), on(D, P, T - 1), blocked(D, P, T). +:- not 1 { on(D, P, T) } 1, disk(D), T = 1..moves. + +:- goal_on(D, P), not on(D, P, moves). + +% displaying +% #hide +#show move/3. diff --git a/code/asp/drafts/tohI.lp b/code/asp/drafts/tohI.lp new file mode 100644 index 0000000..918d2de --- /dev/null +++ b/code/asp/drafts/tohI.lp @@ -0,0 +1,7 @@ +#const moves = 15. + +% instance +peg(a ; b ; c). +disk(1 .. 4). +init_on(1 .. 4, a). +goal_on(1 .. 4, c). \ No newline at end of file diff --git a/code/asp/drafts/tutorial_01.pl b/code/asp/drafts/tutorial_01.pl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/code/asp/drafts/tutorial_01.pl diff --git a/code/asp/drafts/tutotial_01.lp b/code/asp/drafts/tutotial_01.lp new file mode 100644 index 0000000..a73152d --- /dev/null +++ b/code/asp/drafts/tutotial_01.lp @@ -0,0 +1,5 @@ +p(1;2). +q(1;2). +r(X,Y) :- p(X), q(Y), X != Y. + +#show r/2. \ No newline at end of file diff --git a/code/asp/drafts/unsound.lp b/code/asp/drafts/unsound.lp new file mode 100644 index 0000000..196625e --- /dev/null +++ b/code/asp/drafts/unsound.lp @@ -0,0 +1,4 @@ +sleep :- not work, not insomnia. +work :- not sleep. + +insomnia ; -insomnia. diff --git a/code/asp/fplp/example_05-1.lp b/code/asp/fplp/example_05-1.lp new file mode 100644 index 0000000..e8c989f --- /dev/null +++ b/code/asp/fplp/example_05-1.lp @@ -0,0 +1,6 @@ +b :- not a. +c :- not b. +c :- a. + +prob(frac(1,100)) :- a. +prob(frac(99,100)) :- not a. diff --git a/code/asp/fplp/example_05-2.lp b/code/asp/fplp/example_05-2.lp new file mode 100644 index 0000000..a980849 --- /dev/null +++ b/code/asp/fplp/example_05-2.lp @@ -0,0 +1,5 @@ +b :- not a. +c :- not b. +c :- a, not p. +p :- not q. +q :- not p, b. \ No newline at end of file diff --git a/code/asp/plp/alarm.plp b/code/asp/plp/alarm.plp new file mode 100644 index 0000000..947e590 --- /dev/null +++ b/code/asp/plp/alarm.plp @@ -0,0 +1,22 @@ +{burglary}. +:~not burglary.["2.19722"@0,0,()] + +{earthquake}. +:~not earthquake.["1.38629"@0,1,()] + +{hears_alarm(mary)}. +{hears_alarm(john)}. +:~not hears_alarm(mary).["-0.84729"@0,2,(mary,)] +:~not hears_alarm(john).["-0.84729"@0,2,(john,)] + +alarm :- burglary. +alarm :- earthquake. +calls(X) :- alarm, hears_alarm(X). + +person(mary). +person(john). + +% Evidence that alarm has (been observed) to be true +:- not alarm. + +&query(burglary). \ No newline at end of file diff --git a/code/asp/plp/coins.plp b/code/asp/plp/coins.plp new file mode 100644 index 0000000..88cbb15 --- /dev/null +++ b/code/asp/plp/coins.plp @@ -0,0 +1,7 @@ +{ heads(C) } :- C=1..2. +:~ not heads(C), C=1..2. [0@0,0,(C,)] + +two_heads :- heads(1), heads(2). +&query(heads(1)). + +:- two_heads. \ No newline at end of file diff --git a/code/asp/plp/cplint.plp b/code/asp/plp/cplint.plp new file mode 100644 index 0000000..0a440c4 --- /dev/null +++ b/code/asp/plp/cplint.plp @@ -0,0 +1,15 @@ +heads :- &problog("0.4"). +col(1,red) :- &log("0.3"). +col(1,blue) :- &log("0.7"). +col(2,red) :- &log("0.2"). +col(2,green) :- &log("0.3"). +col(2,blue) :- &log("0.5"). + +:- not { col(C,_) } = 1, C=1..2. + +win :- heads, col(_,red). +win :- col(1,C), col(2,C). + +% &evidence(col(2,green),true). +&query(win). +&query(win, col(2,green)). \ No newline at end of file diff --git a/code/asp/plp/sbfe.plp b/code/asp/plp/sbfe.plp new file mode 100644 index 0000000..2ab9e69 --- /dev/null +++ b/code/asp/plp/sbfe.plp @@ -0,0 +1,7 @@ +{ a }. +:~ not a. ["0.3"@0,0,()] + +b ; c :- a. +:- a. + +&query(b). \ No newline at end of file diff --git a/code/asplang/ASPLang.jl b/code/asplang/ASPLang.jl new file mode 100644 index 0000000..3c686eb --- /dev/null +++ b/code/asplang/ASPLang.jl @@ -0,0 +1,356 @@ +module ASPLang + +export parse_asp, debug_asp, + literal_grammar, term_grammar, aggregate_grammar, asp_grammar, + Node, Variable, StringConstant, SymbolicConstant, AnonymousVariable, NumberConstant, Variable, + Functor, FunctionTerm, + Negated, Inverted, Product, Sum, + LT, LE, EQ, NE, GE, GT, + LTAtom, LEAtom, EQAtom, NEAtom, GEAtom, GTAtom, + Atom, ClassicalLiteral, NafLiteral, + Level, Contribution, WeightAtLevel, + CountAggregate, SumAggregate, MaxAggregate, MinAggregate, + Aggregate, Elements, InclusionCondition, + Constraint, LeftBound, RightBound, + Choice, RestrictedChoice, Choices, + Disjunction, Body, Rule, Restriction, WeakRestriction, Annotation, + Query, Program + +macro terminal(lang) + return quote + struct $lang <: Node end + end +end + +macro variable(lang) + return quote + struct $lang <: Node + args + end + end +end + +using ParserCombinator +#= + DATA STRUCTURES + =# + +abstract type Node end +Base.:(==)(n1::Node, n2::Node) = (typeof(n1) == typeof(n2)) && (n1.args == n2.args) + +@variable Variable +@variable StringConstant +@variable SymbolicConstant +@variable AnonymousVariable +@variable NumberConstant + +@variable Functor +@variable FunctionTerm +@variable Negated +@variable Inverted +@variable Product +@variable Sum + +@terminal LT +@terminal LE +@terminal EQ +@terminal NE +@terminal GE +@terminal GT +@variable LTAtom +@variable LEAtom +@variable EQAtom +@variable NEAtom +@variable GEAtom +@variable GTAtom + +@variable Atom +@variable ClassicalLiteral + +@variable NafLiteral + +@variable Level +@variable Weight +@variable Contribution +@variable WeightAtLevel + +@variable CountAggregate +@variable SumAggregate +@variable MaxAggregate +@variable MinAggregate + +@variable Aggregate +@variable Elements +@variable InclusionCondition +@variable Constraint +@variable LeftBound +@variable RightBound + +@variable RestrictedChoice +@variable Choice +@variable Choices +@variable Disjunction +@variable Annotation +@variable Body + +@variable Rule +@variable Restriction +@variable WeakRestriction +@variable Query +@variable Program + +#= +------------------------------------------------------ +GRAMMARS +------------------------------------------------------ +=# +@with_names begin +spc = Drop(Star(Space())) +@with_pre spc begin +@with_post spc begin +# +# +# TERMS +# +# +#---------------------------# +# variable # +#---------------------------# +variable = p"[A-Z]([a-zA-Z0-9_]*)" > Variable +#---------------------------# +# string constant # +#---------------------------# +string_constant = E"\"" + p"[^\"]*" + E"\"" > StringConstant +#---------------------------# +# symbolic constant # +#---------------------------# +symbolic_constant = p"[a-z]([a-zA-Z0-9_]*)" > SymbolicConstant +#---------------------------# +# anonymous variable # +#---------------------------# +anonymous_variable = e"_" > AnonymousVariable +#---------------------------# +# number constant # +#---------------------------# +number = (e"0" | p"[1-9]([0-9]*)") > NumberConstant +neg_number = E"-" + number > Negated +#---------------------------# +# variable term # +#---------------------------# +variable_term = variable | anonymous_variable +#---------------------------# +# ground term # +#---------------------------# +ground_term = symbolic_constant | string_constant | number # | neg_number +#---------------------------# +# basic term # +#---------------------------# +basic_term = ground_term | variable_term +basic_terms = StarList(basic_term, E",") +#---------------------------# +# arith op # +#---------------------------# +# arith_op = e"+" | e"-" | e"*" | e"/" +#---------------------------# +# functor # +#---------------------------# +functor = p"[a-z]([a-zA-Z0-9_]*)" > Functor +#---------------------------# +# term # +#---------------------------# +term = Delayed() +#---------------------------# +# terms # +#---------------------------# +terms = StarList(term, E",") +#---------------------------# +# function term # +#---------------------------# +function_term = functor + E"(" + terms + E")" |> FunctionTerm +#---------------------------# +# value # +#---------------------------# +value = ground_term | variable_term | (E"(" + term + E")") +#---------------------------# +# negated # +#---------------------------# +negated = Delayed() +negated.matcher = function_term | value | (spc + E"-" + negated > Negated) +#---------------------------# +# multiplicative factor # +#---------------------------# +mul_factor = E"*" + negated +#---------------------------# +# inverted factor # +#---------------------------# +inv_factor = E"/" + negated > Inverted +#---------------------------# +# product # +#---------------------------# +product = negated | (negated + Plus(mul_factor | inv_factor) |> Product) +#---------------------------# +# positive parcel # +#---------------------------# +pos_parcel = E"+" + product +#---------------------------# +# negated parcel # +#---------------------------# +neg_parcel = E"-" + product > Negated +#---------------------------# +# sum # +#---------------------------# +sum = product | (product + Plus(pos_parcel | neg_parcel) |> Sum) +#---------------------------# +# term # +#---------------------------# +term.matcher = value | function_term | negated | product | sum +term_grammar = term + Eos() +# +# +# LITERALS +# +# +#---------------------------# +# bin op # +#---------------------------# +bin_lt = (E"<" > LT) +bin_le = (E"<=" > LE) +bin_eq = (E"=" > EQ) +bin_ne = (E"!=" > NE) +bin_gt = (E">" > GT) +bin_ge = (E">=" > GE) +bin_op = bin_lt | bin_le | bin_eq | bin_ne | bin_gt | bin_ge +#---------------------------# +# builtin atom # +#---------------------------# +builtin_atom = + (term + bin_lt + term |> LTAtom) | # less than + (term + bin_le + term |> LEAtom) | # less equal + (term + bin_eq + term |> EQAtom) | # equal + (term + bin_ne + term |> NEAtom) | # not equal + (term + bin_gt + term |> GTAtom) | # greater than + (term + bin_ge + term |> GEAtom) # greater equal +#---------------------------# +# classical literal # +#---------------------------# +atom = symbolic_constant + Opt(E"(" + terms + E")") # |> Atom + +negated_atom = Delayed() +negated_atom.matcher = atom | (spc + E"-" + negated_atom > Negated) + +classical_literal = atom | negated_atom +#---------------------------# +# naf literal # +#---------------------------# +naf_literal = builtin_atom | classical_literal | (E"not" + classical_literal > NafLiteral) +naf_literals = StarList(naf_literal, E",") +# +literal_grammar = naf_literal + Eos() +# +# +# AGGREGATES +# +# +#---------------------------# +# weight at level # +#---------------------------# +weight_at_level = (term > Weight) + Opt(E"@" + term > Level) + Opt(E"," + terms |> Contribution) |> WeightAtLevel +#---------------------------# +# aggregates # +#---------------------------# +aggregate_element = (basic_terms |> Elements) + Opt(E":" + naf_literals |> InclusionCondition) +aggregate_elements = StarList(aggregate_element, E";") +# +count_aggregate = Opt(term + bin_op |> LeftBound) + + E"#count" + spc + E"{" + (aggregate_elements |> Constraint) + E"}" + + Opt(bin_op + term |> RightBound) |> CountAggregate +# +sum_aggregate = Opt(term + bin_op |> LeftBound) + + E"#sum" + spc + E"{" + (aggregate_elements |> Constraint) + E"}" + + Opt(bin_op + term |> RightBound) |> SumAggregate +# +min_aggregate = Opt(term + bin_op |> LeftBound) + + E"#min" + spc + E"{" + (aggregate_elements |> Constraint) + E"}" + + Opt(bin_op + term |> RightBound) |> MinAggregate +# +max_aggregate = Opt(term + bin_op |> LeftBound) + + E"#max" + spc + E"{" + (aggregate_elements |> Constraint) + E"}" + + Opt(bin_op + term |> RightBound) |> MaxAggregate +# +aggregate = count_aggregate | sum_aggregate | min_aggregate | max_aggregate +aggregate_grammar = aggregate + Eos() +# +# +# PROGRAMS +# +# +#---------------------------# +# choice # +#---------------------------# +choice_element = classical_literal | (classical_literal + E":" + naf_literals |> RestrictedChoice) +choice_elements = StarList(choice_element, E";") +choice = Opt(term + bin_op |> LeftBound) + + E"{" + (choice_elements |> Choices) + E"}" + + Opt(bin_op + term |> RightBound) |> Choice +#---------------------------# +# disjunction # +#---------------------------# +disjunction = PlusList(classical_literal, E"|") |> Disjunction +#---------------------------# +# body # +#---------------------------# +body_element = naf_literal | aggregate | (E"not" + aggregate > Negated) +body = PlusList(body_element, E",") |> Body +#---------------------------# +# head # +#---------------------------# +head = disjunction | choice +#---------------------------# +# annotation # +#---------------------------# +annotation = E"::" + term > Annotation +#---------------------------# +# statement # +#---------------------------# +statement = + # strong restriction + (E":-" + body + E"." > Restriction) | + # rule + (head + Opt(annotation) + Opt(E":-" + body) + E"." |> Rule) | + # weak restriction + (E":~" + Opt(body) + E"." + spc + E"[" + weight_at_level + E"]" |> WeakRestriction) +statements = StarList(statement, E"") +#---------------------------# +# query # +#---------------------------# +query = classical_literal + E"?" > Query +#---------------------------# +# program # +#---------------------------# +program = statements + Opt(query) |> Program +#---------------------------# +# asp # +#---------------------------# +asp_grammar = program + Eos() +end +end +end + +parse_asp(source::String, grammar=asp_grammar) = parse_one(source, grammar)[1] # |> simplify + +function debug_asp(source::String, grammar=asp_grammar, show_trace=false) + debug, task = make(Debug, source, grammar; delegate=NoCache) + try + once(task) + expr = parse_asp(source, grammar) + println("---\n\"$source\"\n\tparses to\n$(expr)\n---") + catch #_::ParserException + println("Error parsing after \"$(source[1:debug.max_iter - 1])\" and before \"$(source[debug.max_iter:end])\".\n") + + if show_trace + parse_dbg(source, Trace(grammar=grammar)) + end + end +end + +end \ No newline at end of file diff --git a/code/asplang/asp-core-2_syntax.ebnf b/code/asplang/asp-core-2_syntax.ebnf new file mode 100644 index 0000000..1b46024 --- /dev/null +++ b/code/asplang/asp-core-2_syntax.ebnf @@ -0,0 +1,54 @@ +Id ::= [a-z] [A-Za-z0-9_]* +Variable ::= [A-Z] [A-Za-z0-9_]* +StringConstant ::= \"([^\"] | \\\")\" +SymbolicConstant ::= [a-z] [A-Za-z0-9_]* +AnonymousVariable ::= "_" +Number ::= 0 | [1-9][0-9]* +VariableTerm ::= Variable | AnonymousVariable +GroundTerm ::= SymbolicConstant | StringConstant | "-"? Number +BasicTerm ::= GroundTerm | VariableTerm +BasicTerms ::= BasicTerm ("," BasicTerm)* +ArithOp ::= "+" | "-" | "*" | "/" + +Term ::= Id ("(" Terms? ")")? + | Number + | StringConstant + | Variable + | AnonymousVariable + | "(" Term ")" + | "-" Term + | Term ArithOp Term +Terms ::= Term ("," Term)* + +BinOp ::= "<" | "<=" | "=" | "!=" | ">" | ">=" + +BuiltinAtom ::= Term BinOp Term +ClassicalLiteral ::= "-"? SymbolicConstant ("(" Terms? ")")? + +NafLiteral ::= "not"? ClassicalLiteral | BuiltinAtom +NafLiterals ::= NafLiteral ("," NafLiteral)* + +WeightAtLevel ::= Term ("@" Term)? ("," Terms)? + +AggregateFunction ::= "#count" | "#sum" | "#max" | "#min" +AggregateElement ::= BasicTerms? (":" NafLiterals?)? +AggregateElements ::= AggregateElement (";" AggregateElement)* +Aggregate ::= (Term BinOp)? AggregateFunction "{" AggregateElements? "}" (BinOp Term)? + +ChoiceElement ::= ClassicalLiteral (":" NafLiterals?)? +ChoiceElements ::= ChoiceElement (";" ChoiceElement)* +Choice ::= (Term BinOp)? "{" ChoiceElements? "}" (BinOp Term)? + +Disjunction ::= ClassicalLiteral ("|" ClassicalLiteral)* + +Body ::= (Body ",")? (NafLiteral | "not"? Aggregate) +Head ::= Disjunction | Choice + +Statement ::= ":-" Body? "." + | Head (":-" Body?)? "." + | ":~" Body? "." "[" WeightAtLevel "]" + +Query ::= ClassicalAtom "?" +Statements ::= Statement+ + +Program ::= Statements? Query? diff --git a/code/asplang/draftASP.jl b/code/asplang/draftASP.jl new file mode 100644 index 0000000..e2304c3 --- /dev/null +++ b/code/asplang/draftASP.jl @@ -0,0 +1,8 @@ +using ParserCombinator + +symbolic_constant = p"[a-z]([a-zA-Z0-9_]*)" +grammar = symbolic_constant + Eos() + +source = "A" +expr = parse_one(source, grammar)[1] +println("Source $source => $expr") \ No newline at end of file diff --git a/code/asplang/drafts.jl b/code/asplang/drafts.jl new file mode 100644 index 0000000..3622b0f --- /dev/null +++ b/code/asplang/drafts.jl @@ -0,0 +1,58 @@ +include("ASPLang.jl") + +using .ASPLang + +function test_parse(source, grammar=asp_grammar) + expr = parse_asp(source, grammar) + println("$source => $(expr).\n") + print(pstring(expr)) +end + +# test_parse("\"a\"", term_grammar) +# test_parse(" - - 2", term_grammar) +# test_parse("f(0) + (A - 1) * a / 3 + f( 1, B, 2 + 3, g(0) )", term_grammar) + +# test_parse("a", literal_grammar) +# test_parse("-a(3)", literal_grammar) +# test_parse("not a(3)", literal_grammar) +# test_parse("not -a(3)", literal_grammar) +# test_parse("- a(3)", literal_grammar) +# test_parse(" - - a(3)", literal_grammar) + +#test_parse("1 - f(e) < #count { a, b : c, -d ; e, f : not e, f } < 2", aggregate_grammar) + +# test_parse("a | b :: p(3) :- c, d, e(1).") +# test_parse(":~ a. [ 3@0, b, -1 ]") +# test_parse("a :: 3 / 10. +# b | c :- a. +# b?") + +src = read("sbf.plp", String) +test_parse(src) + +# test_parse("(2 + A) * a", term_grammar) + +# test_parse(" 1 < { a : not a ; b ; c } <= 3 :- c.") + +# Program(Any[ +# Rule(Any[ +# Choice(Any[ +# LeftBound(Any[ +# NumberConstant("1"), LT() +# ]), +# Choices(Any[ +# RestrictedChoice(Any[ +# SymbolicConstant("a"), NafLiteral(SymbolicConstant("a")) +# ]), +# SymbolicConstant("b"), +# SymbolicConstant("c") +# ]), +# RightBound(Any[ +# LE(), NumberConstant("3") +# ]) +# ]), +# Body(Any[ +# SymbolicConstant("c") +# ]) +# ]) +# ]) \ No newline at end of file diff --git a/code/asplang/sbf.plp b/code/asplang/sbf.plp new file mode 100644 index 0000000..ffa07cb --- /dev/null +++ b/code/asplang/sbf.plp @@ -0,0 +1,2 @@ +a::"0.3". +b | c :- a. \ No newline at end of file diff --git a/code/asplang/testASPLang.jl b/code/asplang/testASPLang.jl new file mode 100644 index 0000000..10e133c --- /dev/null +++ b/code/asplang/testASPLang.jl @@ -0,0 +1,45 @@ +using Test + +include("ASPLang.jl") +using .ASPLang + +@testset "invalid term" begin + @test_throws "" parse_asp("", term_grammar) + @test_throws "" parse_asp("1+", term_grammar) + @test_throws "" parse_asp("()", term_grammar) + @test_throws "" parse_asp("(", term_grammar) + @test_throws "" parse_asp(")", term_grammar) + @test_throws "" parse_asp("[]", term_grammar) + @test_throws "" parse_asp("[", term_grammar) + @test_throws "" parse_asp("]", term_grammar) + @test_throws "" parse_asp("{}", term_grammar) + @test_throws "" parse_asp("{", term_grammar) + @test_throws "" parse_asp("}", term_grammar) + @test_throws "" parse_asp("1+()", term_grammar) + @test_throws "" parse_asp("1<2", term_grammar) + @test_throws "" parse_asp("1a", term_grammar) + @test_throws "" parse_asp("1+(a+", term_grammar) + @test_throws "" parse_asp("1+(1+))", term_grammar) + @test_throws "" parse_asp("(1+(1)()", term_grammar) +end + +@testset "variable" begin + @test parse_asp("A", term_grammar) == Variable("A") + @test parse_asp("A_a1b_2", term_grammar) == Variable("A_a1b_2") + @test parse_asp("a", term_grammar) != Variable("a") + @test_throws "" parse_asp("", term_grammar) != Variable("") +end + +@testset "string constant" begin + @test parse_asp("\"\"", term_grammar) == StringConstant("") + @test parse_asp("\"A\"", term_grammar) == StringConstant("A") + @test parse_asp("\"a\"", term_grammar) == StringConstant("a") + @test parse_asp("\"1\"", term_grammar) == StringConstant("1") + @test parse_asp("\"A_a1b_2\"", term_grammar) == StringConstant("A_a1b_2") +end + +@testset "symbolic constant" begin + @test parse_asp("a", term_grammar) == SymbolicConstant("a") + @test parse_asp("a_A1B_2", term_grammar) == SymbolicConstant("a_A1B_2") + @test parse_asp("A", term_grammar) != SymbolicConstant("A") +end \ No newline at end of file diff --git a/code/asplang/tests_ASPlang.jl b/code/asplang/tests_ASPlang.jl new file mode 100644 index 0000000..df49163 --- /dev/null +++ b/code/asplang/tests_ASPlang.jl @@ -0,0 +1,132 @@ +using Test + +include("ASPLang.jl") +using .ASPLang + +@testset "malformed" begin + # + # + # + @test_throws "" parse_term("1a") + @test_throws "" parse_term("1+") + @test_throws "" parse_term("+") + @test_throws "" parse_term("(") + @test_throws "" parse_term(")") + # + # Spaces + # + @test_throws "" parse_term("1 1") + @test_throws "" parse_term("+ 1") +end +@testset "constants" begin + # + # NumberConstant + # + @test parse_term("1") == NumberConstant("1") + @test parse_term("11") == NumberConstant("11") + @test parse_term("+1") == NumberConstant("+1") + @test parse_term("+++1") == NumberConstant("+++1") + @test parse_term("-1") == Negated(NumberConstant("1")) + @test parse_term("- 11") == Negated(NumberConstant("11")) + @test parse_term("---1") == Negated(Negated(Negated(NumberConstant("1")))) + # + # SymbolicConstant + # + @test parse_term("a") == SymbolicConstant("a") + @test parse_term("aA") == SymbolicConstant("aA") + @test parse_term("a1") == SymbolicConstant("a1") + @test parse_term("a_1") == SymbolicConstant("a_1") + # + # StringConstant + # + @test parse_term("\"a\"") == StringConstant("a") + @test parse_term("\"aA\"") == StringConstant("aA") + @test parse_term("\"a_1\"") == StringConstant("a_1") + @test parse_term("\"a1\"") == StringConstant("a1") + @test parse_term("\"a 1\"") == StringConstant("a 1") + @test parse_term("\"A\"") == StringConstant("A") + @test parse_term("\"AA\"") == StringConstant("AA") + @test parse_term("\"A_1\"") == StringConstant("A_1") + @test parse_term("\"A1\"") == StringConstant("A1") + @test parse_term("\"A 1\"") == StringConstant("A 1") + @test parse_term("\"0\"") == StringConstant("0") + @test parse_term("\"0A\"") == StringConstant("0A") + @test parse_term("\"0_1\"") == StringConstant("0_1") + @test parse_term("\"01\"") == StringConstant("01") + @test parse_term("\"0 1\"") == StringConstant("0 1") +end + +@testset "variables" begin + # + # Variable + # + @test parse_term("Ax") == Variable("Ax") + @test parse_term("A1") == Variable("A1") + @test parse_term("A_x") == Variable("A_x") + @test parse_term("_x") == Variable("_x") + @test parse_term("_1") == Variable("_1") + @test parse_term("__x") == Variable("__x") +end + +@testset "basic arithmetic terms" begin + # + # Single Operations + # + @test parse_term("1+1") == Sum(Any[NumberConstant("1"), NumberConstant("1")]) + @test parse_term("1-1") == Sum(Any[NumberConstant("1"), Negated(NumberConstant("1"))]) + @test parse_term("1*1") == Product(Any[NumberConstant("1"), NumberConstant("1")]) + @test parse_term("1/1") == Product(Any[NumberConstant("1"), Inverted(NumberConstant("1"))]) + @test parse_term("1^1") == Power(Any[NumberConstant("1"), NumberConstant("1")]) + # + # Simple Parenthesis + # + @test parse_term("(1)") == NumberConstant("1") + @test parse_term("(1+1)") == Sum(Any[NumberConstant("1"), NumberConstant("1")]) + @test parse_term("(1-1)") == Sum(Any[NumberConstant("1"), Negated(NumberConstant("1"))]) + @test parse_term("(1*1)") == Product(Any[NumberConstant("1"), NumberConstant("1")]) + @test parse_term("(1/1)") == Product(Any[NumberConstant("1"), Inverted(NumberConstant("1"))]) + @test parse_term("(1^1)") == Power(Any[NumberConstant("1"), NumberConstant("1")]) +end + +@testset "arithmetic associative rules" begin + @test parse_term("1 + 2 + 3") == Sum(Any[NumberConstant("1"), NumberConstant("2"), NumberConstant("3")]) + @test parse_term("1 + (2 + 3)") == Sum(Any[NumberConstant("1"), Sum(Any[NumberConstant("2"), NumberConstant("3")])]) + @test parse_term("(1 + 2) + 3") == Sum(Any[Sum(Any[NumberConstant("1"), NumberConstant("2")]), NumberConstant("3")]) + # + # Default Associative Rules + # + @test parse_term("2 + 3 * 4") == Sum(Any[ + NumberConstant("2"), Product(Any[NumberConstant("3"), NumberConstant("4")])]) + @test parse_term("2 * 3 + 4") == Sum(Any[ + Product(Any[NumberConstant("2"), NumberConstant("3")]), NumberConstant("4")]) +end + +@testset "functional terms" begin + @test parse_term("1 + 2 + 3") == Sum(Any[NumberConstant("1"), NumberConstant("2"), NumberConstant("3")]) + @test parse_term("1 + (2 + 3)") == Sum(Any[NumberConstant("1"), Sum(Any[NumberConstant("2"), NumberConstant("3")])]) + @test parse_term("(1 + 2) + 3") == Sum(Any[Sum(Any[NumberConstant("1"), NumberConstant("2")]), NumberConstant("3")]) + # + # Functional Terms + # + @test parse_term("f()") == FunctionalTerm(Any[Functor("f")]) + @test parse_term("f(1)") == FunctionalTerm(Any[Functor("f"), NumberConstant("1")]) + @test parse_term("f(1,2)") == FunctionalTerm(Any[Functor("f"), NumberConstant("1"), NumberConstant("2")]) + @test parse_term("f(1,g(2))") == FunctionalTerm(Any[Functor("f"), NumberConstant("1"), FunctionalTerm(Any[Functor("g"), NumberConstant("2")])]) +end + +@testset "predicate atoms" begin + # + # Predicate Atoms + # + @test parse_atom("p") == PredicateName("p") + @test parse_atom("p()") == PredicateAtom(Any[PredicateName("p")]) + @test parse_atom("p(1)") == PredicateAtom(Any[PredicateName("p"), NumberConstant("1")]) + @test parse_atom("p(1,2)") == PredicateAtom(Any[PredicateName("p"), NumberConstant("1"), NumberConstant("2")]) + @test parse_atom("p(1,f(2))") == PredicateAtom(Any[PredicateName("p"), NumberConstant("1"), FunctionalTerm(Any[Functor("f"), NumberConstant("2")])]) +end + +@testset "negated atoms" begin + @test parse_atom("-p") == NegatedAtom(PredicateName("p")) + @test parse_atom("- p") == NegatedAtom(PredicateName("p")) + @test parse_atom("-- p") == NegatedAtom(NegatedAtom(PredicateName("p"))) +end \ No newline at end of file diff --git a/code/biflang/BIFLang.jl b/code/biflang/BIFLang.jl new file mode 100644 index 0000000..bf13667 --- /dev/null +++ b/code/biflang/BIFLang.jl @@ -0,0 +1,157 @@ +module BIFLang + +export parse_bif, debug_bif, fmt, + NetworkKW, + VariableKW, + ProbabilityKW, + PropertyKW, + VariabletypeKW, + DiscreteKW, + DefaultvalueKW, + TablevaluesKW, + Property, + Properties, + Variable, + Parents, + Values, + Key, + ProbabilityDeclaration, + VariableDeclaration, + Distribution, + DefaultEntry, + Entry, + Discrete, + Network, + Unit + +using ParserCombinator + +abstract type Node end; + +Base.:(==)(a::Node, b::Node) = (typeof(a) == typeof(b)) && (a.args == b.args) +function Base.print(io::IO, n::Node) + show_type = n |> typeof |> string + Base.print(io, show_type) + if isa(n.args, AbstractArray) && length(n.args) > 0 + show_args = join(n.args .|> ni -> "$ni", ",") + Base.print(io, "($show_args)") + end +end + +macro grammar(lang) + return quote + struct $lang <: Node args end; + end +end + + +abstract type Keyword end; +Base.:(==)(a::Keyword, b::Keyword) = (typeof(a) == typeof(b)) +fmt(n::Keyword) = "$(n |> typeof |> string)" +macro keyword(lang) + return quote + struct $lang <: Keyword end; + end +end + +@keyword NetworkKW +@keyword VariableKW +@keyword ProbabilityKW +@keyword PropertyKW +@keyword VariabletypeKW +@keyword DiscreteKW +@keyword DefaultvalueKW +@keyword TablevaluesKW + +@grammar Property +@grammar Properties +@grammar Variable +@grammar Parents +@grammar Values +@grammar Key + +@grammar ProbabilityDeclaration +@grammar VariableDeclaration + +@grammar Distribution +@grammar DefaultEntry +@grammar Entry + +@grammar Discrete +@grammar Network +@grammar Compilation +@grammar Unit + +@with_names begin +spc = Drop(Star(Space())) +@with_pre spc begin +@with_post spc begin + +word = p"[a-zA-Z]([a-zA-Z0-9_-])*" + +decimal = PInt64() +floating_point = PFloat64() + +network_kw = E"network" > NetworkKW +variable_kw = E"variable" > VariableKW +probability_kw = E"probability" > ProbabilityKW +property_kw = E"property" > PropertyKW +variabletype_kw = E"type" > VariabletypeKW +discrete_kw = E"discrete" > DiscreteKW +defaultvalue_kw = E"default" > DefaultvalueKW +tablevalues_kw = E"table" > TablevaluesKW + +property = Drop(property_kw) + spc + p"[^;]+" + E";" |> Property + +floatingpoint_list = PlusList(floating_point, E",") +probability_table = Drop(tablevalues_kw) + floatingpoint_list + spc + E";" |> Distribution +probability_defaultentry = Drop(defaultvalue_kw) + floatingpoint_list + spc + E";" |> DefaultEntry + +probability_value = word +probability_values = E"(" + spc + PlusList(probability_value, spc + E","+spc) + spc + E")" +probability_entry = (probability_values |> Key) + (floatingpoint_list |> Distribution) + spc + E";" |> Entry + +probability_content = E"{" + spc + + Star( property | probability_defaultentry | probability_entry | probability_table ) + spc + + E"}" + +probability_variable = word |> Variable +probability_variables = E"(" + spc + probability_variable + Opt(E"|" + PlusList(probability_variable, E",") |> Parents) + spc + E")" +probability_declaration = Drop(probability_kw) + probability_variables + probability_content |> ProbabilityDeclaration + +variable_values = PlusList(probability_value, spc + E"," + spc) + +variable_discrete = Drop(variabletype_kw + discrete_kw) + + E"[" + decimal + E"]" + spc + E"{" + spc + (variable_values |> Values) + spc + E"}" |> Discrete +variable_content = E"{" + Star((property | variable_discrete) + spc + E";" + spc) + E"}" +variable_declaration= Drop(variable_kw) + probability_variable + variable_content |> VariableDeclaration + +network_content = E"{" + spc + Star(property) + spc + E"}" |> Properties +network_declaration = Drop(network_kw) + word + network_content |> Network + +compilation_unit = network_declaration + Star(variable_declaration | probability_declaration) |> Unit + +bif_grammar = compilation_unit + Eos() +end +end +end + + +parse_bif(source::String) = parse_one(source, bif_grammar)[1] + +function debug_bif(source::String, show_trace=false) + debug, task = make(Debug, source, bif_grammar; delegate=NoCache) + try + once(task) + expr = parse_bif(source) + println("---\n\"$source\"\n\tparses to\n$(expr)\n---") + catch #_::ParserException + p = debug.max_iter + println("Error parsing after \"$(source[max(1,p-20):p - 1])\" and before \"$(source[p:p+20])\".\n") + + if show_trace + parse_dbg(source, Trace(grammar=bif_grammar)) + end + end +end +end \ No newline at end of file diff --git a/code/biflang/asia2.bif b/code/biflang/asia2.bif new file mode 100644 index 0000000..73ecc01 --- /dev/null +++ b/code/biflang/asia2.bif @@ -0,0 +1,63 @@ +network asia2 { + property what: ever; + property goes: well; + property with_me; +} +variable asia { + type discrete [ 2 ] { yes, no }; +} +variable tub { + type discrete [ 2 ] { yes, no }; +} +variable smoke { + type discrete [ 2 ] { yes, no }; +} +variable lung { + type discrete [ 2 ] { yes, no }; +} +variable bronc { + type discrete [ 2 ] { yes, no }; +} +variable either { + type discrete [ 2 ] { yes, no }; +} +variable xray { + type discrete [ 2 ] { yes, no }; +} +variable dysp { + type discrete [ 2 ] { yes, no }; +} +probability ( asia ) { + table 0.01, 0.99; +} +probability ( tub | asia ) { + (yes) 0.05, 0.95; + (no) 0.01, 0.99; +} +probability ( smoke ) { + table 0.5, 0.5; +} +probability ( lung | smoke ) { + (yes) 0.1, 0.9; + (no) 0.01, 0.99; +} +probability ( bronc | smoke ) { + (yes) 0.6, 0.4; + (no) 0.3, 0.7; +} +probability ( either | lung, tub ) { + (yes, yes) 1.0, 0.0; + (no, yes) 1.0, 0.0; + (yes, no) 1.0, 0.0; + (no, no) 0.0, 1.0; +} +probability ( xray | either ) { + (yes) 0.98, 0.02; + (no) 0.05, 0.95; +} +probability ( dysp | bronc, either ) { + (yes, yes) 0.9, 0.1; + (no, yes) 0.7, 0.3; + (yes, no) 0.8, 0.2; + (no, no) 0.1, 0.9; +} diff --git a/code/biflang/bif.ebnf b/code/biflang/bif.ebnf new file mode 100644 index 0000000..4aee7bd --- /dev/null +++ b/code/biflang/bif.ebnf @@ -0,0 +1,63 @@ +Digit ::= [0-9] +PDigit::= [1-0] +Letter ::= ["a"-"z" "A"-"Z" "_" "-"] +Word ::= Letter (Letter | Digit)* + +Decimal ::= PDigit Digit* +Exponent ::= ("e" | "E") ("+" | "-")? Digit+ +FloatingPoint ::= Digit+ "." Digit* Exponent? + | "." Digit+ Exponent? + | Digit+ Exponent + + +NetworkKW ::= "network" +VariableKW ::= "variable" +ProbabilityKW ::= "probability" +PropertyKW ::= "property" +VariableTypeKW ::= "type" +DiscreteKW ::= "discrete" +DefaultValueKW ::= "default" +TableValuesKW ::= "table" + +PropertyString ::= PropertyKW (~";")* ";" + +Property ::= +FloatingPointToken ::= + +FloatingPointList ::= FloatingPointToken+ + +ProbabilityTable ::= FloatingPointList ";" + +ProbabilityDefaultEntry ::= FloatingPointList ";" + +ProbabilityVariableValue ::= Word + +ProbabilityValuesList ::= "(" ProbabilityVariableValue+ ")" + +ProbabilityEntry ::= ProbabilityValuesList FloatingPointList ";" + +ProbabilityContent ::= "{" ( Property | ProbabilityDefaultEntry | ProbabilityEntry | ProbabilityTable )* "}" + +ProbabilityVariableName ::= + +ProbabilityVariablesList ::= "(" ProbabilityVariableName+ ")" + +ProbabilityDeclaration ::= ProbabilityKW ProbabilityVariablesList ProbabilityContent + + +VariableValuesList ::= ProbabilityVariableValue+ + +VariableDiscrete ::= VariableTypeKW DiscreteKW "[" Decimal "]" + "{" VariableValuesList "}" ";" + +VariableContent ::= "{" (Property | VariableDiscrete)* "}" + +VariableDeclaration ::= VariableKW ProbabilityVariableName VariableContent + + +NetworkContent ::= "{" ( Property )* "}" +NetworkDeclaration ::= NetworkKW Word NetworkContent + +CompilationUnit ::= NetworkDeclaration (VariableDeclaration | ProbabilityDeclaration)* EOS + + diff --git a/code/biflang/bif.txt b/code/biflang/bif.txt new file mode 100644 index 0000000..ecc5a8b --- /dev/null +++ b/code/biflang/bif.txt @@ -0,0 +1,562 @@ + The Interchange Format for Bayesian Networks + + +-------------------------------------------------------------------------------- + +Introduction +This page describes a proposed format for interchange of Bayesian +networks between researchers in the field. The Interchange Format is a +vehicle for interoperability of belief network tools and aims at +facilitating comparison and discussion of research results. The +Interchange Format resembles the Bayesian Network Interchange Format +proposal, referred to as BNIF. Simplifications were made such that a +parser for the Interchange Format can be easily built and prototyped. +The goal of the current implementation is to agree on a format that +can represent networks with discrete variables. Several extensions +will be entertained for next releases of the format. + +This document gives a brief overview of the basics of the proposed +Interchange Format. Open issues are emphasized in bold font. + + +-------------------------------------------------------------------------------- + +Basics +The Interchange Format uses only ASCII symbols and expects one stream +to contain a single network (a stream is either a file, a socket, +etc). It seems reasonable to find a common file extension for input +files, which could also be used as an acronym for the Interchange +Format. At this point there is no agreement on this. How about bif +(for Bayesian Interchange Format) or dsc (as suggested in the BNIF)? +White spaces, tabs and newlines are ignored; the C/C++ style of +comments (//... and multi-line /*...*/ comment sequences) are +adopted. Two other characters are also ignored when they occur between +tokens: "," and "|". These characters can be used to separate +variables in the definition of a probability distribution. + +The basic unit of information is a block: a piece of text which starts +with a keyword and ends with the end of an attribute list (to be +explained later). Arbitrary characters are allowed between +blocks. This allows the user to insert arbitrarily long comments +outside the blocks, and reserve the //, /* */, comments to be placed +inside blocks. It also allows user-specific blocks and commands to be +placed outside the standard blocks. + +Other than blocks, the Interchange Format refers to three entities: +words, non-negative integers and non-negative reals. + +A word is a contiguous sequence of characters, with the restriction +that the first character be a letter. Characters are letters plus +numbers plus the underline symbol (_) plus the dash symbol (-). + +A non-negative integer is a sequence of numeric characters which is +not followed by a decimal point or an exponent. The first character of +a non-negative integer has to be larger than zero. A non-negative real +is a sequence of numeric characters, containing a decimal point or an +exponent or both. Notice that there is no overlap between non-negative +integer and reals; for example the sequence "88" is an integer but not +a real, and the sequence "88.0" is a real but not an integer. Finally +"088" is not an integer nor a real. These conventions roughly follow +the Java language and are also used by many C compilers (should these +conventions be changed?). + +Blocks +A block is a unit of information. The general format of a block is: + block-type block-name { + attribute-name attribute-value; + attribute-name attribute-value; + attribute-name attribute-value; + } + +with as many attributes as necessary. The closing semicolon is +mandatory after each attribute. +There are three possible blocks: network, variable and probability +blocks. + +A network block defines the name of the network and lists the +properties. Example: + network Robot-Planning { + property version 1.1; + property author Nobody; + } + +Variable blocks define the variables in a network. These blocks used +to be called node blocks in the BNIF; it seems that variable conveys +more of a statistical meaning while node just refers to a graphical +concept. Opinions? Example: + variable Leg { + type discrete[2] { long, short }; + property temporary yes; + } + +Probability blocks specify the (conditional) probability tables (CPTs) +for these variables, and hence the topology of the network. The block +indicates the variables of the probability distribution right after +the keyword probability. Example: + probability ( Leg | Arm ) { + table 0.1 0.9 0.9 0.1; + } + +The blocks occur in the following order: +A network declaration block (one, must be first). +A series of variable declaration blocks and probability definition +blocks, possibly inter-mixed. +Attributes +Several attributes are defined at this point: property, type, table, +default and entry attributes (the entry attribute is not associated +with any keyword). +The attribute property can appear in all types of blocks. A property +is just a string of arbitrary text to be associated with a +block. Examples of properties: + + property size 12; + property name "Trial number ten"; + +Any text is valid between the keyword property and the ending +semicolon. The idea is to store information that is specific to a +particular system or network in the properties. Any number of property +attributes can appear in a block. +The type attribute is specific to variable blocks. type lists the +values of a discrete variable: + +type discrete[ number-of-values ] { list-of-values }; + +The number-of-values token is a non-negative integer which indicates +how many different values this variable may assume (the size of the +list-of-values). The list-of-values is a sequence of words, each one +the name of a variable value. At this point continuous variables are +not supported (should they be?). +There are attributes that are specific to probability blocks (these +attributes are discussed in the next section): + +table lists a sequence of non-negative real numbers. +default lists a sequence of non-negative real numbers. +the entry attribute, which is not associated with any keyword. +Probability Blocks +Probability blocks are used to define the actual network topology and +conditional probability tables (CPTs). There are two kinds of +probability blocks: +Blocks for standard nodes; that is, nodes for which we have to define +the probabilities for each discrete parent instantiation. +Blocks for noisy functions, like noisy OR, noisy AND, noisy adder, +etc. +An example of a standard probability block is: +probability(GasGauge | Gas, BatteryPower) { + (yes, high) 0.999 0.001; + (yes, low) 0.850 0.150; + (yes, medium) 0.000 1.000; + (no, high) 0.000 1.000; + (no, low) 0.000 1.000; + (no, medium) 0.000 1.000; +} + +As explained before, the symbols "|" and "," are ignored between +tokens so they do not affect the list of variables given after the +keyword probability. The variables however must be enclosed by +parenthesis. +The example above uses the entry attribute, which is different from +the other attributes in that it has no keyword. It simply starts with +an opening parenthesis, and has a list of values for all the +conditioning variables. After the closing parenthesis, a list of +probability values for the first variable is given (note the user must +provide numbers that add to one but this is not mandatory). + +The probability vectors can be listed in any order, since the names in +parentheses uniquely identify the parent instantiation. + +In addition to the entry attribute, the Interchange Format supports +the concept of a default entry. So the above CPT could have been +specified equivalently as: + +probability(GasGauge | Gas, BatteryPower) { + default 0.000 1.000; + (yes, low) 0.850 0.150; + (no, medium) 0.000 1.000; +} + +Note that each number is a separate token, so we can use "," and "|" +between numbers; these symbols are ignored. +Another way to define a probability distribution is through the table +attribute. The body of such attribute is a sequence of non-negative +real numbers, in the counting order of the declared variables (if all +variables were binary, we would say binary counting with least +significant digit in the right). So, for the example above, we could +simply say: + +probability(GasGauge | Gas, BatteryPower) { + table 0.999 0.850 0.0 0.0 0.0 0.0 0.001 0.15 1.0 1.0 1.0 + 1.0; +} + +There are some subtle rules that regulate these declarations. + +If multiple default declarations exist, only the last one is valid. +If multiple table declarations exist, only the last one is valid. +A table can contain more elements than the necessary to specify a +distribution; the excess elements are discarded. +A table can contain less elements than the necessary to specify a +distribution, which is then padded with zeros. +Specified entries override conflicting default and table +declarations. + +Noisy functions are characterized by the property that the probability +vectors for each entry can be derived from the probability vectors of +the parent instantiations. This proposal has not settled yet in a +general format for noisy functions. + +Currently the Interchange Format adopts the suggestion from the BNIF, +noting that all that is necessary to reconstruct a noisy-or/max/sum is +the name of the function and the probability that the child is true +given that each parent singly is true. For example if there are four +parents, each taking values 0 and 1, we need the rows for the +instantiations 1 0 0 0, 0 1 0 0, 0 0 1 0, 0 0 0 1. + +From the BNIF proposal: + +Noisy functions are characterized by the property that the probability +vectors for each combination of conditional variables can be derived +from the probability vectors of the leak parent instantiation and the +parent instantiations in which one and only one parent assumes a value +different from its leak value. Conceptually, the leak parent +instantiation represents the situation in which none of the parents is +causing the child node to be in a abnormal state, and hence the +probability vector associated with the leak instantiation models +influences on the child node that are not explicitly accounted for the +parents. + +Currently, we suggest the use of a property "function" to insert +information about the particular noisy function. For example: + + probability(GasGauge | Gas, BatteryPower) + { + property function max; + (0, 0): 0.999, 0.001; // leak term + (0, 1): 0.850, 0.150; + (0, 2): 0.000, 1.000; + (1, 0): 0.000, 1.000; + } + +Other formats for noisy-functions will be considered for +implementation. + + +-------------------------------------------------------------------------------- + +Examples +Three files are available as examples: +dog-problem.bif, a very simple network based on the discussion at +Charniak, E., Bayesian Networks without Tears, AI Magazine, 1991. +elimbel2.bif, a simple network based on the second example in the +Elimbel system. +car-starts.bif, a somewhat large network contributed by Sreekanth +Nagarajan, based on the automobile belief network that David Heckerman +and Jack Breese presented in the March, 1995 issue of Communications +of the ACM. +Here is a portion of the car-starts.bif network that was originally +given in the BNIF distribution, adapted for the current proposal: +network Internal-Network{ //18 variables and 18 probability +distributions +} + +variable Alternator{ //2 values + type discrete[2] { Ok Faulted }; + property position = (47, 42) ; +} + +variable FanBelt{ //3 values + type discrete[3] { Ok Slipping Broken }; + property position = (154, 42) ; +} + +probability ( BatteryPower Charge BatteryState ) { //3 variable(s) and +8 values + table 1 0 0 0 0 1 1 1 ; +} + +probability ( GasInTank ) { //1 variable(s) and 2 values + table 0.5 0.5 ; +} + + + +-------------------------------------------------------------------------------- + +Playing with the standard +A number of tools have been produced so that users can test and +experiment with the Interchange Format. +A parser for the Interchange Format written in Java. +A syntax checker for the Interchange Format. +Support for the Interchange Format in the Bayesian Networks Editor by +Sreekanth Nagarajan and Bruce D'Ambrosio. +Support for the Interchange Format in the JavaBayes system. +A parser for the Interchange Format +A parser for the Interchange Format was generated using the Jack +parser generator. The parser is generated as a Java program and should +run in any platform which has a Java virtual machine. The complete +specification of the parser in Jack's specification language is given +later. The parser scans an input stream, which can be a file, a socket +or a string, and produces either a ParseError object (signifying a +syntax error occurred) or a BayesNet object. The BayesNet object +contains variables and probability distributions that are distributed +as a Java package called BayesianNetworks. The complete distribution +for the parser is available at +ftp://ftp.cs.cmu.edu/afs/cs/project/lri-3/ftp/outgoing/JavaBayes/InterchangeFormat.tar. +If this address does not work for your setup, then try: + ftp ftp.cs.cmu.edu (login as anonymous) + cd /afs/cs/project/lri-3/ftp/outgoing/JavaBayes/ + binary + get InterchangeFormat.tar + +You have to use the cd command only once; you cannot cd into +intermediate directories. Now use the tar utility to create the +distribution from the InterchangeFormat.tar file. The distribution +should have: +A README file with basic information, a Makefile which allows you to +build the Java classes for the parser in a Unix system. +The directory Examples, with car-starts.bif, dog-problem.bif and +elimbel2.bif. +The directory InterchangeFormat, with the parser source code. The +parser description is in the file InterchangeFormat.jack; all other +files in this directory are generated automatically through the parser +generator. +The directory BayesianNetworks, with the classes and methods the +parser uses to build a BayesNet object. The BayesianNetworks package +defined by these classes is also used in the JavaBayes system; more +information about the particular data structures used in the package +can be found in the JavaBayes web site. +The directory ParseTest, with files Test.html and Test.java, +containing a syntax checker program for the Interchange Format. +The directory Classes (with the subdirectory BayesianNetworks), which +contains all the bytecode files for the Java interpreter. You can +generate these files by running the Java compiler in the source files +provided with the distribution. +A syntax checker for the Interchange Format +The Test.java file that comes with the parser distribution (previous +section) is a syntax checker for the Interchange Format. It can be +used as an application and as an applet. +The bytecodes for the Test program should be in the Classes directory +in the parser distribution. To run it as an application, go to that +directory and run java Test. A frame will be created; you will be +asked to insert the name of a file (with the path to it, if +necessary). Then click the Load button, and the Test program will run +the parser in the file. A BayesNet object will be constructed and +displayed, and some basic checks will be made. If you see the word +"Result" popping out followed by some numbers, the file was +successfully read. Check the console to see the BayesNet object +printed (if you are running an applet, open the Java console window +from your browser). If there were problems with the file, a brief +error message will be displayed in the Test program frame; check the +console to get a more descriptive message. + +To run Test as an applet, you will need a small piece of HTML to call +the program. The file Test.html contains a minimal HTML document which +calls the Test program. + +The Test applet is displayed below. If you have a Java compatible +browser you should see the Test program frame. Type the name of one of +the files (at this point only server side files are allowed; you can +choose between the examples dog-problem.bif, elimbel2.bif and +car-starts.bif. Type one of these names and press the Load button. You +will see messages indicating the files are fetched and read; to +observe the full messages with the BayesNet objects, open the Java +console in your browser. + + + + +Support for the Interchange Format in other systems +Support for the Interchange Format is available in the Bayesian +Networks Editor by Sreekanth Nagarajan and Bruce D'Ambrosio. This +system gives the user a graphical interface for construction of +Bayesian networks and performs inferences through a server connection +(the inference engine is maintained at Oregon State University). For +more information on this system, consult its web site. The current +version can be used either as an applet (in this case the user can +load/save files in the server side) or as an application (in this case +the user can load/save local files in the Interchange Format). +Support for the Interchange Format is also provided in the JavaBayes +system, by Fabio Cozman. This system uses the same graphical interface +by Sreekanth Nagarajan and a Java based inference engine. It runs as +an applet (without load/save operations) and as an application (with +load/save operations). The distribution can generate and read files in +the Interchange Format. + +A more formal description +A more formal description of the proposed Interchange Format is given +here. The notation used by the Jack parser generator is used here. +In the description below, the patterns used by the lexer to define +tokens are very similar to regular expressions used by the Unix regexp +facility. Non-terminals have a parenthesis pair "()" after their +names; terminals are usually capitalized. Some structures that may +appear in expansions are: + + ( e )? : An optional occurrence of e + e1 | e2 | e3 | ... : A choice of e1, e2, e3, etc. + ( e )+ : One or more occurrences of e + ( e )* : Zero or more occurrences of e + ["a"-"z"] matches all lower case letters + ~["\n","\r"] matches any character except the new line characters + + +-------------------------------------------------------------------------------- + +The following patterns are ignored when they appear between tokens: + +" " +"\t" +"\n" +"\r" +"//" (~["\n","\r"])* ("\n"|"\r\n") +"/*" (~["*"])* "*" (~["/"] (~["*"])* "*")* "/" +"," +"|" + + +-------------------------------------------------------------------------------- + +The definition of a word is: + +WORD: LETTER (LETTER | DIGIT)* +LETTER: ["a"-"z","A"-"Z","_","-"] +DIGIT: ["0"-"9"] + + +-------------------------------------------------------------------------------- + +The definition of a non-negative integer number is: + +DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* + + + +-------------------------------------------------------------------------------- +The definition of a non-negative real number is: +FLOATING_POINT_LITERAL: (["0"-"9"])+ "." (["0"-"9"])* (EXPONENT)? + | "." (["0"-"9"])+ (EXPONENT)? + | (["0"-"9"])+ (EXPONENT)? +#EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ + + +-------------------------------------------------------------------------------- + +The following words are keywords: + +NETWORK: "network" +VARIABLE: "variable" +PROBABILITY: "probability" +PROPERTY: "property" +VARIABLETYPE: "type" +DISCRETE: "discrete" +DEFAULTVALUE: "default" +TABLEVALUES: "table" + + +-------------------------------------------------------------------------------- + +A property is defined as: + +PROPERTYSTRING: PROPERTY (~[";"])* ";" + + +-------------------------------------------------------------------------------- + +The productions of the grammar are: + +CompilationUnit() : + NetworkDeclaration() + ( VariableDeclaration() | ProbabilityDeclaration() )* + EOF + +NetworkDeclaration() : + NETWORK WORD NetworkContent() + +NetworkContent() : + "{" ( Property() )* "}" + +VariableDeclaration() : + VARIABLE ProbabilityVariableName() VariableContent() + +VariableContent(String name) : + "{" ( Property() | VariableDiscrete() )* "}" + +VariableDiscrete() : + VARIABLETYPE DISCRETE + "[" DECIMAL_LITERAL "]" "{" VariableValuesList() "}" ";" + +void VariableValuesList() : + ProbabilityVariableValue() + ( ProbabilityVariableValue() )* + +ProbabilityVariableValue() : WORD + +ProbabilityDeclaration() : + PROBABILITY ProbabilityVariablesList() ProbabilityContent() + +ProbabilityVariablesList() : + "(" ProbabilityVariableName() ( ProbabilityVariableName() )* ")" + +ProbabilityVariableName() : + +ProbabilityContent() + "{" ( Property() | ProbabilityDefaultEntry() | ProbabilityEntry() + | + ProbabilityTable() )* "}" + +ProbabilityEntry() : + ProbabilityValuesList() FloatingPointList() ";" + +ProbabilityValuesList() : + "(" ProbabilityVariableValue() ( ProbabilityVariableValue() )* + ")" + +ProbabilityDefaultEntry() : + FloatingPointList() ";" + +ProbabilityTable() : + FloatingPointList() ";" + +FloatingPointList() : + FloatingPointToken() ( FloatingPointToken() )* + +FloatingPointToken() : + +Property() : + + + +-------------------------------------------------------------------------------- + +Wish List +Here are some of the comments and thoughts related to this +proposal. This is mostly for easy reference; if you're not interested +in the discussion, please skip this section. + +(Wray Buntine) I'd suggest you have the ability to define vector +constants or probability table constants, and the noisy-or should just +be viewed as some random distribution named "noisy-or" applied to a +random vector that just happens to be probabilities. +(Wray Buntine) For conditional probability tables, don't-cares, i.e. + (yes, no, *): 0.2, 0.8 + (no, *, yes): 0.45, 0.55 + (yes, yes, no): 0.34, 0.66 + default: 0.5, 0.5 + +(Fabio Cozman) We could suppress the keyword "default" and just say: + (yes, no, *): 0.2, 0.8 + (no, *, yes): 0.45, 0.55 + (yes, yes, no): 0.34, 0.66 + (*,*,*): 0.5, 0.5 + +(Sreekanth Nagarajan) Can the type info be associated with the +variable declaration itself? For eg, + variable continuous Flow { + } + + +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- + +This page is maintained by Fabio Cozman [Send Mail?] diff --git a/code/biflang/draft_biflang.jl b/code/biflang/draft_biflang.jl new file mode 100644 index 0000000..3209664 --- /dev/null +++ b/code/biflang/draft_biflang.jl @@ -0,0 +1,110 @@ +include("BIFLang.jl") + +using .BIFLang + +src = read("asia2.bif", String) + +# src = "network unknown { } +# variable asia { +# type discrete [ 2 ] { yes, no }; +# } +# probability ( either | lung, tub ) { +# (yes, yes) 1.0, 0.0; +# (no, yes) 1.0, 0.0; +# (yes, no) 1.0, 0.0; +# (no, no) 0.0, 1.0; +# }" +expr = parse_bif(src) +# println(expr) + +children(s::Any) = [] +function children(node::BIFLang.Node) + node.args +end + +function descendants(node::BIFLang.Node) + unvisited = filter(n -> isa(n, BIFLang.Node), children(node)) + visited = [] + while length(unvisited) > 0 + h = popfirst!(unvisited) + push!(visited, h) + fresh = filter(n -> isa(n, BIFLang.Node), children(h)) + union!(unvisited, setdiff(fresh, visited)) + end + return visited +end + +is_leaf(x::Any) = true +is_leaf(x::BIFLang.Node) = false +is_leaf(x::BIFLang.Property) = true +is_leaf(x::BIFLang.Variable) = true +is_leaf(x::BIFLang.Values) = true +is_leaf(x::BIFLang.Key) = true +is_leaf(x::BIFLang.Distribution) = true +branches(x::Any) = [] +function branches(node::BIFLang.Node) + if is_leaf(node) + return [[node.args]] + else + cs = children(node) + return [ [ci, bi...] for ci in cs for bi in branches(ci) ] + end +end + +# println.(filter(n -> isa(n, Variable), children(expr))) +# println.(filter(n -> isa(n, Values), descendants(expr))) +# println.(filter(n -> 2 ∈ n.args, descendants(expr))) +for bs in branches(expr) + println.(bs) + println() +end +#= + +Unit( + Network(asia2,Properties( + Property(what: ever), + Property(goes: well), + Property(with_me))), + VariableDeclaration(Variable(asia), + Discrete(2,Values(yes,no))), + VariableDeclaration(Variable(tub), + Discrete(2,Values(yes,no))), + VariableDeclaration(Variable(smoke), + Discrete(2,Values(yes,no))), + VariableDeclaration(Variable(lung), + Discrete(2,Values(yes,no))), + VariableDeclaration(Variable(bronc), + Discrete(2,Values(yes,no))), + VariableDeclaration(Variable(either), + Discrete(2,Values(yes,no))), + VariableDeclaration(Variable(xray), + Discrete(2,Values(yes,no))), + VariableDeclaration(Variable(dysp), + Discrete(2,Values(yes,no))), + ProbabilityDeclaration(Variable(asia), + Distribution(0.01,0.99)), + ProbabilityDeclaration(Variable(tub),Parents(Variable(asia)), + Entry(Key(yes),Distribution(0.05,0.95)), + Entry(Key(no),Distribution(0.01,0.99))), + ProbabilityDeclaration(Variable(smoke), + Distribution(0.5,0.5)), + ProbabilityDeclaration(Variable(lung),Parents(Variable(smoke)), + Entry(Key(yes),Distribution(0.1,0.9)), + Entry(Key(no),Distribution(0.01,0.99))), + ProbabilityDeclaration(Variable(bronc),Parents(Variable(smoke)), + Entry(Key(yes),Distribution(0.6,0.4)), + Entry(Key(no),Distribution(0.3,0.7))), + ProbabilityDeclaration(Variable(either),Parents(Variable(lung),Variable(tub)), + Entry(Key(yes,yes),Distribution(1.0,0.0)), + Entry(Key(no,yes),Distribution(1.0,0.0)), + Entry(Key(yes,no),Distribution(1.0,0.0)), + Entry(Key(no,no),Distribution(0.0,1.0))), + ProbabilityDeclaration(Variable(xray),Parents(Variable(either)), + Entry(Key(yes),Distribution(0.98,0.02)), + Entry(Key(no),Distribution(0.05,0.95))), + ProbabilityDeclaration(Variable(dysp),Parents(Variable(bronc),Variable(either)), + Entry(Key(yes,yes),Distribution(0.9,0.1)), + Entry(Key(no,yes),Distribution(0.7,0.3)), + Entry(Key(yes,no),Distribution(0.8,0.2)), + Entry(Key(no,no),Distribution(0.1,0.9)))) +=# \ No newline at end of file diff --git a/code/biflang/notes.md b/code/biflang/notes.md new file mode 100644 index 0000000..f766ddd --- /dev/null +++ b/code/biflang/notes.md @@ -0,0 +1,142 @@ + + +A more formal description +A more formal description of the proposed Interchange Format is given +here. The notation used by the Jack parser generator is used here. +In the description below, the patterns used by the lexer to define +tokens are very similar to regular expressions used by the Unix regexp +facility. Non-terminals have a parenthesis pair "()" after their +names; terminals are usually capitalized. Some structures that may +appear in expansions are: + + ( e )? : An optional occurrence of e + e1 | e2 | e3 | ... : A choice of e1, e2, e3, etc. + ( e )+ : One or more occurrences of e + ( e )* : Zero or more occurrences of e + ["a"-"z"] matches all lower case letters + ~["\n","\r"] matches any character except the new line characters + + +-------------------------------------------------------------------------------- + +The following patterns are ignored when they appear between tokens: + +" " +"\t" +"\n" +"\r" +"//" (~["\n","\r"])* ("\n"|"\r\n") +"/*" (~["*"])* "*" (~["/"] (~["*"])* "*")* "/" +"," +"|" + + +-------------------------------------------------------------------------------- + +The definition of a word is: + +WORD: LETTER (LETTER | DIGIT)* +LETTER: ["a"-"z","A"-"Z","_","-"] +DIGIT: ["0"-"9"] + + +-------------------------------------------------------------------------------- + +The definition of a non-negative integer number is: + +DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* + + + +-------------------------------------------------------------------------------- +The definition of a non-negative real number is: +FLOATING_POINT_LITERAL: (["0"-"9"])+ "." (["0"-"9"])* (EXPONENT)? + | "." (["0"-"9"])+ (EXPONENT)? + | (["0"-"9"])+ (EXPONENT)? +#EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ + + +-------------------------------------------------------------------------------- + +The following words are keywords: + +NETWORK: "network" +VARIABLE: "variable" +PROBABILITY: "probability" +PROPERTY: "property" +VARIABLETYPE: "type" +DISCRETE: "discrete" +DEFAULTVALUE: "default" +TABLEVALUES: "table" + + +-------------------------------------------------------------------------------- + +A property is defined as: + +PROPERTYSTRING: PROPERTY (~[";"])* ";" + + +-------------------------------------------------------------------------------- + +The productions of the grammar are: + +CompilationUnit() : + NetworkDeclaration() + ( VariableDeclaration() | ProbabilityDeclaration() )* + EOF + +NetworkDeclaration() : + NETWORK WORD NetworkContent() + +NetworkContent() : + "{" ( Property() )* "}" + +VariableDeclaration() : + VARIABLE ProbabilityVariableName() VariableContent() + +VariableContent(String name) : + "{" ( Property() | VariableDiscrete() )* "}" + +VariableDiscrete() : + VARIABLETYPE DISCRETE + "[" DECIMAL_LITERAL "]" "{" VariableValuesList() "}" ";" + +void VariableValuesList() : + ProbabilityVariableValue() + ( ProbabilityVariableValue() )* + +ProbabilityVariableValue() : WORD + +ProbabilityDeclaration() : + PROBABILITY ProbabilityVariablesList() ProbabilityContent() + +ProbabilityVariablesList() : + "(" ProbabilityVariableName() ( ProbabilityVariableName() )* ")" + +ProbabilityVariableName() : + +ProbabilityContent() + "{" ( Property() | ProbabilityDefaultEntry() | ProbabilityEntry() + | + ProbabilityTable() )* "}" + +ProbabilityEntry() : + ProbabilityValuesList() FloatingPointList() ";" + +ProbabilityValuesList() : + "(" ProbabilityVariableValue() ( ProbabilityVariableValue() )* + ")" + +ProbabilityDefaultEntry() : + FloatingPointList() ";" + +ProbabilityTable() : + FloatingPointList() ";" + +FloatingPointList() : + FloatingPointToken() ( FloatingPointToken() )* + +FloatingPointToken() : + +Property() : \ No newline at end of file diff --git a/code/drafts/.ipynb_checkpoints/EventLattice-checkpoint.ipynb b/code/drafts/.ipynb_checkpoints/EventLattice-checkpoint.ipynb new file mode 100644 index 0000000..829cb1d --- /dev/null +++ b/code/drafts/.ipynb_checkpoints/EventLattice-checkpoint.ipynb @@ -0,0 +1,113 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "57fc5921-9d6b-4b43-a8f6-743a03650d63", + "metadata": {}, + "outputs": [], + "source": [ + "import event_lattice as el" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "00f0eb68", + "metadata": {}, + "outputs": [], + "source": [ + "def zoom_event(event_str, lattice, lower_op=el.sum_op, upper_op=el.prod_op):\n", + " event = el.Event.from_str(event_str)\n", + " event_class = lattice.event_class(event)\n", + " propagated = lattice.propagated_value(\n", + " event, lower_op=lower_op, upper_op=upper_op)\n", + "\n", + " print(\n", + " f\"Event: {event}\\n\\tClass: {event_class} \\n\\tValue: {propagated}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cdd8c6d6", + "metadata": {}, + "outputs": [], + "source": [ + "smodels = el.Lattice.parse({\n", + " \"A\": 2,\n", + " \"ab\": 3,\n", + " \"ac\": 5\n", + "})\n", + "\n", + "lattice = el.Lattice(smodels)\n", + "\n", + "print(lattice)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2b445339", + "metadata": {}, + "outputs": [], + "source": [ + "zoom_event(\"abc\", lattice)\n", + "zoom_event(\"a\", lattice)\n", + "zoom_event(\"b\", lattice)\n", + "zoom_event(\"bc\", lattice)\n", + "zoom_event(\"ac\", lattice)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f1b85255", + "metadata": {}, + "outputs": [], + "source": [ + "from itertools import *\n", + "\n", + "lits = lattice.literals()\n", + "for len_lit in range(len(lits)+1):\n", + " events = list(\"\".join(c) for c in combinations(lits, len_lit))\n", + " for event in events:\n", + " zoom_event(event, lattice)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07973a47", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.13 ('base')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + }, + "vscode": { + "interpreter": { + "hash": "a59afa236e16843183c59a167f072b6fa0409044b3c4938e82ac98aad91bf217" + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/drafts/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/code/drafts/.ipynb_checkpoints/Untitled-checkpoint.ipynb new file mode 100644 index 0000000..363fcab --- /dev/null +++ b/code/drafts/.ipynb_checkpoints/Untitled-checkpoint.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/drafts/.ipynb_checkpoints/Untitled1-checkpoint.ipynb b/code/drafts/.ipynb_checkpoints/Untitled1-checkpoint.ipynb new file mode 100644 index 0000000..99b15c0 --- /dev/null +++ b/code/drafts/.ipynb_checkpoints/Untitled1-checkpoint.ipynb @@ -0,0 +1,164 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "5e6ea3be-67e9-43ac-bed4-abbae7c4352b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "using CSV\n", + "using DataFrames\n", + "using Latexify\n", + "using Plots\n", + "using StatsPlots\n", + "\n", + "data = CSV.read(\"sample.csv\", DataFrame)\n", + "groups = groupby(data, :event)\n", + "totals = combine(groups, :event => length => :count)\n", + "\n", + "x = -π:0.1:π\n", + "y = sin.(x)\n", + "plot(totals.count)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e1c270c9-4270-414b-acce-33a3cc3b85c4", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.9.3", + "language": "julia", + "name": "julia-1.9" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/drafts/.ipynb_checkpoints/sample_analysis-checkpoint.jl b/code/drafts/.ipynb_checkpoints/sample_analysis-checkpoint.jl new file mode 100644 index 0000000..a3133a3 --- /dev/null +++ b/code/drafts/.ipynb_checkpoints/sample_analysis-checkpoint.jl @@ -0,0 +1,15 @@ +using CSV +using DataFrames +using Latexify +using Plots +using StatsPlots + +data = CSV.read("sample.csv", DataFrame) +groups = groupby(data, :event) +totals = combine(groups, :event => length => :count) + +x = -π:0.1:π +y = sin.(x) +@df totals plot(:event, :count) +println("Press ENTER to exit.") +readline() \ No newline at end of file diff --git a/code/drafts/.ipynb_checkpoints/teste-checkpoint.ipynb b/code/drafts/.ipynb_checkpoints/teste-checkpoint.ipynb new file mode 100644 index 0000000..c62a6aa --- /dev/null +++ b/code/drafts/.ipynb_checkpoints/teste-checkpoint.ipynb @@ -0,0 +1,116 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2+2" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "x = np.linspace(-6, 6)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "y = np.sin(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "

" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(x,y)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.15 ('base')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "a59afa236e16843183c59a167f072b6fa0409044b3c4938e82ac98aad91bf217" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/code/drafts/EventLattice.ipynb b/code/drafts/EventLattice.ipynb new file mode 100644 index 0000000..8cd7d9e --- /dev/null +++ b/code/drafts/EventLattice.ipynb @@ -0,0 +1,154 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 4, + "id": "57fc5921-9d6b-4b43-a8f6-743a03650d63", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "%load_ext autoreload\n", + "%autoreload 1\n", + "%aimport event_lattice" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "00f0eb68", + "metadata": {}, + "outputs": [], + "source": [ + "def zoom_event(event_str, lattice):\n", + " event = event_lattice.Event.from_str(event_str)\n", + " event_class = lattice.event_class(event)\n", + " propagated = lattice.extended_value(\n", + " event)\n", + "\n", + " print(\n", + " f\"Event: {event}\\n\\tClass: {event_class} \\n\\tValue: {propagated}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "cdd8c6d6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + "\t'stable_models': {\n", + "\t\t A: 2,\n", + "\t\tab: 3,\n", + "\t\tac: 5 \n", + "\t}\n", + "\t'literals': { A,B,C,a,b,c } \n", + "}\n" + ] + } + ], + "source": [ + "smodels = event_lattice.Lattice.parse({\n", + " \"A\": 2,\n", + " \"ab\": 3,\n", + " \"ac\": 5\n", + "})\n", + "\n", + "lattice = event_lattice.Lattice(smodels)\n", + "\n", + "print(lattice)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "2b445339", + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "__init__() missing 1 required positional argument: 'lattice'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_361713/2581811254.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mzoom_event\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"abc\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlattice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mzoom_event\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"a\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlattice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mzoom_event\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"b\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlattice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mzoom_event\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"bc\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlattice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mzoom_event\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"ac\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlattice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/tmp/ipykernel_361713/1675915232.py\u001b[0m in \u001b[0;36mzoom_event\u001b[0;34m(event_str, lattice)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mzoom_event\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mevent_str\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlattice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mevent\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mevent_lattice\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mEvent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrom_str\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mevent_str\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mevent_class\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlattice\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mevent_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mevent\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m propagated = lattice.extended_value(\n\u001b[1;32m 5\u001b[0m event)\n", + "\u001b[0;32m~/sci/projetos/zugzwang/code/python/event_lattice.py\u001b[0m in \u001b[0;36mevent_class\u001b[0;34m(self, event)\u001b[0m\n\u001b[1;32m 146\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mcache\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 147\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mevent_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mevent\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 148\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mEventsClass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstable_core\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mevent\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 149\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 150\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrelated\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: __init__() missing 1 required positional argument: 'lattice'" + ] + } + ], + "source": [ + "zoom_event(\"abc\", lattice)\n", + "zoom_event(\"a\", lattice)\n", + "zoom_event(\"b\", lattice)\n", + "zoom_event(\"bc\", lattice)\n", + "zoom_event(\"ac\", lattice)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f1b85255", + "metadata": {}, + "outputs": [], + "source": [ + "from itertools import *\n", + "\n", + "lits = lattice.literals()\n", + "events = []\n", + "for len_lit in range(len(lits)+1):\n", + " events = events + list(\"\".join(c) for c in combinations(lits, len_lit))\n", + "for event in events:\n", + " zoom_event(event, lattice)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07973a47", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + }, + "vscode": { + "interpreter": { + "hash": "a59afa236e16843183c59a167f072b6fa0409044b3c4938e82ac98aad91bf217" + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/drafts/Untitled.ipynb b/code/drafts/Untitled.ipynb new file mode 100644 index 0000000..67adba8 --- /dev/null +++ b/code/drafts/Untitled.ipynb @@ -0,0 +1,50 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.002516442" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = 0.001; ca = 1 - a;\n", + "b = 0.002; cb = 1 - b;\n", + "\n", + "0.95 * a * b + 0.94 * a* cb + 0.29 * ca * b + 0.001 * ca * cb" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "665bdd88", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.9.3", + "language": "julia", + "name": "julia-1.9" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/drafts/Untitled1.ipynb b/code/drafts/Untitled1.ipynb new file mode 100644 index 0000000..a28c4e4 --- /dev/null +++ b/code/drafts/Untitled1.ipynb @@ -0,0 +1,160 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 5, + "id": "5e6ea3be-67e9-43ac-bed4-abbae7c4352b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdZ3wTV9Yw8DMjyUXuNu4VF4ox2NgY00I3poWyoSShhpdNlk32SdkQIOxmQxKSkLJhCQkh9A6hBBN6CSEU0zHFheKGu3GXbNkqc98PExThIsvSSBpZ5/+BnzyMplyN5ujeOfdeihACCCGEkLWizX0ACCGEkDlhIEQIIWTVMBAihBCyahgIEUIIWTUMhAghhKwaBkKEEEJWDQMhQgghq4aBECGEkFXDQIgQQsiqYSBECCFk1fgSCM+dO5ecnGzuo7BICoXC3IfQcWBhcggLk0MqlQqHwzQevgTCa9euXbhwwdxHYZEaGhrMfQgdBxYmh7AwOSSXy1UqlbmPosPiSyBECCGEzAIDIUIIIauGgRAhhJBVw0CIEELIqmEgRAghZNUwECKEELJqGAgRQghZNQyECCGErBoGQv39VkxyJTjWA0IIWTYMhPr7713maD4GQoQQsmzU1KlTzX0MAAB5eXlyuTwiIsLcB9IOl8uIpx2EOVPmPQyVSiUQCMx7DB0GFiaHsDA5xDAMRVEUZea7jXlNmDBh5syZxtgy9dNPPxljuwghhBBXzp4929jYuGHDBmNsXMiTGiFCCCHUGolEcvHiRSNtHJ8RIoQQsmoYCBFCCFk1DIQIIYSsGgZChBBCVg0DIUIIIasmNPcBIIQQQm1jGKaxsbG977KxsWmz/yX92Wefaf69adOm9PT0EydOnD59WsvbNmzYcP/+/WPHjv36669aVlu4cCEAfPPNN0VFRW2u9vXXX5eWlgLA8ePHFy9evHjx4iVLlqxZs6a6uppd7eLFi8nJybm5ud9//72WrZ0/f/7QoUPZ2dk//PCDltUSExNPnTqlZQW1zZs3p6WlnTp1Svv6GzduzMjIOH78+JkzZ9QLa2trFy9efOHCBc01CSEHDhx45ZVXXnjhhX/+8583btwAAJlM9p///AcAPvnkk9ra2tb2UldX9+GHHwLAsmXLpFIpAOzfv58trvfff3/9+vXswta06xP573//W1JS0uIKSqVyyZIlALBixYqKiorWtiOXy5cuXQoAn332WWVlZWurpaenL37qyy+/zMnJYZcXFBT873//I4S89957Wo728ePH3377rUqlYg9Jbd++fR9//LHmkqlTp+7bt6/J2ysrKz///HMAeP/99xUKRWt7KS8vX7FiBQAsWbJEpVJpOR6lUrl9+/bZs2dPnTp18eLF6enpAFBWVvbll18CwKJFixiGae29paWlX3/9NTz9CFpz8eJFdYn973//Y784rIaGhh9//PHll1+eNm3aBx98kJubCwCPHj1au3at+hprzYMHD9hLaNmyZeySXr163b17V8tb1FatWlVQULBv374rV65oWY299n766adr166pFxYUFCxevPj27dvqJfn5+eoT/Oyzz9gybM3+/fsvX76ckpJy4MABLavt3bv32rVrly5dOnjwoC5npHbt2rWffvqpqKjom2++0bLa1atX9+3bx160mstXr179448/ai6JiopKS0vTZdcrV64sLCzcu3fv1atXtaz23//+t7i4eM+ePdevX29tnUePHnXp0qX58oMHD168ePHatWt79+7VsosDBw6kpKRcuXJl//796oUqlepf//rX4cOHNddcsmQJ+8EtW7bs7Nmzmv919erVf/zjH3/5y18WLFjw888/s1+EL7/8sqysbOfOnbdu3QKAw4cPR0VFeXp6lpWVNT8Muv20nNSfm12xYoXm9ZecnJydnZ2SknL58mUtb/v5559zcnIuXryo/eNhr5vt27c/efJEy2orV64EgG3btpWXlwPA77///ttvv4WGhvr7+x89ejQ+Pr6hoQEAUlNTz549W1hYqH0QgJs3b547dy4/P1/75yqRSLTc9TQdOnQoKysrJSUlJSVFy2oHDx7Mycm5dOmS5o1gz549P/zwg/q2AgCEkJkzZ77zzjt9+vR55ZVX/Pz8pkyZkpWV1dDQsGbNGgBYt26dlmBWX1+/du1aAPjxxx/r6uoA4Pjx49evXw8NDfXx8dm5c+eQIUMIaXXgN/YT2bFjR4sXmVqTT6Q5pVL57bffAsCmTZuqqqpa245CoVi9ejUAbNy4saamprXVHj58uHHjxtDQ0ODg4JycnF69et2/fx8ASktLd+7cyTBMkztLE8XFxbt371YqlatWrdI8wjfffPPrr7/W/DikUqlcLm/y9urq6o0bNwLA6tWrtVwSVVVVmzdvBoBVq1YplUotp/z8889/+umngwYNmjNnjouLS2JiYk1NTWVl5ZYtWwDgf//7n5ZAWF5evm3bNnj6EbTm+vXrhw4dCg0NDQwMvHLlSkxMDPtzRCqVDh48eMOGDSNHjpw5cyZN04MHDwaAx48f79+/XyaTsddYa3Jzcw8cOKC+xgCgpqZGe9RX27lzZ0lJyenTp7UHTvbaO3nypGYk2LBhww8//MD+AmAVFRWtXLkyNDS0c+fO5eXlffr00XJHYnd6584dzd+gzZ06derevXvsbUSXM1JLS0s7efJkWVnZjh07tKx29+7dU6dOsRet5om8//777777ruYPwXaVamlpKXvkWlZj77EnTpzQ8otBpVKpKxWazp49m5qaeu/evZMnT2rZxa+//nrnzp27d+9q1pFOnTq1evXqd999V/Oes2LFCjs7u9DQUJqmp0+f/t1337HL16xZM2LECA8Pj3nz5vXu3fubb75hv1Bbt26tqKg4duxYZmYmAIwfP/7evXs1NTXNvyY0TYvaT5fheITz58/fvHmz9l86bWpsbDx+/PitW7dsbGySkpLi4uIM2RoAREREvPrqqwDwt7/9zcHBIT09PTY2Vu+tXbp06ffff6+vr4+NjZ04caK6XBQKxfr16wsKCkaPHt2vXz92oVwu37Nnz/379729vadMmeLr62vIiWzatGnlypVvvvlmdnZ2aGgoAOzZs+fIkSMPHjzw8vICgPHjx7/22msURTW/QeuuZ8+ebHHNnDnTw8OjoKAgMDAQAAoKCg4ePFhSUtK9e/epU6fa2NjovYvc3Nzk5OTy8vIePXpMmTJF7+0UFRUdOXIkNzfXx8dnxowZ7u7u7HJnZ2f2FACAvaN17dpV770AwPHjx728vMaNG7d58+aEhAT1coZhtm7d+ujRo5EjR7JBQm85OTnHjh0rKCgIDg6eOXOmg4MDAHz//fd3797NzMx0dHSEp5+vWCzWey/Z2dlHjx4tKioKCQmZOXOmelP+/v5sib3++usBAQFXrlwZO3bsxx9/3NjYeP36dZFIBAATJkxYsGCBIecIAPX19d9++21NTc3EiRN79uzJLpRKpXv27MnOzg4KCpo6dar6c9QDIWTbtm3r1q2bN29edXW1q6sru1woFKoviby8vKNHj7JfUpVKdeDAgbt377q6uv7lL38JCQnRb79KpfLMmTPs76Rhw4Y999xz6v86e/Ys23d79OjRffr00fvUAGDr1q0TJ06USCQ7d+5844031Mvr6urYUp00aVJUVBS7UCKR/PTTT9nZ2cHBwVOmTNG7VKVS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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "using CSV\n", + "using DataFrames\n", + "using Latexify\n", + "using Plots\n", + "using StatsPlots\n", + "\n", + "data = CSV.read(\"sample.csv\", DataFrame)\n", + "groups = groupby(data, :event)\n", + "totals = combine(groups, :event => length => :count)\n", + "\n", + "x = -π:0.1:π\n", + "y = sin.(x)\n", + "plot(totals.count, labels=totals.event)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e1c270c9-4270-414b-acce-33a3cc3b85c4", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.9.3", + "language": "julia", + "name": "julia-1.9" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/drafts/__init__.py b/code/drafts/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/code/drafts/__init__.py diff --git a/code/drafts/__pycache__/event_lattice.cpython-39.pyc b/code/drafts/__pycache__/event_lattice.cpython-39.pyc new file mode 100644 index 0000000..a72fa05 Binary files /dev/null and b/code/drafts/__pycache__/event_lattice.cpython-39.pyc differ diff --git a/code/drafts/algebra.py b/code/drafts/algebra.py new file mode 100644 index 0000000..2cae6bb --- /dev/null +++ b/code/drafts/algebra.py @@ -0,0 +1,30 @@ +from itertools import combinations, product + +def fmt(expr): + """Doc string""" + return ",".join(f"{x:>2}" for x in expr) + +def c(expr): + """Doc string""" + def litcomp(x): + if x == "⊤": + return "⊥" + elif x == "⊥": + return "⊤" + elif x[0] == "¬": + return x[1:] + else: + return f"¬{x}" + return [litcomp(x) for x in expr] + +def domain(symbols, unary="¬"): + """Doc string""" + atoms = list(symbols) + literals = [ + [f"{u}{a}" for u in unary] + + [a, "⊤", "⊥"] for a in atoms ] + return product(*literals) + +d = sorted(domain("abc")) +for x in d: + print(f"{fmt(x)} | {fmt(c(x))}") diff --git a/code/drafts/api_01.py b/code/drafts/api_01.py new file mode 100644 index 0000000..f119ed2 --- /dev/null +++ b/code/drafts/api_01.py @@ -0,0 +1,26 @@ +from clingo.symbol import Number +from clingo.control import Control + +class Context: + def inc(self, x): + return Number(x.number + 1) + + def seq(self, x, y): + return [x, y] + +def on_model(m): + print(m) + +ctl = Control() +ctl.add("base", [], """\ +p(@inc(10)). +q(@seq(1,2)). +""") + +ctl.ground( + [("base", [])], + context=Context()) + +s = ctl.solve(on_model=on_model) + +print(s) \ No newline at end of file diff --git a/code/drafts/arithfunclang.jl b/code/drafts/arithfunclang.jl new file mode 100644 index 0000000..c088dae --- /dev/null +++ b/code/drafts/arithfunclang.jl @@ -0,0 +1,113 @@ +using ParserCombinator + +# the AST nodes we will construct, with evaluation via calc() + +abstract type Node end +Base.:(==)(n1::Node, n2::Node) = n1.val == n2.val +calc(n::Float64) = n +# repr(n::Float64) = string(n) + +struct Const <: Node val end +calc(c::Const) = c.val +# repr(c::Const) = repr(c.val) + +struct Inv <: Node val end +calc(i::Inv) = 1.0/calc(i.val) +# repr(i::Inv) = "1.0/$(repr(i.val))" + +struct Prd <: Node val end +calc(p::Prd) = Base.prod(map(calc, p.val)) +# repr(p::Prd) = join(map(repr, p.val), "×") + +struct Neg <: Node val end +calc(n::Neg) = -calc(n.val) +# repr(n::Neg) = "-$(repr(n.val))" + +struct Sum <: Node val end +calc(s::Sum) = Base.sum(map(calc, s.val)) +# repr(s::Sum) = join(map(repr, s.val), "+") + +struct TermSequence <: Node val end +calc(ts::TermSequence) = map(calc, ts.val) +# repr(ts::TermSequence) = join(map(repr, ts.val), ",") + +struct Functor <: Node val end +calc(f::Functor) = nothing +# repr(f::Functor) = "$(ts.val)" + +struct Function <: Node val end +calc(f::Function) = Const(0.0) +# repr(f::Function) = "$(repr(f.val[1]))($(repr(f.val[2])))" + +# the grammar (the combinators!) + +#= + sum ::= prd (add | sub)* + add ::= "+" prd + sub ::= "-" prd + + prd ::= neg (mul | div)* +=# +@with_names begin + spc = Drop(Star(Space())) + @with_pre spc begin + sum = Delayed() + + term_sequence = StarList(sum, E",") |> TermSequence + functor = p"[a-z][a-zA-Z0-9_]*" > Functor + func = functor + E"(" + term_sequence + E")" |> Function + + val = E"(" + sum + E")" | (PFloat64() > Const) + + + neg = Delayed() # allow multiple (or no) negations (eg ---3) + neg.matcher = func | val | (E"-" + neg > Neg) + + mul = E"*" + neg + div = E"/" + neg > Inv + prd = neg + Star(mul | div) |> Prd + + add = E"+" + prd + sub = E"-" + prd > Neg + sum.matcher = prd + Star(add | sub) |> Sum + + arith_lang = (func | val | neg | prd | sum) + Eos() + func_lang = func + Eos() + tl_lang = term_sequence + Eos() + end +end + + +# and test + +source = "f(1,2,3+4)*1+g(5,10,h(100,3))" +grammar = arith_lang + +debug, task = make(Debug, source, grammar; delegate=NoCache) +try + expr = once(task) + println("---\n\"$source\"\tparses to\t\"$(expr)\"\n---") +catch ParserException + println("Error parsing after \"$(source[1:debug.max_iter - 1])\" and before \"$(source[debug.max_iter:end])\".\n") + + #println(grammar) + parse_dbg(source, Trace(grammar)) +end + +x = Any[ + Sum( + Any[ + Prd( + Any[ + Const(2.0) + ] + ), + Prd( + Any[ + Const(3.0), + Const(4.0) + ] + ) + ] + ) + ] \ No newline at end of file diff --git a/code/drafts/arithlang.jl b/code/drafts/arithlang.jl new file mode 100644 index 0000000..dafb29d --- /dev/null +++ b/code/drafts/arithlang.jl @@ -0,0 +1,56 @@ +using ParserCombinator + + +# the AST nodes we will construct, with evaluation via calc() + +abstract type Node end +Base.:(==)(n1::Node, n2::Node) = n1.val == n2.val +calc(n::Float64) = n + +struct Const <: Node val end +calc(c::Const) = c.val + +struct Inv<:Node val end +calc(i::Inv) = 1.0/calc(i.val) + +struct Prd<:Node val end +calc(p::Prd) = Base.prod(map(calc, p.val)) + +struct Neg<:Node val end +calc(n::Neg) = -calc(n.val) + +struct Sum<:Node val end +calc(s::Sum) = Base.sum(map(calc, s.val)) + + +# the grammar (the combinators!) + +spc = Drop(Star(Space())) +@with_pre spc begin + sum = Delayed() + val = E"(" + sum + E")" | (PFloat64() > Const) + + neg = Delayed() # allow multiple (or no) negations (eg ---3) + neg.matcher = val | (E"-" + neg > Neg) + + mul = E"*" + neg + div = E"/" + neg > Inv + prd = neg + (mul | div)[0:end] |> Prd + + add = E"+" + prd + sub = E"-" + prd > Neg + sum.matcher = prd + (add | sub)[0:end] |> Sum + + all = sum + Eos() +end + + +# and test + +prog = "1+2*3/4" +expr = parse_one(prog, all)[1] + +# this prints 2.5 +value = calc(expr) + +println("$prog → $expr = $value") \ No newline at end of file diff --git a/code/drafts/drafts.ipynb b/code/drafts/drafts.ipynb new file mode 100644 index 0000000..002dba9 --- /dev/null +++ b/code/drafts/drafts.ipynb @@ -0,0 +1,590 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "44" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# A\n", + "sum([6, 6, 1, 5, 3, 6, 3, 9, 5])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "31" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# indep\n", + "sum([5, 2, 2, 3, 4, 3, 3, 5, 4])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sum([2,4,2])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10-element Vector{Int64}:\n", + " 4\n", + " 3\n", + " 3\n", + " 2\n", + " 5\n", + " 1\n", + " 4\n", + " 2\n", + " 5\n", + " 4" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rand(1:5, 10)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "154//75" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "(88*7) // (100*3)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5366666666666666" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "float((7 *23)//(300))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "ename": "ErrorException", + "evalue": "syntax: invalid identifier name \"?\"", + "output_type": "error", + "traceback": [ + "syntax: invalid identifier name \"?\"\n", + "\n", + "Stacktrace:\n", + " [1] top-level scope\n", + " @ ~/sci/projetos/zugzwang/code/drafts/drafts.ipynb:1" + ] + } + ], + "source": [ + "?Rational" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-61//100" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "1-(21*23)//300" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1000" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "35+644+68+211+7+35" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "391//750" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "θ = (68 * 23)//(3000)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5213333333333333" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "float(θ)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4853//3000" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "θ_1 = (211 * 23) // 3000" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "using StatsBase" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "ds = 0.001 .* [0, 35, 644, 68, 211, 0, 0, 7, 35];\n", + "de = (1/23) .* [0, 0, 7, 3*θ, 3*(1-θ), 0, 0, 3, 10];" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.18670312228405667" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rmsd(ds, de)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5213333333333333" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "float(θ)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1029411764705883" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "211/68" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.3222748815165877" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "68/211" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7.666666666666667" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "23/3" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ab: 253//500, 0.506\n", + "ac: -2543//3000, -0.8476666666666667\n" + ] + } + ], + "source": [ + "n_ab = 66\n", + "n_ac = 241\n", + "\n", + "t_ab = (23*n_ab) // 3000\n", + "println(\"ab: $t_ab, $(float(t_ab))\")\n", + "\n", + "t_ac = 1 - (23 * n_ac // 3000) \n", + "println(\"ac: $t_ac, $(float(t_ac))\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a: 0.03402, b: -0.03298, c: 0.30903\n" + ] + }, + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "using Plots\n", + "\n", + "t = 0:0.005:1\n", + "a = 0.03402\n", + "b = -0.03298\n", + "c = 0.30903\n", + "e = (xi -> a*(xi^2) + b*xi + c).(t)\n", + "\n", + "println(\"a: $a, b: $b, c: $c\")\n", + "plot(t,e)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.48471487360376253" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "0.03298/(0.03402 * 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.2167205406993828" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "0.08281/(0.03403 * 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "b: -0.08280907372400756; 2a: 0.06805293005671077; argmin: 1.2168333333333334 => 0.30699680718336486\n" + ] + } + ], + "source": [ + "a = 18 /529\n", + "b = -21903/264500\n", + "c = 188207311/529000000\n", + "\n", + "err(t) = c + b*t + a*(t^2)\n", + "m = -b / (2 * a)\n", + "\n", + "println(\"b: $b; 2a: $(2*a); argmin: $m => $(err(1))\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.9.3", + "language": "julia", + "name": "julia-1.9" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.3" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/code/drafts/drafts.jl b/code/drafts/drafts.jl new file mode 100644 index 0000000..ec82458 --- /dev/null +++ b/code/drafts/drafts.jl @@ -0,0 +1,67 @@ +using Symbolics +using Latexify + +# # γ = 0.5 +# no_s = [ +# 0 , +# 23 , +# 614 , +# 165 , +# 169 , +# 0 , +# 0 , +# 4 , +# 25 , +# ] + +# γ = 0.8 +no_s = [ + 0 , + 28 , + 632 , + 246 , + 59 , + 0 , + 0 , + 5 , + 27 , +] +pr_s = (x -> x // 1000).(no_s) + +@variables θ +num_e = [ + 0 , + 0 , + 7 , + 3 * θ , + 3 * (1 - θ) , + 0 , + 0 , + 3 , + 10 , +] +pr_e = (x -> x // 23).(num_e) + +target = expand(sum( (x -> x^2).(pr_s - pr_e) )) +println(latexify(target)) + +# using Plots +# g(t) = (20869963/66125000) + (477/52900)*t + (18/529)*(t^2) +# t = 0:0.1:1 +# plot(t, g.(t)) + + + +function solve2(a, b, c) + delta = sqrt(Complex(b^2 - 4 * a * c)) + return ( (-b - delta)/(2*a), (-b + delta)/(2*a) ) +end + +# # g = target ~ 0 + +a = float(18//529) +b = -float(21903//264500) +c = float(188207311//529000000) + +println("a: $a b: $b c: $c") +println("̂θ = $(-b/a)") diff --git a/code/drafts/event_lattice.py b/code/drafts/event_lattice.py new file mode 100644 index 0000000..899d260 --- /dev/null +++ b/code/drafts/event_lattice.py @@ -0,0 +1,301 @@ +import math +from functools import cache +from itertools import accumulate, combinations, chain, groupby +import operator + + + +def uniform_op(x): + n = len(list(x)) + return 1.0 if n == 0 else 1.0/n + + +def max_op(x): + return max(x) + + +def min_op(x): + return min(x) + + +def sum_op(x): + return sum(x) + + +def stableprod_op(x): + log_x = map(math.log, x) + return math.exp(sum(log_x)) + + +def prod_op(x): + return list(accumulate(x, func=lambda a,b: a*b))[-1] + + +class Event: + """Events. + + An event is a set of literals - atoms and negated atoms. + + The convention is that atoms are represented by lower case single letters + and a negated atom by upper case single letters. + """ + + @staticmethod + def _parse(text): + return frozenset(text) + + @staticmethod + def parse(text): + """Convert a string to an event. + + Each letter in the string represents a literal. + """ + return Event(Event._parse(text)) + + + def __init__(self, literals): + """Instantiate from a (frozen) set of literals. + For example: e = Event(frozenset("abc")).""" + self._literals = frozenset(literals) + + + def literals(self): + return self._literals + + + def __iter__(self): + return self._literals.__iter__() + + @cache + def is_consistent(self): + """True if this event is consistent.""" + return all(x.swapcase() not in self._literals for x in self._literals) + + + def co(self): + """Negation of this event. + + Negation is case based: A = not a; a = not A.""" + return Event(x.swapcase() for x in self._literals) + + def invert(self): + """Negation of this event. + + See the method "co" + """ + return self.co() + + def __repr__(self) -> str: + return ''.join(str(x) for x in sorted(self._literals)) if len(self._literals) > 0 else '0' + + def latex(self): + """LaTeX representation of this even. + + Negation is represented by overline and the empty event by + + """ + return ''.join( + (str(x) if x.islower() else f"\co{{{x.lower()}}}") \ + for x in sorted(self._literals) + ) if len(self._literals) > 0 else "\set{}" + + def __hash__(self) -> int: + return self._literals.__hash__() + + + def __eq__(self, other): + """Event equality test.""" + return self._literals.__eq__(other._literals) + + def __or__(self, other): + """Event union operation.""" + return Event(self._literals | other._literals) + + def __le__(self, other): + """Event subset test.""" + return self._literals.__le__(other._literals) + + + def __lt__(self, other): + """Event strict subset test.""" + return self._literals.__lt__(other._literals) + + + def __ne__(self, other): + """Event not-equal test.""" + return self._literals.__ne__(other._literals) + + + def __ge__(self, other): + """Event superset test.""" + return self._literals.__ge__(other._literals) + + + def __gt__(self, other): + """Event strict superset test.""" + return self._literals.__gt__(other._literals) + + +class Lattice: + + @staticmethod + def parse(d): + """Input stable models. + + The input format is a dictionary associating a stable model in string form to an weight. + + For example: + + input_dict = { + "A": 0.3, + "ab": 0.2, + "ac": 0.5 + } + smodels = Lattice.parse(input_dict) + """ + result = dict() + for k, v in d.items(): + key = Event.parse(k) + result[key] = v + return result + + + @staticmethod + def close_literals(events): + """Closed set of literals entailed by a set of events. + + Includes the literals in the set of events and any missing negation.""" + base_lits = list(accumulate(events, func=operator.or_))[-1] + lits = set() + for x in base_lits.literals(): + lits.add(x) + lits.add(x.swapcase()) + return sorted(lits) + + def __init__(self, smodels_dict): + """Create an Events lattice.""" + self._smodels = smodels_dict + self._literals = Lattice.close_literals(self._smodels.keys()) + + def literals(self): + """The literals in this lattice.""" + return self._literals + + @cache + def stable_models(self): + """The stable models that generate this lattice.""" + return self._smodels.keys() + + #@cache + def events(self): + """All the events of this lattice.""" + return chain.from_iterable(map(Event, combinations(self._literals, r)) for r in range(len(self._literals)+1)) + + @cache + def stable_core(self, event): + """The stable core of an event in this lattice.""" + return set(filter(lambda sm: sm <= event or event <= sm, self.stable_models())) + + # @cache + # def event_class(self, event): + # """The equivalence class of an event.""" + # return EventsClass(self.stable_core(event), self) + + @cache + def classes(self): + """The classes of this lattice. + + Each class is presented as a key:value pair where the "key" is the stable core of the elements in "value".""" + map_ev_classes = [(e, tuple(self.stable_core(e))) for e in self.events() if e.is_consistent()] + groups = dict() + for e,c in map_ev_classes: + if c in groups.keys(): + groups[c].add(e) + else: + groups[c] = set([e]) + inconsistent = list(e for e in self.events() if not e.is_consistent()) + inconsistent_repr = inconsistent[0] + groups[(inconsistent_repr,)] = set(inconsistent) + return groups + + + def related(self, u, v): + """Tests if two events are related.""" + u_consistent = u.is_consistent() + v_consistent = v.is_consistent() + if u_consistent and (u_consistent == v_consistent): + return self.stable_core(u) == self.stable_core(v) + else: + return u_consistent == v_consistent + + def extended_value(self, event:Event, + op=prod_op): + """TODO: well...""" + value = 0 + # + # INCONSISTENT EVENTS + # + if not event.is_consistent(): + return value + # + # CONSISTENT EVENTS + # + score = self.stable_core(event) + len_score = len(score) + # CONSISTENT, INDEPENDENT + if len_score == 0: + value = 0 + elif len_score == 1: + value = self._smodels[score[0]] + else: + value = op(map(lambda sm: self._smodels[sm], score)) + + return value + + def __repr__(self): + smodels_repr = ',\n\t\t'.join(f"{k}: {v:<}" for k,v in self._smodels.items()) + lits_repr = ','.join(sorted(self._literals)) + + return "{\n" +\ + f"\t'stable_models': {{\n\t\t {smodels_repr} \n\t}}\n" +\ + f"\t'literals': {{ {lits_repr} }} \n" +\ + "}" + +# class EventsClass: +# def __init__(self, core, lattice:Lattice): +# self._core = core +# self._lattice = lattice + +# def __repr__(self): +# core_repr = "" if len(self._core) == 0 else ",".join(str(x) for x in self._core) +# return f"<{core_repr}>" + +# def __contains__(self, event:Event): +# return self.lattice.stable_core(event) == self._core + +if __name__ == "__main__": + def zoom_event(event_str, lattice): + event = Event.parse(event_str) + event_class = lattice.event_class(event) + propagated = lattice.extended_value( + event) + + print( + f"Event: {event}\n\tClass: {event_class} \n\tValue: {propagated}") + + smodels = Lattice.parse({ + "A": 2, + "ab": 3, + "ac": 5 + }) + + lattice = Lattice(smodels) + + ev_classes = lattice.classes() + for k,g in ev_classes.items(): + print(f"{tuple(s.latex() for s in k)} {set(e.latex() for e in g)}") + # zoom_event("abc", lattice) + # zoom_event("a", lattice) + # zoom_event("b", lattice) + # zoom_event("bc", lattice) + # zoom_event("ac", lattice) \ No newline at end of file diff --git a/code/drafts/explore_01.py b/code/drafts/explore_01.py new file mode 100644 index 0000000..f894bdd --- /dev/null +++ b/code/drafts/explore_01.py @@ -0,0 +1,13 @@ +from clingo.control import Control +from clingox.program import Program, ProgramObserver, Remapping + +prg = Program() +ctl_a = Control() +ctl_a.register_observer(ProgramObserver(prg)) +print(f"<1>\n{prg}\n") + +prog = "code/asp/alarm.lp" +ctl_a.load(prog) +ctl_a.ground([('base', [])]) +print(f"<2>\n{prg}\n") + diff --git a/code/drafts/model_sample-[0.0;0.3;0.2].csv b/code/drafts/model_sample-[0.0;0.3;0.2].csv new file mode 100644 index 0000000..e8b9869 --- /dev/null +++ b/code/drafts/model_sample-[0.0;0.3;0.2].csv @@ -0,0 +1,1001 @@ +event +A +A +A +A +A +A +A +ab +A +A +A +A +A +ac +A +A +ac +A +A +A +ab +A +A +A +A +A +A +ac +A +A +A +ac +A +A +ac +ac +A +ac +A +A +ac +A +A +A +A +A +A +A +A +A +ac +ab +A +A +A +A +A +ac +A +A +A +ac +A +A +A +ac +A +A +A +ac +A +A +A +A +ac +A +A +A +ab +A +A +A +ab +A +ab +A +A +A +ab +A +A +A +ac +ac +A +ab +A +A +ac +A +A +A +A +ac +A +A +A +A +A +A +ac +A +ac +A +A +ac +ac +A +ac +ac +A +A +A +ac +A +A +A +ac +A +ac +A +ab +ac +A +ac +A +A +ab +A +ac +A +ac +ab +ac +A +A +ac +A +A +A +A +A +A +ac +A +A +A +A +A +ac +A +A +ac +A +A +A +A +A +ac +A +A +A +A +A +A +A +A +ac +A +A +ac +A +A +A +ac +ac +ac +A +A +ac +A +A +A +A +A +A +A +A +ab +A +A +A +A +ac +ac +A +ab +A +A +ac +ab +A +A +A +A +ac +ac +ac +A +ac +A +A +ac +A +A +ab +ac +A +ac +ac +A +A +ac +ac +A +ac +A +A +A +ac +A +A +A +A +A +A +A +A +A +A +A +A +A +A +ab +ac +A +A +ac +A +A +A +A +A +ab +ac +A +ac +A +ac +A +ac +A +A +ab +A +A +ac +ac +A +A +ac +A +A +A +A +ac +A +A +ab +ac +A +A +ac +A +A +A +ab +A +ac +ab +A +A +ac +A +A +A +A +A +A +ac +ac +A +A +A +ac +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +ac +A +ac +A +ac +ac +ac +A +A +ac +A +A +A +A +ac +ac +A +A +A +A +A +A +ac +A +ab +A +A +ab +ac +ab +ac +ac +A +A +ab +ac +A +ac +A +A +A +A +ac +ac +A +A +ac +A +A +A +A +ab +A +A +ac +ac +A +A +A +A +A +ac +A +A +A +A +A +A +A +ac +A +A +ac +ac +A +A +A +A +ac +ac +A +ac +A +ac +A +A +A +A +ac +A +A +A +A +ac +A +A +A +A +A +A +A +A +A +ac +A +A +A +A +A +A +A +ac +ac +A +ac +A +A +A +A +ac +A +ac +A +ac +A +A +A +A +ab +A +ac +A +A +ab +A +ac +A +ac +ac +ac +A +A +A +A +A +A +A +A +A +ac +A +A +A +A +A +ac +ab +ab +A +A +A +ac +A +A +ac +A +A +A +A +A +A +A +A +A +A +A +ab +A +ac +A +A +A +A +A +A +A +A +ac +A +A +A +A +A +A +A +ac +A +A +A +A +ac +A +ac +ac +A +A +A +A +A +A +A +A +A +ab +A +A +ab +A +ac +A +A +A +ab +A +ac +ab +A +A +ac +A +ab +A +ac +A +A +A +A +A +ac +A +ac +ab +ac +A +A +A +ac +A +A +ac +A +ac +ab +A +ab +ac +A +ac +ac +ac +A +A +ab +A +ab +A +A +ac +A +ac +A +ac +A +A +A +A +A +A +A +ac +A +A +ac +ac +ab +A +A +A +A +ac +ac +A +A +A +A +ab +A +A +A +A +A +A +A +ac +ac +A +A +A +A +A +A +A +A +ab +A +ac +A +A +A +ac +A +ac +ac +ac +A +A +A +A +A +ab +ac +ac +A +A +A +A +A +A +A +ab +A +A +ac +ac +A +A +ac +A +A +A +A +A +ab +ac +A +A +ac +A +A +A +ab +A +ab +A +A +A +A +A +A +A +ac +A +A +A +A +A +A +A +A +A +ac +A +ac +A +A +ac +ac +ac +A +A +A +ac +A +ac +A +A +A +A +ab +ac +ac +ac +A +A +A +A +A +A +A +A +ac +ac +A +A +ac +A +A +A +ab +A +ac +A +ac +A +A +A +A +A +A +A +ac +A +A +A +A +ab +ab +A +ac +A +A +A +A +A +A +A +A +A +ac +A +A +ac +A +A +A +ac +A +A +ac +ac +A +ac +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +ac +A +A +A +ac +ac +A +A +ac +A +ab +A +ac +A +A +ac +ac +A +A +ab +A +A +A +A +ac +A +ac +ac +A +A +ab +A +A +ac +A +A +A +ac +A +A +A +A +A +A +A +A +A +ac +A +A +A +A +ac +A +A +ab +ab +ac +A +A +ac +A +A +ac +ac +A +ac +A +A +ac +ab +A +A +A +ac +ac +ac +A +A +A +ac +ac +ac +A +A +A +A +A +A +A +A +A +A +A +A +ac +A +ac +A +A +A +ac +A +A +A +ac +A +A +A +ac +A +A +A +ac +ac +ac +ab +A +ac +A +A +A +A +A +ac +ab +A +A +A +A +ac +A +A +ac +A +ab +A +A +ac +A +A +A +A +ac +A +A +ac +A +A +ac +ac +ac +A +A +A +A +A +A +A +A +ac +ac +ac +ac +A +A +A +A +A +ac +A +A +A +A +A +ac +A +ac +A +ac +A +A +A +A +A +A diff --git a/code/drafts/model_sample-[0.0;0.3;0.5].csv b/code/drafts/model_sample-[0.0;0.3;0.5].csv new file mode 100644 index 0000000..5d08d1d --- /dev/null +++ b/code/drafts/model_sample-[0.0;0.3;0.5].csv @@ -0,0 +1,1001 @@ +event +A +A +ac +A +A +ac +A +A +A +A +A +A +A +ab +ab +ab +A +A +A +ac +A +A +A +ab +A +A +A +A +A +ab +A +A +A +ac +ac +A +A +A +A +A +A +ac +A +A +ac +A +ab +A +A +A +ab +A +A +ac +A +A +A +A +ab +A +A +ab +ab +A +A +ac +A +A +A +A +A +A +A +A +A +ab +A +ab +A +A +A +A +A +A +A +A +ab +A +A +A +A +A +A +A +A +A +A +A +A +A +ac +A +A +A +A +A +ab +A +A +A +A +ab +A +A +ab +A +A +A +A +ab +A +ab +A +ac +A +ab +A +A +ac +ac +ab +A +ab +A +ab +A +ab +ab +A +A +A +A +ac +A +A +ab +A +ac +A +A +A +A +A +A +A +A +A +A +ab +A +ab +A +A +A +A +A +A +A +A +A +A +ab +A +ac +A +A +A +A +A +A +ab +ab +A +ac +A +ac +A +A +A +A +ac +A +A +A +A +A +ab +ab +A +ac +ac +A +A +ab +ac +A +A +A +A +ac +A +ac +A +A +A +ab +ac +A +ab +A +A +A +ac +A +ac +A +A +A +A +A +ab +ab +A +A +A +A +A +A +ab +A +A +ac +A +A +ab +ac +A +ab +A +A +A +A +A +A +A +ac +A +A +A +ac +A +A +A +A +A +A +A +ab +ac +A +A +ac +ac +A +ab +A +ac +A +ab +ac +ac +A +A +ac +A +A +A +A +A +A +A +ac +A +A +A +A +ab +A +A +A +A +A +ac +A +A +A +ab +A +A +A +ac +A +ac +A +ac +ab +A +A +ac +A +A +ab +A +A +ac +A +ab +ac +A +ac +A +A +ab +ab +A +A +A +A +ac +A +ac +A +A +A +A +A +ab +ac +ac +A +A +ab +ac +A +A +A +ab +A +A +ab +ab +A +A +A +A +A +ac +A +A +A +A +A +A +ac +A +A +A +A +ac +A +A +A +A +ab +ac +ac +ab +ac +A +A +ac +A +A +ab +ac +A +ab +A +A +A +ac +A +A +A +A +ab +A +A +A +ab +A +A +A +A +A +ab +ab +A +A +A +A +A +ab +ab +A +A +A +ac +ab +A +A +A +ab +A +A +ac +A +A +ab +A +A +A +A +A +ab +A +A +A +A +ac +ab +A +A +A +ab +ac +ac +A +A +A +A +A +A +A +A +A +ac +ab +A +A +ab +ac +A +ab +A +ab +ac +A +A +ac +A +A +A +ac +A +A +ac +ab +ac +A +A +A +ab +ac +A +A +A +ab +A +ab +ac +A +A +ac +ab +ab +ab +A +A +A +A +A +A +A +A +A +A +ac +A +A +ac +A +A +A +ac +A +A +ab +A +ab +A +A +A +A +A +A +A +A +ac +ab +A +A +A +ab +A +A +ab +A +A +A +A +A +A +A +A +A +A +ac +ac +ac +ab +ab +A +ab +ab +ab +A +ac +A +A +A +A +ab +A +A +A +A +ac +A +A +ac +A +A +A +A +ac +ac +A +A +A +A +A +A +A +A +A +A +A +A +ac +ac +A +ab +A +ac +A +A +ab +A +A +ac +A +A +A +ab +ab +ac +ab +A +A +A +A +A +A +A +ac +ab +A +A +ab +A +A +A +A +ab +A +A +ab +A +ab +A +A +A +ac +A +ac +A +A +A +A +ab +ab +ac +A +A +ab +ab +A +ac +A +A +A +A +ab +ab +ab +ab +ac +ab +A +A +ac +A +A +A +ac +A +A +A +A +A +A +A +A +A +ab +ac +ab +ac +A +A +ac +ac +A +A +A +A +A +A +ab +A +ac +A +A +ac +ab +ac +A +A +A +ac +ac +ac +A +A +A +A +A +A +A +A +A +A +A +ac +ac +ac +A +ab +A +A +A +A +A +A +A +ab +A +A +A +A +ab +A +ac +ab +A +ac +ac +A +ab +A +A +A +ab +ab +A +A +A +A +A +A +A +A +A +ac +A +ab +A +A +A +A +A +A +A +A +A +A +ab +ac +ab +A +ac +A +ab +A +A +A +A +A +A +ab +ac +A +A +ac +ab +A +A +A +ac +ab +A +ab +ac +A +ab +ac +A +A +A +A +ab +ab +A +A +A +ac +A +A +ab +A +A +A +A +A +ab +A +ac +A +A +A +A +A +A +A +A +A +A +A +ab +ab +ab +ac +A +ac +A +A +ac +ac +ab +A +A +A +ac +A +A +A +ac +ab +A +A +ac +A +A +A +ac +A +A +A +A +A +A +A +A +A +A +A +ab +ab +A +A +ab +A +A +A +A +A +ab +A +A +A +A +ac +A +A +ab +ac +A +A +A +A +ab +A +A +A +A +ac +A +ab +A +ac +ab +A +A +A +A +ab +ab +A +ab +ab +A +ac +A +ac +A +ac +A +A +ac +A +A +A +ac +ab +A +ab +A +A +A +ac +ab +A +ab +ac +ac +ab +ab +A +ab +A +ac +A +ab +A +A +ab +ac +A +ab +ab +ab +A +A +A +A +ac +A +ab +A +ab +A +A +ab +A +A +A +A +ac +ab +ab +A +A +A +A +ab +ac +A +A +A +ac +A +A +A +A +A +A +ac +A +ac diff --git a/code/drafts/model_sample-[0.1;0.3;0.2].csv b/code/drafts/model_sample-[0.1;0.3;0.2].csv new file mode 100644 index 0000000..7b1dd89 --- /dev/null +++ b/code/drafts/model_sample-[0.1;0.3;0.2].csv @@ -0,0 +1,1001 @@ +event +ac +A +ab +A +Cb +A +ac +A +ac +A +b +A +A +A +ac +A +A +A +ac +A +ac +A +A +A +A +Ac +A +A +A +A +A +A +A +ab +A +ac +Δ +A +A +A +A +A +ac +ac +A +A +A +ac +ac +A +A +A +A +A +A +A +A +A +A +A +Δ +ac +A +A +A +ac +Ca +a +A +A +A +A +A +ac +A +ac +A +A +b +Δ +A +ac +A +A +A +ac +AB +Δ +Δ +ac +ab +A +A +A +A +A +A +A +A +Δ +A +A +A +A +A +A +A +C +A +A +A +A +A +c +ab +A +A +A +A +A +A +A +A +A +ab +A +A +A +A +A +A +ac +ab +A +A +A +ac +A +A +ac +ac +ac +ac +A +A +ac +ac +A +Δ +A +A +A +ac +A +A +ac +ab +ac +A +A +ac +A +A +ac +A +A +A +A +ac +A +A +A +C +A +A +ac +A +A +A +ac +A +ac +C +A +A +A +A +ac +A +ac +ac +ab +A +A +ac +A +A +A +A +A +A +ac +A +ab +A +A +A +ab +A +A +A +A +ac +A +ac +A +A +A +A +ab +ac +Ca +A +A +ab +A +ac +A +ac +A +A +A +A +ac +A +A +A +A +A +A +Δ +A +ac +A +ac +A +A +ac +A +bc +ABC +A +A +A +A +A +A +A +A +A +A +ab +ab +ac +A +A +A +A +A +ac +A +A +A +A +A +A +ac +A +A +A +Δ +A +A +A +Δ +ac +A +ac +A +A +ab +ab +A +A +ab +A +A +A +ac +A +A +A +A +A +A +A +ac +ac +A +A +A +A +A +A +ac +A +ac +Δ +A +A +A +A +ac +A +A +A +ab +a +A +ac +A +A +A +ac +ac +ab +ac +A +A +A +ac +ac +b +A +A +A +ac +A +ac +ab +A +A +B +ab +ac +Δ +A +ab +A +ab +A +A +A +A +A +a +A +A +Bac +ac +ac +ac +ac +ac +ac +ac +A +A +ac +A +A +AB +A +ac +ac +ac +A +A +A +A +A +A +A +A +A +A +ac +Δ +A +A +A +abc +ac +ac +A +A +A +A +A +ac +ac +ABC +ac +ac +A +A +A +A +A +A +ac +A +A +Δ +A +A +A +A +ac +b +A +A +ac +A +A +ac +ac +A +A +ac +A +A +A +A +A +ac +A +A +A +A +ac +A +A +ac +A +A +A +A +A +A +A +A +ac +ab +A +A +A +A +bc +A +A +A +A +A +A +b +A +A +A +A +ac +ac +A +A +A +ac +ac +ac +A +A +ac +A +ac +A +ac +A +A +A +A +ab +ac +ac +A +Cab +A +ac +A +A +ab +ab +b +A +BCa +ac +A +A +ac +A +Δ +A +A +ac +ab +A +A +ab +ac +A +A +A +ac +A +A +A +A +A +ac +ab +A +Cab +A +A +A +ac +A +A +Δ +ac +ac +A +A +A +ab +A +A +A +A +A +A +A +Ab +A +A +A +A +A +A +A +A +ac +A +A +A +ac +A +A +ab +ac +A +ac +ac +C +ab +A +A +A +A +A +A +A +ac +ac +A +Δ +A +A +A +ac +A +ab +A +A +ab +A +ac +A +A +a +A +ab +A +ac +A +A +A +ac +ac +ac +A +ac +ac +A +A +bc +ac +A +AB +A +A +Bc +A +A +A +ab +A +A +ac +ac +A +ab +bc +A +ac +A +ac +ac +ac +ACb +A +A +A +ac +A +A +A +A +A +A +ac +ab +ac +A +Δ +A +A +A +A +A +c +ac +A +B +ac +ab +A +A +ac +A +A +ac +ac +A +A +A +A +ac +ac +A +A +A +ac +A +A +A +ac +A +Δ +A +A +ac +A +Δ +ab +A +A +A +A +A +ac +A +ac +A +ac +A +ac +A +A +A +ab +A +A +ac +A +C +A +b +A +C +A +A +ac +A +A +Δ +A +A +ac +ac +ac +A +A +A +A +A +A +A +A +A +A +ab +A +Ab +A +BCa +A +A +ABc +A +A +A +ac +A +A +ac +A +ac +A +A +Bc +A +ac +ac +A +A +A +ac +ac +A +ab +A +ac +ac +ac +A +A +A +ab +A +A +A +ac +A +ac +a +A +A +ac +ac +A +ac +ac +A +ac +A +A +A +A +A +A +A +A +A +A +A +A +A +ab +ab +A +A +A +A +C +ac +A +A +ac +A +ac +A +c +ac +ac +A +A +ac +ac +A +A +A +A +A +A +A +A +A +A +ac +ac +A +ac +A +A +A +A +A +A +ab +A +A +A +A +ab +A +A +ac +c +A +A +ac +A +ac +ac +A +ab +ac +A +A +ac +ac +A +A +A +A +ac +ab +Δ +ac +A +A +A +A +A +ac +ac +bc +A +A +A +ac +A +ac +A +A +ac +A +ac +A +ab +A +ac +A +A +Δ +A +ac +ac +A +A +A +ac +ac +A +ac +A +c +A +A +A +A +A +A +ac +ac +A +A +A +ab +A +Ac +BC +A +A +Ca +A +ac +Δ +A +A +A +A +A +A +A +A +ac +A +ab +A +A +ac +ac +A +ac +ac +A +A +ac +A +A +A +a +ac +Δ +A +A +A +ac +A +A +A +C +A +A +b +ac +A +ab +ac +ac +c +A +A +A +A +A +ac +A +ab +A diff --git a/code/drafts/model_sample-[0.1;0.3;0.5].csv b/code/drafts/model_sample-[0.1;0.3;0.5].csv new file mode 100644 index 0000000..0a26057 --- /dev/null +++ b/code/drafts/model_sample-[0.1;0.3;0.5].csv @@ -0,0 +1,1001 @@ +event +A +A +ac +ac +ac +ab +A +A +A +A +A +A +A +ac +A +A +A +A +A +A +A +ab +A +ac +A +abc +A +A +A +ab +A +ac +ac +ac +A +A +ab +A +A +A +A +bc +ab +A +A +ab +A +A +A +ab +A +A +A +A +A +ac +A +A +ac +A +ac +AB +A +ac +A +A +A +A +ab +A +ab +ab +A +A +A +ac +ab +ac +A +A +A +A +A +A +ac +A +A +Δ +A +ac +ac +A +A +ab +ac +A +A +A +A +A +ac +A +A +ac +ac +ac +A +A +A +ab +A +A +ac +A +ab +A +A +ac +A +A +A +A +ac +A +ab +Ab +A +ac +ac +A +ab +A +A +A +ac +A +A +A +Δ +ab +ac +ac +ab +A +ac +A +ACb +ab +c +ab +ac +ab +A +ac +A +A +A +A +ac +ab +ab +ac +A +ac +A +A +A +ABC +A +A +A +A +ac +ab +B +ab +A +A +Δ +ab +A +A +ac +A +A +A +A +A +A +ab +ab +A +A +ac +ab +A +A +A +A +ac +A +A +A +A +ab +ac +ac +A +ab +Δ +A +B +A +A +A +A +A +A +A +A +A +ab +A +A +A +ac +A +ab +A +Δ +A +A +A +Abc +ABC +ac +A +A +A +A +A +A +A +A +A +A +ac +ab +BC +A +A +ac +ac +A +A +ac +A +C +A +ab +A +A +ab +A +A +A +ac +A +A +A +ab +A +ab +ac +A +A +A +A +ab +A +ac +A +Bac +A +ac +ab +A +A +A +A +A +Δ +BCa +A +ac +A +ac +A +A +ac +A +A +A +A +A +A +ab +ab +A +ac +A +A +ac +A +A +A +ab +A +ab +BCa +A +A +A +A +A +ac +A +A +A +A +A +ab +A +A +A +Cb +A +A +A +A +A +ab +ac +Δ +c +ac +Cb +A +A +ab +A +ac +A +ab +ac +A +A +A +A +A +A +ab +ac +A +A +A +A +ab +A +A +A +A +ab +A +ac +A +A +ab +A +c +A +A +ab +ab +A +A +ac +c +A +A +ac +A +AB +ab +ac +A +A +b +A +A +A +Δ +ab +A +A +A +A +Δ +ab +b +A +A +ac +Cb +c +A +ac +A +A +ab +a +ab +A +ab +ab +A +Δ +Ab +A +ac +bc +A +A +ab +ab +A +A +A +ab +b +A +A +A +A +A +A +ab +A +Δ +A +ab +A +ab +A +ab +A +A +A +ac +ac +A +c +ac +A +A +ab +A +A +A +A +ac +A +ac +A +A +bc +ACb +A +A +A +A +A +A +Δ +Δ +c +A +ab +ac +A +A +ac +A +A +A +Δ +A +A +ab +A +A +ac +A +Ca +ab +A +A +ac +A +A +A +A +Ab +A +A +A +ac +A +ab +A +ac +A +B +A +A +A +ac +ac +A +A +A +A +A +A +A +A +A +A +A +A +Ca +A +A +A +ac +A +ab +ac +A +A +A +A +A +Cab +A +ac +ab +A +A +A +A +A +ac +ab +ab +ab +A +A +ab +A +A +A +ac +A +A +A +A +A +A +ab +ac +ab +A +Δ +A +ac +A +A +A +A +A +AC +A +ac +ab +Ca +ac +ABC +ac +ac +A +ac +A +A +A +A +ac +ac +A +A +ac +A +A +A +A +ac +ab +A +A +A +A +A +A +C +A +ab +A +A +Δ +A +A +A +A +A +A +ab +ac +ac +A +A +ab +A +A +ab +ab +A +A +A +A +ab +ab +ac +ACb +A +A +ac +A +A +ab +A +Δ +ab +ab +ab +A +A +ac +ab +A +A +ab +A +A +A +A +A +ab +ab +A +A +A +A +A +ab +A +Δ +A +A +A +A +ac +A +A +A +A +ab +Δ +ab +A +A +A +A +ab +ac +ab +A +A +ac +a +ab +A +A +Δ +ac +A +A +ab +A +ac +A +A +ac +ac +ab +A +A +A +A +ac +ac +A +A +A +c +A +A +A +ac +A +A +ab +a +ab +A +A +A +ab +A +A +ab +ac +ac +A +A +ac +ac +ac +A +A +ab +A +A +A +A +A +ac +A +ab +A +ab +A +A +A +A +ac +A +ab +A +A +ac +ab +A +A +A +ab +A +ab +Cb +Bc +A +ac +A +ab +A +ab +ac +ab +A +ab +A +ab +ac +ab +A +A +A +ac +ab +A +Δ +ab +ab +A +b +A +A +ab +ac +A +A +ab +A +A +ac +ab +A +A +A +ac +A +ab +A +ab +A +A +ac +ab +ac +A +ac +A +A +A +A +ac +A +A +ac +A +A +ab +A +A +Ca +A +Ab +A +A +A +A +A +ab +ab +ac +A +A +A +A +A +Δ +ab +A +ab +Cb +ac +ab +ac +A +ac +A +A +A +ab +A +A +A +A +A +A +ac +A +A +A +A +ac +A +A +ab +A +A +A +A +A +ac +A +A +ac +A +A +A +ab +A +ac +c +ab +ac +A +ab +A +ac +ac +A +A +Ca +ac +A +ab +A +A +ac +ab +ab +A +A +ab +A +A +A +ab +A +ac +A +A +A +A +A +A +A +A +ac +A +ac +A +ab +A +ac +ac +A +ab +Cab +A +ab +A +A +ac +A +Cb +A +A +ac +A +A +ac +A +Δ +Δ +A +ac +A +ab +A +ab +ab +A +A +ac +A +A +A +A +ab +A +ab +ab +Δ +ab +A +ac +ab +A diff --git a/code/drafts/model_sample-[0.1;0.3;0.8].csv b/code/drafts/model_sample-[0.1;0.3;0.8].csv new file mode 100644 index 0000000..abbd760 --- /dev/null +++ b/code/drafts/model_sample-[0.1;0.3;0.8].csv @@ -0,0 +1,1001 @@ +event +A +ab +ab +ab +A +A +Δ +A +A +A +A +ab +A +a +A +ab +A +A +A +A +A +ab +A +A +ab +ac +A +A +ab +A +ab +ab +A +ab +A +A +A +ac +ab +A +ac +A +A +A +A +A +ab +A +A +A +A +ab +A +ab +A +A +A +ab +ab +A +A +ac +ab +A +Ca +A +A +A +ab +A +A +A +A +ab +Δ +A +A +A +A +A +A +A +A +A +ab +A +A +abc +ab +ab +ac +Δ +ab +A +A +ab +A +ab +ab +A +ab +ab +A +ab +ab +ab +A +A +A +Δ +ab +ab +ac +A +A +ab +A +ab +A +A +A +ab +A +A +ab +ab +A +A +A +A +ab +A +A +ab +ab +ab +ab +A +Δ +Δ +ac +ab +ab +A +A +A +A +A +A +ac +A +A +A +A +A +ab +AC +ab +ab +Δ +Ca +A +ac +A +A +A +ab +ab +A +A +ab +ab +A +ab +c +A +ab +ab +A +A +A +A +A +ab +ab +A +A +Δ +A +A +A +A +A +B +A +A +A +ab +ab +A +A +A +A +A +A +Δ +ab +ab +A +A +A +ab +A +A +A +A +A +ab +A +A +A +A +A +A +A +A +A +A +Bac +AB +ab +A +Cab +Ac +A +A +A +A +ac +A +A +A +AC +ab +A +A +A +A +A +A +ab +Ba +A +A +A +ab +A +ab +A +Δ +A +A +A +A +A +ab +A +A +A +ac +A +A +ab +ab +ab +A +ab +A +ab +Cab +A +Abc +A +ab +ac +A +ab +A +ab +ab +A +A +A +A +A +ab +ab +ab +ab +ab +A +A +A +A +A +A +ac +C +ab +A +A +A +ab +A +A +A +A +A +A +A +A +A +ab +ab +A +A +A +A +A +ab +ab +ab +A +Δ +A +A +A +A +ab +ab +A +ab +A +ab +ab +ac +ab +ab +A +ab +A +ac +A +A +A +A +B +ac +A +A +A +A +A +A +A +A +A +ab +A +A +BCa +A +ab +A +a +ac +A +Δ +ab +A +Ba +ab +ab +A +A +A +A +ab +ab +A +A +B +ab +ab +A +ab +ab +A +A +A +A +c +A +A +A +A +A +A +ab +A +A +ab +A +A +A +A +bc +A +A +A +ab +A +ab +A +A +ac +ab +ab +A +A +A +A +A +A +A +A +A +abc +A +A +ab +ab +ab +Bac +A +A +A +ab +A +A +A +ab +ab +A +A +ab +ab +A +A +A +ab +A +A +A +A +ac +ab +ab +A +A +A +A +A +ab +ac +A +ab +A +A +A +A +A +A +A +A +A +A +A +ab +A +A +A +ab +A +A +A +ac +ab +A +A +A +Δ +A +A +A +A +A +B +A +a +ac +A +ab +A +A +A +ab +A +ac +A +A +A +ab +ab +A +B +ac +A +ab +Ca +C +A +A +ac +A +Δ +ab +A +ab +A +A +ab +ab +A +A +ac +A +ab +A +A +A +A +A +Ac +ac +Δ +ab +A +A +ab +A +ab +ac +A +c +ab +Δ +A +ac +A +A +A +A +A +ab +A +ab +A +ac +Δ +ab +A +A +Δ +A +ab +A +ac +A +A +A +ab +A +A +ab +A +A +A +A +A +A +A +Δ +A +Bac +A +A +A +A +ab +a +ab +b +A +A +A +A +A +A +A +ac +A +A +A +A +ab +ac +ab +ab +ab +AB +ab +A +A +ab +A +A +ab +A +A +ac +A +AC +Δ +ac +A +Ac +ab +A +ab +A +A +A +ab +A +A +A +ab +Δ +ab +Ba +ab +A +A +A +ABC +A +A +A +A +A +A +A +ab +ab +A +A +Ba +Δ +A +A +ab +ac +A +A +A +ab +A +A +A +A +ab +A +ab +A +A +A +A +A +A +A +AB +B +ab +C +A +A +A +Bc +ab +A +ab +ab +A +A +ab +ac +A +A +A +A +A +A +A +A +A +A +A +ab +A +ab +A +A +A +ab +A +A +A +A +A +A +ab +A +b +AB +A +AB +A +A +ab +A +A +A +ab +ab +A +ac +A +A +A +A +ab +ac +A +A +c +ab +A +A +A +A +A +ab +ab +ab +ab +A +ab +A +A +A +A +ab +A +A +A +ab +ab +A +A +A +A +ab +A +A +ab +A +A +A +A +BCa +ac +ab +ac +A +ab +Δ +Cb +A +A +A +ab +A +Δ +A +ab +A +AC +ab +ab +ab +A +ab +A +A +A +A +A +A +A +A +ac +Δ +A +ABC +A +A +Ac +A +A +A +ab +A +A +A +A +ab +ab +bc +ab +ac +ab +A +A +a +A +ab +A +A +Δ +ab +ab +ab +A +ab +ab +A +A +A +A +A +A +A +A +ab +ab +A +ab +A +A +ab +A +A +ab +ab +A +A +A +A +A +A +A +ac +A +A +A +A +A +B +A +A +BC +ab +ab +A +A +A +A +ac +B +bc +A +A +A +ab +A +A +A +A +A +A +A +ac +A +A +A +ab +A +A +ac +ab +A +ab +A +A +ab +A +A +ab +a +A +C +A +A +ab +A +A +A +ab +A +ab +A +ac +A +A +ab +ab +A +A +ab +A +BC +A +A +A +A +A +A +A +A +A +A +A +A +A +Cab +A +ab +ab +ab +A +A +c +A +A +A +ab +A +A +A +A +A +A +ac +ac +Δ +ab +A +ac +A diff --git a/code/drafts/model_sample.csv b/code/drafts/model_sample.csv new file mode 100644 index 0000000..85aa03a --- /dev/null +++ b/code/drafts/model_sample.csv @@ -0,0 +1,1001 @@ +event +A +ac +A +A +A +A +A +A +A +A +A +bc +ac +c +A +ac +ac + +B +A +A +A +ac +ac +A +A +ac +A +A +ab +ab +A +A +a +A +b +ab +A +AB +A +ab +ac +ab +A +A +A +A +A +A +ac +A +A +A +A +ab +ac +A +ac +ac +B +A +A +ac +A +A +ac +A +A +ab +A +ac +A +A +A +A +ac +ac +A +A +A +A +A +A +A +A + +ac +A +ac +A +ac +ac +A +A +A +A +ac +A +bc +A +A +ac +ac +A +A +Ba +A +ACb +b +ac +A +A +ac +A +A +a +Ca +ac +A +ac +ac +A +A +A +ab +ac +A +ACb +A + +A +A +A + +A +A +A +A +c +ac +A +A +A +A +A +ac +A +ac +A +A +A +ab +ac +A +B +ab +ac +ab +A +A +A +ac + +C +c +A +ac +ac +A +ab +A +A + +A +A +A +A +A +A +A +A +A +A +ab +ac +A +ac +A +A +A + +Cb +A +A +A +ac +A +A +A +ac +ac +A +A +A +A +A +A +A +A +A +A +A +A +A +A +ac +ac +ac +A +ac +bc +A +ac +A +A +A +A +A +A +A +A +ac +A +Cab +ac +B +Ca +A +A +A +ac +A +B +A +A +A +A +A +A +A +C +A +c +A +A +A +A +A +ac +A +A +ac +A +A +A +ab +c +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +ac +A +ac +A +ac +ac +A +A +A +A +ac +A +A + +A +A +A +A +A +A +A +A +A +ac +A +A +A +ac +A +A +Ac +A +A +A +ab +AB +A +A +b +A +A +ac +ABC +ac +ac +ABC +b +A +ac +ac +ac +A +A +A +A +A +A +ac +A +ac +A +A +A +ac +A +A +ac +A +A +ac +A + +ac +a +A +ab +A +ac +A +A +Ac +A +A +ac +A +A +B +ac +A +A +A +A +A +A +ac +A +ac +A +ac +ac +ac +A +ab +ac +A +A +A +ab +A +ac +A +ab +A + +ac +A +bc +A +A +ac +ac +ac +A +ac +A +A +B +A +A +A +A +ac +A +A +A +b +A +A +A +A +A +A +A +A +A +bc +A +ac +ac +A +Ba +ac +A +A +A +A +A +ac +ac + +A +Ca +A +ab +A +A +A +A +A +ac +A +ac +A +ac +ac +A +A +ac +A +A +ac +A +A +A +A +A +ac +ac +A +A +ac +A +A +A +A +A +A +A +A +A +ac +A +ac +A +A +A +A +ac +c +A +ac +A +A +A +A +ac +A +A +A +A +ac +ab +ab +A +A +Ca +ac +A +A +ac +A +ac +A +A +A +C +A +A +ac +A +Cb +A +A +ac +A +A +ac +A +A +ABC +ab +A +ac +A +A +A +ac +ac +A +A +A +ac +C +ac +ac +A +ac +ab +ac +A +A +ab +ac +A +ab +A +A +ab +A +A +A +A +ac +ac +ac +Abc +A +A +A +ac +ab + +A +ac +a +ab +A +A +ab +A +A +A +A +A +A +A +bc +A +bc +A +A +A +A +A +A +A +A +ab +ac +ac +A +A +ac +A +ac +A +A +A +A +A +A +A +A +A +A +A +Ca +ac +ac +ac +ac +A +A +A +A +A +A +A +A +A +A +ab +A +A +A +Ca +ac +A +ab +A +ab +AC +ab +A +A +A +A +A +A + +A +A +ac +A +A +ac +A +ABC +A +A +A +ac +ac +A +ac +A +A +A +A +A +A +ac +ac +A +ac +A +A +ac +A +A +ac +A +ab +A +ac +A +A +c +A +A +A +A +A +ac +Cb +A +ac +A +A +ac +A +A +A +A +ac + +A +ac +A +A +ab +A +A +A +A +A +Bc +A +A +ac +A +A +ac +A +A +Ca +A +ac +A +A +A +A +A +A +A +ab +A +A +A +ac +A +A +ac +A +ac +C +ab +A +A +A +b +A +A +A +A +A +A +A +A +ac +AC +ac +A +A +ac +A +A +A +A +ABC +A +A +ac + +ac +A +A +ac +A +C +A +A +A +A + +ac +A +ac +A + +A +A +A +A +A +A +A +A +ac +a +ab +A +A +A +A +A +ac +A +A +ac +ac +A +A +ab +A +ac +A +A +b +A +Bac +A +ac +A +A +ac +A +A +ac +A +A +Abc +A +ac +ab +A +A +b +A +A +A +A +A +ab +ac + +A +A +ac +A +A +A +A +ac +A + +A +A +A +A +A +A +ac +A +A +A +A +A +A +A +ac +A +A +A +A + +ac +A +A +ac +Ab +A +A +ac +Ac +ab +A +A +A +ac +ac +ab +A +ac +A +A +A +A +A +A +A +A +A +ac +A +A +ac +A + +A +A +ab +A +A +A +A +ac +ac +AC +A +A +A +A +A +ac +A +A +ac +A +ABC +ac +A +A +A +A +A +A +ac +ac +A +A +ac +ab +ab +bc +A +ac + +ac +A +ab +A +Ac +A +ab +A +A +AC +A +A +ac +A +ac +A +A + +A +ac +ac +ac +A +A +ac +A +A +ab +A +A +ab +A +A +ac +A +a +ac +A +A +A +ac +Cb +A +ab +ac +A +BCa +ac +ac +A diff --git a/code/drafts/sample.csv b/code/drafts/sample.csv new file mode 100644 index 0000000..48e6319 --- /dev/null +++ b/code/drafts/sample.csv @@ -0,0 +1,101 @@ +event +ac +bA +bAC +bAC +cA +B +c +BC +acB + +cAB +cA +abC +C +bC +bcA +cB +cAB + +bcA +BC +C +c +abc +aC +AB +bc +ABC +ac +AC +aBC +aB +AB +A +cAB +AB +B +B +bC +bcA +A +a +cAB +aC +AC +bAC +bAC +cA +bC +AB +bc +abC +bAC +B +AB +bc +B +b +bcA +AC +bA +a +A +ac +bC +bA +bcA +cB +A +a +bcA + +bc +bAC +bcA +aBC +abc +b +a +cA +aB + +cAB +b +aBC +A +aC +ab +bcA +bC +cA + +aB +bcA +AB +ac +aBC +acB +C +A diff --git a/code/drafts/sample_analysis.jl b/code/drafts/sample_analysis.jl new file mode 100644 index 0000000..79da0f0 --- /dev/null +++ b/code/drafts/sample_analysis.jl @@ -0,0 +1,77 @@ +using CSV +using DataFrames +using Latexify +using Plots +using StatsPlots + +function format_event(event) + symbols = [] + if event == "z" + symbols = "\\bot" + elseif event == "i" + symbols = "\\indepclass" + else + for c in event + if isuppercase(c) + push!(symbols, "\\co{$(lowercase(c))}") + else + push!(symbols, c) + end + end + end + return join(symbols, "") +end + +cores = Dict( + "indepclass" => [ "B", "C", "bc", "Ba", "Bc", "BC", "Ca", "Cb", "BCa" ], + "A" => [ "A", "Ab", "Ac", "AB", "AC", "Abc", "ACb", "ABc", "ABC" ], + "ab" => [ "b", "ab", "Cab" ], + "ac" => [ "c", "ac", "Bac" ], + "A,ab" => [ ], + "A,ac" => [ ], + "ab,ac" => [ "a", "abc" ], + "A,ab,ac" => [ "Δ" ], +) + +core_of = Dict{String,String}( + "B" => "i", # independent class + "C" => "i", + "bc" => "i", + "Ba" => "i", + "Bc" => "i", + "BC" => "i", + "Ca" => "i", + "Cb" => "i", + "BCa" => "i", + "A" => "A", + "Ab" => "A", + "Ac" => "A", + "AB" => "A", + "AC" => "A", + "Abc" => "A", + "ACb" => "A", + "ABc" => "A", + "ABC" => "A", + "b" => "ab", + "ab" => "ab", + "Cab" => "ab", + "c" => "ac", + "ac" => "ac", + "Bac" => "ac", + "a" => "ab,ac", + "abc" => "ab,ac", + "Δ" => "A,ab,ac", +) + +α = 0.1 +β = 0.3 +γ = 0.8 + +data = CSV.read("model_sample-[$α;$β;$γ].csv", DataFrame) +transform!(data, :event => ByRow(e -> get(core_of, e, "z")) => :core) +groups = groupby(data, :core) +totals = combine(groups, :core => length => :count) +for row in copy.(eachrow(totals)) + row_fmt = format_event(row.core) + println("$(row_fmt) & $(row.count)") +end \ No newline at end of file diff --git a/code/drafts/sampling.jl b/code/drafts/sampling.jl new file mode 100644 index 0000000..7bf838c --- /dev/null +++ b/code/drafts/sampling.jl @@ -0,0 +1,91 @@ +using Random +using Combinatorics + +neg(a) = islowercase(a) ? uppercase(a) : lowercase(a) + +function random_sample(atoms) + result = Char[] + for a in atoms + if rand(Bool) + push!(result, rand(Bool) ? a : neg(a)) + end + end + return length(result) > 0 ? join(result) : "Δ" +end + +function random_sample(n::Int, events) + result = String[] + for _ in 1:n + x = rand(events) + push!(result, join(x, "")) + end + return result +end + +function model_sample(n::Int; α=0.01, β=0.3, γ=0.2) + literals = [ 'a', 'b', 'c', 'A', 'B', 'C' ] + samples = [] + for _ in 1:n + sample = [] + if rand() <= α # RCE + sample = Random.shuffle(literals)[1:rand(0:3)] + while !is_consistent(sample) + sample = Random.shuffle(literals)[1:rand(0:3)] + end + if sample == [] + push!(sample , 'Δ') + else + sort!(sample) + end + elseif rand() <= β + # a + push!(sample, "a") + if rand() <= γ + push!(sample, "b") + else + push!(sample, "c") + end + else + # A + push!(sample, "A") + end + push!(samples, join(sort(sample), "")) + end + return samples +end + + +function is_consistent(event) + for (i,x) in enumerate(event) + for y in event[i:end] + if y == neg(x) + return false + end + end + end + return true +end + +using DelimitedFiles + +literals = [ 'a', 'b', 'c', 'A', 'B', 'C' ] +omega = collect(powerset(literals)) +consistent = filter(is_consistent, omega) +consistent = join.(consistent) + + +α = 0.1 +β = 0.3 +γ = 0.5 + +events = model_sample(1000; + α = α, + β = β, + γ = γ) + +println( events ) + +open("model_sample-[$α;$β;$γ].csv", "w") do io + writedlm(io, [ "event" ]) + writedlm(io, events) +end \ No newline at end of file diff --git a/code/drafts/symbops.py b/code/drafts/symbops.py new file mode 100644 index 0000000..25fd6f8 --- /dev/null +++ b/code/drafts/symbops.py @@ -0,0 +1,41 @@ +from unicodedata import numeric +from sympy import * +from sympy.plotting import plot + +def variants(expr, with_plot=False): + print(f"Expr: {latex(expr)}") + print(f"Simplify: {latex(simplify(expr))}") + print(f"Expand: {latex(expand(expr))}") + print(f"Factor: {latex(factor(expr))}") + if with_plot: + plot(expr, (d, 0, 1, 10),ylabel="$\\mathrm{P(expr \\mid \\alpha = 0.3)}$") + +init_printing(use_unicode=True) + +a, d = symbols('a d') +A = 1 - a +D = 1 - d + +wab = a * d +wac = a * D +wA = A + +wabc = wab * wac +wAb = wA +wa = wab + wac +wb = wab +wc = wac +wE = wab + wab + wA + +z = wabc + 9 * wA + wab + wac + wa + wb +wc + wE +pabc = wabc/z + +z_03 = z.subs(a, 0.3) +wabc_03 = wabc.subs(a, 0.3) +pabc_03 = pabc.subs(a, 0.3) + +variants(z_03) +variants(wabc_03) +variants(pabc_03) +print(solve(wabc_03 - 0.0015 * z_03, d)) + diff --git a/code/drafts/teste.ipynb b/code/drafts/teste.ipynb new file mode 100644 index 0000000..c62a6aa --- /dev/null +++ b/code/drafts/teste.ipynb @@ -0,0 +1,116 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2+2" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "x = np.linspace(-6, 6)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "y = np.sin(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(x,y)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.15 ('base')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "a59afa236e16843183c59a167f072b6fa0409044b3c4938e82ac98aad91bf217" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/code/julia/BIFParser.jl b/code/julia/BIFParser.jl new file mode 100644 index 0000000..553980a --- /dev/null +++ b/code/julia/BIFParser.jl @@ -0,0 +1,50 @@ +using ParserCombinator + +# AST Nodes with evaluation via calc +abstract type Node end + +Base.:(==)(n1::Node, n2::Node) = n1.val == n2.val + +calc(n::Float64) = n + +struct Inv <: Node val end +calc(i::Inv) = 1.0/calc(i.val) + +struct Prd <: Node val end +calc(p::Prd) = Base.prod(map(calc, p.val)) + +struct Neg <: Node val end +calc(n::Neg) = -calc(n.val) + +struct Sum <: Node val end +calc(s::Sum) = Base.sum(map(calc, s.val)) + + +# The Grammar +spc = Drop(Star(Space())) + +@with_pre spc begin + sum = Delayed() + val = E"(" + sum + E")" | PFloat64() + + + neg = Delayed() # allow eg ---3 + neg.matcher = val | (E"-" + neg > Neg) + + mul = E"*" + neg + div = E"/" + neg > Inv + prd = neg + (mul | div)[0:end] |> Prd + + add = E"+" + prd + sub = E"-" + prd > Neg + sum.matcher = prd + (add | sum)[0:end] |> Sum + + all = sum + Eos() +end + +# Test + +expr = "1 + 2 * 3 / 4" +parsed = parse_one(expr, all) +value = calc(parsed[1]) +println("Expression: $(expr)\nAST : $parsed\nValue : $value") diff --git a/code/julia/asia2.bif b/code/julia/asia2.bif new file mode 100644 index 0000000..13deaca --- /dev/null +++ b/code/julia/asia2.bif @@ -0,0 +1,60 @@ +network asia2 { +} +variable asia { + type discrete [ 2 ] { yes, no }; +} +variable tub { + type discrete [ 2 ] { yes, no }; +} +variable smoke { + type discrete [ 2 ] { yes, no }; +} +variable lung { + type discrete [ 2 ] { yes, no }; +} +variable bronc { + type discrete [ 2 ] { yes, no }; +} +variable either { + type discrete [ 2 ] { yes, no }; +} +variable xray { + type discrete [ 2 ] { yes, no }; +} +variable dysp { + type discrete [ 2 ] { yes, no }; +} +probability ( asia ) { + table 0.01, 0.99; +} +probability ( tub | asia ) { + (yes) 0.05, 0.95; + (no) 0.01, 0.99; +} +probability ( smoke ) { + table 0.5, 0.5; +} +probability ( lung | smoke ) { + (yes) 0.1, 0.9; + (no) 0.01, 0.99; +} +probability ( bronc | smoke ) { + (yes) 0.6, 0.4; + (no) 0.3, 0.7; +} +probability ( either | lung, tub ) { + (yes, yes) 1.0, 0.0; + (no, yes) 1.0, 0.0; + (yes, no) 1.0, 0.0; + (no, no) 0.0, 1.0; +} +probability ( xray | either ) { + (yes) 0.98, 0.02; + (no) 0.05, 0.95; +} +probability ( dysp | bronc, either ) { + (yes, yes) 0.9, 0.1; + (no, yes) 0.7, 0.3; + (yes, no) 0.8, 0.2; + (no, no) 0.1, 0.9; +} diff --git a/code/julia/asia2.lp b/code/julia/asia2.lp new file mode 100644 index 0000000..e34a711 --- /dev/null +++ b/code/julia/asia2.lp @@ -0,0 +1,36 @@ +% prob(asia, "0.01"). +asia ; -asia. +% prob(tub, [asia], "0.05"). +tub ; -tub :- asia. +% prob(tub, [-asia], "0.01"). +tub ; -tub :- -asia. +% prob(smoke, "0.5"). +smoke ; -smoke. +% prob(lung, [smoke], "0.1"). +lung ; -lung :- smoke. +% prob(lung, [-smoke], "0.01"). +lung ; -lung :- -smoke. +% prob(bronc, [smoke], "0.6"). +bronc ; -bronc :- smoke. +% prob(bronc, [-smoke], "0.3"). +bronc ; -bronc :- -smoke. +% prob(either, [lung, -tub], "1.0"). +either ; -either :- lung, -tub. +% prob(either, [-lung, tub], "1.0"). +either ; -either :- -lung, tub. +% prob(either, [lung, tub], "1.0"). +either ; -either :- lung, tub. +% prob(either, [-lung, -tub], "0.0"). +either ; -either :- -lung, -tub. +% prob(xray, [either], "0.98"). +xray ; -xray :- either. +% prob(xray, [-either], "0.05"). +xray ; -xray :- -either. +% prob(dysp, [bronc, -either], "0.8"). +dysp ; -dysp :- bronc, -either. +% prob(dysp, [-bronc, either], "0.7"). +dysp ; -dysp :- -bronc, either. +% prob(dysp, [bronc, either], "0.9"). +dysp ; -dysp :- bronc, either. +% prob(dysp, [-bronc, -either], "0.1"). +dysp ; -dysp :- -bronc, -either. \ No newline at end of file diff --git a/code/julia/asplang.jl b/code/julia/asplang.jl new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/code/julia/asplang.jl diff --git a/code/julia/bif2asp.jl b/code/julia/bif2asp.jl new file mode 100644 index 0000000..4375122 --- /dev/null +++ b/code/julia/bif2asp.jl @@ -0,0 +1,163 @@ +using PythonCall + +function is_truthy(x) + falsy_re = r"false|0|-0|nul|undef|no|nan"i + return Bool(match(falsy_re, "$x") === nothing) +end + +BIFReader = pyimport("pgmpy.readwrite").BIFReader + +function cpd_indexes(x) + if length(x) > 0 + h = x[1] + subs = cpd_indexes(x[2:end]) + result = Dict() + if length(subs) > 0 + for subk in keys(subs) + pos_key = [:pos, subk...] + neg_key = [:neg, subk...] + result[pos_key] = [h[2], subs[subk]...] + result[neg_key] = [h[3], subs[subk]...] + end + else + result[ [:pos] ] = [ h[2] ] + result[ [:neg] ] = [ h[3] ] + end + return result + else + return Dict() + end +end + +function compile_nodecpd(states, parents, cpd) + pos_idx = findfirst(states .|> is_truthy) + + par_idxs = cpd_indexes(parents) + idxs = length(par_idxs) > 0 ? + Dict( [:pos, cx...] => [pos_idx, ix...] for (cx, ix) in par_idxs ) : + Dict([:pos] => [ pos_idx ]) + + return Dict( + conf => getindex(cpd, idx...) for (conf, idx) in idxs) +end + +function get_bif(filename) + dag = Dict{String, Any}("source" => basename(filename)) + model = BIFReader(filename).get_model() + nodes = model.nodes() + bn_info = [] + for node in nodes + # states + states = pyconvert(PyList, model.states[node]) + # parents + parents_names = pyconvert(PyList, model.get_parents(node)) + parents = [] + for parent in parents_names + parent_states = pyconvert(PyList, model.states[parent]) + pos_idx = findfirst(parent_states .|> is_truthy) + neg_idx = findfirst(parent_states .|> (x -> !x) ∘ is_truthy) + push!(parents, (parent, pos_idx, neg_idx)) + end + # CPDS + prob_tab = model.get_cpds(node) + prob_cpd = pyconvert(PyArray, prob_tab.values) + + push!(bn_info, Dict( + "node" => pyconvert(String, node), + "parents" => parents_names, + "cpd" => compile_nodecpd(states, parents, prob_cpd) + )) + end + dag["nodes"] = bn_info + return dag +end + +function pretty_print(d::Dict, pre=1) + for (k,v) in d + if typeof(v) <: Dict + s = "$(repr(k)) => " + println(join(fill(" ", pre)) * s) + pretty_print(v, pre+1+length(s)) + else + println(join(fill(" ", pre)) * "$(repr(k)) => $(repr(v))") + end + end + nothing +end + +function make_rule(head, parents, case, prob; with_annotations=false) + body = [] + for (ci,si) in enumerate(case[2:end]) + p = getindex(parents, ci) + push!(body, si == :pos ? p : "-$p") + end + body_str = join(body, ", ") + if with_annotations + rule = "$(rpad(prob, 5)) :: $head :- $body_str." + else + rule = "% prob($head, [$body_str], \"$prob\").\n$head ; -$head :- $body_str." + end + return rule +end + +make_fact(head, prob; with_annotations=false) = with_annotations ? + "$(rpad(prob, 5)) :: $head." : + "% prob($head, \"$prob\").\n$head ; -$head." + +function bif2ast(dag; with_annotations=false, logging=false) + rules = [] + for node in dag["nodes"] + parents = node["parents"] + arity = length(parents) + node_head = node["node"] + cpd = node["cpd"] + if logging + println("Node $node_head | $(join(parents, " "))\n\t$(cpd)") + end + if arity == 0 + push!(rules, make_fact(node_head, cpd[[:pos]]; with_annotations)) + else + for (case, prob) in cpd + push!(rules, make_rule(node_head, parents, case, prob; with_annotations)) + end + end + if logging + println("\t Rules: $(length(rules))") + end + end + return join(rules, "\n") +end + +using ArgParse + +arg_parser = ArgParseSettings() +@add_arg_table arg_parser begin + + "filename" + help = "A BIF file to convert." + required = true + + "--outfile", "-o" + help = "Target ASP file." + + "--annotated", "-a" + help = "Generate ASP extended with probabilistic annotations." + action = :store_true +end + +args = parse_args(arg_parser) +filename = args["filename"] +annotations = args["annotated"] +has_astfile = args["outfile"] !== nothing +if !isfile(filename) error("Missing file [$filename].") end + +dag = get_bif(filename) +ast = bif2ast(dag; with_annotations=annotations) + +if has_astfile + open(args["outfile"], "w") do ast_file + write(ast_file, ast) + end +else + println(ast) +end diff --git a/code/julia/dados.dat b/code/julia/dados.dat new file mode 100644 index 0000000..70e50d1 --- /dev/null +++ b/code/julia/dados.dat @@ -0,0 +1,3 @@ +bom dia +1 2 3 4 +4 5 6 7 \ No newline at end of file diff --git a/code/julia/drafts.jl b/code/julia/drafts.jl new file mode 100644 index 0000000..45951d8 --- /dev/null +++ b/code/julia/drafts.jl @@ -0,0 +1,20 @@ +using ParserCombinator + +struct TS val; end + +num_seq = (StarList!(PInt(), E",") |> TS) + Eos() + +source = "1" +grammar = num_seq + +debug, task = make(Debug, source, grammar; delegate=NoCache) +try + once(task) + expr = parse_one(source, grammar)[1] + println("---\n\"$source\"\n\tparses to\n$(expr)\n---") +catch ParserException + println("Error parsing after \"$(source[1:debug.max_iter - 1])\" and before \"$(source[debug.max_iter:end])\".\n") + + #println(grammar) + parse_dbg(source, Trace(grammar)) +end \ No newline at end of file diff --git a/code/julia/forward.jl b/code/julia/forward.jl new file mode 100644 index 0000000..6f749b1 --- /dev/null +++ b/code/julia/forward.jl @@ -0,0 +1,187 @@ +using Combinatorics +using Symbolics +using Latexify +Latexify.set_default(;env=:raw) +#= + +\mu(e) :- + \mu(e,t), + \mu_TC(t). + +\mu_TC(t). + +\mu(e,t) :- + \mu([e], t), + #[e]. + +#[e]. + +\mu([e], t) :- \mu(s, t), s \in [[e]] + +\mu(s, t) :- \theta_s,t. + +\theta_s,t. +=# + + +neg(a) = islowercase(a[1]) ? uppercase(a) : lowercase(a) +literals(atoms) = join(sort(collect(atoms * neg.(atoms))), "") + +function is_consistent(event) + for (i,x) in enumerate(event) + for y in event[i:end] + if y == neg(x) + return false + end + end + end + return true +end + + +omega(atoms) = join.(powerset(literals(atoms)), "") +consistent(atoms) = join.(filter(is_consistent, omega(atoms))) + +sbf_atoms = "abc" + +@variables θ +sbf_theta = Dict( + ("A", "A") => 1, + ("ab", "a") => θ, + ("ac", "a") => 1 - θ +) + +sbf_totalchoices = unique(values(sbf_theta)) +sbf_probabilities = Dict( + "a" => 3 // 10, + "A" => 7 // 10 +) + +mu_st(s::String, t::String; theta=sbf_theta) = get(theta, (s,t), 0) + +sbf_core = Dict{String,String}( + "B" => "i", # independent class + "C" => "i", + "bc" => "i", + "Ba" => "i", + "Bc" => "i", + "BC" => "i", + "Ca" => "i", + "Cb" => "i", + "BCa" => "i", + "A" => "A", + "Ab" => "A", + "Ac" => "A", + "AB" => "A", + "AC" => "A", + "Abc" => "A", + "ACb" => "A", + "ABc" => "A", + "ABC" => "A", + "b" => "ab", + "ab" => "ab", + "Cab" => "ab", + "c" => "ac", + "ac" => "ac", + "Bac" => "ac", + "a" => "ab,ac", + "abc" => "ab,ac", + "" => "A,ab,ac", +) + +stablecore(e::String; core::Dict{String,String}=sbf_core) = Set( + string.(split(get(core, e, "⊥"), ",")) + ) + +classes(core=sbf_core) = Dict( + e => Set(k for k in keys(core) if core[k] == core[e]) for e in keys(core) + ) + +sbf_classes = classes(sbf_core) + +mu_class(e::String, t::String; theta=sbf_theta, core=sbf_core) = + sum(mu_st(s,t, theta=theta) for s in stablecore(e, core=core)) + +mu_class(e::String; theta=sbf_theta, core=sbf_core, tc_probabilities=sbf_probabilities) = + sum(mu_class(e, t, theta=theta,core=core) * p for (t, p) in tc_probabilities) + +function mu(e::String, t::String; + theta=sbf_theta, + core=sbf_core, + classes=sbf_classes) + class_size = length(classes[e]) + if class_size > 0 + return mu_class(e, t, theta=sbf_theta, core=sbf_core) // class_size + else + return 0 + end +end + +mu(e::String; + theta=sbf_theta, + core=sbf_core, + classes=sbf_classes, + tc_probabilities=sbf_probabilities) = + sum(mu(e, t, theta=theta, core=core, classes=classes) * p for (t, p) in tc_probabilities) + +sbf_quoset = unique(values(sbf_classes)) + + +Z = 0 // 1 +for qs in sbf_quoset + class_size = length(qs) + if class_size > 0 + e = [x for x in qs][1] + mce = mu_class(e) + global Z = Z + mce + end +end +Z = simplify(Z) +println("Z = $Z") + +# for qs in sbf_quoset +# class_size = length(qs) +# if class_size > 0 +# e = [x for x in qs][1] +# e_fmt = rpad(e,3) +# cs_fmt = rpad(class_size, 3) +# sc_fmt = rpad(join(stablecore(e), ", "), 20) +# mu_ceA = rpad(latexify(mu_class(e, "A")), 20) +# mu_cea = rpad(latexify(mu_class(e, "a")), 20) +# mce = mu_class(e) +# mu_ce = rpad(latexify(mce), 20) +# mu_eA = rpad(latexify(mu(e, "A")), 20) +# mu_ea = rpad(latexify(mu(e, "a")), 20) +# mu_e = rpad(latexify(mu(e)), 20) +# h_line="#[$e_fmt] = $cs_fmt; SC: $sc_fmt" +# c_line = "[$e_fmt]\tA: $mu_ceA\ta: $mu_cea\tμ~: $mu_ce" +# e_line = "'$e_fmt'\tA: $mu_eA\ta: $mu_ea\tμ~: $mu_e" +# println(join([h_line, c_line, e_line], "\n\t")) +# end +# end + +for qs in sbf_quoset + class_size = length(qs) + if class_size > 0 + e = [x for x in qs][1] + e_fmt = rpad(e,3) + sc_fmt = rpad(join(stablecore(e), ", "), 20) + pr_e = simplify(mu(e) // Z) + pr_c = simplify(pr_e * class_size) + pe_fmt = rpad(latexify(pr_e), 20) + pce_fmt = rpad(latexify(pr_c), 20) + h_line="P(E = $e_fmt) = $pe_fmt; P(E ∈ [$e_fmt]) = $pce_fmt | SC: $sc_fmt." + println(h_line) + end +end + +#= +for e in consistent(sbf_atoms) + e_fmt = rpad(e,3) + sc_fmt = rpad(join(stablecore(e), ", "), 20) + class_size = length(sbf_classes[e] + cs_fmt = rpad(class_size), 3) + println("[[$e_fmt]] #$cs_fmt: $sc_fmt\tA: $(rpad(latexify(mu(e, "A")),20))\ta:$(rpad(latexify(mu(e, "a")), 20))") +end +=# + diff --git a/code/julia/miguel.jl b/code/julia/miguel.jl new file mode 100644 index 0000000..bff25b9 --- /dev/null +++ b/code/julia/miguel.jl @@ -0,0 +1,7 @@ +open("dados.dat") do file + t = read(file, String) + m = read(file, Array{Float32, 2}(undef, 2, 4)) +end + +println(m) +println(t) \ No newline at end of file diff --git a/code/problog/alarm.pl b/code/problog/alarm.pl new file mode 100644 index 0000000..6e2a0f0 --- /dev/null +++ b/code/problog/alarm.pl @@ -0,0 +1,7 @@ +0.1::burglary. +0.01::earthquake. + +alarm :- burglary. +0.8::alarm :- earthquake. + +query(alarm). \ No newline at end of file diff --git a/code/problog/nats.pl b/code/problog/nats.pl new file mode 100644 index 0000000..3e75b58 --- /dev/null +++ b/code/problog/nats.pl @@ -0,0 +1,2 @@ +n(0). +n(s(X)) :- n(X). \ No newline at end of file diff --git a/code/sasp b/code/sasp new file mode 160000 index 0000000..5bcfee4 --- /dev/null +++ b/code/sasp @@ -0,0 +1 @@ +Subproject commit 5bcfee4d5d465618db31bea4d2e408aa27e94e89 diff --git a/code/zugzwang_code.code-workspace b/code/zugzwang_code.code-workspace new file mode 100644 index 0000000..27e7c33 --- /dev/null +++ b/code/zugzwang_code.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [ + { + "path": "." + }, + { + "path": "../students/amartins/tarefas" + } + ], + "settings": {} +} \ No newline at end of file diff --git a/cspell.json b/cspell.json new file mode 100644 index 0000000..3b8bb03 --- /dev/null +++ b/cspell.json @@ -0,0 +1,16 @@ +{ + "version": "0.2", + "ignorePaths": [], + "dictionaryDefinitions": [], + "dictionaries": [], + "words": [ + "struct", + "testset" + ], + "ignoreWords": [], + "import": [], + "enabled": true, + "enableFiletypes": [ + "latex" + ] +} diff --git a/notes.md b/notes.md new file mode 100644 index 0000000..7336e76 --- /dev/null +++ b/notes.md @@ -0,0 +1,180 @@ +# Zugzwang Meetings + +## 2024-01-30 - Exploratory Research Project + +> Apply for FCT funding. + + + +## 2024-01-05 - Next Research Lines + +> After the base-setting work of "_An Algebraic Approach to Stochastic ASP_" these are the next tasks to consider. Is summary: +> 1. **Logic Programming** - Stratified & Non-stratified programs +> 2. **Computer Science** - Inductive Logic Programming +> 3. **Software** - Integration with Potassco and other frameworks +> 4. **Applications** + +#### Line 1: Logic Programming - Stratified & Non-stratified programs + +##### Line 1a + +> _Stratified_ & _non-stratified_ programs are quoted in the "CREDAL" papers as important classes of logic programs. + +Minimal example of a **non-stratified program**. + +The following annotated LP, with clauses $c_1, c_2, c_3$ respectively, is non-stratified (because has a cycle with negated arcs) but no head is disjunctive: +```prolog +0.3::a. % c1 +b :- not c, not a. % c2 +c :- not b. % c3 +``` + +This program has three stable models: +$$ +\begin{aligned} +m_1 &= \set{ a, c } \cr +m_2 &= \set{ \neg a, b } \cr +m_3 &= \set{ \neg a, c } +\end{aligned} +$$ + +> We should **investigate** _What are stratified programs and why are they important?_ and how does our approach deals with such programs? + +##### Line 1b - Investigate the expressiveness of PASP + +Consider: + +- Recursion +- Variables, +- functional symbols, + +##### Line 1c - The equivalence relation + +Consider the cases where only $s \subseteq e$ and $e \subseteq s$. Or other refinements. Also consider the inconsistent and independent events. + +##### Line 1d - Stability of the error function + +Consider alternative error functions. See statistics, Kullback-Leibler divergence + +#### Line 2: Computer Science - Inductive Logic Programming + +> Proceed from scoring programs to support genetic algorithms or other program space exploration methods. + +Scoring programs, as described in our paper, is just a step into **Inductive Logic Programming**. To go further, we need to explore algorithms that: + +1. Use **background knowledge**, expressed as a PLP. +2. Consult **positive examples** that should be _soft_ induced. +3. Consult **negative examples** that should be _soft_ excluded. +4. Generate **PLPs** that are scored. +5. Recombine the **best scored** into a new _population_, using recombination rules. + +> In order to do that, **PLPs must be expressed as data structures** to be manipulated. Also **recombination rules** must investigated before become formally expressed and supported with adequate methods. + +#### Line 3: Software - Integration with Potassco and other frameworks + +> Support annotated programs with zugzwang semantics. + +- Bayesian Networks (BII Alice) + - Generate an annotated asp program from a bayesian network and run it trough `clingo`. + - Recover the stable models from the previous ste and compute the respective probabilities. +- Program Manipulation + - Annotated ASP program _representation_ and a _parser_. + +#### Line 4: Applications + +> Apply zugzwang to a few showcases, besides the theoretic corner stones (non-stratified, disjunctive, bayes networks), preferably based in real world scenarios, with complex structure and large datasets. + +- (Stochastic) Plan Generation +- Yale-Shooting Problem +- (Stochastic) Situation Calculus +- Frame Problem +- Latent Facts - and core assumptions. +- Given a **Bayesian Network** (or a **Markov Networks**): + - Represent it. (**done** for BNs; MNs?) + - Solve the common probability tasks: join (**done**), marginals, conditionals, parameter learning, inferring unobserved variables, sample generation, _etc._ +- Given a _solved_ ASP specification: + - What is the marginal probability of the atom `a`? (**done**) + - What other probability queries are important to consider? +- Given an _unsolved_ ASP specification: + - What is the probability (distribution?) of the probabilistic fact `a`? + - What other questions are relevant? _E.g._ the distribution family of a fact? +- Given a _solved_ ASP specification and a set of _samples_: + - How do the probabilities inferred from the specification match the ones from the empiric distribution? (**done** might see alternative approaches) +- Given two _solved_ ASP specification and a set of _samples_: + - Which specification best describes the empiric distribution? (**done**) + +## 2024-01-05 - Publish Paper "AASASP" + +> Target conferences to publish paper "AASASP" + +| Conference | Abstract Deadline | Conference Date | Location | OBS | +|-----------:|:------------------|:----------------|------------------------------:|-----------| +| IJCAR 2024 | 2024-01-29 | 2024-07-3:6 | Nancy, France | Picked | +| ECAI'24 | 2024-04-19 | 2024-10-19:24 | Santiago de Compostela, Spain | | +| KR 2024 | 2024-04-24 | 2024-11-2:8 | Hanoi, Vietnam | | +| GECCO 24 | 2024-02-05 | 2024-07-14:18 | Melboune, Australia | | +| ICLP 24 | 2024-04-15 | | | preferred | +| JELIA 25 | | | | | +| ICFP 24 | 2024-03-01 | 2024-09-2:7 | Milan, Italy | | + +## 2023-02-28 - Looking for Application Examples + +What **applications** are we looking for? + +- (Stochastic) Plan Generation +- Yale-Shooting Problem +- (Stochastic) Situation Calculus +- Frame Problem +- Given a **Bayesian Network** (or a **Markov Networks**): + - Represent it. + - Solve the common probability tasks: marginals, conditionals, parameter learning, inferring unobserved variables, sample generation, _etc._ +- Given a _solved_ ASP specification: + - What is the marginal probability of the atom `a`? + - What other probability queries are important to consider? +- Given an _unsolved_ ASP specification: + - What is the probability (distribution?) of the probabilistic fact `a`? + - What other questions are relevant? E.g. the distribution family of a fact? +- Given a _solved_ ASP specification and a set of _samples_: + - How do the probabilities inferred from the specification match the ones from the empiric distribution? +- Given two _solved_ ASP specification and a set of _samples_: + - Which specification best describes the empiric distribution? + +What should be the **task for the scholarship student**? _Use the `Python` API of `clingo`._ + +1. Read a string and extract probability annotations; Associate those annotations with the respective atoms. +2. Call `clingo` to get stable models. +3. Support **computation of the equivalence classes**: _Which functions and relations?_ +4. Compute event probability using _weighted model counting_ on the equivalence classes. +5. Read a Bayesian Network from a file (`BIF`, `DSC`, `NET`, `RDA`, `RDS`, ...) and generate an annotated "ASP" specification. + +2022 - AAAI - Inference and Learning with Model Uncertainty in Probabilistic Logic Programs +- Is **"Epistemic Uncertainty (EU)"** the right framework for Zugzwang? How relevant are the epistemic questions in this paper to our work? +- EU can be represented by _Credal Sets, Subjective Logic_ and _Beta Distributions_? +- **Experiments** made with BNs from [(Kaplan and Ivanovska 2018)](https://www.sciencedirect.com/science/article/pii/S0888613X17302384) and larger networks from the [BNLearn repository](https://www.bnlearn.com/bnrepository). +- **Are networks, Bayesian Networks in particular, a "good enough" pool of "example applications" to us, for now?** + +## 2023-01-10 - 15:00 + +- Paper +- Project +- Latent Facts + +## 2022-12-12 + +- Is the project proposal ok? How long/detailed should it be? +- Initial exploratory code `event_lattice.py` and `EventLattice.ipynb` done. +- Start writing paper: Introduction, state of the art, motivation + - Identify key problems + - Target Conferences + - KR; + - [ICLP](https://waset.org/language-planning-conference-in-april-2023-in-lisbon); + - [ECAI](https://ecai2023.eu/) +- Next task for prototype: + - Get stable models from potassco/s(casp) + - other? + + +## 2022-12-05 + +- Created shared folder (gdrive:zugzwang) +- Refine project tasks, for Bachelor, M.Sc., Ph.D. students and for researchers. \ No newline at end of file diff --git a/notes.pdf b/notes.pdf new file mode 100644 index 0000000..8da7bde Binary files /dev/null and b/notes.pdf differ diff --git a/pex2024/FCT-Sessão_esclarecimento-2024-01-23.md b/pex2024/FCT-Sessão_esclarecimento-2024-01-23.md new file mode 100644 index 0000000..4c86558 --- /dev/null +++ b/pex2024/FCT-Sessão_esclarecimento-2024-01-23.md @@ -0,0 +1,36 @@ +# Sessão de Esclarecimento - Projetos IC&DT + +- Prorrogação do prazo (?) ~1mês ~21 março +- Balcão dos Fundos +- Custos Simplificados +- Formulário de Candidatura +- Condições de Elegibilidade + +## Balcão dos Fundos + +- ponto de acesso apresentação candidatura +- entidade / super-utilizador / utilizador ; perfis +- entidade convida investigador responsável +- **linha dos fundos** - esclarecimentos + +## Modelo de Custos Simplificados + +- 4320€ ETI/mês +- (o que é um ETI?) +- custo unitário = custos diretos + custos indiretos +- Consultar o Manual Frascati (2015) +- ETI = FTE +- (custo unitário) = (média despesas I&D 2019, 2020, 2021) / (média ETIs investigadores, técnicos, equivalente 2019, 2020, 2021) +- evidências: (i'm lost) + +## Formulário de Candidatura + +- 14 secções sequenciais! +- Enquadramento ENEI ou EREI (wtf?) (regional?) +- Sistema de Apoio (?) +- CV narrativo (< 3000 chars) + + +## Condições de Elegibilidade + +- enquadramento RIS3 ou RIS3 regional diff --git a/pex2024/candidatura.md b/pex2024/candidatura.md new file mode 100644 index 0000000..d3951f2 --- /dev/null +++ b/pex2024/candidatura.md @@ -0,0 +1,10 @@ +# Candidatura PeX - Zugzwang + +## Tarefas + +- [ ] Submeter +- [ ] Redigir +- [ ] Preparar + - [ ] Consultar documentação + - [ ] Reunir requisitos + - [ ] Delinear proposta \ No newline at end of file diff --git a/pex2024/documents/Application_Guide_PeX_2023.pdf b/pex2024/documents/Application_Guide_PeX_2023.pdf new file mode 100644 index 0000000..cfca14f Binary files /dev/null and b/pex2024/documents/Application_Guide_PeX_2023.pdf differ diff --git a/pex2024/documents/Aviso_de_Abertura_PEX_2023.pdf b/pex2024/documents/Aviso_de_Abertura_PEX_2023.pdf new file mode 100644 index 0000000..a460546 Binary files /dev/null and b/pex2024/documents/Aviso_de_Abertura_PEX_2023.pdf differ diff --git a/pex2024/documents/Data_Protection_PEX_2023.pdf b/pex2024/documents/Data_Protection_PEX_2023.pdf new file mode 100644 index 0000000..8e0d76e Binary files /dev/null and b/pex2024/documents/Data_Protection_PEX_2023.pdf differ diff --git a/pex2024/documents/Ethics_Self_Assessment_Guide.pdf b/pex2024/documents/Ethics_Self_Assessment_Guide.pdf new file mode 100644 index 0000000..ce1f2a5 Binary files /dev/null and b/pex2024/documents/Ethics_Self_Assessment_Guide.pdf differ diff --git a/pex2024/documents/Guiao_CIENCIAVITAE.pdf b/pex2024/documents/Guiao_CIENCIAVITAE.pdf new file mode 100644 index 0000000..14126e5 Binary files /dev/null and b/pex2024/documents/Guiao_CIENCIAVITAE.pdf differ diff --git a/pex2024/documents/Regulation_on_projects_FCT_EN.pdf b/pex2024/documents/Regulation_on_projects_FCT_EN.pdf new file mode 100644 index 0000000..faac185 Binary files /dev/null and b/pex2024/documents/Regulation_on_projects_FCT_EN.pdf differ diff --git a/sample.csv b/sample.csv new file mode 100644 index 0000000..240b732 --- /dev/null +++ b/sample.csv @@ -0,0 +1,100 @@ +c +a +B +c +ab +Ac +aBC +BC +Ab +b +c +AB +Ac +B +bC +Ab + +aB +B +a +aC +B +AB +B + +C +bc + +B +bc +AC +ABC +a +b +ac +AC +B +bC +b +C + +aC +AbC + +C +AC +bc + + +C +b + +b +abc +a +abc + +B +a +C +aB + +A +Bc +C +AB +aBc +A +b + +a +a +c +b +a +A +Ab +aC + +B +C +Ab +Bc +A +Ac +c +B +AC +ABC +Ab +aC +bC + + +C +a + +ABC +b +aB diff --git a/students/amartins/2023-03-13 | Tarefa 01.eml b/students/amartins/2023-03-13 | Tarefa 01.eml new file mode 100644 index 0000000..5568cef --- /dev/null +++ b/students/amartins/2023-03-13 | Tarefa 01.eml @@ -0,0 +1,172 @@ +MIME-Version: 1.0 +Date: Mon, 13 Mar 2023 10:09:44 +0000 +References: + +In-Reply-To: +Message-ID: +Subject: Re: Tarefa 01 +From: Francisco Coelho +To: ALICE MARTINS +Content-Type: multipart/alternative; boundary="00000000000071009e05f6c54f6f" + +--00000000000071009e05f6c54f6f +Content-Type: text/plain; charset="UTF-8" +Content-Transfer-Encoding: quoted-printable + +Tem aqui um reposit=C3=B3rio de red= +es de +bayes, nesses formatos. +Pode testar a biblioteca fazendo experi=C3=AAncias com os exemplos do +reposit=C3=B3rio. + +Quest=C3=B5es simples que pode tentar responder com a biblioteca: +- quantos n=C3=B3s tem a rede? +- quantos n=C3=B3s s=C3=A3o descendentes? quantos s=C3=A3o ascendentes? +- qual =C3=A9 o n=C3=BAmero m=C3=A9dio de arestas "in"? e "out"? + +Um exerc=C3=ADcio com mais "f=C3=B4lego". +O dot +=C3=A9 um formato para descrever grafos, suportado em Python pelo pydot + e usado pelo graphviz + para visualiza=C3=A7=C3=A3o. +Por outro lado, networkx =C3=A9 uma biblioteca de +an=C3=A1lise de grafos e redes. + +Passe uma rede lida com o bnlearn para o networkx e visualize-a com o +graphviz passando pelo pydot. + +Entretanto, estamos interessados no Potassco . Pode +instalar no seu sistema e consultar o guia respetivo +. + +-- +Francisco Coelho +Departamento de Inform=C3=A1tica, Universidade de =C3=89vora +NOVA LINCS +High Performance Computing Chair + + +ALICE MARTINS escreveu no dia domingo, 12/03/2023 +=C3=A0(s) 20:18: + +> Ol=C3=A1 professor, +> espero que se encontre bem. +> Da minha pesquisa sobre este assunto, pude concluir que para realizarmos = +a +> leitura de redes Bayesianas de um ficheiro, precisamos de importar a +> biblioteca bnlearn no python atrav=C3=A9s do comando: +> *import bnlearn* +> +> Atrav=C3=A9s dessa biblioteca, podemos ler ficheiros atrav=C3=A9s dos com= +andos: +> *read.bif(), read.dsc(), read.net ()* +> +> Para al=C3=A9m de toda esta pesquisa, tamb=C3=A9m aprendi como programar = +em Python. +> Por favor, diga-me o que mais posso fazer para terminar esta tarefa. +> +> Atenciosamente, +> Alice Martins +> +> Francisco Coelho escreveu no dia ter=C3=A7a, 7/03/2023 =C3= +=A0(s) +> 11:07: +> +>> Ol=C3=A1 Alice, +>> +>> Aqui est=C3=A1: "Read a Bayesian Network from a file (`BIF`, `DSC`, `NET= +`, +>> `RDA`, `RDS`, ...)" em Python. +>> +>> Cumprimentos, +>> -- +>> Francisco Coelho +>> Departamento de Inform=C3=A1tica, Universidade de =C3=89vora +>> NOVA LINCS +>> High Performance Computing Chair +>> +> + +--00000000000071009e05f6c54f6f +Content-Type: text/html; charset="UTF-8" +Content-Transfer-Encoding: quoted-printable + +
Tem aqui um reposi= +t=C3=B3rio de redes de bayes, nesses formatos.
Pode testar a biblioteca fazendo expe= +ri=C3=AAncias com os exemplos do reposit=C3=B3rio.

Quest=C3=B5es simples que pode te= +ntar responder com a biblioteca:
- quantos n=C3=B3s tem a rede?
- quantos n=C3=B3s s=C3=A3o d= +escendentes? quantos s=C3=A3o ascendentes?
- qual =C3=A9 o n=C3=BAmero m=C3=A9dio de= + arestas "in"? e "out"?

Um exerc=C3=ADcio com mais "f=C3=B4lego= +".
O dot =C3=A9 um formato para descrever grafos, suportado em Pyth= +on pelo pydot e usado pelo = +graphviz para visualiza=C3=A7=C3= +=A3o.
Por= + outro lado, networkx =C3=A9 uma bibl= +ioteca de an=C3=A1lise de grafos e redes.

Passe uma rede lida com o bnlearn para o netwo= +rkx e visualize-a com o graphviz passando pelo pydot.

Entretanto, estamos interessados n= +o Potassco. Pode instalar no seu sist= +ema e consultar o g= +uia respetivo.

--
Francisco Coelho
Departamento de Inform=C3=A1tica,=C2=A0<= +span style=3D"font-family:monospace">Universidade de =C3=89vora
NOVA LINCS
High Performance Computing Chair

ALICE MARTINS <l52768@alunos= +.uevora.pt> escreveu no dia domingo, 12/03/2023 =C3=A0(s) 20:18:
= +
Ol=C3=A1 professor,
espero que se encontre bem.
Da m= +inha pesquisa sobre este assunto, pude concluir que para realizarmos a leit= +ura de redes Bayesianas de um ficheiro, precisamos de importar a biblioteca= + bnlearn no python atrav=C3=A9s do comando:
import bnlearn= +

Atrav=C3=A9s dessa biblioteca, podemos ler fichei= +ros atrav=C3=A9s dos comandos:
read.bif(), read.dsc(), read.net()

Para al=C3=A9m de toda esta pesquisa, tamb=C3=A9m aprendi como prog= +ramar em Python.
Por favor, diga-me o que mais posso fazer p= +ara terminar esta tarefa.

Atenciosamente,
Alice Martins

Francisco Coelho <fc@uevora.pt> escreveu no dia ter=C3=A7a= +, 7/03/2023 =C3=A0(s) 11:07:
Ol=C3=A1 Alice,

Aqui est=C3=A1: "Read a Bayesian Network from a fil= +e (`BIF`, `DSC`, `NET`, `RDA`, `RDS`, ...)" em Python.

Cumprimentos,
= +
--
Francisco Coelho
D= +epartamento de Inform=C3=A1tica,=C2=A0Universidade de =C3=89vora
NOVA LINCS= +
High Performance Com= +puting Chair
+
+
+ +--00000000000071009e05f6c54f6f-- \ No newline at end of file diff --git a/students/amartins/tarefas/Untitled.ipynb b/students/amartins/tarefas/Untitled.ipynb new file mode 100644 index 0000000..363fcab --- /dev/null +++ b/students/amartins/tarefas/Untitled.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/students/amartins/tarefas/Untitled1.ipynb b/students/amartins/tarefas/Untitled1.ipynb new file mode 100644 index 0000000..3b2222c --- /dev/null +++ b/students/amartins/tarefas/Untitled1.ipynb @@ -0,0 +1,424 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "a1e66bad-47aa-49b5-ac59-a2183646e74e", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "0dbacf2a-1b98-4a20-89f7-1b46ac725a13", + "metadata": {}, + "outputs": [], + "source": [ + "x = np.linspace(0,1)\n", + "y = x*(1-x)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "178862b2-2fc8-42ec-b8e9-ceb8b78ea7a9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(x,y)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "id": "26e02fe3-a079-4b64-b986-56f37f967e85", + "metadata": {}, + "outputs": [], + "source": [ + "from sympy import pprint, symbols, expand, factor, simplify, collect, cancel, apart, Matrix, solve, Poly, roots, degree\n", + "from sympy.printing.latex import latex\n", + "from sympy.plotting import plot" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "baf8a3e6-0a39-410a-85c8-8c536b7603ae", + "metadata": {}, + "outputs": [], + "source": [ + "t,x = sympy.symbols(\"t x\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5d570fe9-37cf-4680-a608-99e015d9b977", + "metadata": {}, + "outputs": [], + "source": [ + "Z = 8.8 + t*(1-t)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "de141bca-0e2a-42c7-86a3-355a1eda8287", + "metadata": {}, + "outputs": [], + "source": [ + "pa = 0.7/Z" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "0194f6b5-c206-47d7-bc0d-8b1617186d46", + "metadata": {}, + "outputs": [], + "source": [ + "T = 1 - t" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "d1b858fc-2432-42e7-ba79-e012e76a6a99", + "metadata": {}, + "outputs": [], + "source": [ + "s = Matrix([\n", + " 37,\n", + " 9,\n", + " 9,\n", + " 3,\n", + " 3,\n", + " 0,\n", + " 0,\n", + " 2,\n", + " 1])\n", + "m = Matrix([\n", + " 0.0,\n", + " 0.0,\n", + " 0.7,\n", + " 0.3 * t,\n", + " 0.3 * T,\n", + " 0.7 + 0.3 * t,\n", + " 0.7 + 0.3 * T,\n", + " 0.3 * t * T,\n", + " 0.7 + 0.3 * t * T\n", + "])\n", + "z = (s.T * m)[0,0]" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "2b461810-5bbe-4e4c-a938-b3c916dd95ee", + "metadata": {}, + "outputs": [], + "source": [ + "z = (s.T * m)[0,0]" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "3946e0dc-fc81-4030-9cac-ccdccf05b9e1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - 0.9 t \\left(t - 1\\right) + 7.9$" + ], + "text/plain": [ + "-0.9*t*(t - 1) + 7.9" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simplify(z)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "a34c1fc2-3810-4054-bcee-b3d8db7b852f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - 7.9 \\cdot \\left(0.113924050632911 t^{2} - 0.113924050632911 t - 1.0\\right)$" + ], + "text/plain": [ + "-7.9*(0.113924050632911*t**2 - 0.113924050632911*t - 1.0)" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "factor(z)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "89ac28fa-0c47-4a27-a0cc-f7fe0ddf63bd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - 0.9 t^{2} + 0.9 t + 7.9$" + ], + "text/plain": [ + "-0.9*t**2 + 0.9*t + 7.9" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "expand(z)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "f575ba56-647a-4e01-8c0f-39499abf6300", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'- 1.3 t^{2} + 1.3 t + 7.5'" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "latex(expand(z))" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "a4c62a99-9ad7-4b79-9dda-a28092383a07", + "metadata": {}, + "outputs": [], + "source": [ + "zx = z.replace(t,x)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "9d67f9d2-48d9-454e-bbfa-4d185eb86200", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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p08f+Xw+nX322frXf/3XdqoWUU09bqtXr9bQoUOVkZGhHj166K677tKxY8faqVps3bpV48ePV35+vhwOhzZs2HDKfVotkxhLvPzyy8bj8Zjly5ebvXv3mpkzZ5pOnTqZb7/9ts7+33zzjcnIyDAzZ840e/fuNcuXLzcej8f86U9/aufKT29NPW4zZ840Tz75pPnwww/NF198YebOnWs8Ho/56KOP2rny01tTj1vUiRMnTP/+/c2YMWPM0KFD26dYxDTnuN14443m0ksvNZs3bzb79u0zf/3rX827777bjlWjqcdt27Ztxul0mmeeecZ88803Ztu2bWbw4MHmpptuaufKT19vvPGGefjhh82f//xnI8msX7++wf6tmUmsCXbDhw8306ZNS2gbOHCgmTNnTp39f/Ob35iBAwcmtN13333msssua7MaUVtTj1tdBg0aZBYsWNDapaEBzT1ut912m3nkkUfMvHnzCHZJ0NTj9uabb5rs7Gxz7Nix9igP9WjqcXv66adN//79E9qeffZZ06tXrzarEfVrTLBrzUxixaXYyspK7dq1S2PGjEloHzNmjN57770693n//fdr9R87dqx27typqqqqNqsV1Zpz3GoKhUIqKSlR165d26JE1KG5x23lypX6+uuvNW/evLYuEXVoznF7/fXXVVBQoKeeeko9e/bUueeeqwcffFDl5eXtUTLUvOM2cuRIfffdd3rjjTdkjNH//d//6U9/+pPGjRvXHiWjGVozk6TUBxTX54cfflAwGFReXl5Ce15eno4cOVLnPkeOHKmzfyAQ0A8//KAePXq0Wb0Ia85xq+mf//mfdfLkSd16661tUSLq0Jzj9uWXX2rOnDnatm2b3G4rXnZSTnOO2zfffKPt27crLS1N69ev1w8//KDp06frxx9/5D67dtKc4zZy5EitXr1at912myoqKhQIBHTjjTfqueeea4+S0QytmUmsGLGLqvmPdI0xDf5z3br619WOttXU4xa1du1azZ8/X+vWrVNubm5blYd6NPa4BYNB3X777VqwYIHOPffc9ioP9WjK71soFJLD4dDq1as1fPhwXX/99Vq0aJFeeuklRu3aWVOO2969e/XAAw/oscce065du/TWW29p3759/G/1Dq61MokVp845OTlyuVy1zl6OHj1aKwFHde/evc7+brdbZ555ZpvVimrNOW5R69at0y9+8Qu98soruvrqq9uyTNTQ1ONWUlKinTt3avfu3br//vslhQODMUZut1ubNm3Sz372s3ap/XTWnN+3Hj16qGfPnsrOzo61nX/++TLG6LvvvtOAAQPatGY077gVFhZq1KhR+vWvfy1JGjJkiDp16qTRo0fr8ccf54pUB9SamcSKETuv16thw4Zp8+bNCe2bN2/WyJEj69xnxIgRtfpv2rRJBQUF8ng8bVYrqjXnuEnhkbo777xTa9as4Z6RJGjqccvKytLHH3+sPXv2xKZp06bpvPPO0549e3TppZe2V+mnteb8vo0aNUp/+9vfVFpaGmv74osv5HQ61atXrzatF2HNOW5lZWVyOhP/vLtcLknVo0DoWFo1kzT57RYdVPTt4CtWrDB79+41s2bNMp06dTL79+83xhgzZ84cM3ny5Fj/6FuLf/WrX5m9e/eaFStW8HEnSdDU47ZmzRrjdrvNkiVLzOHDh2PTiRMnkvUlnJaaetxq4l2xydHU41ZSUmJ69eplJk6caD799FOzZcsWM2DAADN16tRkfQmnpaYet5UrVxq3222WLl1qvv76a7N9+3ZTUFBghg8fnqwv4bRTUlJidu/ebXbv3m0kmUWLFpndu3fHPqKmLTOJNcHOGGOWLFli+vTpY7xer7n44ovNli1bYtumTJlirrjiioT+77zzjrnooouM1+s1ffv2Nc8//3w7VwxjmnbcrrjiCiOp1jRlypT2L/w019Tft3gEu+Rp6nH73//9X3P11Veb9PR006tXLzN79mxTVlbWzlWjqcft2WefNYMGDTLp6emmR48e5o477jDfffddO1d9+nr77bcb/FvVlpnEYQzjsgAAADaw4h47AAAAEOwAAACsQbADAACwBMEOAADAEgQ7AAAASxDsAAAALEGwAwAAsATBDgAAwBIEOwAAAEsQ7AAAACxBsAMAALAEwQ4AGmHt2rVKS0vToUOHYm1Tp07VkCFDVFRUlMTKAKCawxhjkl0EAHR0xhhdeOGFGj16tBYvXqwFCxboD3/4gz744AP17Nkz2eUBgCTJnewCACAVOBwOLVy4UBMnTlR+fr6eeeYZbdu2jVAHoENhxA4AmuDiiy/Wp59+qk2bNumKK65IdjkAkIB77ACgkTZu3KjPPvtMwWBQeXl5yS4HAGphxA4AGuGjjz7SlVdeqSVLlujll19WRkaGXnnllWSXBQAJuMcOAE5h//79GjdunObMmaPJkydr0KBBuuSSS7Rr1y4NGzYs2eUBQAwjdgDQgB9//FGjRo3ST3/6Uy1btizWPmHCBPn9fr311ltJrA4AEhHsAAAALMGbJwAAACxBsAMAALAEwQ4AAMASBDsAAABLEOwAAAAsQbADAACwBMEOAADAEgQ7AAAASxDsAAAALEGwAwAAsATBDgAAwBIEOwAAAEv8f2NOLTnGmcXPAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "p1 = plot(zx, xlim=(0.0, 1.0), ylim=(0,10), show=False, legend=True)\n", + "p2 = plot( (t*T).replace(t, x), xlim=(0.0,1.0), show=False)\n", + "p1.append(p2[0])\n", + "p1.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "27da5481-766b-4062-a947-aa1d565a6735", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{-2.50462606288666: 1, 3.50462606288666: 1}" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "roots(z, t)" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "6927383c-e62a-436e-bbc9-79bbe7f4273f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.3⋅t⋅(1 - t) + 0.7\n", + "───────────────────\n", + "0.9⋅t⋅(1 - t) + 7.9\n", + "----------------------------------------------------------------------------------------------------\n", + "0.3⋅t⋅(t - 1) - 0.7\n", + "───────────────────\n", + "0.9⋅t⋅(t - 1) - 7.9\n", + "----------------------------------------------------------------------------------------------------\n", + " 2 \n", + " 0.3⋅t 0.3⋅t 0.7 \n", + "- ────────────────────── + ────────────────────── + ──────────────────────\n", + " 2 2 2 \n", + " - 0.9⋅t + 0.9⋅t + 7.9 - 0.9⋅t + 0.9⋅t + 7.9 - 0.9⋅t + 0.9⋅t + 7.9\n", + "----------------------------------------------------------------------------------------------------\n", + " ⎛ 2 ⎞\n", + "0.0886075949367088⋅⎝0.428571428571429⋅t - 0.428571428571429⋅t - 1.0⎠\n", + "─────────────────────────────────────────────────────────────────────\n", + " 2 \n", + " 0.113924050632911⋅t - 0.113924050632911⋅t - 1.0 \n", + "----------------------------------------------------------------------------------------------------\n", + "t⋅(0.3 - 0.3⋅t) + 0.7\n", + "─────────────────────\n", + "t⋅(0.9 - 0.9⋅t) + 7.9\n", + "----------------------------------------------------------------------------------------------------\n", + " 2 \n", + "0.3⋅t - 0.3⋅t - 0.7\n", + "────────────────────\n", + " 2 \n", + "0.9⋅t - 0.9⋅t - 7.9\n", + "----------------------------------------------------------------------------------------------------\n", + " 0.244725738396624 \n", + "0.333333333333333 + ────────────────────────────────────────────────\n", + " 2 \n", + " 0.113924050632911⋅t - 0.113924050632911⋅t - 1.0\n", + "----------------------------------------------------------------------------------------------------\n" + ] + } + ], + "source": [ + "e = (0.7 + 0.3 * t * T)/z;\n", + "for ei in (e, simplify(e), expand(e), factor(e), collect(e, t), cancel(e), apart(e)):\n", + " pprint(ei, use_unicode=True)\n", + " print(100*\"-\")" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "id": "ba9fc88f-028c-476f-aa94-22c2e15d6e2c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sympy.core.add.Add" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z.func" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "id": "b4bc5ad7-3bb9-44d0-9b70-d27d6c9876f2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(7.90000000000000, 0.9*t*(1 - t))" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z.args" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "74c9de1c-01fe-42b6-9b92-a787cfc246b2", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/students/amartins/tarefas/__pycache__/bninput.cpython-311.pyc b/students/amartins/tarefas/__pycache__/bninput.cpython-311.pyc new file mode 100644 index 0000000..8c968ab Binary files /dev/null and b/students/amartins/tarefas/__pycache__/bninput.cpython-311.pyc differ diff --git a/students/amartins/tarefas/__pycache__/bninput.cpython-39.pyc b/students/amartins/tarefas/__pycache__/bninput.cpython-39.pyc new file mode 100644 index 0000000..3e10148 Binary files /dev/null and b/students/amartins/tarefas/__pycache__/bninput.cpython-39.pyc differ diff --git a/students/amartins/tarefas/__pycache__/tarefa1.cpython-311.pyc b/students/amartins/tarefas/__pycache__/tarefa1.cpython-311.pyc new file mode 100644 index 0000000..c237b1c Binary files /dev/null and b/students/amartins/tarefas/__pycache__/tarefa1.cpython-311.pyc differ diff --git a/students/amartins/tarefas/__pycache__/tarefa2.cpython-311.pyc b/students/amartins/tarefas/__pycache__/tarefa2.cpython-311.pyc new file mode 100644 index 0000000..c427a1a Binary files /dev/null and b/students/amartins/tarefas/__pycache__/tarefa2.cpython-311.pyc differ diff --git a/students/amartins/tarefas/asia.lp b/students/amartins/tarefas/asia.lp new file mode 100644 index 0000000..509ec29 --- /dev/null +++ b/students/amartins/tarefas/asia.lp @@ -0,0 +1,43 @@ +%* 0.01 :: asia. *% +asia ; -asia. + +%* 0.05 :: tub :- asia. *% +tub ; -tub :- asia. +%* 0.01 :: tub :- -asia. *% +tub ; -tub :- -asia. + +%* 0.5 :: smoke. *% +smoke ; -smoke. + +%* 0.1 :: lung :- smoke. *% +lung ; -lung :- smoke. +%* 0.01 :: lung :- -smoke. *% +lung ; -lung :- -smoke. + +%* 0.6 :: bronc :- smoke. *% +bronc ; -bronc :- smoke. +%* 0.3 :: bronc :- -smoke. *% +bronc ; -bronc :- -smoke. + +%* 1.0 :: either :- lung, tub. *% +either ; -either :- lung, tub. +%* 1.0 :: either :- -lung, tub. *% +either ; -either :- -lung, tub. +%* 1.0 :: either :- lung, -tub. *% +either ; -either :- lung, -tub. +%* 0.0 :: either :- -lung, -tub. *% +either ; -either :- -lung, -tub. +%* 0.98 :: xray :- either. *% +xray ; -xray :- either. +%* 0.05 :: xray :- -either. *% +xray ; -xray :- -either. + +%* 0.9 :: dysp :- bronc, either. *% +dysp ; -dysp :- bronc, either. +%* 0.7 :: dysp :- -bronc, either. *% +dysp ; -dysp :- -bronc, either. +%* 0.8 :: dysp :- bronc, -either. *% +dysp ; -dysp :- bronc, -either. +%* 0.1 :: dysp :- -bronc, -either. *% +dysp ; -dysp :- -bronc, -either. + diff --git a/students/amartins/tarefas/asia2.bif b/students/amartins/tarefas/asia2.bif new file mode 100644 index 0000000..1543625 --- /dev/null +++ b/students/amartins/tarefas/asia2.bif @@ -0,0 +1,60 @@ +network unknown { +} +variable asia { + type discrete [ 2 ] { yes, no }; +} +variable tub { + type discrete [ 2 ] { yes, no }; +} +variable smoke { + type discrete [ 2 ] { yes, no }; +} +variable lung { + type discrete [ 2 ] { yes, no }; +} +variable bronc { + type discrete [ 2 ] { yes, no }; +} +variable either { + type discrete [ 2 ] { yes, no }; +} +variable xray { + type discrete [ 2 ] { yes, no }; +} +variable dysp { + type discrete [ 2 ] { yes, no }; +} +probability ( asia ) { + table 0.01, 0.99; +} +probability ( tub | asia ) { + (yes) 0.05, 0.95; + (no) 0.01, 0.99; +} +probability ( smoke ) { + table 0.5, 0.5; +} +probability ( lung | smoke ) { + (yes) 0.1, 0.9; + (no) 0.01, 0.99; +} +probability ( bronc | smoke ) { + (yes) 0.6, 0.4; + (no) 0.3, 0.7; +} +probability ( either | lung, tub ) { + (yes, yes) 1.0, 0.0; + (no, yes) 1.0, 0.0; + (yes, no) 1.0, 0.0; + (no, no) 0.0, 1.0; +} +probability ( xray | either ) { + (yes) 0.98, 0.02; + (no) 0.05, 0.95; +} +probability ( dysp | bronc, either ) { + (yes, yes) 0.9, 0.1; + (no, yes) 0.7, 0.3; + (yes, no) 0.8, 0.2; + (no, no) 0.1, 0.9; +} diff --git a/students/amartins/tarefas/asia2.pkl b/students/amartins/tarefas/asia2.pkl new file mode 100644 index 0000000..478d9c1 Binary files /dev/null and b/students/amartins/tarefas/asia2.pkl differ diff --git a/students/amartins/tarefas/basic.lp b/students/amartins/tarefas/basic.lp new file mode 100644 index 0000000..6af29c0 --- /dev/null +++ b/students/amartins/tarefas/basic.lp @@ -0,0 +1,3 @@ +2 { numero(1..6) } 2. + +par(2 * X) :- numero(X). \ No newline at end of file diff --git a/students/amartins/tarefas/bninput.py b/students/amartins/tarefas/bninput.py new file mode 100644 index 0000000..87aa889 --- /dev/null +++ b/students/amartins/tarefas/bninput.py @@ -0,0 +1,99 @@ +import pickle + +from pgmpy.readwrite import BIFReader +import networkx as nx +import pydot +from networkx.drawing.nx_pydot import graphviz_layout +from pgmpy.models import BayesianModel +from test import * + +import unittest + +def summary_dag(filename): + """A função "summary_dag" tem como argumento uma string com o nome do ficheiro a ler e + retorna um modelo com os dados recolhidos do respetivo ficheiro. + """ + file = BIFReader(filename) + model = file.get_model() # Cria um objeto BayesianModel + nodes = list(model.nodes()) # Converte o NodeView para uma lista + + asc = 0 + des = 0 + nodes_in = 0 + nodes_out = 0 + + for x in nodes: + # Obtem os nós pais e filhos de cada nós + parents = model.get_parents(x) + children = model.get_children(x) + + if len(parents) != 0: + des += 1 + if len(children) != 0: + asc += 1 + nodes_in += len(children) + nodes_out += len(parents) + + return { + 'dag_file': filename, + 'nodes': nodes, + 'count_parents': des, + 'count_children': asc, + 'count_in_edges': nodes_in, + 'count_out_edges': nodes_out, + 'bnmodel': model + } + +def summary_str(d): + s = "DAG file: " + d["dag_file"] + "\n" + s += " Number of nodes: " + str(len(d["nodes"])) + "\n" + s += " Number of parents: " + str(d["count_parents"]) + "\n" + s += " Number of children: " + str(d["count_children"]) + "\n" + s += " Average in-degree: " + str(d["count_in_edges"]/len(d["nodes"])) + "\n" + s += " Average out-degree: " + str(d["count_out_edges"]/len(d["nodes"])) + "\n" + s += " Nodes:" + "\n" + nodes = d["nodes"] + for x in nodes: + s += " " + str(x) + "\n" + return s + +def show_dag(model): + G = nx.DiGraph() + dot = pydot.Dot(graph_type='digraph') + for node in model['nodes']: + G.add_node(node) + dot.add_node(pydot.Node(node)) + for edge in model['bnmodel'].edges: + G.add_edge(edge[0], edge[1]) + dot.add_edge(pydot.Edge(edge[0], edge[1])) + # objeto pydot + + # defina o layout do grafo + pos = graphviz_layout(G, prog='dot') + # desenhe o grafo usando o networkx + nx.draw(G, pos, with_labels=True) + +def save_dag(model, target_filename): + G = nx.DiGraph() + for node in model.nodes: + G.add_node(node) + for edge in model.edges: + G.add_edge(edge[0], edge[1]) + # objeto pydot + dot = pydot.Dot(graph_type='digraph') + for node in model.nodes: + dot.add_node(pydot.Node(node)) + for edge in model.edges: + dot.add_edge(pydot.Edge(edge[0], edge[1])) + # defina o layout do grafo + pos = graphviz_layout(G, prog='dot') + # renderize o grafo com o pydot + graph = pydot.graph_from_dot_data(dot.to_string())[0] + graph.write_png(target_filename) + +if __name__ == "__main__": + summary = summary_dag("asia2.bif") + pickle.dump(summary, open("asia2.pkl", "wb")) + message = summary_str(summary) + print(message) + unittest.main() \ No newline at end of file diff --git a/students/amartins/tarefas/bridge_pyasp.py b/students/amartins/tarefas/bridge_pyasp.py new file mode 100644 index 0000000..0404e6d --- /dev/null +++ b/students/amartins/tarefas/bridge_pyasp.py @@ -0,0 +1,22 @@ +from clingo import Control + +ctl = Control(["0"]) +ctl.add("base", [], "2 { numero(1..6) } 2.") +ctl.add("base", [], "%* 0.01 :: asia. *%") +ctl.add("base", [], "par(2 * X) :- numero(X).") +ctl.ground([("base", [])]) +print(ctl.solve(on_model=print)) + + +class LineInfo: + def __init__(self, statement, probability): + self.statement = statement + self.probability = probability + +[ + LineInfo("asia ; -asia. ", 0.01), + ... + LineInfo("bronc ; -bronc :- smoke.", 0.6), + ... + +] \ No newline at end of file diff --git a/students/amartins/tarefas/graph_asia2.png b/students/amartins/tarefas/graph_asia2.png new file mode 100644 index 0000000..5f3d141 Binary files /dev/null and b/students/amartins/tarefas/graph_asia2.png differ diff --git a/students/amartins/tarefas/notas.md b/students/amartins/tarefas/notas.md new file mode 100644 index 0000000..2235c4a --- /dev/null +++ b/students/amartins/tarefas/notas.md @@ -0,0 +1,67 @@ +# Notas com Alice Martins + +## 2023-05-04 + +### Problemas + +#### Tarefa 1A + +1. Está a contar os nós "in" e os nós "out" ao contrário, certo? `len(children)` diz quantas arestas saem de `x`. +2. Em + ```python + if len(parents) != 0: + asc += 1 + if len(children) != 0: + des += 1 + ``` + deve ser + ```python + if len(parents) != 0: + des += 1 + if len(children) != 0: + asc += 1 + ``` + porque o nó `x` é (mais) um descendente se tem ascendentes (e igualmente para ascendente). + +#### Tarefa 1B + +1. Não deve misturar o código para definir o grafo `G` com o código para o grafo `dot`. **Exceto** se quiser percorrer apenas uma vez `model.nodes` e `model.edges`. + +### Sugestões + +- **Use sempre, e só, o inglês no seu código**, não só porque não se podem usar acentos, como `nós_in`, mas também porque misturar português com inglês fica estranho (isto é, _feio_!). É melhor `nodes_in` do que `nos_in`. +- Use nomes descritivos nas suas variáveis: `node` em vez de `x`. +- Em vez de `asia = bn.import_DAG("asia2.bif")` talvez `dag = bn.import_DAG("asia2.bif")` seja melhor (**porquê?**) +- O código também fica mais simples se usar "f-strings": Em vez de + ```python + print("Número de nós:", len(nos)) + ``` + use + ```python + print(f"Número de nós: {len(nos)}") + ``` +### Desafios + +1. **Torne o seu código geral.** + 1. Coloque a parte essencial da tarefa 1A numa função, `summary_dag(filename)`, que tem argumento uma `string` com o nome do ficheiro e devolve um `dict` com chaves `dag_file`, `nodes`, `count_parents`, `count_children`, `count_in_edges`, `count_out_edges`. + 2. Use uma função `summary_str(d)` que tem argumento um `dict` como acima e devolve uma `string` com as perguntas e as respostas "bem formatadas". Por exemplo: + ```text + DAG file: asia2.bif + Number of nodes: 8 + Number of parents: 6 + Number of children: 6 + Average in-degree: 1.0 + Average out-degree: 1.0 + Nodes: + asia + tub + ... + ``` + 3. Por fim, combine as duas funções: + ```python + summary = summary_dag("asia2.bif") + message = summary_str(summary) + print(message) + ``` + 4. Coloque a parte essencial da tarefa 1B em funções `show_dag(model)` e `save_dag(model, target_filename)`. +2. **A biblioteca `bnlearn` é excessiva para estas tarefas.** Não só precisa de várias dependências irrelevantes para o que pretendemos, por exemplo o `pytorch`, como demora imenso tempo a ler o ficheiro. _Procure uma alternativa mais simples._ (**n.b.** não sei se existe!) \ No newline at end of file diff --git a/students/amartins/tarefas/t2profile.txt b/students/amartins/tarefas/t2profile.txt new file mode 100644 index 0000000..74ebe91 --- /dev/null +++ b/students/amartins/tarefas/t2profile.txt @@ -0,0 +1,9733 @@ +%* 0.01 :: asia. *% +asia ; -asia. + +%* 0.05 :: tub :- asia. *% +%* 0.01 :: tub :- -asia. *% +tub ; -tub :- asia. + +%* 0.5 :: smoke. *% +smoke ; -smoke. + +%* 0.1 :: lung :- smoke. *% +%* 0.01 :: lung :- -smoke. *% +lung ; -lung :- smoke. + +%* 0.6 :: bronc :- smoke. *% +%* 0.3 :: bronc :- -smoke. *% +bronc ; -bronc :- smoke. + +%* 1.0 :: either :- lung, tub. *% +%* 1.0 :: either :- -lung, tub. *% +%* 1.0 :: either :- lung, -tub. *% +%* 0.0 :: either :- -lung, -tub. *% +either ; -either :- lung, tub. + +%* 0.98 :: xray :- either. *% +%* 0.05 :: xray :- -either. *% +xray ; -xray :- either. + +%* 0.9 :: dysp :- bronc, either. *% +%* 0.7 :: dysp :- -bronc, either. *% +%* 0.8 :: dysp :- bronc, -either. *% +%* 0.1 :: dysp :- -bronc, -either. *% +dysp ; -dysp :- bronc, either. + + + 2414684 function calls (2368463 primitive calls) in 6.029 seconds + + Ordered by: cumulative time + + ncalls tottime percall cumtime percall filename:lineno(function) + 358 0.018 0.000 14.166 0.040 __init__.py:1() + 3133/1 0.083 0.000 6.032 6.032 {built-in method builtins.exec} + 1 0.000 0.000 6.032 6.032 tarefa2.py:1() + 1 0.000 0.000 3.050 3.050 bninput.py:10(summary_dag) + 1 0.000 0.000 3.047 3.047 BIF.py:38(__init__) + 1 0.000 0.000 3.031 3.031 BIF.py:304(get_values) + 1 0.000 0.000 3.031 3.031 parallel.py:1000(__call__) + 2908/7 0.019 0.000 2.985 0.426 :1165(_find_and_load) + 2894/7 0.016 0.000 2.985 0.426 :1120(_find_and_load_unlocked) + 2705/7 0.012 0.000 2.984 0.426 :666(_load_unlocked) + 2492/7 0.008 0.000 2.983 0.426 :934(exec_module) + 6366/14 0.005 0.000 2.983 0.213 :233(_call_with_frames_removed) + 3 0.000 0.000 2.851 0.950 threading.py:288(wait) + 35 2.851 0.081 2.851 0.081 {method 'acquire' of '_thread.lock' objects} + 1 0.000 0.000 2.828 2.828 parallel.py:960(retrieve) + 8 0.000 0.000 2.827 0.353 _parallel_backends.py:562(wrap_future_result) + 8 0.000 0.000 2.827 0.353 _base.py:428(result) + 1029/46 0.002 0.000 2.782 0.060 {built-in method builtins.__import__} + 1 0.000 0.000 2.131 2.131 global_vars.py:1() + 2953/821 0.007 0.000 1.911 0.002 :1207(_handle_fromlist) + 1 0.000 0.000 0.847 0.847 XMLBIF.py:1() + 1 0.001 0.001 0.723 0.723 _meta_registrations.py:1() + 2 0.001 0.001 0.601 0.300 decompositions.py:1() + 1 0.000 0.000 0.585 0.585 BayesianNetwork.py:1() +2705/2558 0.007 0.000 0.547 0.000 :566(module_from_spec) + 1 0.000 0.000 0.524 0.524 fake_tensor.py:1() + 1 0.000 0.000 0.518 0.518 _guards.py:1() +4684/4581 0.088 0.000 0.459 0.000 {built-in method builtins.__build_class__} + 197/174 0.001 0.000 0.458 0.003 :1231(create_module) + 197/174 0.366 0.002 0.458 0.003 {built-in method _imp.create_dynamic} + 2492 0.021 0.000 0.429 0.000 :1007(get_code) + 27 0.001 0.000 0.402 0.015 utils.py:1() +2795/2717 0.030 0.000 0.283 0.000 :1054(_find_spec) + 10 0.000 0.000 0.272 0.027 api.py:1() + 2492 0.007 0.000 0.272 0.000 :727(_compile_bytecode) + 2492 0.259 0.000 0.259 0.000 {built-in method marshal.loads} + 1 0.000 0.000 0.250 0.250 DiscreteFactor.py:1() + 1 0.000 0.000 0.245 0.245 GaussianDistribution.py:1() + 5 0.001 0.000 0.219 0.044 functional.py:1() + 1 0.000 0.000 0.213 0.213 _stats_py.py:1() + 25/16 0.000 0.000 0.208 0.013 __init__.py:108(import_module) + 26/16 0.000 0.000 0.208 0.013 :1192(_gcd_import) + 9 0.000 0.000 0.191 0.021 parallel.py:838(dispatch_one_batch) + 8 0.000 0.000 0.190 0.024 parallel.py:801(_dispatch) + 8 0.000 0.000 0.189 0.024 _parallel_backends.py:554(apply_async) + 8 0.000 0.000 0.189 0.024 reusable_executor.py:174(submit) + 8 0.000 0.000 0.189 0.024 process_executor.py:1126(submit) + 8 0.000 0.000 0.189 0.024 process_executor.py:1118(_ensure_executor_running) + 2789 0.003 0.000 0.176 0.000 :1496(find_spec) + 2789 0.011 0.000 0.173 0.000 :1464(_get_spec) + 3976 0.042 0.000 0.165 0.000 :1604(find_spec) + 1 0.002 0.002 0.164 0.164 process_executor.py:1096(_adjust_process_count) + 1 0.000 0.000 0.162 0.162 distributions.py:1() +38545/36947 0.016 0.000 0.160 0.000 {built-in method builtins.hasattr} + 1 0.000 0.000 0.153 0.153 CustomDistribution.py:1() + 16 0.001 0.000 0.149 0.009 process.py:110(start) + 16 0.001 0.000 0.147 0.009 process.py:26(_Popen) + 16 0.001 0.000 0.145 0.009 popen_loky_posix.py:41(__init__) + 16 0.007 0.000 0.144 0.009 popen_loky_posix.py:90(_launch) + 17/13 0.000 0.000 0.143 0.011 __init__.py:198(__getattr__) + 2 0.000 0.000 0.132 0.066 __init__.py:3301(_call_aside) + 1 0.000 0.000 0.131 0.131 __init__.py:3327(_initialize_master_working_set) + 4 0.000 0.000 0.130 0.032 generic.py:1() + 1 0.000 0.000 0.125 0.125 eager_transforms.py:1() +4362/4137 0.004 0.000 0.123 0.000 typing.py:349(inner) + 1 0.001 0.001 0.120 0.120 _continuous_distns.py:1() + 1 0.000 0.000 0.115 0.115 polyfuncs.py:1() + 1 0.000 0.000 0.114 0.114 specialpolys.py:1() + 17 0.002 0.000 0.114 0.007 fork_exec.py:32(fork_exec) + 1 0.000 0.000 0.112 0.112 sympify.py:1() + 107 0.002 0.000 0.109 0.001 _distn_infrastructure.py:1900(__init__) + 1 0.000 0.000 0.107 0.107 rings.py:1() + 17 0.104 0.006 0.105 0.006 {built-in method posix.fork} + 3361 0.005 0.000 0.104 0.000 __init__.py:272(_compile) + 1 0.000 0.000 0.102 0.102 const_fold.py:1() + 352 0.000 0.000 0.099 0.000 __init__.py:225(compile) + 14 0.001 0.000 0.098 0.007 __init__.py:659(add_entry) + 203 0.001 0.000 0.096 0.000 _compiler.py:738(compile) + 197/161 0.001 0.000 0.091 0.001 :1239(exec_module) + 197/161 0.033 0.000 0.091 0.001 {built-in method _imp.exec_dynamic} + 5 0.000 0.000 0.091 0.018 basic.py:1() + 1 0.000 0.000 0.089 0.089 latex.py:1() + 784 0.004 0.000 0.088 0.000 __init__.py:2117(find_on_path) + 1789 0.002 0.000 0.088 0.000 inspect.py:3278(signature) + 1 0.000 0.000 0.088 0.088 graph_drawer.py:1() + 1 0.000 0.000 0.086 0.086 pydot.py:1() + 1789 0.002 0.000 0.086 0.000 inspect.py:3024(from_callable) + 178 0.073 0.000 0.086 0.000 __init__.py:348(namedtuple) +2531/1799 0.015 0.000 0.084 0.000 inspect.py:2428(_signature_from_callable) + 2 0.000 0.000 0.084 0.042 specifiers.py:1() + 1 0.000 0.000 0.084 0.084 assumptions.py:1() + 2 0.000 0.000 0.084 0.042 array.py:1() + 1 0.000 0.000 0.084 0.084 dot_parser.py:1() + 1 0.000 0.000 0.083 0.083 indexed.py:1() + 1 0.000 0.000 0.083 0.083 facts.py:405(__init__) + 114 0.000 0.000 0.081 0.001 dataclasses.py:1219(wrap) + 114 0.006 0.000 0.081 0.001 dataclasses.py:884(_process_class) + 2492 0.008 0.000 0.079 0.000 :1127(get_data) + 389 0.029 0.000 0.075 0.000 doccer.py:13(docformat) + 76764 0.039 0.000 0.074 0.000 {built-in method builtins.getattr} + 10 0.000 0.000 0.074 0.007 linear.py:1() + 126 0.002 0.000 0.072 0.001 _distn_infrastructure.py:755(_construct_doc) + 2705 0.014 0.000 0.072 0.000 :493(_init_module_attrs) + 29 0.001 0.000 0.072 0.002 typing.py:2858(__new__) + 1 0.000 0.000 0.071 0.071 frame.py:1() + 32 0.000 0.000 0.071 0.002 typing.py:2839(_make_nmtuple) + 4 0.000 0.000 0.070 0.018 errors.py:1() + 2 0.000 0.000 0.070 0.035 tags.py:1() + 1 0.000 0.000 0.068 0.068 compute.py:1() + 1 0.000 0.000 0.068 0.068 _bvp.py:1() + 114 0.000 0.000 0.068 0.001 dataclasses.py:1202(dataclass) + 1 0.000 0.000 0.067 0.067 _diagnostic.py:1() + 2 0.000 0.000 0.067 0.033 memory.py:1() + 9 0.001 0.000 0.066 0.007 core.py:1() + 1 0.000 0.000 0.066 0.066 _quadrature.py:1() + 424 0.030 0.000 0.066 0.000 assumptions.py:596(__init__) + 2 0.000 0.000 0.065 0.033 _musllinux.py:1() + 1 0.000 0.000 0.063 0.063 _infra.py:1() + 203 0.001 0.000 0.062 0.000 _parser.py:970(parse) + 1544 0.004 0.000 0.062 0.000 __init__.py:2189(distributions_from_metadata) +2797/2717 0.003 0.000 0.060 0.000 __init__.py:89(find_spec) + 689/203 0.004 0.000 0.060 0.000 _parser.py:447(_parse_sub) + 1 0.000 0.000 0.060 0.060 _store_backends.py:1() + 1059/218 0.023 0.000 0.059 0.000 _parser.py:507(_parse) + 85 0.000 0.000 0.057 0.001 dispatcher.py:178(add) + 1 0.001 0.001 0.057 0.057 compute.py:299(_make_global_functions) + 85 0.000 0.000 0.057 0.001 dispatcher.py:222(reorder) + 1 0.000 0.000 0.057 0.057 formatter.py:1() + 4984 0.020 0.000 0.056 0.000 :437(cache_from_source) + 23964 0.023 0.000 0.056 0.000 :126(_path_join) + 1 0.000 0.000 0.056 0.056 backports.py:1() + 2/1 0.000 0.000 0.056 0.056 __init__.py:99(spec_for_distutils) + 449 0.001 0.000 0.056 0.000 __init__.py:80(decomposition_decorator) + 246 0.001 0.000 0.056 0.000 compute.py:283(_wrap_function) + 1 0.000 0.000 0.055 0.055 _orthogonal.py:1() + 225 0.002 0.000 0.053 0.000 function.py:162(__init__) + 1 0.000 0.000 0.052 0.052 __init__.py:617(_build_master) + 1 0.000 0.000 0.052 0.052 __init__.py:603(__init__) + 1 0.008 0.008 0.051 0.051 facts.py:134(apply_beta_to_alpha_route) + 1328 0.017 0.000 0.050 0.000 inspect.py:2333(_signature_from_function) + 1643 0.007 0.000 0.048 0.000 textwrap.py:419(dedent) + 1 0.000 0.000 0.048 0.048 _jit_internal.py:1() + 550 0.001 0.000 0.047 0.000 _pytree.py:194(tree_map) + 147 0.000 0.000 0.046 0.000 typing.py:1611(__getitem__) + 86 0.000 0.000 0.045 0.001 typing.py:1625(__getitem_inner__) + 387 0.003 0.000 0.045 0.000 dataclasses.py:413(_create_fn) + 2704 0.001 0.000 0.045 0.000 typing.py:159(_type_convert) + 199 0.044 0.000 0.044 0.000 {built-in method builtins.compile} + 662/478 0.001 0.000 0.044 0.000 typing.py:476(__getitem__) + 772 0.004 0.000 0.044 0.000 __init__.py:2653(from_location) + 161 0.000 0.000 0.043 0.000 typing.py:838(__init__) + 3 0.000 0.000 0.043 0.014 numbers.py:1() + 12906 0.006 0.000 0.043 0.000 :140(_path_stat) +2591/2546 0.003 0.000 0.042 0.000 {built-in method builtins.any} + 5181 0.004 0.000 0.042 0.000 :392(cached) + 14984 0.041 0.000 0.041 0.000 {built-in method posix.stat} + 216 0.000 0.000 0.041 0.000 typing.py:1634() + 1 0.000 0.000 0.041 0.041 _decorators.py:1() + 478 0.004 0.000 0.040 0.000 typing.py:653(Union) + 550 0.000 0.000 0.039 0.000 _pytree.py:196() + 1 0.000 0.000 0.039 0.039 point.py:1() + 592 0.004 0.000 0.039 0.000 __init__.py:31(_add_op_to_registry) + 2 0.000 0.000 0.038 0.019 expr.py:1() + 2689 0.004 0.000 0.038 0.000 :567(_get_cached) + 246 0.003 0.000 0.038 0.000 compute.py:113(_decorate_compute_function) + 1 0.000 0.000 0.038 0.038 entity.py:1() + 454 0.000 0.000 0.038 0.000 __init__.py:127(register) + 2589 0.037 0.000 0.037 0.000 {method 'read' of '_io.BufferedReader' objects} + 13660 0.012 0.000 0.037 0.000 facts.py:204() + 2 0.000 0.000 0.037 0.019 quantize.py:1() + 1 0.000 0.000 0.036 0.036 _sketches.py:1() + 1 0.000 0.000 0.036 0.036 partfrac.py:1() + 1 0.000 0.000 0.036 0.036 decorator.py:60(xthreaded) + 1 0.000 0.000 0.036 0.036 decorator.py:11(threaded_factory) + 13 0.000 0.000 0.036 0.003 common.py:1() + 2 0.000 0.000 0.034 0.017 dist.py:1() + 387 0.000 0.000 0.033 0.000 __init__.py:3353() + 1464 0.006 0.000 0.033 0.000 _ops.py:447(__getattr__) + 1 0.000 0.000 0.033 0.033 pyarrow.py:1() + 386 0.001 0.000 0.033 0.000 __init__.py:2862(activate) + 385 0.004 0.000 0.032 0.000 _util.py:308(getfullargspec_no_self) +207945/207596 0.027 0.000 0.032 0.000 {built-in method builtins.isinstance} + 42 0.000 0.000 0.032 0.001 dispatcher.py:147(_) + 1 0.000 0.000 0.032 0.032 _discrete_distns.py:1() + 2908 0.005 0.000 0.031 0.000 :169(__enter__) + 203 0.001 0.000 0.031 0.000 _compiler.py:571(_code) + 2445 0.022 0.000 0.031 0.000 typing.py:168(_type_check) + 1 0.004 0.004 0.031 0.031 _meta_registrations.py:2649(activate_meta) + 1 0.000 0.000 0.031 0.031 mul.py:1() + 1 0.000 0.000 0.029 0.029 _shgo.py:1() + 1184 0.006 0.000 0.029 0.000 typing.py:1346(__init__) + 85 0.000 0.000 0.029 0.000 conflict.py:24(ambiguities) + 85 0.006 0.000 0.029 0.000 conflict.py:27() + 85 0.000 0.000 0.028 0.000 compute.py:106(_scrape_options_class_doc) + 85 0.000 0.000 0.028 0.000 docscrape.py:146(__init__) + 1 0.000 0.000 0.028 0.028 parallel.py:1() + 2 0.000 0.000 0.028 0.014 fake_quantize.py:1() + 85 0.001 0.000 0.028 0.000 conflict.py:56(ordering) + 1 0.000 0.000 0.027 0.027 ask.py:1() + 23964 0.021 0.000 0.027 0.000 :128() + 34 0.000 0.000 0.027 0.001 core.py:58(_) + 2 0.000 0.000 0.027 0.013 observer.py:1() + 1 0.000 0.000 0.027 0.027 hub.py:1() + 1 0.000 0.000 0.027 0.027 _parallel_backends.py:1() + 2492 0.026 0.000 0.026 0.000 {built-in method io.open_code} + 1 0.000 0.000 0.026 0.026 ask.py:21(AssumptionKeys) + 184 0.001 0.000 0.026 0.000 typing.py:697(Optional) + 55 0.026 0.000 0.026 0.000 decorator.py:225(memoize_property) + 5460 0.004 0.000 0.026 0.000 :159(_path_isfile) + 1 0.000 0.000 0.026 0.026 distributed_c10d.py:1() + 8 0.000 0.000 0.025 0.003 process_executor.py:1069(_start_executor_manager_thread) + 1 0.000 0.000 0.025 0.025 ctx_fp.py:1() + 772 0.001 0.000 0.025 0.000 __init__.py:2634(__init__) + 1 0.000 0.000 0.025 0.025 facts.py:94(deduce_alpha_implications) + 1 0.000 0.000 0.024 0.024 immutable.py:1() + 2 0.000 0.000 0.024 0.012 pool.py:1() + 1411 0.006 0.000 0.024 0.000 library.py:71(impl) + 1756/203 0.010 0.000 0.024 0.000 _compiler.py:37(_compile) + 6118 0.005 0.000 0.024 0.000 :150(_path_is_mode_type) + 1 0.000 0.000 0.024 0.024 threading.py:938(start) + 1 0.005 0.005 0.024 0.024 {built-in method torch._C._initExtension} + 1 0.000 0.000 0.024 0.024 threading.py:604(wait) + 778 0.004 0.000 0.024 0.000 _ops.py:553(__getattr__) + 5888 0.015 0.000 0.024 0.000 :179(_get_module_lock) + 894 0.001 0.000 0.023 0.000 {built-in method builtins.next} + 4 0.000 0.000 0.023 0.006 random.py:1() + 1 0.000 0.000 0.023 0.023 polytools.py:1() + 1 0.009 0.009 0.023 0.023 facts.py:74(transitive_closure) + 3213 0.013 0.000 0.023 0.000 functools.py:35(update_wrapper) + 856 0.001 0.000 0.023 0.000 __init__.py:1392(safe_version) + 1 0.000 0.000 0.023 0.023 _memmapping_reducer.py:1() + 2980 0.005 0.000 0.023 0.000 :216(_lock_unlock_module) + 1 0.000 0.000 0.023 0.023 ctx_base.py:1() + 114 0.001 0.000 0.022 0.000 dataclasses.py:528(_init_fn) + 26 0.000 0.000 0.022 0.001 _jit_internal.py:847(_check_overload_body) + 397 0.014 0.000 0.022 0.000 doccer.py:180(indentcount_lines) + 26 0.000 0.000 0.022 0.001 _sources.py:119(parse_def) + 4631 0.022 0.000 0.022 0.000 {method 'sub' of 're.Pattern' objects} +24461/24389 0.013 0.000 0.022 0.000 logic.py:403(__new__) + 2692 0.005 0.000 0.022 0.000 :1599(_get_spec) + 126 0.001 0.000 0.022 0.000 _distn_infrastructure.py:674(_construct_argparser) + 85 0.003 0.000 0.022 0.000 conflict.py:62() + 32 0.001 0.000 0.021 0.001 reduction.py:201(dump) + 5856 0.012 0.000 0.021 0.000 inspect.py:2686(__init__) + 11 0.000 0.000 0.021 0.002 version.py:1() + 1 0.000 0.000 0.021 0.021 proxy_tensor.py:1() + 2 0.000 0.000 0.021 0.010 intersection.py:1() + 1 0.000 0.000 0.020 0.020 request.py:1() + 5598 0.002 0.000 0.020 0.000 conflict.py:19(ambiguous) +17167/16870 0.014 0.000 0.020 0.000 {built-in method __new__ of type object at 0x860e20} + 1555 0.001 0.000 0.020 0.000 typing.py:689() + 3 0.000 0.000 0.020 0.007 _parser.py:1() + 386 0.001 0.000 0.020 0.000 __init__.py:2372(fixup_namespace_packages) + 360 0.000 0.000 0.020 0.000 __init__.py:2258(_handle_ns) + 1 0.000 0.000 0.020 0.020 iterables.py:1() + 16 0.000 0.000 0.020 0.001 _axis_nan_policy.py:371(axis_nan_policy_decorator) +42938/42695 0.015 0.000 0.020 0.000 logic.py:236(__hash__) + 4984 0.008 0.000 0.020 0.000 :132(_path_split) + 19 0.000 0.000 0.020 0.001 _distn_infrastructure.py:3180(__init__) + 20 0.000 0.000 0.020 0.001 _jit_internal.py:875(_overload) + 2 0.000 0.000 0.019 0.010 python.py:1() +44196/44171 0.015 0.000 0.019 0.000 {method 'join' of 'str' objects} + 1 0.000 0.000 0.019 0.019 multiarray.py:1() + 26 0.000 0.000 0.019 0.001 _sources.py:11(get_source_lines_and_file) + 5 0.000 0.000 0.019 0.004 graph.py:1() + 3 0.000 0.000 0.019 0.006 serialization.py:1() + 2 0.000 0.000 0.019 0.010 overrides.py:1() + 12018 0.004 0.000 0.019 0.000 conflict.py:43(edge) + 2 0.000 0.000 0.019 0.009 decorator.py:1() + 1 0.000 0.000 0.019 0.019 datapipe.py:1() + 26 0.000 0.000 0.019 0.001 inspect.py:1235(getsourcelines) + 1112 0.018 0.000 0.018 0.000 {built-in method posix.listdir} + 121 0.001 0.000 0.018 0.000 __init__.py:259(_make_prim) + 1 0.000 0.000 0.018 0.018 mock.py:1() + 2 0.000 0.000 0.018 0.009 _tokenizer.py:1() + 225 0.001 0.000 0.018 0.000 function.py:122(arity) + 126 0.000 0.000 0.017 0.000 _distn_infrastructure.py:660(_attach_argparser_methods) + 1 0.000 0.000 0.017 0.017 reusable_executor.py:1() + 778 0.017 0.000 0.017 0.000 {built-in method torch._C._jit_get_operation} + 1 0.000 0.000 0.017 0.017 symbolic_opset11.py:1() + 1 0.000 0.000 0.017 0.017 graph_module.py:1() + 5598 0.007 0.000 0.017 0.000 conflict.py:12(consistent) + 2625 0.012 0.000 0.017 0.000 inspect.py:2972(__init__) + 1 0.000 0.000 0.017 0.017 bsplines.py:1() + 1 0.000 0.000 0.017 0.017 process_executor.py:1() + 2566 0.002 0.000 0.017 0.000 __init__.py:178(sub) + 1 0.000 0.000 0.017 0.017 constructor.py:1() + 1 0.000 0.000 0.017 0.017 client.py:1() + 1 0.000 0.000 0.016 0.016 runtests.py:1() + 107 0.001 0.000 0.016 0.000 _distn_infrastructure.py:1966(_attach_methods) + 1464 0.015 0.000 0.016 0.000 _ops.py:239(__init__) + 2 0.000 0.000 0.016 0.008 interval.py:1() + 16 0.000 0.000 0.016 0.001 _docscrape.py:563(__init__) + 2692 0.011 0.000 0.016 0.000 :778(spec_from_file_location) + 4 0.000 0.000 0.016 0.004 function.py:1() + 85 0.001 0.000 0.016 0.000 docscrape.py:384(_parse) + 257 0.001 0.000 0.016 0.000 _decorators.py:391(decorator) + 5888 0.013 0.000 0.016 0.000 :100(acquire) + 14399 0.010 0.000 0.016 0.000 conflict.py:7(supercedes) + 1 0.000 0.000 0.015 0.015 power.py:1() + 731 0.001 0.000 0.015 0.000 __init__.py:2851(_get_metadata) + 26 0.001 0.000 0.015 0.001 inspect.py:1224(getblock) + 856 0.007 0.000 0.015 0.000 version.py:184(__init__) + 55 0.001 0.000 0.015 0.000 __init__.py:388(inner) + 11 0.000 0.000 0.015 0.001 base.py:1() + 1 0.000 0.000 0.015 0.015 slice.py:1() + 246 0.002 0.000 0.015 0.000 compute.py:260(_make_signature) + 1643 0.014 0.000 0.014 0.000 {method 'findall' of 're.Pattern' objects} + 8698 0.007 0.000 0.014 0.000 typing.py:1290(__setattr__) + 161 0.000 0.000 0.014 0.000 _decorators.py:508(__call__) + 3848 0.003 0.000 0.014 0.000 :1421(_path_importer_cache) +136936/135024 0.013 0.000 0.014 0.000 {built-in method builtins.len} + 1 0.000 0.000 0.014 0.014 _laplacian.py:1() + 222 0.002 0.000 0.014 0.000 wrappers.py:191(_out_wrapper) + 16 0.000 0.000 0.014 0.001 _docscrape.py:140(__init__) + 1 0.000 0.000 0.014 0.014 matexpr.py:1() + 1 0.000 0.000 0.014 0.014 data_parallel.py:1() + 1 0.000 0.000 0.014 0.014 nvfuser_prims.py:1() + 32 0.000 0.000 0.013 0.000 cloudpickle_fast.py:630(dump) + 21253 0.006 0.000 0.013 0.000 {built-in method builtins.all} + 1 0.000 0.000 0.013 0.013 scatter_gather.py:1() + 1 0.000 0.000 0.013 0.013 _geometric_slerp.py:1() + 1319 0.003 0.000 0.013 0.000 tokenize.py:433(_tokenize) + 32 0.004 0.000 0.013 0.000 {function CloudPickler.dump at 0x7fd61751bce0} + 1 0.000 0.000 0.013 0.013 __init__.py:1001(version) + 2 0.000 0.000 0.013 0.007 series.py:1() + 2 0.000 0.000 0.013 0.007 _functions.py:1() + 2 0.000 0.000 0.013 0.007 indexing.py:1() + 1 0.000 0.000 0.013 0.013 symbolic_caffe2.py:1() + 1411 0.013 0.000 0.013 0.000 {built-in method torch._C.impl} + 2 0.000 0.000 0.013 0.007 requirements.py:1() + 5888 0.011 0.000 0.013 0.000 :125(release) + 1 0.000 0.000 0.013 0.013 __init__.py:159(_load_global_deps) + 2 0.000 0.000 0.013 0.006 __init__.py:342(__init__) + 5860 0.008 0.000 0.013 0.000 :71(join) + 129628 0.013 0.000 0.013 0.000 {method 'append' of 'list' objects} + 2 0.013 0.006 0.013 0.006 {built-in method _ctypes.dlopen} + 511 0.001 0.000 0.013 0.000 typing.py:1565(copy_with) + 323 0.001 0.000 0.013 0.000 typing.py:1556(__getitem__) + 114 0.001 0.000 0.013 0.000 dataclasses.py:588(_repr_fn) + 126 0.000 0.000 0.012 0.000 dataclasses.py:624(_cmp_fn) + 1 0.000 0.000 0.012 0.012 _code_flow.py:1() + 4 0.000 0.000 0.012 0.003 _base.py:1() + 1 0.001 0.001 0.012 0.012 nvfuser_prims.py:806(register_nvprims) + 1 0.000 0.000 0.012 0.012 __init__.py:975(distribution) + 1 0.000 0.000 0.012 0.012 __init__.py:549(from_name) + 1 0.000 0.000 0.012 0.012 py3k.py:1() + 8 0.000 0.000 0.012 0.002 __init__.py:914() + 1 0.000 0.000 0.012 0.012 describe.py:1() + 1 0.000 0.000 0.012 0.012 node.py:1() + 80 0.002 0.000 0.012 0.000 enum.py:496(__new__) + 7 0.000 0.000 0.012 0.002 __init__.py:812(search) + 17 0.000 0.000 0.012 0.001 _functools.py:75(wrapper) + 126 0.001 0.000 0.012 0.000 _distn_infrastructure.py:608(__init__) + 1 0.000 0.000 0.012 0.012 products.py:1() + 1 0.000 0.000 0.012 0.012 setupcfg.py:1() + 7 0.000 0.000 0.012 0.002 __init__.py:821(lookup) + 7 0.002 0.000 0.012 0.002 __init__.py:827(__init__) + 1 0.000 0.000 0.012 0.012 parallel.py:772(_initialize_backend) + 2 0.000 0.000 0.012 0.006 distance.py:1() + 1 0.000 0.000 0.012 0.012 _parallel_backends.py:498(configure) + 78 0.001 0.000 0.012 0.000 _decorators.py:292(decorate) + 1 0.000 0.000 0.012 0.012 _minimize.py:1() + 392 0.001 0.000 0.012 0.000 :105(__new__) + 36 0.000 0.000 0.012 0.000 __init__.py:893(inner) + 6 0.000 0.000 0.012 0.002 rnn.py:1() + 1 0.000 0.000 0.012 0.012 _thread_flow.py:1() + 1 0.000 0.000 0.012 0.012 executor.py:19(get_memmapping_executor) + 1 0.000 0.000 0.012 0.012 executor.py:25(get_memmapping_executor) + 3838/101 0.006 0.000 0.011 0.000 copy.py:128(deepcopy) + 5478 0.005 0.000 0.011 0.000 {built-in method builtins.max} + 6 0.000 0.000 0.011 0.002 conv.py:1() + 3 0.000 0.000 0.011 0.004 profiler.py:1() + 3 0.000 0.000 0.011 0.004 datetimes.py:1() + 16723 0.006 0.000 0.011 0.000 _parser.py:252(get) + 1 0.000 0.000 0.011 0.011 union.py:1() + 3 0.000 0.000 0.011 0.004 categorical.py:1() + 84 0.000 0.000 0.011 0.000 __init__.py:3069(_reload_version) + 202/101 0.002 0.000 0.011 0.000 copy.py:227(_deepcopy_dict) + 59741 0.011 0.000 0.011 0.000 {method 'startswith' of 'str' objects} + 84 0.000 0.000 0.011 0.000 __init__.py:2856(_get_version) + 17 0.001 0.000 0.011 0.001 context.py:257(BoundedSemaphore) + 2908 0.003 0.000 0.011 0.000 :173(__exit__) + 84 0.000 0.000 0.011 0.000 __init__.py:2614(_version_from_file) + 19 0.000 0.000 0.011 0.001 _distn_infrastructure.py:3245(_construct_docstrings) + 320 0.002 0.000 0.011 0.000 :1408(_path_hooks) + 180 0.010 0.000 0.011 0.000 {built-in method builtins.eval} + 1 0.000 0.000 0.010 0.010 _conversion.py:1() + 1 0.000 0.000 0.010 0.010 _hypotests.py:1() + 8 0.000 0.000 0.010 0.001 __init__.py:51(create_module) + 16 0.000 0.000 0.010 0.001 _docscrape.py:371(_parse) + 8 0.000 0.000 0.010 0.001 __init__.py:29(load_module) + 2492 0.006 0.000 0.010 0.000 :642(_classify_pyc) + 33 0.000 0.000 0.010 0.000 core.py:1280(search_string) + 1 0.000 0.000 0.010 0.010 doctest.py:1() + 33 0.000 0.000 0.010 0.000 core.py:1311() + 1 0.000 0.000 0.010 0.010 _script.py:1() + 22 0.004 0.000 0.010 0.000 synchronize.py:57(__init__) + 66 0.001 0.000 0.010 0.000 core.py:1145(scan_string) + 1184 0.002 0.000 0.010 0.000 typing.py:1251(__init__) + 9073 0.010 0.000 0.010 0.000 {method 'splitlines' of 'str' objects} + 51 0.000 0.000 0.010 0.000 nvfuser_prims.py:144(_assert_nvfuser_op_exists) + 1 0.000 0.000 0.010 0.010 summations.py:1() + 93/83 0.000 0.000 0.010 0.000 cache.py:67(wrapper) + 97 0.001 0.000 0.010 0.000 __init__.py:427(_make_inplace) + 1 0.000 0.000 0.010 0.010 _thread_flow_location.py:1() + 6294 0.005 0.000 0.010 0.000 enum.py:685(__call__) + 1 0.000 0.000 0.010 0.010 _morestats.py:1() + 26498 0.009 0.000 0.010 0.000 {built-in method builtins.setattr} + 1 0.000 0.000 0.010 0.010 base_events.py:1() + 17 0.000 0.000 0.010 0.001 synchronize.py:164(__init__) + 4 0.000 0.000 0.010 0.002 numeric.py:1() + 321 0.001 0.000 0.010 0.000 :1655(_fill_cache) + 2492 0.003 0.000 0.010 0.000 :1146(path_stats) + 314 0.001 0.000 0.010 0.000 overrides.py:170(decorator) + 1 0.000 0.000 0.009 0.009 numbers.py:329(tribonacci) + 1 0.000 0.000 0.009 0.009 expr.py:230(__pow__) + 1 0.000 0.000 0.009 0.009 decorators.py:224(_func) + 1 0.000 0.000 0.009 0.009 decorators.py:99(binary_op_wrapper) + 1 0.000 0.000 0.009 0.009 expr.py:225(_pow) + 2 0.000 0.000 0.009 0.005 _optional.py:90(import_optional_dependency) + 7476 0.006 0.000 0.009 0.000 :84(_unpack_uint32) + 2/1 0.000 0.000 0.009 0.009 power.py:282(__new__) + 1 0.000 0.000 0.009 0.009 error_functions.py:1() + 2492 0.004 0.000 0.009 0.000 :675(_validate_timestamp_pyc) + 188 0.001 0.000 0.009 0.000 typing.py:1640(__getitem__) + 1 0.000 0.000 0.009 0.009 arraylike.py:1() + 1 0.000 0.000 0.009 0.009 _external_properties.py:1() + 2038 0.009 0.000 0.009 0.000 {built-in method torch._C._dispatch_has_kernel_for_dispatch_key} + 2 0.000 0.000 0.009 0.004 specifiers.py:107(Specifier) +77542/76622 0.008 0.000 0.009 0.000 {built-in method builtins.hash} + 24 0.000 0.000 0.009 0.000 resource_tracker.py:176(register) + 1 0.000 0.000 0.009 0.009 _pickle.py:1() + 3 0.000 0.000 0.009 0.003 concat.py:1() + 2255/567 0.004 0.000 0.009 0.000 core.py:776(_parseNoCache) + 2 0.000 0.000 0.009 0.004 exponential.py:1() + 57 0.001 0.000 0.009 0.000 resource_tracker.py:91(ensure_running) + 1 0.000 0.000 0.009 0.009 common.py:8(pyparsing_common) + 2 0.000 0.000 0.009 0.004 helpers.py:1() + 772 0.004 0.000 0.009 0.000 __init__.py:741(add) + 361 0.002 0.000 0.009 0.000 {built-in method builtins.sorted} + 1 0.000 0.000 0.009 0.009 boolean.py:1() + 2 0.000 0.000 0.008 0.004 markers.py:1() + 2268 0.003 0.000 0.008 0.000 __init__.py:2138(dist_factory) + 1 0.000 0.000 0.008 0.008 _pslinux.py:1() + 618 0.003 0.000 0.008 0.000 dataclasses.py:723(_get_field) + 9692 0.005 0.000 0.008 0.000 typing.py:1238(_is_dunder) + 3 0.000 0.000 0.008 0.003 reductions.py:1() + 2 0.000 0.000 0.008 0.004 hashing.py:1() + 189 0.000 0.000 0.008 0.000 library.py:50(define) + 610 0.006 0.000 0.008 0.000 _compiler.py:241(_optimize_charset) + 9048 0.008 0.000 0.008 0.000 {method 'expandtabs' of 'str' objects} + 732 0.003 0.000 0.008 0.000 inspect.py:2039(_signature_bound_method) + 623/567 0.001 0.000 0.008 0.000 core.py:3861(parseImpl) + 1 0.000 0.000 0.008 0.008 override.py:1() + 1464 0.008 0.000 0.008 0.000 {built-in method torch._C._get_operation_overload} + 1 0.000 0.000 0.008 0.008 __init__.py:68(do_override) + 2 0.000 0.000 0.008 0.004 _memmapping_reducer.py:541(register_new_context) + 189 0.008 0.000 0.008 0.000 {built-in method torch._C.define} + 1 0.000 0.000 0.008 0.008 __init__.py:51(ensure_local_distutils) + 1 0.000 0.000 0.008 0.008 _memory_profiler.py:1() + 1 0.000 0.000 0.008 0.008 masked.py:1() + 1 0.000 0.000 0.008 0.008 _memmapping_reducer.py:522(__init__) + 467 0.000 0.000 0.008 0.000 __init__.py:1508(has_metadata) + 1 0.000 0.000 0.008 0.008 _memmapping_reducer.py:537(set_current_context) + 1 0.000 0.000 0.008 0.008 _rotation_groups.py:1() + 1 0.000 0.000 0.008 0.008 trigonometric.py:1() + 3 0.000 0.000 0.008 0.003 dense.py:1() + 1 0.000 0.000 0.008 0.008 find_first_use_of_broken_modules.py:1() + 1 0.000 0.000 0.008 0.008 _linprog.py:1() + 2 0.000 0.000 0.008 0.004 _memmapping_reducer.py:587(register_folder_finalizer) + 2623 0.008 0.000 0.008 0.000 {method '__exit__' of '_io._IOBase' objects} + 59168 0.007 0.000 0.007 0.000 {method 'rstrip' of 'str' objects} + 2789 0.003 0.000 0.007 0.000 :920(find_spec) + 1 0.000 0.000 0.007 0.007 pathlib.py:1() + 32 0.002 0.000 0.007 0.000 reduction.py:152(__init__) + 1 0.000 0.000 0.007 0.007 tokenize.py:99(_compile) + 85 0.001 0.000 0.007 0.000 docscrape.py:228(_parse_param_list) + 257 0.001 0.000 0.007 0.000 _decorators.py:411() + 1944 0.004 0.000 0.007 0.000 inspect.py:735(unwrap) + 1 0.000 0.000 0.007 0.007 ewm.py:1() + 23571 0.007 0.000 0.007 0.000 :244(_verbose_message) + 2 0.000 0.000 0.007 0.004 parser.py:1() + 1 0.000 0.000 0.007 0.007 resource_tracker.py:351(spawnv_passfds) + 1 0.000 0.000 0.007 0.007 matmul.py:1() + 27 0.000 0.000 0.007 0.000 singleton.py:171(__init__) + 1 0.000 0.000 0.007 0.007 _root.py:1() + 11443 0.005 0.000 0.007 0.000 _parser.py:162(__getitem__) + 1 0.000 0.000 0.007 0.007 array_ops.py:1() + 1 0.000 0.000 0.007 0.007 comparison.py:1() + 1244 0.002 0.000 0.007 0.000 typing.py:245(_collect_parameters) + 1 0.000 0.000 0.007 0.007 generic.py:218(NDFrame) + 47 0.000 0.000 0.007 0.000 __init__.py:424(_make_elementwise_unary_prim) + 1 0.000 0.000 0.007 0.007 symbol.py:1() + 386 0.000 0.000 0.007 0.000 __init__.py:795(joinpath) + 1 0.000 0.000 0.007 0.007 feedparser.py:1() + 856 0.003 0.000 0.007 0.000 version.py:230(__str__) + 1 0.000 0.000 0.007 0.007 simplify.py:1() + 134 0.000 0.000 0.007 0.000 wrappers.py:105(__call__) + 9968 0.004 0.000 0.007 0.000 :134() + 2 0.000 0.000 0.007 0.003 reduction.py:1() + 559 0.000 0.000 0.007 0.000 __init__.py:1505(_get_metadata_path) + 1 0.000 0.000 0.007 0.007 _multivariate.py:1() + 27722 0.006 0.000 0.006 0.000 assumptions.py:469(as_property) + 386 0.000 0.000 0.006 0.000 pathlib.py:868(__new__) + 2084/554 0.005 0.000 0.006 0.000 _parser.py:172(getwidth) + 1 0.000 0.000 0.006 0.006 index_tricks.py:1() + 2851 0.005 0.000 0.006 0.000 :198(cb) + 4 0.000 0.000 0.006 0.002 context.py:1() + 528 0.001 0.000 0.006 0.000 cloudpickle_fast.py:691(reducer_override) + 2 0.000 0.000 0.006 0.003 _typing.py:1() + 11234 0.004 0.000 0.006 0.000 :1030(__exit__) + 3 0.000 0.000 0.006 0.002 accessor.py:1() + 559 0.001 0.000 0.006 0.000 __init__.py:1589(_fn) + 19382 0.006 0.000 0.006 0.000 _parser.py:231(__next) + 1 0.000 0.000 0.006 0.006 package_exporter.py:1() + 12256 0.004 0.000 0.006 0.000 conflict.py:15() + 2851 0.003 0.000 0.006 0.000 :71(__init__) + 11234 0.005 0.000 0.006 0.000 :1026(__enter__) + 387 0.000 0.000 0.006 0.000 pathlib.py:504(_from_parts) + 1 0.000 0.000 0.006 0.006 frame.py:475(DataFrame) + 1 0.000 0.000 0.006 0.006 net_min_base.py:1() + 1 0.000 0.000 0.006 0.006 groupby.py:1() + 35428 0.006 0.000 0.006 0.000 {method 'get' of 'dict' objects} + 2 0.000 0.000 0.006 0.003 shape_base.py:1() + 15 0.000 0.000 0.006 0.000 core.py:2678(__init__) + 1 0.000 0.000 0.006 0.006 _resampling.py:1() + 1 0.000 0.000 0.006 0.006 minimize_trustregion_constr.py:1() + 1 0.000 0.000 0.006 0.006 minpoly.py:1() + 3 0.000 0.000 0.006 0.002 _basic.py:1() + 321 0.001 0.000 0.006 0.000 :1696(path_hook_for_FileFinder) + 203 0.002 0.000 0.006 0.000 _compiler.py:509(_compile_info) + 2280 0.001 0.000 0.006 0.000 __init__.py:2128() + 1 0.000 0.000 0.006 0.006 platform.py:1() + 13 0.000 0.000 0.006 0.000 enum.py:890(_convert_) + 1 0.000 0.000 0.006 0.006 _utils_internal.py:1() + 1 0.000 0.000 0.006 0.006 complexes.py:1() + 2 0.000 0.000 0.006 0.003 datetimelike.py:1() + 1 0.000 0.000 0.006 0.006 BIF.py:211(get_states) + 20 0.003 0.000 0.006 0.000 enum.py:1657(convert_class) + 1 0.000 0.000 0.006 0.006 ssl.py:1() + 394 0.001 0.000 0.006 0.000 pathlib.py:484(_parse_args) + 826 0.001 0.000 0.006 0.000 inspect.py:3040(replace) + 1 0.001 0.001 0.006 0.006 symbolic_opset9.py:1() + 1 0.000 0.000 0.006 0.006 _tool.py:1() + 6 0.000 0.000 0.006 0.001 linear_relu.py:1() + 1 0.000 0.000 0.006 0.006 pyprojecttoml.py:1() + 1 0.000 0.000 0.006 0.006 _interpolate.py:1() + 1 0.000 0.000 0.006 0.006 _result.py:1() + 2 0.000 0.000 0.006 0.003 expressions.py:1() + 1 0.000 0.000 0.006 0.006 readers.py:1() + 4 0.000 0.000 0.006 0.001 transforms.py:1() + 449 0.001 0.000 0.006 0.000 assumptions.py:449(__init__) + 19251 0.006 0.000 0.006 0.000 {method 'rpartition' of 'str' objects} + 1470 0.003 0.000 0.006 0.000 dataclasses.py:664(_is_type) + 1 0.000 0.000 0.005 0.005 algebraicfield.py:1() + 295 0.003 0.000 0.005 0.000 enum.py:241(__set_name__) + 6083 0.004 0.000 0.005 0.000 :405(parent) + 2 0.000 0.000 0.005 0.003 quantization_mappings.py:1() + 2 0.000 0.000 0.005 0.003 _misc.py:1() + 2 0.000 0.000 0.005 0.003 matrices.py:1() + 1 0.000 0.000 0.005 0.005 nanops.py:1() + 1 0.000 0.000 0.005 0.005 docscrape.py:1() + 7 0.000 0.000 0.005 0.001 exceptions.py:1() + 1 0.000 0.000 0.005 0.005 _optional.py:1() + 1 0.000 0.000 0.005 0.005 tempfile.py:1() + 1 0.000 0.000 0.005 0.005 eval.py:1() + 5902 0.005 0.000 0.005 0.000 {method 'format' of 'str' objects} + 7519 0.005 0.000 0.005 0.000 {method 'replace' of 'str' objects} + 92 0.000 0.000 0.005 0.000 __init__.py:1528(get_metadata_lines) + 284 0.001 0.000 0.005 0.000 overrides.py:88(verify_matching_signatures) + 1 0.000 0.000 0.005 0.005 fft.py:1() + 2 0.000 0.000 0.005 0.003 bessel.py:1() + 2825 0.001 0.000 0.005 0.000 :835(__iter__) + 2 0.000 0.000 0.005 0.003 _matfuncs.py:1() + 1 0.000 0.000 0.005 0.005 _codata.py:1() + 1 0.000 0.000 0.005 0.005 ctx_mp.py:1() + 1 0.000 0.000 0.005 0.005 _dill.py:1() + 49 0.002 0.000 0.005 0.000 util.py:182(_collapse_string_to_ranges) + 1 0.000 0.000 0.005 0.005 _filters.py:1() + 8 0.000 0.000 0.005 0.001 dataclasses.py:1379(make_dataclass) + 628/550 0.001 0.000 0.005 0.000 _pytree.py:143(tree_flatten) + 1 0.000 0.000 0.005 0.005 _apply_pyprojecttoml.py:1() + 9 0.000 0.000 0.005 0.001 core.py:5392(__init__) + 1584 0.002 0.000 0.005 0.000 :674(__getitem__) + 1 0.000 0.000 0.005 0.005 _tensor.py:1() + 1 0.000 0.000 0.005 0.005 _policybase.py:1() + 1 0.000 0.000 0.005 0.005 split_utils.py:1() + 32 0.000 0.000 0.005 0.000 doccer.py:225(decorate) + 1 0.000 0.000 0.005 0.005 _tool_component.py:1() + 16 0.000 0.000 0.005 0.000 traceback.py:220(extract_stack) + 29/8 0.000 0.000 0.005 0.001 core.py:4379(leave_whitespace) + 93 0.000 0.000 0.005 0.000 _docscrape.py:195(_read_to_next_section) + 1 0.000 0.000 0.005 0.005 check.py:1() + 725/695 0.000 0.000 0.005 0.000 core.py:4373(parseImpl) + 4 0.000 0.000 0.005 0.001 eigen.py:1() + 1 0.000 0.000 0.005 0.005 rootoftools.py:1() + 1 0.000 0.000 0.005 0.005 backends.py:1() + 16 0.000 0.000 0.005 0.000 traceback.py:375(extract) + 1 0.000 0.000 0.005 0.005 fromnumeric.py:1() + 16 0.001 0.000 0.005 0.000 traceback.py:397(_extract_from_extended_frame_gen) + 15 0.001 0.000 0.005 0.000 _bunch.py:33(_make_tuple_bunch) + 24438 0.005 0.000 0.005 0.000 {built-in method builtins.min} + 93 0.000 0.000 0.005 0.000 _docscrape.py:206(_read_sections) + 139 0.000 0.000 0.005 0.000 linecache.py:36(getlines) + 1 0.000 0.000 0.005 0.005 polyclasses.py:1() + 508 0.002 0.000 0.005 0.000 enum.py:364(__setitem__) + 1 0.000 0.000 0.005 0.005 parse.py:1() + 1 0.000 0.000 0.005 0.005 limits.py:1() + 194/68 0.000 0.000 0.005 0.000 facts.py:308(process_rule) + 1 0.000 0.000 0.005 0.005 iterative.py:1() + 1328 0.003 0.000 0.005 0.000 inspect.py:167(get_annotations) + 1 0.000 0.000 0.005 0.005 symbolic_helper.py:1() + 1461 0.001 0.000 0.005 0.000 :39(isdir) + 78 0.000 0.000 0.005 0.000 linecache.py:80(updatecache) + 402 0.001 0.000 0.004 0.000 core.py:499(copy) + 341 0.000 0.000 0.004 0.000 _parser.py:94(closegroup) + 1 0.000 0.000 0.004 0.004 _memory_viz.py:1() + 1 0.000 0.000 0.004 0.004 _artifact.py:1() + 1 0.000 0.000 0.004 0.004 _run.py:1() + 1 0.000 0.000 0.004 0.004 graphs.py:1() + 1 0.000 0.000 0.004 0.004 algorithms.py:1() + 2 0.000 0.000 0.004 0.002 methods.py:48(add_flex_arithmetic_methods) + 1 0.000 0.000 0.004 0.004 _recursive.py:1() + 1048 0.004 0.000 0.004 0.000 _ops.py:314(inner) + 786 0.001 0.000 0.004 0.000 _builtins.py:161(_register_builtin) + 9481 0.003 0.000 0.004 0.000 logic.py:228(__new__) + 1 0.000 0.000 0.004 0.004 libmpf.py:1() + 2163/423 0.001 0.000 0.004 0.000 :121(__subclasscheck__) + 6 0.000 0.000 0.004 0.001 _common.py:1() + 1 0.000 0.000 0.004 0.004 gradcheck.py:1() + 1 0.000 0.000 0.004 0.004 traveling_salesman.py:1() + 2 0.000 0.000 0.004 0.002 methods.py:73(_create_methods) + 1649 0.001 0.000 0.004 0.000 :117(__instancecheck__) + 158/68 0.000 0.000 0.004 0.000 facts.py:325(_process_rule) + 394 0.002 0.000 0.004 0.000 pathlib.py:56(parse_parts) + 123 0.002 0.000 0.004 0.000 facts.py:499(deduce_all_facts) + 1 0.000 0.000 0.004 0.004 pretty.py:1() + 408 0.001 0.000 0.004 0.000 deprecation.py:9(wrap) + 4220 0.004 0.000 0.004 0.000 {method 'match' of 're.Pattern' objects} + 1 0.000 0.000 0.004 0.004 ode.py:1() + 2 0.000 0.000 0.004 0.002 utilities.py:1() + 208 0.001 0.000 0.004 0.000 cloudpickle.py:241(_should_pickle_by_reference) + 2163/423 0.004 0.000 0.004 0.000 {built-in method _abc._abc_subclasscheck} + 29 0.000 0.000 0.004 0.000 __init__.py:439(_make_elementwise_binary_prim) + 2492 0.004 0.000 0.004 0.000 {built-in method _imp._fix_co_filename} + 16 0.001 0.000 0.004 0.000 spawn.py:53(get_preparation_data) + 18730 0.004 0.000 0.004 0.000 {method 'endswith' of 'str' objects} + 8404 0.003 0.000 0.004 0.000 :41(_get_sep) + 1 0.000 0.000 0.004 0.004 gamma_functions.py:1() + 1171 0.003 0.000 0.004 0.000 :150(dirname) + 2 0.000 0.000 0.004 0.002 testing.py:1() + 1 0.000 0.000 0.004 0.004 socket.py:1() + 1 0.000 0.000 0.004 0.004 hyper.py:1() + 2 0.000 0.000 0.004 0.002 callable.py:1() + 618 0.001 0.000 0.004 0.000 _inspect.py:96(getargspec) + 85 0.000 0.000 0.004 0.000 docscrape.py:362(_parse_summary) + 1 0.000 0.000 0.004 0.004 headerregistry.py:1() + 1 0.000 0.000 0.004 0.004 hyperbolic.py:1() + 1298 0.004 0.000 0.004 0.000 {built-in method torch._C._dispatch_has_kernel} + 55/8 0.000 0.000 0.004 0.000 core.py:3635(leave_whitespace) + 1 0.000 0.000 0.004 0.004 symbolic_shapes.py:1() + 1 0.000 0.000 0.004 0.004 __init__.py:21(_set_platform_dir_class) + 341/183 0.000 0.000 0.004 0.000 core.py:1857(name) + 2 0.000 0.000 0.004 0.002 distributed.py:1() + 1 0.000 0.000 0.004 0.004 _axis_nan_policy.py:1() + 2 0.000 0.000 0.004 0.002 _pytree.py:1() + 1 0.000 0.000 0.004 0.004 boolalg.py:1() + 1 0.000 0.000 0.004 0.004 autograd_function.py:1() + 403 0.001 0.000 0.004 0.000 copy.py:66(copy) +8869/8802 0.003 0.000 0.004 0.000 logic.py:239(__eq__) + 2492 0.003 0.000 0.004 0.000 :599(_check_name_wrapper) + 1 0.000 0.000 0.004 0.004 polyoptions.py:1() + 321 0.002 0.000 0.004 0.000 :1559(__init__) + 160 0.000 0.000 0.004 0.000 cloudpickle_fast.py:434(_class_reduce) + 1649 0.001 0.000 0.004 0.000 {built-in method _abc._abc_instancecheck} + 285 0.000 0.000 0.004 0.000 traceback.py:316(line) + 290/136 0.000 0.000 0.004 0.000 core.py:1832(default_name) + 1 0.000 0.000 0.004 0.004 lapack.py:1() + 1 0.000 0.000 0.004 0.004 _invocation.py:1() + 544 0.001 0.000 0.004 0.000 registration.py:296(wrapper) + 2 0.000 0.000 0.004 0.002 subprocess.py:1() + 85 0.001 0.000 0.004 0.000 utils.py:25(_toposort) + 386 0.001 0.000 0.004 0.000 __init__.py:2950(insert_on) + 16277 0.003 0.000 0.004 0.000 {built-in method builtins.issubclass} + 559 0.001 0.000 0.004 0.000 __init__.py:1595(_validate_resource_path) + 1 0.000 0.000 0.004 0.004 contract.py:1() + 2 0.000 0.000 0.004 0.002 format.py:1() + 1 0.000 0.000 0.004 0.004 _minpack_py.py:1() + 1 0.000 0.000 0.004 0.004 unix.py:1() + 1 0.000 0.000 0.004 0.004 _constraints.py:1() + 6 0.000 0.000 0.004 0.001 _jit_internal.py:928(_overload_method) + 20368 0.004 0.000 0.004 0.000 {built-in method _imp.acquire_lock} + 10 0.000 0.000 0.004 0.000 util.py:1() + 20368 0.004 0.000 0.004 0.000 {built-in method _imp.release_lock} + 112/55 0.000 0.000 0.004 0.000 core.py:3722(copy) + 4 0.002 0.001 0.003 0.001 _codata.py:1503(parse_constants_2002to2014) + 113 0.000 0.000 0.003 0.000 linecache.py:26(getline) + 2 0.000 0.000 0.003 0.002 pickle.py:1() + 1 0.000 0.000 0.003 0.003 reusable_executor.py:102(get_reusable_executor) + 1 0.000 0.000 0.003 0.003 series.py:216(Series) + 478 0.001 0.000 0.003 0.000 typing.py:311(_remove_dups_flatten) + 375 0.001 0.000 0.003 0.000 docscrape.py:74(read_to_condition) + 1 0.000 0.000 0.003 0.003 singularity_functions.py:1() + 1 0.000 0.000 0.003 0.003 tz.py:1() + 2 0.000 0.000 0.003 0.002 _distributor_init.py:1() + 271 0.000 0.000 0.003 0.000 docscrape.py:558(dedent_lines) + 1 0.000 0.000 0.003 0.003 _pslinux.py:1675(Process) + 1 0.000 0.000 0.003 0.003 reusable_executor.py:91(__init__) + 1 0.000 0.000 0.003 0.003 _location.py:1() + 1 0.000 0.000 0.003 0.003 __init__.py:332(Version) + 1 0.000 0.000 0.003 0.003 process_executor.py:963(__init__) + 101 0.000 0.000 0.003 0.000 _meta_registrations.py:33(wrapper) + 93 0.000 0.000 0.003 0.000 _compatibility.py:10(mark_back_compat) + 17 0.003 0.000 0.003 0.000 {method 'readlines' of '_io._IOBase' objects} + 27880 0.003 0.000 0.003 0.000 {method 'lstrip' of 'str' objects} + 1 0.000 0.000 0.003 0.003 engine.py:1() + 1 0.000 0.000 0.003 0.003 _docscrape.py:1() + 5472 0.003 0.000 0.003 0.000 inspect.py:3019() + 6 0.000 0.000 0.003 0.001 _version.py:1() + 43 0.002 0.000 0.003 0.000 inspect.py:867(cleandoc) + 786 0.001 0.000 0.003 0.000 _builtins.py:128(_get_builtin_table) + 30/9 0.001 0.000 0.003 0.000 core.py:3816(streamline) + 8547 0.003 0.000 0.003 0.000 {method 'rfind' of 'str' objects} + 1 0.000 0.000 0.003 0.003 _symbolic_trace.py:1() + 771 0.000 0.000 0.003 0.000 typing.py:1561() + 7144 0.003 0.000 0.003 0.000 {method 'split' of 'str' objects} + 167 0.001 0.000 0.003 0.000 logic.py:324(__new__) + 413 0.002 0.000 0.003 0.000 decorators.py:744(__call__) + 1 0.000 0.000 0.003 0.003 relational.py:1() + 26 0.000 0.000 0.003 0.000 inspect.py:1055(findsource) + 92 0.000 0.000 0.003 0.000 __init__.py:1515(get_metadata) + 5800 0.003 0.000 0.003 0.000 {method 'update' of 'dict' objects} + 2 0.000 0.000 0.003 0.002 binary.py:1() + 2793 0.002 0.000 0.003 0.000 :748(find_spec) + 1 0.000 0.000 0.003 0.003 cli.py:1() + 30 0.000 0.000 0.003 0.000 _docscrape.py:218(_parse_param_list) + 170 0.000 0.000 0.003 0.000 docscrape.py:216(_read_sections) + 1 0.000 0.000 0.003 0.003 defmatrix.py:1() + 1 0.000 0.000 0.003 0.003 doctest.py:580(DocTestParser) + 1 0.000 0.000 0.003 0.003 _mstats_basic.py:1() + 772 0.000 0.000 0.003 0.000 __init__.py:1384(safe_name) + 18 0.000 0.000 0.003 0.000 core.py:4779(parseImpl) + 39/8 0.000 0.000 0.003 0.000 core.py:3675(streamline) + 19 0.000 0.000 0.003 0.000 _distn_infrastructure.py:3223(_attach_methods) + 15441 0.003 0.000 0.003 0.000 {method 'get' of 'mappingproxy' objects} + 2 0.000 0.000 0.003 0.001 line.py:1() + 1 0.000 0.000 0.003 0.003 numpy_pickle.py:1() + 3 0.000 0.000 0.003 0.001 polynomials.py:1() + 1 0.000 0.000 0.003 0.003 BIF.py:356(get_model) + 3 0.000 0.000 0.003 0.001 _add_newdocs.py:1() + 64 0.000 0.000 0.003 0.000 wrappers.py:285(backwards_not_supported) + 1 0.000 0.000 0.003 0.003 shutil.py:1() + 1 0.000 0.000 0.003 0.003 single.py:1() + 5734 0.003 0.000 0.003 0.000 {built-in method _thread.allocate_lock} + 325 0.001 0.000 0.003 0.000 function_base.py:483(add_newdoc) + 1 0.000 0.000 0.003 0.003 _docscrape.py:112(NumpyDocString) + 1 0.000 0.000 0.003 0.003 dataloader.py:1() + 2 0.000 0.000 0.003 0.001 _manylinux.py:1() + 1 0.000 0.000 0.003 0.003 configparser.py:1() + 328 0.001 0.000 0.003 0.000 _docscrape.py:68(read_to_condition) + 1 0.000 0.000 0.003 0.003 module.py:1() + 22 0.000 0.000 0.003 0.000 synchronize.py:130(_make_name) + 1 0.000 0.000 0.003 0.003 fancysets.py:1() + 1 0.000 0.000 0.003 0.003 worker.py:1() + 48/28 0.000 0.000 0.003 0.000 typing.py:1373(__getitem__) + 3088 0.002 0.000 0.003 0.000 __init__.py:2717(key) + 18669 0.003 0.000 0.003 0.000 {built-in method posix.fspath} + 1 0.000 0.000 0.003 0.003 _linprog_ip.py:1() + 1 0.000 0.000 0.003 0.003 docscrape.py:118(NumpyDocString) + 2 0.000 0.000 0.003 0.001 inverse.py:1() + 2 0.000 0.000 0.003 0.001 core.py:5684(srange) + 5 0.000 0.000 0.003 0.001 _utils.py:1() + 112/55 0.000 0.000 0.003 0.000 core.py:3724() + 2 0.000 0.000 0.003 0.001 pytables.py:1() + 1 0.000 0.000 0.003 0.003 delta_functions.py:1() + 1 0.000 0.000 0.003 0.003 secrets.py:1() + 74 0.000 0.000 0.003 0.000 core.py:1352(__add__) + 1 0.000 0.000 0.003 0.003 integers.py:1() + 1 0.000 0.000 0.003 0.003 _fitpack_py.py:1() + 1 0.000 0.000 0.003 0.003 accessor.py:147(StringMethods) + 321 0.001 0.000 0.003 0.000 :64(__init__) + 2 0.000 0.000 0.003 0.001 core.py:1076(parse_string) + 772 0.001 0.000 0.003 0.000 :117(splitext) + 519 0.000 0.000 0.003 0.000 typing.py:1649() + 78 0.001 0.000 0.003 0.000 _decorators.py:305() + 11 0.000 0.000 0.003 0.000 dataclasses.py:599(_frozen_get_del_attr) + 1 0.000 0.000 0.003 0.003 _linprog_highs.py:1() + 658 0.001 0.000 0.003 0.000 :164(_path_isdir) + 1 0.000 0.000 0.003 0.003 ctx_mp_python.py:1() + 11893 0.003 0.000 0.003 0.000 {method '__exit__' of '_thread.lock' objects} + 1 0.000 0.000 0.003 0.003 sparse_adam.py:1() + 1 0.000 0.000 0.003 0.003 backend.py:1() + 1464 0.003 0.000 0.003 0.000 {built-in method torch._C._get_schema} + 1 0.000 0.000 0.003 0.003 common_types.py:1() + 92 0.000 0.000 0.003 0.000 core.py:3601(__init__) + 1 0.000 0.000 0.003 0.003 _header_value_parser.py:1() + 3012 0.002 0.000 0.003 0.000 :180(_path_isabs) + 252 0.000 0.000 0.003 0.000 _docscrape.py:78(read_to_next_empty_line) + 55 0.000 0.000 0.003 0.000 core.py:3643() + 208 0.001 0.000 0.003 0.000 cloudpickle.py:278(_lookup_module_and_qualname) + 44 0.001 0.000 0.003 0.000 inspect.py:3232(__str__) + 1 0.000 0.000 0.003 0.003 factor_.py:1() + 1 0.000 0.000 0.003 0.003 ElementTree.py:1() + 28 0.000 0.000 0.003 0.000 _basic.py:16(_dispatch) + 23 0.000 0.000 0.003 0.000 core.py:2791(_generateDefaultName) + 1 0.000 0.000 0.003 0.003 _mannwhitneyu.py:1() + 1 0.000 0.000 0.003 0.003 rolling.py:1() + 274 0.001 0.000 0.003 0.000 docscrape.py:174(_is_at_section) + 1 0.000 0.000 0.003 0.003 bernoulli.py:1() + 1 0.000 0.000 0.003 0.003 ivp.py:1() + 24 0.001 0.000 0.003 0.000 tempfile.py:153(__next__) + 28 0.000 0.000 0.003 0.000 _backend.py:174(generate_multimethod) + 1 0.000 0.000 0.002 0.002 BIF.py:133(get_probability_grammar) + 3 0.000 0.000 0.002 0.001 ops.py:1() + 2 0.000 0.000 0.002 0.001 sets.py:1() + 1 0.000 0.000 0.002 0.002 _artifact_change.py:1() + 2 0.000 0.000 0.002 0.001 unary.py:1() + 1 0.000 0.000 0.002 0.002 _optimize.py:1() + 1 0.000 0.000 0.002 0.002 header.py:1() + 7 0.002 0.000 0.002 0.000 _builtins.py:134(register_all) + 28 0.000 0.000 0.002 0.000 core.py:2792(charsAsStr) + 7019 0.002 0.000 0.002 0.000 {method 'add' of 'set' objects} + 3143 0.002 0.000 0.002 0.000 :357(__init__) + 85 0.000 0.000 0.002 0.000 docscrape.py:205(_read_to_next_section) + 1 0.000 0.000 0.002 0.002 BIF.py:193(get_variables) + 2 0.000 0.000 0.002 0.001 __init__.py:181(_lazy_call) + 2 0.000 0.000 0.002 0.001 _ops.py:1() + 2 0.000 0.000 0.002 0.001 traceback.py:213(format_stack) + 6 0.000 0.000 0.002 0.000 enum.py:838(_create_) + 2 0.000 0.000 0.002 0.001 functools.py:1() + 215 0.000 0.000 0.002 0.000 symbolic_helper.py:263(decorator) + 35 0.000 0.000 0.002 0.000 _typing.py:346(__new__) + 5070 0.002 0.000 0.002 0.000 _parser.py:247(match) + 75 0.000 0.000 0.002 0.000 core.py:3783(__init__) + 86 0.000 0.000 0.002 0.000 typing.py:1606(copy_with) + 614 0.002 0.000 0.002 0.000 _inspect.py:65(getargs) + 1 0.000 0.000 0.002 0.002 matpow.py:1() + 1 0.000 0.000 0.002 0.002 _functional.py:1() + 1 0.000 0.000 0.002 0.002 formal.py:1() + 189 0.000 0.000 0.002 0.000 docscrape.py:84(read_to_next_empty_line) + 28 0.000 0.000 0.002 0.000 _backend.py:307(get_defaults) + 7 0.000 0.000 0.002 0.000 ctx_mp_python.py:279(binary_op) + 1 0.000 0.000 0.002 0.002 jit_utils.py:1() + 1 0.000 0.000 0.002 0.002 BIF.py:255(get_parents) + 6288 0.002 0.000 0.002 0.000 enum.py:1091(__new__) + 1 0.000 0.000 0.002 0.002 main.py:1() + 12925 0.002 0.000 0.002 0.000 {method 'group' of 're.Match' objects} + 2493 0.002 0.000 0.002 0.000 :48(_new_module) + 5579 0.002 0.000 0.002 0.000 _ops.py:289(__hash__) + 11 0.000 0.000 0.002 0.000 decorator.py:177(create) + 2 0.000 0.000 0.002 0.001 linalg.py:1() + 1 0.000 0.000 0.002 0.002 _csr.py:1() + 1 0.000 0.000 0.002 0.002 integrals.py:1() + 1 0.000 0.000 0.002 0.002 kl.py:1() + 167/57 0.000 0.000 0.002 0.000 sorting.py:203(ordered) + 90 0.001 0.000 0.002 0.000 cache.py:64(func_wrapper) + 58 0.001 0.000 0.002 0.000 typing.py:1796(__class_getitem__) + 544 0.001 0.000 0.002 0.000 registration.py:213(register) + 283 0.002 0.000 0.002 0.000 core.py:455(__init__) + 11797 0.002 0.000 0.002 0.000 {built-in method _thread.get_ident} + 1 0.000 0.000 0.002 0.002 frontend.py:1() + 1513 0.001 0.000 0.002 0.000 :697(__iter__) + 104 0.001 0.000 0.002 0.000 typing.py:1012(__init__) + 14 0.000 0.000 0.002 0.000 __init__.py:413(flex_arith_method_FRAME) + 268 0.001 0.000 0.002 0.000 _docscrape.py:168(_is_at_section) + 1 0.000 0.000 0.002 0.002 _json.py:1() + 1 0.000 0.000 0.002 0.002 npyio.py:1() + 1 0.000 0.000 0.002 0.002 binary.py:171() + 1 0.000 0.000 0.002 0.002 _tzpath.py:1() + 994 0.001 0.000 0.002 0.000 typing.py:1280(__getattr__) + 856 0.002 0.000 0.002 0.000 version.py:504(_cmpkey) + 2 0.000 0.000 0.002 0.001 factorials.py:1() + 1 0.000 0.000 0.002 0.002 BIF.py:104(get_variable_grammar) + 592 0.001 0.000 0.002 0.000 _pytree.py:136(__init__) + 1 0.000 0.000 0.002 0.002 fancy_getopt.py:1() + 1 0.000 0.000 0.002 0.002 chordal.py:1() + 1 0.000 0.000 0.002 0.002 dtypes.py:1() + 13 0.000 0.000 0.002 0.000 library.py:32(__init__) + 7500 0.002 0.000 0.002 0.000 {built-in method from_bytes} + 1 0.000 0.000 0.002 0.002 betweenness.py:1() + 1 0.000 0.000 0.002 0.002 contingency.py:1() + 1 0.002 0.002 0.002 0.002 {built-in method torch._C._c10d_init} + 406 0.001 0.000 0.002 0.000 enum.py:1515(__and__) + 1 0.000 0.000 0.002 0.002 qmc.py:1() + 1 0.000 0.000 0.002 0.002 _reqs.py:1() + 21 0.000 0.000 0.002 0.000 decompositions.py:3288(register_inplace) + 1 0.000 0.000 0.002 0.002 fractions.py:1() + 60 0.000 0.000 0.002 0.000 enum.py:481(__prepare__) + 1 0.000 0.000 0.002 0.002 _nonlin.py:1() + 16 0.000 0.000 0.002 0.000 inspect.py:848(getdoc) + 2789 0.002 0.000 0.002 0.000 {built-in method _imp.find_frozen} + 1982 0.001 0.000 0.002 0.000 inspect.py:755(_is_wrapper) + 1 0.000 0.000 0.002 0.002 pdb.py:1() + 4368 0.001 0.000 0.002 0.000 typing.py:1358(__eq__) + 6 0.000 0.000 0.002 0.000 warnings.py:130(filterwarnings) + 9 0.000 0.000 0.002 0.000 decorator.py:200(decorate) + 2 0.000 0.000 0.002 0.001 cloudpickle.py:1() + 2 0.000 0.000 0.002 0.001 batchnorm.py:1() + 1 0.000 0.000 0.002 0.002 plot.py:1() + 2 0.000 0.000 0.002 0.001 domainmatrix.py:1() + 32 0.000 0.000 0.002 0.000 __init__.py:1012(__iter__) + 1 0.000 0.000 0.002 0.002 plistlib.py:1() + 1 0.000 0.000 0.002 0.002 staggered.py:1() + 190 0.001 0.000 0.002 0.000 functools.py:518(decorating_function) + 94 0.000 0.000 0.002 0.000 functools.py:904(wrapper) + 1 0.000 0.000 0.002 0.002 _reporting_descriptor.py:1() + 1 0.000 0.000 0.002 0.002 engines.py:1() + 1 0.000 0.000 0.002 0.002 __init__.py:335(_sanity_check) +1804/1504 0.001 0.000 0.002 0.000 typing.py:1364(__hash__) + 490 0.001 0.000 0.002 0.000 dataclasses.py:827(_set_new_attribute) + 13 0.001 0.000 0.002 0.000 enum.py:907() + 2997 0.001 0.000 0.002 0.000 :760(decode) + 1 0.000 0.000 0.002 0.002 numerictypes.py:1() + 1 0.000 0.000 0.002 0.002 _methods.py:1() + 40 0.002 0.000 0.002 0.000 {built-in method builtins.dir} + 1 0.000 0.000 0.002 0.002 ellipse.py:1() + 1 0.000 0.000 0.002 0.002 accumulationbounds.py:1() + 1 0.000 0.000 0.002 0.002 diophantine.py:1() + 1 0.002 0.002 0.002 0.002 {method 'dot' of 'numpy.ndarray' objects} + 138 0.002 0.000 0.002 0.000 {built-in method io.open} + 1 0.000 0.000 0.002 0.002 typing_extensions.py:1() + 628 0.001 0.000 0.002 0.000 _pytree.py:105(_is_leaf) + 34 0.000 0.000 0.002 0.000 core.py:75(ismethod) + 1 0.000 0.000 0.002 0.002 helpers.py:648(make_html_tags) + 5 0.000 0.000 0.002 0.000 context.py:262(Lock) + 1606 0.001 0.000 0.002 0.000 {method 'extend' of 'list' objects} + 3219 0.001 0.000 0.002 0.000 _parser.py:170(append) + 1 0.000 0.000 0.002 0.002 _helper.py:1() + 1 0.000 0.000 0.002 0.002 _linprog_util.py:1() + 1 0.000 0.000 0.002 0.002 helpers.py:590(_makeTags) + 536 0.000 0.000 0.002 0.000 :16(exists) + 1 0.000 0.000 0.002 0.002 necompiler.py:1() + 1 0.000 0.000 0.002 0.002 core.py:5798() + 1 0.000 0.000 0.002 0.002 core.py:400(ParserElement) + 1 0.000 0.000 0.002 0.002 finitefield.py:1() + 8 0.000 0.000 0.002 0.000 CPD.py:90(__init__) + 2948 0.002 0.000 0.002 0.000 functools.py:65(wraps) + 3323 0.001 0.000 0.002 0.000 inspect.py:378(isfunction) + 127 0.000 0.000 0.002 0.000 contextlib.py:260(contextmanager) + 392 0.002 0.000 0.002 0.000 {built-in method _abc._abc_init} + 1 0.000 0.000 0.002 0.002 polyoptions.py:396(Domain) + 278 0.002 0.000 0.002 0.000 decorators.py:25(not_implemented_for) + 1 0.000 0.000 0.002 0.002 special.py:1() + 17 0.000 0.000 0.002 0.000 core.py:1526(__or__) + 3869 0.001 0.000 0.002 0.000 util.py:185(is_consecutive) + 2 0.000 0.000 0.002 0.001 decoder.py:1() + 1 0.000 0.000 0.002 0.002 events.py:1() + 1 0.000 0.000 0.002 0.002 trigsimp.py:1() + 460 0.000 0.000 0.002 0.000 inspect.py:2755(replace) + 1 0.000 0.000 0.002 0.002 libhyper.py:1() + 467 0.000 0.000 0.002 0.000 __init__.py:1714(_has) + 1 0.000 0.000 0.002 0.002 compressor.py:1() + 2 0.000 0.000 0.002 0.001 modules.py:1() + 1 0.000 0.000 0.002 0.002 _replacement.py:1() + 64 0.001 0.000 0.002 0.000 _posix_reduction.py:57(reduce_connection) + 1 0.000 0.000 0.002 0.002 _comparison.py:1() + 1 0.000 0.000 0.002 0.002 zeta_functions.py:1() + 1592 0.001 0.000 0.002 0.000 :756(encode) + 1 0.000 0.000 0.002 0.002 __init__.py:454(StrFormatStyle) + 7 0.000 0.000 0.002 0.000 _nonlin.py:1516(_nonlin_wrapper) + 1 0.000 0.000 0.002 0.002 basis.py:1() + 1 0.000 0.000 0.002 0.002 configparser.py:570(RawConfigParser) + 925/809 0.001 0.000 0.002 0.000 typing.py:1662(__hash__) + 1 0.000 0.000 0.002 0.002 config_init.py:1() + 16 0.000 0.000 0.002 0.000 process.py:16(__init__) + 2 0.000 0.000 0.002 0.001 session.py:1() + 1 0.000 0.000 0.002 0.002 hmac.py:1() + 1 0.000 0.000 0.002 0.002 _base.py:1559(ExcelFile) + 903 0.002 0.000 0.002 0.000 {method 'search' of 're.Pattern' objects} + 780 0.001 0.000 0.002 0.000 :140(basename) + 14 0.000 0.000 0.002 0.000 core.py:115(doc_note) + 26 0.001 0.000 0.002 0.000 util.py:171(register_after_fork) + 1 0.000 0.000 0.002 0.002 _notification.py:1() + 1 0.000 0.000 0.002 0.002 ipaddress.py:1() + 3664 0.001 0.000 0.002 0.000 _parser.py:158(__len__) + 186 0.000 0.000 0.002 0.000 docscrape.py:92(read_to_next_unindented_line) + 17 0.000 0.000 0.002 0.000 core.py:4084(__init__) + 1 0.000 0.000 0.002 0.002 _address.py:1() + 468 0.002 0.000 0.002 0.000 {built-in method fromkeys} + 2 0.000 0.000 0.002 0.001 polynomial.py:1() + 39/20 0.000 0.000 0.002 0.000 core.py:4409(streamline) + 1 0.000 0.000 0.002 0.002 _torch_docs.py:1() + 16 0.001 0.000 0.002 0.000 :1025(fdopen) + 48/28 0.000 0.000 0.002 0.000 typing.py:1405(_determine_new_args) + 1 0.000 0.000 0.002 0.002 module.py:366(Module) + 2 0.000 0.000 0.002 0.001 _strptime.py:173(__init__) + 1 0.000 0.000 0.002 0.002 uarray.py:1() + 1 0.000 0.000 0.002 0.002 sequences.py:1() + 1 0.000 0.000 0.002 0.002 expand.py:1() + 94 0.000 0.000 0.002 0.000 __init__.py:549(_) + 356 0.000 0.000 0.002 0.000 inspect.py:402(isgeneratorfunction) + 1 0.000 0.000 0.002 0.002 operator_schemas.py:1() + 1 0.000 0.000 0.002 0.002 stringpict.py:1() + 1 0.000 0.000 0.002 0.002 _distn_infrastructure.py:1() + 628 0.000 0.000 0.002 0.000 :2(__init__) + 4 0.000 0.000 0.002 0.000 spawn.py:1() + 201/43 0.000 0.000 0.002 0.000 core.py:1862(__str__) + 1 0.000 0.000 0.002 0.002 package_importer.py:1() + 1 0.000 0.000 0.002 0.002 rnn.py:340(RNN) + 499 0.001 0.000 0.002 0.000 typing.py:297(_deduplicate) + 2 0.000 0.000 0.002 0.001 _elffile.py:1() + 1 0.000 0.000 0.002 0.002 container.py:1() + 121 0.000 0.000 0.002 0.000 inspect.py:2773(__str__) + 3 0.000 0.000 0.002 0.001 ctx_base.py:42(__init__) + 11741 0.002 0.000 0.002 0.000 {built-in method builtins.id} + 1 0.000 0.000 0.002 0.002 unix_events.py:1() + 716 0.001 0.000 0.002 0.000 _compiler.py:396(_simple) + 1 0.000 0.000 0.002 0.002 tools_common.py:1() + 48/28 0.000 0.000 0.002 0.000 typing.py:1434(_make_substitution) + 1 0.000 0.000 0.002 0.002 extras.py:1() + 420 0.001 0.000 0.002 0.000 _ops.py:505(overloads) + 1 0.000 0.000 0.002 0.002 defchararray.py:1() + 402 0.001 0.000 0.002 0.000 copy.py:259(_reconstruct) + 387 0.000 0.000 0.002 0.000 __init__.py:877(normalize) + 1 0.000 0.000 0.002 0.002 split_module.py:1() + 16 0.000 0.000 0.002 0.000 _docscrape.py:581(__str__) + 12523 0.002 0.000 0.002 0.000 inspect.py:2751(kind) + 1 0.000 0.000 0.002 0.002 _artifact_location.py:1() + 91/43 0.000 0.000 0.002 0.000 {built-in method numpy.core._multiarray_umath.implement_array_function} + 1 0.000 0.000 0.002 0.002 rolling.py:1807(Rolling) + 42 0.000 0.000 0.002 0.000 _typing.py:257(__new__) + 1 0.000 0.000 0.002 0.002 kind.py:1() + 425 0.000 0.000 0.002 0.000 __init__.py:163(match) + 2 0.000 0.000 0.002 0.001 function_base.py:1() + 2 0.000 0.000 0.002 0.001 grouping.py:1() + 79 0.000 0.000 0.001 0.000 config.py:773(inner) + 559 0.001 0.000 0.001 0.000 :87(isabs) + 2 0.000 0.000 0.001 0.001 blas.py:1() + 1 0.000 0.000 0.001 0.001 from_dataframe.py:1() + 1 0.000 0.000 0.001 0.001 groupby.py:851(GroupBy) + 8085 0.001 0.000 0.001 0.000 {method 'isidentifier' of 'str' objects} + 1616 0.001 0.000 0.001 0.000 copy.py:243(_keep_alive) + 1 0.000 0.000 0.001 0.001 onnx_proto_utils.py:1() + 1 0.000 0.000 0.001 0.001 _attachment.py:1() + 772 0.001 0.000 0.001 0.000 :121(_splitext) + 2793 0.001 0.000 0.001 0.000 {built-in method _imp.is_builtin} + 6 0.000 0.000 0.001 0.000 _threadsafety.py:52(decorator) + 69 0.000 0.000 0.001 0.000 _compatibility.py:24(mark_not_back_compat) + 2 0.000 0.000 0.001 0.001 more.py:1() + 1 0.000 0.000 0.001 0.001 dense_ndim_array.py:1() + 1 0.000 0.000 0.001 0.001 expanding.py:1() + 1 0.000 0.000 0.001 0.001 mod.py:1() + 16 0.000 0.000 0.001 0.000 _docscrape.py:349(_parse_summary) + 1 0.000 0.000 0.001 0.001 _graph.py:1() + 3 0.001 0.000 0.001 0.000 functions.py:18(__init__) + 1336 0.001 0.000 0.001 0.000 __init__.py:2899(__getattr__) + 92 0.000 0.000 0.001 0.000 __init__.py:1726(_get) + 6 0.000 0.000 0.001 0.000 _threadsafety.py:41(decorate) + 1 0.000 0.000 0.001 0.001 subgraph_rewriter.py:1() + 1 0.000 0.000 0.001 0.001 dataframe_protocol.py:1() + 1 0.000 0.000 0.001 0.001 multi.py:1() + 1 0.000 0.000 0.001 0.001 my_exceptions.py:1() + 1 0.000 0.000 0.001 0.001 std.py:1() + 1 0.000 0.000 0.001 0.001 maxflow.py:1() + 1 0.000 0.000 0.001 0.001 _tzpath.py:5(reset_tzpath) + 2 0.000 0.000 0.001 0.001 linsolve.py:1() + 9629 0.001 0.000 0.001 0.000 inspect.py:2739(name) + 20/8 0.000 0.000 0.001 0.000 core.py:4108(parseImpl) + 356 0.001 0.000 0.001 0.000 inspect.py:391(_has_code_flag) + 14 0.000 0.000 0.001 0.000 core.py:595(set_parse_action) + 79 0.001 0.000 0.001 0.000 config.py:453(register_option) + 1 0.000 0.000 0.001 0.001 sysconfig.py:710(get_config_var) + 76 0.000 0.000 0.001 0.000 _docscrape.py:553(dedent_lines) + 16 0.001 0.000 0.001 0.000 process.py:80(__init__) + 7583 0.001 0.000 0.001 0.000 {method 'lower' of 'str' objects} + 3/2 0.000 0.000 0.001 0.001 sysconfig.py:629(get_config_vars) + 1 0.000 0.000 0.001 0.001 assume.py:1() + 1 0.000 0.000 0.001 0.001 hyperexpand.py:1() + 2329 0.001 0.000 0.001 0.000 typing.py:1657(__eq__) + 12 0.000 0.000 0.001 0.000 __init__.py:2173(safe_listdir) + 1 0.000 0.000 0.001 0.001 elliptic_integrals.py:1() + 114 0.000 0.000 0.001 0.000 dataclasses.py:228(_recursive_repr) + 1 0.000 0.000 0.001 0.001 rnn.py:551(LSTM) + 1 0.000 0.000 0.001 0.001 _interpolation.py:1() + 1 0.000 0.000 0.001 0.001 _remove_redundancy.py:1() + 16 0.000 0.000 0.001 0.000 _docscrape.py:527(__str__) + 2297 0.001 0.000 0.001 0.000 _parser.py:284(tell) + 1 0.000 0.000 0.001 0.001 domain.py:1() + 1 0.000 0.000 0.001 0.001 _configuration_override.py:1() + 1 0.000 0.000 0.001 0.001 pyfunctorch.py:1() + 1 0.000 0.000 0.001 0.001 _threadsafety.py:1() + 1 0.000 0.000 0.001 0.001 proxy.py:1() + 1 0.000 0.000 0.001 0.001 _reporting_descriptor_reference.py:1() + 1 0.000 0.000 0.001 0.001 unary.py:167() + 1 0.000 0.000 0.001 0.001 graph.py:675(Graph) + 1 0.000 0.000 0.001 0.001 _artifact_content.py:1() + 1 0.000 0.000 0.001 0.001 expanding.py:48(Expanding) + 21 0.000 0.000 0.001 0.000 base.py:464(__init_subclass__) + 492 0.001 0.000 0.001 0.000 compute.py:99(_get_arg_names) + 27 0.000 0.000 0.001 0.000 ast.py:33(parse) + 1 0.000 0.000 0.001 0.001 miscellaneous.py:1() + 1 0.000 0.000 0.001 0.001 locks.py:1() + 6980 0.001 0.000 0.001 0.000 {method '__contains__' of 'frozenset' objects} + 18 0.000 0.000 0.001 0.000 core.py:262(_trim_arity) + 1 0.000 0.000 0.001 0.001 base.py:277(Index) + 1 0.000 0.000 0.001 0.001 string.py:1() + 14 0.000 0.000 0.001 0.000 core.py:675() + 1 0.000 0.000 0.001 0.001 _qmc.py:1() + 1 0.000 0.000 0.001 0.001 _external_property_file_references.py:1() + 1 0.000 0.000 0.001 0.001 getlimits.py:158(_register_known_types) + 88 0.000 0.000 0.001 0.000 core.py:4349(__init__) + 2 0.000 0.000 0.001 0.001 combining.py:1() + 1 0.000 0.000 0.001 0.001 _rules.py:1() + 1 0.001 0.001 0.001 0.001 _codata.py:1514(parse_constants_2018toXXXX) + 1 0.000 0.000 0.001 0.001 mathieu_functions.py:1() + 22 0.000 0.000 0.001 0.000 __init__.py:172(flex_method_SERIES) + 1 0.000 0.000 0.001 0.001 sslproto.py:1() + 1414 0.001 0.000 0.001 0.000 copy.py:201(_deepcopy_list) + 1 0.000 0.000 0.001 0.001 splitter_base.py:1() + 138 0.000 0.000 0.001 0.000 _meta_registrations.py:34(register) + 1 0.000 0.000 0.001 0.001 plot_implicit.py:1() + 104 0.000 0.000 0.001 0.000 typing.py:938(__init__) + 1 0.000 0.000 0.001 0.001 _stack.py:1() + 1 0.000 0.000 0.001 0.001 constraint_registry.py:1() + 1 0.000 0.000 0.001 0.001 polyroots.py:1() + 29 0.000 0.000 0.001 0.000 core.py:3903(_generateDefaultName) + 165 0.000 0.000 0.001 0.000 inspect.py:1441(formatannotation) + 8827 0.001 0.000 0.001 0.000 {method 'strip' of 'str' objects} + 24 0.001 0.000 0.001 0.000 random.py:480(choices) + 1 0.000 0.000 0.001 0.001 _internal.py:1() + 757 0.001 0.000 0.001 0.000 enum.py:825(__setattr__) + 1 0.000 0.000 0.001 0.001 pooling.py:1() + 610 0.001 0.000 0.001 0.000 _compiler.py:214(_compile_charset) + 628/550 0.001 0.000 0.001 0.000 _pytree.py:165(tree_unflatten) + 1 0.000 0.000 0.001 0.001 homomorphisms.py:1() + 1 0.000 0.000 0.001 0.001 matcher_utils.py:1() + 1 0.000 0.000 0.001 0.001 _stats_mstats_common.py:1() + 2 0.000 0.000 0.001 0.001 dispatch.py:1() + 1 0.000 0.000 0.001 0.001 multi.py:210(MultiIndex) + 1 0.000 0.000 0.001 0.001 scimath.py:1() + 1 0.001 0.001 0.001 0.001 conv.py:672(ConvTranspose1d) + 21 0.000 0.000 0.001 0.000 utils.py:143(__call__) + 3180 0.001 0.000 0.001 0.000 {method 'decode' of 'bytes' objects} + 386 0.001 0.000 0.001 0.000 __init__.py:2976() + 2 0.000 0.000 0.001 0.001 resource_tracker.py:1() + 1 0.000 0.000 0.001 0.001 _beartype.py:1() + 1 0.000 0.000 0.001 0.001 _strptime.py:1() + 1 0.000 0.000 0.001 0.001 _normalization.py:1() + 1 0.001 0.001 0.001 0.001 gammazeta.py:1() + 1 0.000 0.000 0.001 0.001 column.py:1() + 664 0.000 0.000 0.001 0.000 _pytree.py:99(_get_node_type) + 27 0.001 0.000 0.001 0.000 weakref.py:164(__setitem__) + 21 0.000 0.000 0.001 0.000 utils.py:208(deprecate) + 1 0.000 0.000 0.001 0.001 _ode.py:1() + 1 0.000 0.000 0.001 0.001 stata.py:1() + 1 0.000 0.000 0.001 0.001 interpreter.py:1() + 38 0.001 0.000 0.001 0.000 util.py:186(__init__) + 1 0.000 0.000 0.001 0.001 mst.py:1() + 126 0.000 0.000 0.001 0.000 enum.py:939(_get_mixins_) + 299 0.001 0.000 0.001 0.000 inspect.py:2077(_signature_is_functionlike) + 32 0.000 0.000 0.001 0.000 typing.py:2841() + 1 0.000 0.000 0.001 0.001 :975(exec_module) + 618 0.001 0.000 0.001 0.000 dataclasses.py:368(field) + 1 0.000 0.000 0.001 0.001 tools_common.py:78(FxNetAccFusionsFinder) + 1 0.000 0.000 0.001 0.001 least_squares.py:1() + 628 0.001 0.000 0.001 0.000 _pytree.py:120(__post_init__) + 92 0.000 0.000 0.001 0.000 backends.py:110(_dispatch) + 1 0.000 0.000 0.001 0.001 branchings.py:1() + 52 0.000 0.000 0.001 0.000 inspect.py:936(getsourcefile) + 1 0.000 0.000 0.001 0.001 :1() + 1 0.000 0.000 0.001 0.001 _psposix.py:1() + 506 0.001 0.000 0.001 0.000 function_base.py:2269(__init__) + 1 0.000 0.000 0.001 0.001 arrow_parser_wrapper.py:1() + 1 0.000 0.000 0.001 0.001 parametrizations.py:1() + 5405 0.001 0.000 0.001 0.000 {method 'issubset' of 'set' objects} + 1 0.000 0.000 0.001 0.001 signal.py:1() + 6 0.000 0.000 0.001 0.000 getlimits.py:34(__init__) + 1 0.000 0.000 0.001 0.001 string.py:69(__init_subclass__) + 10/3 0.000 0.000 0.001 0.000 unicode.py:14(__get__) + 1 0.000 0.000 0.001 0.001 _deprecated_my_exceptions.py:1() + 1 0.000 0.000 0.001 0.001 dataframes.py:1() + 1280 0.001 0.000 0.001 0.000 __init__.py:998(__getitem__) + 1 0.000 0.000 0.001 0.001 _trustregion_krylov.py:1() + 589 0.001 0.000 0.001 0.000 :60(isabs) + 3 0.000 0.000 0.001 0.000 solvers.py:1() + 11 0.000 0.000 0.001 0.000 decorator.py:75(__init__) + 1 0.000 0.000 0.001 0.001 storage.py:1() + 1 0.000 0.000 0.001 0.001 datetime.py:1() + 2908 0.001 0.000 0.001 0.000 :165(__init__) + 386 0.001 0.000 0.001 0.000 utils.py:32(canonicalize_name) + 128 0.000 0.000 0.001 0.000 core.py:3904() + 3095 0.001 0.000 0.001 0.000 {method 'pop' of 'dict' objects} + 78 0.001 0.000 0.001 0.000 function.py:289(__init__) + 1 0.000 0.000 0.001 0.001 tarfile.py:1() + 1 0.000 0.000 0.001 0.001 _type_utils.py:1() + 115 0.001 0.000 0.001 0.000 typing.py:1843(__init_subclass__) + 1 0.000 0.000 0.001 0.001 categorical.py:255(Categorical) + 1 0.000 0.000 0.001 0.001 difflib.py:1() + 1 0.000 0.000 0.001 0.001 interpolative.py:1() + 1 0.000 0.000 0.001 0.001 scanner.py:1() + 3362 0.001 0.000 0.001 0.000 version.py:203() + 1 0.000 0.000 0.001 0.001 _deprecated_my_exceptions.py:98(_mk_common_exceptions) + 7932 0.001 0.000 0.001 0.000 {built-in method builtins.callable} + 1 0.000 0.000 0.001 0.001 pretty_symbology.py:1() + 16 0.000 0.000 0.001 0.000 resource_tracker.py:78(ensure_running) + 58 0.000 0.000 0.001 0.000 wrappers.py:328(elementwise_unary_scalar_wrapper) + 1 0.000 0.000 0.001 0.001 _core.py:1() + 600 0.001 0.000 0.001 0.000 results.py:136(__new__) + 1 0.000 0.000 0.001 0.001 blocks.py:1() + 21 0.000 0.000 0.001 0.000 typing.py:482(__getitem__) + 1 0.000 0.000 0.001 0.001 unary.py:170() + 1 0.000 0.000 0.001 0.001 add_newdocs.py:1() + 1 0.000 0.000 0.001 0.001 message.py:1() + 1 0.000 0.000 0.001 0.001 _region.py:1() + 341 0.001 0.000 0.001 0.000 _parser.py:82(opengroup) + 1 0.000 0.000 0.001 0.001 _measurements.py:1() + 2 0.000 0.000 0.001 0.001 _adapters.py:1() + 2209 0.001 0.000 0.001 0.000 docscrape.py:71(eof) + 1 0.000 0.000 0.001 0.001 lsq_linear.py:1() + 64 0.000 0.000 0.001 0.000 _posix_reduction.py:27(DupFd) + 11 0.000 0.000 0.001 0.000 decorator.py:144(make) + 33 0.000 0.000 0.001 0.000 _pslinux.py:1654(wrap_exceptions) + 385 0.001 0.000 0.001 0.000 _util.py:330() + 104 0.000 0.000 0.001 0.000 _compiler.py:384(_mk_bitmap) + 1 0.000 0.000 0.001 0.001 blockmatrix.py:1() + 10 0.000 0.000 0.001 0.000 inspect.py:1336(getfullargspec) + 1 0.000 0.000 0.001 0.001 pydoc.py:1() + 1 0.000 0.000 0.001 0.001 generic.py:175(SeriesGroupBy) + 1 0.000 0.000 0.001 0.001 range.py:1() + 2718 0.000 0.000 0.001 0.000 __init__.py:2427(_normalize_cached) + 3362 0.001 0.000 0.001 0.000 version.py:243() + 2 0.000 0.000 0.001 0.000 version.py:157(Version) + 1 0.000 0.000 0.001 0.001 interval.py:180(IntervalArray) + 1 0.000 0.000 0.001 0.001 _lil.py:1() + 246 0.001 0.000 0.001 0.000 compute.py:196(_get_options_class) + 2495 0.001 0.000 0.001 0.000 :1097(__init__) + 1 0.000 0.000 0.001 0.001 lambdarepr.py:1() + 10 0.000 0.000 0.001 0.000 extras.py:234(__init__) + 1 0.000 0.000 0.001 0.001 mutable_ndim_array.py:1() + 1 0.000 0.000 0.001 0.001 expr_with_intlimits.py:1() + 1 0.000 0.000 0.001 0.001 expr.py:327(f) + 9 0.000 0.000 0.001 0.000 __init__.py:2329(declare_namespace) + 1 0.000 0.000 0.001 0.001 rnn.py:830(GRU) + 3371 0.001 0.000 0.001 0.000 {method 'pop' of 'list' objects} + 2 0.000 0.000 0.001 0.000 period.py:1() + 1 0.000 0.000 0.001 0.001 sysconfig.py:527(_init_posix) + 10 0.000 0.000 0.001 0.000 extras.py:238(getdoc) + 22 0.000 0.000 0.001 0.000 symbol.py:426(__new__) + 1 0.000 0.000 0.001 0.001 __init__.py:629(version) + 3 0.000 0.000 0.001 0.000 process.py:1() + 1 0.000 0.000 0.001 0.001 _type_aliases.py:1() + 1 0.001 0.001 0.001 0.001 helpers.py:692() + 2 0.000 0.000 0.001 0.000 combinatorics.py:1() + 1 0.000 0.000 0.001 0.001 reinplace.py:1() + 3 0.000 0.000 0.001 0.000 extension.py:1() + 1 0.000 0.000 0.001 0.001 __init__.py:421(PercentStyle) + 1 0.001 0.001 0.001 0.001 {built-in method torch._C._autograd_init} + 1 0.000 0.000 0.001 0.001 pycode.py:1() + 817 0.001 0.000 0.001 0.000 enum.py:78(_is_private) + 1 0.000 0.000 0.001 0.001 _fitpack_impl.py:1() + 21 0.000 0.000 0.001 0.000 typing.py:703(Literal) + 15 0.000 0.000 0.001 0.000 tokenize.py:392(open) + 76 0.000 0.000 0.001 0.000 _docscrape.py:86(read_to_next_unindented_line) + 1 0.000 0.000 0.001 0.001 __init__.py:602(metadata) + 1 0.000 0.000 0.001 0.001 _tensor_docs.py:1() + 22 0.001 0.000 0.001 0.000 expr.py:297(_op_maker) + 619 0.001 0.000 0.001 0.000 dataclasses.py:449(_field_init) + 74/37 0.000 0.000 0.001 0.000 sorting.py:10(default_sort_key) + 2311 0.001 0.000 0.001 0.000 facts.py:533() + 49 0.000 0.000 0.001 0.000 core.py:5368(__init__) + 8 0.000 0.000 0.001 0.000 DiscreteFactor.py:21(__init__) + 1 0.000 0.000 0.001 0.001 sympy_parser.py:1() + 449 0.001 0.000 0.001 0.000 _parser.py:367(_escape) + 1 0.000 0.000 0.001 0.001 decimal.py:1() + 1 0.000 0.000 0.001 0.001 ddm.py:1() + 7 0.000 0.000 0.001 0.000 session.py:61() + 1 0.000 0.000 0.001 0.001 gumbel.py:1() + 3 0.000 0.000 0.001 0.000 config.py:1() + 1 0.000 0.000 0.001 0.001 take.py:1() + 1890 0.001 0.000 0.001 0.000 _parser.py:109(__init__) + 48 0.000 0.000 0.001 0.000 cloudpickle_fast.py:580(_function_reduce) + 1 0.000 0.000 0.001 0.001 managers.py:1() + 84 0.000 0.000 0.001 0.000 __init__.py:1641(get_aten_op) + 1 0.000 0.000 0.001 0.001 reusable_executor.py:227(_setup_queues) + 1 0.000 0.000 0.001 0.001 dataloader.py:129(DataLoader) + 1 0.000 0.000 0.001 0.001 pickletools.py:1() + 7 0.000 0.000 0.001 0.000 __init__.py:798(children) + 1749 0.001 0.000 0.001 0.000 inspect.py:292(isclass) + 658 0.000 0.000 0.001 0.000 {built-in method builtins.delattr} + 1 0.000 0.000 0.001 0.001 _parseaddr.py:1() + 1 0.000 0.000 0.001 0.001 ElementPath.py:1() + 1 0.000 0.000 0.001 0.001 cast.py:1() + 1 0.000 0.000 0.001 0.001 xml.py:1() + 3556 0.001 0.000 0.001 0.000 {built-in method sys.intern} + 119 0.001 0.000 0.001 0.000 _dill.py:475(_create_typemap) + 5 0.000 0.000 0.001 0.000 synchronize.py:184(__init__) + 208 0.001 0.000 0.001 0.000 cloudpickle.py:181(_is_registered_pickle_by_value) + 2 0.000 0.000 0.001 0.000 fourier.py:1() + 463 0.001 0.000 0.001 0.000 docscrape.py:64(seek_next_non_empty_line) + 56 0.000 0.000 0.001 0.000 resource_tracker.py:167(_check_alive) + 1 0.000 0.000 0.001 0.001 partitions_.py:1() + 1 0.000 0.000 0.001 0.001 DynamicBayesianNetwork.py:1() + 38 0.000 0.000 0.001 0.000 getlimits.py:111(_float_to_str) + 1 0.000 0.000 0.001 0.001 smallworld.py:1() + 1 0.000 0.000 0.001 0.001 symbolic_opset10.py:1() + 1 0.000 0.000 0.001 0.001 beta_functions.py:1() + 1 0.000 0.000 0.001 0.001 _web_response.py:1() + 1 0.000 0.000 0.001 0.001 forward_ad.py:1() + 1 0.000 0.000 0.001 0.001 tensor_functions.py:1() + 24 0.000 0.000 0.001 0.000 __init__.py:2081(getLogger) + 245 0.000 0.000 0.001 0.000 dataclasses.py:401(_tuple_str) + 81 0.001 0.000 0.001 0.000 resource_tracker.py:191(_send) + 1 0.001 0.001 0.001 0.001 pytables.py:1952(IndexCol) + 414 0.001 0.000 0.001 0.000 _util.py:345() + 1 0.000 0.000 0.001 0.001 equality_constrained_sqp.py:1() + 26 0.000 0.000 0.001 0.000 _hook_iterator.py:102(hook_iterator) + 1 0.000 0.000 0.001 0.001 tabulate.py:1() + 54 0.001 0.000 0.001 0.000 __init__.py:237(_releaseLock) + 38 0.001 0.000 0.001 0.000 assumptions.py:474(make_property) + 3 0.000 0.000 0.001 0.000 activation.py:1() + 3750 0.001 0.000 0.001 0.000 typing.py:1351() + 1 0.000 0.000 0.001 0.001 _directory_reader.py:1() + 86 0.000 0.000 0.001 0.000 logic.py:271(fromstring) + 48 0.001 0.000 0.001 0.000 _deprecated_my_exceptions.py:66(_mk_exception) + 1 0.000 0.000 0.001 0.001 _root_scalar.py:1() + 1 0.000 0.000 0.001 0.001 _ufunc_config.py:1() + 424 0.001 0.000 0.001 0.000 core.py:69(__init__) + 2055 0.001 0.000 0.001 0.000 _docscrape.py:65(eof) + 399 0.000 0.000 0.001 0.000 _parser.py:444(_uniq) + 25 0.000 0.000 0.001 0.000 symbol.py:298(__xnew__) + 32 0.001 0.000 0.001 0.000 cloudpickle_fast.py:644(__init__) + 1 0.000 0.000 0.001 0.001 loss.py:1() + 16 0.000 0.000 0.001 0.000 process.py:61(_cleanup) + 1 0.000 0.000 0.001 0.001 mst.py:957(SpanningTreeIterator) + 520 0.001 0.000 0.001 0.000 _docscrape.py:58(seek_next_non_empty_line) + 11/4 0.000 0.000 0.001 0.000 core.py:4092(streamline) + 2 0.000 0.000 0.001 0.000 _backend.py:1() + 1 0.000 0.000 0.001 0.001 __init__.py:1130() + 230 0.000 0.000 0.001 0.000 _internal.py:869(_ufunc_doc_signature_formatter) + 1 0.000 0.000 0.001 0.001 ctx_iv.py:306(__init__) + 1 0.000 0.000 0.001 0.001 monkey.py:63(patch_all) + 1 0.000 0.000 0.001 0.001 _web_request.py:1() + 1496 0.001 0.000 0.001 0.000 __init__.py:2169(__call__) + 2 0.000 0.000 0.001 0.000 cmd.py:1() + 1 0.000 0.000 0.001 0.001 graph_settings.py:1() + 1 0.000 0.000 0.001 0.001 euclidtools.py:1() + 1 0.000 0.000 0.001 0.001 bz2.py:1() + 1 0.000 0.000 0.001 0.001 _compressed.py:1() + 1 0.000 0.000 0.001 0.001 _logical_location.py:1() + 1 0.000 0.000 0.001 0.001 ctx_mp.py:63(__init__) + 11 0.000 0.000 0.001 0.000 dataclasses.py:845(_hash_add) + 1 0.000 0.000 0.001 0.001 replicate.py:1() + 1 0.000 0.000 0.001 0.001 unicode.py:80(alphanums) + 245/191 0.001 0.000 0.001 0.000 _compiler.py:434(_get_literal_prefix) + 208 0.000 0.000 0.001 0.000 pickle.py:322(_getattribute) + 1 0.000 0.000 0.001 0.001 _page_trend_test.py:1() + 1 0.000 0.000 0.001 0.001 monkey.py:128(patch_for_msvc_specialized_compiler) + 1 0.000 0.000 0.001 0.001 info.py:1() + 1 0.000 0.000 0.001 0.001 _realtransforms.py:1() + 1 0.000 0.000 0.001 0.001 melt.py:1() + 60 0.000 0.000 0.001 0.000 enum.py:1004(_find_new_) + 1 0.000 0.000 0.001 0.001 grad_scaler.py:1() + 1 0.000 0.000 0.001 0.001 generate.py:1() + 1 0.000 0.000 0.001 0.001 utils.py:119(_init_num_threads) + 1 0.000 0.000 0.001 0.001 _plotutils.py:1() + 1 0.000 0.000 0.001 0.001 six.py:1() + 1 0.000 0.000 0.001 0.001 integer.py:1() + 1 0.000 0.000 0.001 0.001 pivot.py:1() + 1 0.000 0.000 0.001 0.001 twodim_base.py:1() + 3976 0.001 0.000 0.001 0.000 :71(_relax_case) + 69 0.000 0.000 0.001 0.000 :110(register) + 1 0.000 0.000 0.001 0.001 __init__.py:149(EntryPoint) + 2 0.000 0.000 0.001 0.000 _strptime.py:49(__init__) + 544 0.000 0.000 0.001 0.000 registration.py:159(add) + 2771 0.001 0.000 0.001 0.000 {method 'setdefault' of 'dict' objects} + 265 0.001 0.000 0.001 0.000 _parser.py:307(_class_escape) + 269 0.000 0.000 0.001 0.000 __init__.py:304() + 35 0.000 0.000 0.001 0.000 core.py:5585(__init__) + 664 0.001 0.000 0.001 0.000 _pytree.py:89(_is_namedtuple_instance) + 16 0.000 0.000 0.001 0.000 <__array_function__ internals>:177(pad) + 492 0.001 0.000 0.001 0.000 docscrape.py:93(is_unindented) + 85 0.001 0.000 0.001 0.000 utils.py:83(groupby) + 16 0.000 0.000 0.001 0.000 <__array_function__ internals>:177(product) + 1 0.000 0.000 0.001 0.001 stateless.py:1() + 1 0.000 0.000 0.001 0.001 _bsplines.py:1() + 1 0.000 0.000 0.001 0.001 uuid.py:1() + 229 0.000 0.000 0.001 0.000 :771(get) + 1 0.000 0.000 0.001 0.001 array_manager.py:1() + 1 0.000 0.000 0.001 0.001 string_.py:1() + 1 0.000 0.000 0.001 0.001 process_executor.py:1050(_setup_queues) + 1 0.000 0.000 0.001 0.001 category.py:1() + 922 0.001 0.000 0.001 0.000 enum.py:47(_is_dunder) + 2 0.000 0.000 0.001 0.000 abc.py:1() + 1 0.000 0.000 0.001 0.001 branchings.py:831(ArborescenceIterator) + 1 0.000 0.000 0.001 0.001 modularity_max.py:1() + 1 0.000 0.000 0.001 0.001 _relative_risk.py:1() + 1 0.000 0.000 0.001 0.001 _version_control_details.py:1() + 2 0.000 0.000 0.001 0.000 generic.py:11591(_add_numeric_operations) + 1 0.000 0.000 0.001 0.001 exp_family.py:1() + 1 0.000 0.000 0.001 0.001 _kdtree.py:1() + 1 0.000 0.000 0.001 0.001 diagonal.py:1() + 167 0.001 0.000 0.001 0.000 logic.py:346(flatten) + 6 0.000 0.000 0.001 0.000 __init__.py:458(flex_comp_method_FRAME) + 1 0.000 0.000 0.001 0.001 vmap.py:1() + 1 0.000 0.000 0.001 0.001 _result_provenance.py:1() + 1 0.000 0.000 0.001 0.001 _translation_metadata.py:1() + 1 0.000 0.000 0.001 0.001 libmpc.py:1() + 1 0.000 0.000 0.001 0.001 dataset.py:1() + 3891 0.001 0.000 0.001 0.000 {method 'values' of 'mappingproxy' objects} + 374 0.000 0.000 0.001 0.000 pkgutil.py:407(get_importer) + 1 0.000 0.000 0.001 0.001 BIF.py:174(get_network_name) + 1 0.000 0.000 0.001 0.001 join.py:1() + 69 0.000 0.000 0.001 0.000 {built-in method _abc._abc_register} + 144 0.000 0.000 0.001 0.000 _docscrape.py:453(_str_param_list) + 1 0.000 0.000 0.001 0.001 objects.py:1() + 1 0.000 0.000 0.001 0.001 _logsumexp.py:1() + 1 0.000 0.000 0.001 0.001 _graph_traversal.py:1() + 1 0.000 0.000 0.001 0.001 arpack.py:1() + 159 0.000 0.000 0.001 0.000 iterables.py:593(sift) + 23 0.000 0.000 0.001 0.000 __init__.py:1327(getLogger) + 1 0.000 0.000 0.001 0.001 realfield.py:1() + 1 0.000 0.000 0.001 0.001 utils.py:101(set_num_threads) + 1 0.001 0.001 0.001 0.001 {built-in method torch._C._rpc_init} + 1 0.000 0.000 0.001 0.001 html.py:1() + 1 0.001 0.001 0.001 0.001 {built-in method numexpr.interpreter._set_num_threads} + 28 0.000 0.000 0.001 0.000 _decorator.py:23(__call__) + 4835 0.001 0.000 0.001 0.000 _ops.py:398(name) + 1 0.000 0.000 0.001 0.001 adadelta.py:1() + 206 0.000 0.000 0.001 0.000 _parser.py:222(__init__) + 7286 0.001 0.000 0.001 0.000 {built-in method builtins.ord} + 1 0.000 0.000 0.001 0.001 __init__.py:2482(EntryPoint) + 114 0.000 0.000 0.001 0.000 dataclasses.py:392(_fields_in_init_order) + 1 0.000 0.000 0.001 0.001 _reporting_descriptor_relationship.py:1() + 16 0.000 0.000 0.001 0.000 arraypad.py:529(pad) + 1 0.000 0.000 0.001 0.001 node.py:105(Node) + 780 0.001 0.000 0.001 0.000 pathlib.py:239(splitroot) + 565 0.000 0.000 0.001 0.000 core.py:2336(parseImpl) + 1 0.000 0.000 0.001 0.001 gml.py:1() + 1 0.000 0.000 0.001 0.001 sampler.py:1() + 325 0.000 0.000 0.001 0.000 function_base.py:469(_add_docstring) + 1 0.000 0.000 0.001 0.001 _mixins.py:1() + 1 0.000 0.000 0.001 0.001 _io.py:1() + 1 0.000 0.000 0.001 0.001 ordinals.py:1() + 50 0.000 0.000 0.001 0.000 core.py:131(get_object_signature) + 1 0.000 0.000 0.001 0.001 _rectangle.py:1() + 1 0.000 0.000 0.001 0.001 dtypes.py:1043(IntervalDtype) + 1 0.000 0.000 0.001 0.001 combsimp.py:1() + 1 0.000 0.000 0.001 0.001 operator_support.py:1() + 103 0.000 0.000 0.001 0.000 core.py:2266(__init__) + 1 0.000 0.000 0.001 0.001 _add_newdocs_scalars.py:1() + 18 0.000 0.000 0.001 0.000 arrayprint.py:1571(_array_str_implementation) + 17 0.000 0.000 0.001 0.000 typing.py:1654(copy_with) + 10 0.000 0.000 0.001 0.000 core.py:5590(__add__) + 31 0.000 0.000 0.001 0.000 typing.py:1496(copy_with) + 1 0.000 0.000 0.001 0.001 func_inspect.py:1() + 32 0.001 0.000 0.001 0.000 reduction.py:131(_set_dispatch_table) + 2 0.000 0.000 0.001 0.000 _globals.py:1() + 1 0.000 0.000 0.001 0.001 _exception.py:1() + 16 0.000 0.000 0.001 0.000 fromnumeric.py:3766(product) + 1 0.000 0.000 0.001 0.001 _ni_docstrings.py:1() + 1 0.000 0.000 0.001 0.001 _node.py:1() + 620 0.000 0.000 0.001 0.000 enum.py:37(_is_descriptor) + 1 0.000 0.000 0.001 0.001 polygon.py:1() + 2568 0.001 0.000 0.001 0.000 :1565() + 85 0.000 0.000 0.001 0.000 conflict.py:67() + 1 0.000 0.000 0.001 0.001 connection.py:1() + 1 0.000 0.000 0.001 0.001 JointProbabilityDistribution.py:1() + 1 0.000 0.000 0.001 0.001 _ccallback.py:1() + 1 0.000 0.000 0.001 0.001 _suppression.py:1() + 82 0.000 0.000 0.001 0.000 symbolic_helper.py:358(decorator) + 1 0.000 0.000 0.001 0.001 _message.py:1() + 1 0.000 0.000 0.001 0.001 _run_automation_details.py:1() + 1 0.000 0.000 0.001 0.001 return_types.py:1() + 1 0.000 0.000 0.001 0.001 datetimes.py:113(DatetimeIndex) + 1 0.000 0.000 0.001 0.001 routeddecoder.py:1() + 1 0.000 0.000 0.001 0.001 loader.py:1() + 1 0.000 0.000 0.001 0.001 registration.py:1() + 2 0.000 0.000 0.001 0.000 unicode.py:55(_chars_for_ranges) + 20 0.000 0.000 0.001 0.000 utils.py:194(_get_indent) + 18 0.000 0.000 0.001 0.000 arrayprint.py:506(wrapper) + 250 0.001 0.000 0.001 0.000 {built-in method posix.getcwd} + 11 0.000 0.000 0.001 0.000 dataclasses.py:638(_hash_fn) + 1 0.000 0.000 0.001 0.001 _reporting_configuration.py:1() + 1 0.000 0.000 0.001 0.001 _pocketfft.py:1() + 1 0.000 0.000 0.001 0.001 unicode.py:70(alphas) + 8 0.000 0.000 0.001 0.000 core.py:4889(parseImpl) + 16 0.000 0.000 0.001 0.000 <__array_function__ internals>:177(prod) + 2085 0.001 0.000 0.001 0.000 facts.py:482(_tell) + 20 0.000 0.000 0.001 0.000 core.py:2984(parseImpl) + 540 0.000 0.000 0.001 0.000 _tensor_docs.py:8(add_docstr_all) + 1 0.000 0.000 0.001 0.001 __init__.py:32(message_from_string) + 1 0.000 0.000 0.001 0.001 base_parser.py:1() + 1 0.000 0.000 0.001 0.001 type_check.py:1() + 1 0.001 0.001 0.001 0.001 special.py:174(GenericIdentity) + 4 0.000 0.000 0.001 0.000 __init__.py:2295(_make_reduction_prim) + 1 0.000 0.000 0.001 0.001 initializers.py:65(_prepare_initializer) + 1 0.000 0.000 0.001 0.001 bdf.py:1() + 53 0.000 0.000 0.001 0.000 core.py:2315(__init__) + 643 0.000 0.000 0.001 0.000 _docscrape.py:91(peek) + 155 0.000 0.000 0.001 0.000 core.py:1915(__eq__) + 1 0.000 0.000 0.001 0.001 spherical_harmonics.py:1() + 1 0.000 0.000 0.001 0.001 _sarif_log.py:1() + 1 0.000 0.000 0.001 0.001 _physical_location.py:1() + 1164 0.001 0.000 0.001 0.000 {built-in method torch._C._add_docstr} + 133 0.000 0.000 0.001 0.000 {method 'sort' of 'list' objects} + 843 0.001 0.000 0.001 0.000 core.py:757(preParse) + 114 0.000 0.000 0.001 0.000 dataclasses.py:573() + 1 0.000 0.000 0.001 0.001 _core.py:625(PlotAccessor) + 1 0.000 0.000 0.001 0.001 parser.py:59(parsestr) + 1 0.000 0.000 0.001 0.001 ctx_fp.py:18(__init__) + 1 0.000 0.000 0.001 0.001 _fix.py:1() + 1 0.000 0.000 0.001 0.001 initializers.py:12(_make_viztracer_initializer_and_initargs) + 1 0.000 0.000 0.001 0.001 binary.py:174() + 1 0.000 0.000 0.001 0.001 _location_relationship.py:1() + 1 0.000 0.000 0.001 0.001 _builtins.py:1() + 4430 0.001 0.000 0.001 0.000 inspect.py:3032(parameters) + 22 0.000 0.000 0.001 0.000 __init__.py:336(__init__) + 10 0.000 0.000 0.001 0.000 :412(realpath) + 1 0.000 0.000 0.001 0.001 parser.py:41(parse) + 1 0.000 0.000 0.001 0.001 _edge.py:1() + 1 0.000 0.000 0.001 0.001 piecewise.py:1() + 1 0.000 0.000 0.001 0.001 ipaddress.py:2265(_IPv6Constants) + 3 0.000 0.000 0.001 0.000 :1(_held_figure) + 1 0.000 0.000 0.001 0.001 internal.py:1() + 6 0.000 0.000 0.001 0.000 _strptime.py:238(pattern) + 208 0.000 0.000 0.001 0.000 cloudpickle.py:195(_whichmodule) + 1256 0.000 0.000 0.001 0.000 typing.py:888(__eq__) + 16 0.000 0.000 0.001 0.000 doc.py:117(window_agg_numba_parameters) + 341 0.001 0.000 0.001 0.000 typing.py:2561(overload) + 7/5 0.000 0.000 0.001 0.000 functools.py:981(__get__) + 2 0.000 0.000 0.001 0.000 sysconfig.py:621(get_path) + 1 0.000 0.000 0.001 0.001 binrel.py:1() + 2 0.000 0.000 0.001 0.000 types.py:1() + 14 0.000 0.000 0.001 0.000 extension.py:128(wrapper) + 4 0.000 0.000 0.001 0.000 typing.py:2930(__new__) + 2 0.000 0.000 0.001 0.000 sysconfig.py:609(get_paths) + 1 0.000 0.000 0.001 0.001 request.py:939(AbstractBasicAuthHandler) + 1 0.000 0.000 0.001 0.001 _external_property_file_reference.py:1() + 1 0.000 0.000 0.001 0.001 _edge_traversal.py:1() + 494 0.000 0.000 0.001 0.000 dataclasses.py:820(_set_qualname) + 16 0.000 0.000 0.001 0.000 fromnumeric.py:2955(prod) + 1 0.000 0.000 0.001 0.001 clip_grad.py:1() + 1 0.000 0.000 0.001 0.001 _interpolative_backend.py:1() + 1 0.000 0.000 0.001 0.001 _stack_frame.py:1() + 28 0.000 0.000 0.001 0.000 ipaddress.py:2189(__init__) + 18 0.001 0.000 0.001 0.000 arrayprint.py:1564(_guarded_repr_or_str) + 1 0.000 0.000 0.001 0.001 pickle.py:197() + 2 0.000 0.000 0.001 0.000 sysconfig.py:261(_expand_vars) + 1 0.000 0.000 0.001 0.001 _trace.py:1() + 1 0.000 0.000 0.001 0.001 encoder.py:1() + 1 0.000 0.000 0.001 0.001 csv.py:1() + 2 0.000 0.000 0.001 0.000 qconfig.py:1() + 1 0.000 0.000 0.001 0.001 timeouts.py:1() + 1 0.000 0.000 0.001 0.001 hdfs.py:1() + 595 0.001 0.000 0.001 0.000 enum.py:744(__delattr__) + 2158 0.001 0.000 0.001 0.000 {method 'items' of 'dict' objects} + 1 0.000 0.000 0.001 0.001 interpreter.py:16(Interpreter) + 1 0.000 0.000 0.001 0.001 queue.py:1() + 87 0.000 0.000 0.001 0.000 sympify.py:102(sympify) + 105 0.001 0.000 0.001 0.000 {built-in method posix.write} + 1914 0.001 0.000 0.001 0.000 {method 'find' of 'bytearray' objects} + 1 0.000 0.000 0.001 0.001 _pyio.py:1() + 9 0.000 0.000 0.001 0.000 _multivariate.py:5506(_docfill) + 2 0.000 0.000 0.001 0.000 covering.py:1() + 126 0.000 0.000 0.001 0.000 enum.py:975(_find_data_type_) + 1 0.000 0.000 0.001 0.001 _symbolic_trace.py:204(Tracer) + 85 0.000 0.000 0.001 0.000 utils.py:61(reverse_dict) + 1 0.000 0.000 0.001 0.001 exprtools.py:1() + 817 0.000 0.000 0.001 0.000 enum.py:58(_is_sunder) + 10 0.000 0.000 0.001 0.000 symbol.py:586(symbols) + 1 0.000 0.000 0.001 0.001 facts.py:1() + 1 0.000 0.000 0.001 0.001 accessors.py:1() + 1 0.000 0.000 0.001 0.001 meta_utils.py:1() + 2 0.000 0.000 0.001 0.000 logger.py:1() + 1301 0.000 0.000 0.001 0.000 _docscrape.py:81(is_empty) + 1 0.000 0.000 0.001 0.001 annotations.py:1() + 1 0.000 0.000 0.001 0.001 dispatcher.py:1() + 1 0.000 0.000 0.001 0.001 reportviews.py:1() + 2705 0.001 0.000 0.001 0.000 :413(has_location) + 2 0.000 0.000 0.001 0.000 synchronize.py:1() + 1 0.000 0.000 0.001 0.001 _tool_component_reference.py:1() + 2 0.000 0.000 0.001 0.000 operations.py:1() + 15 0.000 0.000 0.001 0.000 tokenize.py:299(detect_encoding) + 2 0.000 0.000 0.001 0.000 fuse_modules.py:1() + 1002 0.000 0.000 0.001 0.000 docscrape.py:87(is_empty) + 544 0.000 0.000 0.001 0.000 registration.py:135(__init__) + 2 0.000 0.000 0.001 0.000 construction.py:1() + 111 0.000 0.000 0.001 0.000 _parser.py:265(getuntil) + 1101 0.000 0.000 0.001 0.000 _parser.py:79(groups) + 1 0.001 0.001 0.001 0.001 entities.py:1() + 129 0.000 0.000 0.001 0.000 inspect.py:2065(_signature_is_builtin) + 2492 0.001 0.000 0.001 0.000 :1122(get_filename) + 80 0.000 0.000 0.001 0.000 popen_loky_posix.py:48(duplicate_for_child) + 1 0.000 0.000 0.001 0.001 DAG.py:228(add_edges_from) + 1293 0.001 0.000 0.001 0.000 inspect.py:1181(tokeneater) + 1 0.000 0.000 0.001 0.001 _package_pickler.py:1() + 1 0.000 0.000 0.001 0.001 runner.py:1() + 385 0.000 0.000 0.001 0.000 _util.py:335() + 1 0.000 0.000 0.001 0.001 _multiformat_message_string.py:1() + 1 0.000 0.000 0.001 0.001 beta.py:1() + 16 0.000 0.000 0.001 0.000 fromnumeric.py:69(_wrapreduction) + 1 0.000 0.000 0.001 0.001 evalf.py:1() + 4030 0.001 0.000 0.001 0.000 inspect.py:2743(default) + 1 0.000 0.000 0.001 0.001 _linprog_rs.py:1() + 1 0.000 0.000 0.001 0.001 charset.py:1() + 1 0.000 0.000 0.001 0.001 comm.py:1() + 1 0.000 0.000 0.001 0.001 trf.py:1() + 1 0.000 0.000 0.001 0.001 util.py:447(spawnv_passfds) + 1 0.000 0.000 0.001 0.001 groundtypes.py:1() + 120 0.000 0.000 0.001 0.000 popen_loky_posix.py:52(poll) + 1 0.000 0.000 0.001 0.001 result.py:1() + 26 0.000 0.000 0.001 0.000 core.py:6832(__init__) + 1 0.000 0.000 0.001 0.001 containers.py:1() + 11/10 0.000 0.000 0.001 0.000 :421(_joinrealpath) + 1 0.000 0.000 0.001 0.001 options.py:1() + 1 0.000 0.000 0.001 0.001 backend_registry.py:1() + 1 0.000 0.000 0.001 0.001 __init__.py:330() + 8 0.000 0.000 0.001 0.000 BayesianNetwork.py:102(add_edge) + 217 0.000 0.000 0.001 0.000 {built-in method numpy.array} + 1 0.000 0.000 0.001 0.001 feedparser.py:173(feed) + 1 0.000 0.000 0.001 0.001 shape_prop.py:1() + 8 0.000 0.000 0.000 0.000 __init__.py:2411(normalize_path) + 104 0.000 0.000 0.000 0.000 _compiler.py:386() + 1 0.000 0.000 0.000 0.000 _lobpcg.py:1() + 1 0.000 0.000 0.000 0.000 densebasic.py:1() + 1 0.000 0.000 0.000 0.000 libintmath.py:1() + 9 0.000 0.000 0.000 0.000 _dill.py:136(get_file_type) + 1 0.000 0.000 0.000 0.000 auto.py:1() + 13 0.000 0.000 0.000 0.000 _deprecation.py:20(decorator) + 2 0.000 0.000 0.000 0.000 __init__.py:2078(_make_copy_from_view) + 3 0.000 0.000 0.000 0.000 typing.py:2893(NamedTuple) + 1 0.000 0.000 0.000 0.000 process_executor.py:285(__init__) + 112 0.000 0.000 0.000 0.000 synchronize.py:117(__getstate__) + 1 0.000 0.000 0.000 0.000 _sources.py:1() + 3 0.000 0.000 0.000 0.000 timedeltas.py:1() + 618 0.000 0.000 0.000 0.000 dataclasses.py:287(__init__) + 399 0.000 0.000 0.000 0.000 _collections.py:20(__missing__) + 1 0.000 0.000 0.000 0.000 vf2userfunc.py:1() + 2 0.000 0.000 0.000 0.000 _distn_infrastructure.py:4033(get_distribution_names) + 1 0.000 0.000 0.000 0.000 argparse.py:1() + 26 0.000 0.000 0.000 0.000 core.py:6837(getdoc) + 1 0.000 0.000 0.000 0.000 ndim_array.py:1() + 387 0.000 0.000 0.000 0.000 inspect.py:1947(_signature_get_user_defined_method) + 1 0.000 0.000 0.000 0.000 _property_bag.py:1() + 394/387 0.000 0.000 0.000 0.000 {built-in method builtins.repr} + 157/148 0.000 0.000 0.000 0.000 fake_tensor.py:92(contains_tensor_types) + 1 0.000 0.000 0.000 0.000 dtypes.py:628(DatetimeTZDtype) + 1 0.000 0.000 0.000 0.000 ipaddress.py:1542(_IPv4Constants) + 2 0.000 0.000 0.000 0.000 core.py:2973(re_match) + 17 0.000 0.000 0.000 0.000 functools.py:852(register) + 1 0.000 0.000 0.000 0.000 dlpack.py:1() + 1 0.000 0.000 0.000 0.000 _kde.py:1() + 2568 0.000 0.000 0.000 0.000 version.py:453(_parse_letter_version) + 1 0.000 0.000 0.000 0.000 _rgi.py:1() + 54 0.000 0.000 0.000 0.000 decorators.py:35(deco) + 1 0.000 0.000 0.000 0.000 glob.py:1() + 397 0.000 0.000 0.000 0.000 docscrape.py:97(peek) + 1 0.000 0.000 0.000 0.000 trf_linear.py:1() + 1 0.000 0.000 0.000 0.000 {built-in method _posixsubprocess.fork_exec} + 6 0.000 0.000 0.000 0.000 printer.py:388(decorator) + 186 0.000 0.000 0.000 0.000 enum.py:929(_check_for_existing_members_) + 1 0.000 0.000 0.000 0.000 zipfile.py:1() + 2 0.000 0.000 0.000 0.000 traceback.py:29(format_list) + 1 0.000 0.000 0.000 0.000 queues.py:32(__init__) + 385 0.000 0.000 0.000 0.000 _util.py:357() + 2 0.000 0.000 0.000 0.000 feedparser.py:178(_call_parse) + 2 0.000 0.000 0.000 0.000 core.py:2961(re) + 1 0.000 0.000 0.000 0.000 datapipes.py:1() + 1 0.000 0.000 0.000 0.000 radsimp.py:1() + 1 0.000 0.000 0.000 0.000 _special_locations.py:1() + 1 0.000 0.000 0.000 0.000 apply.py:1() + 3 0.000 0.000 0.000 0.000 decorators.py:1() + 1 0.000 0.000 0.000 0.000 hadamard.py:1() + 1 0.000 0.000 0.000 0.000 add.py:1() + 2 0.000 0.000 0.000 0.000 conv_fused.py:1() + 1 0.000 0.000 0.000 0.000 matadd.py:1() + 1 0.000 0.000 0.000 0.000 datetimelike.py:1932(TimelikeOps) + 385 0.000 0.000 0.000 0.000 _util.py:354() + 1 0.000 0.000 0.000 0.000 package_exporter.py:186(PackageExporter) + 1 0.000 0.000 0.000 0.000 __init__.py:291() + 385 0.000 0.000 0.000 0.000 _util.py:340() + 1 0.000 0.000 0.000 0.000 base.py:112(ExtensionArray) + 1 0.000 0.000 0.000 0.000 queues.py:37(__init__) + 1 0.000 0.000 0.000 0.000 permutation.py:1() + 1 0.000 0.000 0.000 0.000 collate.py:1() + 2 0.000 0.000 0.000 0.000 __init__.py:252(WordSet) + 6 0.000 0.000 0.000 0.000 printer.py:356(__init__) + 2 0.000 0.000 0.000 0.000 sparsetools.py:1() + 402 0.000 0.000 0.000 0.000 {method '__reduce_ex__' of 'object' objects} + 1 0.000 0.000 0.000 0.000 rk.py:1() + 10 0.000 0.000 0.000 0.000 _torch_docs.py:10(parse_kwargs) + 19 0.000 0.000 0.000 0.000 ipaddress.py:1475(__init__) + 2 0.000 0.000 0.000 0.000 traceback.py:1() + 26 0.000 0.000 0.000 0.000 _jit_internal.py:1125(_qualified_name) + 24 0.000 0.000 0.000 0.000 core.py:2915(__init__) + 171 0.000 0.000 0.000 0.000 typing.py:1297(__instancecheck__) + 1 0.000 0.000 0.000 0.000 parallel.py:797(_terminate_backend) + 119 0.000 0.000 0.000 0.000 extension.py:35(_inherit_from_data) + 1 0.000 0.000 0.000 0.000 structures.py:1() + 1 0.000 0.000 0.000 0.000 case.py:1() + 333 0.000 0.000 0.000 0.000 _docscrape.py:87(is_unindented) + 52 0.000 0.000 0.000 0.000 common.py:33(wrapper) + 3 0.000 0.000 0.000 0.000 decorators.py:111(sympify_method_args) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:571(terminate) + 1565 0.000 0.000 0.000 0.000 dataclasses.py:425() + 316 0.000 0.000 0.000 0.000 {method 'replace' of 'code' objects} + 1 0.000 0.000 0.000 0.000 _matfuncs_sqrtm.py:1() + 1 0.000 0.000 0.000 0.000 _normalize.py:1() + 52 0.000 0.000 0.000 0.000 package_importer.py:687(_patched_getfile) + 1 0.000 0.000 0.000 0.000 _odswriter.py:1() + 1 0.000 0.000 0.000 0.000 lzma.py:1() + 1 0.000 0.000 0.000 0.000 sharding.py:1() + 2 0.000 0.000 0.000 0.000 traverse.py:1() + 1 0.000 0.000 0.000 0.000 polyerrors.py:1() + 263 0.000 0.000 0.000 0.000 {method 'get_function' of 'pyarrow._compute.FunctionRegistry' objects} + 27 0.000 0.000 0.000 0.000 weakref.py:347(__new__) + 24 0.000 0.000 0.000 0.000 {method 'readline' of '_io.BufferedReader' objects} + 23 0.000 0.000 0.000 0.000 overrides.py:221(decorator) + 2 0.000 0.000 0.000 0.000 feedparser.py:218(_parsegen) + 385 0.000 0.000 0.000 0.000 _util.py:350() + 1 0.000 0.000 0.000 0.000 scope.py:1() + 1 0.000 0.000 0.000 0.000 distribution.py:1() + 1 0.000 0.000 0.000 0.000 arrayprint.py:1() + 2 0.000 0.000 0.000 0.000 inspect.py:592(getmembers) + 1 0.000 0.000 0.000 0.000 asserters.py:1() + 54 0.000 0.000 0.000 0.000 decorators.py:41(__sympifyit) + 1 0.000 0.000 0.000 0.000 gtk.py:1() + 2492 0.000 0.000 0.000 0.000 :931(create_module) + 1893 0.000 0.000 0.000 0.000 _docscrape.py:44(__getitem__) + 24 0.000 0.000 0.000 0.000 tempfile.py:142(rng) + 16 0.000 0.000 0.000 0.000 process.py:350(__reduce__) + 1 0.000 0.000 0.000 0.000 _memmapping_reducer.py:616(_unlink_temporary_resources) + 1077 0.000 0.000 0.000 0.000 dataclasses.py:646(_is_classvar) + 1753 0.000 0.000 0.000 0.000 {method 'encode' of 'str' objects} + 1 0.000 0.000 0.000 0.000 hashlib.py:1() + 53 0.000 0.000 0.000 0.000 facts.py:451() + 1 0.000 0.000 0.000 0.000 solveset.py:1() + 1 0.000 0.000 0.000 0.000 interval.py:147(IntervalIndex) + 1796 0.000 0.000 0.000 0.000 docscrape.py:50(__getitem__) + 2209 0.000 0.000 0.000 0.000 {built-in method builtins.iter} + 1 0.000 0.000 0.000 0.000 unicode.py:1() + 3 0.000 0.000 0.000 0.000 functions.py:1() + 1 0.000 0.000 0.000 0.000 _spherical_voronoi.py:1() + 2 0.000 0.000 0.000 0.000 inspect.py:550(_getmembers) + 1 0.000 0.000 0.000 0.000 graph_manipulation.py:1() + 463 0.000 0.000 0.000 0.000 dataclasses.py:327(__set_name__) + 1 0.000 0.000 0.000 0.000 process_executor.py:491(__init__) + 9 0.000 0.000 0.000 0.000 accessor.py:141(add_delegate_accessors) + 24 0.000 0.000 0.000 0.000 random.py:493() + 751 0.000 0.000 0.000 0.000 _parser.py:166(__setitem__) + 1944 0.000 0.000 0.000 0.000 {built-in method sys.getrecursionlimit} + 2 0.000 0.000 0.000 0.000 traceback.py:513(format) + 1 0.000 0.000 0.000 0.000 lie_group.py:1() + 11 0.000 0.000 0.000 0.000 nanops.py:75(__init__) + 1 0.000 0.000 0.000 0.000 grad_mode.py:1() + 43 0.000 0.000 0.000 0.000 decompositions.py:43(type_casts) + 13 0.000 0.000 0.000 0.000 expr.py:188(_filter_nodes) + 52 0.000 0.000 0.000 0.000 common.py:39(_unpack_zerodim_and_defer) + 194 0.000 0.000 0.000 0.000 _posix_reduction.py:22(_mk_inheritable) + 144 0.000 0.000 0.000 0.000 :319(decode) + 1 0.000 0.000 0.000 0.000 _direct_py.py:1() + 1 0.000 0.000 0.000 0.000 nanfunctions.py:1() + 1 0.000 0.000 0.000 0.000 symbolic_opset12.py:1() + 1 0.000 0.000 0.000 0.000 constraints.py:1() + 1 0.000 0.000 0.000 0.000 selectors.py:1() + 122 0.000 0.000 0.000 0.000 enum.py:769(__getattr__) + 1 0.000 0.000 0.000 0.000 facts.py:114() + 1 0.000 0.000 0.000 0.000 _ellip_harm.py:1() + 2 0.000 0.000 0.000 0.000 clique.py:1() + 52 0.000 0.000 0.000 0.000 accessor.py:118(_forbid_nonstring_types) + 1 0.000 0.000 0.000 0.000 symbolic_opset8.py:1() + 9 0.000 0.000 0.000 0.000 accessor.py:58(_add_delegate_accessors) + 618 0.000 0.000 0.000 0.000 _inspect.py:13(ismethod) + 1 0.000 0.000 0.000 0.000 nvfuser_prims.py:664(register_var_mean) + 1 0.000 0.000 0.000 0.000 correlation.py:1() + 26 0.000 0.000 0.000 0.000 _sources.py:37(normalize_source_lines) + 1 0.000 0.000 0.000 0.000 _tensor.py:81(Tensor) + 1 0.000 0.000 0.000 0.000 _lbfgsb_py.py:1() + 20 0.000 0.000 0.000 0.000 generic.py:39(create_pandas_abc_type) + 2 0.000 0.000 0.000 0.000 polyutils.py:1() + 3 0.000 0.000 0.000 0.000 queues.py:1() + 2 0.000 0.000 0.000 0.000 determinant.py:1() + 1 0.000 0.000 0.000 0.000 expr_with_limits.py:1() + 1 0.000 0.000 0.000 0.000 parametrize.py:1() + 1 0.000 0.000 0.000 0.000 code.py:1() + 14 0.000 0.000 0.000 0.000 hashlib.py:126(__get_openssl_constructor) + 1 0.000 0.000 0.000 0.000 _decorators.py:22(deprecate) + 1 0.000 0.000 0.000 0.000 tempfile.py:297(gettempdir) + 18 0.000 0.000 0.000 0.000 logic.py:370(_eval_propagate_not) + 1 0.000 0.000 0.000 0.000 merge.py:1() + 1 0.000 0.000 0.000 0.000 _quadpack_py.py:1() + 29 0.000 0.000 0.000 0.000 nanops.py:77() + 1 0.000 0.000 0.000 0.000 order.py:1() + 1 0.000 0.000 0.000 0.000 error.py:1() + 39 0.000 0.000 0.000 0.000 {built-in method posix.pipe} + 1 0.000 0.000 0.000 0.000 _entry_points.py:1() + 4 0.000 0.000 0.000 0.000 core.py:1437(__mul__) + 16 0.000 0.000 0.000 0.000 process.py:234(ident) + 1 0.000 0.000 0.000 0.000 lowrank_multivariate_normal.py:1() + 142 0.000 0.000 0.000 0.000 _compiler.py:465(_get_charset_prefix) + 1 0.000 0.000 0.000 0.000 grouper.py:1() + 907 0.000 0.000 0.000 0.000 utils.py:56() + 1 0.000 0.000 0.000 0.000 ewm.py:140(ExponentialMovingWindow) + 375 0.000 0.000 0.000 0.000 :818(fsdecode) + 1 0.000 0.000 0.000 0.000 tempfile.py:285(_gettempdir) + 741 0.000 0.000 0.000 0.000 facts.py:65(_as_pair) + 1 0.000 0.000 0.000 0.000 _odepack_py.py:1() + 126 0.000 0.000 0.000 0.000 expr.py:192() + 1 0.000 0.000 0.000 0.000 padding.py:1() + 8 0.000 0.000 0.000 0.000 typing_extensions.py:618(__new__) + 2 0.000 0.000 0.000 0.000 streams.py:1() + 1 0.000 0.000 0.000 0.000 normalforms.py:1() + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:1() + 1 0.000 0.000 0.000 0.000 server_process_global_profiler.py:1() + 1 0.000 0.000 0.000 0.000 _fitpack2.py:1() + 24 0.000 0.000 0.000 0.000 _add_newdocs_scalars.py:71(add_newdoc_for_scalar_type) + 4 0.000 0.000 0.000 0.000 typing.py:2953() + 180 0.000 0.000 0.000 0.000 functools.py:479(lru_cache) + 1 0.000 0.000 0.000 0.000 edge_augmentation.py:1() + 1 0.000 0.000 0.000 0.000 facts.py:213(rules_2prereq) + 2 0.000 0.000 0.000 0.000 unicode.py:63() + 1 0.000 0.000 0.000 0.000 array_comprehension.py:1() + 778 0.000 0.000 0.000 0.000 _ops.py:419(__init__) + 37 0.000 0.000 0.000 0.000 sorting.py:180(_nodes) + 1 0.000 0.000 0.000 0.000 masked.py:92(BaseMaskedArray) + 1 0.000 0.000 0.000 0.000 monkey.py:1() + 1 0.000 0.000 0.000 0.000 _rbfinterp.py:1() + 402 0.000 0.000 0.000 0.000 copyreg.py:104(__newobj__) + 1 0.000 0.000 0.000 0.000 decorators.py:356(argmap) + 1 0.000 0.000 0.000 0.000 _named_member_accessor.py:1() + 1 0.000 0.000 0.000 0.000 mstats.py:1() + 18 0.000 0.000 0.000 0.000 common.py:1751(pandas_dtype) + 1 0.000 0.000 0.000 0.000 current_flow_betweenness.py:1() + 1 0.000 0.000 0.000 0.000 tempfile.py:183(_get_default_tempdir) + 41 0.000 0.000 0.000 0.000 decorators.py:98(priority_decorator) + 310 0.000 0.000 0.000 0.000 pretty_symbology.py:10(U) + 22 0.000 0.000 0.000 0.000 enum.py:1505(__or__) + 2 0.000 0.000 0.000 0.000 _util.py:1() + 1 0.000 0.000 0.000 0.000 cupy.py:1() + 1 0.000 0.000 0.000 0.000 reductions.py:148() + 30 0.000 0.000 0.000 0.000 symbolic_opset9.py:292(_apply) + 68 0.000 0.000 0.000 0.000 typing.py:1646() + 1 0.000 0.000 0.000 0.000 container.py:42(Sequential) + 1 0.000 0.000 0.000 0.000 _zeros_py.py:1() + 1 0.000 0.000 0.000 0.000 _validation.py:1() + 46 0.000 0.000 0.000 0.000 _inspect.py:140(formatargspec) + 1 0.000 0.000 0.000 0.000 importtools.py:1() + 1 0.000 0.000 0.000 0.000 base64.py:1() + 1 0.000 0.000 0.000 0.000 sparse6.py:1() + 2 0.000 0.000 0.000 0.000 threading.py:849(__init__) + 203 0.000 0.000 0.000 0.000 {built-in method _sre.compile} + 3 0.000 0.000 0.000 0.000 facts.py:289(split_alpha_beta) + 1 0.000 0.000 0.000 0.000 bninput.py:1() + 612 0.000 0.000 0.000 0.000 exceptions.py:24(__init__) + 1 0.000 0.000 0.000 0.000 _exporter_states.py:1() + 1 0.000 0.000 0.000 0.000 _type_utils.py:58(JitScalarType) + 1 0.000 0.000 0.000 0.000 _flinalg_py.py:1() + 1 0.000 0.000 0.000 0.000 contextvars.py:1() + 601 0.000 0.000 0.000 0.000 dataclasses.py:509(_init_param) + 1 0.000 0.000 0.000 0.000 ctypeslib.py:1() + 1077 0.000 0.000 0.000 0.000 dataclasses.py:654(_is_initvar) + 1 0.000 0.000 0.000 0.000 _foreach_utils.py:1() + 1 0.000 0.000 0.000 0.000 threading.py:1() + 1 0.000 0.000 0.000 0.000 _lowrank.py:1() + 14 0.000 0.000 0.000 0.000 __init__.py:198(split) + 1 0.000 0.000 0.000 0.000 transformer.py:1() + 1 0.000 0.000 0.000 0.000 _tnc.py:1() + 1 0.000 0.000 0.000 0.000 residue_ntheory.py:1() + 2 0.000 0.000 0.000 0.000 normalization.py:1() + 1 0.000 0.000 0.000 0.000 polyoptions.py:299(Wrt) + 2 0.000 0.000 0.000 0.000 operations.py:603(register_handlerclass) + 1 0.000 0.000 0.000 0.000 helpers.py:14(delimited_list) + 4 0.000 0.000 0.000 0.000 iterative.py:120(combine) + 1 0.000 0.000 0.000 0.000 _cobyla_py.py:1() + 268 0.000 0.000 0.000 0.000 libmpf.py:322() + 171 0.000 0.000 0.000 0.000 typing.py:1572(__subclasscheck__) + 1 0.000 0.000 0.000 0.000 numpy.py:1() + 1 0.000 0.000 0.000 0.000 nonhomogeneous.py:1() + 406 0.000 0.000 0.000 0.000 _compiler.py:568(isstring) + 4 0.000 0.000 0.000 0.000 sparse.py:1() + 26 0.000 0.000 0.000 0.000 core.py:4948(__init__) + 1 0.000 0.000 0.000 0.000 vf2pp.py:1() + 325 0.000 0.000 0.000 0.000 function_base.py:451(_needs_add_docstring) + 1 0.000 0.000 0.000 0.000 _slsqp_py.py:1() + 258 0.000 0.000 0.000 0.000 function.py:150() + 2 0.000 0.000 0.000 0.000 quant_type.py:1() + 11 0.000 0.000 0.000 0.000 symbol.py:285(__new__) + 1 0.000 0.000 0.000 0.000 calendar.py:1() + 73 0.000 0.000 0.000 0.000 typing.py:1026(__typing_subst__) + 52 0.000 0.000 0.000 0.000 inspect.py:896(getfile) + 49 0.000 0.000 0.000 0.000 :786(keys) + 1 0.000 0.000 0.000 0.000 quaternion.py:1() + 50 0.000 0.000 0.000 0.000 core.py:4956(parseImpl) + 1 0.000 0.000 0.000 0.000 coreviews.py:1() + 1 0.000 0.000 0.000 0.000 _conversions.py:1() + 535 0.000 0.000 0.000 0.000 inspect.py:2465() + 1 0.000 0.000 0.000 0.000 generic.py:781(DataFrameGroupBy) + 1 0.000 0.000 0.000 0.000 _meta.py:1() + 213 0.000 0.000 0.000 0.000 ctx_fp.py:51(_wrap_specfun) + 2 0.000 0.000 0.000 0.000 _exceptions.py:1() + 1 0.000 0.000 0.000 0.000 gammasimp.py:1() + 1 0.000 0.000 0.000 0.000 proxy.py:83(TracerBase) + 1 0.000 0.000 0.000 0.000 __init__.py:3087(DistInfoDistribution) + 1 0.000 0.000 0.000 0.000 _linesearch.py:1() + 72 0.000 0.000 0.000 0.000 traceback.py:458(format_frame_summary) + 1 0.000 0.000 0.000 0.000 _nnls.py:1() + 26 0.000 0.000 0.000 0.000 _sources.py:102(make_source_context) + 4 0.000 0.000 0.000 0.000 constants.py:1() + 16 0.000 0.000 0.000 0.000 {method 'reduce' of 'numpy.ufunc' objects} + 21 0.000 0.000 0.000 0.000 tokenize.py:323(read_or_stop) + 1 0.000 0.000 0.000 0.000 _named_member_accessor.py:85(NamedMemberAccessor) + 1 0.000 0.000 0.000 0.000 symbolic_shapes.py:922(ShapeEnv) + 1 0.000 0.000 0.000 0.000 pickletools.py:2224(assure_pickle_consistency) + 1 0.000 0.000 0.000 0.000 galoistools.py:1() + 1 0.000 0.000 0.000 0.000 symbolic_opset13.py:1() + 1 0.000 0.000 0.000 0.000 struct.py:1() + 1 0.000 0.000 0.000 0.000 profiler_util.py:1() + 1 0.000 0.000 0.000 0.000 _lobpcg.py:257(LOBPCGAutogradFunction) + 3 0.000 0.000 0.000 0.000 matching.py:1() + 1 0.000 0.000 0.000 0.000 detect.py:1() + 1 0.000 0.000 0.000 0.000 _expm_multiply.py:1() + 15 0.000 0.000 0.000 0.000 symbolic_opset10.py:67(_apply) + 1 0.000 0.000 0.000 0.000 _arrays.py:1() + 1 0.000 0.000 0.000 0.000 graph_module.py:283(GraphModule) + 47 0.000 0.000 0.000 0.000 sympify.py:503(_sympify) + 1 0.000 0.000 0.000 0.000 container.py:684(ParameterDict) + 1 0.000 0.000 0.000 0.000 common.py:422() + 225 0.000 0.000 0.000 0.000 function.py:145() + 660 0.000 0.000 0.000 0.000 {method 'update' of 'set' objects} + 1 0.000 0.000 0.000 0.000 _script.py:892(_get_methods) + 2 0.000 0.000 0.000 0.000 sysconfig.py:253(_extend_dict) + 1 0.000 0.000 0.000 0.000 heapq.py:1() + 1 0.000 0.000 0.000 0.000 _memmapping_reducer.py:648(_try_delete_folder) + 123 0.000 0.000 0.000 0.000 inspect.py:973(getmodule) + 1 0.000 0.000 0.000 0.000 lgmres.py:1() + 1 0.000 0.000 0.000 0.000 visualization.py:1() + 1 0.000 0.000 0.000 0.000 _numdiff.py:1() + 1 0.000 0.000 0.000 0.000 transformed_distribution.py:1() + 1 0.000 0.000 0.000 0.000 _binned_statistic.py:1() + 1 0.000 0.000 0.000 0.000 callable.py:171(CollatorIterDataPipe) + 1 0.000 0.000 0.000 0.000 polytools.py:101(Poly) + 1 0.000 0.000 0.000 0.000 pydoc.py:465(Doc) + 1 0.000 0.000 0.000 0.000 matexpr.py:36(MatrixExpr) + 1 0.000 0.000 0.000 0.000 gmpyfinitefield.py:1() + 26 0.000 0.000 0.000 0.000 _mangling.py:44(is_mangled) + 1 0.000 0.000 0.000 0.000 sasreader.py:1() + 1 0.000 0.000 0.000 0.000 mathml.py:1() + 186 0.000 0.000 0.000 0.000 docscrape.py:56(read) + 449 0.000 0.000 0.000 0.000 __init__.py:57(register_decomposition) + 364 0.000 0.000 0.000 0.000 typing.py:275(_check_generic) + 2 0.000 0.000 0.000 0.000 decorator.py:215(decorator) + 1 0.000 0.000 0.000 0.000 half_normal.py:1() + 43 0.000 0.000 0.000 0.000 ipaddress.py:1889(__init__) + 618 0.000 0.000 0.000 0.000 _inspect.py:26(isfunction) + 2 0.000 0.000 0.000 0.000 printing.py:1() + 1 0.000 0.000 0.000 0.000 array.py:160(ArrowExtensionArray) + 1 0.000 0.000 0.000 0.000 isoparser.py:1() + 1 0.000 0.000 0.000 0.000 conventions.py:1() + 2 0.000 0.000 0.000 0.000 hashlib.py:82(__get_builtin_constructor) + 1 0.000 0.000 0.000 0.000 _pep440.py:1() + 1 0.000 0.000 0.000 0.000 nvfuser_prims.py:771(register_view) + 1 0.000 0.000 0.000 0.000 _trustregion_dogleg.py:1() + 1 0.000 0.000 0.000 0.000 contains.py:1() + 4 0.000 0.000 0.000 0.000 __init__.py:218(finditer) + 52 0.000 0.000 0.000 0.000 core.py:894(__init__) + 16/8 0.000 0.000 0.000 0.000 backends.py:129(wrapper) + 462 0.000 0.000 0.000 0.000 inspect.py:300(ismethod) + 1 0.000 0.000 0.000 0.000 projections.py:1() + 222 0.000 0.000 0.000 0.000 wrappers.py:187(out_wrapper) + 1 0.000 0.000 0.000 0.000 functional_call.py:1() + 1 0.000 0.000 0.000 0.000 passthrough.py:1() + 12/2 0.000 0.000 0.000 0.000 core.py:1503(makeOptionalList) + 1 0.000 0.000 0.000 0.000 sysconfig.py:443(get_makefile_filename) + 1 0.000 0.000 0.000 0.000 runners.py:1() + 1 0.000 0.000 0.000 0.000 boykovkolmogorov.py:1() + 2 0.000 0.000 0.000 0.000 __init__.py:1593(cpu_times) + 1 0.000 0.000 0.000 0.000 chi2.py:1() + 9 0.000 0.000 0.000 0.000 _docscrape.py:276(_parse_see_also) + 1 0.000 0.000 0.000 0.000 warnings.py:1() + 1 0.000 0.000 0.000 0.000 pythonrational.py:1() + 36 0.000 0.000 0.000 0.000 docstrings.py:7(make_flex_doc) + 3 0.000 0.000 0.000 0.000 expr.py:283(disallowed) + 1 0.000 0.000 0.000 0.000 _decorator.py:1() + 4 0.000 0.000 0.000 0.000 _pyio.py:76(open) + 1 0.000 0.000 0.000 0.000 compatibility.py:1() + 1 0.000 0.000 0.000 0.000 beamsearch.py:1() + 15 0.000 0.000 0.000 0.000 resource_tracker.py:142(_check_alive) + 164 0.000 0.000 0.000 0.000 decorator.py:176(public) + 1 0.000 0.000 0.000 0.000 relativedelta.py:1() + 16 0.000 0.000 0.000 0.000 resource_tracker.py:87(getfd) + 2 0.000 0.000 0.000 0.000 mpelements.py:47(__init__) + 37 0.000 0.000 0.000 0.000 decorators.py:202(make_wrapped) + 14 0.000 0.000 0.000 0.000 core.py:8222(__init__) + 1 0.000 0.000 0.000 0.000 doccer.py:205(filldoc) + 508 0.000 0.000 0.000 0.000 enum.py:69(_is_internal_class) + 2 0.000 0.000 0.000 0.000 lazy.py:1() + 1 0.000 0.000 0.000 0.000 dtypes.py:823(PeriodDtype) + 453 0.000 0.000 0.000 0.000 wrappers.py:210() + 1 0.000 0.000 0.000 0.000 doccer.py:231(unindent_dict) + 1 0.000 0.000 0.000 0.000 graph.py:19(Node) + 1 0.000 0.000 0.000 0.000 dates.py:1() + 1 0.000 0.000 0.000 0.000 instancenorm.py:1() + 1 0.000 0.000 0.000 0.000 sql.py:1() + 241 0.000 0.000 0.000 0.000 dataclasses.py:410() + 1 0.000 0.000 0.000 0.000 base_parser.py:79(ParserBase) + 831 0.000 0.000 0.000 0.000 __init__.py:422() + 1 0.000 0.000 0.000 0.000 pythonfinitefield.py:1() + 1 0.000 0.000 0.000 0.000 parquet.py:1() + 1 0.000 0.000 0.000 0.000 core.py:450(DebugActions) + 1 0.000 0.000 0.000 0.000 _crosstab.py:1() + 614 0.000 0.000 0.000 0.000 _inspect.py:41(iscode) + 2 0.000 0.000 0.000 0.000 kind.py:287(_) + 770 0.000 0.000 0.000 0.000 __init__.py:2040(__init__) + 86 0.000 0.000 0.000 0.000 linecache.py:52(checkcache) + 1 0.000 0.000 0.000 0.000 graphviews.py:1() + 114 0.000 0.000 0.000 0.000 dataclasses.py:548() + 1 0.000 0.000 0.000 0.000 c10d_error_logger.py:1() + 1 0.000 0.000 0.000 0.000 encoders.py:1() + 23 0.000 0.000 0.000 0.000 core.py:4430(_generateDefaultName) + 1 0.000 0.000 0.000 0.000 expr.py:42(Expr) + 1 0.000 0.000 0.000 0.000 _compat_pickle.py:1() + 1 0.000 0.000 0.000 0.000 field.py:1() + 82 0.000 0.000 0.000 0.000 return_types.py:9(pytree_register_structseq) + 132 0.000 0.000 0.000 0.000 expr.py:181() + 1 0.000 0.000 0.000 0.000 realfield.py:45(__init__) + 2222 0.000 0.000 0.000 0.000 copy.py:182(_deepcopy_atomic) + 3 0.000 0.000 0.000 0.000 embedding_ops.py:1() + 8 0.000 0.000 0.000 0.000 process_executor.py:129(wakeup) + 1 0.000 0.000 0.000 0.000 join.py:112(Join) + 1 0.000 0.000 0.000 0.000 str.py:1() + 32 0.000 0.000 0.000 0.000 arraypad.py:454(_as_pairs) + 1 0.000 0.000 0.000 0.000 container.py:408(ModuleDict) + 9 0.000 0.000 0.000 0.000 random.py:119(__init__) + 1 0.000 0.000 0.000 0.000 _monkeytype_config.py:1() + 1 0.000 0.000 0.000 0.000 kronecker.py:1() + 2 0.000 0.000 0.000 0.000 fused.py:1() + 310 0.000 0.000 0.000 0.000 {built-in method unicodedata.lookup} + 1048 0.000 0.000 0.000 0.000 _ops.py:313(py_impl) + 1 0.000 0.000 0.000 0.000 doctest.py:1143(DocTestRunner) + 64 0.000 0.000 0.000 0.000 wrappers.py:294(BackwardsNotSupported) + 16 0.000 0.000 0.000 0.000 getlimits.py:476(__new__) + 144 0.000 0.000 0.000 0.000 {built-in method _codecs.utf_8_decode} + 1 0.000 0.000 0.000 0.000 arraylike.py:33(OpsMixin) + 1 0.000 0.000 0.000 0.000 pkgutil.py:1() + 1 0.000 0.000 0.000 0.000 gaussiandomains.py:1() + 85 0.000 0.000 0.000 0.000 docscrape.py:192(_strip) + 14 0.000 0.000 0.000 0.000 doccer.py:239(unindent_string) + 1 0.000 0.000 0.000 0.000 nccl.py:1() + 1465 0.000 0.000 0.000 0.000 {built-in method _stat.S_ISDIR} + 1 0.000 0.000 0.000 0.000 isoparser.py:42(isoparser) + 26 0.000 0.000 0.000 0.000 _sources.py:87(__init__) + 1 0.000 0.000 0.000 0.000 importer.py:1() + 1 0.000 0.000 0.000 0.000 _hook_iterator.py:1() + 8 0.000 0.000 0.000 0.000 generic.py:20(has_path) + 607 0.000 0.000 0.000 0.000 _decorators.py:314() + 18 0.000 0.000 0.000 0.000 base.py:494(find) + 1 0.000 0.000 0.000 0.000 polynomialring.py:1() + 1 0.000 0.000 0.000 0.000 integerring.py:1() + 1 0.000 0.000 0.000 0.000 period.py:115(PeriodArray) + 2 0.000 0.000 0.000 0.000 _multivariate.py:1854(__init__) + 14 0.000 0.000 0.000 0.000 core.py:8227(getdoc) + 252 0.000 0.000 0.000 0.000 __init__.py:2620(is_version_line) + 30 0.000 0.000 0.000 0.000 utils.py:104(__init__) + 170 0.000 0.000 0.000 0.000 docscrape.py:35(__init__) + 1 0.000 0.000 0.000 0.000 sysconfig.py:1() + 420 0.000 0.000 0.000 0.000 _ops.py:506() + 1 0.000 0.000 0.000 0.000 options.py:43(TensorPipeRpcBackendOptions) + 1 0.000 0.000 0.000 0.000 ctx_iv.py:1() + 225 0.000 0.000 0.000 0.000 iterables.py:2956(is_sequence) + 449 0.000 0.000 0.000 0.000 facts.py:479(__init__) + 3 0.000 0.000 0.000 0.000 _common.py:393(wrapper) + 16 0.000 0.000 0.000 0.000 queues.py:37(__getstate__) + 2 0.000 0.000 0.000 0.000 facts.py:304(rules_beta) + 1 0.000 0.000 0.000 0.000 arraysetops.py:1() + 1 0.000 0.000 0.000 0.000 _multivariate.py:2592(__init__) + 390 0.000 0.000 0.000 0.000 typing.py:2617(final) + 1 0.000 0.000 0.000 0.000 bisect.py:1() + 1 0.000 0.000 0.000 0.000 msvc.py:1() + 1 0.000 0.000 0.000 0.000 depends.py:1() + 35 0.000 0.000 0.000 0.000 __init__.py:57(find_spec) + 30 0.000 0.000 0.000 0.000 ipaddress.py:1282(__init__) + 2634 0.000 0.000 0.000 0.000 {built-in method builtins.chr} + 1 0.000 0.000 0.000 0.000 interval_arithmetic.py:1() + 3 0.000 0.000 0.000 0.000 connectivity.py:1() + 1 0.000 0.000 0.000 0.000 flatten.py:1() + 1 0.000 0.000 0.000 0.000 funcmatrix.py:1() + 1 0.000 0.000 0.000 0.000 transpose.py:1() + 8 0.000 0.000 0.000 0.000 connection.py:181(send_bytes) + 1242 0.000 0.000 0.000 0.000 version.py:519() + 1 0.000 0.000 0.000 0.000 conditionset.py:1() + 309 0.000 0.000 0.000 0.000 types.py:164(__init__) + 1 0.000 0.000 0.000 0.000 _fit.py:1() + 279 0.000 0.000 0.000 0.000 _distn_infrastructure.py:763() + 2 0.000 0.000 0.000 0.000 textwrap.py:386(fill) + 23 0.000 0.000 0.000 0.000 __init__.py:1378(_fixupParents) + 24 0.000 0.000 0.000 0.000 __init__.py:315(_subx) + 3 0.000 0.000 0.000 0.000 context.py:68(cpu_count) + 1 0.000 0.000 0.000 0.000 filelister.py:1() + 1 0.000 0.000 0.000 0.000 _decomp_schur.py:1() + 1 0.000 0.000 0.000 0.000 plane.py:1() + 1 0.000 0.000 0.000 0.000 _encoded_words.py:1() + 544 0.000 0.000 0.000 0.000 registration.py:267(onnx_symbolic) + 12 0.000 0.000 0.000 0.000 decorator.py:309(deprecated_decorator) + 8 0.000 0.000 0.000 0.000 _contextlib.py:123(__call__) + 1 0.000 0.000 0.000 0.000 _mixins.py:96(NDArrayBackedExtensionArray) + 244 0.000 0.000 0.000 0.000 {built-in method builtins.locals} + 1 0.000 0.000 0.000 0.000 gammazeta.py:1372() + 1 0.000 0.000 0.000 0.000 string_arrow.py:1() + 109 0.000 0.000 0.000 0.000 typing.py:1947(_caller) + 1 0.000 0.000 0.000 0.000 net_min_base.py:89(_MinimizerBase) + 360 0.000 0.000 0.000 0.000 {method 'copy' of 'dict' objects} + 1 0.000 0.000 0.000 0.000 sparse_ndim_array.py:1() + 203 0.000 0.000 0.000 0.000 _parser.py:954(fix_flags) + 2 0.000 0.000 0.000 0.000 mixins.py:1() + 1 0.000 0.000 0.000 0.000 nvfuser_prims.py:605(register_rand_like) + 1 0.000 0.000 0.000 0.000 adjoint.py:1() + 267 0.000 0.000 0.000 0.000 libmpf.py:291(from_man_exp) + 1 0.000 0.000 0.000 0.000 selecting.py:1() + 13 0.000 0.000 0.000 0.000 typing.py:2035(__init_subclass__) + 1 0.000 0.000 0.000 0.000 timeouts.py:26(Timeout) + 18 0.000 0.000 0.000 0.000 BIF.py:168(probability_block) + 1 0.000 0.000 0.000 0.000 ctx_mp.py:96(init_builtins) + 1 0.000 0.000 0.000 0.000 align.py:1() + 1 0.000 0.000 0.000 0.000 torch_version.py:1() + 1 0.000 0.000 0.000 0.000 _pslinux.py:261(set_scputimes_ntuple) + 1 0.000 0.000 0.000 0.000 frequencies.py:1() + 23 0.000 0.000 0.000 0.000 symbolic_shapes.py:699(_make_node_magic) + 743 0.000 0.000 0.000 0.000 {method 'rsplit' of 'str' objects} + 1 0.000 0.000 0.000 0.000 message.py:135(Message) + 2 0.000 0.000 0.000 0.000 fuser_method_mappings.py:1() + 62 0.000 0.000 0.000 0.000 core.py:3819() + 603 0.000 0.000 0.000 0.000 dataclasses.py:437(_field_assign) + 1 0.000 0.000 0.000 0.000 ctypeslib.py:362(_get_scalar_type_map) + 1 0.000 0.000 0.000 0.000 container.py:250(ModuleList) + 224 0.000 0.000 0.000 0.000 context.py:365(get_spawning_popen) + 1077 0.000 0.000 0.000 0.000 dataclasses.py:660(_is_kw_only) + 1075 0.000 0.000 0.000 0.000 {method 'keys' of 'dict' objects} + 1 0.000 0.000 0.000 0.000 range.py:66(RangeIndex) + 363 0.000 0.000 0.000 0.000 socket.py:78() + 1 0.000 0.000 0.000 0.000 grad.py:1() + 2 0.000 0.000 0.000 0.000 helper.py:1() + 1 0.000 0.000 0.000 0.000 param_fetch.py:1() + 1 0.000 0.000 0.000 0.000 stata.py:821(StataMissingValue) + 8 0.000 0.000 0.000 0.000 random.py:128(seed) + 1 0.000 0.000 0.000 0.000 discovery.py:1() + 144 0.000 0.000 0.000 0.000 context.py:371(assert_spawning) + 1 0.000 0.000 0.000 0.000 conflict.py:1() + 1 0.000 0.000 0.000 0.000 _comparison.py:30(ErrorMeta) + 1 0.000 0.000 0.000 0.000 ctypeslib.py:373() + 2 0.000 0.000 0.000 0.000 textwrap.py:361(fill) + 2 0.000 0.000 0.000 0.000 kcomponents.py:1() + 9 0.000 0.000 0.000 0.000 core.py:4147(_generateDefaultName) + 1 0.000 0.000 0.000 0.000 companion.py:1() + 4 0.000 0.000 0.000 0.000 signal.py:67(pthread_sigmask) + 5 0.000 0.000 0.000 0.000 core.py:1392(__radd__) + 16 0.000 0.000 0.000 0.000 queue.py:122(put) + 1 0.000 0.000 0.000 0.000 _comparison.py:310(Pair) + 1 0.000 0.000 0.000 0.000 nvfuser_prims.py:385(register_full) + 1 0.000 0.000 0.000 0.000 _adapters.py:42(CompatibilityFiles) + 12 0.000 0.000 0.000 0.000 _strptime.py:219(__seqToRE) + 1 0.000 0.000 0.000 0.000 records.py:1() + 364 0.000 0.000 0.000 0.000 socket.py:83() + 1 0.000 0.000 0.000 0.000 selector_events.py:1() + 1 0.000 0.000 0.000 0.000 _decorator.py:63(non_deterministic) + 2 0.000 0.000 0.000 0.000 textwrap.py:347(wrap) + 1 0.000 0.000 0.000 0.000 _text.py:1() + 1 0.000 0.000 0.000 0.000 upsampling.py:1() + 1 0.000 0.000 0.000 0.000 disk.py:105(delete_folder) + 544 0.000 0.000 0.000 0.000 registration.py:76(set_base) + 1 0.000 0.000 0.000 0.000 meijerint.py:1() + 387 0.000 0.000 0.000 0.000 __init__.py:724(__iter__) + 186 0.000 0.000 0.000 0.000 docscrape.py:21(strip_blank_lines) + 2 0.000 0.000 0.000 0.000 _memmapping_reducer.py:172(_get_temp_dir) + 1551 0.000 0.000 0.000 0.000 {method 'isupper' of 'str' objects} + 1 0.000 0.000 0.000 0.000 powerset.py:1() + 2064 0.000 0.000 0.000 0.000 {built-in method builtins.globals} + 365 0.000 0.000 0.000 0.000 socket.py:88() + 1 0.000 0.000 0.000 0.000 immutable_collections.py:1() + 3 0.000 0.000 0.000 0.000 __init__.py:305(_compile_repl) + 1 0.000 0.000 0.000 0.000 tarefa2.py:21(compile_bn2asp) + 146 0.000 0.000 0.000 0.000 misc.py:491(as_int) + 5 0.000 0.000 0.000 0.000 core.py:561(_setResultsName) + 1 0.000 0.000 0.000 0.000 trace.py:1() + 1 0.000 0.000 0.000 0.000 results.py:1() + 17 0.000 0.000 0.000 0.000 ctx_iv.py:407(_mpq) + 8 0.000 0.000 0.000 0.000 types.py:67(new_class) + 1 0.000 0.000 0.000 0.000 series_class.py:1() + 366 0.000 0.000 0.000 0.000 socket.py:93() + 1 0.000 0.000 0.000 0.000 kernighan_lin.py:1() + 1 0.000 0.000 0.000 0.000 _dill.py:321(Pickler) + 213 0.000 0.000 0.000 0.000 ctx_mp_python.py:1014(_wrap_specfun) + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:75(TensorKey) + 2 0.000 0.000 0.000 0.000 _strptime.py:88(__calc_month) + 1 0.000 0.000 0.000 0.000 warnings.py:20(SetuptoolsWarning) + 194 0.000 0.000 0.000 0.000 {built-in method posix.set_inheritable} + 59 0.000 0.000 0.000 0.000 _decorators.py:467(__call__) + 1 0.000 0.000 0.000 0.000 tz.py:1552(__call__) + 120 0.000 0.000 0.000 0.000 {built-in method posix.waitpid} + 1 0.000 0.000 0.000 0.000 bench.py:1() + 61 0.000 0.000 0.000 0.000 typing.py:1522(__mro_entries__) + 52 0.000 0.000 0.000 0.000 singleton.py:107(__getattr__) + 1 0.000 0.000 0.000 0.000 mul.py:92(Mul) + 1 0.000 0.000 0.000 0.000 _guards.py:83(Guard) + 8 0.000 0.000 0.000 0.000 state_name.py:8(store_state_names) + 1 0.000 0.000 0.000 0.000 rl.py:1() + 1 0.000 0.000 0.000 0.000 _meta.py:7(PackageMetadata) + 1 0.000 0.000 0.000 0.000 configparser.py:377(BasicInterpolation) + 1 0.000 0.000 0.000 0.000 __init__.py:327() + 1 0.000 0.000 0.000 0.000 latex.py:141(LatexPrinter) + 1 0.000 0.000 0.000 0.000 wishart.py:1() + 2 0.000 0.000 0.000 0.000 specifiers.py:681(SpecifierSet) + 1 0.000 0.000 0.000 0.000 curve.py:1() + 26 0.000 0.000 0.000 0.000 {slot wrapper '__init__' of 'object' objects} + 309 0.000 0.000 0.000 0.000 enum.py:228(__set_name__) + 1 0.000 0.000 0.000 0.000 queues.py:163(__init__) + 64 0.000 0.000 0.000 0.000 popen_loky_posix.py:26(__init__) + 20 0.000 0.000 0.000 0.000 _decorators.py:169(_deprecate_kwarg) + 1 0.000 0.000 0.000 0.000 libintmath.py:127() + 8 0.000 0.000 0.000 0.000 generic.py:41(shortest_path) + 159 0.000 0.000 0.000 0.000 function.py:147() + 856 0.000 0.000 0.000 0.000 version.py:263(epoch) + 1 0.000 0.000 0.000 0.000 parabola.py:1() + 1 0.000 0.000 0.000 0.000 ctx_iv.py:324(_init_builtins) + 1 0.000 0.000 0.000 0.000 gruntz.py:1() + 1 0.000 0.000 0.000 0.000 pytables.py:4757(AppendableMultiFrameTable) + 860 0.000 0.000 0.000 0.000 version.py:308(post) + 1 0.000 0.000 0.000 0.000 mixing.py:1() + 1 0.000 0.000 0.000 0.000 adaptive.py:1() + 3 0.000 0.000 0.000 0.000 six.py:882(wrapper) + 356 0.000 0.000 0.000 0.000 functools.py:421(_unwrap_partial) + 3 0.000 0.000 0.000 0.000 assume.py:176(__new__) + 9 0.000 0.000 0.000 0.000 BIF.py:324() + 2 0.000 0.000 0.000 0.000 _strptime.py:80(__calc_weekday) + 1 0.000 0.000 0.000 0.000 _interface.py:1() + 1 0.000 0.000 0.000 0.000 planarity.py:1() + 1 0.000 0.000 0.000 0.000 logic.py:1() + 1 0.000 0.000 0.000 0.000 queues.py:339(__init__) + 1 0.000 0.000 0.000 0.000 cycles.py:1() + 33 0.000 0.000 0.000 0.000 core.py:4148() + 2 0.000 0.000 0.000 0.000 cloudpickle_fast.py:1() + 1 0.000 0.000 0.000 0.000 numpy_pickle_compat.py:1() + 1 0.000 0.000 0.000 0.000 unicode.py:118(pyparsing_unicode) + 4 0.000 0.000 0.000 0.000 enum.py:1374(_missing_) + 1 0.000 0.000 0.000 0.000 connected.py:1() + 8 0.000 0.000 0.000 0.000 _contextlib.py:69(context_decorator) + 1 0.000 0.000 0.000 0.000 summations.py:40(Sum) + 4 0.000 0.000 0.000 0.000 typing.py:2278(get_type_hints) + 18 0.000 0.000 0.000 0.000 BIF.py:162(variable_block) + 20 0.000 0.000 0.000 0.000 ipaddress.py:1183(_ip_int_from_string) + 822 0.000 0.000 0.000 0.000 {method 'popitem' of 'collections.OrderedDict' objects} + 116 0.000 0.000 0.000 0.000 __init__.py:321(filter) + 77 0.000 0.000 0.000 0.000 _docscrape.py:182(_strip) + 1 0.000 0.000 0.000 0.000 configparser.py:523(LegacyInterpolation) + 1 0.000 0.000 0.000 0.000 rolling.py:918(Window) + 3 0.000 0.000 0.000 0.000 _parser.py:997(parse_template) + 68 0.000 0.000 0.000 0.000 pickletools.py:1124(__init__) + 1 0.000 0.000 0.000 0.000 _fuser.py:1() + 147 0.000 0.000 0.000 0.000 enum.py:192(__get__) + 33 0.000 0.000 0.000 0.000 symbol.py:254(_sanitize) + 28 0.000 0.000 0.000 0.000 {method 'split' of 're.Pattern' objects} + 10 0.000 0.000 0.000 0.000 queue.py:154(get) + 1 0.000 0.000 0.000 0.000 exception.py:1() + 26 0.000 0.000 0.000 0.000 :773(getenv) + 1 0.000 0.000 0.000 0.000 resource_sharer.py:1() + 1 0.000 0.000 0.000 0.000 _hessian_update_strategy.py:1() + 65 0.000 0.000 0.000 0.000 basic.py:126(__new__) + 3 0.000 0.000 0.000 0.000 autocast_mode.py:1() + 1 0.000 0.000 0.000 0.000 flatten.py:54(Unflatten) + 114 0.000 0.000 0.000 0.000 dataclasses.py:592() + 1 0.000 0.000 0.000 0.000 __init__.py:3306(_initialize) + 1 0.000 0.000 0.000 0.000 _state.py:1() + 114 0.000 0.000 0.000 0.000 dataclasses.py:1017() + 81 0.000 0.000 0.000 0.000 core.py:2854(parseImpl) + 1 0.000 0.000 0.000 0.000 _multiprocessing_helpers.py:1() + 76 0.000 0.000 0.000 0.000 {method 'strftime' of 'datetime.date' objects} + 1 0.000 0.000 0.000 0.000 profiler.py:306(profile) + 1 0.000 0.000 0.000 0.000 _parser.py:58(_timelex) + 1 0.000 0.000 0.000 0.000 _trace.py:566(ignore_lib_warnings) + 1 0.000 0.000 0.000 0.000 floating.py:1() + 1 0.000 0.000 0.000 0.000 base.py:274(IndexOpsMixin) + 1 0.000 0.000 0.000 0.000 period.py:79(PeriodIndex) + 1319 0.000 0.000 0.000 0.000 {method 'clear' of 'dict' objects} + 1 0.000 0.000 0.000 0.000 tournament.py:1() + 203 0.000 0.000 0.000 0.000 _parser.py:73(__init__) + 2 0.000 0.000 0.000 0.000 cluster.py:1() + 7 0.000 0.000 0.000 0.000 _utils.py:39(_dummy_type) + 1 0.000 0.000 0.000 0.000 chainmap.py:1() + 1 0.000 0.000 0.000 0.000 nvfuser_prims.py:526(register_native_batch_norm) + 1 0.000 0.000 0.000 0.000 ordered_set.py:1() + 715 0.000 0.000 0.000 0.000 dataclasses.py:396() + 822 0.000 0.000 0.000 0.000 conflict.py:67() + 126 0.000 0.000 0.000 0.000 _docscrape.py:429(_str_indent) + 2 0.000 0.000 0.000 0.000 _strptime.py:107(__calc_date_time) + 94 0.000 0.000 0.000 0.000 functools.py:818(dispatch) + 632 0.000 0.000 0.000 0.000 {built-in method builtins.sum} + 32 0.000 0.000 0.000 0.000 context.py:368(set_spawning_popen) + 7 0.000 0.000 0.000 0.000 functools.py:800(singledispatch) + 1 0.000 0.000 0.000 0.000 matcher_utils.py:15(_init_logger) + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:634(MemoryProfile) + 1 0.000 0.000 0.000 0.000 _pslinux.py:611(per_cpu_times) + 8 0.000 0.000 0.000 0.000 unweighted.py:196(bidirectional_shortest_path) + 3 0.000 0.000 0.000 0.000 symbol.py:323(__xnew_cached_) + 1326 0.000 0.000 0.000 0.000 _builtins.py:124(_is_special_functional_bound_op) + 43 0.000 0.000 0.000 0.000 numbers.py:2238(__eq__) + 1 0.000 0.000 0.000 0.000 mixins.py:59(NDArrayOperatorsMixin) + 743 0.000 0.000 0.000 0.000 utils.py:45() + 1 0.000 0.000 0.000 0.000 _fftlog_multimethods.py:1() + 166 0.000 0.000 0.000 0.000 doc.py:11(create_section_header) + 28 0.000 0.000 0.000 0.000 ipaddress.py:1617(_ip_int_from_string) + 1 0.000 0.000 0.000 0.000 _type_aliases.py:94(_add_aliases) + 21 0.000 0.000 0.000 0.000 _weakrefset.py:85(add) + 27 0.000 0.000 0.000 0.000 singleton.py:101(register) + 12 0.000 0.000 0.000 0.000 datetime.py:592(__new__) + 544 0.000 0.000 0.000 0.000 registration.py:71(__init__) + 28 0.000 0.000 0.000 0.000 core.py:2981(_generateDefaultName) + 2 0.000 0.000 0.000 0.000 getlimits.py:509(_init) + 1 0.000 0.000 0.000 0.000 backend_registry.py:56(register_backend) + 1 0.000 0.000 0.000 0.000 streamreader.py:1() + 1 0.000 0.000 0.000 0.000 dotproduct.py:1() + 16 0.000 0.000 0.000 0.000 _axis_nan_policy.py:260(_get_axis_params) + 3 0.000 0.000 0.000 0.000 missing.py:1() + 9 0.000 0.000 0.000 0.000 api.py:74(_require_initialized) + 8 0.000 0.000 0.000 0.000 core.py:1663(__call__) + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:393(DataFlowNode) + 12 0.000 0.000 0.000 0.000 polytools.py:67(_polifyit) + 93 0.000 0.000 0.000 0.000 iterables.py:2898(iterable) + 16 0.000 0.000 0.000 0.000 numbers.py:2248(__gt__) + 16 0.000 0.000 0.000 0.000 queues.py:174(__getstate__) + 246 0.000 0.000 0.000 0.000 compute.py:229(_make_generic_wrapper) + 1 0.000 0.000 0.000 0.000 _collections.py:1() + 1 0.000 0.000 0.000 0.000 link_prediction.py:1() + 1 0.000 0.000 0.000 0.000 numeric.py:43(NumericIndex) + 1 0.000 0.000 0.000 0.000 doc.py:1() + 6 0.000 0.000 0.000 0.000 symbolic_opset10.py:129(_max_pool) + 1 0.000 0.000 0.000 0.000 radau.py:1() + 3 0.000 0.000 0.000 0.000 context.py:157(_cpu_count_user) + 95 0.000 0.000 0.000 0.000 {method 'find' of 'str' objects} + 1 0.000 0.000 0.000 0.000 numpy_.py:1() + 1 0.000 0.000 0.000 0.000 tz.py:1590(nocache) + 1 0.000 0.000 0.000 0.000 random_graphs.py:1() + 1 0.000 0.000 0.000 0.000 protocols.py:1() + 17 0.000 0.000 0.000 0.000 threading.py:236(__init__) + 8 0.000 0.000 0.000 0.000 {function Random.seed at 0x7fd6428345e0} + 856 0.000 0.000 0.000 0.000 version.py:292(pre) + 26 0.000 0.000 0.000 0.000 core.py:921(__init__) + 1 0.000 0.000 0.000 0.000 {method 'list_functions' of 'pyarrow._compute.FunctionRegistry' objects} + 1 0.000 0.000 0.000 0.000 complexfield.py:1() + 1 0.000 0.000 0.000 0.000 _utils.py:19(eval_expr) + 1 0.000 0.000 0.000 0.000 _iotools.py:1() + 1 0.000 0.000 0.000 0.000 projection.py:1() + 8 0.000 0.000 0.000 0.000 connection.py:389(_send_bytes) + 14 0.000 0.000 0.000 0.000 __init__.py:2073(find_distributions) + 431 0.000 0.000 0.000 0.000 _compiler.py:31(_combine_flags) + 1 0.000 0.000 0.000 0.000 windows.py:1() + 1 0.000 0.000 0.000 0.000 c_parser_wrapper.py:1() + 1 0.000 0.000 0.000 0.000 BIF.py:1() + 1 0.000 0.000 0.000 0.000 nadam.py:1() + 1 0.000 0.000 0.000 0.000 common.py:2600(MatrixArithmetic) + 1 0.000 0.000 0.000 0.000 parameter.py:1() + 856 0.000 0.000 0.000 0.000 version.py:492(_parse_local_version) + 1 0.000 0.000 0.000 0.000 filesystem.py:1() + 262 0.000 0.000 0.000 0.000 __init__.py:526(_nonblank) + 1 0.000 0.000 0.000 0.000 _multivariate.py:384(__init__) + 1 0.000 0.000 0.000 0.000 order.py:11(Order) + 1 0.000 0.000 0.000 0.000 fileopener.py:1() + 244 0.000 0.000 0.000 0.000 typing.py:897(__hash__) + 1 0.000 0.000 0.000 0.000 expressiondomain.py:1() + 598 0.000 0.000 0.000 0.000 {method 'partition' of 'str' objects} + 1 0.000 0.000 0.000 0.000 dataframe_wrapper.py:1() + 11 0.000 0.000 0.000 0.000 doccer.py:136(_doc) + 1 0.000 0.000 0.000 0.000 distributed.py:256(DistributedDataParallel) + 2 0.000 0.000 0.000 0.000 sysconfig.py:185(_safe_realpath) + 314 0.000 0.000 0.000 0.000 overrides.py:128(array_function_dispatch) + 1 0.000 0.000 0.000 0.000 distributed_c10d.py:149(Backend) + 1 0.000 0.000 0.000 0.000 combinatorics.py:17(SamplerIterDataPipe) + 856 0.000 0.000 0.000 0.000 version.py:275(release) + 1 0.000 0.000 0.000 0.000 kl.py:818(_add_kl_info) + 20 0.000 0.000 0.000 0.000 textwrap.py:470(indent) + 113 0.000 0.000 0.000 0.000 linecache.py:147(lazycache) + 1 0.000 0.000 0.000 0.000 _creation.py:1() + 235 0.000 0.000 0.000 0.000 libmpf.py:330(from_int) + 104 0.000 0.000 0.000 0.000 typing.py:914(_is_unpacked_typevartuple) + 1 0.000 0.000 0.000 0.000 repmatrix.py:1() + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:593(CategoryElement) + 1 0.000 0.000 0.000 0.000 gzip.py:1() + 1 0.000 0.000 0.000 0.000 grad_scaler.py:45(GradScaler) + 1 0.000 0.000 0.000 0.000 core.py:6527(__new__) + 1 0.000 0.000 0.000 0.000 jit_utils.py:22(GraphContext) + 1 0.000 0.000 0.000 0.000 path_random.py:1() + 1 0.000 0.000 0.000 0.000 tasks.py:1() + 2 0.000 0.000 0.000 0.000 dropout.py:1() + 1 0.000 0.000 0.000 0.000 configparser.py:449(ExtendedInterpolation) + 628 0.000 0.000 0.000 0.000 _pytree.py:121() + 2 0.000 0.000 0.000 0.000 triads.py:1() + 600/598 0.000 0.000 0.000 0.000 results.py:159(__init__) + 1 0.000 0.000 0.000 0.000 graphml.py:1() + 2 0.000 0.000 0.000 0.000 conv_relu.py:1() + 1178 0.000 0.000 0.000 0.000 {method 'span' of 're.Match' objects} + 49 0.000 0.000 0.000 0.000 _compiler.py:405(_generate_overlap_table) + 1 0.000 0.000 0.000 0.000 _recursive.py:354(ConcreteTypeStore) + 40 0.000 0.000 0.000 0.000 getlimits.py:91(_float_to_float) + 1 0.000 0.000 0.000 0.000 parallel.py:669(__init__) + 1 0.000 0.000 0.000 0.000 BayesianNetwork.py:30(__init__) + 1 0.000 0.000 0.000 0.000 _covariance.py:1() + 1 0.000 0.000 0.000 0.000 helpers.py:1061() + 11 0.000 0.000 0.000 0.000 __init__.py:10(partialclass) + 1 0.000 0.000 0.000 0.000 _rules.py:382(_POERules) + 1 0.000 0.000 0.000 0.000 mathematica.py:1() + 1 0.000 0.000 0.000 0.000 unicode.py:99(identbodychars) + 856 0.000 0.000 0.000 0.000 version.py:319(dev) + 255 0.000 0.000 0.000 0.000 dispatcher.py:204() + 1 0.000 0.000 0.000 0.000 add.py:89(Add) + 1 0.000 0.000 0.000 0.000 _multivariate.py:1036(__init__) + 1 0.000 0.000 0.000 0.000 libintmath.py:126() + 22 0.000 0.000 0.000 0.000 synchronize.py:107(_make_methods) + 52 0.000 0.000 0.000 0.000 calendar.py:60(__getitem__) + 1 0.000 0.000 0.000 0.000 buffer.py:1() + 34 0.000 0.000 0.000 0.000 libmpf.py:491(from_rational) + 1 0.000 0.000 0.000 0.000 blocks.py:141(Block) + 2 0.000 0.000 0.000 0.000 specifiers.py:52(BaseSpecifier) + 2 0.000 0.000 0.000 0.000 dtype.py:1() + 26 0.000 0.000 0.000 0.000 contextlib.py:132(__enter__) + 1 0.000 0.000 0.000 0.000 _openpyxl.py:1() + 1 0.000 0.000 0.000 0.000 configparser.py:1326(ConverterMapping) + 1 0.000 0.000 0.000 0.000 profiler.py:47(_KinetoProfile) + 129 0.000 0.000 0.000 0.000 traceback.py:389(extended_frame_gen) + 161 0.000 0.000 0.000 0.000 _decorators.py:501(__init__) + 54 0.000 0.000 0.000 0.000 __init__.py:228(_acquireLock) + 856 0.000 0.000 0.000 0.000 version.py:330(local) + 1 0.000 0.000 0.000 0.000 unicode.py:85(identchars) + 1 0.000 0.000 0.000 0.000 feedparser.py:471(_parse_headers) + 1 0.000 0.000 0.000 0.000 {built-in method _thread.start_new_thread} + 2 0.000 0.000 0.000 0.000 geometric.py:1() + 2 0.000 0.000 0.000 0.000 core.py:528(set_results_name) + 1 0.000 0.000 0.000 0.000 weak.py:1() + 1 0.000 0.000 0.000 0.000 symbolic_shapes.py:181(SymNode) + 1 0.000 0.000 0.000 0.000 __init__.py:2306(_make_var_reduction_prim) + 1 0.000 0.000 0.000 0.000 printer.py:1() + 114 0.000 0.000 0.000 0.000 dataclasses.py:1043() + 54 0.000 0.000 0.000 0.000 {method 'release' of '_thread.RLock' objects} + 6 0.000 0.000 0.000 0.000 symbolic_opset9.py:1652(_avg_pool) + 2 0.000 0.000 0.000 0.000 __init__.py:930(read_text) + 13 0.000 0.000 0.000 0.000 _continuous_distns.py:57(_call_super_mom) + 23 0.000 0.000 0.000 0.000 distributed_c10d.py:1447(exception_handler) + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:37(Category) + 1 0.000 0.000 0.000 0.000 distance.py:1747(MetricInfo) + 47 0.000 0.000 0.000 0.000 ipaddress.py:533(_split_addr_prefix) + 7 0.000 0.000 0.000 0.000 __init__.py:72(CFUNCTYPE) + 60 0.000 0.000 0.000 0.000 enum.py:357(__init__) + 8 0.000 0.000 0.000 0.000 typing_extensions.py:634(__init__) + 16 0.000 0.000 0.000 0.000 {method 'getbuffer' of '_io.BytesIO' objects} + 1 0.000 0.000 0.000 0.000 rnn.py:261(LSTM) + 1 0.000 0.000 0.000 0.000 combinatorics.py:14(ShufflerIterDataPipe) + 281 0.000 0.000 0.000 0.000 core.py:3614() + 6 0.000 0.000 0.000 0.000 numeric.py:2536(extend_all) + 10 0.000 0.000 0.000 0.000 symbolic_opset11.py:87(_apply) + 1 0.000 0.000 0.000 0.000 dag.py:1() + 1 0.000 0.000 0.000 0.000 find_file_dependencies.py:1() + 1 0.000 0.000 0.000 0.000 shutil.py:690(rmtree) + 56 0.000 0.000 0.000 0.000 {built-in method posix.lstat} + 1 0.000 0.000 0.000 0.000 datetimelike.py:375(DatetimeTimedeltaMixin) + 2 0.000 0.000 0.000 0.000 mpelements.py:94(_make_tol) + 1 0.000 0.000 0.000 0.000 _multivariate.py:4745(__init__) + 1 0.000 0.000 0.000 0.000 point.py:42(Point) + 1 0.000 0.000 0.000 0.000 _endian.py:1() + 24 0.000 0.000 0.000 0.000 __init__.py:1447(__init__) + 1 0.000 0.000 0.000 0.000 dirichlet.py:1() + 1 0.000 0.000 0.000 0.000 conv.py:1141(_LazyConvXdMixin) + 1 0.000 0.000 0.000 0.000 python_parser.py:1() + 48 0.000 0.000 0.000 0.000 pretty_symbology.py:101() + 16 0.000 0.000 0.000 0.000 sysconfig.py:244(_subst_vars) + 1 0.000 0.000 0.000 0.000 operator_schemas.py:29(_nonzero_schemas) + 129 0.000 0.000 0.000 0.000 inspect.py:310(ismethoddescriptor) + 30 0.000 0.000 0.000 0.000 contextlib.py:287(helper) + 1 0.000 0.000 0.000 0.000 mapped_queue.py:1() + 1 0.000 0.000 0.000 0.000 BayesianNetwork.py:221(add_cpds) + 100 0.000 0.000 0.000 0.000 _strptime.py:234() + 16 0.000 0.000 0.000 0.000 <__array_function__ internals>:177(round_) + 87 0.000 0.000 0.000 0.000 kl.py:72(decorator) + 1 0.000 0.000 0.000 0.000 _adapters.py:8(Message) + 1 0.000 0.000 0.000 0.000 {built-in method torch._C._dist_autograd_init} + 1 0.000 0.000 0.000 0.000 stride_tricks.py:1() + 15 0.000 0.000 0.000 0.000 _bunch.py:6(_validate_names) + 111 0.000 0.000 0.000 0.000 _parser.py:295(checkgroupname) + 1 0.000 0.000 0.000 0.000 wishart.py:30(Wishart) + 1 0.000 0.000 0.000 0.000 fake_utils.py:1() + 715 0.000 0.000 0.000 0.000 dataclasses.py:1106() + 1 0.000 0.000 0.000 0.000 pooling.py:805(FractionalMaxPool3d) + 1 0.000 0.000 0.000 0.000 _tukeylambda_stats.py:1() + 116 0.000 0.000 0.000 0.000 _parser.py:1090(expand_template) + 1 0.000 0.000 0.000 0.000 _multivariate.py:1523(__init__) + 1 0.000 0.000 0.000 0.000 ctx_fp.py:12(FPContext) + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:191(SchemaMatcher) + 8 0.000 0.000 0.000 0.000 unweighted.py:259(_bidirectional_pred_succ) + 413 0.000 0.000 0.000 0.000 decorators.py:692(__init__) + 85 0.000 0.000 0.000 0.000 utils.py:44() + 5 0.000 0.000 0.000 0.000 _version.py:20(get_versions) + 1 0.000 0.000 0.000 0.000 transformer.py:17(Transformer) + 13 0.000 0.000 0.000 0.000 mixins.py:44(_numeric_methods) + 90 0.000 0.000 0.000 0.000 _pytree.py:47(_register_pytree_node) + 5 0.000 0.000 0.000 0.000 numbers.py:1867(__eq__) + 48 0.000 0.000 0.000 0.000 process.py:189(name) + 1 0.000 0.000 0.000 0.000 transports.py:1() + 1 0.000 0.000 0.000 0.000 modularinteger.py:1() + 117 0.000 0.000 0.000 0.000 typing.py:1810() + 20/19 0.000 0.000 0.000 0.000 typing.py:1500(__repr__) + 2 0.000 0.000 0.000 0.000 lazy.py:139(__new__) + 1 0.000 0.000 0.000 0.000 histograms.py:1() + 1 0.000 0.000 0.000 0.000 efficiency_measures.py:1() + 1 0.000 0.000 0.000 0.000 DAG.py:73(__init__) + 397 0.000 0.000 0.000 0.000 {method 'items' of 'mappingproxy' objects} + 1 0.000 0.000 0.000 0.000 ipc.py:1() + 18 0.000 0.000 0.000 0.000 core.py:997(__init__) + 1 0.000 0.000 0.000 0.000 container.py:552(ParameterList) + 1 0.000 0.000 0.000 0.000 tz.py:458(__init__) + 2 0.000 0.000 0.000 0.000 lazy.py:84(__new__) + 1 0.000 0.000 0.000 0.000 functional_modules.py:1() + 3 0.000 0.000 0.000 0.000 numba_.py:1() + 1 0.000 0.000 0.000 0.000 rational.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:779(FastPath) + 1 0.000 0.000 0.000 0.000 timedeltas.py:81(TimedeltaArray) + 28 0.000 0.000 0.000 0.000 calendar.py:79(__getitem__) + 227 0.000 0.000 0.000 0.000 inspect.py:283(ismodule) + 16 0.000 0.000 0.000 0.000 _type_aliases.py:58(bitname) + 1 0.000 0.000 0.000 0.000 orderings.py:1() + 1 0.000 0.000 0.000 0.000 _polybase.py:1() + 8 0.000 0.000 0.000 0.000 kind.py:43(__new__) + 2 0.000 0.000 0.000 0.000 optimizer.py:1() + 1 0.000 0.000 0.000 0.000 case.py:344(TestCase) + 13 0.000 0.000 0.000 0.000 {built-in method torch._C._dispatch_library} + 1 0.000 0.000 0.000 0.000 _memmapping_reducer.py:477(get_memmapping_reducers) + 1 0.000 0.000 0.000 0.000 polyoptions.py:184(_init_dependencies_order) + 386 0.000 0.000 0.000 0.000 __init__.py:989(_added_new) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:513(effective_n_jobs) + 114 0.000 0.000 0.000 0.000 :146(update_abstractmethods) + 1 0.000 0.000 0.000 0.000 repr.py:1() + 77 0.000 0.000 0.000 0.000 inspect.py:1443(repl) + 1 0.000 0.000 0.000 0.000 von_mises.py:1() + 1 0.000 0.000 0.000 0.000 sampler.py:210(BatchSampler) + 1 0.000 0.000 0.000 0.000 optimization.py:1() + 29 0.000 0.000 0.000 0.000 expressions.py:183(func) + 76 0.000 0.000 0.000 0.000 _docscrape.py:50(read) + 10 0.000 0.000 0.000 0.000 _text.py:79(__hash__) + 1 0.000 0.000 0.000 0.000 _legacy.py:1() + 6 0.000 0.000 0.000 0.000 ctx_iv.py:413(convert) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3121(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:1791(MemoizedZipManifests) + 1 0.000 0.000 0.000 0.000 rootisolation.py:1() + 1 0.000 0.000 0.000 0.000 expand.py:432(LazyMappingProxy) + 1 0.000 0.000 0.000 0.000 _interpolate.py:111(interp2d) + 8 0.000 0.000 0.000 0.000 signal.py:70() + 141 0.000 0.000 0.000 0.000 _util.py:176(check_random_state) + 2 0.000 0.000 0.000 0.000 _strptime.py:83() + 16 0.000 0.000 0.000 0.000 arraypad.py:86(_pad_simple) + 1 0.000 0.000 0.000 0.000 quoprimime.py:1() + 16 0.000 0.000 0.000 0.000 :422(spec_from_loader) + 27 0.000 0.000 0.000 0.000 weakref.py:352(__init__) + 1 0.000 0.000 0.000 0.000 numbers.py:2043(Integer) + 1 0.000 0.000 0.000 0.000 array.py:288(SparseArray) + 1 0.000 0.000 0.000 0.000 fancysets.py:1384(CartesianComplexRegion) + 1 0.000 0.000 0.000 0.000 codeprinter.py:1() + 1 0.000 0.000 0.000 0.000 pickle_compat.py:1() + 18 0.000 0.000 0.000 0.000 :778(__contains__) + 1 0.000 0.000 0.000 0.000 category.py:55(CategoricalIndex) + 387 0.000 0.000 0.000 0.000 _compiler.py:426(_get_iscased) + 1 0.000 0.000 0.000 0.000 pretty_symbology.py:109() + 8 0.000 0.000 0.000 0.000 core.py:4758(__init__) + 1 0.000 0.000 0.000 0.000 glob_group.py:1() + 1 0.000 0.000 0.000 0.000 classic.py:1() + 119 0.000 0.000 0.000 0.000 typing.py:1021() + 184 0.000 0.000 0.000 0.000 typing.py:455(__repr__) + 1 0.000 0.000 0.000 0.000 _sysconfigdata__linux_x86_64-linux-gnu.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:298(Process) + 3 0.000 0.000 0.000 0.000 blocks.py:123(maybe_split) + 16 0.000 0.000 0.000 0.000 :397(abspath) + 1 0.000 0.000 0.000 0.000 _cubic.py:1() + 1 0.000 0.000 0.000 0.000 mpelements.py:1() + 1 0.000 0.000 0.000 0.000 fields.py:1() + 1 0.000 0.000 0.000 0.000 object_array.py:1() + 1 0.000 0.000 0.000 0.000 routeddecoder.py:17(RoutedDecoderIterDataPipe) + 1 0.000 0.000 0.000 0.000 text.py:1() + 93 0.000 0.000 0.000 0.000 __init__.py:253(escape) + 213 0.000 0.000 0.000 0.000 ctx_iv.py:369(_wrap_specfun) + 4 0.000 0.000 0.000 0.000 _pep440.py:292(__init__) + 1 0.000 0.000 0.000 0.000 systems.py:1() + 1 0.000 0.000 0.000 0.000 dlpack.py:10(DLDeviceType) + 1 0.000 0.000 0.000 0.000 _data.py:1() + 80 0.000 0.000 0.000 0.000 ipaddress.py:1209(_parse_octet) + 1 0.000 0.000 0.000 0.000 symbolic_opset7.py:1() + 1 0.000 0.000 0.000 0.000 getlimits.py:1() + 1 0.000 0.000 0.000 0.000 package_importer.py:48(PackageImporter) + 1 0.000 0.000 0.000 0.000 _misc.py:545(_Options) + 50 0.000 0.000 0.000 0.000 config.py:742(config_prefix) + 1 0.000 0.000 0.000 0.000 hyperbolic.py:533(tanh) + 1 0.000 0.000 0.000 0.000 symbolic_opset14.py:1() + 1 0.000 0.000 0.000 0.000 interpreter.py:370(Transformer) + 2 0.000 0.000 0.000 0.000 _decorators.py:344(decorate) + 1 0.000 0.000 0.000 0.000 gexf.py:1() + 1 0.000 0.000 0.000 0.000 queue.py:28(Queue) + 1 0.000 0.000 0.000 0.000 numbers.py:1480(Rational) + 1 0.000 0.000 0.000 0.000 pooling.py:257(MaxUnpool1d) + 1 0.000 0.000 0.000 0.000 polyclasses.py:146(DMP) + 350 0.000 0.000 0.000 0.000 {built-in method numpy.core._multiarray_umath.add_docstring} + 16 0.000 0.000 0.000 0.000 _docscrape.py:477(_str_see_also) + 1 0.000 0.000 0.000 0.000 rnn.py:334(LSTM) + 1 0.000 0.000 0.000 0.000 formal.py:1498(FiniteFormalPowerSeries) + 200 0.000 0.000 0.000 0.000 _ops.py:437(__hash__) + 170 0.000 0.000 0.000 0.000 docscrape.py:403() + 3 0.000 0.000 0.000 0.000 _constants.py:1() + 1 0.000 0.000 0.000 0.000 _adapters.py:35(__init__) + 1 0.000 0.000 0.000 0.000 basic.py:36(Basic) + 1 0.000 0.000 0.000 0.000 datetimelike.py:77(DatetimeIndexOpsMixin) + 1 0.000 0.000 0.000 0.000 splitter_base.py:256(_SplitterBase) + 1 0.000 0.000 0.000 0.000 domainmatrix.py:53(DomainMatrix) + 1 0.000 0.000 0.000 0.000 kcomponents.py:196(_AntiGraph) + 558 0.000 0.000 0.000 0.000 _docscrape.py:153(__getitem__) + 1 0.000 0.000 0.000 0.000 small.py:1() + 1 0.000 0.000 0.000 0.000 _freeze.py:1() + 64 0.000 0.000 0.000 0.000 _docscrape.py:469(_str_section) + 7 0.000 0.000 0.000 0.000 typing_extensions.py:747(__init_subclass__) + 2 0.000 0.000 0.000 0.000 cuts.py:1() + 1 0.000 0.000 0.000 0.000 contexts.py:1() + 2 0.000 0.000 0.000 0.000 threading.py:555(__init__) + 544 0.000 0.000 0.000 0.000 registration.py:81(in_base) + 1 0.000 0.000 0.000 0.000 array_manager.py:104(BaseArrayManager) + 1 0.000 0.000 0.000 0.000 groupby.py:633(BaseGroupBy) + 408 0.000 0.000 0.000 0.000 deprecation.py:7(_deprecated) + 1 0.000 0.000 0.000 0.000 pdb.py:207(Pdb) + 5 0.000 0.000 0.000 0.000 functools.py:861() + 90 0.000 0.000 0.000 0.000 decorators.py:303(py_random_state) + 124 0.000 0.000 0.000 0.000 {built-in method posix.getpid} + 1 0.000 0.000 0.000 0.000 SEM.py:1() + 2 0.000 0.000 0.000 0.000 _strptime.py:90() + 1 0.000 0.000 0.000 0.000 numbers.py:419(bernoulli) + 1 0.000 0.000 0.000 0.000 _state.py:18(__init__) + 1 0.000 0.000 0.000 0.000 find_file_dependencies.py:7(_ExtractModuleReferences) + 5 0.000 0.000 0.000 0.000 __init__.py:299(loads) + 1 0.000 0.000 0.000 0.000 contextlib.py:78(inner) + 1 0.000 0.000 0.000 0.000 mathext.py:1() + 1 0.000 0.000 0.000 0.000 linear.py:9(Linear) + 58 0.000 0.000 0.000 0.000 _utils.py:779(classproperty) + 3 0.000 0.000 0.000 0.000 misc.py:1() + 1 0.000 0.000 0.000 0.000 _adapters.py:42(_repair_headers) + 1 0.000 0.000 0.000 0.000 pathlib.py:422(_PathParents) + 1 0.000 0.000 0.000 0.000 upsampling.py:11(Upsample) + 1 0.000 0.000 0.000 0.000 weighted.py:1() + 170 0.000 0.000 0.000 0.000 docscrape.py:162(__setitem__) + 181 0.000 0.000 0.000 0.000 expr.py:183() + 1 0.000 0.000 0.000 0.000 algebraicconnectivity.py:1() + 1 0.000 0.000 0.000 0.000 feather_format.py:1() + 1 0.000 0.000 0.000 0.000 conv_add.py:1() + 2 0.000 0.000 0.000 0.000 __init__.py:2016(get_metadata_lines) + 64 0.000 0.000 0.000 0.000 connection.py:168(fileno) + 1 0.000 0.000 0.000 0.000 single.py:44(SingleODEProblem) + 48 0.000 0.000 0.000 0.000 typing.py:287(_unpack_args) + 15 0.000 0.000 0.000 0.000 _compiler.py:389(_bytes_to_codes) + 35 0.000 0.000 0.000 0.000 __init__.py:24(_module_matches_namespace) + 1 0.000 0.000 0.000 0.000 _guards.py:26(GuardSource) + 1 0.000 0.000 0.000 0.000 _odfreader.py:1() + 1 0.000 0.000 0.000 0.000 c_parser_wrapper.py:45(CParserWrapper) + 1 0.000 0.000 0.000 0.000 sharing.py:1() + 4 0.000 0.000 0.000 0.000 signal.py:24(_int_to_enum) + 4 0.000 0.000 0.000 0.000 polynomial.py:1226(__init__) + 1 0.000 0.000 0.000 0.000 _state.py:23(parse_env) + 133 0.000 0.000 0.000 0.000 core.py:2345(parseImpl) + 1 0.000 0.000 0.000 0.000 graph_drawer.py:53(FxGraphDrawer) + 2 0.000 0.000 0.000 0.000 textwrap.py:238(_wrap_chunks) + 1 0.000 0.000 0.000 0.000 datetimelike.py:163(DatetimeLikeArrayMixin) + 1 0.000 0.000 0.000 0.000 libelefun.py:1() + 89 0.000 0.000 0.000 0.000 functions.py:81(defun_wrapped) + 1 0.000 0.000 0.000 0.000 paths.py:1() + 1 0.000 0.000 0.000 0.000 cnf.py:1() + 2 0.000 0.000 0.000 0.000 _elffile.py:31(EMachine) + 32 0.000 0.000 0.000 0.000 {method 'flush' of '_io.TextIOWrapper' objects} + 26 0.000 0.000 0.000 0.000 accessor.py:92(_create_delegator_method) + 6 0.000 0.000 0.000 0.000 abc.py:32(_register) + 1 0.000 0.000 0.000 0.000 pooling.py:735(FractionalMaxPool2d) + 45 0.000 0.000 0.000 0.000 :389(normpath) + 1 0.000 0.000 0.000 0.000 _distr_params.py:1() + 701 0.000 0.000 0.000 0.000 {method 'remove' of 'set' objects} + 1 0.000 0.000 0.000 0.000 base_subprocess.py:1() + 1 0.000 0.000 0.000 0.000 heaps.py:1() + 16 0.000 0.000 0.000 0.000 copyreg.py:113(_slotnames) + 22 0.000 0.000 0.000 0.000 __init__.py:519(_cmpkey) + 1 0.000 0.000 0.000 0.000 digraph.py:1() + 825 0.000 0.000 0.000 0.000 inspect.py:2747(annotation) + 1 0.000 0.000 0.000 0.000 tzinfo.py:1() + 1 0.000 0.000 0.000 0.000 expressiondomain.py:14(ExpressionDomain) + 257 0.000 0.000 0.000 0.000 _decorators.py:371(doc) + 16 0.000 0.000 0.000 0.000 process.py:217(authkey) + 1 0.000 0.000 0.000 0.000 _pslinux.py:595(cpu_times) + 1 0.000 0.000 0.000 0.000 client.py:239(HTTPResponse) + 598 0.000 0.000 0.000 0.000 enum.py:1142(__init__) + 1 0.000 0.000 0.000 0.000 pooling.py:331(MaxUnpool2d) + 1 0.000 0.000 0.000 0.000 _globals.py:17(_InternalGlobals) + 4 0.000 0.000 0.000 0.000 __init__.py:882(__init__) + 1 0.000 0.000 0.000 0.000 rnn.py:18(LSTMCell) + 6 0.000 0.000 0.000 0.000 symbolic_opset9.py:1539(_max_pool) + 1 0.000 0.000 0.000 0.000 chebyshev.py:1() + 1 0.000 0.000 0.000 0.000 maple.py:1() + 8 0.000 0.000 0.000 0.000 {method 'reshape' of 'numpy.ndarray' objects} + 1 0.000 0.000 0.000 0.000 _dual_annealing.py:1() + 1 0.000 0.000 0.000 0.000 bdist.py:1() + 1 0.000 0.000 0.000 0.000 _adapters.py:48(SpecPath) + 13 0.000 0.000 0.000 0.000 enum.py:1364(_iter_member_by_def_) + 1 0.000 0.000 0.000 0.000 __init__.py:414(StreamContext) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:186(LambdaLR) + 1 0.000 0.000 0.000 0.000 _multivariate.py:4279(__init__) + 4 0.000 0.000 0.000 0.000 ctx_iv.py:43(__new__) + 157 0.000 0.000 0.000 0.000 {built-in method torch._C.isSubtypeOf} + 4 0.000 0.000 0.000 0.000 _pyio.py:1500(__init__) + 1 0.000 0.000 0.000 0.000 facts.py:300(rules_alpha) + 16 0.000 0.000 0.000 0.000 fromnumeric.py:3754(round_) + 1 0.000 0.000 0.000 0.000 _vmap_internals.py:1() + 1 0.000 0.000 0.000 0.000 bdb.py:1() + 1 0.000 0.000 0.000 0.000 exponential.py:1124(LambertW) + 1 0.000 0.000 0.000 0.000 legendre.py:1() + 1 0.000 0.000 0.000 0.000 pooling.py:418(MaxUnpool3d) + 1 0.000 0.000 0.000 0.000 cse_main.py:1() + 28 0.000 0.000 0.000 0.000 ipaddress.py:1597(_make_netmask) + 1 0.000 0.000 0.000 0.000 graph6.py:1() + 49 0.000 0.000 0.000 0.000 :812(__init__) + 71 0.000 0.000 0.000 0.000 textwrap.py:482(prefixed_lines) + 4 0.000 0.000 0.000 0.000 _script.py:265(__init__) + 6 0.000 0.000 0.000 0.000 {built-in method posix.open} + 1 0.000 0.000 0.000 0.000 accumulationbounds.py:14(AccumulationBounds) + 98 0.000 0.000 0.000 0.000 feedparser.py:128(__next__) + 1 0.000 0.000 0.000 0.000 sampler.py:18(Sampler) + 324 0.000 0.000 0.000 0.000 _internal.py:880() + 681 0.000 0.000 0.000 0.000 conflict.py:63() + 1 0.000 0.000 0.000 0.000 degree_seq.py:1() + 1 0.000 0.000 0.000 0.000 spectral_norm.py:1() + 1 0.000 0.000 0.000 0.000 BIF.py:27(BIFReader) + 1 0.000 0.000 0.000 0.000 complexfield.py:44(__init__) + 1 0.000 0.000 0.000 0.000 suite.py:1() + 1 0.000 0.000 0.000 0.000 ufunclike.py:1() + 256 0.000 0.000 0.000 0.000 libintmath.py:78(gmpy_trailing) + 1 0.000 0.000 0.000 0.000 _basinhopping.py:1() + 7 0.000 0.000 0.000 0.000 pathlib.py:530(_make_child) + 1 0.000 0.000 0.000 0.000 quality.py:1() + 2 0.000 0.000 0.000 0.000 bn_relu.py:1() + 1 0.000 0.000 0.000 0.000 numbers.py:147(Real) + 1 0.000 0.000 0.000 0.000 triangulation.py:1() + 1 0.000 0.000 0.000 0.000 swa_utils.py:1() + 1 0.000 0.000 0.000 0.000 _polyint.py:1() + 167 0.000 0.000 0.000 0.000 core.py:1711(set_whitespace_chars) + 24 0.000 0.000 0.000 0.000 {method 'acquire' of '_multiprocessing.SemLock' objects} + 1 0.000 0.000 0.000 0.000 threading.py:1402(__init__) + 8 0.000 0.000 0.000 0.000 _base.py:328(__init__) + 1 0.000 0.000 0.000 0.000 _fix.py:16(Fix) + 1 0.000 0.000 0.000 0.000 _string_helpers.py:1() + 39/35 0.000 0.000 0.000 0.000 typing.py:224(_type_repr) + 1 0.000 0.000 0.000 0.000 _differentialevolution.py:1() + 16 0.000 0.000 0.000 0.000 _memmapping_reducer.py:363(__reduce__) + 14 0.000 0.000 0.000 0.000 mixins.py:26(_reflected_binary_method) + 1 0.000 0.000 0.000 0.000 popen_loky_posix.py:1() + 1 0.000 0.000 0.000 0.000 strongly_connected.py:1() + 314 0.000 0.000 0.000 0.000 {built-in method sys._getframe} + 1 0.000 0.000 0.000 0.000 datetime.py:1669(datetime) + 1 0.000 0.000 0.000 0.000 request.py:605(BaseHandler) + 1 0.000 0.000 0.000 0.000 dataframe_protocol.py:20(DlpackDeviceType) + 2 0.000 0.000 0.000 0.000 generic.py:160(pinner) + 688 0.000 0.000 0.000 0.000 __init__.py:2675(_reload_version) + 163 0.000 0.000 0.000 0.000 _docscrape.py:390() + 1 0.000 0.000 0.000 0.000 conv.py:103(Conv1d) + 1 0.000 0.000 0.000 0.000 subprocess.py:470(CompletedProcess) + 1 0.000 0.000 0.000 0.000 DAG.py:133(add_nodes_from) + 1 0.000 0.000 0.000 0.000 trigonometric.py:2186(asin) + 2 0.000 0.000 0.000 0.000 edgelist.py:1() + 114 0.000 0.000 0.000 0.000 dataclasses.py:346(__init__) + 1 0.000 0.000 0.000 0.000 edge_kcomponents.py:1() + 2 0.000 0.000 0.000 0.000 linear_fused.py:1() + 80 0.000 0.000 0.000 0.000 _sources.py:51(remove_prefix) + 16 0.000 0.000 0.000 0.000 functools.py:841(_is_union_type) + 2 0.000 0.000 0.000 0.000 sysconfig.py:109(_getuserbase) + 1 0.000 0.000 0.000 0.000 _guards.py:318(TracingContext) + 152 0.000 0.000 0.000 0.000 {method 'translate' of 'str' objects} + 1 0.000 0.000 0.000 0.000 process.py:139(_WorkItem) + 1 0.000 0.000 0.000 0.000 _infra.py:13(Level) + 1 0.000 0.000 0.000 0.000 modularinteger.py:14(ModularInteger) + 62 0.000 0.000 0.000 0.000 accessor.py:78(_create_delegator_property) + 605 0.000 0.000 0.000 0.000 typing.py:2246(cast) + 2 0.000 0.000 0.000 0.000 pathlib.py:1053(read_text) + 43 0.000 0.000 0.000 0.000 _parser.py:256(getwhile) + 1 0.000 0.000 0.000 0.000 _comparison.py:484(NumberPair) + 1 0.000 0.000 0.000 0.000 singleton.py:1() + 2 0.000 0.000 0.000 0.000 textwrap.py:341(_split_chunks) + 36 0.000 0.000 0.000 0.000 :60(__getattr__) + 1 0.000 0.000 0.000 0.000 pyprojecttoml.py:160(_ConfigExpander) + 7 0.000 0.000 0.000 0.000 _arrays.py:57(_matrix_doc_to_array) + 1 0.000 0.000 0.000 0.000 hermite_e.py:1() + 1 0.000 0.000 0.000 0.000 abc.py:56(Traversable) + 11 0.000 0.000 0.000 0.000 nanops.py:82(__call__) + 20 0.000 0.000 0.000 0.000 config.py:844(is_one_of_factory) + 2 0.000 0.000 0.000 0.000 _strptime.py:91() + 1 0.000 0.000 0.000 0.000 lambdify.py:1() + 208 0.000 0.000 0.000 0.000 inspect.py:946() + 1 0.000 0.000 0.000 0.000 hermite.py:1() + 1 0.000 0.000 0.000 0.000 activation.py:889(MultiheadAttention) + 1 0.000 0.000 0.000 0.000 einsumfunc.py:1() + 2 0.000 0.000 0.000 0.000 _parser.py:52(ParsedRequirement) + 9 0.000 0.000 0.000 0.000 weakref.py:104(__init__) + 2 0.000 0.000 0.000 0.000 _tokenizer.py:88(Tokenizer) + 1 0.000 0.000 0.000 0.000 core.py:134(Diagnostics) + 93 0.000 0.000 0.000 0.000 _script.py:897() + 2 0.000 0.000 0.000 0.000 executor.py:1() + 34 0.000 0.000 0.000 0.000 libmpf.py:950(mpf_div) + 8 0.000 0.000 0.000 0.000 parallel.py:347(delayed) + 1 0.000 0.000 0.000 0.000 random_sequence.py:1() + 1 0.000 0.000 0.000 0.000 response.py:1() + 1 0.000 0.000 0.000 0.000 _hessian_update_strategy.py:103(FullHessianUpdateStrategy) + 21 0.000 0.000 0.000 0.000 tokenize.py:329(find_cookie) + 1 0.000 0.000 0.000 0.000 inverselaplace.py:1() + 1 0.000 0.000 0.000 0.000 _warnings_errors.py:1() + 1 0.000 0.000 0.000 0.000 _compression.py:1() + 1 0.000 0.000 0.000 0.000 process_executor.py:119(__init__) + 1 0.000 0.000 0.000 0.000 futures.py:1() + 1 0.000 0.000 0.000 0.000 mathml.py:127(MathMLContentPrinter) + 386 0.000 0.000 0.000 0.000 {function FreezableDefaultDict.__missing__ at 0x7fd617b93d80} + 1 0.000 0.000 0.000 0.000 __init__.py:1122(ELEMENTWISE_TYPE_PROMOTION_KIND) + 1 0.000 0.000 0.000 0.000 synchronize.py:142(BoundedSemaphore) + 114 0.000 0.000 0.000 0.000 dataclasses.py:1046() + 708 0.000 0.000 0.000 0.000 {built-in method _sre.unicode_iscased} + 2 0.000 0.000 0.000 0.000 __init__.py:2384(file_ns_handler) + 1 0.000 0.000 0.000 0.000 path_random.py:322(RandomGreedy) + 1 0.000 0.000 0.000 0.000 _decomp.py:1() + 5 0.000 0.000 0.000 0.000 decoder.py:332(decode) + 22 0.000 0.000 0.000 0.000 getlimits.py:668(__init__) + 1 0.000 0.000 0.000 0.000 core.py:2697(MaskedArray) + 1 0.000 0.000 0.000 0.000 polyconfig.py:1() + 11 0.000 0.000 0.000 0.000 _tensor.py:31(_handle_torch_function_and_wrap_type_error_to_not_implemented) + 14 0.000 0.000 0.000 0.000 _infra.py:65(from_sarif) + 1 0.000 0.000 0.000 0.000 binomial.py:1() + 1 0.000 0.000 0.000 0.000 pprint.py:1() + 114 0.000 0.000 0.000 0.000 dataclasses.py:1052() + 1 0.000 0.000 0.000 0.000 laguerre.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:511() + 35 0.000 0.000 0.000 0.000 core.py:959(reset_cache) + 1 0.000 0.000 0.000 0.000 gml.py:276(Pattern) + 1 0.000 0.000 0.000 0.000 relaxed_bernoulli.py:1() + 6 0.000 0.000 0.000 0.000 core.py:3399(__init__) + 1 0.000 0.000 0.000 0.000 numbers.py:556(Number) + 1 0.000 0.000 0.000 0.000 _differentiable_functions.py:1() + 1 0.000 0.000 0.000 0.000 ipaddress.py:1460(IPv4Network) + 1 0.000 0.000 0.000 0.000 _psposix.py:61() + 1 0.000 0.000 0.000 0.000 expand.py:63(StaticModule) + 1 0.000 0.000 0.000 0.000 qs.py:1() + 1 0.000 0.000 0.000 0.000 wrappers.py:1() + 159 0.000 0.000 0.000 0.000 {built-in method gmpy2.gmpy2._mpmath_create} + 1 0.000 0.000 0.000 0.000 fake_tensor.py:169(FakeTensorConverter) + 60 0.000 0.000 0.000 0.000 enum.py:961(_find_data_repr_) + 1 0.000 0.000 0.000 0.000 importer.py:28(Importer) + 11 0.000 0.000 0.000 0.000 __init__.py:119(inplace_wrapper) + 12 0.000 0.000 0.000 0.000 small.py:44(_raise_on_directed) + 2 0.000 0.000 0.000 0.000 _pep440.py:117(parse) + 129 0.000 0.000 0.000 0.000 inspect.py:505(isbuiltin) + 2 0.000 0.000 0.000 0.000 __init__.py:2000(get_metadata) + 1 0.000 0.000 0.000 0.000 unicode.py:111() + 76 0.000 0.000 0.000 0.000 _docscrape.py:16(strip_blank_lines) + 1 0.000 0.000 0.000 0.000 core.py:4757(_MultipleMatch) + 22 0.000 0.000 0.000 0.000 facts.py:343() + 4 0.000 0.000 0.000 0.000 typing.py:2374() + 1 0.000 0.000 0.000 0.000 trigonometry.py:1() + 16 0.000 0.000 0.000 0.000 <__array_function__ internals>:177(around) + 1 0.000 0.000 0.000 0.000 module.py:53(_WrappedHook) + 1 0.000 0.000 0.000 0.000 datetimes.py:153(DatetimeArray) + 1 0.000 0.000 0.000 0.000 distribution.py:10(Distribution) + 1 0.000 0.000 0.000 0.000 _ir_utils.py:1() + 1041 0.000 0.000 0.000 0.000 {built-in method gmpy2.gmpy2.bit_length} + 44 0.000 0.000 0.000 0.000 threading.py:264(__enter__) + 2 0.000 0.000 0.000 0.000 queue.py:34(__init__) + 1 0.000 0.000 0.000 0.000 operator_support.py:37(OperatorSupport) + 3 0.000 0.000 0.000 0.000 __init__.py:1460(setLevel) + 1 0.000 0.000 0.000 0.000 adam.py:1() + 1 0.000 0.000 0.000 0.000 conv.py:182(ConvTranspose1d) + 26 0.000 0.000 0.000 0.000 _sources.py:72() + 156 0.000 0.000 0.000 0.000 inspect.py:943() + 1 0.000 0.000 0.000 0.000 symbol.py:388(Dummy) + 1 0.000 0.000 0.000 0.000 {function SeedSequence.generate_state at 0x7fd62dc82200} + 1 0.000 0.000 0.000 0.000 core.py:3596(ParseExpression) + 43 0.000 0.000 0.000 0.000 symbolic_shapes.py:817(_make_user_magic) + 1 0.000 0.000 0.000 0.000 single.py:2576(NthLinearEulerEqNonhomogeneousUndeterminedCoefficients) + 1 0.000 0.000 0.000 0.000 :44(_get_exports_list) + 1 0.000 0.000 0.000 0.000 reciprocity.py:1() + 37 0.000 0.000 0.000 0.000 facts.py:433() + 1 0.000 0.000 0.000 0.000 negative_binomial.py:1() + 1 0.000 0.000 0.000 0.000 rnn.py:32(RNNBase) + 2 0.000 0.000 0.000 0.000 _structures.py:1() + 44 0.000 0.000 0.000 0.000 core.py:1844(set_name) + 1 0.000 0.000 0.000 0.000 experimental_lambdify.py:1() + 46 0.000 0.000 0.000 0.000 _docscrape.py:29(__init__) + 5 0.000 0.000 0.000 0.000 pathlib.py:765(__truediv__) + 32 0.000 0.000 0.000 0.000 process.py:99(_check_closed) + 114 0.000 0.000 0.000 0.000 dataclasses.py:397() + 2 0.000 0.000 0.000 0.000 inference.py:1() + 27 0.000 0.000 0.000 0.000 pretty_symbology.py:122() + 1 0.000 0.000 0.000 0.000 polyoptions.py:257(Expand) + 1 0.000 0.000 0.000 0.000 package_exporter.py:74(PackagingErrorReason) + 1 0.000 0.000 0.000 0.000 _dataclass_impls.py:1() + 1 0.000 0.000 0.000 0.000 DAG.py:1() + 6 0.000 0.000 0.000 0.000 {method 'union' of 'set' objects} + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:47(Action) + 1 0.000 0.000 0.000 0.000 ask_generated.py:1() + 7 0.000 0.000 0.000 0.000 _util.py:682(decorator) + 1 0.000 0.000 0.000 0.000 parametrizations.py:33(_OrthMaps) + 261 0.000 0.000 0.000 0.000 :7(abstractmethod) + 1 0.000 0.000 0.000 0.000 greedy_coloring.py:1() + 94 0.000 0.000 0.000 0.000 weakref.py:414(__getitem__) + 1 0.000 0.000 0.000 0.000 _parser.py:569(__init__) + 1 0.000 0.000 0.000 0.000 continuous_bernoulli.py:1() + 77 0.000 0.000 0.000 0.000 core.py:2333(_generateDefaultName) + 1 0.000 0.000 0.000 0.000 iterables.py:789(topological_sort) + 1 0.000 0.000 0.000 0.000 laplacianmatrix.py:1() + 1 0.000 0.000 0.000 0.000 multivariate_normal.py:1() + 1 0.000 0.000 0.000 0.000 quadrature.py:1() + 26 0.000 0.000 0.000 0.000 {built-in method torch._C.call_stack} + 1 0.000 0.000 0.000 0.000 _pyxlsb.py:1() + 1 0.000 0.000 0.000 0.000 constants.py:31(_SendfileMode) + 1 0.000 0.000 0.000 0.000 one_hot_categorical.py:1() + 1 0.000 0.000 0.000 0.000 monomials.py:1() + 1 0.000 0.000 0.000 0.000 degree_alg.py:1() + 2 0.000 0.000 0.000 0.000 multinomial.py:1() + 1 0.000 0.000 0.000 0.000 fu.py:1() + 14 0.000 0.000 0.000 0.000 core.py:8239(_replace_return_type) + 1 0.000 0.000 0.000 0.000 graph.py:131(saved_tensors_hooks) + 1 0.000 0.000 0.000 0.000 tarefa2.py:7(get_yes_probabilities) + 2 0.000 0.000 0.000 0.000 core.py:3262(__init__) + 20/19 0.000 0.000 0.000 0.000 typing.py:1506() + 1 0.000 0.000 0.000 0.000 __init__.py:805(zip_children) + 1 0.000 0.000 0.000 0.000 pydoc.py:1803(Helper) + 2 0.000 0.000 0.000 0.000 hypergeometric.py:1() + 1 0.000 0.000 0.000 0.000 weight_norm.py:1() + 1 0.000 0.000 0.000 0.000 ecm.py:1() + 1 0.000 0.000 0.000 0.000 sdm.py:1() + 1 0.000 0.000 0.000 0.000 multidigraph.py:1() + 1 0.000 0.000 0.000 0.000 _exporter_states.py:43(RuntimeTypeCheckState) + 673 0.000 0.000 0.000 0.000 _beartype.py:34(_no_op_decorator) + 12 0.000 0.000 0.000 0.000 matexpr.py:22(deco) + 2 0.000 0.000 0.000 0.000 init.py:1() + 9 0.000 0.000 0.000 0.000 accessor.py:137(_map_and_wrap) + 1 0.000 0.000 0.000 0.000 gmpy.py:1() + 1 0.000 0.000 0.000 0.000 community.py:1() + 1 0.000 0.000 0.000 0.000 _bsr.py:1() + 62 0.000 0.000 0.000 0.000 __init__.py:26(__new__) + 2 0.000 0.000 0.000 0.000 _elffile.py:21(EIClass) + 1 0.000 0.000 0.000 0.000 fake_utils.py:48(CrossRefFakeMode) + 5 0.000 0.000 0.000 0.000 symbolic_shapes.py:858(_lru_cache) + 1 0.000 0.000 0.000 0.000 subgraph_alg.py:1() + 26 0.000 0.000 0.000 0.000 _sources.py:75() + 1 0.000 0.000 0.000 0.000 dataframe_protocol.py:33(DtypeKind) + 11 0.000 0.000 0.000 0.000 decorator.py:127(update) + 10 0.000 0.000 0.000 0.000 _torch_docs.py:24() + 1 0.000 0.000 0.000 0.000 adamw.py:1() + 19 0.000 0.000 0.000 0.000 ipaddress.py:1157(_make_netmask) + 1 0.000 0.000 0.000 0.000 _shims.py:1() + 1 0.000 0.000 0.000 0.000 win.py:1() + 76 0.000 0.000 0.000 0.000 signal.py:9() + 62 0.000 0.000 0.000 0.000 results.py:431(__iadd__) + 1 0.000 0.000 0.000 0.000 coding.py:1() + 48 0.000 0.000 0.000 0.000 pretty_symbology.py:102() + 1 0.000 0.000 0.000 0.000 core.py:2808(__new__) + 1 0.000 0.000 0.000 0.000 package_exporter.py:53(_ModuleProviderAction) + 13 0.000 0.000 0.000 0.000 sympy_parser.py:1224() + 8 0.000 0.000 0.000 0.000 _ops.py:603(__getattr__) + 1 0.000 0.000 0.000 0.000 _xlrd.py:1() + 1 0.000 0.000 0.000 0.000 unweighted.py:1() + 3 0.000 0.000 0.000 0.000 blas.py:384(getter) + 30 0.000 0.000 0.000 0.000 contextlib.py:104(__init__) + 1 0.000 0.000 0.000 0.000 powsimp.py:1() + 1 0.000 0.000 0.000 0.000 polyquinticconst.py:1() + 48 0.000 0.000 0.000 0.000 lapack.py:861(backtickrepl) + 3 0.000 0.000 0.000 0.000 _decorators.py:516(indent) + 1 0.000 0.000 0.000 0.000 _parser.py:294(__init__) + 3 0.000 0.000 0.000 0.000 symbolic_opset10.py:240(_avg_pool) + 8 0.000 0.000 0.000 0.000 typing_extensions.py:526(_get_protocol_attrs) + 1 0.000 0.000 0.000 0.000 _validators.py:1() + 197 0.000 0.000 0.000 0.000 :1220(__init__) + 1 0.000 0.000 0.000 0.000 _datasource.py:1() + 1 0.000 0.000 0.000 0.000 combining.py:56(ZipperMapDataPipe) + 8 0.000 0.000 0.000 0.000 core.py:5716() + 1 0.000 0.000 0.000 0.000 _quad_vec.py:1() + 1 0.000 0.000 0.000 0.000 symbolic_opset15.py:1() + 13 0.000 0.000 0.000 0.000 _dtype_ctypes.py:100(dtype_from_ctypes_type) + 1 0.000 0.000 0.000 0.000 _string_helpers.py:9() + 44 0.000 0.000 0.000 0.000 {built-in method posix.close} + 1 0.000 0.000 0.000 0.000 ElementTree.py:477(QName) + 1 0.000 0.000 0.000 0.000 _factories.py:1() + 1 0.000 0.000 0.000 0.000 _xlsxwriter.py:1() + 16 0.000 0.000 0.000 0.000 spawn.py:35(_check_not_importing_main) + 1 0.000 0.000 0.000 0.000 pretty_symbology.py:121() + 1 0.000 0.000 0.000 0.000 filelister.py:13(FileListerIterDataPipe) + 3 0.000 0.000 0.000 0.000 context.py:121(_cpu_count_cgroup) + 5 0.000 0.000 0.000 0.000 symbolic_opset9.py:2119(wrap_logical_op_with_negation) + 1 0.000 0.000 0.000 0.000 simple_paths.py:1() + 1 0.000 0.000 0.000 0.000 asteroidal.py:1() + 3 0.000 0.000 0.000 0.000 typing.py:341(_tp_cache) + 98 0.000 0.000 0.000 0.000 results.py:191(__getitem__) + 4/3 0.000 0.000 0.000 0.000 {method 'view' of 'numpy.ndarray' objects} + 1 0.000 0.000 0.000 0.000 extrapolation.py:1() + 125 0.000 0.000 0.000 0.000 _docscrape.py:156(__setitem__) + 1 0.000 0.000 0.000 0.000 fold.py:1() + 1 0.000 0.000 0.000 0.000 display.py:1() + 21 0.000 0.000 0.000 0.000 typing.py:327(_flatten_literal_params) + 1 0.000 0.000 0.000 0.000 _memmapping_reducer.py:342(__init__) + 1 0.000 0.000 0.000 0.000 split_utils.py:31(Component) + 1 0.000 0.000 0.000 0.000 conv.py:156(Conv2d) + 114 0.000 0.000 0.000 0.000 typing.py:1399() + 1 0.000 0.000 0.000 0.000 __init__.py:1303(Manager) + 1 0.000 0.000 0.000 0.000 product.py:1() + 192 0.000 0.000 0.000 0.000 {method 'random' of '_random.Random' objects} + 173 0.000 0.000 0.000 0.000 {method 'capitalize' of 'str' objects} + 1 0.000 0.000 0.000 0.000 datapipe.py:42(IterDataPipe) + 1 0.000 0.000 0.000 0.000 core.py:2890(Regex) + 1 0.000 0.000 0.000 0.000 grouping.py:144(GrouperIterDataPipe) + 88 0.000 0.000 0.000 0.000 six.py:146(__init__) + 1 0.000 0.000 0.000 0.000 directed.py:1() + 1 0.000 0.000 0.000 0.000 discretize.py:1() + 1 0.000 0.000 0.000 0.000 treewidth.py:1() + 20 0.000 0.000 0.000 0.000 :229(expanduser) + 1 0.000 0.000 0.000 0.000 _tensor_str.py:1() + 1 0.000 0.000 0.000 0.000 _testutils.py:1() + 2 0.000 0.000 0.000 0.000 log.py:1() + 2 0.000 0.000 0.000 0.000 _strptime.py:128() + 1 0.000 0.000 0.000 0.000 transforms.py:270(ComposeTransform) + 129 0.000 0.000 0.000 0.000 traceback.py:325(walk_stack) + 1 0.000 0.000 0.000 0.000 regular.py:1() + 1 0.000 0.000 0.000 0.000 filelist.py:1() + 2 0.000 0.000 0.000 0.000 markers.py:193(Marker) + 2 0.000 0.000 0.000 0.000 recipes.py:1() + 1 0.000 0.000 0.000 0.000 unix_events.py:1041(SafeChildWatcher) + 255 0.000 0.000 0.000 0.000 docscrape.py:53(reset) + 16 0.000 0.000 0.000 0.000 _type_aliases.py:44(_bits_of) + 4 0.000 0.000 0.000 0.000 {built-in method posix.cpu_count} + 1 0.000 0.000 0.000 0.000 flow_matrix.py:1() + 1 0.000 0.000 0.000 0.000 radam.py:1() + 1 0.000 0.000 0.000 0.000 relaxed_categorical.py:1() + 16 0.000 0.000 0.000 0.000 spawn.py:68() + 1 0.000 0.000 0.000 0.000 breadth_first_search.py:1() + 1 0.000 0.000 0.000 0.000 integrals.py:34(Integral) + 1 0.000 0.000 0.000 0.000 numbers.py:856(Float) + 1 0.000 0.000 0.000 0.000 storage.py:18(_StorageBase) + 1 0.000 0.000 0.000 0.000 _contextlib.py:1() + 25 0.000 0.000 0.000 0.000 pretty_symbology.py:110() + 1 0.000 0.000 0.000 0.000 function.py:296(_SingleLevelFunction) + 1 0.000 0.000 0.000 0.000 uniform.py:1() + 1 0.000 0.000 0.000 0.000 parametrize.py:69(ParametrizationList) + 1 0.000 0.000 0.000 0.000 generators.py:1() + 1 0.000 0.000 0.000 0.000 isomorphvf2.py:1() + 2 0.000 0.000 0.000 0.000 textwrap.py:157(_split) + 4 0.000 0.000 0.000 0.000 _strptime.py:26(_getlang) + 2 0.000 0.000 0.000 0.000 expressiondomain.py:25(__init__) + 1 0.000 0.000 0.000 0.000 adagrad.py:1() + 1 0.000 0.000 0.000 0.000 power.py:186(Pow) + 1 0.000 0.000 0.000 0.000 report.py:1() + 1 0.000 0.000 0.000 0.000 sgd.py:1() + 1 0.000 0.000 0.000 0.000 weakly_connected.py:1() + 1 0.000 0.000 0.000 0.000 parameters.py:1() + 29 0.000 0.000 0.000 0.000 rational.py:31(__new__) + 1 0.000 0.000 0.000 0.000 testing.py:15(pyparsing_test) + 1 0.000 0.000 0.000 0.000 dataset.py:202(ConcatDataset) + 7 0.000 0.000 0.000 0.000 symbolic_opset11.py:345(_interpolate) + 1 0.000 0.000 0.000 0.000 extensions.py:1() + 26 0.000 0.000 0.000 0.000 pretty_symbology.py:119() + 1 0.000 0.000 0.000 0.000 storage.py:341(TypedStorage) + 2 0.000 0.000 0.000 0.000 lsoda.py:1() + 1 0.000 0.000 0.000 0.000 numbers.py:4482(_register_classes) + 1 0.000 0.000 0.000 0.000 modules.py:602(SubModule) + 18 0.000 0.000 0.000 0.000 weakref.py:367(__init__) + 7 0.000 0.000 0.000 0.000 transforms.py:252(make_wrapper) + 3 0.000 0.000 0.000 0.000 typing.py:345(decorator) + 89 0.000 0.000 0.000 0.000 {method 'setter' of 'property' objects} + 24 0.000 0.000 0.000 0.000 _docscrape.py:287(parse_item_name) + 1 0.000 0.000 0.000 0.000 _dok.py:1() + 26/18 0.000 0.000 0.000 0.000 typing.py:2377(_strip_annotations) + 64 0.000 0.000 0.000 0.000 connection.py:158(readable) + 6 0.000 0.000 0.000 0.000 core.py:5711() + 1 0.000 0.000 0.000 0.000 zipfile.py:2390(__init__) + 1 0.000 0.000 0.000 0.000 conv.py:180(Conv1d) + 6 0.000 0.000 0.000 0.000 contextlib.py:77(__call__) + 25 0.000 0.000 0.000 0.000 threading.py:359(notify) + 1 0.000 0.000 0.000 0.000 MarkovNetwork.py:1() + 1 0.000 0.000 0.000 0.000 conv.py:214(Conv3d) + 1 0.000 0.000 0.000 0.000 profiler.py:446(record_function) + 1 0.000 0.000 0.000 0.000 lbfgs.py:1() + 1 0.000 0.000 0.000 0.000 qconfig_mapping.py:1() + 1 0.000 0.000 0.000 0.000 fake_tensor.py:748(FakeTensor) + 157 0.000 0.000 0.000 0.000 {built-in method torch._C.get} + 158 0.000 0.000 0.000 0.000 _deprecated_my_exceptions.py:102() + 6 0.000 0.000 0.000 0.000 core.py:4972(_generateDefaultName) + 3 0.000 0.000 0.000 0.000 __init__.py:1415(_clear_cache) + 26 0.000 0.000 0.000 0.000 contextlib.py:141(__exit__) + 1 0.000 0.000 0.000 0.000 printer.py:352(_PrintFunction) + 1 0.000 0.000 0.000 0.000 conv.py:47(_ConvNd) + 87 0.000 0.000 0.000 0.000 kl.py:41(register_kl) + 40 0.000 0.000 0.000 0.000 getlimits.py:24(_fr1) + 11 0.000 0.000 0.000 0.000 warnings.py:181(_add_filter) + 8 0.000 0.000 0.000 0.000 DAG.py:87(add_node) + 3/1 0.000 0.000 0.000 0.000 _utils.py:36(eval_) + 1 0.000 0.000 0.000 0.000 libmpf.py:136() + 112 0.000 0.000 0.000 0.000 numbers.py:2284(__hash__) + 1 0.000 0.000 0.000 0.000 selecting.py:19(FilterIterDataPipe) + 1 0.000 0.000 0.000 0.000 _python_dispatch.py:1() + 1 0.000 0.000 0.000 0.000 rmsprop.py:1() + 3 0.000 0.000 0.000 0.000 blas.py:411(get_blas_funcs) + 1 0.000 0.000 0.000 0.000 umath.py:1() + 1 0.000 0.000 0.000 0.000 _asarray.py:1() + 1 0.000 0.000 0.000 0.000 fancysets.py:1438(PolarComplexRegion) + 1 0.000 0.000 0.000 0.000 mixture_same_family.py:1() + 1 0.000 0.000 0.000 0.000 numbers.py:3255(Infinity) + 3 0.000 0.000 0.000 0.000 __config__.py:1() + 412 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects} + 1 0.000 0.000 0.000 0.000 stata.py:1115(StataReader) + 1 0.000 0.000 0.000 0.000 pythonrationalfield.py:1() + 1 0.000 0.000 0.000 0.000 _memmapping_reducer.py:571(_unregister_context) + 1 0.000 0.000 0.000 0.000 CPD.py:1() + 1 0.000 0.000 0.000 0.000 distributed.py:148(_BufferCommHookLocation) + 6 0.000 0.000 0.000 0.000 categorical.py:131(_cat_compare_op) + 1 0.000 0.000 0.000 0.000 _weights_only_unpickler.py:1() + 26 0.000 0.000 0.000 0.000 pretty_symbology.py:118() + 1 0.000 0.000 0.000 0.000 cache.py:1() + 1 0.000 0.000 0.000 0.000 symbolic_opset16.py:1() + 85 0.000 0.000 0.000 0.000 docscrape.py:370() + 6 0.000 0.000 0.000 0.000 memoization.py:12(decorator) + 1 0.000 0.000 0.000 0.000 __init__.py:1031(Environment) + 2 0.000 0.000 0.000 0.000 sysconfig.py:118(joinuser) + 1 0.000 0.000 0.000 0.000 _path.py:1() + 1 0.000 0.000 0.000 0.000 logging_handlers.py:1() + 1 0.000 0.000 0.000 0.000 _kdtree.py:206(KDTree) + 1 0.000 0.000 0.000 0.000 d_separation.py:1() + 32 0.000 0.000 0.000 0.000 process.py:94() + 1 0.000 0.000 0.000 0.000 conv.py:316(Conv2d) + 1 0.000 0.000 0.000 0.000 pixelshuffle.py:1() + 1 0.000 0.000 0.000 0.000 numbers.py:3445(NegativeInfinity) + 1 0.000 0.000 0.000 0.000 dense_ndim_array.py:13(DenseNDimArray) + 1 0.000 0.000 0.000 0.000 symbol.py:206(Symbol) + 7 0.000 0.000 0.000 0.000 __init__.py:815(mtime) + 1 0.000 0.000 0.000 0.000 autocast_mode.py:18(autocast) + 34 0.000 0.000 0.000 0.000 typing.py:2402(get_origin) + 1 0.000 0.000 0.000 0.000 _globals.py:93(_CopyMode) + 1 0.000 0.000 0.000 0.000 adamax.py:1() + 1 0.000 0.000 0.000 0.000 gaussiandomains.py:326(GaussianIntegerRing) + 3 0.000 0.000 0.000 0.000 core.py:1613(__invert__) + 2 0.000 0.000 0.000 0.000 pathlib.py:1036(open) + 1 0.000 0.000 0.000 0.000 _adapters.py:49() + 2 0.000 0.000 0.000 0.000 __init__.py:1243(__init__) + 573 0.000 0.000 0.000 0.000 {built-in method _sre.unicode_tolower} + 1 0.000 0.000 0.000 0.000 asgd.py:1() + 34 0.000 0.000 0.000 0.000 traceback.py:297(__getitem__) + 1 0.000 0.000 0.000 0.000 sslproto.py:19(SSLProtocolState) + 16 0.000 0.000 0.000 0.000 arraypad.py:129(_set_pad_area) + 1 0.000 0.000 0.000 0.000 ideals.py:1() + 1 0.000 0.000 0.000 0.000 rprop.py:1() + 1 0.000 0.000 0.000 0.000 _norm.py:1() + 1 0.000 0.000 0.000 0.000 proxy.py:321(Proxy) + 215 0.000 0.000 0.000 0.000 symbolic_helper.py:234(parse_args) + 1 0.000 0.000 0.000 0.000 math2.py:1() + 7 0.000 0.000 0.000 0.000 symbolic_helper.py:1064(_interpolate_helper) + 8 0.000 0.000 0.000 0.000 _base.py:408(add_done_callback) + 4 0.000 0.000 0.000 0.000 core.py:5451(__init__) + 1 0.000 0.000 0.000 0.000 memmap.py:1() + 1 0.000 0.000 0.000 0.000 sequences.py:26(SeqBase) + 1 0.000 0.000 0.000 0.000 multigraph.py:1() + 1 0.000 0.000 0.000 0.000 expressions.py:381(ExpressionNode) + 62 0.000 0.000 0.000 0.000 unary.py:149(_torch_unary) + 1 0.000 0.000 0.000 0.000 context.py:60(Pipe) + 1 0.000 0.000 0.000 0.000 __init__.py:172(SDPBackend) + 27 0.000 0.000 0.000 0.000 decorators.py:103(open_file) + 1 0.000 0.000 0.000 0.000 combining.py:313(DemultiplexerIterDataPipe) + 6 0.000 0.000 0.000 0.000 message.py:489(get) + 1 0.000 0.000 0.000 0.000 profiler_legacy.py:1() + 1 0.000 0.000 0.000 0.000 registration.py:123(_SymbolicFunctionGroup) + 1 0.000 0.000 0.000 0.000 kumaraswamy.py:1() + 2 0.000 0.000 0.000 0.000 _strptime.py:84() + 1 0.000 0.000 0.000 0.000 _random.py:1() + 19 0.000 0.000 0.000 0.000 typing.py:1698(__hash__) + 2 0.000 0.000 0.000 0.000 __init__.py:581() + 1 0.000 0.000 0.000 0.000 biconnected.py:1() + 1 0.000 0.000 0.000 0.000 _policybase.py:99(_extend_docstrings) + 1 0.000 0.000 0.000 0.000 expressionrawdomain.py:1() + 1 0.000 0.000 0.000 0.000 zipfile.py:2266(make) + 3 0.000 0.000 0.000 0.000 __init__.py:89(extend) + 1 0.000 0.000 0.000 0.000 registration.py:64(OverrideDict) + 1 0.000 0.000 0.000 0.000 polyconfig.py:52(configure) + 1 0.000 0.000 0.000 0.000 trigonometric.py:2105(InverseTrigonometricFunction) + 2 0.000 0.000 0.000 0.000 _elffile.py:26(EIData) + 1 0.000 0.000 0.000 0.000 meta_utils.py:70(MetaConverter) + 204 0.000 0.000 0.000 0.000 results.py:244(__bool__) + 6 0.000 0.000 0.000 0.000 platform.py:1111(python_implementation) + 322 0.000 0.000 0.000 0.000 inspect.py:3036(return_annotation) + 1 0.000 0.000 0.000 0.000 _trustregion_exact.py:1() + 1 0.000 0.000 0.000 0.000 conv.py:465(Conv3d) + 1 0.000 0.000 0.000 0.000 cauchy.py:1() + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:154(_prepare_worker_env) + 24 0.000 0.000 0.000 0.000 proxy.py:514(_scope) + 1 0.000 0.000 0.000 0.000 sets.py:44(Set) + 1 0.000 0.000 0.000 0.000 containers.py:217(Dict) + 1 0.000 0.000 0.000 0.000 layout.py:1() + 75 0.000 0.000 0.000 0.000 config.py:772(wrap) + 12 0.000 0.000 0.000 0.000 :933(clear) + 259 0.000 0.000 0.000 0.000 {method 'values' of 'dict' objects} + 162 0.000 0.000 0.000 0.000 _compatibility.py:7(compatibility) + 1 0.000 0.000 0.000 0.000 _sputils.py:1() + 8 0.000 0.000 0.000 0.000 _ufunc_config.py:33(seterr) + 1 0.000 0.000 0.000 0.000 arraypad.py:1() + 1 0.000 0.000 0.000 0.000 swap.py:1() + 1 0.000 0.000 0.000 0.000 tz.py:488(_read_tzfile) + 2 0.000 0.000 0.000 0.000 core.py:2966(__array_finalize__) + 1 0.000 0.000 0.000 0.000 katz.py:1() + 52 0.000 0.000 0.000 0.000 _add_newdocs.py:6753(refer_to_array_attribute) + 2 0.000 0.000 0.000 0.000 immutable_collections.py:18(_create_immutable_container) + 3 0.000 0.000 0.000 0.000 monkey.py:36(get_unpatched) + 1 0.000 0.000 0.000 0.000 graph.py:267(_PyTreeInfo) + 104 0.000 0.000 0.000 0.000 {method 'translate' of 'bytearray' objects} + 84 0.000 0.000 0.000 0.000 backends.py:103(_register_algo) + 16 0.000 0.000 0.000 0.000 _docscrape.py:573(get_func) + 1 0.000 0.000 0.000 0.000 lowest_common_ancestors.py:1() + 18 0.000 0.000 0.000 0.000 base.py:423(register_extension_dtype) + 1 0.000 0.000 0.000 0.000 octave.py:1() + 16 0.000 0.000 0.000 0.000 core.py:2820(parseImpl) + 46 0.000 0.000 0.000 0.000 getlimits.py:101(_float_conv) + 3 0.000 0.000 0.000 0.000 __init__.py:36(__deprecate_private_class) + 1 0.000 0.000 0.000 0.000 networksimplex.py:1() + 1 0.000 0.000 0.000 0.000 von_mises.py:70(VonMises) + 1 0.000 0.000 0.000 0.000 fishersnedecor.py:1() + 1 0.000 0.000 0.000 0.000 _rules.py:22(_NodeMissingOnnxShapeInference) + 170 0.000 0.000 0.000 0.000 docscrape.py:159(__getitem__) + 3 0.000 0.000 0.000 0.000 core.py:4739(__init__) + 2 0.000 0.000 0.000 0.000 traversal.py:1() + 18 0.000 0.000 0.000 0.000 logic.py:372() + 47 0.000 0.000 0.000 0.000 ipaddress.py:156(_split_optional_netmask) + 1 0.000 0.000 0.000 0.000 timeouts.py:18(_State) + 295 0.000 0.000 0.000 0.000 enum.py:238(__init__) + 1 0.000 0.000 0.000 0.000 _tool_component.py:19(ToolComponent) + 2 0.000 0.000 0.000 0.000 config.py:262(__call__) + 58 0.000 0.000 0.000 0.000 unary.py:158(_torch_inplace_unary) + 83 0.000 0.000 0.000 0.000 _docscrape.py:426(_str_header) + 1 0.000 0.000 0.000 0.000 rationalfield.py:1() + 44 0.000 0.000 0.000 0.000 threading.py:267(__exit__) + 465 0.000 0.000 0.000 0.000 logic.py:420(arg) + 1 0.000 0.000 0.000 0.000 trace_dependencies.py:1() + 2 0.000 0.000 0.000 0.000 euler.py:1() + 6 0.000 0.000 0.000 0.000 misc.py:181(debug_decorator) + 25 0.000 0.000 0.000 0.000 pretty_symbology.py:134() + 1 0.000 0.000 0.000 0.000 weak.py:79(WeakIdKeyDictionary) + 1 0.000 0.000 0.000 0.000 _compatibility.py:1() + 2 0.000 0.000 0.000 0.000 signals.py:1() + 43 0.000 0.000 0.000 0.000 ctx_mp_python.py:979(_wrap_libmp_function) + 26 0.000 0.000 0.000 0.000 _policybase.py:293(header_source_parse) + 1 0.000 0.000 0.000 0.000 _result.py:28(Result) + 98 0.000 0.000 0.000 0.000 feedparser.py:78(readline) + 1 0.000 0.000 0.000 0.000 __init__.py:182(get_supported_platform) + 1 0.000 0.000 0.000 0.000 independent.py:1() + 1 0.000 0.000 0.000 0.000 _run.py:30(Run) + 7 0.000 0.000 0.000 0.000 _parser.py:309(_convert) + 1 0.000 0.000 0.000 0.000 proxy_tensor.py:516(ProxySymDispatchMode) + 10 0.000 0.000 0.000 0.000 __init__.py:386(__getattr__) + 1 0.000 0.000 0.000 0.000 transforms.py:831(InverseMellinTransform) + 1 0.000 0.000 0.000 0.000 jiterator.py:1() + 1 0.000 0.000 0.000 0.000 _pytree.py:114(TreeSpec) + 12 0.000 0.000 0.000 0.000 misc.py:295(func_name) + 3 0.000 0.000 0.000 0.000 doccer.py:160(_doc) + 1 0.000 0.000 0.000 0.000 _xlwt.py:1() + 1 0.000 0.000 0.000 0.000 bridges.py:1() + 4 0.000 0.000 0.000 0.000 __init__.py:576(__init__) + 113 0.000 0.000 0.000 0.000 traceback.py:264(__init__) + 3 0.000 0.000 0.000 0.000 symbolic_opset11.py:577(_avg_pool) + 1 0.000 0.000 0.000 0.000 reductions.py:379(init_reductions) + 2 0.000 0.000 0.000 0.000 sysconfig.py:719(get_platform) + 192 0.000 0.000 0.000 0.000 {built-in method math.floor} + 6 0.000 0.000 0.000 0.000 nanops.py:111(__call__) + 10 0.000 0.000 0.000 0.000 typing.py:1665(__repr__) + 1 0.000 0.000 0.000 0.000 __init__.py:319(ELEMENTWISE_PRIM_TYPE_PROMOTION_KIND) + 1 0.000 0.000 0.000 0.000 internal.py:23(RPCExecMode) + 11 0.000 0.000 0.000 0.000 {built-in method _warnings.warn} + 4 0.000 0.000 0.000 0.000 locale.py:593(getlocale) + 1 0.000 0.000 0.000 0.000 _coo.py:1() + 1 0.000 0.000 0.000 0.000 chains.py:1() + 2 0.000 0.000 0.000 0.000 stubs.py:1() + 16 0.000 0.000 0.000 0.000 __init__.py:3229(_find_adapter) + 2 0.000 0.000 0.000 0.000 subprocess.py:300(_args_from_interpreter_flags) + 1 0.000 0.000 0.000 0.000 rootoftools.py:165(ComplexRootOf) + 1 0.000 0.000 0.000 0.000 gamma.py:1() + 1 0.000 0.000 0.000 0.000 hooks.py:1() + 1 0.000 0.000 0.000 0.000 extension.py:138(ExtensionIndex) + 29 0.000 0.000 0.000 0.000 constraint_registry.py:106() + 1 0.000 0.000 0.000 0.000 graph.py:275(CodeGen) + 1 0.000 0.000 0.000 0.000 evalf.py:1401(_create_evalf_table) + 1 0.000 0.000 0.000 0.000 digraph.py:316(__init__) + 1 0.000 0.000 0.000 0.000 _classes.py:1() + 6 0.000 0.000 0.000 0.000 bessel.py:670(assume_integer_order) + 1 0.000 0.000 0.000 0.000 distributed.py:13(DistributedSampler) + 3 0.000 0.000 0.000 0.000 connection.py:515(Pipe) + 72 0.000 0.000 0.000 0.000 connection.py:134(_check_closed) + 1 0.000 0.000 0.000 0.000 dataframe_protocol.py:64(ColumnNullType) + 23 0.000 0.000 0.000 0.000 qconfig.py:98(__new__) + 1 0.000 0.000 0.000 0.000 pretty.py:30(PrettyPrinter) + 2 0.000 0.000 0.000 0.000 source.py:1() + 1 0.000 0.000 0.000 0.000 profiler.py:230(ProfilerAction) + 1 0.000 0.000 0.000 0.000 libmpi.py:1() + 7 0.000 0.000 0.000 0.000 _common.py:411(memoize_when_activated) + 7 0.000 0.000 0.000 0.000 _legacy.py:15(deprecated) + 2 0.000 0.000 0.000 0.000 cloudpickle_fast.py:540(CloudPickler) + 1 0.000 0.000 0.000 0.000 profiler.py:820(KinetoStepTracker) + 2 0.000 0.000 0.000 0.000 numeric.py:150(ones) + 1 0.000 0.000 0.000 0.000 poisson.py:1() + 1 0.000 0.000 0.000 0.000 context.py:35(get_context) + 1 0.000 0.000 0.000 0.000 gmpyintegerring.py:1() + 1 0.000 0.000 0.000 0.000 quoprimime.py:55() + 1 0.000 0.000 0.000 0.000 _invocation.py:17(Invocation) + 1 0.000 0.000 0.000 0.000 symbolic_opset17.py:1() + 16 0.000 0.000 0.000 0.000 _docscrape.py:509(_str_index) + 1 0.000 0.000 0.000 0.000 quant_type.py:9(QuantType) + 2 0.000 0.000 0.000 0.000 sorting.py:1() + 3 0.000 0.000 0.000 0.000 core.py:3297(_generateDefaultName) + 1 0.000 0.000 0.000 0.000 const_fold.py:11(FoldedGraphModule) + 3 0.000 0.000 0.000 0.000 _common.py:710(open_binary) + 1 0.000 0.000 0.000 0.000 recurr.py:1() + 12 0.000 0.000 0.000 0.000 core.py:287(wrapper) + 1 0.000 0.000 0.000 0.000 _sf_error.py:1() + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:298(OpTree) + 3 0.000 0.000 0.000 0.000 symbolic_opset9.py:4792(_one_hidden_rnn) + 1 0.000 0.000 0.000 0.000 modularitymatrix.py:1() + 1 0.000 0.000 0.000 0.000 julia.py:1() + 1 0.000 0.000 0.000 0.000 rendezvous.py:1() + 1 0.000 0.000 0.000 0.000 _monitor.py:1() + 7 0.000 0.000 0.000 0.000 uuid.py:139(__init__) + 1 0.000 0.000 0.000 0.000 rust.py:1() + 32 0.000 0.000 0.000 0.000 six.py:194(find_spec) + 1 0.000 0.000 0.000 0.000 variable.py:1() + 61 0.000 0.000 0.000 0.000 _inspect.py:144() + 1 0.000 0.000 0.000 0.000 tile.py:1() + 1 0.000 0.000 0.000 0.000 maxcut.py:1() + 2 0.000 0.000 0.000 0.000 distance_measures.py:1() + 1 0.000 0.000 0.000 0.000 half_cauchy.py:1() + 16 0.000 0.000 0.000 0.000 fromnumeric.py:3245(around) + 1 0.000 0.000 0.000 0.000 rings.py:556(PolyElement) + 1 0.000 0.000 0.000 0.000 indexing.py:1096(_LocIndexer) + 1 0.000 0.000 0.000 0.000 communicability_alg.py:1() + 1 0.000 0.000 0.000 0.000 temporalisomorphvf2.py:1() + 1 0.000 0.000 0.000 0.000 locks.py:439(_BarrierState) + 8 0.000 0.000 0.000 0.000 {method 'flatten' of 'numpy.ndarray' objects} + 1 0.000 0.000 0.000 0.000 primes.py:1() + 1 0.000 0.000 0.000 0.000 _svds.py:1() + 1 0.000 0.000 0.000 0.000 nvtx.py:1() + 1 0.000 0.000 0.000 0.000 normal.py:1() + 1 0.000 0.000 0.000 0.000 core.py:4344(ParseElementEnhance) + 1 0.000 0.000 0.000 0.000 ctx_mp_python.py:585(__init__) + 1 0.000 0.000 0.000 0.000 c10d_error_logger.py:17(_get_or_create_logger) + 1 0.000 0.000 0.000 0.000 compatibility.py:229(IPolys) + 2 0.000 0.000 0.000 0.000 config.py:134(_get_option) + 1 0.000 0.000 0.000 0.000 ismags.py:1() + 1 0.000 0.000 0.000 0.000 NET.py:1() + 1 0.000 0.000 0.000 0.000 _ksstats.py:1() + 5 0.000 0.000 0.000 0.000 warnings.py:165(simplefilter) + 54 0.000 0.000 0.000 0.000 expressions.py:75(ophelper) + 234 0.000 0.000 0.000 0.000 __init__.py:96() + 1 0.000 0.000 0.000 0.000 observer.py:888(HistogramObserver) + 4 0.000 0.000 0.000 0.000 ssl.py:461(__new__) + 8 0.000 0.000 0.000 0.000 DAG.py:188(add_edge) + 7 0.000 0.000 0.000 0.000 __init__.py:848(search) + 134 0.000 0.000 0.000 0.000 enum.py:441() + 1 0.000 0.000 0.000 0.000 pareto.py:1() + 20 0.000 0.000 0.000 0.000 :309(__init__) + 4 0.000 0.000 0.000 0.000 message.py:591(get_content_type) + 1 0.000 0.000 0.000 0.000 studentT.py:1() + 1 0.000 0.000 0.000 0.000 _utils.py:46(EventKey) + 1 0.000 0.000 0.000 0.000 _csc.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:1131(REDUCTION_OUTPUT_TYPE_KIND) + 6 0.000 0.000 0.000 0.000 symbolic_opset9.py:1730(_adaptive_pool) + 1 0.000 0.000 0.000 0.000 :1536(find_distributions) + 1 0.000 0.000 0.000 0.000 throughput_benchmark.py:1() + 1 0.000 0.000 0.000 0.000 laplace.py:1() + 1 0.000 0.000 0.000 0.000 enumerative.py:1() + 124 0.000 0.000 0.000 0.000 functions.py:85(defun) + 4 0.000 0.000 0.000 0.000 _common.py:379(memoize) + 362 0.000 0.000 0.000 0.000 core.py:772(postParse) + 1 0.000 0.000 0.000 0.000 _ir_utils.py:4(_InsertPoint) + 1 0.000 0.000 0.000 0.000 _hook_iterator.py:8(_SnapshotState) + 52 0.000 0.000 0.000 0.000 accessor.py:68(forbid_nonstring_types) + 1 0.000 0.000 0.000 0.000 multiline_adjlist.py:1() + 1 0.000 0.000 0.000 0.000 _polybase.py:18(ABCPolyBase) + 25 0.000 0.000 0.000 0.000 polyoptions.py:64(__init__) + 1 0.000 0.000 0.000 0.000 symbolic_shapes.py:888(Symbol) + 8 0.000 0.000 0.000 0.000 connection.py:364(_send) + 1 0.000 0.000 0.000 0.000 XMLBeliefNetwork.py:1() + 1 0.000 0.000 0.000 0.000 decomposition.py:1() + 1 0.000 0.000 0.000 0.000 kind.py:190(KindDispatcher) + 1 0.000 0.000 0.000 0.000 filesystem.py:250(_get_instance) + 1 0.000 0.000 0.000 0.000 louvain.py:1() + 3 0.000 0.000 0.000 0.000 blas.py:326(_get_funcs) + 1 0.000 0.000 0.000 0.000 __init__.py:430(get_build_platform) + 1 0.000 0.000 0.000 0.000 dop853_coefficients.py:1() + 2 0.000 0.000 0.000 0.000 calculus.py:1() + 30 0.000 0.000 0.000 0.000 threading.py:90(RLock) + 1 0.000 0.000 0.000 0.000 LinearGaussianBayesianNetwork.py:1() + 1 0.000 0.000 0.000 0.000 glsl.py:1() + 3 0.000 0.000 0.000 0.000 core.py:4879(__init__) + 1 0.000 0.000 0.000 0.000 rnn.py:382(LSTM) + 6 0.000 0.000 0.000 0.000 gaussiandomains.py:21(__new__) + 1 0.000 0.000 0.000 0.000 taskgroups.py:1() + 54/46 0.000 0.000 0.000 0.000 fake_tensor.py:94() + 38 0.000 0.000 0.000 0.000 observer.py:77(_with_args) + 1 0.000 0.000 0.000 0.000 group.py:1() + 1 0.000 0.000 0.000 0.000 anomaly_mode.py:1() + 79 0.000 0.000 0.000 0.000 {method 'copy' of 'numpy.ndarray' objects} + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:323(norm_gen) + 1 0.000 0.000 0.000 0.000 _type_aliases.py:211(_set_array_types) + 1 0.000 0.000 0.000 0.000 UAI.py:1() + 78 0.000 0.000 0.000 0.000 _decorators.py:264(deprecate_nonkeyword_arguments) + 1 0.000 0.000 0.000 0.000 weibull.py:1() + 6 0.000 0.000 0.000 0.000 symbolic_opset10.py:262(_interpolate) + 4 0.000 0.000 0.000 0.000 _ufunc_config.py:430(__enter__) + 1 0.000 0.000 0.000 0.000 _spectral.py:1() + 2 0.000 0.000 0.000 0.000 dispatcher.py:46(ambiguity_register_error_ignore_dup) + 1 0.000 0.000 0.000 0.000 fractionfield.py:1() + 2 0.000 0.000 0.000 0.000 :200(makedirs) + 168 0.000 0.000 0.000 0.000 expr.py:256(_node_not_implemented) + 9 0.000 0.000 0.000 0.000 config.py:818(is_instance_factory) + 26/18 0.000 0.000 0.000 0.000 typing.py:363(_eval_type) + 1 0.000 0.000 0.000 0.000 matrices.py:587(MatrixDeprecated) + 104 0.000 0.000 0.000 0.000 inspect.py:456(istraceback) + 127 0.000 0.000 0.000 0.000 ssl.py:125() + 1 0.000 0.000 0.000 0.000 distributed_c10d.py:397(_WorldMeta) + 45 0.000 0.000 0.000 0.000 util.py:48(debug) + 1 0.000 0.000 0.000 0.000 sqrtdenest.py:1() + 1 0.000 0.000 0.000 0.000 _pslinux.py:120(IOPriority) + 1 0.000 0.000 0.000 0.000 fetch.py:1() + 1 0.000 0.000 0.000 0.000 reinplace.py:16(_ViewType) + 1 0.000 0.000 0.000 0.000 mock.py:45() + 6 0.000 0.000 0.000 0.000 symbolic_opset9.py:3376(_unsupported_dropout) + 1 0.000 0.000 0.000 0.000 __init__.py:40(__sympy_debug) + 1 0.000 0.000 0.000 0.000 matcher_utils.py:50(SubgraphMatcher) + 1 0.000 0.000 0.000 0.000 _mannwhitneyu.py:23(__init__) + 41 0.000 0.000 0.000 0.000 _add_newdocs_scalars.py:83() + 1 0.000 0.000 0.000 0.000 callable.py:21(MapperIterDataPipe) + 1 0.000 0.000 0.000 0.000 gmpyrationalfield.py:1() + 36 0.000 0.000 0.000 0.000 constraints.py:170(__init__) + 1 0.000 0.000 0.000 0.000 symbolic_opset18.py:1() + 1 0.000 0.000 0.000 0.000 sslproto.py:27(AppProtocolState) + 1 0.000 0.000 0.000 0.000 eigenvector.py:1() + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:604(CategoryDict) + 3 0.000 0.000 0.000 0.000 core.py:3488(__init__) + 151 0.000 0.000 0.000 0.000 {built-in method gmpy2.gmpy2.fac} + 1 0.000 0.000 0.000 0.000 pathlib.py:469(__new__) + 1 0.000 0.000 0.000 0.000 std.py:244(tqdm) + 1 0.000 0.000 0.000 0.000 registration.py:202(SymbolicRegistry) + 1 0.000 0.000 0.000 0.000 pythonmpq.py:1() + 1 0.000 0.000 0.000 0.000 mst.py:28(EdgePartition) + 1 0.000 0.000 0.000 0.000 internet_as_graphs.py:1() + 2 0.000 0.000 0.000 0.000 _pytesttester.py:1() + 58 0.000 0.000 0.000 0.000 constraint_registry.py:87(register) + 35 0.000 0.000 0.000 0.000 typing.py:1817() + 3 0.000 0.000 0.000 0.000 __init__.py:912(createLock) + 142 0.000 0.000 0.000 0.000 results.py:262(haskeys) + 1 0.000 0.000 0.000 0.000 refine.py:1() + 1 0.000 0.000 0.000 0.000 coreerrors.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:339() + 31 0.000 0.000 0.000 0.000 ipaddress.py:1721(_parse_hextet) + 1 0.000 0.000 0.000 0.000 pythonintegerring.py:1() + 1 0.000 0.000 0.000 0.000 _stats.py:1() + 1 0.000 0.000 0.000 0.000 datetime.py:2297(timezone) + 1 0.000 0.000 0.000 0.000 NaiveBayes.py:1() + 1 0.000 0.000 0.000 0.000 FactorGraph.py:1() + 1 0.000 0.000 0.000 0.000 lobpcg.py:1() + 1 0.000 0.000 0.000 0.000 current_flow_betweenness_subset.py:1() + 120 0.000 0.000 0.000 0.000 core.py:1868(streamline) + 1 0.000 0.000 0.000 0.000 bdist.py:35(bdist) + 1 0.000 0.000 0.000 0.000 recognition.py:1() + 1 0.000 0.000 0.000 0.000 grouping.py:10(BatcherMapDataPipe) + 1 0.000 0.000 0.000 0.000 core.py:3459(__init__) + 127 0.000 0.000 0.000 0.000 ssl.py:135() + 1 0.000 0.000 0.000 0.000 numerictypes.py:588(_register_types) + 1 0.000 0.000 0.000 0.000 feedparser.py:184(close) + 1 0.000 0.000 0.000 0.000 frozen.py:1() + 44 0.000 0.000 0.000 0.000 enum.py:1145(_generate_next_value_) + 3 0.000 0.000 0.000 0.000 monkey.py:45(get_unpatched_class) + 127 0.000 0.000 0.000 0.000 ssl.py:140() + 1 0.000 0.000 0.000 0.000 rcode.py:1() + 1 0.000 0.000 0.000 0.000 numbers.py:3612(NaN) + 1 0.000 0.000 0.000 0.000 ring_series.py:1() + 1 0.000 0.000 0.000 0.000 index_methods.py:1() + 1 0.000 0.000 0.000 0.000 PomdpX.py:1() + 1 0.000 0.000 0.000 0.000 log_normal.py:1() + 6 0.000 0.000 0.000 0.000 sharing.py:173(to_backend_cache_wrap) + 1 0.000 0.000 0.000 0.000 polysys.py:1() + 1 0.000 0.000 0.000 0.000 transforms.py:2017(InverseLaplaceTransform) + 21 0.000 0.000 0.000 0.000 functools.py:845(_is_valid_dispatch_type) + 1 0.000 0.000 0.000 0.000 sharding.py:17(SHARDING_PRIORITIES) + 1 0.000 0.000 0.000 0.000 channelshuffle.py:1() + 1 0.000 0.000 0.000 0.000 library.py:1() + 4 0.000 0.000 0.000 0.000 :770(create_module) + 1 0.000 0.000 0.000 0.000 _common.py:138(NicDuplex) + 7 0.000 0.000 0.000 0.000 platform.py:919(system) + 1 0.000 0.000 0.000 0.000 _dia.py:1() + 1 0.000 0.000 0.000 0.000 BayesianModel.py:1() + 8 0.000 0.000 0.000 0.000 types.py:98(prepare_class) + 4 0.000 0.000 0.000 0.000 _mixins.py:76(ravel_compat) + 1 0.000 0.000 0.000 0.000 grad_scaler.py:35(OptState) + 1 0.000 0.000 0.000 0.000 miscellaneous.py:35(IdentityFunction) + 2 0.000 0.000 0.000 0.000 orthogonal.py:1() + 1 0.000 0.000 0.000 0.000 queues.py:71(_reset) + 19 0.000 0.000 0.000 0.000 expressions.py:166(binop) + 1 0.000 0.000 0.000 0.000 padding.py:82(ConstantPad2d) + 1 0.000 0.000 0.000 0.000 lattice.py:1() + 6 0.000 0.000 0.000 0.000 ctx_mp_python.py:47(__new__) + 1 0.000 0.000 0.000 0.000 trophic.py:1() + 1 0.000 0.000 0.000 0.000 docstrings.py:1() + 3 0.000 0.000 0.000 0.000 functools.py:188(total_ordering) + 1 0.000 0.000 0.000 0.000 dist.py:53(Distribution) + 1 0.000 0.000 0.000 0.000 padding.py:133(ConstantPad3d) + 1 0.000 0.000 0.000 0.000 decompositions.py:34(Reduction) + 1 0.000 0.000 0.000 0.000 base_parser.py:80(BadLineHandleMethod) + 1 0.000 0.000 0.000 0.000 zetazeros.py:1() + 1 0.000 0.000 0.000 0.000 jscode.py:1() + 15 0.000 0.000 0.000 0.000 _jit_internal.py:465(boolean_dispatch) + 1 0.000 0.000 0.000 0.000 __init__.py:225() + 1 0.000 0.000 0.000 0.000 JunctionTree.py:1() + 1 0.000 0.000 0.000 0.000 _binomtest.py:1() + 207 0.000 0.000 0.000 0.000 util.py:196(escape_re_range_char) + 1 0.000 0.000 0.000 0.000 quasirandom.py:1() + 1 0.000 0.000 0.000 0.000 MarkovChain.py:1() + 1 0.000 0.000 0.000 0.000 distributed_c10d.py:225(BackendConfig) + 2 0.000 0.000 0.000 0.000 core.py:2278(__init__) + 1 0.000 0.000 0.000 0.000 _odds_ratio.py:1() + 1 0.000 0.000 0.000 0.000 facts.py:445() + 1 0.000 0.000 0.000 0.000 operations.py:555(AssocOpDispatcher) + 156 0.000 0.000 0.000 0.000 core.py:3803() + 2 0.000 0.000 0.000 0.000 _strptime.py:152(__calc_timezone) + 127 0.000 0.000 0.000 0.000 ssl.py:150() + 3 0.000 0.000 0.000 0.000 uuid.py:721(uuid4) + 1 0.000 0.000 0.000 0.000 combining.py:362(_DemultiplexerIterDataPipe) + 1 0.000 0.000 0.000 0.000 codeop.py:1() + 1 0.000 0.000 0.000 0.000 nx_pydot.py:1() + 5 0.000 0.000 0.000 0.000 numbers.py:2084(__new__) + 1 0.000 0.000 0.000 0.000 label_propagation.py:1() + 1 0.000 0.000 0.000 0.000 objects.py:43(BaseIndexer) + 127 0.000 0.000 0.000 0.000 ssl.py:130() + 4 0.000 0.000 0.000 0.000 nanops.py:462(maybe_operate_rowwise) + 3 0.000 0.000 0.000 0.000 core.py:4753(_generateDefaultName) + 1 0.000 0.000 0.000 0.000 padding.py:15(_ConstantPadNd) + 1 0.000 0.000 0.000 0.000 lkj_cholesky.py:1() + 1 0.000 0.000 0.000 0.000 hyperbolic.py:1253(acosh) + 134 0.000 0.000 0.000 0.000 wrappers.py:96(__init__) + 1 0.000 0.000 0.000 0.000 _morphology.py:1() + 29 0.000 0.000 0.000 0.000 rational.py:7(create_reduced) + 7 0.000 0.000 0.000 0.000 :27(isfile) + 1 0.000 0.000 0.000 0.000 runners.py:15(_State) + 127 0.000 0.000 0.000 0.000 ssl.py:145() + 1 0.000 0.000 0.000 0.000 _solvers.py:1() + 1 0.000 0.000 0.000 0.000 identification.py:1() + 1 0.000 0.000 0.000 0.000 core.py:3115(view) + 38 0.000 0.000 0.000 0.000 getlimits.py:16(_fr0) + 104 0.000 0.000 0.000 0.000 inspect.py:466(isframe) + 42 0.000 0.000 0.000 0.000 _typing.py:275(__init__) + 4 0.000 0.000 0.000 0.000 {method 'read' of '_io.TextIOWrapper' objects} + 2 0.000 0.000 0.000 0.000 traceback.py:439(from_list) + 1 0.000 0.000 0.000 0.000 logger.py:118(addHandler) + 1 0.000 0.000 0.000 0.000 atlas.py:1() + 1 0.000 0.000 0.000 0.000 core.py:3357(__init__) + 1 0.000 0.000 0.000 0.000 attracting.py:1() + 1 0.000 0.000 0.000 0.000 _fftlog.py:1() + 1 0.000 0.000 0.000 0.000 categorical.py:9(Categorical) + 1 0.000 0.000 0.000 0.000 stoerwagner.py:1() + 1 0.000 0.000 0.000 0.000 richclub.py:1() + 1 0.000 0.000 0.000 0.000 Independencies.py:1() + 6 0.000 0.000 0.000 0.000 core.py:1146(__init__) + 4 0.000 0.000 0.000 0.000 <__array_function__ internals>:177(atleast_1d) + 1 0.000 0.000 0.000 0.000 CanonicalDistribution.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:264(_reset_cache) + 1 0.000 0.000 0.000 0.000 sparsifiers.py:1() + 1 0.000 0.000 0.000 0.000 steinertree.py:1() + 17 0.000 0.000 0.000 0.000 dtypes.py:913(construct_from_string) + 1 0.000 0.000 0.000 0.000 core.py:4437(IndentedBlock) + 1 0.000 0.000 0.000 0.000 _external_properties.py:25(ExternalProperties) + 1 0.000 0.000 0.000 0.000 _parser.py:1371(_tzparser) + 1 0.000 0.000 0.000 0.000 adjlist.py:1() + 1 0.000 0.000 0.000 0.000 nx_latex.py:1() + 1 0.000 0.000 0.000 0.000 MarkovModel.py:1() + 28 0.000 0.000 0.000 0.000 core.py:57(__setattr__) + 1 0.000 0.000 0.000 0.000 asyncio.py:1() + 11 0.000 0.000 0.000 0.000 __init__.py:12(NewCls) + 1 0.000 0.000 0.000 0.000 gaussiandomains.py:480(GaussianRationalField) + 1 0.000 0.000 0.000 0.000 distance_regular.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:48(create_string_buffer) + 1 0.000 0.000 0.000 0.000 _table_schema.py:1() + 12 0.000 0.000 0.000 0.000 core.py:5667() + 1 0.000 0.000 0.000 0.000 isolate.py:1() + 1 0.000 0.000 0.000 0.000 pagerank_alg.py:1() + 1 0.000 0.000 0.000 0.000 sparse_adam.py:7(SparseAdam) + 3 0.000 0.000 0.000 0.000 matrices.py:749(__init__) + 1 0.000 0.000 0.000 0.000 boundary.py:1() + 1 0.000 0.000 0.000 0.000 cloudpickle_wrapper.py:1() + 263 0.000 0.000 0.000 0.000 _add_newdocs.py:18(add_newdoc) + 1 0.000 0.000 0.000 0.000 combining.py:562(ZipperIterDataPipe) + 1 0.000 0.000 0.000 0.000 results.py:27(ParseResults) + 39 0.000 0.000 0.000 0.000 functools.py:966(__init__) + 1 0.000 0.000 0.000 0.000 pathlib.py:112(_WindowsFlavour) + 183 0.000 0.000 0.000 0.000 typing.py:1688() + 1 0.000 0.000 0.000 0.000 binomial.py:13(Binomial) + 1 0.000 0.000 0.000 0.000 feedparser.py:101(push) + 1 0.000 0.000 0.000 0.000 logger.py:217(trace) + 2 0.000 0.000 0.000 0.000 conflict.py:34(super_signature) + 1 0.000 0.000 0.000 0.000 ContinuousFactor.py:1() + 1 0.000 0.000 0.000 0.000 _pyio.py:2019(__init__) + 1 0.000 0.000 0.000 0.000 linalg.py:74(_determine_error_states) + 16 0.000 0.000 0.000 0.000 DAG.py:287(get_parents) + 36 0.000 0.000 0.000 0.000 binary.py:153(_torch_binary) + 49 0.000 0.000 0.000 0.000 {method 'mro' of 'type' objects} + 2 0.000 0.000 0.000 0.000 getlimits.py:86(_str_smallest_subnormal) + 1 0.000 0.000 0.000 0.000 pretty_symbology.py:133() + 19 0.000 0.000 0.000 0.000 function_base.py:346(iterable) + 2 0.000 0.000 0.000 0.000 __future__.py:1() + 1 0.000 0.000 0.000 0.000 zeta.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:437() + 1 0.000 0.000 0.000 0.000 ramsey.py:1() + 29 0.000 0.000 0.000 0.000 typing.py:2922(_namedtuple_mro_entries) + 1 0.000 0.000 0.000 0.000 rszeta.py:1() + 1 0.000 0.000 0.000 0.000 arrayop.py:1() + 85 0.000 0.000 0.000 0.000 docscrape.py:389() + 2 0.000 0.000 0.000 0.000 getlimits.py:305(_get_machar) + 109 0.000 0.000 0.000 0.000 enum.py:1243(value) + 2 0.000 0.000 0.000 0.000 nanops.py:1029(_nanminmax) + 1 0.000 0.000 0.000 0.000 capacityscaling.py:1() + 26 0.000 0.000 0.000 0.000 _hook_iterator.py:110(IteratorDecorator) + 1 0.000 0.000 0.000 0.000 _VF.py:1() + 1 0.000 0.000 0.000 0.000 pickle.py:1137(_Unpickler) + 1 0.000 0.000 0.000 0.000 result.py:24(TestResult) + 2 0.000 0.000 0.000 0.000 context.py:237(get_context) + 1 0.000 0.000 0.000 0.000 _guards.py:253(GuardsCheckpointState) + 54 0.000 0.000 0.000 0.000 {method 'acquire' of '_thread.RLock' objects} + 1 0.000 0.000 0.000 0.000 factortools.py:1() + 4 0.000 0.000 0.000 0.000 getlimits.py:62(smallest_subnormal) + 116 0.000 0.000 0.000 0.000 {built-in method _struct.pack} + 1 0.000 0.000 0.000 0.000 ssl.py:477(Purpose) + 1 0.000 0.000 0.000 0.000 process_executor.py:1115() + 5 0.000 0.000 0.000 0.000 {built-in method posix.sysconf} + 1 0.000 0.000 0.000 0.000 {built-in method torch._C._init_names} + 1 0.000 0.000 0.000 0.000 joint_degree_seq.py:1() + 1 0.000 0.000 0.000 0.000 _openpyxl.py:540(OpenpyxlReader) + 1 0.000 0.000 0.000 0.000 exponential.py:218(exp) + 16 0.000 0.000 0.000 0.000 fake_quantize.py:106(with_args) + 1 0.000 0.000 0.000 0.000 gui.py:1() + 2 0.000 0.000 0.000 0.000 utils.py:167(detect_number_of_cores) + 1 0.000 0.000 0.000 0.000 __init__.py:213() + 1 0.000 0.000 0.000 0.000 remote_device.py:1() + 1 0.000 0.000 0.000 0.000 _comparison.py:607(TensorLikePair) + 13 0.000 0.000 0.000 0.000 enum.py:1354(_iter_member_by_value_) + 1 0.000 0.000 0.000 0.000 hyperbolic.py:1628(asech) + 14 0.000 0.000 0.000 0.000 constraints.py:175(__call__) + 1 0.000 0.000 0.000 0.000 dogbox.py:1() + 1 0.000 0.000 0.000 0.000 gomory_hu.py:1() + 1 0.000 0.000 0.000 0.000 importtools.py:14(__sympy_debug) + 1 0.000 0.000 0.000 0.000 trigonometric.py:2620(atan) + 8 0.000 0.000 0.000 0.000 _parallel_backends.py:124(get_nested_backend) + 3 0.000 0.000 0.000 0.000 tree.py:1() + 184 0.000 0.000 0.000 0.000 {built-in method _operator.index} + 1 0.000 0.000 0.000 0.000 lowrank_multivariate_normal.py:48(LowRankMultivariateNormal) + 1 0.000 0.000 0.000 0.000 zipfile.py:1245(__init__) + 14 0.000 0.000 0.000 0.000 __init__.py:144(_check_size) + 3 0.000 0.000 0.000 0.000 message.py:615(get_content_maintype) + 1 0.000 0.000 0.000 0.000 core.py:5554(Suppress) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:634(beta_gen) + 4 0.000 0.000 0.000 0.000 isoparser.py:22(_takes_ascii) + 1 0.000 0.000 0.000 0.000 util.py:51(get_platform) + 32 0.000 0.000 0.000 0.000 {built-in method numpy.asarray} + 2 0.000 0.000 0.000 0.000 ctx_mp_python.py:201(__rdiv__) + 1 0.000 0.000 0.000 0.000 basic.py:1968(Atom) + 1 0.000 0.000 0.000 0.000 __init__.py:1145(RETURN_TYPE) + 1 0.000 0.000 0.000 0.000 __init__.py:1129(manager_path) + 1 0.000 0.000 0.000 0.000 mis.py:1() + 9 0.000 0.000 0.000 0.000 weakref.py:289(update) + 1 0.000 0.000 0.000 0.000 _base.py:60(spmatrix) + 1 0.000 0.000 0.000 0.000 _mode_utils.py:1() + 44 0.000 0.000 0.000 0.000 unicode.py:17() + 1 0.000 0.000 0.000 0.000 parametrizations.py:39(_Orthogonal) + 1 0.000 0.000 0.000 0.000 subgraph_rewriter.py:21(ReplacedPatterns) + 1 0.000 0.000 0.000 0.000 resource_tracker.py:181(unregister) + 154 0.000 0.000 0.000 0.000 core.py:1700(leave_whitespace) + 2 0.000 0.000 0.000 0.000 methods.py:16(_get_method_wrappers) + 16 0.000 0.000 0.000 0.000 _pslinux.py:625() + 1 0.000 0.000 0.000 0.000 combining.py:23(ConcaterIterDataPipe) + 84 0.000 0.000 0.000 0.000 __init__.py:346() + 1 0.000 0.000 0.000 0.000 ctx_base.py:24(StandardBaseContext) + 45 0.000 0.000 0.000 0.000 {built-in method posix._path_normpath} + 1 0.000 0.000 0.000 0.000 getopt.py:1() + 1 0.000 0.000 0.000 0.000 observer.py:154(UniformQuantizationObserverBase) + 1 0.000 0.000 0.000 0.000 file_structure_representation.py:1() + 36 0.000 0.000 0.000 0.000 _string_helpers.py:16(english_lower) + 16 0.000 0.000 0.000 0.000 queue.py:213(_put) + 1 0.000 0.000 0.000 0.000 grouping.py:29(BatcherIterDataPipe) + 1 0.000 0.000 0.000 0.000 combinatorics.py:54(ShufflerIterDataPipe) + 1 0.000 0.000 0.000 0.000 _comparison.py:430(BooleanPair) + 3 0.000 0.000 0.000 0.000 _common.py:132(_validate_fromutc_inputs) + 1 0.000 0.000 0.000 0.000 {built-in method posix.unlink} + 6 0.000 0.000 0.000 0.000 __init__.py:266(_assert_pid_not_reused) + 1 0.000 0.000 0.000 0.000 node_classification.py:1() + 19 0.000 0.000 0.000 0.000 _distn_infrastructure.py:3169(__new__) + 2 0.000 0.000 0.000 0.000 basic.py:1920(_exec_constructor_postprocessors) + 1 0.000 0.000 0.000 0.000 autograd_function.py:511(WrappedCtx) + 1 0.000 0.000 0.000 0.000 subfield.py:1() + 1 0.000 0.000 0.000 0.000 _await.py:1() + 1 0.000 0.000 0.000 0.000 function.py:383(Function) + 1 0.000 0.000 0.000 0.000 _digraph.py:1() + 1 0.000 0.000 0.000 0.000 asyn_fluid.py:1() + 1 0.000 0.000 0.000 0.000 base.py:16(BaseStringArrayMethods) + 12 0.000 0.000 0.000 0.000 fake_tensor.py:328(impl_decorator) + 4 0.000 0.000 0.000 0.000 missing.py:834(_datetimelike_compat) + 10 0.000 0.000 0.000 0.000 _parser.py:894(_parse_flags) + 1 0.000 0.000 0.000 0.000 negative_binomial.py:9(NegativeBinomial) + 1 0.000 0.000 0.000 0.000 operations.py:19(AssocOp) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1616(expon_gen) + 1 0.000 0.000 0.000 0.000 mycielski.py:1() + 1 0.000 0.000 0.000 0.000 _pyio.py:2189(close) + 1 0.000 0.000 0.000 0.000 _trustregion.py:1() + 1 0.000 0.000 0.000 0.000 helpers.py:703(OpAssoc) + 229 0.000 0.000 0.000 0.000 {method 'pop' of 'collections.deque' objects} + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:4918(laplace_gen) + 4 0.000 0.000 0.000 0.000 vmap.py:30(doesnt_support_saved_tensors_hooks) + 25 0.000 0.000 0.000 0.000 ipaddress.py:474(_prefix_from_prefix_string) + 1 0.000 0.000 0.000 0.000 pycode.py:77(AbstractPythonCodePrinter) + 77 0.000 0.000 0.000 0.000 typing.py:1692(__eq__) + 1 0.000 0.000 0.000 0.000 shutil.py:629(_rmtree_safe_fd) + 1 0.000 0.000 0.000 0.000 trigonometric.py:222(sin) + 1 0.000 0.000 0.000 0.000 _pyxlsb.py:18(PyxlsbReader) + 1 0.000 0.000 0.000 0.000 pajek.py:1() + 131 0.000 0.000 0.000 0.000 expr.py:196() + 1 0.000 0.000 0.000 0.000 multivariate_normal.py:80(MultivariateNormal) + 1 0.000 0.000 0.000 0.000 tz.py:1470(__get_gettz) + 32 0.000 0.000 0.000 0.000 typing.py:2840() + 1 0.000 0.000 0.000 0.000 inequalities.py:1() + 1 0.000 0.000 0.000 0.000 activation.py:15(MultiheadAttention) + 1 0.000 0.000 0.000 0.000 core.py:693(add_condition) + 1 0.000 0.000 0.000 0.000 ring.py:1() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:7674(rayleigh_gen) + 26 0.000 0.000 0.000 0.000 threading.py:279(_is_owned) + 1 0.000 0.000 0.000 0.000 _linalg_utils.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:897(find_distributions) + 33 0.000 0.000 0.000 0.000 __init__.py:202(_checkLevel) + 1 0.000 0.000 0.000 0.000 fractions.py:38(Fraction) + 1 0.000 0.000 0.000 0.000 trigonometric.py:2817(acot) + 4 0.000 0.000 0.000 0.000 nanops.py:397(_datetimelike_compat) + 20 0.000 0.000 0.000 0.000 {method 'remove' of 'list' objects} + 1 0.000 0.000 0.000 0.000 subscheck.py:1() + 93 0.000 0.000 0.000 0.000 _inspect.py:131(strseq) + 1 0.000 0.000 0.000 0.000 _fourier.py:1() + 2 0.000 0.000 0.000 0.000 filters.py:1() + 17 0.000 0.000 0.000 0.000 dtypes.py:1185(construct_from_string) + 1 0.000 0.000 0.000 0.000 _check.py:1() + 14 0.000 0.000 0.000 0.000 _multivariate.py:208(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:58(Sectioned) + 3 0.000 0.000 0.000 0.000 core.py:1683(suppress) + 1 0.000 0.000 0.000 0.000 _mstats_extras.py:1() + 1 0.000 0.000 0.000 0.000 matrices.py:778(MatrixBase) + 1 0.000 0.000 0.000 0.000 reduction.py:93(set_loky_pickler) + 1 0.000 0.000 0.000 0.000 factorials.py:276(subfactorial) + 6 0.000 0.000 0.000 0.000 libmpf.py:410(from_float) + 7 0.000 0.000 0.000 0.000 platform.py:1007(_sys_version) + 16 0.000 0.000 0.000 0.000 fromnumeric.py:51(_wrapfunc) + 2 0.000 0.000 0.000 0.000 ctx_mp_python.py:368(__new__) + 1 0.000 0.000 0.000 0.000 canonical_constraint.py:1() + 1 0.000 0.000 0.000 0.000 non_randomness.py:1() + 1 0.000 0.000 0.000 0.000 cycles.py:869(find_cycle) + 1 0.000 0.000 0.000 0.000 common.py:286(StreamWrapper) + 7 0.000 0.000 0.000 0.000 basic.py:153(__hash__) + 1 0.000 0.000 0.000 0.000 ipaddress.py:1276(IPv4Address) + 1 0.000 0.000 0.000 0.000 _rbf.py:1() + 1 0.000 0.000 0.000 0.000 hyperbolic.py:75(sinh) + 24 0.000 0.000 0.000 0.000 datapipe.py:133(register_datapipe_as_function) + 1 0.000 0.000 0.000 0.000 logistic_normal.py:1() + 1 0.000 0.000 0.000 0.000 ClusterGraph.py:1() + 1 0.000 0.000 0.000 0.000 lbfgs.py:184(LBFGS) + 1 0.000 0.000 0.000 0.000 _xlrd.py:19(XlrdReader) + 1 0.000 0.000 0.000 0.000 tree_isomorphism.py:1() + 1 0.000 0.000 0.000 0.000 abc.py:131(TraversableResources) + 82 0.000 0.000 0.000 0.000 overrides.py:121(decorator) + 1 0.000 0.000 0.000 0.000 tr_interior_point.py:1() + 45 0.000 0.000 0.000 0.000 {built-in method torch._C.containedTypes} + 1 0.000 0.000 0.000 0.000 single.py:213(SingleODESolver) + 10 0.000 0.000 0.000 0.000 __init__.py:393(__getitem__) + 1 0.000 0.000 0.000 0.000 astype.py:1() + 1 0.000 0.000 0.000 0.000 riccati.py:1() + 1 0.000 0.000 0.000 0.000 datapipe.py:358(_IterDataPipeSerializationWrapper) + 2 0.000 0.000 0.000 0.000 {built-in method _ctypes.POINTER} + 2 0.000 0.000 0.000 0.000 rationaltools.py:1() + 51 0.000 0.000 0.000 0.000 textwrap.py:479(predicate) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:5589(lognorm_gen) + 1 0.000 0.000 0.000 0.000 base_futures.py:1() + 1 0.000 0.000 0.000 0.000 ctx_iv.py:153(__new__) + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:487(DataFlowGraph) + 1 0.000 0.000 0.000 0.000 _globals.py:24(__init__) + 1 0.000 0.000 0.000 0.000 duplication.py:1() + 28 0.000 0.000 0.000 0.000 core.py:4100() + 1 0.000 0.000 0.000 0.000 error_functions.py:2328(fresnels) + 4 0.000 0.000 0.000 0.000 {built-in method _ssl.txt2obj} + 1 0.000 0.000 0.000 0.000 pretty_symbology.py:58(pretty_try_use_unicode) + 1 0.000 0.000 0.000 0.000 ops.py:104(WrappedCythonOp) + 4 0.000 0.000 0.000 0.000 {built-in method _imp.create_builtin} + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:7063(pearson3_gen) + 1 0.000 0.000 0.000 0.000 util.py:22(get_host_platform) + 2 0.000 0.000 0.000 0.000 _pyio.py:1328(close) + 1 0.000 0.000 0.000 0.000 bivariate.py:1() + 1 0.000 0.000 0.000 0.000 series_class.py:11(SeriesBase) + 166 0.000 0.000 0.000 0.000 enum.py:913() + 32 0.000 0.000 0.000 0.000 decorators.py:190(wrapper) + 1 0.000 0.000 0.000 0.000 core.py:6545(__array_finalize__) + 1 0.000 0.000 0.000 0.000 orthopolys.py:1() + 11 0.000 0.000 0.000 0.000 decorator.py:152() + 2 0.000 0.000 0.000 0.000 numbers.py:1585(__new__) + 1 0.000 0.000 0.000 0.000 parametrizations.py:288(_SpectralNorm) + 82 0.000 0.000 0.000 0.000 overrides.py:110(set_module) + 7 0.000 0.000 0.000 0.000 pathlib.py:536(__str__) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:7245(powerlaw_gen) + 1 0.000 0.000 0.000 0.000 {built-in method torch._C._multiprocessing_init} + 1 0.000 0.000 0.000 0.000 _add_newdocs_scalars.py:18(numeric_type_aliases) + 24 0.000 0.000 0.000 0.000 pickletools.py:193(__init__) + 1 0.000 0.000 0.000 0.000 _index.py:1() + 1 0.000 0.000 0.000 0.000 exponential.py:605(log) + 1 0.000 0.000 0.000 0.000 _ndgriddata.py:1() + 24 0.000 0.000 0.000 0.000 numerictypes.py:513(_scalar_type_key) + 1 0.000 0.000 0.000 0.000 ssl.py:1006(SSLSocket) + 74 0.000 0.000 0.000 0.000 {built-in method builtins.divmod} + 1 0.000 0.000 0.000 0.000 importtools.py:48(import_module) + 14 0.000 0.000 0.000 0.000 array_ops.py:402(get_array_op) + 1 0.000 0.000 0.000 0.000 _external_property_file_references.py:15(ExternalPropertyFileReferences) + 4 0.000 0.000 0.000 0.000 :254(_requires_builtin_wrapper) + 1 0.000 0.000 0.000 0.000 _typing.py:248(_DataPipeMeta) + 24 0.000 0.000 0.000 0.000 generic.py:114(generate_property) + 16 0.000 0.000 0.000 0.000 {method 'write' of '_io.BufferedWriter' objects} + 1 0.000 0.000 0.000 0.000 mock.py:409(NonCallableMock) + 1 0.000 0.000 0.000 0.000 __init__.py:1076(__init__) + 4 0.000 0.000 0.000 0.000 <__array_function__ internals>:177(trim_zeros) + 1 0.000 0.000 0.000 0.000 matchhelpers.py:1() + 41 0.000 0.000 0.000 0.000 dataclasses.py:603() + 4 0.000 0.000 0.000 0.000 :778(exec_module) + 2 0.000 0.000 0.000 0.000 datetime.py:765(__neg__) + 1 0.000 0.000 0.000 0.000 domainscalar.py:1() + 1 0.000 0.000 0.000 0.000 unicode.py:75(nums) + 1 0.000 0.000 0.000 0.000 _posix_reduction.py:1() + 4 0.000 0.000 0.000 0.000 locale.py:479(_parse_localename) + 1 0.000 0.000 0.000 0.000 semiconnected.py:1() + 3 0.000 0.000 0.000 0.000 symbolic_opset9.py:804(_reduce_with_dtype) + 1 0.000 0.000 0.000 0.000 _decomp_cossin.py:1() + 1 0.000 0.000 0.000 0.000 numerictypes.py:440(_construct_lookups) + 1 0.000 0.000 0.000 0.000 objects.py:74(FixedWindowIndexer) + 18 0.000 0.000 0.000 0.000 conflict.py:30() + 1 0.000 0.000 0.000 0.000 temp.py:1() + 1 0.000 0.000 0.000 0.000 error_functions.py:43(erf) + 1 0.000 0.000 0.000 0.000 pde.py:1() + 1 0.000 0.000 0.000 0.000 compositedomain.py:1() + 1 0.000 0.000 0.000 0.000 _storage_docs.py:1() + 1 0.000 0.000 0.000 0.000 combining.py:10(ConcaterMapDataPipe) + 1 0.000 0.000 0.000 0.000 _package_unpickler.py:1() + 76 0.000 0.000 0.000 0.000 {method 'discard' of 'set' objects} + 2 0.000 0.000 0.000 0.000 config.py:116(_get_single_key) + 1 0.000 0.000 0.000 0.000 current_flow_closeness.py:1() + 1 0.000 0.000 0.000 0.000 base_tasks.py:1() + 1 0.000 0.000 0.000 0.000 numpy_pickle_utils.py:1() + 3 0.000 0.000 0.000 0.000 __init__.py:503(PYFUNCTYPE) + 1 0.000 0.000 0.000 0.000 domainelement.py:1() + 1 0.000 0.000 0.000 0.000 _rotation_spline.py:1() + 1 0.000 0.000 0.000 0.000 datapipe.py:377(DataChunk) + 1 0.000 0.000 0.000 0.000 ego.py:1() + 1 0.000 0.000 0.000 0.000 dist.py:120() + 1 0.000 0.000 0.000 0.000 objects.py:132(VariableOffsetWindowIndexer) + 1 0.000 0.000 0.000 0.000 lazy_imports.py:1() + 1 0.000 0.000 0.000 0.000 error_functions.py:268(erfc) + 13 0.000 0.000 0.000 0.000 enum.py:917() + 1 0.000 0.000 0.000 0.000 sampler.py:160(WeightedRandomSampler) + 1 0.000 0.000 0.000 0.000 leda.py:1() + 1 0.000 0.000 0.000 0.000 contraction.py:1() + 16 0.000 0.000 0.000 0.000 {pyarrow.lib.timestamp} + 9 0.000 0.000 0.000 0.000 decorators.py:195(nodes_or_number) + 15 0.000 0.000 0.000 0.000 {method 'tolist' of 'memoryview' objects} + 78 0.000 0.000 0.000 0.000 inspect.py:480(iscode) + 1 0.000 0.000 0.000 0.000 parallel.py:89(get_active_backend) + 46 0.000 0.000 0.000 0.000 six.py:110(__init__) + 1 0.000 0.000 0.000 0.000 LinearGaussianCPD.py:1() + 9 0.000 0.000 0.000 0.000 overrides.py:23(set_array_function_like_doc) + 55 0.000 0.000 0.000 0.000 __init__.py:382(_make_elementwise_unary_reference) + 1 0.000 0.000 0.000 0.000 base_events.py:387(BaseEventLoop) + 1 0.000 0.000 0.000 0.000 immutable.py:30(ImmutableRepMatrix) + 1 0.000 0.000 0.000 0.000 _thread_flow_location.py:19(ThreadFlowLocation) + 4 0.000 0.000 0.000 0.000 symbolic_opset9.py:787(overload_by_arg_count) + 1 0.000 0.000 0.000 0.000 numbers.py:561(bell) + 1 0.000 0.000 0.000 0.000 subprocess.py:749(Popen) + 114 0.000 0.000 0.000 0.000 {built-in method _struct.unpack} + 8 0.000 0.000 0.000 0.000 digraph.py:643(add_edge) + 3 0.000 0.000 0.000 0.000 datetime.py:1677(__new__) + 2 0.000 0.000 0.000 0.000 threading.py:1317(_make_invoke_excepthook) + 30 0.000 0.000 0.000 0.000 binary.py:162(_torch_inplace_binary) + 1 0.000 0.000 0.000 0.000 elliptic.py:1() + 53 0.000 0.000 0.000 0.000 six.py:182(_add_module) + 1 0.000 0.000 0.000 0.000 _machar.py:1() + 101 0.000 0.000 0.000 0.000 _meta_registrations.py:32(register_meta) + 1 0.000 0.000 0.000 0.000 dataset.py:63(IterableDataset) + 8 0.000 0.000 0.000 0.000 _nonlin.py:111(_set_doc) + 15 0.000 0.000 0.000 0.000 proxy.py:524(_define_reflectable) + 8 0.000 0.000 0.000 0.000 sympify.py:68(_is_numpy_instance) + 2 0.000 0.000 0.000 0.000 ctx_base.py:52(_init_aliases) + 2 0.000 0.000 0.000 0.000 {built-in method time.tzset} + 1 0.000 0.000 0.000 0.000 bessel.py:1151(airyai) + 28 0.000 0.000 0.000 0.000 {method '__enter__' of '_thread.lock' objects} + 1 0.000 0.000 0.000 0.000 epathtools.py:1() + 1 0.000 0.000 0.000 0.000 bethehessianmatrix.py:1() + 4 0.000 0.000 0.000 0.000 __init__.py:435(validate) + 1 0.000 0.000 0.000 0.000 trigonometric.py:532(cos) + 1 0.000 0.000 0.000 0.000 matpow.py:12(MatPow) + 2 0.000 0.000 0.000 0.000 <__array_function__ internals>:177(copyto) + 1 0.000 0.000 0.000 0.000 numerictypes.py:510() + 1 0.000 0.000 0.000 0.000 _reporting_descriptor.py:17(ReportingDescriptor) + 1 0.000 0.000 0.000 0.000 clustering_coefficient.py:1() + 5 0.000 0.000 0.000 0.000 decoder.py:343(raw_decode) + 1 0.000 0.000 0.000 0.000 _parser.py:568(parser) + 34 0.000 0.000 0.000 0.000 core.py:12(dispatch) + 14 0.000 0.000 0.000 0.000 __init__.py:3311() + 6 0.000 0.000 0.000 0.000 _jit_internal.py:895(get_class_name_lineno) + 1 0.000 0.000 0.000 0.000 dominating.py:1() + 2 0.000 0.000 0.000 0.000 quantize_jit.py:1() + 2 0.000 0.000 0.000 0.000 _pyio.py:843(close) + 1 0.000 0.000 0.000 0.000 _type_aliases.py:123(_add_integer_aliases) + 1 0.000 0.000 0.000 0.000 hyperbolic.py:746(coth) + 1 0.000 0.000 0.000 0.000 hyperbolic.py:287(cosh) + 1 0.000 0.000 0.000 0.000 NoisyOrModel.py:1() + 1 0.000 0.000 0.000 0.000 logger.py:177(__init__) + 1 0.000 0.000 0.000 0.000 UndirectedGraph.py:1() + 1 0.000 0.000 0.000 0.000 FactorSet.py:1() + 3 0.000 0.000 0.000 0.000 core.py:681(add_parse_action) + 1 0.000 0.000 0.000 0.000 boolalg.py:1264(Equivalent) + 8 0.000 0.000 0.000 0.000 grad_mode.py:48(__init__) + 1 0.000 0.000 0.000 0.000 closeness.py:1() + 58 0.000 0.000 0.000 0.000 logic.py:92(fuzzy_bool) + 12 0.000 0.000 0.000 0.000 :78(_check_methods) + 97 0.000 0.000 0.000 0.000 core.py:5713() + 1 0.000 0.000 0.000 0.000 tarfile.py:837(TarInfo) + 18 0.000 0.000 0.000 0.000 base.py:465(register) + 64 0.000 0.000 0.000 0.000 connection.py:163(writable) + 109 0.000 0.000 0.000 0.000 typing.py:731() + 1 0.000 0.000 0.000 0.000 encoding.py:1() + 1 0.000 0.000 0.000 0.000 spectral_graph_forge.py:1() + 17 0.000 0.000 0.000 0.000 dtypes.py:754(construct_from_string) + 1 0.000 0.000 0.000 0.000 actions.py:1() + 1 0.000 0.000 0.000 0.000 union_find.py:1() + 1 0.000 0.000 0.000 0.000 densetools.py:1() + 12 0.000 0.000 0.000 0.000 weakref.py:495(popitem) + 1 0.000 0.000 0.000 0.000 expintegrals.py:1() + 3 0.000 0.000 0.000 0.000 monkey.py:22(_get_mro) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:8150(skew_norm_gen) + 1 0.000 0.000 0.000 0.000 _construct.py:1() + 6 0.000 0.000 0.000 0.000 numbers.py:3867(__hash__) + 4 0.000 0.000 0.000 0.000 _ufunc_config.py:435(__exit__) + 18 0.000 0.000 0.000 0.000 _ops.py:31(_apply_docstring_templates) + 1 0.000 0.000 0.000 0.000 bernoulli.py:12(Bernoulli) + 1 0.000 0.000 0.000 0.000 pathlib.py:455(PurePath) + 1 0.000 0.000 0.000 0.000 nx_agraph.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:1274() + 1 0.000 0.000 0.000 0.000 _script.py:1506(_ScriptProfileTable) + 2 0.000 0.000 0.000 0.000 matfuncs.py:1() + 1 0.000 0.000 0.000 0.000 core.py:322(condition_as_parse_action) + 28 0.000 0.000 0.000 0.000 ipaddress.py:1854(_split_scope_id) + 1 0.000 0.000 0.000 0.000 fnmatch.py:1() + 1 0.000 0.000 0.000 0.000 trsock.py:1() + 1 0.000 0.000 0.000 0.000 _common.py:150(BatteryTime) + 1 0.000 0.000 0.000 0.000 sampler.py:64(SequentialSampler) + 1 0.000 0.000 0.000 0.000 error_functions.py:459(erfi) + 20 0.000 0.000 0.000 0.000 config.py:846() + 1 0.000 0.000 0.000 0.000 __init__.py:165() + 30 0.000 0.000 0.000 0.000 _type_aliases.py:203(_add_array_type) + 1 0.000 0.000 0.000 0.000 _infra.py:270(__post_init__) + 3 0.000 0.000 0.000 0.000 result.py:12(failfast) + 1 0.000 0.000 0.000 0.000 __init__.py:910(_search_paths) + 1 0.000 0.000 0.000 0.000 tableform.py:1() + 1 0.000 0.000 0.000 0.000 objects.py:105(VariableWindowIndexer) + 1 0.000 0.000 0.000 0.000 trees.py:1() + 1 0.000 0.000 0.000 0.000 characteristiczero.py:1() + 1 0.000 0.000 0.000 0.000 timeit.py:1() + 1 0.000 0.000 0.000 0.000 arrayterator.py:1() + 5 0.000 0.000 0.000 0.000 typing.py:1268(__mro_entries__) + 21 0.000 0.000 0.000 0.000 symbolic_opset9.py:301(wrapper) + 1 0.000 0.000 0.000 0.000 second_order.py:1() + 1 0.000 0.000 0.000 0.000 objects.py:385(ExponentialMovingWindowIndexer) + 3 0.000 0.000 0.000 0.000 numbers.py:2257(__lt__) + 3 0.000 0.000 0.000 0.000 _stats.py:14(count) + 1 0.000 0.000 0.000 0.000 boolalg.py:951(Xor) + 1 0.000 0.000 0.000 0.000 _artifact.py:17(Artifact) + 1 0.000 0.000 0.000 0.000 nosetester.py:1() + 257 0.000 0.000 0.000 0.000 hmac.py:19() + 2 0.000 0.000 0.000 0.000 tools.py:1() + 1 0.000 0.000 0.000 0.000 objects.py:291(GroupbyIndexer) + 1 0.000 0.000 0.000 0.000 tempfile.py:156(_candidate_tempdir_list) + 1 0.000 0.000 0.000 0.000 str.py:19(StrPrinter) + 1 0.000 0.000 0.000 0.000 flags.py:1() + 1 0.000 0.000 0.000 0.000 function.py:281(Application) + 224 0.000 0.000 0.000 0.000 {method 'upper' of 'str' objects} + 1 0.000 0.000 0.000 0.000 frontend.py:682(ExprBuilder) + 1 0.000 0.000 0.000 0.000 random_clustered.py:1() + 1 0.000 0.000 0.000 0.000 putmask.py:1() + 8 0.000 0.000 0.000 0.000 synchronize.py:111(__enter__) + 1 0.000 0.000 0.000 0.000 _qap.py:1() + 1 0.000 0.000 0.000 0.000 continuous_bernoulli.py:12(ContinuousBernoulli) + 8 0.000 0.000 0.000 0.000 platform.py:830(uname) + 1 0.000 0.000 0.000 0.000 ops.py:718(BaseGrouper) + 85 0.000 0.000 0.000 0.000 inspect.py:729(getmro) + 1 0.000 0.000 0.000 0.000 defaults.py:1() + 8 0.000 0.000 0.000 0.000 BayesianNetwork.py:268(get_cpds) + 1 0.000 0.000 0.000 0.000 objects.py:239(FixedForwardWindowIndexer) + 20 0.000 0.000 0.000 0.000 {built-in method numpy.empty} + 24 0.000 0.000 0.000 0.000 parallel.py:301(__len__) + 53 0.000 0.000 0.000 0.000 facts.py:54(_base_fact) + 17 0.000 0.000 0.000 0.000 weakref.py:427(__setitem__) + 1 0.000 0.000 0.000 0.000 core.py:1623(__getitem__) + 1 0.000 0.000 0.000 0.000 hyperbolic.py:1420(atanh) + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:311(SizeMap) + 1 0.000 0.000 0.000 0.000 objects.py:220(ExpandingIndexer) + 38 0.000 0.000 0.000 0.000 __init__.py:23() + 1 0.000 0.000 0.000 0.000 trigonometric.py:1338(cot) + 10 0.000 0.000 0.000 0.000 _torch_docs.py:22() + 18 0.000 0.000 0.000 0.000 pickletools.py:961(__init__) + 1 0.000 0.000 0.000 0.000 pin_memory.py:1() + 1 0.000 0.000 0.000 0.000 _decomp_svd.py:1() + 16 0.000 0.000 0.000 0.000 fromnumeric.py:70() + 1 0.000 0.000 0.000 0.000 rcm.py:1() + 1 0.000 0.000 0.000 0.000 differentiation.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:192() + 1 0.000 0.000 0.000 0.000 dominance.py:1() + 1 0.000 0.000 0.000 0.000 _region.py:16(Region) + 26 0.000 0.000 0.000 0.000 :1101(_sanity_check) + 1 0.000 0.000 0.000 0.000 egyptian_fraction.py:1() + 1 0.000 0.000 0.000 0.000 bessel.py:1323(airybi) + 3 0.000 0.000 0.000 0.000 ufunclike.py:58(_fix_and_maybe_deprecate_out_named_y) + 2 0.000 0.000 0.000 0.000 methods.py:122(_add_methods) + 1 0.000 0.000 0.000 0.000 :48() + 20 0.000 0.000 0.000 0.000 config.py:847() + 82 0.000 0.000 0.000 0.000 symbolic_helper.py:313(quantized_args) + 1 0.000 0.000 0.000 0.000 polynomial.py:1472(Polynomial) + 8 0.000 0.000 0.000 0.000 synchronize.py:114(__exit__) + 1 0.000 0.000 0.000 0.000 approximants.py:1() + 1 0.000 0.000 0.000 0.000 tensorflow.py:1() + 4 0.000 0.000 0.000 0.000 enum.py:1761() + 1 0.000 0.000 0.000 0.000 simpledomain.py:1() + 1 0.000 0.000 0.000 0.000 cographs.py:1() + 62 0.000 0.000 0.000 0.000 _bunch.py:129() + 1 0.000 0.000 0.000 0.000 BayesianNetwork.py:25(BayesianNetwork) + 1 0.000 0.000 0.000 0.000 trigonometric.py:995(tan) + 1 0.000 0.000 0.000 0.000 _async.py:1() + 4 0.000 0.000 0.000 0.000 _ops.py:130(inner) + 2 0.000 0.000 0.000 0.000 _dill.py:450(_revert_extension) + 1 0.000 0.000 0.000 0.000 mathml.py:579(MathMLPresentationPrinter) + 181 0.000 0.000 0.000 0.000 util.py:199(no_escape_re_range_char) + 1 0.000 0.000 0.000 0.000 lib_interval.py:1() + 1 0.000 0.000 0.000 0.000 libintmath.py:89() + 9 0.000 0.000 0.000 0.000 _ops.py:545(__init__) + 11 0.000 0.000 0.000 0.000 init.py:531(_make_deprecate) + 1 0.000 0.000 0.000 0.000 pycode.py:665(MpmathPrinter) + 2 0.000 0.000 0.000 0.000 blas.py:377(_memoize_get_funcs) + 75 0.000 0.000 0.000 0.000 enum.py:795() + 123 0.000 0.000 0.000 0.000 {method '__init_subclass__' of 'object' objects} + 2 0.000 0.000 0.000 0.000 threading.py:1509(_register_atexit) + 1 0.000 0.000 0.000 0.000 engine.py:177(DiagnosticContext) + 2 0.000 0.000 0.000 0.000 pathlib.py:757(joinpath) + 3 0.000 0.000 0.000 0.000 expr.py:184(__neg__) + 3 0.000 0.000 0.000 0.000 __init__.py:256(_register_at_fork_reinit_lock) + 1 0.000 0.000 0.000 0.000 hyperbolic.py:992(csch) + 1 0.000 0.000 0.000 0.000 odes.py:1() + 1 0.000 0.000 0.000 0.000 rules.py:1() + 4 0.000 0.000 0.000 0.000 _pyio.py:1762(close) + 16 0.000 0.000 0.000 0.000 getlimits.py:692(max) + 1 0.000 0.000 0.000 0.000 parallel_apply.py:1() + 1 0.000 0.000 0.000 0.000 discovery.py:212(FlatLayoutPackageFinder) + 1 0.000 0.000 0.000 0.000 core.py:3528(__init__) + 1 0.000 0.000 0.000 0.000 message.py:243(get_payload) + 32 0.000 0.000 0.000 0.000 process.py:213(authkey) + 1 0.000 0.000 0.000 0.000 _address.py:12(Address) + 1 0.000 0.000 0.000 0.000 lazy.py:172() + 1 0.000 0.000 0.000 0.000 __init__.py:22() + 4 0.000 0.000 0.000 0.000 shape_base.py:23(atleast_1d) + 1 0.000 0.000 0.000 0.000 interval_membership.py:1() + 1 0.000 0.000 0.000 0.000 trigonometric.py:1779(sec) + 1 0.000 0.000 0.000 0.000 _type_aliases.py:74(_add_types) + 1 0.000 0.000 0.000 0.000 edgebfs.py:1() + 12 0.000 0.000 0.000 0.000 inspect.py:1749(currentframe) + 62 0.000 0.000 0.000 0.000 lazy.py:96(lazy) + 18 0.000 0.000 0.000 0.000 _add_newdocs_scalars.py:19(type_aliases_gen) + 16 0.000 0.000 0.000 0.000 pretty_symbology.py:170() + 1 0.000 0.000 0.000 0.000 smetric.py:1() + 1 0.000 0.000 0.000 0.000 mock.py:2192(AsyncMockMixin) + 1 0.000 0.000 0.000 0.000 graph.py:66(Graph) + 257 0.000 0.000 0.000 0.000 hmac.py:20() + 1 0.000 0.000 0.000 0.000 limitseq.py:1() + 1 0.000 0.000 0.000 0.000 lazy.py:118() + 1 0.000 0.000 0.000 0.000 _distn_infrastructure.py:356() + 1 0.000 0.000 0.000 0.000 pprint.py:106(PrettyPrinter) + 1 0.000 0.000 0.000 0.000 archive_util.py:1() + 165 0.000 0.000 0.000 0.000 core.py:5602(postParse) + 1 0.000 0.000 0.000 0.000 unicode.py:231(Japanese) + 1 0.000 0.000 0.000 0.000 error_functions.py:2484(fresnelc) + 2 0.000 0.000 0.000 0.000 core.py:6721(__init__) + 1 0.000 0.000 0.000 0.000 realtransforms.py:1() + 1 0.000 0.000 0.000 0.000 _trustregion_ncg.py:1() + 1 0.000 0.000 0.000 0.000 clipboards.py:1() + 1 0.000 0.000 0.000 0.000 transforms.py:209(_InverseTransform) + 1 0.000 0.000 0.000 0.000 hits_alg.py:1() + 1 0.000 0.000 0.000 0.000 typing_extensions.py:1932(_SpecialForm) + 14 0.000 0.000 0.000 0.000 ctx_mp_python.py:336(__new__) + 1 0.000 0.000 0.000 0.000 hyperbolic.py:1128(asinh) + 84 0.000 0.000 0.000 0.000 lazy.py:149(lazy) + 1 0.000 0.000 0.000 0.000 bessel.py:871(SphericalHankelBase) + 36 0.000 0.000 0.000 0.000 __init__.py:884(_make_elementwise_binary_reference) + 2 0.000 0.000 0.000 0.000 libmpf.py:987(mpf_rdiv_int) + 2 0.000 0.000 0.000 0.000 __init__.py:1479(info) + 2 0.000 0.000 0.000 0.000 cache.py:121(_getenv) + 1 0.000 0.000 0.000 0.000 _exceptions.py:224(_ArrayMemoryError) + 7 0.000 0.000 0.000 0.000 decorator.py:162(depends_on_deco) + 1 0.000 0.000 0.000 0.000 localization.py:1() + 32 0.000 0.000 0.000 0.000 _type_aliases.py:46() + 4 0.000 0.000 0.000 0.000 {built-in method _imp.exec_builtin} + 1 0.000 0.000 0.000 0.000 structuralholes.py:1() + 4 0.000 0.000 0.000 0.000 __init__.py:863(_addHandlerRef) + 1 0.000 0.000 0.000 0.000 dominating_set.py:1() + 1 0.000 0.000 0.000 0.000 sql.py:1370(SQLDatabase) + 1 0.000 0.000 0.000 0.000 core.py:3757(And) + 1 0.000 0.000 0.000 0.000 relaxed_bernoulli.py:11(LogitRelaxedBernoulli) + 17 0.000 0.000 0.000 0.000 dtype.py:125(construct_from_string) + 1 0.000 0.000 0.000 0.000 events.py:203(AbstractEventLoop) + 1 0.000 0.000 0.000 0.000 timeutils.py:1() + 3 0.000 0.000 0.000 0.000 compat.py:1() + 2 0.000 0.000 0.000 0.000 _elffile.py:39(ELFFile) + 17 0.000 0.000 0.000 0.000 ctx_mp_python.py:597(make_mpf) + 1 0.000 0.000 0.000 0.000 random.py:358(randint) + 1 0.000 0.000 0.000 0.000 __init__.py:2629(Distribution) + 1 0.000 0.000 0.000 0.000 trigonometric.py:1880(csc) + 3 0.000 0.000 0.000 0.000 ufunclike.py:41(_fix_out_named_y) + 22 0.000 0.000 0.000 0.000 traceback.py:310(_original_line) + 1 0.000 0.000 0.000 0.000 kcutsets.py:1() + 1 0.000 0.000 0.000 0.000 trigonometric.py:2404(acos) + 1 0.000 0.000 0.000 0.000 conv.py:36(_ConvNd) + 12 0.000 0.000 0.000 0.000 typing.py:2384() + 15 0.000 0.000 0.000 0.000 pretty_symbology.py:410() + 1 0.000 0.000 0.000 0.000 _web_response.py:15(WebResponse) + 3 0.000 0.000 0.000 0.000 :682(__setitem__) + 1 0.000 0.000 0.000 0.000 _compressed.py:23(_cs_matrix) + 59 0.000 0.000 0.000 0.000 _decorators.py:461(__init__) + 22 0.000 0.000 0.000 0.000 _codata.py:1574(value) + 1 0.000 0.000 0.000 0.000 logger.py:39(short_format_time) + 1 0.000 0.000 0.000 0.000 preflowpush.py:1() + 1 0.000 0.000 0.000 0.000 :716(setdefault) + 1 0.000 0.000 0.000 0.000 stochastic.py:1() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:2221(weibull_min_gen) + 1 0.000 0.000 0.000 0.000 convert_matrix.py:1() + 1 0.000 0.000 0.000 0.000 _milp.py:1() + 1 0.000 0.000 0.000 0.000 deltafunctions.py:1() + 1 0.000 0.000 0.000 0.000 hyperbolic.py:1063(sech) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:9181(vonmises_gen) + 1 0.000 0.000 0.000 0.000 function.py:1022(Derivative) + 1 0.000 0.000 0.000 0.000 uniform.py:11(Uniform) + 16 0.000 0.000 0.000 0.000 {built-in method time.strftime} + 1 0.000 0.000 0.000 0.000 preview.py:1() + 13 0.000 0.000 0.000 0.000 _dtype_ctypes.py:71(_from_ctypes_scalar) + 9 0.000 0.000 0.000 0.000 _parallel_backends.py:285(compute_batch_size) + 2 0.000 0.000 0.000 0.000 _cobyla_py.py:30(synchronized) + 21 0.000 0.000 0.000 0.000 fancy_getopt.py:442(translate_longopt) + 1 0.000 0.000 0.000 0.000 heaps.py:132(PairingHeap) + 1 0.000 0.000 0.000 0.000 bessel.py:805(yn) + 8 0.000 0.000 0.000 0.000 ctx_iv.py:30(convert_mpf_) + 1 0.000 0.000 0.000 0.000 powerset.py:10(PowerSet) + 24 0.000 0.000 0.000 0.000 calculus.py:4(defun) + 1 0.000 0.000 0.000 0.000 geometric.py:11(Geometric) + 8 0.000 0.000 0.000 0.000 DAG.py:374(get_children) + 2 0.000 0.000 0.000 0.000 context.py:218(passes) + 1 0.000 0.000 0.000 0.000 _gcrotmk.py:1() + 6 0.000 0.000 0.000 0.000 compressor.py:45(register_compressor) + 1 0.000 0.000 0.000 0.000 _notification.py:18(Notification) + 1 0.000 0.000 0.000 0.000 domain.py:18(Domain) + 1 0.000 0.000 0.000 0.000 disjoint_paths.py:1() + 5 0.000 0.000 0.000 0.000 {built-in method posix.uname} + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:6848(pareto_gen) + 1 0.000 0.000 0.000 0.000 process_executor.py:872(_check_system_limits) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:27(ParallelBackendBase) + 8 0.000 0.000 0.000 0.000 digraph.py:420(add_node) + 140 0.000 0.000 0.000 0.000 _dill.py:559() + 26 0.000 0.000 0.000 0.000 _jit_internal.py:860(is_pass) + 1 0.000 0.000 0.000 0.000 multidimensional.py:1() + 1 0.000 0.000 0.000 0.000 _web_request.py:15(WebRequest) + 40 0.000 0.000 0.000 0.000 {built-in method gmpy2.gmpy2._mpmath_normalize} + 1 0.000 0.000 0.000 0.000 boolalg.py:64(Boolean) + 1 0.000 0.000 0.000 0.000 __init__.py:870(__init__) + 1 0.000 0.000 0.000 0.000 ratsimp.py:1() + 10 0.000 0.000 0.000 0.000 _torch_docs.py:23() + 1 0.000 0.000 0.000 0.000 online.py:1() + 1 0.000 0.000 0.000 0.000 hyperbolic.py:1778(acsch) + 60 0.000 0.000 0.000 0.000 {method '__exit__' of '_thread.RLock' objects} + 1 0.000 0.000 0.000 0.000 blocks.py:2024(ObjectBlock) + 1 0.000 0.000 0.000 0.000 sysconfig.py:219(is_python_build) + 1 0.000 0.000 0.000 0.000 numbers.py:193(fibonacci) + 1 0.000 0.000 0.000 0.000 feedparser.py:139(__init__) + 1 0.000 0.000 0.000 0.000 _pep440.py:285(Version) + 1 0.000 0.000 0.000 0.000 resource_sharer.py:63(__init__) + 20 0.000 0.000 0.000 0.000 {method 'index' of 'tuple' objects} + 1 0.000 0.000 0.000 0.000 __init__.py:731(DistributionFinder) + 1 0.000 0.000 0.000 0.000 densearith.py:1() + 1 0.000 0.000 0.000 0.000 _dtype.py:1() + 1 0.000 0.000 0.000 0.000 symbol.py:456(Wild) + 58 0.000 0.000 0.000 0.000 typing.py:2864() + 1 0.000 0.000 0.000 0.000 signal_handling.py:1() + 62 0.000 0.000 0.000 0.000 _docscrape.py:47(reset) + 1 0.000 0.000 0.000 0.000 reductions.py:151() + 1 0.000 0.000 0.000 0.000 _mangling.py:1() + 1 0.000 0.000 0.000 0.000 moral.py:1() + 1 0.000 0.000 0.000 0.000 distributed_c10d.py:312(_World) + 12 0.000 0.000 0.000 0.000 copyreg.py:12(pickle) + 1 0.000 0.000 0.000 0.000 _parser.py:1373(_result) + 5 0.000 0.000 0.000 0.000 __init__.py:511(cast) + 20 0.000 0.000 0.000 0.000 mixins.py:16(_binary_method) + 73 0.000 0.000 0.000 0.000 core.py:4370(recurse) + 1 0.000 0.000 0.000 0.000 hyperbolic.py:1533(acoth) + 54 0.000 0.000 0.000 0.000 decorators.py:12(_sympifyit) + 1 0.000 0.000 0.000 0.000 ipaddress.py:1883(IPv6Address) + 1 0.000 0.000 0.000 0.000 filesystem.py:242(LocalFileSystem) + 3 0.000 0.000 0.000 0.000 core.py:687() + 2 0.000 0.000 0.000 0.000 libmpi.py:454(mpi_from_str) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:2989(gamma_gen) + 2 0.000 0.000 0.000 0.000 multidimensional.py:93(__call__) + 1 0.000 0.000 0.000 0.000 _onenormest.py:1() + 2 0.000 0.000 0.000 0.000 ordinals.py:81(__new__) + 1 0.000 0.000 0.000 0.000 sets.py:1886(FiniteSet) + 1 0.000 0.000 0.000 0.000 _tester.py:1() + 8 0.000 0.000 0.000 0.000 parallel.py:271(__init__) + 1 0.000 0.000 0.000 0.000 context.py:187(get_context) + 1 0.000 0.000 0.000 0.000 _decomp_ldl.py:1() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:3615(gumbel_r_gen) + 2 0.000 0.000 0.000 0.000 __init__.py:15(_deprecation_notice) + 1 0.000 0.000 0.000 0.000 testing.py:124(TestParseResultsAsserts) + 1 0.000 0.000 0.000 0.000 transforms.py:995(CatTransform) + 16 0.000 0.000 0.000 0.000 _docscrape.py:441(_str_summary) + 45 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects} + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:3745(gumbel_l_gen) + 1 0.000 0.000 0.000 0.000 __init__.py:635(levy_stable_gen) + 3 0.000 0.000 0.000 0.000 inverselaplace.py:668(__init__) + 1 0.000 0.000 0.000 0.000 _serialization.py:1() + 14 0.000 0.000 0.000 0.000 dispatcher.py:113(__init__) + 3 0.000 0.000 0.000 0.000 {built-in method _csv.register_dialect} + 255 0.000 0.000 0.000 0.000 {method 'bit_scan1' of 'mpz' objects} + 2 0.000 0.000 0.000 0.000 __init__.py:37(FoldedCase) + 1 0.000 0.000 0.000 0.000 nx_pylab.py:1() + 1 0.000 0.000 0.000 0.000 graph.py:732(nodes) + 1 0.000 0.000 0.000 0.000 synchronize.py:53(SemLock) + 28 0.000 0.000 0.000 0.000 __init__.py:795(__init__) + 24 0.000 0.000 0.000 0.000 ctx_iv.py:397(make_mpf) + 1 0.000 0.000 0.000 0.000 bvls.py:1() + 3 0.000 0.000 0.000 0.000 symbolic_opset9.py:2108(decorator) + 1 0.000 0.000 0.000 0.000 defmatrix.py:72(matrix) + 1 0.000 0.000 0.000 0.000 format.py:1010(DataFrameRenderer) + 1 0.000 0.000 0.000 0.000 _warnings.py:1() + 4 0.000 0.000 0.000 0.000 _pep440.py:437(_cmpkey) + 1 0.000 0.000 0.000 0.000 sets.py:1758(EmptySet) + 1 0.000 0.000 0.000 0.000 pathlib.py:857(Path) + 1 0.000 0.000 0.000 0.000 expr.py:341(BaseExprVisitor) + 77 0.000 0.000 0.000 0.000 {method 'removeprefix' of 'str' objects} + 1 0.000 0.000 0.000 0.000 __init__.py:142(CudnnModule) + 1 0.000 0.000 0.000 0.000 proxy_tensor.py:475(ProxyTorchDispatchMode) + 2 0.000 0.000 0.000 0.000 methods.py:118() + 1 0.000 0.000 0.000 0.000 <__array_function__ internals>:177(concatenate) + 19 0.000 0.000 0.000 0.000 __init__.py:1273(append) + 1 0.000 0.000 0.000 0.000 my_exceptions.py:12() + 1 0.000 0.000 0.000 0.000 lukes.py:1() + 1 0.000 0.000 0.000 0.000 itt.py:1() + 1 0.000 0.000 0.000 0.000 argparse.py:157(HelpFormatter) + 1 0.000 0.000 0.000 0.000 ckdtree.py:1() + 1 0.000 0.000 0.000 0.000 core.py:112(__diag__) + 6 0.000 0.000 0.000 0.000 _weakrefset.py:37(__init__) + 1 0.000 0.000 0.000 0.000 _common.py:149(_tzinfo) + 17 0.000 0.000 0.000 0.000 {method 'astype' of 'numpy.ndarray' objects} + 1 0.000 0.000 0.000 0.000 __init__.py:281(DeprecatedList) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:7798(reciprocal_gen) + 1 0.000 0.000 0.000 0.000 entity.py:67(GeometryEntity) + 2 0.000 0.000 0.000 0.000 arrayprint.py:503(decorating_function) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:3155(erlang_gen) + 1 0.000 0.000 0.000 0.000 polyutils.py:170() + 2 0.000 0.000 0.000 0.000 ctx_mp_python.py:145(__float__) + 1 0.000 0.000 0.000 0.000 _version_control_details.py:15(VersionControlDetails) + 1 0.000 0.000 0.000 0.000 state_name.py:1() + 1 0.000 0.000 0.000 0.000 managers.py:92(BaseBlockManager) + 39 0.000 0.000 0.000 0.000 _jit_internal.py:530(export) + 1 0.000 0.000 0.000 0.000 heaps.py:13(MinHeap) + 42 0.000 0.000 0.000 0.000 dispatcher.py:120(register) + 1 0.000 0.000 0.000 0.000 events.py:644(BaseDefaultEventLoopPolicy) + 16 0.000 0.000 0.000 0.000 state_name.py:41() + 1 0.000 0.000 0.000 0.000 dist.py:397(Distribution) + 24 0.000 0.000 0.000 0.000 {built-in method _struct.calcsize} + 1 0.000 0.000 0.000 0.000 eigen_symmetric.py:1() + 8 0.000 0.000 0.000 0.000 BIF.py:381() + 1 0.000 0.000 0.000 0.000 shortestaugmentingpath.py:1() + 12 0.000 0.000 0.000 0.000 _VF.py:26(__getattr__) + 2 0.000 0.000 0.000 0.000 importtools.py:33(version_tuple) + 1 0.000 0.000 0.000 0.000 summarization.py:1() + 1 0.000 0.000 0.000 0.000 argparse.py:1149(_SubParsersAction) + 78 0.000 0.000 0.000 0.000 _decorators.py:256(future_version_msg) + 1 0.000 0.000 0.000 0.000 _pyio.py:1426(__init__) + 1 0.000 0.000 0.000 0.000 format_helpers.py:1() + 1 0.000 0.000 0.000 0.000 polytools.py:4266(PurePoly) + 85 0.000 0.000 0.000 0.000 _compat_pickle.py:167() + 1 0.000 0.000 0.000 0.000 typing.py:1589(__repr__) + 111 0.000 0.000 0.000 0.000 {method 'end' of 're.Match' objects} + 1 0.000 0.000 0.000 0.000 ssl.py:484(SSLContext) + 1 0.000 0.000 0.000 0.000 pytree_hacks.py:1() + 1 0.000 0.000 0.000 0.000 deprecation.py:1() + 1 0.000 0.000 0.000 0.000 objtypes.py:1() + 1 0.000 0.000 0.000 0.000 logging.py:1() + 2 0.000 0.000 0.000 0.000 _strptime.py:95(__calc_am_pm) + 1 0.000 0.000 0.000 0.000 sqfreetools.py:1() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:5341(logistic_gen) + 1 0.000 0.000 0.000 0.000 torch.py:1() + 3 0.000 0.000 0.000 0.000 quadrature.py:461(__init__) + 1 0.000 0.000 0.000 0.000 defchararray.py:1908(chararray) + 101 0.000 0.000 0.000 0.000 dataclasses.py:842(_hash_set_none) + 2 0.000 0.000 0.000 0.000 __init__.py:132(is_cpython) + 1 0.000 0.000 0.000 0.000 sdm.py:17(SDM) + 1 0.000 0.000 0.000 0.000 pythonrationalfield.py:9(PythonRationalField) + 8 0.000 0.000 0.000 0.000 _ufunc_config.py:132(geterr) + 1 0.000 0.000 0.000 0.000 rk.py:280(RK45) + 68 0.000 0.000 0.000 0.000 core.py:3858() + 1 0.000 0.000 0.000 0.000 dtypes.py:122(CategoricalDtype) + 2 0.000 0.000 0.000 0.000 centrality.py:1() + 26 0.000 0.000 0.000 0.000 inspect.py:1172(__init__) + 1 0.000 0.000 0.000 0.000 numbers.py:32(Complex) + 1 0.000 0.000 0.000 0.000 fake_tensor.py:951(FakeTensorMode) + 1 0.000 0.000 0.000 0.000 similarity.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:103() + 1 0.000 0.000 0.000 0.000 matadd.py:19(MatAdd) + 7 0.000 0.000 0.000 0.000 _threadsafety.py:25(__init__) + 3 0.000 0.000 0.000 0.000 ast.py:531(__instancecheck__) + 1 0.000 0.000 0.000 0.000 pydoc.py:565(HTMLDoc) + 1 0.000 0.000 0.000 0.000 _arrow_utils.py:1() + 1 0.000 0.000 0.000 0.000 matmul.py:23(MatMul) + 1 0.000 0.000 0.000 0.000 rnn.py:518(GRU) + 1 0.000 0.000 0.000 0.000 _iotools.py:450(StringConverter) + 1 0.000 0.000 0.000 0.000 distributed_c10d.py:286(__init__) + 1 0.000 0.000 0.000 0.000 ismags.py:226(ISMAGS) + 1 0.000 0.000 0.000 0.000 calendar.py:52(_localized_month) + 1 0.000 0.000 0.000 0.000 api.py:12(PlatformDirsABC) + 1 0.000 0.000 0.000 0.000 _translation_metadata.py:15(TranslationMetadata) + 26 0.000 0.000 0.000 0.000 inspect.py:752(_is_wrapper) + 1 0.000 0.000 0.000 0.000 _replicated_tensor_ddp_utils.py:1() + 7 0.000 0.000 0.000 0.000 _nonlin.py:1528() + 2 0.000 0.000 0.000 0.000 _utils_internal.py:23(get_file_path) + 1 0.000 0.000 0.000 0.000 quaternion.py:17(Quaternion) + 1 0.000 0.000 0.000 0.000 fake_tensor.py:744(FakeTensorConfig) + 1 0.000 0.000 0.000 0.000 singularityfunctions.py:1() + 1 0.000 0.000 0.000 0.000 rnn.py:62(RNNBase) + 2 0.000 0.000 0.000 0.000 threading.py:1446(current_thread) + 1 0.000 0.000 0.000 0.000 codeprinter.py:47(CodePrinter) + 1 0.000 0.000 0.000 0.000 _print_helpers.py:1() + 1 0.000 0.000 0.000 0.000 numbers.py:2073(motzkin) + 1 0.000 0.000 0.000 0.000 theano.py:1() + 134 0.000 0.000 0.000 0.000 six.py:93(__init__) + 1 0.000 0.000 0.000 0.000 dirichlet.py:16(_Dirichlet) + 1 0.000 0.000 0.000 0.000 {built-in method posix.rmdir} + 1 0.000 0.000 0.000 0.000 _infra.py:36(Tag) + 1 0.000 0.000 0.000 0.000 multinomial.py:11(Multinomial) + 79 0.000 0.000 0.000 0.000 reduction.py:43(register) + 14 0.000 0.000 0.000 0.000 libelefun.py:85(constant_memo) + 1 0.000 0.000 0.000 0.000 _multivariate.py:287(multivariate_normal_gen) + 2 0.000 0.000 0.000 0.000 core.py:2940(_update_from) + 17 0.000 0.000 0.000 0.000 dtypes.py:303(construct_from_string) + 1 0.000 0.000 0.000 0.000 _compat.py:1() + 1 0.000 0.000 0.000 0.000 initializers.py:1() + 40 0.000 0.000 0.000 0.000 typing.py:1687(_value_and_type_iter) + 1 0.000 0.000 0.000 0.000 specfun.py:1() + 4 0.000 0.000 0.000 0.000 {built-in method _signal.pthread_sigmask} + 1 0.000 0.000 0.000 0.000 core.py:5044(__init__) + 1 0.000 0.000 0.000 0.000 offsets.py:1() + 5 0.000 0.000 0.000 0.000 datetime.py:515(_check_date_fields) + 2 0.000 0.000 0.000 0.000 generic.py:12183(_doc_params) + 36 0.000 0.000 0.000 0.000 _pytree.py:59(_list_unflatten) + 1 0.000 0.000 0.000 0.000 _location.py:19(Location) + 8 0.000 0.000 0.000 0.000 coreviews.py:80(__getitem__) + 1 0.000 0.000 0.000 0.000 mock.py:1272(_patch) + 1 0.000 0.000 0.000 0.000 digraph.py:70(DiGraph) + 1 0.000 0.000 0.000 0.000 reductions.py:154() + 12 0.000 0.000 0.000 0.000 domain.py:379(__call__) + 1 0.000 0.000 0.000 0.000 replace.py:1() + 1 0.000 0.000 0.000 0.000 matcher_utils.py:31(InternalMatch) + 1 0.000 0.000 0.000 0.000 conv.py:961(ConvTranspose3d) + 1 0.000 0.000 0.000 0.000 _logical_location.py:12(LogicalLocation) + 1 0.000 0.000 0.000 0.000 decomp_schur.py:1() + 10 0.000 0.000 0.000 0.000 queue.py:209(_qsize) + 1 0.000 0.000 0.000 0.000 pickle.py:407(_Pickler) + 52 0.000 0.000 0.000 0.000 common.py:20(unpack_zerodim_and_defer) + 1 0.000 0.000 0.000 0.000 modular.py:1() + 1 0.000 0.000 0.000 0.000 base.py:446(Registry) + 18 0.000 0.000 0.000 0.000 _data.py:131(_create_method) + 15 0.000 0.000 0.000 0.000 pretty_symbology.py:236() + 16 0.000 0.000 0.000 0.000 _docscrape.py:447(_str_extended_summary) + 7 0.000 0.000 0.000 0.000 parse.py:811(__getattr__) + 1 0.000 0.000 0.000 0.000 minres.py:1() + 12 0.000 0.000 0.000 0.000 __init__.py:2450(_is_unpacked_egg) + 1 0.000 0.000 0.000 0.000 generate.py:56(__init__) + 2 0.000 0.000 0.000 0.000 ctx_mp_python.py:612(_set_prec) + 2 0.000 0.000 0.000 0.000 {built-in method posix.mkdir} + 1 0.000 0.000 0.000 0.000 _shgo.py:453(SHGO) + 1 0.000 0.000 0.000 0.000 _variation.py:1() + 26 0.000 0.000 0.000 0.000 tokenize.py:616(generate_tokens) + 1 0.000 0.000 0.000 0.000 _graph_traversal.py:16(GraphTraversal) + 1 0.000 0.000 0.000 0.000 biasedurn.py:1() + 1 0.000 0.000 0.000 0.000 _base.py:909(ExcelWriter) + 22 0.000 0.000 0.000 0.000 __init__.py:1267(__init__) + 1 0.000 0.000 0.000 0.000 pathlib.py:128() + 5 0.000 0.000 0.000 0.000 _torch_docs.py:27(merge_dicts) + 28 0.000 0.000 0.000 0.000 core.py:673() + 1 0.000 0.000 0.000 0.000 morestats.py:1() + 1 0.000 0.000 0.000 0.000 BIF.py:335(get_edges) + 1 0.000 0.000 0.000 0.000 frontend.py:531(StmtBuilder) + 12 0.000 0.000 0.000 0.000 domain.py:403(convert) + 1 0.000 0.000 0.000 0.000 futures.py:30(Future) + 3 0.000 0.000 0.000 0.000 _shims.py:154(register_shim) + 1 0.000 0.000 0.000 0.000 indexing.py:655(_LocationIndexer) + 1 0.000 0.000 0.000 0.000 getlimits.py:581(tiny) + 7 0.000 0.000 0.000 0.000 case.py:387(__init_subclass__) + 1 0.000 0.000 0.000 0.000 __init__.py:132() + 1 0.000 0.000 0.000 0.000 tz.py:41(tzutc) + 1 0.000 0.000 0.000 0.000 primetest.py:1() + 1 0.000 0.000 0.000 0.000 _result_provenance.py:15(ResultProvenance) + 1 0.000 0.000 0.000 0.000 mock.py:1994() + 2 0.000 0.000 0.000 0.000 datetime.py:923(__new__) + 21 0.000 0.000 0.000 0.000 {built-in method builtins.vars} + 7 0.000 0.000 0.000 0.000 :516(__subclasshook__) + 18 0.000 0.000 0.000 0.000 typing.py:919(_is_typevar_like) + 1 0.000 0.000 0.000 0.000 _entropy.py:1() + 15 0.000 0.000 0.000 0.000 typing_extensions.py:640() + 1 0.000 0.000 0.000 0.000 dtype.py:42(SparseDtype) + 1 0.000 0.000 0.000 0.000 morphology.py:1() + 122 0.000 0.000 0.000 0.000 {built-in method builtins.abs} + 3 0.000 0.000 0.000 0.000 _pyio.py:1056(__init__) + 1 0.000 0.000 0.000 0.000 engine.py:28(Diagnostic) + 1 0.000 0.000 0.000 0.000 bench_detailed.py:1() + 1 0.000 0.000 0.000 0.000 ddm.py:85(DDM) + 2 0.000 0.000 0.000 0.000 context.py:191(raises) + 1 0.000 0.000 0.000 0.000 pytables.py:3265(Table) + 1 0.000 0.000 0.000 0.000 tempfile.py:665(SpooledTemporaryFile) + 1 0.000 0.000 0.000 0.000 masked_reductions.py:1() + 1 0.000 0.000 0.000 0.000 timeutils.py:37(__do_timings) + 7 0.000 0.000 0.000 0.000 {built-in method math.log} + 1 0.000 0.000 0.000 0.000 batch_norm_replacement.py:1() + 2 0.000 0.000 0.000 0.000 pathlib.py:546(__fspath__) + 1 0.000 0.000 0.000 0.000 _print_versions.py:1() + 87 0.000 0.000 0.000 0.000 kl.py:822() + 22 0.000 0.000 0.000 0.000 enum.py:803(__members__) + 1 0.000 0.000 0.000 0.000 __init__.py:567(discover) + 1 0.000 0.000 0.000 0.000 pytables.py:475(HDFStore) + 1 0.000 0.000 0.000 0.000 observer.py:611(PerChannelMinMaxObserver) + 1 0.000 0.000 0.000 0.000 stata.py:2179(StataWriter) + 1 0.000 0.000 0.000 0.000 pool.py:173(Pool) + 1 0.000 0.000 0.000 0.000 numpy_.py:29(PandasArray) + 1 0.000 0.000 0.000 0.000 rolling.py:114(BaseWindow) + 41 0.000 0.000 0.000 0.000 decorators.py:72(call_highest_priority) + 1 0.000 0.000 0.000 0.000 msvc.py:1080(EnvironmentInfo) + 1 0.000 0.000 0.000 0.000 _rectangle.py:12(Rectangle) + 2 0.000 0.000 0.000 0.000 datetime.py:1340(__new__) + 3 0.000 0.000 0.000 0.000 operations.py:108(_from_args) + 1 0.000 0.000 0.000 0.000 _dill.py:2023(_extend) + 66 0.000 0.000 0.000 0.000 __init__.py:468(_parse_letter_version) + 1 0.000 0.000 0.000 0.000 methods.py:1() + 16 0.000 0.000 0.000 0.000 _axis_nan_policy.py:309(_axis_nan_policy_factory) + 1 0.000 0.000 0.000 0.000 dop.py:1() + 1 0.000 0.000 0.000 0.000 wiener.py:1() + 1 0.000 0.000 0.000 0.000 coo.py:1() + 24 0.000 0.000 0.000 0.000 _pyio.py:501(_checkClosed) + 1 0.000 0.000 0.000 0.000 delta_functions.py:393(Heaviside) + 1 0.000 0.000 0.000 0.000 decomp.py:1() + 2 0.000 0.000 0.000 0.000 selectors.py:583(_can_use) + 4 0.000 0.000 0.000 0.000 _pyio.py:1802(isatty) + 8 0.000 0.000 0.000 0.000 mock.py:329(_delegating_property) + 10 0.000 0.000 0.000 0.000 pretty_symbology.py:172() + 1 0.000 0.000 0.000 0.000 CustomDistribution.py:7(CustomDistribution) + 16 0.000 0.000 0.000 0.000 _docscrape.py:376() + 1 0.000 0.000 0.000 0.000 polyclasses.py:1090(DMF) + 1 0.000 0.000 0.000 0.000 case.py:393(__init__) + 38 0.000 0.000 0.000 0.000 {method 'startswith' of 'bytes' objects} + 1 0.000 0.000 0.000 0.000 subprocess.py:695(_use_posix_spawn) + 2 0.000 0.000 0.000 0.000 :688(__delitem__) + 1 0.000 0.000 0.000 0.000 symbolic_opset13.py:26(_apply) + 2 0.000 0.000 0.000 0.000 __init__.py:1734(isEnabledFor) + 3 0.000 0.000 0.000 0.000 functools.py:191() + 1 0.000 0.000 0.000 0.000 equitable_coloring.py:1() + 1 0.000 0.000 0.000 0.000 case.py:44(_Outcome) + 1 0.000 0.000 0.000 0.000 context.py:30(BaseContext) + 1 0.000 0.000 0.000 0.000 codata.py:1() + 1 0.000 0.000 0.000 0.000 grouper.py:58(Grouper) + 15 0.000 0.000 0.000 0.000 _pyio.py:868(closed) + 1 0.000 0.000 0.000 0.000 setupcfg.py:229(ConfigHandler) + 9 0.000 0.000 0.000 0.000 doccer.py:117(_doc) + 1 0.000 0.000 0.000 0.000 _json.py:760(JsonReader) + 4 0.000 0.000 0.000 0.000 libmpf.py:631(mpf_le) + 1 0.000 0.000 0.000 0.000 special_matrices.py:1() + 1 0.000 0.000 0.000 0.000 linesearch.py:1() + 1 0.000 0.000 0.000 0.000 polyint.py:1() + 1 0.000 0.000 0.000 0.000 _artifact_location.py:12(ArtifactLocation) + 1 0.000 0.000 0.000 0.000 _ranges.py:1() + 9 0.000 0.000 0.000 0.000 {built-in method posix.fstat} + 1 0.000 0.000 0.000 0.000 tarfile.py:1608(TarFile) + 43 0.000 0.000 0.000 0.000 _compat_pickle.py:165() + 1 0.000 0.000 0.000 0.000 _thread_flow.py:16(ThreadFlow) + 1 0.000 0.000 0.000 0.000 _script.py:486(ScriptModule) + 1 0.000 0.000 0.000 0.000 conv.py:806(ConvTranspose2d) + 1 0.000 0.000 0.000 0.000 dinitz_alg.py:1() + 1 0.000 0.000 0.000 0.000 _lil.py:19(lil_matrix) + 1 0.000 0.000 0.000 0.000 threading.py:583(set) + 1 0.000 0.000 0.000 0.000 _openpyxl.py:39(OpenpyxlWriter) + 6 0.000 0.000 0.000 0.000 _policybase.py:94(_append_doc) + 1 0.000 0.000 0.000 0.000 rk.py:183(RK23) + 4 0.000 0.000 0.000 0.000 function_base.py:1800(trim_zeros) + 1 0.000 0.000 0.000 0.000 core.py:3511(__init__) + 1 0.000 0.000 0.000 0.000 threads.py:1() + 1 0.000 0.000 0.000 0.000 _decomp_qz.py:1() + 1 0.000 0.000 0.000 0.000 DiscreteFactor.py:16(DiscreteFactor) + 1 0.000 0.000 0.000 0.000 pdb.py:161(_ModuleTarget) + 12 0.000 0.000 0.000 0.000 decorator.py:243(deprecated) + 1 0.000 0.000 0.000 0.000 _suppression.py:12(Suppression) + 16 0.000 0.000 0.000 0.000 digraph.py:906(predecessors) + 1 0.000 0.000 0.000 0.000 decomp_cholesky.py:1() + 1 0.000 0.000 0.000 0.000 _decorators.py:298() + 1 0.000 0.000 0.000 0.000 interpolate.py:1() + 1 0.000 0.000 0.000 0.000 threading.py:1008(_set_tstate_lock) + 1 0.000 0.000 0.000 0.000 _exception.py:16(Exception) + 1 0.000 0.000 0.000 0.000 conditionset.py:19(ConditionSet) + 1 0.000 0.000 0.000 0.000 convert_parameters.py:1() + 4 0.000 0.000 0.000 0.000 results.py:200(__setitem__) + 25 0.000 0.000 0.000 0.000 ipaddress.py:431(_ip_int_from_prefix) + 1 0.000 0.000 0.000 0.000 rings.py:196(PolyRing) + 1 0.000 0.000 0.000 0.000 nonlin.py:1() + 1 0.000 0.000 0.000 0.000 isomorph.py:1() + 1 0.000 0.000 0.000 0.000 _type_aliases.py:151(_set_up_aliases) + 1 0.000 0.000 0.000 0.000 extract.py:1() + 2 0.000 0.000 0.000 0.000 six.py:96(__get__) + 1 0.000 0.000 0.000 0.000 selector_events.py:43(BaseSelectorEventLoop) + 3 0.000 0.000 0.000 0.000 libmpf.py:59(prec_to_dps) + 1 0.000 0.000 0.000 0.000 _decomp_lu.py:1() + 1 0.000 0.000 0.000 0.000 ctx_mp.py:58(MPContext) + 10 0.000 0.000 0.000 0.000 :1() + 4 0.000 0.000 0.000 0.000 __init__.py:142(_declare_state) + 1 0.000 0.000 0.000 0.000 _reporting_descriptor_reference.py:15(ReportingDescriptorReference) + 1 0.000 0.000 0.000 0.000 ctx_mp_python.py:39(_mpf) + 1 0.000 0.000 0.000 0.000 base.py:39(ExtensionDtype) + 1 0.000 0.000 0.000 0.000 node_link.py:1() + 1 0.000 0.000 0.000 0.000 transformed_distribution.py:11(TransformedDistribution) + 1 0.000 0.000 0.000 0.000 percolation.py:1() + 14 0.000 0.000 0.000 0.000 __init__.py:144(__lt__) + 1 0.000 0.000 0.000 0.000 astar.py:1() + 1 0.000 0.000 0.000 0.000 process.py:71(BaseProcess) + 12 0.000 0.000 0.000 0.000 typing.py:385() + 1 0.000 0.000 0.000 0.000 _reporting_configuration.py:12(ReportingConfiguration) + 1 0.000 0.000 0.000 0.000 ipaddress.py:671(_BaseNetwork) + 11 0.000 0.000 0.000 0.000 functools.py:355(__init__) + 1 0.000 0.000 0.000 0.000 sql.py:1989(SQLiteDatabase) + 20 0.000 0.000 0.000 0.000 _decorators.py:97(deprecate_kwarg) + 1 0.000 0.000 0.000 0.000 fitpack.py:1() + 4 0.000 0.000 0.000 0.000 locale.py:396(normalize) + 1 0.000 0.000 0.000 0.000 rotation.py:1() + 1 0.000 0.000 0.000 0.000 _factories.py:26(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:241(set_testing_mode) + 1 0.000 0.000 0.000 0.000 kde.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:136(script_if_tracing) + 50 0.000 0.000 0.000 0.000 core.py:4087() + 1 0.000 0.000 0.000 0.000 interface.py:1() + 1 0.000 0.000 0.000 0.000 transformer.py:611(TransformerDecoderLayer) + 2 0.000 0.000 0.000 0.000 expr.py:127(_compose) + 1 0.000 0.000 0.000 0.000 _lobpcg.py:695(LOBPCG) + 5 0.000 0.000 0.000 0.000 generic.py:49(_subclasscheck) + 40 0.000 0.000 0.000 0.000 enum.py:92(_is_single_bit) + 1 0.000 0.000 0.000 0.000 embedding_ops.py:70(Embedding) + 34 0.000 0.000 0.000 0.000 invalid.py:40(make_invalid_op) + 1 0.000 0.000 0.000 0.000 filesystem.py:315(DaskFileSystem) + 1 0.000 0.000 0.000 0.000 ndgriddata.py:1() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:8995(uniform_gen) + 1 0.000 0.000 0.000 0.000 function_docs.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:116() + 1 0.000 0.000 0.000 0.000 independent.py:9(Independent) + 1 0.000 0.000 0.000 0.000 process_executor.py:909(_check_max_depth) + 2 0.000 0.000 0.000 0.000 :362(__subclasshook__) + 18 0.000 0.000 0.000 0.000 _internal.py:889() + 1 0.000 0.000 0.000 0.000 redundancy.py:1() + 16 0.000 0.000 0.000 0.000 _docscrape.py:435(_str_signature) + 1 0.000 0.000 0.000 0.000 transformer.py:379(TransformerEncoderLayer) + 1 0.000 0.000 0.000 0.000 __init__.py:176() + 36 0.000 0.000 0.000 0.000 enum.py:1238(name) + 16 0.000 0.000 0.000 0.000 state_name.py:44() + 10 0.000 0.000 0.000 0.000 pretty_symbology.py:176() + 1 0.000 0.000 0.000 0.000 dataframe_protocol.py:373(DataFrame) + 1 0.000 0.000 0.000 0.000 dok.py:1() + 3 0.000 0.000 0.000 0.000 __init__.py:4998(_make_r_binary_op) + 1 0.000 0.000 0.000 0.000 compressed.py:1() + 1 0.000 0.000 0.000 0.000 cobyla.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:187() + 26 0.000 0.000 0.000 0.000 message.py:506(set_raw) + 1 0.000 0.000 0.000 0.000 mstats_extras.py:1() + 1 0.000 0.000 0.000 0.000 orc.py:1() + 3 0.000 0.000 0.000 0.000 blas.py:259(find_best_blas_type) + 1 0.000 0.000 0.000 0.000 construct.py:1() + 1 0.000 0.000 0.000 0.000 ipaddress.py:1577(_BaseV6) + 1 0.000 0.000 0.000 0.000 decomp_qr.py:1() + 1 0.000 0.000 0.000 0.000 platform.py:956(machine) + 32 0.000 0.000 0.000 0.000 arraypad.py:120() + 1 0.000 0.000 0.000 0.000 sf_error.py:1() + 1 0.000 0.000 0.000 0.000 _run_automation_details.py:12(RunAutomationDetails) + 1 0.000 0.000 0.000 0.000 dataloader.py:683(_MultiProcessingDataLoaderIter) + 94 0.000 0.000 0.000 0.000 ipaddress.py:574(__int__) + 1 0.000 0.000 0.000 0.000 linear.py:9(LinearPackedParams) + 1 0.000 0.000 0.000 0.000 client.py:790(HTTPConnection) + 1 0.000 0.000 0.000 0.000 convert.py:1() + 1 0.000 0.000 0.000 0.000 _decomp_polar.py:1() + 5 0.000 0.000 0.000 0.000 util.py:223() + 1 0.000 0.000 0.000 0.000 ops.py:69(Term) + 1 0.000 0.000 0.000 0.000 _bsplines.py:68(BSpline) + 1 0.000 0.000 0.000 0.000 fake_quantize.py:60(FakeQuantizeBase) + 1 0.000 0.000 0.000 0.000 singularities.py:1() + 1 0.000 0.000 0.000 0.000 _expm_frechet.py:1() + 1 0.000 0.000 0.000 0.000 decomp_svd.py:1() + 1 0.000 0.000 0.000 0.000 linear.py:17(LinearPackedParams) + 1 0.000 0.000 0.000 0.000 planar_drawing.py:1() + 1 0.000 0.000 0.000 0.000 calendar.py:54() + 1 0.000 0.000 0.000 0.000 bsr.py:1() + 1 0.000 0.000 0.000 0.000 kdtree.py:1() + 1 0.000 0.000 0.000 0.000 _pyio.py:1986(TextIOWrapper) + 1 0.000 0.000 0.000 0.000 format.py:560(DataFrameFormatter) + 1 0.000 0.000 0.000 0.000 groebnertools.py:1() + 1 0.000 0.000 0.000 0.000 uuid.py:85(UUID) + 1 0.000 0.000 0.000 0.000 ellipse.py:38(Ellipse) + 1 0.000 0.000 0.000 0.000 pointers.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:531(Distribution) + 1 0.000 0.000 0.000 0.000 _node.py:17(Node) + 9 0.000 0.000 0.000 0.000 __init__.py:163(__new__) + 1 0.000 0.000 0.000 0.000 std.py:75(TqdmDefaultWriteLock) + 1 0.000 0.000 0.000 0.000 _edge.py:12(Edge) + 1 0.000 0.000 0.000 0.000 mstats_basic.py:1() + 1 0.000 0.000 0.000 0.000 lil.py:1() + 1 0.000 0.000 0.000 0.000 inspect.py:786(_finddoc) + 1 0.000 0.000 0.000 0.000 core.py:141(MaskedTensor) + 1 0.000 0.000 0.000 0.000 parameter.py:81(UninitializedTensorMixin) + 1 0.000 0.000 0.000 0.000 disk.py:1() + 1 0.000 0.000 0.000 0.000 lsmr.py:1() + 1 0.000 0.000 0.000 0.000 decompogen.py:1() + 1 0.000 0.000 0.000 0.000 qp_subproblem.py:1() + 1 0.000 0.000 0.000 0.000 object_array.py:28(ObjectStringArrayMixin) + 1 0.000 0.000 0.000 0.000 _attachment.py:18(Attachment) + 1 0.000 0.000 0.000 0.000 precedence.py:1() + 24 0.000 0.000 0.000 0.000 reportviews.py:197(__contains__) + 5 0.000 0.000 0.000 0.000 {built-in method posix.urandom} + 1 0.000 0.000 0.000 0.000 stats.py:1() + 2 0.000 0.000 0.000 0.000 numbers.py:229(igcd) + 1 0.000 0.000 0.000 0.000 _sarif_log.py:16(SarifLog) + 1 0.000 0.000 0.000 0.000 _dtype_ctypes.py:1() + 1 0.000 0.000 0.000 0.000 lbfgsb.py:1() + 1 0.000 0.000 0.000 0.000 _message.py:12(Message) + 1 0.000 0.000 0.000 0.000 _crash_handler.py:1() + 16 0.000 0.000 0.000 0.000 arraypad.py:58(_view_roi) + 1 0.000 0.000 0.000 0.000 decomp_lu.py:1() + 1 0.000 0.000 0.000 0.000 _rgi.py:49(RegularGridInterpolator) + 10 0.000 0.000 0.000 0.000 gaussiandomains.py:25(new) + 1 0.000 0.000 0.000 0.000 apply.py:686(FrameApply) + 1 0.000 0.000 0.000 0.000 reusable_executor.py:24(_get_next_executor_id) + 1 0.000 0.000 0.000 0.000 sparse.py:226(EmbeddingBag) + 73 0.000 0.000 0.000 0.000 core.py:1873(recurse) + 1 0.000 0.000 0.000 0.000 mixture_same_family.py:9(MixtureSameFamily) + 1 0.000 0.000 0.000 0.000 pythonmpq.py:46(PythonMPQ) + 1 0.000 0.000 0.000 0.000 std.py:130(Bar) + 1 0.000 0.000 0.000 0.000 _backend.py:48(set_global_backend) + 1 0.000 0.000 0.000 0.000 mvn.py:1() + 1 0.000 0.000 0.000 0.000 qhull.py:1() + 8 0.000 0.000 0.000 0.000 queue.py:217(_get) + 1 0.000 0.000 0.000 0.000 miscellaneous.py:379(MinMaxBase) + 1 0.000 0.000 0.000 0.000 approximation.py:1() + 14 0.000 0.000 0.000 0.000 _collections.py:23(freeze) + 32 0.000 0.000 0.000 0.000 arraypad.py:33(_slice_at_axis) + 1 0.000 0.000 0.000 0.000 vode.py:1() + 4 0.000 0.000 0.000 0.000 conflict.py:39() + 1 0.000 0.000 0.000 0.000 string_arrow.py:67(ArrowStringArray) + 32 0.000 0.000 0.000 0.000 arraypad.py:109() + 1 0.000 0.000 0.000 0.000 numerictypes.py:433(__getitem__) + 1 0.000 0.000 0.000 0.000 data.py:1() + 1 0.000 0.000 0.000 0.000 ndim_array.py:86(NDimArray) + 1 0.000 0.000 0.000 0.000 _internal.py:239(_missing_ctypes) + 1 0.000 0.000 0.000 0.000 statlib.py:1() + 2 0.000 0.000 0.000 0.000 charset.py:211(__init__) + 17 0.000 0.000 0.000 0.000 inference.py:325(is_hashable) + 19 0.000 0.000 0.000 0.000 datetimes.py:113(_field_accessor) + 8 0.000 0.000 0.000 0.000 dataclasses.py:1437(exec_body_callback) + 1 0.000 0.000 0.000 0.000 chebyshev.py:1995(Chebyshev) + 1 0.000 0.000 0.000 0.000 __init__.py:600(WorkingSet) + 1 0.000 0.000 0.000 0.000 _location_relationship.py:12(LocationRelationship) + 1 0.000 0.000 0.000 0.000 load.py:1() + 1 0.000 0.000 0.000 0.000 piecewise.py:63(Piecewise) + 1 0.000 0.000 0.000 0.000 _edge_traversal.py:12(EdgeTraversal) + 1 0.000 0.000 0.000 0.000 csc.py:1() + 1 0.000 0.000 0.000 0.000 fitpack2.py:1() + 1 0.000 0.000 0.000 0.000 _store_backends.py:335(FileSystemStoreBackend) + 1 0.000 0.000 0.000 0.000 matrix.py:1() + 1 0.000 0.000 0.000 0.000 _stack_frame.py:12(StackFrame) + 1 0.000 0.000 0.000 0.000 transforms.py:687(AffineTransform) + 1 0.000 0.000 0.000 0.000 exceptions.py:19(ParseBaseException) + 1 0.000 0.000 0.000 0.000 core.py:257() + 19 0.000 0.000 0.000 0.000 boolalg.py:460() + 1 0.000 0.000 0.000 0.000 datetime.py:893(date) + 1 0.000 0.000 0.000 0.000 symbolic_opset13.py:425(_reduce_with_dtype) + 1 0.000 0.000 0.000 0.000 core.py:5509(__init__) + 1 0.000 0.000 0.000 0.000 getlimits.py:558(smallest_normal) + 1 0.000 0.000 0.000 0.000 random.py:284(randrange) + 3 0.000 0.000 0.000 0.000 {built-in method posix.sched_getaffinity} + 1 0.000 0.000 0.000 0.000 _reporting_descriptor_relationship.py:16(ReportingDescriptorRelationship) + 1 0.000 0.000 0.000 0.000 _matrix_io.py:1() + 1 0.000 0.000 0.000 0.000 base.py:183(SelectionMixin) + 1 0.000 0.000 0.000 0.000 quadpack.py:1() + 1 0.000 0.000 0.000 0.000 zeros.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:21(__deprecated_private_func) + 11 0.000 0.000 0.000 0.000 windows.py:53(decorator) + 1 0.000 0.000 0.000 0.000 spfun_stats.py:1() + 39 0.000 0.000 0.000 0.000 functools.py:972(__set_name__) + 1 0.000 0.000 0.000 0.000 dsolve.py:1() + 2 0.000 0.000 0.000 0.000 matexpr.py:80(__new__) + 1 0.000 0.000 0.000 0.000 sputils.py:1() + 9 0.000 0.000 0.000 0.000 _parallel_backends.py:34(__init__) + 1 0.000 0.000 0.000 0.000 minpack.py:1() + 6 0.000 0.000 0.000 0.000 constraints.py:192(__init__) + 30 0.000 0.000 0.000 0.000 symbolic_opset9.py:289(_apply_params) + 15 0.000 0.000 0.000 0.000 {method 'seek' of '_io.BufferedReader' objects} + 1 0.000 0.000 0.000 0.000 kclique.py:1() + 1 0.000 0.000 0.000 0.000 core.py:4578(__init__) + 21 0.000 0.000 0.000 0.000 symbolic_opset9.py:298(_export) + 1 0.000 0.000 0.000 0.000 _spfun_stats.py:1() + 1 0.000 0.000 0.000 0.000 pooling.py:16(_MaxPoolNd) + 1 0.000 0.000 0.000 0.000 dia.py:1() + 1 0.000 0.000 0.000 0.000 numeric.py:404(Float64Index) + 1 0.000 0.000 0.000 0.000 _decomposition_utils.py:1() + 1 0.000 0.000 0.000 0.000 _tool_component_reference.py:12(ToolComponentReference) + 1 0.000 0.000 0.000 0.000 isolve.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:939(ByteStorage) + 2 0.000 0.000 0.000 0.000 :100(split) + 1 0.000 0.000 0.000 0.000 process_executor.py:146(__init__) + 1 0.000 0.000 0.000 0.000 reaching.py:1() + 1 0.000 0.000 0.000 0.000 measurements.py:1() + 1 0.000 0.000 0.000 0.000 dtype.py:20(ArrowDtype) + 2 0.000 0.000 0.000 0.000 numbers.py:678(__float__) + 2 0.000 0.000 0.000 0.000 textwrap.py:143(_munge_whitespace) + 1 0.000 0.000 0.000 0.000 adjacency.py:1() + 1 0.000 0.000 0.000 0.000 function.py:2077(Subs) + 2 0.000 0.000 0.000 0.000 _importlib.py:1() + 13 0.000 0.000 0.000 0.000 enum.py:116(_iter_bits_lsb) + 1 0.000 0.000 0.000 0.000 rbf.py:1() + 1 0.000 0.000 0.000 0.000 _physical_location.py:17(PhysicalLocation) + 8 0.000 0.000 0.000 0.000 BIF.py:391() + 1 0.000 0.000 0.000 0.000 _dok.py:23(dok_matrix) + 1 0.000 0.000 0.000 0.000 functional_modules.py:129(QFunctional) + 1 0.000 0.000 0.000 0.000 rust.py:217(RustCodePrinter) + 1 0.000 0.000 0.000 0.000 gosper.py:1() + 16 0.000 0.000 0.000 0.000 _docscrape.py:357() + 1 0.000 0.000 0.000 0.000 multi.py:191(names_compat) + 1 0.000 0.000 0.000 0.000 optimizer.py:154(Optimizer) + 8 0.000 0.000 0.000 0.000 process_executor.py:247(__init__) + 1 0.000 0.000 0.000 0.000 ufunclike.py:16(_deprecate_out_named_y) + 16 0.000 0.000 0.000 0.000 _axis_nan_policy.py:572() + 1 0.000 0.000 0.000 0.000 matrices.py:9(_matrix) + 1 0.000 0.000 0.000 0.000 sparse.py:13(Embedding) + 42 0.000 0.000 0.000 0.000 enum.py:177(__init__) + 1 0.000 0.000 0.000 0.000 interpolation.py:1() + 1 0.000 0.000 0.000 0.000 rnn.py:749(RNNCellBase) + 1 0.000 0.000 0.000 0.000 octave.py:63(OctaveCodePrinter) + 1 0.000 0.000 0.000 0.000 odepack.py:1() + 1 0.000 0.000 0.000 0.000 sets.py:980(Interval) + 1 0.000 0.000 0.000 0.000 flinalg.py:1() + 32 0.000 0.000 0.000 0.000 decorators.py:184(sympify_return) + 2 0.000 0.000 0.000 0.000 {method 'newbyteorder' of 'numpy.generic' objects} + 1 0.000 0.000 0.000 0.000 hermite_e.py:1650(HermiteE) + 2 0.000 0.000 0.000 0.000 tags.py:43(Tag) + 1 0.000 0.000 0.000 0.000 csr.py:1() + 1 0.000 0.000 0.000 0.000 pytables.py:2280(DataCol) + 1 0.000 0.000 0.000 0.000 tz.py:132(tzoffset) + 1 0.000 0.000 0.000 0.000 _conversion.py:17(Conversion) + 105 0.000 0.000 0.000 0.000 {method 'isdigit' of 'str' objects} + 2 0.000 0.000 0.000 0.000 version.py:65(_BaseVersion) + 1 0.000 0.000 0.000 0.000 managers.py:1879(SingleBlockManager) + 1 0.000 0.000 0.000 0.000 common.py:1302(MatrixProperties) + 1 0.000 0.000 0.000 0.000 request.py:317(Request) + 1 0.000 0.000 0.000 0.000 tnc.py:1() + 32 0.000 0.000 0.000 0.000 {method 'ravel' of 'numpy.ndarray' objects} + 1 0.000 0.000 0.000 0.000 convolutions.py:1() + 1 0.000 0.000 0.000 0.000 shape_prop.py:11(TensorMetadata) + 1 0.000 0.000 0.000 0.000 finite_diff.py:1() + 2 0.000 0.000 0.000 0.000 types.py:247(coroutine) + 1 0.000 0.000 0.000 0.000 _external_property_file_reference.py:15(ExternalPropertyFileReference) + 30 0.000 0.000 0.000 0.000 typing_extensions.py:712(__hash__) + 1 0.000 0.000 0.000 0.000 moduleTNC.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:43(enabled) + 1 0.000 0.000 0.000 0.000 distributed_c10d.py:71(_export_c_types) + 105 0.000 0.000 0.000 0.000 {method 'isascii' of 'str' objects} + 1 0.000 0.000 0.000 0.000 triads.py:116() + 1 0.000 0.000 0.000 0.000 GaussianDistribution.py:8(GaussianDistribution) + 1 0.000 0.000 0.000 0.000 sparse.py:9(Embedding) + 1 0.000 0.000 0.000 0.000 continued_fraction.py:1() + 1 0.000 0.000 0.000 0.000 multidigraph.py:22(MultiDiGraph) + 1 0.000 0.000 0.000 0.000 integerring.py:19(IntegerRing) + 1 0.000 0.000 0.000 0.000 ssl.py:845(SSLObject) + 1 0.000 0.000 0.000 0.000 lsqr.py:1() + 1 0.000 0.000 0.000 0.000 optimize.py:1() + 1 0.000 0.000 0.000 0.000 formal.py:974(FormalPowerSeries) + 1 0.000 0.000 0.000 0.000 _memory_viz.py:119(__repr__) + 1 0.000 0.000 0.000 0.000 enum.py:1564(unique) + 1 0.000 0.000 0.000 0.000 align.py:68(_filter_special_cases) + 2 0.000 0.000 0.000 0.000 ctx_mp_python.py:143(__int__) + 1 0.000 0.000 0.000 0.000 _diagnostic.py:99(__init__) + 1 0.000 0.000 0.000 0.000 _text.py:7(FoldedCase) + 1 0.000 0.000 0.000 0.000 legendre.py:1619(Legendre) + 1 0.000 0.000 0.000 0.000 all.py:1() + 3 0.000 0.000 0.000 0.000 _pyio.py:838(flush) + 1 0.000 0.000 0.000 0.000 _distn_infrastructure.py:603(rv_generic) + 1 0.000 0.000 0.000 0.000 voronoi.py:1() + 108 0.000 0.000 0.000 0.000 inspect.py:589() + 2 0.000 0.000 0.000 0.000 typing.py:3135(__init__) + 1 0.000 0.000 0.000 0.000 pydot.py:887(Graph) + 2 0.000 0.000 0.000 0.000 _procrustes.py:1() + 5 0.000 0.000 0.000 0.000 _torch_docs.py:28() + 1 0.000 0.000 0.000 0.000 depth_first_search.py:1() + 1 0.000 0.000 0.000 0.000 conv.py:16(_ConvNd) + 10 0.000 0.000 0.000 0.000 symbol.py:730() + 15 0.000 0.000 0.000 0.000 ssl.py:1000(_sslcopydoc) + 1 0.000 0.000 0.000 0.000 stringpict.py:18(stringPict) + 1 0.000 0.000 0.000 0.000 _trace.py:1215(_script_if_tracing) + 1 0.000 0.000 0.000 0.000 sslproto.py:260(SSLProtocol) + 2 0.000 0.000 0.000 0.000 _dill.py:1192(save_dict_view) + 6 0.000 0.000 0.000 0.000 enum.py:791(__iter__) + 1 0.000 0.000 0.000 0.000 _factories.py:56(__init__) + 1 0.000 0.000 0.000 0.000 pytables.py:2776(GenericFixed) + 7 0.000 0.000 0.000 0.000 pathlib.py:523(_format_parsed_parts) + 4 0.000 0.000 0.000 0.000 {method 'finditer' of 're.Pattern' objects} + 1 0.000 0.000 0.000 0.000 repmatrix.py:20(RepMatrix) + 1 0.000 0.000 0.000 0.000 XMLBIF.py:250(XMLBIFWriter) + 2 0.000 0.000 0.000 0.000 {built-in method posix.statvfs} + 1 0.000 0.000 0.000 0.000 _multiformat_message_string.py:12(MultiformatMessageString) + 1 0.000 0.000 0.000 0.000 managers.py:987(BlockManager) + 8 0.000 0.000 0.000 0.000 decorators.py:259(np_random_state) + 1 0.000 0.000 0.000 0.000 fusion.py:1() + 1 0.000 0.000 0.000 0.000 binrel.py:15(BinaryRelation) + 1 0.000 0.000 0.000 0.000 parsing.py:1() + 7 0.000 0.000 0.000 0.000 typing_extensions.py:699(__eq__) + 2 0.000 0.000 0.000 0.000 libmpf.py:850(gmpy_mpf_mul) + 1 0.000 0.000 0.000 0.000 proxy_tensor.py:397(PythonKeyTracer) + 1 0.000 0.000 0.000 0.000 _linprog_simplex.py:1() + 1 0.000 0.000 0.000 0.000 minpack2.py:1() + 1 0.000 0.000 0.000 0.000 runtests.py:1964(PyTestReporter) + 20 0.000 0.000 0.000 0.000 enum.py:1641(_simple_enum) + 33 0.000 0.000 0.000 0.000 process.py:37(current_process) + 1 0.000 0.000 0.000 0.000 zipfile.py:1219(ZipFile) + 1 0.000 0.000 0.000 0.000 _fitpack2.py:71(UnivariateSpline) + 1 0.000 0.000 0.000 0.000 polynomial.py:1076(poly1d) + 2 0.000 0.000 0.000 0.000 operations.py:593(__init__) + 1 0.000 0.000 0.000 0.000 _distn_infrastructure.py:1706(rv_continuous) + 1 0.000 0.000 0.000 0.000 slsqp.py:1() + 50 0.000 0.000 0.000 0.000 core.py:4088() + 2 0.000 0.000 0.000 0.000 _pyio.py:1775(seekable) + 1 0.000 0.000 0.000 0.000 _artifact_content.py:15(ArtifactContent) + 1 0.000 0.000 0.000 0.000 modules.py:1280(ModuleElement) + 1 0.000 0.000 0.000 0.000 transforms.py:391(IndependentTransform) + 1 0.000 0.000 0.000 0.000 _pade.py:1() + 1 0.000 0.000 0.000 0.000 _code_flow.py:16(CodeFlow) + 1 0.000 0.000 0.000 0.000 social.py:1() + 15 0.000 0.000 0.000 0.000 math2.py:27(_mathfun_real) + 1 0.000 0.000 0.000 0.000 _decomp_cholesky.py:1() + 1 0.000 0.000 0.000 0.000 platform.py:783(uname_result) + 9 0.000 0.000 0.000 0.000 {built-in method numpy.seterrobj} + 1 0.000 0.000 0.000 0.000 numpy.py:35(NumPyPrinter) + 1 0.000 0.000 0.000 0.000 windows_support.py:1() + 29 0.000 0.000 0.000 0.000 config.py:811(inner) + 1 0.000 0.000 0.000 0.000 synchronize.py:182(Lock) + 1 0.000 0.000 0.000 0.000 _graph.py:17(Graph) + 1 0.000 0.000 0.000 0.000 dot.py:1() + 1 0.000 0.000 0.000 0.000 polygon.py:25(Polygon) + 1 0.000 0.000 0.000 0.000 _pyio.py:861(seekable) + 1 0.000 0.000 0.000 0.000 multigraph.py:14(MultiGraph) + 1 0.000 0.000 0.000 0.000 deutils.py:1() + 1 0.000 0.000 0.000 0.000 message.py:409(__getitem__) + 3 0.000 0.000 0.000 0.000 __init__.py:1646(addHandler) + 2 0.000 0.000 0.000 0.000 _dill.py:183(__init__) + 45 0.000 0.000 0.000 0.000 {method 'pop' of 'set' objects} + 1 0.000 0.000 0.000 0.000 reduce.py:1() + 1 0.000 0.000 0.000 0.000 products.py:17(Product) + 1 0.000 0.000 0.000 0.000 reductions.py:52(__init__) + 1 0.000 0.000 0.000 0.000 unicode.py:31(unicode_set) + 1 0.000 0.000 0.000 0.000 embedding_ops.py:11(EmbeddingPackedParams) + 11 0.000 0.000 0.000 0.000 doctest.py:132(register_optionflag) + 1 0.000 0.000 0.000 0.000 pareto.py:9(Pareto) + 20 0.000 0.000 0.000 0.000 :260(__init__) + 1 0.000 0.000 0.000 0.000 datetimelike.py:1726(DatelikeOps) + 15 0.000 0.000 0.000 0.000 _internal.py:917(npy_ctypes_check) + 10 0.000 0.000 0.000 0.000 reportviews.py:185(__iter__) + 1 0.000 0.000 0.000 0.000 nonisomorphic_trees.py:1() + 16 0.000 0.000 0.000 0.000 DiscreteFactor.py:115(scope) + 1 0.000 0.000 0.000 0.000 function.py:517(once_differentiable) + 43 0.000 0.000 0.000 0.000 _dill.py:445(proxy) + 1 0.000 0.000 0.000 0.000 _script.py:562(RecursiveScriptModule) + 1 0.000 0.000 0.000 0.000 _base.py:523(BaseExcelReader) + 1 0.000 0.000 0.000 0.000 tzfile.py:1() + 7 0.000 0.000 0.000 0.000 core.py:2544(_arraymethod) + 1 0.000 0.000 0.000 0.000 typing.py:1595() + 1 0.000 0.000 0.000 0.000 loss.py:1498(TripletMarginWithDistanceLoss) + 54 0.000 0.000 0.000 0.000 {built-in method _stat.S_ISLNK} + 1 0.000 0.000 0.000 0.000 spectral.py:1() + 1 0.000 0.000 0.000 0.000 theta.py:1() + 1 0.000 0.000 0.000 0.000 vitality.py:1() + 1 0.000 0.000 0.000 0.000 tz.py:482(_set_tzdata) + 38 0.000 0.000 0.000 0.000 observer.py:53(__init__) + 32 0.000 0.000 0.000 0.000 fromnumeric.py:2950(_prod_dispatcher) + 1 0.000 0.000 0.000 0.000 random.py:103(Random) + 1 0.000 0.000 0.000 0.000 cmd.py:17(Command) + 1 0.000 0.000 0.000 0.000 _multivariate.py:5085(random_table_gen) + 8 0.000 0.000 0.000 0.000 parallel.py:371(__init__) + 1 0.000 0.000 0.000 0.000 graphical.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:1803(LoggerAdapter) + 1 0.000 0.000 0.000 0.000 polyclasses.py:1535(ANP) + 16 0.000 0.000 0.000 0.000 {method 'round' of 'numpy.ndarray' objects} + 1 0.000 0.000 0.000 0.000 discovery.py:92(_Finder) + 77 0.000 0.000 0.000 0.000 signal.py:16() + 1 0.000 0.000 0.000 0.000 hashing.py:47(Hasher) + 1 0.000 0.000 0.000 0.000 indexed.py:365(IndexedBase) + 1 0.000 0.000 0.000 0.000 DynamicBayesianNetwork.py:70(DynamicBayesianNetwork) + 1 0.000 0.000 0.000 0.000 sparse.py:21(SparseRepMatrix) + 1 0.000 0.000 0.000 0.000 decorator.py:80(conserve_mpmath_dps) + 8 0.000 0.000 0.000 0.000 typing.py:2220(runtime_checkable) + 4 0.000 0.000 0.000 0.000 {built-in method numpy.asanyarray} + 3 0.000 0.000 0.000 0.000 numerictypes.py:228(obj2sctype) + 5 0.000 0.000 0.000 0.000 __init__.py:10(set_module) + 1 0.000 0.000 0.000 0.000 hermite.py:1658(Hermite) + 1 0.000 0.000 0.000 0.000 tasks.py:78(Task) + 28 0.000 0.000 0.000 0.000 _decorator.py:14(__init__) + 1 0.000 0.000 0.000 0.000 dataclasses.py:1233(fields) + 1 0.000 0.000 0.000 0.000 functional_modules.py:9(FloatFunctional) + 11 0.000 0.000 0.000 0.000 eigen.py:41(defun) + 1 0.000 0.000 0.000 0.000 ctx_iv.py:386(_set_prec) + 1 0.000 0.000 0.000 0.000 line.py:1581(Segment) + 1 0.000 0.000 0.000 0.000 laguerre.py:1606(Laguerre) + 6 0.000 0.000 0.000 0.000 six.py:131(__init__) + 1 0.000 0.000 0.000 0.000 bessel.py:984(hn2) + 1 0.000 0.000 0.000 0.000 sudoku.py:1() + 1 0.000 0.000 0.000 0.000 repr.py:17(ReprPrinter) + 1 0.000 0.000 0.000 0.000 {built-in method builtins.print} + 8 0.000 0.000 0.000 0.000 types.py:77(resolve_bases) + 1 0.000 0.000 0.000 0.000 expat.py:1() + 1 0.000 0.000 0.000 0.000 interval_graph.py:1() + 1 0.000 0.000 0.000 0.000 _tool.py:12(Tool) + 1 0.000 0.000 0.000 0.000 utils.py:17(LinearBlockSparsePattern) + 1 0.000 0.000 0.000 0.000 julia.py:46(JuliaCodePrinter) + 1 0.000 0.000 0.000 0.000 digraph.py:404(pred) + 1 0.000 0.000 0.000 0.000 ipaddress.py:1135(_BaseV4) + 1 0.000 0.000 0.000 0.000 pytables.py:2598(Fixed) + 3 0.000 0.000 0.000 0.000 __init__.py:1997(has_metadata) + 1 0.000 0.000 0.000 0.000 filesystem.py:246(__init__) + 6 0.000 0.000 0.000 0.000 ctx_mp_python.py:82(mpf_convert_arg) + 64 0.000 0.000 0.000 0.000 {method 'start' of 're.Match' objects} + 23 0.000 0.000 0.000 0.000 overrides.py:217(array_function_from_dispatcher) + 1 0.000 0.000 0.000 0.000 dirichlet.py:30(Dirichlet) + 2 0.000 0.000 0.000 0.000 warnings.py:466(__enter__) + 1 0.000 0.000 0.000 0.000 ctx_mp_python.py:163(__neg__) + 1 0.000 0.000 0.000 0.000 pkgdata.py:1() + 1 0.000 0.000 0.000 0.000 threading.py:838(Thread) + 8 0.000 0.000 0.000 0.000 _parallel_backends.py:615(__init__) + 1 0.000 0.000 0.000 0.000 _constraints.py:18(NonlinearConstraint) + 2 0.000 0.000 0.000 0.000 reprlib.py:12(decorating_function) + 1 0.000 0.000 0.000 0.000 sample.py:1() + 1 0.000 0.000 0.000 0.000 core.py:2354(Keyword) + 1 0.000 0.000 0.000 0.000 complexfield.py:12(ComplexField) + 1 0.000 0.000 0.000 0.000 ordered_set.py:42(OrderedSet) + 52 0.000 0.000 0.000 0.000 distance.py:1943() + 1 0.000 0.000 0.000 0.000 numpy.py:9() + 1 0.000 0.000 0.000 0.000 modules.py:1102(SubModulePolyRing) + 1 0.000 0.000 0.000 0.000 __init__.py:1482(NullProvider) + 13 0.000 0.000 0.000 0.000 mixins.py:36(_inplace_binary_method) + 11 0.000 0.000 0.000 0.000 dataclasses.py:846() + 1 0.000 0.000 0.000 0.000 _differentialevolution.py:402(DifferentialEvolutionSolver) + 16 0.000 0.000 0.000 0.000 take.py:349(_view_wrapper) + 1 0.000 0.000 0.000 0.000 __init__.py:979(ComplexFloatStorage) + 34 0.000 0.000 0.000 0.000 reportviews.py:205(__call__) + 1 0.000 0.000 0.000 0.000 {built-in method torch._C._distributed_c10d.set_debug_level_from_env} + 15 0.000 0.000 0.000 0.000 {method 'cast' of 'memoryview' objects} + 1 0.000 0.000 0.000 0.000 branchings.py:852(Partition) + 1 0.000 0.000 0.000 0.000 residues.py:1() + 34 0.000 0.000 0.000 0.000 discovery.py:252() + 1 0.000 0.000 0.000 0.000 rationalfield.py:14(RationalField) + 1 0.000 0.000 0.000 0.000 line.py:48(LinearEntity) + 1 0.000 0.000 0.000 0.000 __init__.py:98() + 1 0.000 0.000 0.000 0.000 shared_docs.py:1() + 1 0.000 0.000 0.000 0.000 linear.py:99(Linear) + 1 0.000 0.000 0.000 0.000 harmonic.py:1() + 1 0.000 0.000 0.000 0.000 pydoc.py:1159(TextDoc) + 2 0.000 0.000 0.000 0.000 _pyio.py:1297(flush) + 1 0.000 0.000 0.000 0.000 spectrum.py:1() + 1 0.000 0.000 0.000 0.000 degree_seq.py:750(DegreeSequenceRandomGraph) + 21 0.000 0.000 0.000 0.000 utils.py:138(__init__) + 1 0.000 0.000 0.000 0.000 conv.py:675(ConvTranspose1d) + 2 0.000 0.000 0.000 0.000 :1081(__subclasshook__) + 1 0.000 0.000 0.000 0.000 pooling.py:564(AvgPool2d) + 1 0.000 0.000 0.000 0.000 sharing.py:144(einsum_cache_wrap) + 1 0.000 0.000 0.000 0.000 datapipe.py:212(MapDataPipe) + 1 0.000 0.000 0.000 0.000 spss.py:1() + 1 0.000 0.000 0.000 0.000 _tzpath.py:31(_parse_python_tzpath) + 3 0.000 0.000 0.000 0.000 __init__.py:754(__init__) + 1 0.000 0.000 0.000 0.000 string_.py:219(StringArray) + 2 0.000 0.000 0.000 0.000 core.py:4862(_generateDefaultName) + 1 0.000 0.000 0.000 0.000 discovery.py:298(ConfigDiscovery) + 1 0.000 0.000 0.000 0.000 matexpr.py:731(_LeftRightArgs) + 1 0.000 0.000 0.000 0.000 _data.py:19(_data_matrix) + 7 0.000 0.000 0.000 0.000 decorator.py:127(doctest_depends_on) + 1 0.000 0.000 0.000 0.000 functools.py:423(pass_none) + 1 0.000 0.000 0.000 0.000 functions.py:3(SpecialFunctions) + 1 0.000 0.000 0.000 0.000 profiler_util.py:352(FormattedTimesMixin) + 25 0.000 0.000 0.000 0.000 ipaddress.py:415(_check_int_address) + 1 0.000 0.000 0.000 0.000 queues.py:21(Queue) + 2 0.000 0.000 0.000 0.000 sysconfig.py:311(get_default_scheme) + 2 0.000 0.000 0.000 0.000 core.py:3379(_generateDefaultName) + 1 0.000 0.000 0.000 0.000 _memory_viz.py:104(_format_size) + 1 0.000 0.000 0.000 0.000 hybrid.py:1() + 18 0.000 0.000 0.000 0.000 contextlib.py:434(__exit__) + 26 0.000 0.000 0.000 0.000 {method 'index' of 'list' objects} + 15 0.000 0.000 0.000 0.000 {built-in method builtins.round} + 31 0.000 0.000 0.000 0.000 {method 'issuperset' of 'frozenset' objects} + 1 0.000 0.000 0.000 0.000 hdfs.py:29(HadoopFileSystem) + 1 0.000 0.000 0.000 0.000 DAG.py:13(DAG) + 1 0.000 0.000 0.000 0.000 minimize_trustregion_constr.py:38(LagrangianHessian) + 104 0.000 0.000 0.000 0.000 {method 'popleft' of 'collections.deque' objects} + 4 0.000 0.000 0.000 0.000 gaussiandomains.py:54(__neg__) + 1 0.000 0.000 0.000 0.000 DynamicBayesianNetwork.py:16(DynamicNode) + 1 0.000 0.000 0.000 0.000 algebraicfield.py:14(AlgebraicField) + 1 0.000 0.000 0.000 0.000 _replacement.py:16(Replacement) + 7 0.000 0.000 0.000 0.000 graph.py:57(_register_custom_builtin) + 1 0.000 0.000 0.000 0.000 msvc.py:557(SystemInfo) + 1 0.000 0.000 0.000 0.000 abc.py:14(ResourceReader) + 1 0.000 0.000 0.000 0.000 experimental_lambdify.py:204(Lambdifier) + 16 0.000 0.000 0.000 0.000 {method '__enter__' of '_thread.RLock' objects} + 29 0.000 0.000 0.000 0.000 typing.py:2876() + 1 0.000 0.000 0.000 0.000 mst.py:977(Partition) + 8 0.000 0.000 0.000 0.000 coreviews.py:49(__iter__) + 1 0.000 0.000 0.000 0.000 base.py:214(_maybe_return_indexers) + 1 0.000 0.000 0.000 0.000 _ops.py:597(__init__) + 1 0.000 0.000 0.000 0.000 frequencies.py:205(_FrequencyInferer) + 22 0.000 0.000 0.000 0.000 decorator.py:195() + 1 0.000 0.000 0.000 0.000 _policybase.py:112(Policy) + 1 0.000 0.000 0.000 0.000 client.py:108() + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_md5} + 1 0.000 0.000 0.000 0.000 array_manager.py:1193(SingleArrayManager) + 1 0.000 0.000 0.000 0.000 normal.py:12(Normal) + 1 0.000 0.000 0.000 0.000 remote_device.py:6(_remote_device) + 24 0.000 0.000 0.000 0.000 sympify.py:74() + 70 0.000 0.000 0.000 0.000 _jit_internal.py:1091(__getitem__) + 1 0.000 0.000 0.000 0.000 debug.py:1() + 1 0.000 0.000 0.000 0.000 core.py:1329(make_mask_descr) + 1 0.000 0.000 0.000 0.000 bessel.py:928(hn1) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.uint8} + 1 0.000 0.000 0.000 0.000 edmondskarp.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:94(is_available) + 1 0.000 0.000 0.000 0.000 relabel.py:1() + 2 0.000 0.000 0.000 0.000 __init__.py:5(VendorImporter) + 2 0.000 0.000 0.000 0.000 pythonmpq.py:57(__new__) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:280(__init__) + 1 0.000 0.000 0.000 0.000 rk.py:393(DOP853) + 1 0.000 0.000 0.000 0.000 rnn.py:111(RNNCell) + 1 0.000 0.000 0.000 0.000 relativedelta.py:18(relativedelta) + 1 0.000 0.000 0.000 0.000 one_hot_categorical.py:8(OneHotCategorical) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:4160(invgauss_gen) + 2 0.000 0.000 0.000 0.000 _tokenizer.py:16(ParserSyntaxError) + 1 0.000 0.000 0.000 0.000 _configuration_override.py:16(ConfigurationOverride) + 1 0.000 0.000 0.000 0.000 util.py:12(__config_flags) + 1 0.000 0.000 0.000 0.000 mathematica.py:122(MCodePrinter) + 1 0.000 0.000 0.000 0.000 _kde.py:40(gaussian_kde) + 1 0.000 0.000 0.000 0.000 textplot.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:1327(_TorchCompileInductorWrapper) + 5 0.000 0.000 0.000 0.000 core.py:5721(token_map) + 10 0.000 0.000 0.000 0.000 _text.py:90(lower) + 1 0.000 0.000 0.000 0.000 profiler_legacy.py:18(profile) + 1 0.000 0.000 0.000 0.000 neighbor_degree.py:1() + 1 0.000 0.000 0.000 0.000 case.py:243(_AssertRaisesContext) + 1 0.000 0.000 0.000 0.000 linear.py:67(Linear) + 8 0.000 0.000 0.000 0.000 relativedelta.py:13() + 2 0.000 0.000 0.000 0.000 functools.py:101(method_cache) + 1 0.000 0.000 0.000 0.000 file_util.py:1() + 43 0.000 0.000 0.000 0.000 _dill.py:443(register) + 21 0.000 0.000 0.000 0.000 _testutils.py:26(__init__) + 1 0.000 0.000 0.000 0.000 difflib.py:44(SequenceMatcher) + 1 0.000 0.000 0.000 0.000 info.py:367(BaseInfo) + 1 0.000 0.000 0.000 0.000 cytoscape.py:1() + 1 0.000 0.000 0.000 0.000 plane.py:27(Plane) + 1 0.000 0.000 0.000 0.000 polygon.py:1412(RegularPolygon) + 1 0.000 0.000 0.000 0.000 embedding_ops.py:195(EmbeddingBag) + 7 0.000 0.000 0.000 0.000 fractions.py:277(_operator_fallbacks) + 1 0.000 0.000 0.000 0.000 core.py:3045(QuotedString) + 1 0.000 0.000 0.000 0.000 point.py:1072(Point3D) + 1 0.000 0.000 0.000 0.000 fourier.py:124(FourierSeries) + 1 0.000 0.000 0.000 0.000 _infra.py:272() + 1 0.000 0.000 0.000 0.000 fancysets.py:518(Range) + 1 0.000 0.000 0.000 0.000 _type_aliases.py:41() + 1 0.000 0.000 0.000 0.000 __init__.py:896(MetadataPathFinder) + 8 0.000 0.000 0.000 0.000 _apply_pyprojecttoml.py:288(_attrgetter) + 5 0.000 0.000 0.000 0.000 datetime.py:528(_check_time_fields) + 12 0.000 0.000 0.000 0.000 domain.py:371(new) + 1 0.000 0.000 0.000 0.000 cse_opts.py:1() + 31 0.000 0.000 0.000 0.000 typing.py:2040() + 1 0.000 0.000 0.000 0.000 _stack.py:16(Stack) + 1 0.000 0.000 0.000 0.000 symbol.py:340(_hashable_content) + 1 0.000 0.000 0.000 0.000 sslproto.py:78(_SSLProtocolTransport) + 1 0.000 0.000 0.000 0.000 dir_util.py:1() + 1 0.000 0.000 0.000 0.000 complexes.py:20(re) + 1 0.000 0.000 0.000 0.000 profiler_util.py:385(FunctionEvent) + 1 0.000 0.000 0.000 0.000 expanders.py:1() + 41 0.000 0.000 0.000 0.000 __init__.py:534() + 45 0.000 0.000 0.000 0.000 ctx_iv.py:394() + 1 0.000 0.000 0.000 0.000 mincost.py:1() + 1 0.000 0.000 0.000 0.000 _interpolate.py:1478(BPoly) + 1 0.000 0.000 0.000 0.000 edgedfs.py:1() + 1 0.000 0.000 0.000 0.000 ElementTree.py:125(Element) + 1 0.000 0.000 0.000 0.000 numbers.py:294(Integral) + 2 0.000 0.000 0.000 0.000 _pyio.py:1248(__init__) + 1 0.000 0.000 0.000 0.000 mask_ops.py:1() + 1 0.000 0.000 0.000 0.000 error_functions.py:1794(Si) + 1 0.000 0.000 0.000 0.000 special.py:181(__new__) + 1 0.000 0.000 0.000 0.000 pooling.py:643(AvgPool3d) + 1 0.000 0.000 0.000 0.000 repmatrix.py:317(MutableRepMatrix) + 58 0.000 0.000 0.000 0.000 _utils.py:770(__init__) + 1 0.000 0.000 0.000 0.000 socket.py:214(socket) + 1 0.000 0.000 0.000 0.000 blockmatrix.py:25(BlockMatrix) + 78 0.000 0.000 0.000 0.000 signal.py:21() + 18 0.000 0.000 0.000 0.000 {method 'split' of 'bytes' objects} + 10 0.000 0.000 0.000 0.000 coreviews.py:43(__init__) + 1 0.000 0.000 0.000 0.000 autonotebook.py:1() + 1 0.000 0.000 0.000 0.000 _builtins.py:114(_gen_torch_functional_registered_ops) + 1 0.000 0.000 0.000 0.000 hierarchy.py:1() + 1 0.000 0.000 0.000 0.000 operator_support.py:177(OpSupports) + 1 0.000 0.000 0.000 0.000 pooling.py:874(_LPPoolNd) + 1 0.000 0.000 0.000 0.000 python_parser.py:60(PythonParser) + 1 0.000 0.000 0.000 0.000 laplacian.py:1() + 2 0.000 0.000 0.000 0.000 __init__.py:428(Stripper) + 32 0.000 0.000 0.000 0.000 decorators.py:198(__init__) + 1 0.000 0.000 0.000 0.000 matrices.py:372(MatrixEigen) + 36 0.000 0.000 0.000 0.000 _pytree.py:56(_list_flatten) + 1 0.000 0.000 0.000 0.000 coroutines.py:1() + 1 0.000 0.000 0.000 0.000 dispatcher.py:89(Dispatcher) + 1 0.000 0.000 0.000 0.000 swa_utils.py:200(SWALR) + 1 0.000 0.000 0.000 0.000 backports.py:73(LooseVersion) + 1 0.000 0.000 0.000 0.000 graph_hashing.py:1() + 1 0.000 0.000 0.000 0.000 _stdlib.py:1() + 1 0.000 0.000 0.000 0.000 {built-in method posix.scandir} + 1 0.000 0.000 0.000 0.000 base64mime.py:1() + 1 0.000 0.000 0.000 0.000 rootoftools.py:1043(RootSum) + 1 0.000 0.000 0.000 0.000 internal.py:30(_InternalRPCPickler) + 1 0.000 0.000 0.000 0.000 _symbolic_trace.py:994(wrap) + 1 0.000 0.000 0.000 0.000 date_converters.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:1067(StreamHandler) + 1 0.000 0.000 0.000 0.000 common.py:780(MatrixSpecial) + 4 0.000 0.000 0.000 0.000 kind.py:75(__new__) + 1 0.000 0.000 0.000 0.000 gaussiandomains.py:14(GaussianElement) + 1 0.000 0.000 0.000 0.000 _decomp_qr.py:1() + 1 0.000 0.000 0.000 0.000 bdb.py:17(Bdb) + 6 0.000 0.000 0.000 0.000 connection.py:117(__init__) + 1 0.000 0.000 0.000 0.000 cnf.py:273(CNF) + 1 0.000 0.000 0.000 0.000 SEM.py:16(SEMGraph) + 1 0.000 0.000 0.000 0.000 hyper.py:75(hyper) + 1 0.000 0.000 0.000 0.000 maple.py:84(MapleCodePrinter) + 1 0.000 0.000 0.000 0.000 canonical_constraint.py:5(CanonicalConstraint) + 1 0.000 0.000 0.000 0.000 ctx_iv.py:38(ivmpf) + 1 0.000 0.000 0.000 0.000 times.py:1() + 2 0.000 0.000 0.000 0.000 numbers.py:257() + 1 0.000 0.000 0.000 0.000 _log.py:1() + 1 0.000 0.000 0.000 0.000 pycode.py:675() + 1 0.000 0.000 0.000 0.000 boolean.py:233(BooleanArray) + 5 0.000 0.000 0.000 0.000 datapipe.py:265(register_datapipe_as_function) + 1 0.000 0.000 0.000 0.000 graphmatrix.py:1() + 1 0.000 0.000 0.000 0.000 complexes.py:446(Abs) + 1 0.000 0.000 0.000 0.000 _artifact_change.py:16(ArtifactChange) + 4 0.000 0.000 0.000 0.000 libmpf.py:1313(from_str) + 1 0.000 0.000 0.000 0.000 datetime.py:1315(time) + 1 0.000 0.000 0.000 0.000 tz.py:381(__init__) + 5 0.000 0.000 0.000 0.000 _pyio.py:423(__del__) + 1 0.000 0.000 0.000 0.000 factor_.py:1905(totient) + 5 0.000 0.000 0.000 0.000 cache.py:153(cached_property) + 1 0.000 0.000 0.000 0.000 rnn.py:178(LSTMCell) + 2 0.000 0.000 0.000 0.000 _structures.py:35(NegativeInfinityType) + 1 0.000 0.000 0.000 0.000 ctx_mp_python.py:583(PythonMPContext) + 1 0.000 0.000 0.000 0.000 integers.py:422(frac) + 1 0.000 0.000 0.000 0.000 observer.py:1365(RecordingObserver) + 1 0.000 0.000 0.000 0.000 conv.py:765(ConvTranspose2d) + 1 0.000 0.000 0.000 0.000 polytools.py:6943(GroebnerBasis) + 2 0.000 0.000 0.000 0.000 results.py:436() + 6 0.000 0.000 0.000 0.000 _exceptions.py:17(_display_as_base) + 1 0.000 0.000 0.000 0.000 _cloudpickle_wrapper.py:1() + 2 0.000 0.000 0.000 0.000 _dill.py:1200() + 1 0.000 0.000 0.000 0.000 _store_backends.py:33(StoreBackendBase) + 1 0.000 0.000 0.000 0.000 __init__.py:216() + 1 0.000 0.000 0.000 0.000 gexf.py:179(GEXF) + 3 0.000 0.000 0.000 0.000 {built-in method posix.putenv} + 7 0.000 0.000 0.000 0.000 __init__.py:788(__new__) + 4 0.000 0.000 0.000 0.000 serialization.py:90(register_package) + 1 0.000 0.000 0.000 0.000 _pyio.py:2185(flush) + 1 0.000 0.000 0.000 0.000 assume.py:225(Predicate) + 1 0.000 0.000 0.000 0.000 _special_matrices.py:1() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:6379(nakagami_gen) + 15 0.000 0.000 0.000 0.000 _jit_internal.py:747(_copy_to_script_wrapper) + 1 0.000 0.000 0.000 0.000 frozen.py:21(FrozenList) + 1 0.000 0.000 0.000 0.000 logic.py:223(Logic) + 1 0.000 0.000 0.000 0.000 tz.py:1545(__init__) + 2 0.000 0.000 0.000 0.000 _structures.py:6(InfinityType) + 1 0.000 0.000 0.000 0.000 factorials.py:35(factorial) + 1 0.000 0.000 0.000 0.000 report.py:6(ReportBase) + 1 0.000 0.000 0.000 0.000 conv.py:382(Conv2d) + 9 0.000 0.000 0.000 0.000 {method 'intersection' of 'set' objects} + 1 0.000 0.000 0.000 0.000 ctx_mp_python.py:359(_mpc) + 1 0.000 0.000 0.000 0.000 dataframe_protocol.py:172(Column) + 24 0.000 0.000 0.000 0.000 function.py:44(__init__) + 1 0.000 0.000 0.000 0.000 sparse.py:49(EmbeddingBag) + 1 0.000 0.000 0.000 0.000 gammazeta.py:394(bernoulli_size) + 47 0.000 0.000 0.000 0.000 _pyio.py:493(closed) + 1 0.000 0.000 0.000 0.000 _reduction.py:1() + 2 0.000 0.000 0.000 0.000 six.py:119(_resolve) + 1 0.000 0.000 0.000 0.000 process.py:399(__init__) + 1 0.000 0.000 0.000 0.000 message.py:972(MIMEPart) + 1 0.000 0.000 0.000 0.000 dataframe_wrapper.py:23(PandasWrapper) + 1 0.000 0.000 0.000 0.000 expr.py:757(PandasExprVisitor) + 1 0.000 0.000 0.000 0.000 gmpyrationalfield.py:12(GMPYRationalField) + 5 0.000 0.000 0.000 0.000 {method 'count' of 'str' objects} + 1 0.000 0.000 0.000 0.000 feedparser.py:197(_new_message) + 1 0.000 0.000 0.000 0.000 core.py:5117(Forward) + 1 0.000 0.000 0.000 0.000 __init__.py:236(SymInt) + 2 0.000 0.000 0.000 0.000 context.py:127(ExceptionTrap) + 2 0.000 0.000 0.000 0.000 {built-in method _functools.reduce} + 1 0.000 0.000 0.000 0.000 parse.py:152(_NetlocResultMixinBase) + 1 0.000 0.000 0.000 0.000 exponential.py:10(Exponential) + 1 0.000 0.000 0.000 0.000 algorithms.py:1263(SelectN) + 1 0.000 0.000 0.000 0.000 glsl.py:29(GLSLPrinter) + 13 0.000 0.000 0.000 0.000 _conversions.py:38(_make_conversion_method) + 1 0.000 0.000 0.000 0.000 linear.py:12(Linear) + 2 0.000 0.000 0.000 0.000 _parser.py:1006(addgroup) + 1 0.000 0.000 0.000 0.000 pycode.py:85() + 20 0.000 0.000 0.000 0.000 config.py:849(inner) + 1 0.000 0.000 0.000 0.000 ipaddress.py:383(_IPAddressBase) + 1 0.000 0.000 0.000 0.000 _xlwt.py:30(XlwtWriter) + 1 0.000 0.000 0.000 0.000 _trustregion_exact.py:186(IterativeSubproblem) + 1 0.000 0.000 0.000 0.000 __init__.py:181(LegacyVersion) + 33 0.000 0.000 0.000 0.000 core.py:4099() + 10 0.000 0.000 0.000 0.000 _policybase.py:104() + 1 0.000 0.000 0.000 0.000 resource_tracker.py:358() + 1 0.000 0.000 0.000 0.000 threading.py:389(notify_all) + 1 0.000 0.000 0.000 0.000 core.py:89(__compat__) + 1 0.000 0.000 0.000 0.000 adaptive.py:19(AdaptiveLogSoftmaxWithLoss) + 1 0.000 0.000 0.000 0.000 ctx_iv.py:145(__neg__) + 1 0.000 0.000 0.000 0.000 boolalg.py:463(BooleanFunction) + 14 0.000 0.000 0.000 0.000 extension.py:113(inherit_names) + 1 0.000 0.000 0.000 0.000 _interface.py:53(LinearOperator) + 5 0.000 0.000 0.000 0.000 ctx_iv.py:244(_binary_op) + 1 0.000 0.000 0.000 0.000 random.py:800(getrandbits) + 1 0.000 0.000 0.000 0.000 _distn_infrastructure.py:3036(rv_discrete) + 1 0.000 0.000 0.000 0.000 indexed.py:124(Indexed) + 1 0.000 0.000 0.000 0.000 polynomialring.py:10(PolynomialRing) + 1 0.000 0.000 0.000 0.000 _property_bag.py:10(PropertyBag) + 1 0.000 0.000 0.000 0.000 request.py:1694(URLopener) + 1 0.000 0.000 0.000 0.000 special.py:75(__new__) + 8 0.000 0.000 0.000 0.000 core.py:4773(stopOn) + 1 0.000 0.000 0.000 0.000 file_structure_representation.py:9(Directory) + 1 0.000 0.000 0.000 0.000 platform.py:1134(python_version_tuple) + 1 0.000 0.000 0.000 0.000 _digraph.py:5(DiGraph) + 1 0.000 0.000 0.000 0.000 fractionfield.py:9(FractionField) + 1 0.000 0.000 0.000 0.000 core.py:1315(_replace_dtype_fields) + 1 0.000 0.000 0.000 0.000 expr.py:783(Expr) + 17 0.000 0.000 0.000 0.000 ctx_fp.py:28() + 1 0.000 0.000 0.000 0.000 _interpolate.py:385(interp1d) + 5 0.000 0.000 0.000 0.000 pretty_symbology.py:171() + 1 0.000 0.000 0.000 0.000 __init__.py:869(ByteStorage) + 1 0.000 0.000 0.000 0.000 matrices.py:101(MatrixDeterminant) + 1 0.000 0.000 0.000 0.000 integers.py:22(RoundFunction) + 1 0.000 0.000 0.000 0.000 join.py:43(Joinable) + 1 0.000 0.000 0.000 0.000 quasirandom.py:5(SobolEngine) + 1 0.000 0.000 0.000 0.000 ordinals.py:273(__new__) + 1 0.000 0.000 0.000 0.000 quantile.py:1() + 5 0.000 0.000 0.000 0.000 __init__.py:20(is_available) + 1 0.000 0.000 0.000 0.000 _finite_differences.py:1() + 2 0.000 0.000 0.000 0.000 kind.py:266(register) + 1 0.000 0.000 0.000 0.000 graphs.py:40(CUDAGraph) + 1 0.000 0.000 0.000 0.000 _special_locations.py:15(SpecialLocations) + 1 0.000 0.000 0.000 0.000 ElementTree.py:1767(C14NWriterTarget) + 1 0.000 0.000 0.000 0.000 printer.py:235(Printer) + 1 0.000 0.000 0.000 0.000 calculus.py:5(MatrixCalculusMethods) + 1 0.000 0.000 0.000 0.000 core.py:6517(MaskedConstant) + 1 0.000 0.000 0.000 0.000 _ufunc_config.py:441(_setdef) + 1 0.000 0.000 0.000 0.000 common.py:89(MatrixShaping) + 1 0.000 0.000 0.000 0.000 ctx_iv.py:151(ivmpc) + 1 0.000 0.000 0.000 0.000 special.py:104(Identity) + 1 0.000 0.000 0.000 0.000 unary.py:75() + 2 0.000 0.000 0.000 0.000 textwrap.py:176() + 1 0.000 0.000 0.000 0.000 factorials.py:819(binomial) + 1 0.000 0.000 0.000 0.000 core.py:4866(ZeroOrMore) + 1 0.000 0.000 0.000 0.000 qfunctions.py:1() + 1 0.000 0.000 0.000 0.000 base.py:36(DataManager) + 1 0.000 0.000 0.000 0.000 profiler.py:59(profile) + 1 0.000 0.000 0.000 0.000 delta_functions.py:17(DiracDelta) + 1 0.000 0.000 0.000 0.000 fields.py:286(FracElement) + 1 0.000 0.000 0.000 0.000 _store_backends.py:138(StoreBackendMixin) + 2 0.000 0.000 0.000 0.000 config.py:650(_warn_if_deprecated) + 7 0.000 0.000 0.000 0.000 pathlib.py:515(_from_parsed_parts) + 16 0.000 0.000 0.000 0.000 _pep440.py:301() + 1 0.000 0.000 0.000 0.000 exprtools.py:295(Factors) + 1 0.000 0.000 0.000 0.000 _covariance.py:11(Covariance) + 1 0.000 0.000 0.000 0.000 _multivariate.py:1742(wishart_gen) + 1 0.000 0.000 0.000 0.000 conv.py:617(_ConvTransposeNd) + 1 0.000 0.000 0.000 0.000 trsock.py:4(TransportSocket) + 1 0.000 0.000 0.000 0.000 sets.py:1264(Union) + 1 0.000 0.000 0.000 0.000 realfield.py:12(RealField) + 1 0.000 0.000 0.000 0.000 rcode.py:76(RCodePrinter) + 1 0.000 0.000 0.000 0.000 helpers.py:15() + 4 0.000 0.000 0.000 0.000 getlimits.py:679(min) + 1 0.000 0.000 0.000 0.000 std.py:66(TRLock) + 1 0.000 0.000 0.000 0.000 polygon.py:2045(Triangle) + 1 0.000 0.000 0.000 0.000 fancysets.py:290(ImageSet) + 1 0.000 0.000 0.000 0.000 boolean.py:40(BooleanDtype) + 1 0.000 0.000 0.000 0.000 datetime.py:573(timedelta) + 1 0.000 0.000 0.000 0.000 windows_support.py:4(windows_only) + 1 0.000 0.000 0.000 0.000 conv.py:272(Conv1d) + 1 0.000 0.000 0.000 0.000 {built-in method mkl._py_mkl_service.get_version} + 1 0.000 0.000 0.000 0.000 rolling.py:1380(RollingAndExpandingMixin) + 4 0.000 0.000 0.000 0.000 pretty_symbology.py:233() + 1 0.000 0.000 0.000 0.000 numeric.py:47(NumericDtype) + 21 0.000 0.000 0.000 0.000 _script.py:940(_make_fail) + 1 0.000 0.000 0.000 0.000 hyper.py:358(meijerg) + 1 0.000 0.000 0.000 0.000 arrayprint.py:905(FloatingFormat) + 1 0.000 0.000 0.000 0.000 _dill.py:398(Unpickler) + 2 0.000 0.000 0.000 0.000 _functools.py:6(method_cache) + 1 0.000 0.000 0.000 0.000 stata.py:3112(StataWriter117) + 1 0.000 0.000 0.000 0.000 conv.py:588(_ConvTransposeNd) + 1 0.000 0.000 0.000 0.000 more.py:1992(numeric_range) + 1 0.000 0.000 0.000 0.000 conv.py:39(Conv1d) + 1 0.000 0.000 0.000 0.000 compressor.py:231(BinaryZlibFile) + 1 0.000 0.000 0.000 0.000 _io.py:88(optional_args) + 1 0.000 0.000 0.000 0.000 _bsr.py:22(bsr_matrix) + 1 0.000 0.000 0.000 0.000 _common.py:595(outer) + 1 0.000 0.000 0.000 0.000 digits.py:1() + 1 0.000 0.000 0.000 0.000 utils.py:2585(_get_glibc_version) + 1 0.000 0.000 0.000 0.000 nonreduce_axis.py:1() + 10 0.000 0.000 0.000 0.000 results.py:247(__iter__) + 1 0.000 0.000 0.000 0.000 trigonometric.py:1659(ReciprocalTrigonometricFunction) + 1 0.000 0.000 0.000 0.000 bz2.py:26(BZ2File) + 1 0.000 0.000 0.000 0.000 extras.py:1519(MAxisConcatenator) + 1 0.000 0.000 0.000 0.000 ctx_iv.py:304(MPIntervalContext) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:7006(lomax_gen) + 1 0.000 0.000 0.000 0.000 is_from_package.py:1() + 1 0.000 0.000 0.000 0.000 numpy.py:451() + 1 0.000 0.000 0.000 0.000 _covariance.py:463(CovViaPrecision) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:2793(genextreme_gen) + 1 0.000 0.000 0.000 0.000 __init__.py:32(__enter__) + 1 0.000 0.000 0.000 0.000 _testutils.py:76(_TestPythranFunc) + 1 0.000 0.000 0.000 0.000 _backend.py:325(set_global_backend) + 1 0.000 0.000 0.000 0.000 _ccallback.py:26(LowLevelCallable) + 1 0.000 0.000 0.000 0.000 gamma.py:14(Gamma) + 1 0.000 0.000 0.000 0.000 gmpyintegerring.py:13(GMPYIntegerRing) + 1 0.000 0.000 0.000 0.000 modules.py:840(Submodule) + 1 0.000 0.000 0.000 0.000 upsampling.py:168(UpsamplingNearest2d) + 1 0.000 0.000 0.000 0.000 linear_relu.py:12(LinearReLU) + 1 0.000 0.000 0.000 0.000 blocks.py:1623(ExtensionBlock) + 4 0.000 0.000 0.000 0.000 _pyio.py:412(close) + 11 0.000 0.000 0.000 0.000 doccer.py:129(extend_notes_in_docstring) + 1 0.000 0.000 0.000 0.000 configparser.py:1256(SectionProxy) + 1 0.000 0.000 0.000 0.000 floating.py:14(FloatingDtype) + 1 0.000 0.000 0.000 0.000 extensions.py:11(ExtensionElement) + 1 0.000 0.000 0.000 0.000 __init__.py:1195(ResourceManager) + 1 0.000 0.000 0.000 0.000 tz.py:386(tzfile) + 1 0.000 0.000 0.000 0.000 extbuild.py:1() + 1 0.000 0.000 0.000 0.000 sets.py:1832(UniversalSet) + 1 0.000 0.000 0.000 0.000 memory_format.py:1() + 1 0.000 0.000 0.000 0.000 queues.py:35(Queue) + 1 0.000 0.000 0.000 0.000 relational.py:60(Relational) + 2 0.000 0.000 0.000 0.000 _itertools.py:1() + 1 0.000 0.000 0.000 0.000 asyncio.py:19(tqdm_asyncio) + 1 0.000 0.000 0.000 0.000 linear.py:15(Linear) + 1 0.000 0.000 0.000 0.000 common.py:1992(MatrixOperations) + 1 0.000 0.000 0.000 0.000 batchnorm.py:552(SyncBatchNorm) + 29 0.000 0.000 0.000 0.000 core.py:4098() + 1 0.000 0.000 0.000 0.000 __init__.py:83(OptEinsumModule) + 2 0.000 0.000 0.000 0.000 queue.py:206(_init) + 22 0.000 0.000 0.000 0.000 _codata.py:1568(_check_obsolete) + 1 0.000 0.000 0.000 0.000 ipaddress.py:2098(IPv6Interface) + 1 0.000 0.000 0.000 0.000 poisson.py:10(Poisson) + 1 0.000 0.000 0.000 0.000 connection.py:114(_ConnectionBase) + 6 0.000 0.000 0.000 0.000 symbolic_opset8.py:70(_apply) + 1 0.000 0.000 0.000 0.000 display.py:17(detect_console_encoding) + 10 0.000 0.000 0.000 0.000 case.py:1366(_deprecate) + 1 0.000 0.000 0.000 0.000 special.py:209(OneMatrix) + 6 0.000 0.000 0.000 0.000 libmpf.py:653(mpf_pos) + 12 0.000 0.000 0.000 0.000 period.py:104(_field_accessor) + 1 0.000 0.000 0.000 0.000 integer.py:14(IntegerDtype) + 7 0.000 0.000 0.000 0.000 _pyio.py:402(flush) + 5 0.000 0.000 0.000 0.000 pretty_symbology.py:173() + 1 0.000 0.000 0.000 0.000 core.py:2613(Word) + 16 0.000 0.000 0.000 0.000 graph.py:453(__contains__) + 1 0.000 0.000 0.000 0.000 single.py:343(NthAlgebraic) + 1 0.000 0.000 0.000 0.000 dep_util.py:1() + 1 0.000 0.000 0.000 0.000 _base.py:325(Future) + 1 0.000 0.000 0.000 0.000 pycode.py:619() + 1 0.000 0.000 0.000 0.000 grouper.py:435(Grouping) + 1 0.000 0.000 0.000 0.000 containers.py:21(Tuple) + 1 0.000 0.000 0.000 0.000 _trace.py:1202(TopLevelTracedModule) + 1 0.000 0.000 0.000 0.000 _pyio.py:1491(FileIO) + 1 0.000 0.000 0.000 0.000 _distn_infrastructure.py:433(rv_frozen) + 26 0.000 0.000 0.000 0.000 {method 'index' of 'str' objects} + 1 0.000 0.000 0.000 0.000 modules.py:204(Module) + 11 0.000 0.000 0.000 0.000 config.py:837(inner) + 51 0.000 0.000 0.000 0.000 iterables.py:870() + 1 0.000 0.000 0.000 0.000 index_tricks.py:313(AxisConcatenator) + 1 0.000 0.000 0.000 0.000 _pslinux.py:788(Connections) + 1 0.000 0.000 0.000 0.000 array_comprehension.py:10(ArrayComprehension) + 16 0.000 0.000 0.000 0.000 __init__.py:16(search_path) + 1 0.000 0.000 0.000 0.000 _odswriter.py:32(ODSWriter) + 1 0.000 0.000 0.000 0.000 numpy.py:309() + 1 0.000 0.000 0.000 0.000 base_subprocess.py:10(BaseSubprocessTransport) + 1 0.000 0.000 0.000 0.000 _inspect.py:1() + 1 0.000 0.000 0.000 0.000 quopri.py:1() + 1 0.000 0.000 0.000 0.000 popen_loky_posix.py:37(Popen) + 1 0.000 0.000 0.000 0.000 expressionrawdomain.py:12(ExpressionRawDomain) + 1 0.000 0.000 0.000 0.000 _builtins.py:120() + 1 0.000 0.000 0.000 0.000 spectral_norm.py:12(SpectralNorm) + 19 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects} + 1 0.000 0.000 0.000 0.000 hyperexpand.py:608(G_Function) + 1 0.000 0.000 0.000 0.000 special.py:10(ZeroMatrix) + 1 0.000 0.000 0.000 0.000 ideals.py:7(Ideal) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:8932(tukeylambda_gen) + 1 0.000 0.000 0.000 0.000 finitefield.py:12(FiniteField) + 2 0.000 0.000 0.000 0.000 config.py:528(deprecate_option) + 1 0.000 0.000 0.000 0.000 loader.py:66(TestLoader) + 1 0.000 0.000 0.000 0.000 cmd.py:52(Cmd) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:8655(truncnorm_gen) + 1 0.000 0.000 0.000 0.000 sharing.py:106(transpose_cache_wrap) + 1 0.000 0.000 0.000 0.000 merge.py:605(_MergeOperation) + 1 0.000 0.000 0.000 0.000 common.py:91(IOHandles) + 1 0.000 0.000 0.000 0.000 apply.py:109(Apply) + 1 0.000 0.000 0.000 0.000 _matfuncs.py:336(_ExpmPadeHelper) + 11 0.000 0.000 0.000 0.000 ctx_iv.py:293(__new__) + 1 0.000 0.000 0.000 0.000 transforms.py:70(IntegralTransform) + 1 0.000 0.000 0.000 0.000 _infra.py:266(RuleCollection) + 1 0.000 0.000 0.000 0.000 ContinuousFactor.py:10(ContinuousFactor) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:185(in_main_thread) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3832(__init__) + 1 0.000 0.000 0.000 0.000 jscode.py:44(JavascriptCodePrinter) + 1 0.000 0.000 0.000 0.000 array_manager.py:708(ArrayManager) + 5 0.000 0.000 0.000 0.000 pretty_symbology.py:177() + 1 0.000 0.000 0.000 0.000 rootisolation.py:1735(RealInterval) + 1 0.000 0.000 0.000 0.000 numbers.py:53(carmichael) + 1 0.000 0.000 0.000 0.000 FactorSet.py:8(FactorSet) + 1 0.000 0.000 0.000 0.000 __init__.py:1792(__init__) + 7 0.000 0.000 0.000 0.000 _nonlin.py:1531() + 1 0.000 0.000 0.000 0.000 error_functions.py:651(erf2) + 3 0.000 0.000 0.000 0.000 mock.py:305(__getattr__) + 1 0.000 0.000 0.000 0.000 _infra.py:309(DiagnosticOptions) + 12 0.000 0.000 0.000 0.000 {method 'popitem' of 'dict' objects} + 12 0.000 0.000 0.000 0.000 domain.py:465(of_type) + 1 0.000 0.000 0.000 0.000 iterators.py:1() + 1 0.000 0.000 0.000 0.000 conv.py:232(ConvTranspose2d) + 1 0.000 0.000 0.000 0.000 batchnorm.py:17(_NormBase) + 1 0.000 0.000 0.000 0.000 six.py:493(Module_six_moves_urllib) + 1 0.000 0.000 0.000 0.000 complexes.py:265(sign) + 1 0.000 0.000 0.000 0.000 __init__.py:443(LZ4FrameFile) + 1 0.000 0.000 0.000 0.000 _pyio.py:331(IOBase) + 1 0.000 0.000 0.000 0.000 pooling.py:249(_MaxUnpoolNd) + 21 0.000 0.000 0.000 0.000 util.py:35(implements) + 1 0.000 0.000 0.000 0.000 traceback.py:372(StackSummary) + 27 0.000 0.000 0.000 0.000 singleton.py:128(__repr__) + 1 0.000 0.000 0.000 0.000 planarity.py:253(LRPlanarity) + 1 0.000 0.000 0.000 0.000 process.py:13(LokyProcess) + 15 0.000 0.000 0.000 0.000 symbolic_opset10.py:64(_apply_params) + 29 0.000 0.000 0.000 0.000 singleton.py:174() + 1 0.000 0.000 0.000 0.000 homomorphisms.py:18(ModuleHomomorphism) + 1 0.000 0.000 0.000 0.000 _xlsxwriter.py:181(XlsxWriter) + 2 0.000 0.000 0.000 0.000 cloudpickle.py:692(_empty_cell_value) + 1 0.000 0.000 0.000 0.000 lambdarepr.py:75(NumExprPrinter) + 1 0.000 0.000 0.000 0.000 codeop.py:38() + 1 0.000 0.000 0.000 0.000 dist.py:1029(DistributionMetadata) + 1 0.000 0.000 0.000 0.000 numeric.py:368(Int64Index) + 1 0.000 0.000 0.000 0.000 unix_events.py:602(_UnixWritePipeTransport) + 1 0.000 0.000 0.000 0.000 _comparison.py:414(NonePair) + 1 0.000 0.000 0.000 0.000 spawn.py:36(set_executable) + 1 0.000 0.000 0.000 0.000 numbers.py:3043(Zero) + 1 0.000 0.000 0.000 0.000 filesystem.py:36(FileSystem) + 1 0.000 0.000 0.000 0.000 observer.py:1311(PlaceholderObserver) + 1 0.000 0.000 0.000 0.000 _storage_docs.py:12(add_docstr_all) + 1 0.000 0.000 0.000 0.000 column.py:60(PandasColumn) + 2 0.000 0.000 0.000 0.000 generic.py:12186() + 16 0.000 0.000 0.000 0.000 __init__.py:3219(_always_object) + 1 0.000 0.000 0.000 0.000 timedeltas.py:31(TimedeltaIndex) + 3 0.000 0.000 0.000 0.000 _header_value_parser.py:876(__new__) + 1 0.000 0.000 0.000 0.000 _symbolic_trace.py:900(_Patcher) + 1 0.000 0.000 0.000 0.000 threading.py:544(Event) + 1 0.000 0.000 0.000 0.000 __init__.py:1812(ZipProvider) + 1 0.000 0.000 0.000 0.000 _coo.py:22(coo_matrix) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:9724(argus_gen) + 1 0.000 0.000 0.000 0.000 core.py:4983(SkipTo) + 1 0.000 0.000 0.000 0.000 accessors.py:145(DatetimeProperties) + 2 0.000 0.000 0.000 0.000 functools.py:320(Throttler) + 1 0.000 0.000 0.000 0.000 tempfile.py:840(TemporaryDirectory) + 22 0.000 0.000 0.000 0.000 symbol.py:731() + 1 0.000 0.000 0.000 0.000 rprop.py:11(Rprop) + 1 0.000 0.000 0.000 0.000 numpy_pickle_compat.py:158(ZipNumpyUnpickler) + 1 0.000 0.000 0.000 0.000 observer.py:383(MinMaxObserver) + 1 0.000 0.000 0.000 0.000 memory.py:371(MemorizedFunc) + 1 0.000 0.000 0.000 0.000 _ops.py:238(OpOverload) + 1 0.000 0.000 0.000 0.000 BIF.py:349() + 1 0.000 0.000 0.000 0.000 events.py:98(TimerHandle) + 1 0.000 0.000 0.000 0.000 indexing.py:1437(_iLocIndexer) + 1 0.000 0.000 0.000 0.000 curve.py:22(Curve) + 1 0.000 0.000 0.000 0.000 numpy.py:312(SciPyPrinter) + 1 0.000 0.000 0.000 0.000 __init__.py:71(MkldnnModule) + 1 0.000 0.000 0.000 0.000 pydoc.py:525(__init__) + 1 0.000 0.000 0.000 0.000 arpack.py:988(IterOpInv) + 1 0.000 0.000 0.000 0.000 common.py:3212(__new__) + 1 0.000 0.000 0.000 0.000 _spherical_bessel.py:1() + 1 0.000 0.000 0.000 0.000 adamax.py:12(Adamax) + 1 0.000 0.000 0.000 0.000 doctest.py:815(DocTestFinder) + 1 0.000 0.000 0.000 0.000 _adapters.py:30(__new__) + 1 0.000 0.000 0.000 0.000 plistlib.py:173(_PlistParser) + 32 0.000 0.000 0.000 0.000 fromnumeric.py:3241(_around_dispatcher) + 2 0.000 0.000 0.000 0.000 {built-in method utcfromtimestamp} + 1 0.000 0.000 0.000 0.000 polyoptions.py:18(Option) + 1 0.000 0.000 0.000 0.000 __init__.py:873(Handler) + 1 0.000 0.000 0.000 0.000 gzip.py:121(GzipFile) + 1 0.000 0.000 0.000 0.000 sparse_ndim_array.py:11(SparseNDimArray) + 1 0.000 0.000 0.000 0.000 boolalg.py:201(BooleanAtom) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:741(Protocol) + 1 0.000 0.000 0.000 0.000 adam.py:13(Adam) + 1 0.000 0.000 0.000 0.000 _pslinux.py:355() + 1 0.000 0.000 0.000 0.000 typing_extensions.py:2876(TypeAliasType) + 1 0.000 0.000 0.000 0.000 expr_with_limits.py:199(ExprWithLimits) + 1 0.000 0.000 0.000 0.000 numpy.py:32() + 1 0.000 0.000 0.000 0.000 base.py:394(StorageExtensionDtype) + 1 0.000 0.000 0.000 0.000 _policybase.py:311(header_fetch_parse) + 1 0.000 0.000 0.000 0.000 beta_functions.py:19(beta) + 1 0.000 0.000 0.000 0.000 html.py:592(_BeautifulSoupHtml5LibFrameParser) + 1 0.000 0.000 0.000 0.000 six.py:236(create_module) + 1 0.000 0.000 0.000 0.000 core.py:3911(Or) + 1 0.000 0.000 0.000 0.000 conv.py:82(Conv2d) + 2 0.000 0.000 0.000 0.000 constraints.py:126(__call__) + 1 0.000 0.000 0.000 0.000 rnn.py:1159(LSTMCell) + 4 0.000 0.000 0.000 0.000 {built-in method _locale.setlocale} + 4 0.000 0.000 0.000 0.000 libmpf.py:574(mpf_cmp) + 1 0.000 0.000 0.000 0.000 zipfile.py:2310(Path) + 1 0.000 0.000 0.000 0.000 common.py:56(MatrixRequired) + 2 0.000 0.000 0.000 0.000 config.py:597(_get_root) + 1 0.000 0.000 0.000 0.000 hmac.py:27(HMAC) + 1 0.000 0.000 0.000 0.000 digraph.py:37(__set__) + 22 0.000 0.000 0.000 0.000 reductions.py:123(_torch_grad_reduce) + 4 0.000 0.000 0.000 0.000 {built-in method posix.register_at_fork} + 1 0.000 0.000 0.000 0.000 _qmc.py:604(QMCEngine) + 13 0.000 0.000 0.000 0.000 utils.py:34(exposed_in) + 1 0.000 0.000 0.000 0.000 :262(__subclasshook__) + 1 0.000 0.000 0.000 0.000 __init__.py:949(DoubleStorage) + 1 0.000 0.000 0.000 0.000 base.py:158(SingleDataManager) + 4 0.000 0.000 0.000 0.000 {built-in method numpy.zeros} + 1 0.000 0.000 0.000 0.000 annotations.py:41(EvalEnv) + 1 0.000 0.000 0.000 0.000 pool.py:745(ApplyResult) + 1 0.000 0.000 0.000 0.000 logger.py:23(_squeeze_time) + 1 0.000 0.000 0.000 0.000 ordinals.py:56(Ordinal) + 1 0.000 0.000 0.000 0.000 disk.py:42(memstr_to_bytes) + 1 0.000 0.000 0.000 0.000 _add_newdocs_scalars.py:54(_get_platform_and_machine) + 1 0.000 0.000 0.000 0.000 operator_support.py:27(OperatorSupportBase) + 1 0.000 0.000 0.000 0.000 pydot.py:153(frozendict) + 1 0.000 0.000 0.000 0.000 selector_events.py:752(_SelectorTransport) + 15 0.000 0.000 0.000 0.000 libelefun.py:106(def_mpf_constant) + 8 0.000 0.000 0.000 0.000 digraph.py:874(successors) + 1 0.000 0.000 0.000 0.000 argparse.py:1715(ArgumentParser) + 1 0.000 0.000 0.000 0.000 bessel.py:399(besseli) + 2 0.000 0.000 0.000 0.000 sysconfig.py:299(get_preferred_scheme) + 1 0.000 0.000 0.000 0.000 _imp.py:1() + 1 0.000 0.000 0.000 0.000 gamma_functions.py:398(uppergamma) + 1 0.000 0.000 0.000 0.000 sets.py:10(MatrixSet) + 1 0.000 0.000 0.000 0.000 _parser.py:241(parserinfo) + 1 0.000 0.000 0.000 0.000 __init__.py:1432(Logger) + 1 0.000 0.000 0.000 0.000 _csc.py:16(csc_matrix) + 1 0.000 0.000 0.000 0.000 CPD.py:14(TabularCPD) + 1 0.000 0.000 0.000 0.000 rational.py:24(mpq) + 1 0.000 0.000 0.000 0.000 rnn.py:135(_LSTMSingleLayer) + 4 0.000 0.000 0.000 0.000 core.py:3304(parseImpl) + 1 0.000 0.000 0.000 0.000 plot.py:70(Plot) + 1 0.000 0.000 0.000 0.000 linear.py:11(Linear) + 14 0.000 0.000 0.000 0.000 mock.py:1970() + 1 0.000 0.000 0.000 0.000 zipfile.py:1872(__del__) + 1 0.000 0.000 0.000 0.000 random.py:235(_randbelow_with_getrandbits) + 4 0.000 0.000 0.000 0.000 libmpf.py:454(to_float) + 9 0.000 0.000 0.000 0.000 doccer.py:72(inherit_docstring_from) + 1 0.000 0.000 0.000 0.000 numbers.py:2502(AlgebraicNumber) + 1 0.000 0.000 0.000 0.000 observer.py:124(ObserverBase) + 1 0.000 0.000 0.000 0.000 common.py:3015(_MinimalMatrix) + 2 0.000 0.000 0.000 0.000 reprlib.py:38(__init__) + 16 0.000 0.000 0.000 0.000 _dtype.py:24(_kind_name) + 3 0.000 0.000 0.000 0.000 __init__.py:42(__init__) + 25 0.000 0.000 0.000 0.000 symbolic_helper.py:664(_block_list_in_opset) + 3 0.000 0.000 0.000 0.000 generate.py:23(_aset) + 1 0.000 0.000 0.000 0.000 __init__.py:143(__init__) + 14 0.000 0.000 0.000 0.000 core.py:5456(postParse) + 1 0.000 0.000 0.000 0.000 decoder.py:284(__init__) + 1 0.000 0.000 0.000 0.000 conv_fused.py:25(_ConvBnNd) + 1 0.000 0.000 0.000 0.000 expressiondomain.py:20(Expression) + 1 0.000 0.000 0.000 0.000 transforms.py:41(Transform) + 1 0.000 0.000 0.000 0.000 feedparser.py:70(close) + 1 0.000 0.000 0.000 0.000 XMLBIF.py:14(XMLBIFReader) + 1 0.000 0.000 0.000 0.000 setupcfg.py:609(ConfigOptionsHandler) + 1 0.000 0.000 0.000 0.000 core.py:3321(White) + 1 0.000 0.000 0.000 0.000 accessor.py:227(SparseFrameAccessor) + 1 0.000 0.000 0.000 0.000 functional_modules.py:82(FXFloatFunctional) + 1 0.000 0.000 0.000 0.000 sets.py:799(ProductSet) + 1 0.000 0.000 0.000 0.000 rnn.py:1000(LSTMCell) + 1 0.000 0.000 0.000 0.000 pkgutil.py:269(ImpLoader) + 18 0.000 0.000 0.000 0.000 _add_newdocs_scalars.py:79() + 1 0.000 0.000 0.000 0.000 __init__.py:37(cuFFTPlanCache) + 12 0.000 0.000 0.000 0.000 matexpr.py:20(_sympifyit) + 1 0.000 0.000 0.000 0.000 matrices.py:157(MatrixReductions) + 3 0.000 0.000 0.000 0.000 numbers.py:712(sort_key) + 1 0.000 0.000 0.000 0.000 reduction.py:33(ForkingPickler) + 1 0.000 0.000 0.000 0.000 error_functions.py:2155(Chi) + 2 0.000 0.000 0.000 0.000 _pyio.py:1742(tell) + 1 0.000 0.000 0.000 0.000 types.py:39(Storage) + 1 0.000 0.000 0.000 0.000 rk.py:74(RungeKutta) + 1 0.000 0.000 0.000 0.000 shape_prop.py:68(ShapeProp) + 8 0.000 0.000 0.000 0.000 typing.py:2943() + 1 0.000 0.000 0.000 0.000 queues.py:337(SimpleQueue) + 1 0.000 0.000 0.000 0.000 spherical_harmonics.py:15(Ynm) + 1 0.000 0.000 0.000 0.000 indexing.py:134(IndexingMixin) + 1 0.000 0.000 0.000 0.000 error_functions.py:1068(Ei) + 1 0.000 0.000 0.000 0.000 __init__.py:919(IntStorage) + 1 0.000 0.000 0.000 0.000 __init__.py:43(QuantizedEngine) + 2 0.000 0.000 0.000 0.000 context.py:251(on_interrupt) + 1 0.000 0.000 0.000 0.000 utils.py:8(ReferenceQuantizedModule) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:9488(halfgennorm_gen) + 2 0.000 0.000 0.000 0.000 __init__.py:11(__init__) + 1 0.000 0.000 0.000 0.000 sql.py:769(SQLTable) + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_sha256} + 1 0.000 0.000 0.000 0.000 __init__.py:70(__init__) + 1 0.000 0.000 0.000 0.000 adamw.py:12(AdamW) + 8 0.000 0.000 0.000 0.000 {method 'release' of '_multiprocessing.SemLock' objects} + 1 0.000 0.000 0.000 0.000 _infra.py:55(Rule) + 14 0.000 0.000 0.000 0.000 __init__.py:892(__bool__) + 1 0.000 0.000 0.000 0.000 feedparser.py:53(__init__) + 1 0.000 0.000 0.000 0.000 readers.py:1388(TextFileReader) + 2 0.000 0.000 0.000 0.000 _jit_internal.py:576(unused) + 1 0.000 0.000 0.000 0.000 _hessian_update_strategy.py:274(__init__) + 1 0.000 0.000 0.000 0.000 reusable_executor.py:90(_ReusablePoolExecutor) + 1 0.000 0.000 0.000 0.000 distance.py:1949() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:8082(skewcauchy_gen) + 26 0.000 0.000 0.000 0.000 _adapters.py:43(redent) + 22 0.000 0.000 0.000 0.000 core.py:3361() + 1 0.000 0.000 0.000 0.000 zipfile.py:2226(CompleteDirs) + 1 0.000 0.000 0.000 0.000 dataframe_protocol.py:116(Buffer) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:2180(__init__) + 1 0.000 0.000 0.000 0.000 operator_schemas.py:19(ArgsKwargsPair) + 5 0.000 0.000 0.000 0.000 __init__.py:597() + 1 0.000 0.000 0.000 0.000 _pyio.py:2058(_configure) + 1 0.000 0.000 0.000 0.000 __init__.py:1059(QUInt8Storage) + 1 0.000 0.000 0.000 0.000 integer.py:194(UInt16Dtype) + 1 0.000 0.000 0.000 0.000 _common.py:267(tzrangebase) + 1 0.000 0.000 0.000 0.000 __init__.py:106(__version__) + 1 0.000 0.000 0.000 0.000 _bunch.py:1() + 15 0.000 0.000 0.000 0.000 core.py:3627(recurse) + 1 0.000 0.000 0.000 0.000 synchronize.py:46(SemLock) + 1 0.000 0.000 0.000 0.000 proxy.py:455(Attribute) + 1 0.000 0.000 0.000 0.000 gzip.py:455(_GzipReader) + 1 0.000 0.000 0.000 0.000 MarkovNetwork.py:15(MarkovNetwork) + 1 0.000 0.000 0.000 0.000 more.py:2816(run_length) + 18 0.000 0.000 0.000 0.000 {built-in method numpy.geterrobj} + 1 0.000 0.000 0.000 0.000 linear_relu.py:9(LinearReLU) + 8 0.000 0.000 0.000 0.000 config.py:863(is_nonnegative_int) + 1 0.000 0.000 0.000 0.000 _index.py:28(IndexMixin) + 1 0.000 0.000 0.000 0.000 polyoptions.py:76(Options) + 2 0.000 0.000 0.000 0.000 results.py:418(__getattr__) + 1 0.000 0.000 0.000 0.000 sysconfig.py:456(_get_sysconfigdata_name) + 6 0.000 0.000 0.000 0.000 signal.py:49(decorator) + 1 0.000 0.000 0.000 0.000 hyper.py:762(HyperRep) + 1 0.000 0.000 0.000 0.000 log_normal.py:8(LogNormal) + 1 0.000 0.000 0.000 0.000 __init__.py:255() + 1 0.000 0.000 0.000 0.000 accessors.py:47(Properties) + 1 0.000 0.000 0.000 0.000 jax.py:1() + 23 0.000 0.000 0.000 0.000 core.py:71() + 1 0.000 0.000 0.000 0.000 hyper.py:856(HyperRep_power2) + 10 0.000 0.000 0.000 0.000 timeutils.py:54(decorator) + 2 0.000 0.000 0.000 0.000 threading.py:1199(daemon) + 1 0.000 0.000 0.000 0.000 __init__.py:855(_CudaLegacyStorage) + 1 0.000 0.000 0.000 0.000 glob_group.py:7(GlobGroup) + 1 0.000 0.000 0.000 0.000 adadelta.py:12(Adadelta) + 1 0.000 0.000 0.000 0.000 error_functions.py:1467(li) + 1 0.000 0.000 0.000 0.000 streams.py:12(Stream) + 1 0.000 0.000 0.000 0.000 zipfile.py:806(ZipExtFile) + 1 0.000 0.000 0.000 0.000 XMLBeliefNetwork.py:227(XBNWriter) + 1 0.000 0.000 0.000 0.000 tz.py:201(tzlocal) + 1 0.000 0.000 0.000 0.000 heuristicgcd.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:1009(CharStorage) + 1 0.000 0.000 0.000 0.000 modules.py:282(FreeModule) + 18 0.000 0.000 0.000 0.000 contextlib.py:428(__init__) + 1 0.000 0.000 0.000 0.000 locks.py:24(Lock) + 14 0.000 0.000 0.000 0.000 _utils.py:40(get_err_fn) + 1 0.000 0.000 0.000 0.000 tensor_functions.py:90(KroneckerDelta) + 8 0.000 0.000 0.000 0.000 results.py:241(__len__) + 1 0.000 0.000 0.000 0.000 sets.py:1665(Complement) + 1 0.000 0.000 0.000 0.000 diophantine.py:1222() + 1 0.000 0.000 0.000 0.000 setupcfg.py:518(ConfigMetadataHandler) + 1 0.000 0.000 0.000 0.000 move.py:1() + 1 0.000 0.000 0.000 0.000 info.py:949(DataFrameTableBuilderVerbose) + 11 0.000 0.000 0.000 0.000 {built-in method time.time} + 1 0.000 0.000 0.000 0.000 main.py:56(TestProgram) + 1 0.000 0.000 0.000 0.000 __init__.py:1069(QInt8Storage) + 1 0.000 0.000 0.000 0.000 _arrays.py:10(_sparray) + 1 0.000 0.000 0.000 0.000 betweenness_subset.py:1() + 11 0.000 0.000 0.000 0.000 optimizer.py:28(_use_grad_for_differentiable) + 1 0.000 0.000 0.000 0.000 plot.py:1282(MatplotlibBackend) + 1 0.000 0.000 0.000 0.000 __init__.py:207(__enter__) + 1 0.000 0.000 0.000 0.000 sharing.py:124(tensordot_cache_wrap) + 1 0.000 0.000 0.000 0.000 fancy_getopt.py:32(FancyGetopt) + 1 0.000 0.000 0.000 0.000 radam.py:13(RAdam) + 1 0.000 0.000 0.000 0.000 gbq.py:1() + 1 0.000 0.000 0.000 0.000 _nonlin.py:583(LowRankMatrix) + 1 0.000 0.000 0.000 0.000 _csr.py:17(csr_matrix) + 6 0.000 0.000 0.000 0.000 {built-in method math.frexp} + 13 0.000 0.000 0.000 0.000 _deprecation.py:8(deprecated) + 1 0.000 0.000 0.000 0.000 socket.py:663(SocketIO) + 1 0.000 0.000 0.000 0.000 __init__.py:72(__init__) + 1 0.000 0.000 0.000 0.000 monkey.py:100(_patch_distribution_metadata) + 1 0.000 0.000 0.000 0.000 proxy.py:476(ParameterProxy) + 1 0.000 0.000 0.000 0.000 sampler.py:139(SubsetRandomSampler) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:7897(rice_gen) + 1 0.000 0.000 0.000 0.000 conv.py:277(ConvTranspose3d) + 1 0.000 0.000 0.000 0.000 :895(_resolve_filename) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:898(bradford_gen) + 1 0.000 0.000 0.000 0.000 cauchy.py:12(Cauchy) + 1 0.000 0.000 0.000 0.000 SEM.py:992(SEM) + 1 0.000 0.000 0.000 0.000 info.py:787(DataFrameTableBuilder) + 1 0.000 0.000 0.000 0.000 weight_norm.py:11(WeightNorm) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:115(TokenList) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:1087(CyclicLR) + 1 0.000 0.000 0.000 0.000 symbolic_shapes.py:428(FloorDiv) + 1 0.000 0.000 0.000 0.000 utils.py:114(DisableOnWriteError) + 1 0.000 0.000 0.000 0.000 pytables.py:3131(SeriesFixed) + 1 0.000 0.000 0.000 0.000 gumbel.py:12(Gumbel) + 22 0.000 0.000 0.000 0.000 __init__.py:507(_parse_local_version) + 1 0.000 0.000 0.000 0.000 _mannwhitneyu.py:19(_MWU) + 1 0.000 0.000 0.000 0.000 sympy_parser.py:1116(EvaluateFalseTransformer) + 1 0.000 0.000 0.000 0.000 singleton.py:90(__init__) + 1 0.000 0.000 0.000 0.000 laplace.py:9(Laplace) + 1 0.000 0.000 0.000 0.000 csv.py:80(DictReader) + 1 0.000 0.000 0.000 0.000 __init__.py:969(HalfStorage) + 5 0.000 0.000 0.000 0.000 {built-in method atexit.register} + 1 0.000 0.000 0.000 0.000 rnn.py:1061(RNNCell) + 1 0.000 0.000 0.000 0.000 rootisolation.py:1888(ComplexInterval) + 1 0.000 0.000 0.000 0.000 complexes.py:142(im) + 1 0.000 0.000 0.000 0.000 pythonintegerring.py:12(PythonIntegerRing) + 1 0.000 0.000 0.000 0.000 log.py:42(Log) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3016(multinomial_gen) + 1 0.000 0.000 0.000 0.000 doctest.py:1748(UnexpectedException) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:9334(wrapcauchy_gen) + 1 0.000 0.000 0.000 0.000 sequences.py:727(RecursiveSeq) + 1 0.000 0.000 0.000 0.000 tfqmr.py:1() + 1 0.000 0.000 0.000 0.000 fake_quantize.py:290(FusedMovingAvgObsFakeQuantize) + 1 0.000 0.000 0.000 0.000 numbers.py:3734(ComplexInfinity) + 9 0.000 0.000 0.000 0.000 accessor.py:113(delegate_names) + 15 0.000 0.000 0.000 0.000 {built-in method _warnings._filters_mutated} + 1 0.000 0.000 0.000 0.000 numeric.py:219(NumericArray) + 3 0.000 0.000 0.000 0.000 ctx_mp_python.py:602(make_mpc) + 1 0.000 0.000 0.000 0.000 upsampling.py:213(UpsamplingBilinear2d) + 1 0.000 0.000 0.000 0.000 core.py:124() + 1 0.000 0.000 0.000 0.000 numpy.py:428() + 1 0.000 0.000 0.000 0.000 planarity.py:218(ConflictPair) + 1 0.000 0.000 0.000 0.000 _dia.py:16(dia_matrix) + 2 0.000 0.000 0.000 0.000 pretty_symbology.py:175() + 1 0.000 0.000 0.000 0.000 __init__.py:959(FloatStorage) + 1 0.000 0.000 0.000 0.000 __init__.py:439(LibraryLoader) + 1 0.000 0.000 0.000 0.000 ipaddress.py:1393(IPv4Interface) + 1 0.000 0.000 0.000 0.000 stringpict.py:355(prettyForm) + 1 0.000 0.000 0.000 0.000 process.py:615(ProcessPoolExecutor) + 1 0.000 0.000 0.000 0.000 complexes.py:793(conjugate) + 1 0.000 0.000 0.000 0.000 subspaces.py:1() + 1 0.000 0.000 0.000 0.000 autocast_mode.py:13(autocast) + 1 0.000 0.000 0.000 0.000 core.py:4907(Opt) + 1 0.000 0.000 0.000 0.000 adagrad.py:12(Adagrad) + 1 0.000 0.000 0.000 0.000 unix.py:18(Unix) + 1 0.000 0.000 0.000 0.000 _infra.py:180(Stack) + 1 0.000 0.000 0.000 0.000 _pslinux.py:607() + 1 0.000 0.000 0.000 0.000 more.py:1888(numeric_range) + 1 0.000 0.000 0.000 0.000 hyper.py:968(HyperRep_sqrts1) + 1 0.000 0.000 0.000 0.000 bdb.py:657(Breakpoint) + 1 0.000 0.000 0.000 0.000 _extract.py:1() + 1 0.000 0.000 0.000 0.000 _lambertw.py:1() + 1 0.000 0.000 0.000 0.000 activation.py:175(Hardtanh) + 3 0.000 0.000 0.000 0.000 _shims.py:71(__new__) + 13 0.000 0.000 0.000 0.000 _collections.py:24() + 1 0.000 0.000 0.000 0.000 permutation.py:9(PermutationMatrix) + 1 0.000 0.000 0.000 0.000 fold.py:10(Fold) + 3 0.000 0.000 0.000 0.000 uuid.py:334(hex) + 1 0.000 0.000 0.000 0.000 flatten.py:9(Flatten) + 4 0.000 0.000 0.000 0.000 basic.py:1934() + 3 0.000 0.000 0.000 0.000 __init__.py:7(is_available) + 1 0.000 0.000 0.000 0.000 linear_fused.py:13(LinearBn1d) + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_sha1} + 1 0.000 0.000 0.000 0.000 join.py:88(_JoinConfig) + 21 0.000 0.000 0.000 0.000 _inspect.py:143() + 1 0.000 0.000 0.000 0.000 mod.py:10(Mod) + 1 0.000 0.000 0.000 0.000 plot.py:493(BaseSeries) + 1 0.000 0.000 0.000 0.000 wrappers.py:78(elementwise_type_promotion_wrapper) + 1 0.000 0.000 0.000 0.000 threading.py:637(Barrier) + 6 0.000 0.000 0.000 0.000 quadrature.py:21(__init__) + 1 0.000 0.000 0.000 0.000 dtypes.py:72(PandasExtensionDtype) + 1 0.000 0.000 0.000 0.000 path_random.py:30(RandomOptimizer) + 1 0.000 0.000 0.000 0.000 __init__.py:467(SelectableGroups) + 1 0.000 0.000 0.000 0.000 core.py:6322(mvoid) + 1 0.000 0.000 0.000 0.000 bessel.py:1657(airybiprime) + 1 0.000 0.000 0.000 0.000 __init__.py:210(__exit__) + 1 0.000 0.000 0.000 0.000 _ode.py:1238(lsoda) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1243(cauchy_gen) + 1 0.000 0.000 0.000 0.000 reportviews.py:283(NodeDataView) + 1 0.000 0.000 0.000 0.000 _qmc.py:1638(PoissonDisk) + 1 0.000 0.000 0.000 0.000 calendar.py:71(_localized_day) + 1 0.000 0.000 0.000 0.000 flags.py:6(Flags) + 1 0.000 0.000 0.000 0.000 msvc.py:372(RegistryInfo) + 1 0.000 0.000 0.000 0.000 sets.py:1436(Intersection) + 1 0.000 0.000 0.000 0.000 backend_registry.py:43(backend_registered) + 1 0.000 0.000 0.000 0.000 parallel.py:440(Parallel) + 1 0.000 0.000 0.000 0.000 modules.py:43(Module) + 1 0.000 0.000 0.000 0.000 numbers.py:3108(One) + 1 0.000 0.000 0.000 0.000 __init__.py:1730(_register) + 1 0.000 0.000 0.000 0.000 lazy.py:53(LazyModuleMixin) + 1 0.000 0.000 0.000 0.000 __init__.py:879(DoubleStorage) + 1 0.000 0.000 0.000 0.000 linear_relu.py:116(LinearTanh) + 1 0.000 0.000 0.000 0.000 decoder.py:269(Decoder) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:896(planck_gen) + 1 0.000 0.000 0.000 0.000 activation.py:241(PReLU) + 1 0.000 0.000 0.000 0.000 conv_relu.py:19(ConvReLU1d) + 1 0.000 0.000 0.000 0.000 rnn.py:163(_LSTMLayer) + 1 0.000 0.000 0.000 0.000 subgraph_rewriter.py:14(Match) + 1 0.000 0.000 0.000 0.000 object_arrays.py:1() + 9 0.000 0.000 0.000 0.000 :52(normcase) + 1 0.000 0.000 0.000 0.000 _ops.py:589(__init__) + 1 0.000 0.000 0.000 0.000 info.py:856(TableBuilderVerboseMixin) + 1 0.000 0.000 0.000 0.000 modules.py:698(PowerBasis) + 1 0.000 0.000 0.000 0.000 primes.py:41(PrimeIdeal) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:5824(maxwell_gen) + 1 0.000 0.000 0.000 0.000 polynomials.py:748(legendre) + 2 0.000 0.000 0.000 0.000 feedparser.py:122(pushlines) + 1 0.000 0.000 0.000 0.000 ops.py:1118(BinGrouper) + 1 0.000 0.000 0.000 0.000 request.py:2139(FancyURLopener) + 1 0.000 0.000 0.000 0.000 __init__.py:531(Formatter) + 1 0.000 0.000 0.000 0.000 {built-in method uarray._uarray.set_global_backend} + 1 0.000 0.000 0.000 0.000 reportviews.py:1037(OutEdgeView) + 1 0.000 0.000 0.000 0.000 ideals.py:282(ModuleImplementedIdeal) + 1 0.000 0.000 0.000 0.000 expr.py:4074(ExprBuilder) + 1 0.000 0.000 0.000 0.000 rmsprop.py:11(RMSprop) + 20 0.000 0.000 0.000 0.000 _inspect.py:142() + 1 0.000 0.000 0.000 0.000 diophantine.py:137(DiophantineEquationType) + 20 0.000 0.000 0.000 0.000 mpelements.py:20(_set_mpf) + 6 0.000 0.000 0.000 0.000 monkey.py:51() + 10 0.000 0.000 0.000 0.000 _pytesttester.py:76(__init__) + 1 0.000 0.000 0.000 0.000 _ode.py:103(ode) + 1 0.000 0.000 0.000 0.000 dtypes.py:1314(PandasDtype) + 1 0.000 0.000 0.000 0.000 numbers.py:3814(NumberSymbol) + 1 0.000 0.000 0.000 0.000 internal.py:41(__init__) + 1 0.000 0.000 0.000 0.000 error.py:35(HTTPError) + 1 0.000 0.000 0.000 0.000 transforms.py:976(PositiveDefiniteTransform) + 1 0.000 0.000 0.000 0.000 unix_events.py:57(_UnixSelectorEventLoop) + 1 0.000 0.000 0.000 0.000 kind.py:97(__new__) + 1 0.000 0.000 0.000 0.000 streams.py:140(Event) + 1 0.000 0.000 0.000 0.000 abc.py:177(InspectLoader) + 1 0.000 0.000 0.000 0.000 _namedtensor_internals.py:1() + 1 0.000 0.000 0.000 0.000 interval_arithmetic.py:41(interval) + 1 0.000 0.000 0.000 0.000 datetime.py:1284(IsoCalendarDate) + 1 0.000 0.000 0.000 0.000 base.py:1687(ExtensionOpsMixin) + 1 0.000 0.000 0.000 0.000 threading.py:822(_maintain_shutdown_locks) + 1 0.000 0.000 0.000 0.000 __init__.py:351(EntryPoints) + 1 0.000 0.000 0.000 0.000 domainscalar.py:17(DomainScalar) + 1 0.000 0.000 0.000 0.000 dtypes.py:1412(BaseMaskedDtype) + 7 0.000 0.000 0.000 0.000 _util.py:650(_rename_parameter) + 1 0.000 0.000 0.000 0.000 _multivariate.py:5586(__init__) + 5 0.000 0.000 0.000 0.000 {built-in method math.sqrt} + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:4595(norminvgauss_gen) + 1 0.000 0.000 0.000 0.000 bessel.py:36(BesselBase) + 1 0.000 0.000 0.000 0.000 selectors.py:80(BaseSelector) + 11 0.000 0.000 0.000 0.000 api.py:488(method_factory) + 1 0.000 0.000 0.000 0.000 _ode.py:837(vode) + 1 0.000 0.000 0.000 0.000 bessel.py:106(besselj) + 1 0.000 0.000 0.000 0.000 __init__.py:6(HTTPStatus) + 1 0.000 0.000 0.000 0.000 console.py:1() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1368(chi2_gen) + 1 0.000 0.000 0.000 0.000 piecewise.py:18(ExprCondPair) + 2 0.000 0.000 0.000 0.000 _pyio.py:2196(closed) + 1 0.000 0.000 0.000 0.000 transforms.py:1098(StackTransform) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:1037(randint_gen) + 1 0.000 0.000 0.000 0.000 function.py:1917(Lambda) + 1 0.000 0.000 0.000 0.000 base_events.py:274(Server) + 1 0.000 0.000 0.000 0.000 unix_events.py:458(_UnixReadPipeTransport) + 1 0.000 0.000 0.000 0.000 sampler.py:82(RandomSampler) + 7 0.000 0.000 0.000 0.000 __init__.py:101(CFunctionType) + 3 0.000 0.000 0.000 0.000 __init__.py:6(is_available) + 1 0.000 0.000 0.000 0.000 _interface.py:606(_SumLinearOperator) + 4 0.000 0.000 0.000 0.000 _util.py:32(register_writer) + 1 0.000 0.000 0.000 0.000 _tensor_str.py:9(__PrinterOptions) + 1 0.000 0.000 0.000 0.000 dispersion.py:1() + 1 0.000 0.000 0.000 0.000 _fitpack2.py:1430(RectBivariateSpline) + 1 0.000 0.000 0.000 0.000 linear_relu.py:50(LinearLeakyReLU) + 5 0.000 0.000 0.000 0.000 generic.py:40(_check) + 1 0.000 0.000 0.000 0.000 ClusterGraph.py:11(ClusterGraph) + 1 0.000 0.000 0.000 0.000 info.py:607(DataFrameInfoPrinter) + 1 0.000 0.000 0.000 0.000 trace.py:11(Trace) + 8 0.000 0.000 0.000 0.000 _base.py:398(__get_result) + 1 0.000 0.000 0.000 0.000 conv.py:10(_ConvNd) + 1 0.000 0.000 0.000 0.000 __init__.py:862(Prepared) + 1 0.000 0.000 0.000 0.000 __init__.py:12() + 1 0.000 0.000 0.000 0.000 integers.py:259(ceiling) + 1 0.000 0.000 0.000 0.000 zipfile.py:346(ZipInfo) + 1 0.000 0.000 0.000 0.000 _datasource.py:196(DataSource) + 1 0.000 0.000 0.000 0.000 normalization.py:87(LayerNorm) + 1 0.000 0.000 0.000 0.000 monomials.py:506(Monomial) + 1 0.000 0.000 0.000 0.000 gamma_functions.py:34(gamma) + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_sha224} + 1 0.000 0.000 0.000 0.000 process_executor.py:479(_ExecutorManagerThread) + 1 0.000 0.000 0.000 0.000 _compression.py:33(DecompressReader) + 1 0.000 0.000 0.000 0.000 modules.py:1743(ModuleHomomorphism) + 1 0.000 0.000 0.000 0.000 rnn.py:230(GRUCell) + 1 0.000 0.000 0.000 0.000 graph_module.py:230(_WrappedCall) + 2 0.000 0.000 0.000 0.000 {method '_acquire_restore' of '_thread.RLock' objects} + 1 0.000 0.000 0.000 0.000 streams.py:301(StreamWriter) + 1 0.000 0.000 0.000 0.000 __init__.py:385(check_sparse_tensor_invariants) + 1 0.000 0.000 0.000 0.000 conv_add.py:52(ConvAddReLU2d) + 1 0.000 0.000 0.000 0.000 locks.py:446(Barrier) + 1 0.000 0.000 0.000 0.000 ndim_array.py:15(ArrayKind) + 1 0.000 0.000 0.000 0.000 reportviews.py:116(NodeView) + 1 0.000 0.000 0.000 0.000 _rbf.py:55(Rbf) + 12 0.000 0.000 0.000 0.000 fake_tensor.py:327(register_op_impl) + 1 0.000 0.000 0.000 0.000 lambdarepr.py:228(IntervalPrinter) + 1 0.000 0.000 0.000 0.000 qconfig_mapping.py:157(QConfigMapping) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.string} + 3 0.000 0.000 0.000 0.000 constraints.py:109(__init__) + 1 0.000 0.000 0.000 0.000 tr_interior_point.py:23(BarrierSubproblem) + 1 0.000 0.000 0.000 0.000 numpy_pickle.py:269(NumpyPickler) + 1 0.000 0.000 0.000 0.000 internet_as_graphs.py:71(AS_graph_generator) + 1 0.000 0.000 0.000 0.000 boolalg.py:838(Not) + 1 0.000 0.000 0.000 0.000 synchronize.py:363(Barrier) + 1 0.000 0.000 0.000 0.000 taskgroups.py:12(TaskGroup) + 1 0.000 0.000 0.000 0.000 executor.py:23(MemmappingExecutor) + 1 0.000 0.000 0.000 0.000 sgd.py:10(SGD) + 1 0.000 0.000 0.000 0.000 scope.py:88(Scope) + 27 0.000 0.000 0.000 0.000 _pyio.py:864(raw) + 1 0.000 0.000 0.000 0.000 tarfile.py:604(_FileInFile) + 1 0.000 0.000 0.000 0.000 spawn.py:39(ProcessExitedException) + 3 0.000 0.000 0.000 0.000 ctx_base.py:458(memoize) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:1452(yulesimon_gen) + 1 0.000 0.000 0.000 0.000 error_functions.py:1915(Ci) + 1 0.000 0.000 0.000 0.000 _odfreader.py:28(ODFReader) + 4 0.000 0.000 0.000 0.000 enum.py:1450() + 1 0.000 0.000 0.000 0.000 ops.py:361(BinOp) + 8 0.000 0.000 0.000 0.000 accessor.py:174(__init__) + 1 0.000 0.000 0.000 0.000 _iotools.py:229(NameValidator) + 1 0.000 0.000 0.000 0.000 inspect.py:776(_findclass) + 1 0.000 0.000 0.000 0.000 _cubic.py:367(Akima1DInterpolator) + 1 0.000 0.000 0.000 0.000 __init__.py:87(_is_compiled) + 1 0.000 0.000 0.000 0.000 overrides.py:1786(TorchFunctionMode) + 10 0.000 0.000 0.000 0.000 wrappers.py:198() + 1 0.000 0.000 0.000 0.000 dataset.py:252(ChainDataset) + 1 0.000 0.000 0.000 0.000 headerregistry.py:468(ContentTypeHeader) + 1 0.000 0.000 0.000 0.000 kind.py:257(__init__) + 1 0.000 0.000 0.000 0.000 relaxed_categorical.py:88(RelaxedOneHotCategorical) + 1 0.000 0.000 0.000 0.000 _pyio.py:902(BytesIO) + 1 0.000 0.000 0.000 0.000 polyquinticconst.py:22(PolyQuintic) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1347(ReduceOrder) + 1 0.000 0.000 0.000 0.000 tzinfo.py:18(memorized_timedelta) + 8 0.000 0.000 0.000 0.000 _parser.py:160(__delitem__) + 4 0.000 0.000 0.000 0.000 pretty_symbology.py:234() + 1 0.000 0.000 0.000 0.000 relational.py:537(Equality) + 1 0.000 0.000 0.000 0.000 fishersnedecor.py:11(FisherSnedecor) + 16 0.000 0.000 0.000 0.000 traceback.py:307(__len__) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:5454(loggamma_gen) + 38 0.000 0.000 0.000 0.000 {built-in method _ctypes.sizeof} + 1 0.000 0.000 0.000 0.000 :87(samestat) + 1 0.000 0.000 0.000 0.000 utils.py:2092(suppress_warnings) + 1 0.000 0.000 0.000 0.000 __init__.py:899(HalfStorage) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3480(__init__) + 11 0.000 0.000 0.000 0.000 windows.py:41(_add_docstr) + 1 0.000 0.000 0.000 0.000 MarkovChain.py:13(MarkovChain) + 1 0.000 0.000 0.000 0.000 combining.py:93(_ContainerTemplate) + 1 0.000 0.000 0.000 0.000 factorials.py:374(factorial2) + 1 0.000 0.000 0.000 0.000 _interpolate.py:1014(PPoly) + 1 0.000 0.000 0.000 0.000 tz.py:1253(tzical) + 1 0.000 0.000 0.000 0.000 conv_fused.py:407(ConvBnReLU1d) + 1 0.000 0.000 0.000 0.000 bessel.py:495(besselk) + 1 0.000 0.000 0.000 0.000 transforms.py:459(ReshapeTransform) + 1 0.000 0.000 0.000 0.000 _nonlin.py:803(BroydenFirst) + 3 0.000 0.000 0.000 0.000 __init__.py:162(__ge__) + 1 0.000 0.000 0.000 0.000 pydot.py:568(Node) + 1 0.000 0.000 0.000 0.000 _multivariate.py:203(multi_rv_generic) + 1 0.000 0.000 0.000 0.000 _multivariate.py:2487(invwishart_gen) + 1 0.000 0.000 0.000 0.000 __init__.py:135(_BaseVersion) + 1 0.000 0.000 0.000 0.000 __init__.py:60(Quantize) + 1 0.000 0.000 0.000 0.000 __init__.py:979(LongStorage) + 2 0.000 0.000 0.000 0.000 ctx_mp_python.py:147(__nonzero__) + 1 0.000 0.000 0.000 0.000 profiler_util.py:16(EventList) + 1 0.000 0.000 0.000 0.000 conv.py:483(Conv3d) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:4742(invweibull_gen) + 21 0.000 0.000 0.000 0.000 util.py:36(decorator) + 1 0.000 0.000 0.000 0.000 dataloader.py:70(_DatasetKind) + 1 0.000 0.000 0.000 0.000 basic.py:350(__eq__) + 1 0.000 0.000 0.000 0.000 dataset.py:280(Subset) + 1 0.000 0.000 0.000 0.000 point.py:860(Point2D) + 1 0.000 0.000 0.000 0.000 _covariance.py:556(CovViaEigendecomposition) + 1 0.000 0.000 0.000 0.000 __init__.py:549(IMetadataProvider) + 1 0.000 0.000 0.000 0.000 beta.py:11(Beta) + 1 0.000 0.000 0.000 0.000 _xlsxwriter.py:25(_XlsxStyler) + 4 0.000 0.000 0.000 0.000 pretty_symbology.py:237() + 1 0.000 0.000 0.000 0.000 {built-in method time.localtime} + 1 0.000 0.000 0.000 0.000 transforms.py:955(LowerCholeskyTransform) + 1 0.000 0.000 0.000 0.000 queue.py:258(_PySimpleQueue) + 1 0.000 0.000 0.000 0.000 session.py:250(_PeekableReader) + 1 0.000 0.000 0.000 0.000 normalization.py:81(InstanceNorm1d) + 1 0.000 0.000 0.000 0.000 _nonlin.py:1205(LinearMixing) + 1 0.000 0.000 0.000 0.000 containers.py:334(OrderedSet) + 1 0.000 0.000 0.000 0.000 _kdtree.py:98(Rectangle) + 6 0.000 0.000 0.000 0.000 typing.py:1569(__repr__) + 1 0.000 0.000 0.000 0.000 numbers.py:4094(GoldenRatio) + 1 0.000 0.000 0.000 0.000 relaxed_categorical.py:11(ExpRelaxedCategorical) + 1 0.000 0.000 0.000 0.000 _guards.py:238(Checkpointable) + 2 0.000 0.000 0.000 0.000 compressor.py:153(__init__) + 1 0.000 0.000 0.000 0.000 transformer.py:166(TransformerEncoder) + 1 0.000 0.000 0.000 0.000 lzma.py:38(LZMAFile) + 1 0.000 0.000 0.000 0.000 libmpi.py:96(mpi_neg) + 1 0.000 0.000 0.000 0.000 platform.py:740(_Processor) + 1 0.000 0.000 0.000 0.000 check_functions.py:1() + 1 0.000 0.000 0.000 0.000 orderings.py:11(MonomialOrder) + 1 0.000 0.000 0.000 0.000 _functions.py:180(CrossMapLRN2d) + 1 0.000 0.000 0.000 0.000 graphml.py:461(GraphMLWriter) + 1 0.000 0.000 0.000 0.000 lazy.py:10(_LazyProtocol) + 1 0.000 0.000 0.000 0.000 _script.py:179(OrderedDictWrapper) + 1 0.000 0.000 0.000 0.000 graph_module.py:27(_EvalCacheLoader) + 1 0.000 0.000 0.000 0.000 activation.py:80(ELU) + 8 0.000 0.000 0.000 0.000 connection.py:142(_check_writable) + 1 0.000 0.000 0.000 0.000 selector_events.py:916(_SelectorSocketTransport) + 1 0.000 0.000 0.000 0.000 transforms.py:280(__init__) + 2 0.000 0.000 0.000 0.000 textwrap.py:112(__init__) + 1 0.000 0.000 0.000 0.000 pydot.py:415(Common) + 4 0.000 0.000 0.000 0.000 _pyio.py:1797(fileno) + 1 0.000 0.000 0.000 0.000 sequences.py:963(SeqExprOp) + 1 0.000 0.000 0.000 0.000 __init__.py:889(FloatStorage) + 1 0.000 0.000 0.000 0.000 conv.py:856(ConvTranspose3d) + 1 0.000 0.000 0.000 0.000 kumaraswamy.py:20(Kumaraswamy) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:494(anglit_gen) + 1 0.000 0.000 0.000 0.000 doctest.py:2171(DocTestCase) + 1 0.000 0.000 0.000 0.000 expand.py:394(EnsurePackagesDiscovered) + 2 0.000 0.000 0.000 0.000 requirements.py:20(Requirement) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:476(Hyper_Function) + 1 0.000 0.000 0.000 0.000 _atfork.py:18(register_after_fork) + 1 0.000 0.000 0.000 0.000 nadam.py:10(NAdam) + 2 0.000 0.000 0.000 0.000 _pyio.py:1301(_flush_unlocked) + 1 0.000 0.000 0.000 0.000 autograd_function.py:30(__init__) + 1 0.000 0.000 0.000 0.000 decorator.py:65(FunctionMaker) + 1 0.000 0.000 0.000 0.000 epathtools.py:6(EPath) + 1 0.000 0.000 0.000 0.000 __init__.py:84(__init__) + 1 0.000 0.000 0.000 0.000 fake_quantize.py:114(FakeQuantize) + 1 0.000 0.000 0.000 0.000 numbers.py:4349(ImaginaryUnit) + 1 0.000 0.000 0.000 0.000 traceback.py:638(TracebackException) + 1 0.000 0.000 0.000 0.000 binary.py:48() + 1 0.000 0.000 0.000 0.000 pytables.py:101(BinOp) + 1 0.000 0.000 0.000 0.000 msvc.py:257(PlatformInfo) + 1 0.000 0.000 0.000 0.000 docscrape.py:30(Reader) + 1 0.000 0.000 0.000 0.000 assume.py:81(AppliedPredicate) + 1 0.000 0.000 0.000 0.000 exponential.py:36(ExpBase) + 1 0.000 0.000 0.000 0.000 UndirectedGraph.py:8(UndirectedGraph) + 1 0.000 0.000 0.000 0.000 numeric.py:350(IntegerIndex) + 2 0.000 0.000 0.000 0.000 _pep440.py:158(_compare) + 1 0.000 0.000 0.000 0.000 __init__.py:989(IntStorage) + 1 0.000 0.000 0.000 0.000 symbol.py:352(assumptions0) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:3299(genhalflogistic_gen) + 1 0.000 0.000 0.000 0.000 _functions.py:6(SyncBatchNorm) + 8 0.000 0.000 0.000 0.000 __init__.py:2416(_cygwin_patch) + 2 0.000 0.000 0.000 0.000 six.py:85(_import_module) + 1 0.000 0.000 0.000 0.000 _decorators.py:479(Appender) + 1 0.000 0.000 0.000 0.000 creation.py:1() + 1 0.000 0.000 0.000 0.000 engine.py:342(DiagnosticEngine) + 1 0.000 0.000 0.000 0.000 pickle.py:263(_Unframer) + 1 0.000 0.000 0.000 0.000 argparse.py:1335(_ActionsContainer) + 1 0.000 0.000 0.000 0.000 __init__.py:1019(BoolStorage) + 1 0.000 0.000 0.000 0.000 __init__.py:1979(FileMetadata) + 4 0.000 0.000 0.000 0.000 enum.py:1224(__hash__) + 3 0.000 0.000 0.000 0.000 typing.py:906(__repr__) + 8 0.000 0.000 0.000 0.000 getlimits.py:153(_register_type) + 1 0.000 0.000 0.000 0.000 _matfuncs.py:170(MatrixPowerOperator) + 1 0.000 0.000 0.000 0.000 _pyio.py:458(_checkSeekable) + 1 0.000 0.000 0.000 0.000 studentT.py:11(StudentT) + 1 0.000 0.000 0.000 0.000 numeric.py:386(UInt64Index) + 1 0.000 0.000 0.000 0.000 singularity_functions.py:14(SingularityFunction) + 1 0.000 0.000 0.000 0.000 embedding_ops.py:8(Embedding) + 4 0.000 0.000 0.000 0.000 pretty_symbology.py:238() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:8836(truncpareto_gen) + 1 0.000 0.000 0.000 0.000 __init__.py:26(InfinityType) + 1 0.000 0.000 0.000 0.000 function.py:674(NestedIOFunction) + 1 0.000 0.000 0.000 0.000 asgd.py:18(ASGD) + 9 0.000 0.000 0.000 0.000 enum.py:1371() + 1 0.000 0.000 0.000 0.000 sympy_parser.py:93(AppliedFunction) + 1 0.000 0.000 0.000 0.000 string_.py:58(StringDtype) + 1 0.000 0.000 0.000 0.000 extrapolation.py:266(levin_class) + 1 0.000 0.000 0.000 0.000 roperator.py:1() + 1 0.000 0.000 0.000 0.000 ring.py:9(Ring) + 1 0.000 0.000 0.000 0.000 combining.py:238(_ChildDataPipe) + 1 0.000 0.000 0.000 0.000 __init__.py:939(CharStorage) + 1 0.000 0.000 0.000 0.000 _interpolate.py:2032(NdPPoly) + 1 0.000 0.000 0.000 0.000 _functions.py:10(Broadcast) + 1 0.000 0.000 0.000 0.000 __init__.py:797(SubclassedSeries) + 1 0.000 0.000 0.000 0.000 boolalg.py:572(And) + 1 0.000 0.000 0.000 0.000 splitter_base.py:193(SplitResult) + 1 0.000 0.000 0.000 0.000 matexpr.py:585(MatrixElement) + 1 0.000 0.000 0.000 0.000 PomdpX.py:8(PomdpXReader) + 1 0.000 0.000 0.000 0.000 distributed.py:164(_DDPSink) + 1 0.000 0.000 0.000 0.000 immutable.py:80(ImmutableDenseMatrix) + 1 0.000 0.000 0.000 0.000 function.py:153(FunctionClass) + 1 0.000 0.000 0.000 0.000 configparser.py:1211(ConfigParser) + 1 0.000 0.000 0.000 0.000 threading.py:224(Condition) + 4 0.000 0.000 0.000 0.000 sympify.py:18(__init__) + 1 0.000 0.000 0.000 0.000 _tensor_str.py:99(_Formatter) + 1 0.000 0.000 0.000 0.000 coreviews.py:22(AtlasView) + 1 0.000 0.000 0.000 0.000 indexed.py:584(Idx) + 1 0.000 0.000 0.000 0.000 fileopener.py:13(FileOpenerIterDataPipe) + 4 0.000 0.000 0.000 0.000 {built-in method gmpy2.gmpy2.version} + 1 0.000 0.000 0.000 0.000 _pyio.py:1239(BufferedWriter) + 1 0.000 0.000 0.000 0.000 gamma_functions.py:564(polygamma) + 1 0.000 0.000 0.000 0.000 _pyio.py:2264(_get_locale_encoding) + 1 0.000 0.000 0.000 0.000 hooks.py:9(RemovableHandle) + 1 0.000 0.000 0.000 0.000 info.py:731(TableBuilderAbstract) + 1 0.000 0.000 0.000 0.000 hyperbolic.py:918(ReciprocalHyperbolicFunction) + 11 0.000 0.000 0.000 0.000 reductions.py:110(_torch_reduce) + 1 0.000 0.000 0.000 0.000 numbers.py:1094(catalan) + 1 0.000 0.000 0.000 0.000 __init__.py:949(BoolStorage) + 1 0.000 0.000 0.000 0.000 bessel.py:267(bessely) + 1 0.000 0.000 0.000 0.000 graph.py:1962(nbunch_iter) + 1 0.000 0.000 0.000 0.000 _pep440.py:140(__lt__) + 1 0.000 0.000 0.000 0.000 fancysets.py:1109(ComplexRegion) + 1 0.000 0.000 0.000 0.000 fft.py:250(_ShapeAndDims) + 19 0.000 0.000 0.000 0.000 boolalg.py:420(__bool__) + 1 0.000 0.000 0.000 0.000 _pslinux.py:800(__init__) + 2 0.000 0.000 0.000 0.000 _jit_internal.py:639(ignore) + 1 0.000 0.000 0.000 0.000 blockmatrix.py:564(BlockDiagMatrix) + 1 0.000 0.000 0.000 0.000 threading.py:1005(_set_native_id) + 1 0.000 0.000 0.000 0.000 __init__.py:218() + 1 0.000 0.000 0.000 0.000 __init__.py:1039(ComplexDoubleStorage) + 1 0.000 0.000 0.000 0.000 difflib.py:1666(HtmlDiff) + 1 0.000 0.000 0.000 0.000 distance.py:1942() + 7 0.000 0.000 0.000 0.000 unicode.py:9(__init__) + 1 0.000 0.000 0.000 0.000 numbers.py:714(harmonic) + 1 0.000 0.000 0.000 0.000 _data.py:157(_minmax_mixin) + 1 0.000 0.000 0.000 0.000 __init__.py:214(insert_shim) + 1 0.000 0.000 0.000 0.000 calendar.py:295(TextCalendar) + 12 0.000 0.000 0.000 0.000 symbol.py:716(literal) + 1 0.000 0.000 0.000 0.000 compressor.py:544(__init__) + 1 0.000 0.000 0.000 0.000 extension.py:30(Extension) + 1 0.000 0.000 0.000 0.000 hyper.py:832(HyperRep_power1) + 1 0.000 0.000 0.000 0.000 __init__.py:1029(BFloat16Storage) + 1 0.000 0.000 0.000 0.000 runtests.py:1102(SymPyTests) + 1 0.000 0.000 0.000 0.000 ordinals.py:5(OmegaPower) + 16 0.000 0.000 0.000 0.000 results.py:17(__getitem__) + 2 0.000 0.000 0.000 0.000 core.py:6620(__setattr__) + 1 0.000 0.000 0.000 0.000 __init__.py:909(LongStorage) + 6 0.000 0.000 0.000 0.000 printer.py:386(print_function) + 1 0.000 0.000 0.000 0.000 lambdify.py:1076(_EvaluatorPrinter) + 2 0.000 0.000 0.000 0.000 {built-in method posix.unsetenv} + 1 0.000 0.000 0.000 0.000 numpy_pickle.py:49(NumpyArrayWrapper) + 1 0.000 0.000 0.000 0.000 utils.py:8(SequenceWrapperMapDataPipe) + 1 0.000 0.000 0.000 0.000 error_functions.py:2047(Shi) + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:379(DataFlowEdge) + 1 0.000 0.000 0.000 0.000 mock.py:2464(_Call) + 1 0.000 0.000 0.000 0.000 selectors.py:290(SelectSelector) + 1 0.000 0.000 0.000 0.000 fft.py:409(_CanonicalizeC2rReturn) + 4 0.000 0.000 0.000 0.000 config.py:611(_get_deprecated_option) + 2 0.000 0.000 0.000 0.000 _optional.py:69(get_version) + 10 0.000 0.000 0.000 0.000 __future__.py:83(__init__) + 1 0.000 0.000 0.000 0.000 integer.py:159(Int8Dtype) + 1 0.000 0.000 0.000 0.000 _version.py:14(NumpyVersion) + 1 0.000 0.000 0.000 0.000 headerregistry.py:156(BaseHeader) + 8 0.000 0.000 0.000 0.000 types.py:130(_calculate_meta) + 1 0.000 0.000 0.000 0.000 bn_relu.py:12(BNReLU2d) + 1 0.000 0.000 0.000 0.000 _type_utils.py:270() + 1 0.000 0.000 0.000 0.000 header.py:413(_ValueFormatter) + 1 0.000 0.000 0.000 0.000 rnn.py:7(LSTM) + 1 0.000 0.000 0.000 0.000 {built-in method posix.readlink} + 1 0.000 0.000 0.000 0.000 constraints.py:96(_Dependent) + 1 0.000 0.000 0.000 0.000 process_executor.py:118(_ThreadWakeup) + 2 0.000 0.000 0.000 0.000 utils.py:215(__init__) + 2 0.000 0.000 0.000 0.000 {built-in method posix.confstr} + 1 0.000 0.000 0.000 0.000 interval_membership.py:4(intervalMembership) + 1 0.000 0.000 0.000 0.000 plot_implicit.py:49(ImplicitSeries) + 1 0.000 0.000 0.000 0.000 conv_fused.py:539(ConvBnReLU2d) + 1 0.000 0.000 0.000 0.000 linear_relu.py:6(LinearReLU) + 1 0.000 0.000 0.000 0.000 graph.py:113(_Namespace) + 1 0.000 0.000 0.000 0.000 activation.py:14(ReLU6) + 2 0.000 0.000 0.000 0.000 math2.py:53(_mathfun_n) + 1 0.000 0.000 0.000 0.000 functions.py:89(defun_static) + 1 0.000 0.000 0.000 0.000 stata.py:2931(StataStrLWriter) + 16 0.000 0.000 0.000 0.000 dataclasses.py:1248() + 1 0.000 0.000 0.000 0.000 _shims.py:58(Reduce) + 1 0.000 0.000 0.000 0.000 _rvs_sampling.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:929(ShortStorage) + 1 0.000 0.000 0.000 0.000 context.py:230(LokyContext) + 1 0.000 0.000 0.000 0.000 backends.py:70(PluginInfo) + 1 0.000 0.000 0.000 0.000 pathlib.py:129() + 2 0.000 0.000 0.000 0.000 pythonmpq.py:103(_new) + 1 0.000 0.000 0.000 0.000 __init__.py:1049(ComplexFloatStorage) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:9925(rv_histogram) + 1 0.000 0.000 0.000 0.000 single.py:445(FirstExact) + 1 0.000 0.000 0.000 0.000 categorical.py:2721(CategoricalAccessor) + 1 0.000 0.000 0.000 0.000 bessel.py:678(SphericalBesselBase) + 1 0.000 0.000 0.000 0.000 proxy_tensor.py:215(_ProxyTensor) + 1 0.000 0.000 0.000 0.000 _json.py:998(Parser) + 1 0.000 0.000 0.000 0.000 headerregistry.py:12(Address) + 1 0.000 0.000 0.000 0.000 transformer.py:326(TransformerDecoder) + 1 0.000 0.000 0.000 0.000 boolalg.py:732(Or) + 1 0.000 0.000 0.000 0.000 transforms.py:1169(CumulativeDistributionTransform) + 1 0.000 0.000 0.000 0.000 elliptic_integrals.py:13(elliptic_k) + 1 0.000 0.000 0.000 0.000 factor_.py:1984(reduced_totient) + 6 0.000 0.000 0.000 0.000 nanops.py:1644(make_nancomp) + 1 0.000 0.000 0.000 0.000 Independencies.py:356(IndependenceAssertion) + 1 0.000 0.000 0.000 0.000 synchronize.py:210(Condition) + 1 0.000 0.000 0.000 0.000 memoization.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:1308(__init__) + 18 0.000 0.000 0.000 0.000 contextlib.py:431(__enter__) + 1 0.000 0.000 0.000 0.000 _utils.py:25(EventMetrics) + 1 0.000 0.000 0.000 0.000 __init__.py:959(BFloat16Storage) + 1 0.000 0.000 0.000 0.000 __init__.py:324(__getattr__) + 1 0.000 0.000 0.000 0.000 zeta_functions.py:19(lerchphi) + 2 0.000 0.000 0.000 0.000 warnings.py:487(__exit__) + 1 0.000 0.000 0.000 0.000 transforms.py:2644(HankelTypeTransform) + 14 0.000 0.000 0.000 0.000 typing_extensions.py:752() + 1 0.000 0.000 0.000 0.000 {method 'view' of 'numpy.generic' objects} + 1 0.000 0.000 0.000 0.000 __init__.py:999(ShortStorage) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:385(NameAddr) + 1 0.000 0.000 0.000 0.000 csv.py:130(DictWriter) + 1 0.000 0.000 0.000 0.000 pretty_symbology.py:192() + 2 0.000 0.000 0.000 0.000 pickle.py:335(whichmodule) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:26(LRScheduler) + 1 0.000 0.000 0.000 0.000 observer.py:52(_PartialWrapper) + 1 0.000 0.000 0.000 0.000 normalization.py:14(LocalResponseNorm) + 7 0.000 0.000 0.000 0.000 __init__.py:27(__init__) + 1 0.000 0.000 0.000 0.000 linear.py:48(Linear) + 1 0.000 0.000 0.000 0.000 __init__.py:3171(Requirement) + 3 0.000 0.000 0.000 0.000 matchhelpers.py:21(copyfunc) + 1 0.000 0.000 0.000 0.000 _json.py:187(Writer) + 1 0.000 0.000 0.000 0.000 integers.py:95(floor) + 1 0.000 0.000 0.000 0.000 half_normal.py:12(HalfNormal) + 1 0.000 0.000 0.000 0.000 loss.py:228(PoissonNLLLoss) + 1 0.000 0.000 0.000 0.000 tz.py:1475(GettzFunc) + 1 0.000 0.000 0.000 0.000 normalization.py:5(LayerNorm) + 1 0.000 0.000 0.000 0.000 rolling.py:717(BaseWindowGroupby) + 1 0.000 0.000 0.000 0.000 batchnorm.py:9(_BatchNorm) + 1 0.000 0.000 0.000 0.000 conv_fused.py:458(ConvReLU1d) + 1 0.000 0.000 0.000 0.000 conv.py:118(Conv3d) + 1 0.000 0.000 0.000 0.000 graph.py:59(__set__) + 1 0.000 0.000 0.000 0.000 process_executor.py:959(ProcessPoolExecutor) + 1 0.000 0.000 0.000 0.000 __init__.py:1089(QUInt4x2Storage) + 1 0.000 0.000 0.000 0.000 arrayprint.py:1351(StructuredVoidFormat) + 1 0.000 0.000 0.000 0.000 gexf.py:274(GEXFWriter) + 1 0.000 0.000 0.000 0.000 immutable.py:138(ImmutableSparseMatrix) + 1 0.000 0.000 0.000 0.000 gzip.py:75(_PaddedFile) + 1 0.000 0.000 0.000 0.000 rnn.py:1018(RNNCellBase) + 1 0.000 0.000 0.000 0.000 mapped_queue.py:92(MappedQueue) + 1 0.000 0.000 0.000 0.000 _kdtree.py:287(node) + 1 0.000 0.000 0.000 0.000 rnn.py:282(RNNBase) + 1 0.000 0.000 0.000 0.000 {built-in method atexit.unregister} + 1 0.000 0.000 0.000 0.000 activation.py:1384(Softmin) + 1 0.000 0.000 0.000 0.000 _multivariate.py:1259(matrix_normal_frozen) + 1 0.000 0.000 0.000 0.000 _atfork.py:1() + 1 0.000 0.000 0.000 0.000 polyoptions.py:575(Modulus) + 1 0.000 0.000 0.000 0.000 matrices.py:344(MatrixSubspaces) + 8 0.000 0.000 0.000 0.000 methods.py:68() + 1 0.000 0.000 0.000 0.000 transforms.py:543(PowerTransform) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3667(__init__) + 1 0.000 0.000 0.000 0.000 exceptions.py:11(SymPyDeprecationWarning) + 1 0.000 0.000 0.000 0.000 pydoc.py:1129(__init__) + 4 0.000 0.000 0.000 0.000 timedeltas.py:65(_field_accessor) + 1 0.000 0.000 0.000 0.000 dataloader.py:566(_BaseDataLoaderIter) + 1 0.000 0.000 0.000 0.000 tzinfo.py:76(StaticTzInfo) + 1 0.000 0.000 0.000 0.000 more.py:2702(run_length) + 1 0.000 0.000 0.000 0.000 importer.py:183(OrderedImporter) + 1 0.000 0.000 0.000 0.000 _differentiable_functions.py:11(ScalarFunction) + 1 0.000 0.000 0.000 0.000 numbers.py:3871(Exp1) + 1 0.000 0.000 0.000 0.000 __init__.py:922(PathDistribution) + 1 0.000 0.000 0.000 0.000 numbers.py:1338(partition) + 1 0.000 0.000 0.000 0.000 hyper.py:925(HyperRep_asin1) + 8 0.000 0.000 0.000 0.000 reduction.py:27(register) + 1 0.000 0.000 0.000 0.000 pytables.py:268(FilterBinOp) + 1 0.000 0.000 0.000 0.000 transports.py:72(WriteTransport) + 1 0.000 0.000 0.000 0.000 trigonometric.py:3019(asec) + 1 0.000 0.000 0.000 0.000 __init__.py:1285(Popen) + 1 0.000 0.000 0.000 0.000 subprocess.py:126(CalledProcessError) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:9398(gennorm_gen) + 1 0.000 0.000 0.000 0.000 traceback.py:247(FrameSummary) + 1 0.000 0.000 0.000 0.000 gamma_functions.py:858(loggamma) + 1 0.000 0.000 0.000 0.000 utils.py:11(WeightedQuantizedModule) + 1 0.000 0.000 0.000 0.000 tz.py:332(__init__) + 1 0.000 0.000 0.000 0.000 tz.py:1167(_tzicalvtz) + 12 0.000 0.000 0.000 0.000 inverselaplace.py:17(__init__) + 1 0.000 0.000 0.000 0.000 parse.py:361(_fix_result_transcoding) + 1 0.000 0.000 0.000 0.000 __init__.py:1079(QInt32Storage) + 1 0.000 0.000 0.000 0.000 rnn.py:30(PackedSequence) + 12 0.000 0.000 0.000 0.000 _pep440.py:392(_parse_letter_version) + 1 0.000 0.000 0.000 0.000 dense.py:24(DenseMatrix) + 1 0.000 0.000 0.000 0.000 function.py:943(WildFunction) + 2 0.000 0.000 0.000 0.000 __init__.py:988(__init__) + 16 0.000 0.000 0.000 0.000 arraypad.py:521(_pad_dispatcher) + 1 0.000 0.000 0.000 0.000 fork_exec.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:1099(QUInt2x4Storage) + 1 0.000 0.000 0.000 0.000 _optimize.py:2316(Brent) + 1 0.000 0.000 0.000 0.000 _trustregion.py:29(BaseQuadraticSubproblem) + 1 0.000 0.000 0.000 0.000 _internal.py:248(_ctypes) + 1 0.000 0.000 0.000 0.000 doccer.py:1() + 1 0.000 0.000 0.000 0.000 response.py:14(addbase) + 1 0.000 0.000 0.000 0.000 reportviews.py:178(__init__) + 1 0.000 0.000 0.000 0.000 config.py:22(PyPIRCCommand) + 1 0.000 0.000 0.000 0.000 unix_events.py:1220(MultiLoopChildWatcher) + 1 0.000 0.000 0.000 0.000 discovery.py:138(PackageFinder) + 1 0.000 0.000 0.000 0.000 coreviews.py:164(UnionAdjacency) + 1 0.000 0.000 0.000 0.000 half_cauchy.py:12(HalfCauchy) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:925(SupportsIndex) + 1 0.000 0.000 0.000 0.000 operations.py:464(LatticeOp) + 1 0.000 0.000 0.000 0.000 plot.py:672(LineOver1DRangeSeries) + 1 0.000 0.000 0.000 0.000 homomorphisms.py:444(MatrixHomomorphism) + 1 0.000 0.000 0.000 0.000 pool.py:217(MemmappingPool) + 1 0.000 0.000 0.000 0.000 NET.py:25(NETWriter) + 1 0.000 0.000 0.000 0.000 blocks.py:1373(EABackedBlock) + 1 0.000 0.000 0.000 0.000 suite.py:92(TestSuite) + 1 0.000 0.000 0.000 0.000 _base.py:569(Executor) + 1 0.000 0.000 0.000 0.000 calendar.py:150(Calendar) + 1 0.000 0.000 0.000 0.000 trigonometric.py:1981(sinc) + 1 0.000 0.000 0.000 0.000 kronecker.py:87(KroneckerProduct) + 1 0.000 0.000 0.000 0.000 _ni_support.py:1() + 1 0.000 0.000 0.000 0.000 UAI.py:294(UAIWriter) + 1 0.000 0.000 0.000 0.000 __init__.py:283(SymFloat) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:6660(t_gen) + 1 0.000 0.000 0.000 0.000 _ode.py:593(complex_ode) + 1 0.000 0.000 0.000 0.000 {method 'close' of 'select.epoll' objects} + 1 0.000 0.000 0.000 0.000 fields.py:104(FracField) + 1 0.000 0.000 0.000 0.000 __init__.py:969(ComplexDoubleStorage) + 1 0.000 0.000 0.000 0.000 _qmc.py:1301(Sobol) + 3 0.000 0.000 0.000 0.000 rszeta.py:54(__init__) + 1 0.000 0.000 0.000 0.000 six.py:205(load_module) + 1 0.000 0.000 0.000 0.000 accessor.py:44(PandasDelegate) + 9 0.000 0.000 0.000 0.000 core.py:1465() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:9555(crystalball_gen) + 1 0.000 0.000 0.000 0.000 nvtx.py:6(_NVTXStub) + 6 0.000 0.000 0.000 0.000 memoization.py:4(recurrence_memo) + 1 0.000 0.000 0.000 0.000 fglmtools.py:1() + 6 0.000 0.000 0.000 0.000 case.py:425(addTypeEqualityFunc) + 2 0.000 0.000 0.000 0.000 {method 'tobytes' of 'numpy.generic' objects} + 1 0.000 0.000 0.000 0.000 fancysets.py:72(Naturals) + 1 0.000 0.000 0.000 0.000 flow_matrix.py:35(InverseLaplacian) + 1 0.000 0.000 0.000 0.000 _interpolate.py:795(_PPolyBase) + 1 0.000 0.000 0.000 0.000 engines.py:47(AbstractEngine) + 1 0.000 0.000 0.000 0.000 fancysets.py:23(Rationals) + 1 0.000 0.000 0.000 0.000 ssl.py:456(_ASN1Object) + 1 0.000 0.000 0.000 0.000 _differentiable_functions.py:290(VectorFunction) + 1 0.000 0.000 0.000 0.000 numpy.py:454(JaxPrinter) + 1 0.000 0.000 0.000 0.000 _ode.py:1110(dopri5) + 1 0.000 0.000 0.000 0.000 pytables.py:2565(DataIndexableCol) + 6 0.000 0.000 0.000 0.000 core.py:3380() + 2 0.000 0.000 0.000 0.000 _parser.py:13(Node) + 14 0.000 0.000 0.000 0.000 mock.py:1971() + 1 0.000 0.000 0.000 0.000 activation.py:18(Threshold) + 1 0.000 0.000 0.000 0.000 _cubic.py:157(PchipInterpolator) + 1 0.000 0.000 0.000 0.000 _typing.py:210(_DataPipeType) + 10 0.000 0.000 0.000 0.000 _strptime.py:210() + 1 0.000 0.000 0.000 0.000 activation.py:52(Hardswish) + 1 0.000 0.000 0.000 0.000 fancy_getopt.py:385() + 1 0.000 0.000 0.000 0.000 __init__.py:99(version_info) + 1 0.000 0.000 0.000 0.000 string.py:57(Template) + 1 0.000 0.000 0.000 0.000 parquet.py:110(BaseImpl) + 4 0.000 0.000 0.000 0.000 __init__.py:428(__init__) + 1 0.000 0.000 0.000 0.000 zeta_functions.py:212(polylog) + 1 0.000 0.000 0.000 0.000 pytables.py:520(PyTablesExpr) + 1 0.000 0.000 0.000 0.000 binrel.py:135(AppliedBinaryRelation) + 1 0.000 0.000 0.000 0.000 lkj_cholesky.py:19(LKJCholesky) + 1 0.000 0.000 0.000 0.000 configparser.py:298(ParsingError) + 1 0.000 0.000 0.000 0.000 _common.py:127(_TZifHeader) + 1 0.000 0.000 0.000 0.000 _pyio.py:1417(BufferedRandom) + 1 0.000 0.000 0.000 0.000 {method 'title' of 'str' objects} + 7 0.000 0.000 0.000 0.000 pathlib.py:94(join_parsed_parts) + 1 0.000 0.000 0.000 0.000 ops.py:205(Op) + 1 0.000 0.000 0.000 0.000 more.py:850(bucket) + 1 0.000 0.000 0.000 0.000 filelist.py:17(FileList) + 1 0.000 0.000 0.000 0.000 error_functions.py:1246(expint) + 1 0.000 0.000 0.000 0.000 conv_relu.py:69(ConvReLU2d) + 1 0.000 0.000 0.000 0.000 reductions.py:49(SharedCache) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3600(ortho_group_gen) + 1 0.000 0.000 0.000 0.000 core.py:125() + 1 0.000 0.000 0.000 0.000 rnn.py:948(RNNCell) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:9273(wald_gen) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:222(PoolManagerMixin) + 1 0.000 0.000 0.000 0.000 _pyio.py:689(BufferedIOBase) + 1 0.000 0.000 0.000 0.000 _pyio.py:795(_BufferedIOMixin) + 1 0.000 0.000 0.000 0.000 transforms.py:634(TanhTransform) + 1 0.000 0.000 0.000 0.000 worker.py:124(_ResumeIteration) + 1 0.000 0.000 0.000 0.000 throughput_benchmark.py:27(ExecutionStats) + 1 0.000 0.000 0.000 0.000 hyper.py:944(HyperRep_asin2) + 2 0.000 0.000 0.000 0.000 {method 'fileno' of '_io.TextIOWrapper' objects} + 1 0.000 0.000 0.000 0.000 polyclasses.py:10(GenericPoly) + 1 0.000 0.000 0.000 0.000 core.py:4591(PrecededBy) + 1 0.000 0.000 0.000 0.000 connection.py:347(Connection) + 1 0.000 0.000 0.000 0.000 special.py:68(GenericZeroMatrix) + 3 0.000 0.000 0.000 0.000 index_tricks.py:323(__init__) + 13 0.000 0.000 0.000 0.000 utils.py:35(wrapper) + 1 0.000 0.000 0.000 0.000 indexing.py:31(GroupByIndexingMixin) + 1 0.000 0.000 0.000 0.000 accessor.py:15(DirNamesMixin) + 1 0.000 0.000 0.000 0.000 _basinhopping.py:180(AdaptiveStepsize) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:6768(nct_gen) + 1 0.000 0.000 0.000 0.000 single.py:1440(HomogeneousCoeffSubsDepDivIndep) + 1 0.000 0.000 0.000 0.000 core.py:2499(CaselessKeyword) + 1 0.000 0.000 0.000 0.000 _qmc.py:1024(LatinHypercube) + 1 0.000 0.000 0.000 0.000 gamma_functions.py:222(lowergamma) + 1 0.000 0.000 0.000 0.000 parabola.py:20(Parabola) + 1 0.000 0.000 0.000 0.000 elliptic_integrals.py:188(elliptic_e) + 1 0.000 0.000 0.000 0.000 {built-in method torch._C._tracer_warn_use_python} + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:8467(triang_gen) + 1 0.000 0.000 0.000 0.000 graphml.py:381(GraphML) + 4 0.000 0.000 0.000 0.000 _pyio.py:1621(__del__) + 1 0.000 0.000 0.000 0.000 padding.py:31(ConstantPad1d) + 4 0.000 0.000 0.000 0.000 _ops.py:129(py_impl) + 1 0.000 0.000 0.000 0.000 queues.py:30(Queue) + 1 0.000 0.000 0.000 0.000 floating.py:140(Float32Dtype) + 2 0.000 0.000 0.000 0.000 {built-in method maketrans} + 1 0.000 0.000 0.000 0.000 socket.py:211(_GiveupOnSendfile) + 1 0.000 0.000 0.000 0.000 linear.py:134(Bilinear) + 1 0.000 0.000 0.000 0.000 _internal.py:216(_getintp_ctype) + 1 0.000 0.000 0.000 0.000 sasreader.py:35(ReaderBase) + 1 0.000 0.000 0.000 0.000 orderings.py:138(InverseOrder) + 3 0.000 0.000 0.000 0.000 series.py:198(_coerce_method) + 2 0.000 0.000 0.000 0.000 warnings.py:440(__init__) + 1 0.000 0.000 0.000 0.000 pdb.py:125(_ScriptTarget) + 1 0.000 0.000 0.000 0.000 splitter_base.py:81(FxNetAccNodesFinder) + 1 0.000 0.000 0.000 0.000 __init__.py:884(legacy_normalize) + 1 0.000 0.000 0.000 0.000 embedding_ops.py:75(EmbeddingBag) + 1 0.000 0.000 0.000 0.000 conv.py:19(Conv1d) + 1 0.000 0.000 0.000 0.000 _multivariate.py:5152(__init__) + 1 0.000 0.000 0.000 0.000 __future__.py:81(_Feature) + 1 0.000 0.000 0.000 0.000 core.py:4066(MatchFirst) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:889(SupportsInt) + 1 0.000 0.000 0.000 0.000 inverse.py:8(Inverse) + 1 0.000 0.000 0.000 0.000 info.py:450(DataFrameInfo) + 1 0.000 0.000 0.000 0.000 queues.py:294(JoinableQueue) + 1 0.000 0.000 0.000 0.000 hyper.py:884(HyperRep_log1) + 10 0.000 0.000 0.000 0.000 symbolic_opset11.py:84(_apply_params) + 1 0.000 0.000 0.000 0.000 _zeros_py.py:1042(TOMS748Solver) + 1 0.000 0.000 0.000 0.000 trigonometric.py:3377(atan2) + 1 0.000 0.000 0.000 0.000 filesystem.py:381(S3FSWrapper) + 1 0.000 0.000 0.000 0.000 package_importer.py:662(_PackageNode) + 1 0.000 0.000 0.000 0.000 _parser.py:394(_ymd) + 1 0.000 0.000 0.000 0.000 pickle.py:200(_Framer) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:412(AngleAddr) + 1 0.000 0.000 0.000 0.000 conv_add.py:9(ConvAdd2d) + 1 0.000 0.000 0.000 0.000 kcomponents.py:245(AntiAtlasView) + 1 0.000 0.000 0.000 0.000 FactorGraph.py:15(FactorGraph) + 1 0.000 0.000 0.000 0.000 arrayop.py:422(Flatten) + 1 0.000 0.000 0.000 0.000 matexpr.py:658(MatrixSymbol) + 1 0.000 0.000 0.000 0.000 gaussiandomains.py:244(GaussianDomain) + 1 0.000 0.000 0.000 0.000 autocast_mode.py:6(autocast) + 1 0.000 0.000 0.000 0.000 transpose.py:7(Transpose) + 1 0.000 0.000 0.000 0.000 lazy.py:71(LazyList) + 1 0.000 0.000 0.000 0.000 headerregistry.py:260(UnstructuredHeader) + 1 0.000 0.000 0.000 0.000 singleton.py:9(SingletonRegistry) + 1 0.000 0.000 0.000 0.000 extras.py:1567(__init__) + 1 0.000 0.000 0.000 0.000 activation.py:244(ReLU6) + 1 0.000 0.000 0.000 0.000 _deprecation.py:1() + 1 0.000 0.000 0.000 0.000 _infra.py:129(Location) + 1 0.000 0.000 0.000 0.000 single.py:1048(SecondNonlinearAutonomousConserved) + 1 0.000 0.000 0.000 0.000 contains.py:8(Contains) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1297(chi_gen) + 1 0.000 0.000 0.000 0.000 plistlib.py:456(_BinaryPlistParser) + 2 0.000 0.000 0.000 0.000 utils.py:51(_has_surrogates) + 1 0.000 0.000 0.000 0.000 conv.py:342(ConvTranspose3d) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:5951(kappa4_gen) + 1 0.000 0.000 0.000 0.000 core.py:106() + 1 0.000 0.000 0.000 0.000 _fit.py:41(FitResult) + 1 0.000 0.000 0.000 0.000 numbers.py:3159(NegativeOne) + 1 0.000 0.000 0.000 0.000 _globals.py:80(__new__) + 1 0.000 0.000 0.000 0.000 ctypeslib.py:183(_ndptr) + 1 0.000 0.000 0.000 0.000 expressions.py:55(Context) + 1 0.000 0.000 0.000 0.000 _memmapping_reducer.py:119(__init__) + 1 0.000 0.000 0.000 0.000 data_parallel.py:42(DataParallel) + 1 0.000 0.000 0.000 0.000 cnf.py:15(Literal) + 1 0.000 0.000 0.000 0.000 npyio.py:42(BagObj) + 1 0.000 0.000 0.000 0.000 format.py:1331(GenericArrayFormatter) + 4 0.000 0.000 0.000 0.000 {built-in method posix.isatty} + 1 0.000 0.000 0.000 0.000 six.py:219(is_package) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:6477(ncx2_gen) + 3 0.000 0.000 0.000 0.000 _pyio.py:1787(readable) + 2 0.000 0.000 0.000 0.000 paths.py:1113(register_path_fn) + 1 0.000 0.000 0.000 0.000 distance.py:8(PairwiseDistance) + 14 0.000 0.000 0.000 0.000 dataclasses.py:179(__repr__) + 1 0.000 0.000 0.000 0.000 core.py:191() + 1 0.000 0.000 0.000 0.000 _ops.py:115(PyOperator) + 1 0.000 0.000 0.000 0.000 solvers.py:23(RawMatrix) + 1 0.000 0.000 0.000 0.000 residue_ntheory.py:1020(mobius) + 1 0.000 0.000 0.000 0.000 expr.py:3929(AtomicExpr) + 1 0.000 0.000 0.000 0.000 slice.py:31(MatrixSlice) + 1 0.000 0.000 0.000 0.000 __init__.py:299(VersionConflict) + 1 0.000 0.000 0.000 0.000 _dual_annealing.py:128(EnergyState) + 2 0.000 0.000 0.000 0.000 _tokenizer.py:9(Token) + 9 0.000 0.000 0.000 0.000 _pyio.py:1534() + 1 0.000 0.000 0.000 0.000 modules.py:159(ModuleElement) + 1 0.000 0.000 0.000 0.000 settings.py:1() + 1 0.000 0.000 0.000 0.000 function.py:252(_HookMixin) + 1 0.000 0.000 0.000 0.000 weibull.py:11(Weibull) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:8353(trapezoid_gen) + 1 0.000 0.000 0.000 0.000 core.py:4177(Each) + 1 0.000 0.000 0.000 0.000 Independencies.py:6(Independencies) + 3 0.000 0.000 0.000 0.000 datetime.py:2317(_create) + 1 0.000 0.000 0.000 0.000 deprecation.py:27(_DeprecationHelperStr) + 1 0.000 0.000 0.000 0.000 sets.py:2201(DisjointUnion) + 1 0.000 0.000 0.000 0.000 trigonometric.py:43(TrigonometricFunction) + 1 0.000 0.000 0.000 0.000 jiterator.py:10(_CodeParser) + 1 0.000 0.000 0.000 0.000 _typing.py:194(BaseBuffer) + 1 0.000 0.000 0.000 0.000 pytables.py:4625(AppendableSeriesTable) + 3 0.000 0.000 0.000 0.000 __init__.py:43(private_class) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:454(hypergeom_gen) + 1 0.000 0.000 0.000 0.000 base.py:102(PandasObject) + 1 0.000 0.000 0.000 0.000 _sources.py:111(ParsedDef) + 1 0.000 0.000 0.000 0.000 getlimits.py:32(MachArLike) + 1 0.000 0.000 0.000 0.000 base.py:149(NoNewAttributesMixin) + 2 0.000 0.000 0.000 0.000 {method 'read' of '_io.StringIO' objects} + 1 0.000 0.000 0.000 0.000 runner.py:30(TextTestResult) + 1 0.000 0.000 0.000 0.000 mock.py:288(_SentinelObject) + 1 0.000 0.000 0.000 0.000 inference.py:262(PropKB) + 1 0.000 0.000 0.000 0.000 _multivariate.py:788(multivariate_normal_frozen) + 1 0.000 0.000 0.000 0.000 concat.py:384(_Concatenator) + 1 0.000 0.000 0.000 0.000 polynomials.py:969(hermite) + 1 0.000 0.000 0.000 0.000 _multivariate.py:1417(dirichlet_gen) + 1 0.000 0.000 0.000 0.000 index_tricks.py:257(__init__) + 1 0.000 0.000 0.000 0.000 _nonlin.py:374(Jacobian) + 1 0.000 0.000 0.000 0.000 CanonicalDistribution.py:8(CanonicalDistribution) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:8019(semicircular_gen) + 1 0.000 0.000 0.000 0.000 pyfunctorch.py:51(FuncTorchInterpreter) + 1 0.000 0.000 0.000 0.000 NoisyOrModel.py:8(NoisyOrModel) + 1 0.000 0.000 0.000 0.000 plot.py:1211(BaseBackend) + 1 0.000 0.000 0.000 0.000 __init__.py:215(UTC) + 1 0.000 0.000 0.000 0.000 hyper.py:1053(HyperRep_cosasin) + 1 0.000 0.000 0.000 0.000 random.py:215(__init_subclass__) + 1 0.000 0.000 0.000 0.000 _parseaddr.py:512(AddressList) + 1 0.000 0.000 0.000 0.000 ipc.py:34(RecordBatchStreamReader) + 1 0.000 0.000 0.000 0.000 pooling.py:497(AvgPool1d) + 1 0.000 0.000 0.000 0.000 __init__.py:35(_SupportedQEnginesProp) + 1 0.000 0.000 0.000 0.000 headerregistry.py:276(DateHeader) + 1 0.000 0.000 0.000 0.000 sequences.py:1021(SeqAdd) + 1 0.000 0.000 0.000 0.000 pool.py:921(ThreadPool) + 1 0.000 0.000 0.000 0.000 _memmapping_reducer.py:512(TemporaryResourcesManager) + 1 0.000 0.000 0.000 0.000 polynomials.py:1065(laguerre) + 1 0.000 0.000 0.000 0.000 _encoded_words.py:73(_QByteMap) + 1 0.000 0.000 0.000 0.000 __init__.py:101(LZ4FrameCompressor) + 1 0.000 0.000 0.000 0.000 gamma_functions.py:1053(digamma) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:29(binom_gen) + 1 0.000 0.000 0.000 0.000 apply.py:1190(GroupByApply) + 1 0.000 0.000 0.000 0.000 headerregistry.py:402(MIMEVersionHeader) + 1 0.000 0.000 0.000 0.000 ssl.py:159(TLSVersion) + 1 0.000 0.000 0.000 0.000 streams.py:395(StreamReader) + 1 0.000 0.000 0.000 0.000 trigonometric.py:3207(acsc) + 1 0.000 0.000 0.000 0.000 _python_dispatch.py:14(TorchDispatchMode) + 1 0.000 0.000 0.000 0.000 core.py:2220(_PendingSkip) + 1 0.000 0.000 0.000 0.000 sets.py:2132(SymmetricDifference) + 1 0.000 0.000 0.000 0.000 pycode.py:537(PythonCodePrinter) + 1 0.000 0.000 0.000 0.000 fourier.py:472(FiniteFourierSeries) + 1 0.000 0.000 0.000 0.000 index_tricks.py:531(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:1127() + 1 0.000 0.000 0.000 0.000 _interface.py:740(_AdjointMatrixOperator) + 1 0.000 0.000 0.000 0.000 _atfork.py:15(_register) + 3 0.000 0.000 0.000 0.000 _parser.py:286(seek) + 1 0.000 0.000 0.000 0.000 _docscrape.py:599(ClassDoc) + 1 0.000 0.000 0.000 0.000 dataframes.py:60(Capture) + 1 0.000 0.000 0.000 0.000 triangulation.py:5(Complex) + 1 0.000 0.000 0.000 0.000 error_functions.py:2645(_erfs) + 1 0.000 0.000 0.000 0.000 experimental_lambdify.py:81(vectorized_lambdify) + 1 0.000 0.000 0.000 0.000 ssl.py:185(_TLSAlertType) + 4 0.000 0.000 0.000 0.000 polynomial.py:1217(_coeffs) + 1 0.000 0.000 0.000 0.000 runners.py:21(Runner) + 1 0.000 0.000 0.000 0.000 autotimeit.py:1() + 1 0.000 0.000 0.000 0.000 indexing.py:287(GroupByNthSelector) + 1 0.000 0.000 0.000 0.000 numbers.py:1241(genocchi) + 1 0.000 0.000 0.000 0.000 streams.py:181(StreamReaderProtocol) + 1 0.000 0.000 0.000 0.000 mock.py:2483(__new__) + 1 0.000 0.000 0.000 0.000 LinearGaussianBayesianNetwork.py:11(LinearGaussianBayesianNetwork) + 1 0.000 0.000 0.000 0.000 fancysets.py:165(Integers) + 4 0.000 0.000 0.000 0.000 generate.py:61() + 1 0.000 0.000 0.000 0.000 pyfunctorch.py:83(VmapInterpreter) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:2371(truncweibull_min_gen) + 1 0.000 0.000 0.000 0.000 rnn.py:1043(GRUCell) + 1 0.000 0.000 0.000 0.000 reduction.py:251(AbstractReducer) + 4 0.000 0.000 0.000 0.000 function.py:613(_iter_filter) + 1 0.000 0.000 0.000 0.000 pydot.py:692(Edge) + 1 0.000 0.000 0.000 0.000 bessel.py:1500(airyaiprime) + 6 0.000 0.000 0.000 0.000 conflict.py:37() + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:492(LokyBackend) + 1 0.000 0.000 0.000 0.000 polynomials.py:432(chebyshevt) + 1 0.000 0.000 0.000 0.000 :806(fsencode) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:4083(invgamma_gen) + 1 0.000 0.000 0.000 0.000 _ode.py:760(IntegratorConcurrencyError) + 1 0.000 0.000 0.000 0.000 gammasimp.py:467(_rf) + 10 0.000 0.000 0.000 0.000 ctx_iv.py:355(_wrap_mpi_function) + 1 0.000 0.000 0.000 0.000 case.py:1446(_SubTest) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:6284(moyal_gen) + 6 0.000 0.000 0.000 0.000 _type_aliases.py:92() + 1 0.000 0.000 0.000 0.000 index_tricks.py:110(nd_grid) + 1 0.000 0.000 0.000 0.000 __init__.py:17(Future) + 1 0.000 0.000 0.000 0.000 pool.py:837(IMapIterator) + 1 0.000 0.000 0.000 0.000 JointProbabilityDistribution.py:11(JointProbabilityDistribution) + 1 0.000 0.000 0.000 0.000 headerregistry.py:327(AddressHeader) + 1 0.000 0.000 0.000 0.000 dataset.py:181(TensorDataset) + 1 0.000 0.000 0.000 0.000 function.py:410(Function) + 1 0.000 0.000 0.000 0.000 more.py:2267(islice_extended) + 4 0.000 0.000 0.000 0.000 dataclasses.py:565() + 1 0.000 0.000 0.000 0.000 numbers.py:267(Rational) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:5730(gibrat_gen) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:265(nbinom_gen) + 8 0.000 0.000 0.000 0.000 _jit_internal.py:1102(is_scripting) + 1 0.000 0.000 0.000 0.000 datetimes.py:115() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1934(fatiguelife_gen) + 1 0.000 0.000 0.000 0.000 runtests.py:1358(SymPyDocTests) + 1 0.000 0.000 0.000 0.000 rolling.py:2841(RollingGroupby) + 1 0.000 0.000 0.000 0.000 line.py:1875(LinearEntity2D) + 1 0.000 0.000 0.000 0.000 formal.py:964(Coeff) + 1 0.000 0.000 0.000 0.000 facts.py:471(FactKB) + 1 0.000 0.000 0.000 0.000 _memory_profiler.py:54(_Storage) + 1 0.000 0.000 0.000 0.000 generate.py:38(Sieve) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:8543(truncexpon_gen) + 1 0.000 0.000 0.000 0.000 _differentialevolution.py:1567(_ConstraintWrapper) + 3 0.000 0.000 0.000 0.000 {built-in method _codecs.lookup} + 1 0.000 0.000 0.000 0.000 _check.py:8(AttributeTypeIsSupportedChecker) + 2 0.000 0.000 0.000 0.000 libmpf.py:345(to_int) + 1 0.000 0.000 0.000 0.000 argparse.py:790(Action) + 1 0.000 0.000 0.000 0.000 numbers.py:4026(Pi) + 1 0.000 0.000 0.000 0.000 modules.py:1644(PowerBasisElement) + 1 0.000 0.000 0.000 0.000 numbers.py:948(euler) + 1 0.000 0.000 0.000 0.000 dataframes.py:371(CaptureDataFrameWithDataPipeOps) + 1 0.000 0.000 0.000 0.000 buffer.py:14(PandasBuffer) + 1 0.000 0.000 0.000 0.000 config_init.py:340(is_terminal) + 1 0.000 0.000 0.000 0.000 pickletools.py:2550(_Example) + 1 0.000 0.000 0.000 0.000 gamma_functions.py:1147(trigamma) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:7613(rdist_gen) + 1 0.000 0.000 0.000 0.000 {built-in method torch._C._jit_init} + 3 0.000 0.000 0.000 0.000 wrappers.py:204() + 1 0.000 0.000 0.000 0.000 pathlib.py:231(_PosixFlavour) + 1 0.000 0.000 0.000 0.000 concat.py:353(JoinUnit) + 1 0.000 0.000 0.000 0.000 _decorators.py:432(Substitution) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1165(fisk_gen) + 1 0.000 0.000 0.000 0.000 recipes.py:311(UnequalIterablesError) + 1 0.000 0.000 0.000 0.000 _multivariate.py:937(matrix_normal_gen) + 1 0.000 0.000 0.000 0.000 factorials.py:494(RisingFactorial) + 5 0.000 0.000 0.000 0.000 expr.py:149(_hashable_content) + 1 0.000 0.000 0.000 0.000 callable.py:18(MapperMapDataPipe) + 1 0.000 0.000 0.000 0.000 padding.py:173(_ReflectionPadNd) + 1 0.000 0.000 0.000 0.000 _VF.py:22(__init__) + 1 0.000 0.000 0.000 0.000 hadamard.py:322(HadamardPower) + 1 0.000 0.000 0.000 0.000 records.py:223(record) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:3212(gengamma_gen) + 1 0.000 0.000 0.000 0.000 pydoc.py:1855() + 1 0.000 0.000 0.000 0.000 frontend.py:519(WithItemBuilder) + 1 0.000 0.000 0.000 0.000 invalid.py:1() + 1 0.000 0.000 0.000 0.000 mathml.py:20(MathMLPrinterBase) + 1 0.000 0.000 0.000 0.000 core.py:2863(Char) + 1 0.000 0.000 0.000 0.000 grad_mode.py:258(_force_original_view_tracking) + 1 0.000 0.000 0.000 0.000 filelist.py:275(_UniqueDirs) + 1 0.000 0.000 0.000 0.000 activation.py:617(GLU) + 1 0.000 0.000 0.000 0.000 combining.py:117(_ForkerIterDataPipe) + 2 0.000 0.000 0.000 0.000 config.py:579(_select_options) + 1 0.000 0.000 0.000 0.000 edge_kcomponents.py:239(EdgeComponentAuxGraph) + 2 0.000 0.000 0.000 0.000 multidimensional.py:81(__init__) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:437(alpha_gen) + 1 0.000 0.000 0.000 0.000 _type_utils.py:293() + 1 0.000 0.000 0.000 0.000 _quadrature.py:157(cache_decorator) + 1 0.000 0.000 0.000 0.000 profiler.py:553(ExecutionGraphObserver) + 1 0.000 0.000 0.000 0.000 bessel.py:1821(marcumq) + 1 0.000 0.000 0.000 0.000 arrayterator.py:16(Arrayterator) + 1 0.000 0.000 0.000 0.000 miscellaneous.py:864(Rem) + 1 0.000 0.000 0.000 0.000 activation.py:1431(Softmax) + 1 0.000 0.000 0.000 0.000 relational.py:1136(LessThan) + 1 0.000 0.000 0.000 0.000 conv_fused.py:590(ConvReLU2d) + 1 0.000 0.000 0.000 0.000 _multivariate.py:4082(__init__) + 1 0.000 0.000 0.000 0.000 LinearGaussianCPD.py:9(LinearGaussianCPD) + 1 0.000 0.000 0.000 0.000 ewm.py:918(OnlineExponentialMovingWindow) + 1 0.000 0.000 0.000 0.000 _rules.py:42(_MissingCustomSymbolicFunction) + 1 0.000 0.000 0.000 0.000 client.py:1402(HTTPSConnection) + 1 0.000 0.000 0.000 0.000 npyio.py:106(NpzFile) + 1 0.000 0.000 0.000 0.000 polynomials.py:858(assoc_legendre) + 1 0.000 0.000 0.000 0.000 calendar.py:74() + 1 0.000 0.000 0.000 0.000 getlimits.py:364(finfo) + 1 0.000 0.000 0.000 0.000 bn_relu.py:48(BNReLU3d) + 1 0.000 0.000 0.000 0.000 __init__.py:412(Deprecated) + 1 0.000 0.000 0.000 0.000 core.py:5373(Combine) + 1 0.000 0.000 0.000 0.000 decorator.py:311(wrapper) + 1 0.000 0.000 0.000 0.000 loader.py:77(__init__) + 1 0.000 0.000 0.000 0.000 _pep440.py:149(__ge__) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:6567(ncf_gen) + 1 0.000 0.000 0.000 0.000 unix_events.py:988(BaseChildWatcher) + 1 0.000 0.000 0.000 0.000 batchnorm.py:48(BatchNorm2d) + 1 0.000 0.000 0.000 0.000 hyper.py:1075(HyperRep_sinasin) + 1 0.000 0.000 0.000 0.000 request.py:1474(FileHandler) + 1 0.000 0.000 0.000 0.000 _backend.py:6(_ScipyBackend) + 1 0.000 0.000 0.000 0.000 _multivariate.py:4632(multivariate_hypergeom_gen) + 3 0.000 0.000 0.000 0.000 __init__.py:405() + 1 0.000 0.000 0.000 0.000 numpy_pickle_compat.py:14(hex_str) + 1 0.000 0.000 0.000 0.000 necompiler.py:71(ASTNode) + 4 0.000 0.000 0.000 0.000 mixins.py:51(_unary_method) + 1 0.000 0.000 0.000 0.000 _distn_infrastructure.py:275() + 1 0.000 0.000 0.000 0.000 overrides.py:1865(BaseTorchFunctionMode) + 1 0.000 0.000 0.000 0.000 __init__.py:41(PropModule) + 12 0.000 0.000 0.000 0.000 distance.py:1765() + 1 0.000 0.000 0.000 0.000 pydot.py:1698(Dot) + 2 0.000 0.000 0.000 0.000 _musllinux.py:16(_MuslVersion) + 1 0.000 0.000 0.000 0.000 resource_sharer.py:61(_ResourceSharer) + 1 0.000 0.000 0.000 0.000 connection.py:578(SocketListener) + 1 0.000 0.000 0.000 0.000 accessor.py:37(SparseAccessor) + 1 0.000 0.000 0.000 0.000 headerregistry.py:504(ContentTransferEncodingHeader) + 10 0.000 0.000 0.000 0.000 __init__.py:322(_wrap_deprecated_method) + 1 0.000 0.000 0.000 0.000 datapipes.py:18(DataFramesAsTuplesPipe) + 1 0.000 0.000 0.000 0.000 format.py:2019(EngFormatter) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:913(ReduceLROnPlateau) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:112(bernoulli_gen) + 1 0.000 0.000 0.000 0.000 zeta_functions.py:392(zeta) + 1 0.000 0.000 0.000 0.000 fused.py:13(ConvReLU1d) + 1 0.000 0.000 0.000 0.000 _diagnostic.py:40(ExportDiagnostic) + 1 0.000 0.000 0.000 0.000 ssl.py:227(_TLSMessageType) + 1 0.000 0.000 0.000 0.000 pytables.py:59(Term) + 1 0.000 0.000 0.000 0.000 linear.py:208(LazyLinear) + 1 0.000 0.000 0.000 0.000 single.py:1689(HomogeneousCoeffBest) + 1 0.000 0.000 0.000 0.000 _jit_internal.py:1395(_TensorExtractor) + 1 0.000 0.000 0.000 0.000 zipfile.py:622(LZMACompressor) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:4993(laplace_asymmetric_gen) + 1 0.000 0.000 0.000 0.000 activation.py:1515(LogSoftmax) + 6 0.000 0.000 0.000 0.000 transforms.py:234(_noconds_) + 1 0.000 0.000 0.000 0.000 relaxed_bernoulli.py:94(RelaxedBernoulli) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:2481(weibull_max_gen) + 2 0.000 0.000 0.000 0.000 __init__.py:120(DistutilsLoader) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1438(cosine_gen) + 1 0.000 0.000 0.000 0.000 loss.py:622(BCEWithLogitsLoss) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1494(dgamma_gen) + 2 0.000 0.000 0.000 0.000 _manylinux.py:69(_GLibCVersion) + 1 0.000 0.000 0.000 0.000 protocols.py:109(BufferedProtocol) + 1 0.000 0.000 0.000 0.000 loss.py:28(_WeightedLoss) + 1 0.000 0.000 0.000 0.000 :962(create_module) + 1 0.000 0.000 0.000 0.000 miscellaneous.py:683(Max) + 1 0.000 0.000 0.000 0.000 observer.py:1273(FixedQParamsObserver) + 1 0.000 0.000 0.000 0.000 _common.py:614(__init__) + 1 0.000 0.000 0.000 0.000 loss.py:104(NLLLoss) + 1 0.000 0.000 0.000 0.000 logistic_normal.py:8(LogisticNormal) + 1 0.000 0.000 0.000 0.000 cpp_backtrace.py:1() + 1 0.000 0.000 0.000 0.000 domainelement.py:6(DomainElement) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:2614(genpareto_gen) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1554(dweibull_gen) + 1 0.000 0.000 0.000 0.000 html.py:169(_HtmlFrameParser) + 1 0.000 0.000 0.000 0.000 {method 'close' of '_io.BufferedRandom' objects} + 1 0.000 0.000 0.000 0.000 pixelshuffle.py:8(PixelShuffle) + 2 0.000 0.000 0.000 0.000 pretty_symbology.py:235() + 6 0.000 0.000 0.000 0.000 profiler_util.py:348(_attr_formatter) + 1 0.000 0.000 0.000 0.000 worker.py:64(WorkerInfo) + 1 0.000 0.000 0.000 0.000 enumerative.py:370(MultisetPartitionTraverser) + 1 0.000 0.000 0.000 0.000 _type_utils.py:338() + 1 0.000 0.000 0.000 0.000 discretize.py:7(BaseDiscretizer) + 1 0.000 0.000 0.000 0.000 exprtools.py:816(Term) + 1 0.000 0.000 0.000 0.000 ellipse.py:1490(Circle) + 1 0.000 0.000 0.000 0.000 dense_ndim_array.py:163(MutableDenseNDimArray) + 1 0.000 0.000 0.000 0.000 polynomials.py:544(chebyshevu) + 1 0.000 0.000 0.000 0.000 elliptic_integrals.py:310(elliptic_pi) + 1 0.000 0.000 0.000 0.000 common.py:925(_BufferedWriter) + 1 0.000 0.000 0.000 0.000 _symbolic_trace.py:191(PHBase) + 5 0.000 0.000 0.000 0.000 six.py:186(_get_module) + 1 0.000 0.000 0.000 0.000 single.py:2671(SecondLinearBessel) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:3352(genhyperbolic_gen) + 1 0.000 0.000 0.000 0.000 tarfile.py:332(_Stream) + 1 0.000 0.000 0.000 0.000 activation.py:109(LeakyReLU) + 7 0.000 0.000 0.000 0.000 __init__.py:792(__init__) + 1 0.000 0.000 0.000 0.000 relational.py:895(GreaterThan) + 4 0.000 0.000 0.000 0.000 timeutils.py:53(timethis) + 1 0.000 0.000 0.000 0.000 autograd_function.py:536(CtxWithSavedTensors) + 1 0.000 0.000 0.000 0.000 base.py:1750(ExtensionScalarOpsMixin) + 1 0.000 0.000 0.000 0.000 adjoint.py:7(Adjoint) + 1 0.000 0.000 0.000 0.000 _pyio.py:1344(BufferedRWPair) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:4281(geninvgauss_gen) + 1 0.000 0.000 0.000 0.000 factorials.py:655(FallingFactorial) + 1 0.000 0.000 0.000 0.000 _policybase.py:281(_sanitize_header) + 1 0.000 0.000 0.000 0.000 _optimize.py:134(OptimizeResult) + 1 0.000 0.000 0.000 0.000 {method 'close' of '_io.TextIOWrapper' objects} + 1 0.000 0.000 0.000 0.000 string.py:188(Formatter) + 1 0.000 0.000 0.000 0.000 subprocess.py:118(Process) + 1 0.000 0.000 0.000 0.000 conv_relu.py:119(ConvReLU3d) + 1 0.000 0.000 0.000 0.000 constraints.py:362(_Interval) + 1 0.000 0.000 0.000 0.000 loss.py:786(MultiLabelMarginLoss) + 1 0.000 0.000 0.000 0.000 hyper.py:997(HyperRep_sqrts2) + 1 0.000 0.000 0.000 0.000 core.py:4501(AtStringStart) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:3926(halfnorm_gen) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:706(Value) + 1 0.000 0.000 0.000 0.000 fake_quantize.py:261(FixedQParamsFakeQuantize) + 1 0.000 0.000 0.000 0.000 core.py:126() + 9 0.000 0.000 0.000 0.000 digraph.py:1221(is_directed) + 12 0.000 0.000 0.000 0.000 {method 'groupdict' of 're.Match' objects} + 1 0.000 0.000 0.000 0.000 mathieu_functions.py:86(mathieuc) + 1 0.000 0.000 0.000 0.000 sequences.py:416(SeqExpr) + 1 0.000 0.000 0.000 0.000 polyoptions.py:727(Method) + 1 0.000 0.000 0.000 0.000 _ufunc_config.py:30() + 1 0.000 0.000 0.000 0.000 datetimes.py:108(FulldatetimeDict) + 6 0.000 0.000 0.000 0.000 _threadsafety.py:48(non_reentrant) + 1 0.000 0.000 0.000 0.000 miscellaneous.py:801(Min) + 1 0.000 0.000 0.000 0.000 conv_fused.py:695(ConvBnReLU3d) + 1 0.000 0.000 0.000 0.000 bessel.py:717(jn) + 1 0.000 0.000 0.000 0.000 memmap.py:22(memmap) + 1 0.000 0.000 0.000 0.000 NaiveBayes.py:5(NaiveBayes) + 1 0.000 0.000 0.000 0.000 more.py:3399(callback_iter) + 1 0.000 0.000 0.000 0.000 instancenorm.py:9(_InstanceNorm) + 5 0.000 0.000 0.000 0.000 _pyio.py:804(__init__) + 7 0.000 0.000 0.000 0.000 {built-in method from_iterable} + 1 0.000 0.000 0.000 0.000 complexes.py:696(arg) + 1 0.000 0.000 0.000 0.000 ElementTree.py:525(ElementTree) + 1 0.000 0.000 0.000 0.000 datapipes.py:111(ExampleAggregateAsDataFrames) + 1 0.000 0.000 0.000 0.000 feedparser.py:136(FeedParser) + 1 0.000 0.000 0.000 0.000 info.py:526(SeriesInfo) + 1 0.000 0.000 0.000 0.000 _utils.py:93(BasicEvaluation) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:870(Terminal) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:956(burr_gen) + 1 0.000 0.000 0.000 0.000 request.py:1061(ProxyBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 permutation.py:168(MatrixPermute) + 1 0.000 0.000 0.000 0.000 _ode.py:775(IntegratorBase) + 1 0.000 0.000 0.000 0.000 relational.py:738(Unequality) + 1 0.000 0.000 0.000 0.000 _warnings_errors.py:12(ConstantInputWarning) + 1 0.000 0.000 0.000 0.000 memory.py:189(MemorizedResult) + 1 0.000 0.000 0.000 0.000 polynomials.py:45(jacobi) + 1 0.000 0.000 0.000 0.000 pytables.py:4525(AppendableFrameTable) + 1 0.000 0.000 0.000 0.000 __init__.py:488(StringTemplateStyle) + 1 0.000 0.000 0.000 0.000 __init__.py:344(DistributionNotFound) + 1 0.000 0.000 0.000 0.000 polyoptions.py:326(Sort) + 1 0.000 0.000 0.000 0.000 elliptic_integrals.py:103(elliptic_f) + 1 0.000 0.000 0.000 0.000 pytables.py:4691(GenericTable) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1151(MeijerShiftD) + 7 0.000 0.000 0.000 0.000 {method 'count' of 'list' objects} + 2 0.000 0.000 0.000 0.000 _parser.py:32(Value) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:7523(powerlognorm_gen) + 1 0.000 0.000 0.000 0.000 integer.py:166(Int16Dtype) + 1 0.000 0.000 0.000 0.000 fancysets.py:238(Reals) + 1 0.000 0.000 0.000 0.000 net_min_base.py:58(_MinimizerSettingBase) + 1 0.000 0.000 0.000 0.000 core.py:190() + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:7963(recipinvgauss_gen) + 1 0.000 0.000 0.000 0.000 generate.py:419(primepi) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:382(geom_gen) + 1 0.000 0.000 0.000 0.000 batchnorm.py:78(BatchNorm3d) + 1 0.000 0.000 0.000 0.000 resource_tracker.py:54(ResourceTracker) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:827(poisson_gen) + 1 0.000 0.000 0.000 0.000 extensions.py:216(MonogenicFiniteExtension) + 1 0.000 0.000 0.000 0.000 mathieu_functions.py:24(mathieus) + 1 0.000 0.000 0.000 0.000 ipaddress.py:563(_BaseAddress) + 4 0.000 0.000 0.000 0.000 numbers.py:3140(__neg__) + 1 0.000 0.000 0.000 0.000 bdf.py:448(BdfDenseOutput) + 1 0.000 0.000 0.000 0.000 _polyint.py:17(_Interpolator1D) + 1 0.000 0.000 0.000 0.000 discovery.py:189(ModuleFinder) + 1 0.000 0.000 0.000 0.000 calendar.py:412(HTMLCalendar) + 1 0.000 0.000 0.000 0.000 complexes.py:1078(periodic_argument) + 1 0.000 0.000 0.000 0.000 channelshuffle.py:8(ChannelShuffle) + 1 0.000 0.000 0.000 0.000 serialization.py:286(_open_zipfile_writer_file) + 1 0.000 0.000 0.000 0.000 activation.py:199(MultiheadAttention) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1082(burr12_gen) + 1 0.000 0.000 0.000 0.000 error_functions.py:2272(FresnelIntegral) + 1 0.000 0.000 0.000 0.000 function.py:876(UndefinedFunction) + 1 0.000 0.000 0.000 0.000 _distn_infrastructure.py:3866(rv_sample) + 1 0.000 0.000 0.000 0.000 storage.py:1004(_LegacyStorage) + 1 0.000 0.000 0.000 0.000 suite.py:16(BaseTestSuite) + 1 0.000 0.000 0.000 0.000 function.py:16(FunctionCtx) + 1 0.000 0.000 0.000 0.000 temporalisomorphvf2.py:144(TimeRespectingDiGraphMatcher) + 1 0.000 0.000 0.000 0.000 util.py:164(UnboundedMemo) + 5 0.000 0.000 0.000 0.000 _ufunc_config.py:426(__init__) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:5133(levy_gen) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:6225(kappa3_gen) + 1 0.000 0.000 0.000 0.000 _pep440.py:165(LegacyVersion) + 1 0.000 0.000 0.000 0.000 _docs.py:1() + 1 0.000 0.000 0.000 0.000 gruntz.py:153(SubsSet) + 1 0.000 0.000 0.000 0.000 kind.py:156(__new__) + 9 0.000 0.000 0.000 0.000 :409(__subclasshook__) + 1 0.000 0.000 0.000 0.000 relational.py:1171(StrictLessThan) + 1 0.000 0.000 0.000 0.000 symbolic_shapes.py:505(IsNonOverlappingAndDenseIndicator) + 1 0.000 0.000 0.000 0.000 mathieu_functions.py:148(mathieusprime) + 1 0.000 0.000 0.000 0.000 _misc.py:558(__init__) + 1 0.000 0.000 0.000 0.000 factor_.py:2199(udivisor_sigma) + 1 0.000 0.000 0.000 0.000 isomorphvf2.py:147(GraphMatcher) + 1 0.000 0.000 0.000 0.000 assume.py:359(UndefinedPredicate) + 1 0.000 0.000 0.000 0.000 JunctionTree.py:8(JunctionTree) + 1 0.000 0.000 0.000 0.000 six.py:169(_SixMetaPathImporter) + 1 0.000 0.000 0.000 0.000 linalg.py:108(LinearAlgebraMethods) + 1 0.000 0.000 0.000 0.000 base.py:25(OdeSolver) + 1 0.000 0.000 0.000 0.000 quadrature.py:5(QuadratureRule) + 1 0.000 0.000 0.000 0.000 hyper.py:1028(HyperRep_log2) + 1 0.000 0.000 0.000 0.000 radau.py:179(Radau) + 1 0.000 0.000 0.000 0.000 compositedomain.py:9(CompositeDomain) + 1 0.000 0.000 0.000 0.000 error_functions.py:889(erfcinv) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:7570(powernorm_gen) + 1 0.000 0.000 0.000 0.000 instancenorm.py:385(LazyInstanceNorm3d) + 1 0.000 0.000 0.000 0.000 polyoptions.py:700(Series) + 1 0.000 0.000 0.000 0.000 {method 'close' of '_io.FileIO' objects} + 1 0.000 0.000 0.000 0.000 ElementTree.py:1384(TreeBuilder) + 1 0.000 0.000 0.000 0.000 dropout.py:5(Dropout) + 1 0.000 0.000 0.000 0.000 hadamard.py:44(HadamardProduct) + 1 0.000 0.000 0.000 0.000 reportviews.py:1366(MultiEdgeView) + 12 0.000 0.000 0.000 0.000 {method 'islower' of 'str' objects} + 1 0.000 0.000 0.000 0.000 mpelements.py:44(MPContext) + 1 0.000 0.000 0.000 0.000 __init__.py:215() + 1 0.000 0.000 0.000 0.000 more.py:3583(callback_iter) + 1 0.000 0.000 0.000 0.000 util.py:385(ForkAwareLocal) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:674(Formula) + 1 0.000 0.000 0.000 0.000 csv.py:23(Dialect) + 1 0.000 0.000 0.000 0.000 docscrape.py:610(ClassDoc) + 1 0.000 0.000 0.000 0.000 difflib.py:724(Differ) + 1 0.000 0.000 0.000 0.000 numpy_pickle.py:358(NumpyUnpickler) + 1 0.000 0.000 0.000 0.000 message.py:150(__init__) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:944(SupportsRound) + 1 0.000 0.000 0.000 0.000 _comparison.py:74() + 1 0.000 0.000 0.000 0.000 {built-in method _thread.get_native_id} + 1 0.000 0.000 0.000 0.000 funcmatrix.py:9(FunctionMatrix) + 1 0.000 0.000 0.000 0.000 batchnorm.py:519(LazyBatchNorm3d) + 1 0.000 0.000 0.000 0.000 _fitpack2.py:1102(BivariateSpline) + 1 0.000 0.000 0.000 0.000 loss.py:1032(CrossEntropyLoss) + 1 0.000 0.000 0.000 0.000 ops.py:1296(DataSplitter) + 1 0.000 0.000 0.000 0.000 conv_fused.py:763(ConvReLU3d) + 1 0.000 0.000 0.000 0.000 networksimplex.py:14(_DataEssentialsAndFunctions) + 5 0.000 0.000 0.000 0.000 datetime.py:51(_days_in_month) + 1 0.000 0.000 0.000 0.000 getlimits.py:613(iinfo) + 1 0.000 0.000 0.000 0.000 _functools.py:1() + 1 0.000 0.000 0.000 0.000 _dill.py:586(match) + 1 0.000 0.000 0.000 0.000 _diagnostic.py:81(ExportDiagnosticEngine) + 1 0.000 0.000 0.000 0.000 proxy_tensor.py:579(DecompositionInterpreter) + 1 0.000 0.000 0.000 0.000 dropout.py:104(Dropout2d) + 1 0.000 0.000 0.000 0.000 weakref.py:194(get) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:5237(levy_l_gen) + 1 0.000 0.000 0.000 0.000 memory.py:856(Memory) + 1 0.000 0.000 0.000 0.000 _parseaddr.py:211(AddrlistClass) + 3 0.000 0.000 0.000 0.000 symbolic_opset9.py:765(_reduce_op_symbolic) + 1 0.000 0.000 0.000 0.000 activation.py:1488(Softmax2d) + 1 0.000 0.000 0.000 0.000 threading.py:276(_acquire_restore) + 1 0.000 0.000 0.000 0.000 dataframes.py:324(CaptureSub) + 1 0.000 0.000 0.000 0.000 request.py:641(HTTPDefaultErrorHandler) + 1 0.000 0.000 0.000 0.000 records.py:308(recarray) + 1 0.000 0.000 0.000 0.000 timeit.py:84(Timer) + 8 0.000 0.000 0.000 0.000 parallel.py:350(delayed_function) + 1 0.000 0.000 0.000 0.000 _tqdm_pandas.py:1() + 1 0.000 0.000 0.000 0.000 tensor_functions.py:42(LeviCivita) + 1 0.000 0.000 0.000 0.000 threading.py:103(_RLock) + 1 0.000 0.000 0.000 0.000 mock.py:1777(_patch_dict) + 1 0.000 0.000 0.000 0.000 numbers.py:4157(TribonacciConstant) + 1 0.000 0.000 0.000 0.000 header.py:179(Header) + 1 0.000 0.000 0.000 0.000 polynomials.py:28(OrthogonalPolynomial) + 2 0.000 0.000 0.000 0.000 compressor.py:97(__init__) + 1 0.000 0.000 0.000 0.000 _pyio.py:1045(BufferedReader) + 1 0.000 0.000 0.000 0.000 conv.py:1195(LazyConv1d) + 1 0.000 0.000 0.000 0.000 decoder.py:254(JSONDecoder) + 1 0.000 0.000 0.000 0.000 normalization.py:63(CrossMapLRN2d) + 1 0.000 0.000 0.000 0.000 linear.py:21(Identity) + 1 0.000 0.000 0.000 0.000 boolalg.py:1348(ITE) + 5 0.000 0.000 0.000 0.000 expr.py:120(_compose2) + 2 0.000 0.000 0.000 0.000 {pyarrow.lib.time32} + 1 0.000 0.000 0.000 0.000 typing_extensions.py:898(SupportsFloat) + 4 0.000 0.000 0.000 0.000 core.py:2269(_generateDefaultName) + 1 0.000 0.000 0.000 0.000 _guards.py:78(ShapeGuard) + 1 0.000 0.000 0.000 0.000 activation.py:1361(Tanhshrink) + 1 0.000 0.000 0.000 0.000 _functions.py:37(ReduceAddCoalesced) + 1 0.000 0.000 0.000 0.000 pathlib.py:49(_Flavour) + 1 0.000 0.000 0.000 0.000 sequences.py:1127(SeqMul) + 1 0.000 0.000 0.000 0.000 parse.py:350(SplitResultBytes) + 1 0.000 0.000 0.000 0.000 expr_with_intlimits.py:13(ExprWithIntLimits) + 1 0.000 0.000 0.000 0.000 tempfile.py:132(_RandomNameSequence) + 1 0.000 0.000 0.000 0.000 backend_registration.py:1() + 1 0.000 0.000 0.000 0.000 loss.py:301(GaussianNLLLoss) + 1 0.000 0.000 0.000 0.000 _infra.py:203(ThreadFlowLocation) + 1 0.000 0.000 0.000 0.000 _infra.py:230(Graph) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:5886(mielke_gen) + 1 0.000 0.000 0.000 0.000 normalization.py:198(GroupNorm) + 1 0.000 0.000 0.000 0.000 functions.py:11(TensorProduct) + 1 0.000 0.000 0.000 0.000 assumptions.py:444(StdFactKB) + 1 0.000 0.000 0.000 0.000 digraph.py:63(__set__) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:156(kstwo_gen) + 1 0.000 0.000 0.000 0.000 config.py:214(__init__) + 1 0.000 0.000 0.000 0.000 _docscrape.py:25(Reader) + 1 0.000 0.000 0.000 0.000 conv.py:90(Conv2d) + 1 0.000 0.000 0.000 0.000 lambdarepr.py:20(LambdaPrinter) + 1 0.000 0.000 0.000 0.000 _fitpack2.py:884(_BivariateSplineBase) + 1 0.000 0.000 0.000 0.000 rnn.py:40(RNNCellBase) + 2 0.000 0.000 0.000 0.000 _parser.py:96(checkgroup) + 1 0.000 0.000 0.000 0.000 boolalg.py:1180(Implies) + 1 0.000 0.000 0.000 0.000 ipc.py:78(RecordBatchStreamWriter) + 1 0.000 0.000 0.000 0.000 normalization.py:46(GroupNorm) + 1 0.000 0.000 0.000 0.000 connection.py:431(Listener) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:2058(f_gen) + 1 0.000 0.000 0.000 0.000 core.py:4714(NotAny) + 1 0.000 0.000 0.000 0.000 factor_.py:2308(primeomega) + 1 0.000 0.000 0.000 0.000 apply.py:949(FrameRowApply) + 1 0.000 0.000 0.000 0.000 matrices.py:747(MatrixMethods) + 1 0.000 0.000 0.000 0.000 _pyio.py:1834(TextIOBase) + 1 0.000 0.000 0.000 0.000 BIF.py:417(BIFWriter) + 1 0.000 0.000 0.000 0.000 configparser.py:255(InterpolationError) + 1 0.000 0.000 0.000 0.000 feedparser.py:45(BufferedSubFile) + 1 0.000 0.000 0.000 0.000 _memmapping_reducer.py:317(ArrayMemmapForwardReducer) + 1 0.000 0.000 0.000 0.000 cnf.py:402(EncodedCNF) + 1 0.000 0.000 0.000 0.000 request.py:426(OpenerDirector) + 1 0.000 0.000 0.000 0.000 branchings.py:188(MultiDiGraph_EdgeKey) + 1 0.000 0.000 0.000 0.000 arrow_parser_wrapper.py:16(ArrowParserWrapper) + 1 0.000 0.000 0.000 0.000 _pep440.py:45(Infinity) + 1 0.000 0.000 0.000 0.000 __init__.py:218(_remove_shim) + 1 0.000 0.000 0.000 0.000 __init__.py:123(DeprecatedTuple) + 1 0.000 0.000 0.000 0.000 mpelements.py:14(RealElement) + 2 0.000 0.000 0.000 0.000 __init__.py:87(__setattr__) + 1 0.000 0.000 0.000 0.000 pycode.py:677() + 1 0.000 0.000 0.000 0.000 pydoc.py:523(HTMLRepr) + 1 0.000 0.000 0.000 0.000 gamma_functions.py:1248(multigamma) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:1571(_nchypergeom_gen) + 1 0.000 0.000 0.000 0.000 ewm.py:885(ExponentialMovingWindowGroupby) + 1 0.000 0.000 0.000 0.000 subprocess.py:17(SubprocessStreamProtocol) + 1 0.000 0.000 0.000 0.000 activation.py:1272(PReLU) + 2 0.000 0.000 0.000 0.000 distributed_c10d.py:403(WORLD) + 1 0.000 0.000 0.000 0.000 contract.py:629(ContractExpression) + 1 0.000 0.000 0.000 0.000 zeta_functions.py:616(riemann_xi) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:1385(skellam_gen) + 1 0.000 0.000 0.000 0.000 factor_.py:2046(divisor_sigma) + 1 0.000 0.000 0.000 0.000 graph.py:214(PythonCode) + 1 0.000 0.000 0.000 0.000 complexes.py:927(adjoint) + 10 0.000 0.000 0.000 0.000 mpelements.py:23() + 1 0.000 0.000 0.000 0.000 distance.py:56(CosineSimilarity) + 1 0.000 0.000 0.000 0.000 encoder.py:74(JSONEncoder) + 1 0.000 0.000 0.000 0.000 limits.py:130(Limit) + 1 0.000 0.000 0.000 0.000 error_functions.py:796(erfinv) + 1 0.000 0.000 0.000 0.000 monomials.py:394(MonomialOps) + 1 0.000 0.000 0.000 0.000 dropout.py:8(_DropoutNd) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:2160(foldnorm_gen) + 1 0.000 0.000 0.000 0.000 abc.py:43(Finder) + 1 0.000 0.000 0.000 0.000 _multivariate.py:115(_PSD) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:768(logser_gen) + 1 0.000 0.000 0.000 0.000 _matfuncs.py:206(ProductOperator) + 1 0.000 0.000 0.000 0.000 queues.py:218(PriorityQueue) + 1 0.000 0.000 0.000 0.000 beta_functions.py:259(betainc_regularized) + 1 0.000 0.000 0.000 0.000 doctest.py:1583(OutputChecker) + 1 0.000 0.000 0.000 0.000 sympy_parser.py:366(split_symbols_custom) + 1 0.000 0.000 0.000 0.000 _pyio.py:1901(IncrementalNewlineDecoder) + 3 0.000 0.000 0.000 0.000 __init__.py:504(CFunctionType) + 1 0.000 0.000 0.000 0.000 polyoptions.py:270(Gens) + 1 0.000 0.000 0.000 0.000 core.py:2372(_MaskedPrintOption) + 1 0.000 0.000 0.000 0.000 ElementTree.py:1506(XMLParser) + 1 0.000 0.000 0.000 0.000 error_functions.py:1634(Li) + 1 0.000 0.000 0.000 0.000 cse_main.py:218(FuncArgTracker) + 1 0.000 0.000 0.000 0.000 determinant.py:8(Determinant) + 1 0.000 0.000 0.000 0.000 floating.py:147(Float64Dtype) + 1 0.000 0.000 0.000 0.000 enumerative.py:92(PartComponent) + 1 0.000 0.000 0.000 0.000 loss.py:1336(MultiMarginLoss) + 1 0.000 0.000 0.000 0.000 mapped_queue.py:9(_HeapElement) + 1 0.000 0.000 0.000 0.000 more.py:251(peekable) + 1 0.000 0.000 0.000 0.000 padding.py:225(ReflectionPad2d) + 1 0.000 0.000 0.000 0.000 more.py:233(peekable) + 1 0.000 0.000 0.000 0.000 fold.py:156(Unfold) + 1 0.000 0.000 0.000 0.000 polynomials.py:285(gegenbauer) + 1 0.000 0.000 0.000 0.000 cnf.py:80(OR) + 1 0.000 0.000 0.000 0.000 apply.py:667(NDFrameApply) + 1 0.000 0.000 0.000 0.000 describe.py:105(NDFrameDescriberAbstract) + 1 0.000 0.000 0.000 0.000 pycode.py:401(ArrayPrinter) + 1 0.000 0.000 0.000 0.000 _contextlib.py:120(_DecoratorContextManager) + 1 0.000 0.000 0.000 0.000 _relative_risk.py:20(RelativeRiskResult) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:828(betaprime_gen) + 1 0.000 0.000 0.000 0.000 observer.py:1393(NoopObserver) + 1 0.000 0.000 0.000 0.000 __init__.py:331(ContextualVersionConflict) + 1 0.000 0.000 0.000 0.000 function.py:823(AppliedUndef) + 1 0.000 0.000 0.000 0.000 _classes.py:18(_Classes) + 1 0.000 0.000 0.000 0.000 activation.py:68(ReLU) + 1 0.000 0.000 0.000 0.000 blas.py:238() + 2 0.000 0.000 0.000 0.000 config.py:638(_translate_key) + 1 0.000 0.000 0.000 0.000 integer.py:173(Int32Dtype) + 1 0.000 0.000 0.000 0.000 core.py:1283(_replace_dtype_fields_recursive) + 1 0.000 0.000 0.000 0.000 boolalg.py:253(BooleanTrue) + 1 0.000 0.000 0.000 0.000 _VF.py:19(VFModule) + 6 0.000 0.000 0.000 0.000 nanops.py:107(__init__) + 1 0.000 0.000 0.000 0.000 orderings.py:64(ProductOrder) + 1 0.000 0.000 0.000 0.000 process.py:198(daemon) + 1 0.000 0.000 0.000 0.000 misc.py:274(PythonRandomInterface) + 1 0.000 0.000 0.000 0.000 base_events.py:206(_SendfileFallbackProtocol) + 1 0.000 0.000 0.000 0.000 utils.py:18(ArrowCTypes) + 1 0.000 0.000 0.000 0.000 common.py:951(_BytesTarFile) + 1 0.000 0.000 0.000 0.000 ctx_mp_python.py:607(default) + 1 0.000 0.000 0.000 0.000 rnn.py:492(GRU) + 1 0.000 0.000 0.000 0.000 sequences.py:379(EmptySequence) + 1 0.000 0.000 0.000 0.000 selectors.py:341(_PollLikeSelector) + 2 0.000 0.000 0.000 0.000 __init__.py:370(_FuncPtr) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1728(exponnorm_gen) + 1 0.000 0.000 0.000 0.000 sharding.py:28(ShardingFilterIterDataPipe) + 1 0.000 0.000 0.000 0.000 pooling.py:990(_AdaptiveMaxPoolNd) + 1 0.000 0.000 0.000 0.000 dense_ndim_array.py:131(ImmutableDenseNDimArray) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:605(nhypergeom_gen) + 1 0.000 0.000 0.000 0.000 _multivariate.py:4207(multivariate_t_gen) + 1 0.000 0.000 0.000 0.000 graph.py:607(_PyTreeCodeGen) + 1 0.000 0.000 0.000 0.000 conv_fused.py:363(ConvBn1d) + 2 0.000 0.000 0.000 0.000 _pyio.py:1792(writable) + 1 0.000 0.000 0.000 0.000 complexes.py:870(transpose) + 4 0.000 0.000 0.000 0.000 iterative.py:119(set_docstring) + 1 0.000 0.000 0.000 0.000 process.py:274(_ExecutorManagerThread) + 1 0.000 0.000 0.000 0.000 case.py:1388(FunctionTestCase) + 8 0.000 0.000 0.000 0.000 __init__.py:54(exec_module) + 1 0.000 0.000 0.000 0.000 _pyio.py:2661(StringIO) + 3 0.000 0.000 0.000 0.000 doccer.py:153(replace_notes_in_docstring) + 1 0.000 0.000 0.000 0.000 profiler.py:619(emit_nvtx) + 1 0.000 0.000 0.000 0.000 UAI.py:10(UAIReader) + 1 0.000 0.000 0.000 0.000 __init__.py:199(strict_fusion) + 1 0.000 0.000 0.000 0.000 tableform.py:9(TableForm) + 2 0.000 0.000 0.000 0.000 pathlib.py:53(__init__) + 1 0.000 0.000 0.000 0.000 index_tricks.py:563(__init__) + 2 0.000 0.000 0.000 0.000 {built-in method sys.getfilesystemencoding} + 1 0.000 0.000 0.000 0.000 integer.py:187(UInt8Dtype) + 1 0.000 0.000 0.000 0.000 error_functions.py:1730(TrigonometricIntegral) + 1 0.000 0.000 0.000 0.000 zeta_functions.py:568(dirichlet_eta) + 1 0.000 0.000 0.000 0.000 cse_main.py:345(Unevaluated) + 1 0.000 0.000 0.000 0.000 {built-in method math.exp} + 1 0.000 0.000 0.000 0.000 _qmc.py:884(Halton) + 1 0.000 0.000 0.000 0.000 sql.py:1845(SQLiteTable) + 1 0.000 0.000 0.000 0.000 padding.py:184(ReflectionPad1d) + 1 0.000 0.000 0.000 0.000 symbolic_shapes.py:408(Pow) + 1 0.000 0.000 0.000 0.000 __init__.py:321(CDLL) + 1 0.000 0.000 0.000 0.000 single.py:296(SinglePatternODESolver) + 1 0.000 0.000 0.000 0.000 diagonal.py:9(DiagonalMatrix) + 1 0.000 0.000 0.000 0.000 field.py:8(Field) + 1 0.000 0.000 0.000 0.000 memory.py:292(NotMemorizedResult) + 1 0.000 0.000 0.000 0.000 __init__.py:1711(DefaultProvider) + 1 0.000 0.000 0.000 0.000 activation.py:110(RReLU) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:180(betabinom_gen) + 1 0.000 0.000 0.000 0.000 memory.py:333(NotMemorizedFunc) + 1 0.000 0.000 0.000 0.000 polynomials.py:1169(assoc_laguerre) + 1 0.000 0.000 0.000 0.000 charset.py:167(Charset) + 1 0.000 0.000 0.000 0.000 _spherical_voronoi.py:36(SphericalVoronoi) + 1 0.000 0.000 0.000 0.000 facts.py:256(Prover) + 1 0.000 0.000 0.000 0.000 XMLBeliefNetwork.py:11(XBNReader) + 1 0.000 0.000 0.000 0.000 _trace.py:565(TracerWarning) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:10107(studentized_range_gen) + 1 0.000 0.000 0.000 0.000 sequences.py:467(SeqPer) + 1 0.000 0.000 0.000 0.000 zipfile.py:1135(_ZipWriteFile) + 1 0.000 0.000 0.000 0.000 loss.py:539(BCELoss) + 1 0.000 0.000 0.000 0.000 _pslinux.py:1197(RootFsDeviceFinder) + 1 0.000 0.000 0.000 0.000 logic.py:322(AndOr_Base) + 1 0.000 0.000 0.000 0.000 pooling.py:38(MaxPool1d) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:537(arcsine_gen) + 1 0.000 0.000 0.000 0.000 __init__.py:400(_FixedOffset) + 1 0.000 0.000 0.000 0.000 stubs.py:38(QuantWrapper) + 1 0.000 0.000 0.000 0.000 __init__.py:116(Command) + 1 0.000 0.000 0.000 0.000 depends.py:17(Require) + 1 0.000 0.000 0.000 0.000 polyoptions.py:511(Split) + 1 0.000 0.000 0.000 0.000 NET.py:326(NETReader) + 1 0.000 0.000 0.000 0.000 context.py:220(Process) + 1 0.000 0.000 0.000 0.000 nosetester.py:112(NoseTester) + 1 0.000 0.000 0.000 0.000 _ode.py:1038(zvode) + 1 0.000 0.000 0.000 0.000 paths.py:283(BranchBound) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:4865(johnsonsu_gen) + 1 0.000 0.000 0.000 0.000 greedy_coloring.py:377(_Node) + 1 0.000 0.000 0.000 0.000 distributed.py:194(_DDPJoinHook) + 1 0.000 0.000 0.000 0.000 conv.py:1264(LazyConv2d) + 1 0.000 0.000 0.000 0.000 _multivariate.py:237(multi_rv_frozen) + 1 0.000 0.000 0.000 0.000 _ops.py:116(__init__) + 1 0.000 0.000 0.000 0.000 _lbfgsb_py.py:401(LbfgsInvHessProduct) + 1 0.000 0.000 0.000 0.000 expr_with_limits.py:538(AddWithLimits) + 1 0.000 0.000 0.000 0.000 relational.py:1153(StrictGreaterThan) + 1 0.000 0.000 0.000 0.000 blocks.py:1900(NumpyBlock) + 1 0.000 0.000 0.000 0.000 tempfile.py:416(_TemporaryFileCloser) + 1 0.000 0.000 0.000 0.000 base.py:8(BaseFactor) + 2 0.000 0.000 0.000 0.000 {method 'extend' of 'collections.deque' objects} + 1 0.000 0.000 0.000 0.000 transforms.py:783(CorrCholeskyTransform) + 2 0.000 0.000 0.000 0.000 typing_extensions.py:957(inner) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:933(SupportsAbs) + 1 0.000 0.000 0.000 0.000 headerregistry.py:104(Group) + 1 0.000 0.000 0.000 0.000 blocks.py:2009(DatetimeTZBlock) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:1215(zipfian_gen) + 9 0.000 0.000 0.000 0.000 _globals.py:86(__repr__) + 1 0.000 0.000 0.000 0.000 _ode.py:1197(dop853) + 7 0.000 0.000 0.000 0.000 _common.py:9(__init__) + 3 0.000 0.000 0.000 0.000 datetime.py:46(_days_before_year) + 1 0.000 0.000 0.000 0.000 ctx_mp_python.py:330(_constant) + 1 0.000 0.000 0.000 0.000 relational.py:813(_Inequality) + 1 0.000 0.000 0.000 0.000 _orthogonal.py:115(orthopoly1d) + 1 0.000 0.000 0.000 0.000 polyoptions.py:542(Extension) + 1 0.000 0.000 0.000 0.000 backports.py:25(Version) + 1 0.000 0.000 0.000 0.000 diophantine.py:38(DiophantineSolutionSet) + 1 0.000 0.000 0.000 0.000 apply.py:1009(FrameColumnApply) + 1 0.000 0.000 0.000 0.000 subprocess.py:163(TimeoutExpired) + 1 0.000 0.000 0.000 0.000 spawn.py:12(ProcessException) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:2555(genlogistic_gen) + 1 0.000 0.000 0.000 0.000 _stats_py.py:4155(PearsonRResult) + 2 0.000 0.000 0.000 0.000 constraints.py:332(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:154(HTTPMethod) + 1 0.000 0.000 0.000 0.000 doctest.py:505(DocTest) + 1 0.000 0.000 0.000 0.000 _policybase.py:271(Compat32) + 1 0.000 0.000 0.000 0.000 planarity.py:763(PlanarEmbedding) + 3 0.000 0.000 0.000 0.000 utils.py:15() + 1 0.000 0.000 0.000 0.000 _datasource.py:536(Repository) + 1 0.000 0.000 0.000 0.000 utils.py:19(CurrentEdge) + 1 0.000 0.000 0.000 0.000 tzinfo.py:156(DstTzInfo) + 1 0.000 0.000 0.000 0.000 _qmc.py:1962(MultivariateNormalQMC) + 1 0.000 0.000 0.000 0.000 complexes.py:993(polar_lift) + 1 0.000 0.000 0.000 0.000 boolalg.py:377(BooleanFalse) + 1 0.000 0.000 0.000 0.000 unix_events.py:1345(ThreadedChildWatcher) + 1 0.000 0.000 0.000 0.000 hyper.py:903(HyperRep_atanh) + 1 0.000 0.000 0.000 0.000 easter.py:1() + 1 0.000 0.000 0.000 0.000 line.py:1346(Ray) + 1 0.000 0.000 0.000 0.000 spherical_harmonics.py:267(Znm) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:93(ksone_gen) + 1 0.000 0.000 0.000 0.000 colorsys.py:1() + 3 0.000 0.000 0.000 0.000 _pyio.py:1072(_reset_read_buf) + 1 0.000 0.000 0.000 0.000 util.py:182(Finalize) + 1 0.000 0.000 0.000 0.000 activation.py:161(Softmax) + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_sha3_224} + 1 0.000 0.000 0.000 0.000 pytables.py:409(PyTablesExprVisitor) + 1 0.000 0.000 0.000 0.000 transports.py:251(_FlowControlMixin) + 1 0.000 0.000 0.000 0.000 PomdpX.py:357(PomdpXWriter) + 1 0.000 0.000 0.000 0.000 digraph.py:383(succ) + 1 0.000 0.000 0.000 0.000 plistlib.py:77(UID) + 1 0.000 0.000 0.000 0.000 __init__.py:1720(getEffectiveLevel) + 1 0.000 0.000 0.000 0.000 beta_functions.py:150(betainc) + 1 0.000 0.000 0.000 0.000 __init__.py:594(_discover_resolvers) + 1 0.000 0.000 0.000 0.000 pytables.py:43(PyTablesScope) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1878(exponpow_gen) + 1 0.000 0.000 0.000 0.000 integer.py:201(UInt32Dtype) + 1 0.000 0.000 0.000 0.000 records.py:87(format_parser) + 1 0.000 0.000 0.000 0.000 _factories.py:9(__init__) + 1 0.000 0.000 0.000 0.000 grad_mode.py:9(no_grad) + 1 0.000 0.000 0.000 0.000 resource_tracker.py:56(__init__) + 1 0.000 0.000 0.000 0.000 stata.py:3496(StataWriterUTF8) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:3562(gompertz_gen) + 1 0.000 0.000 0.000 0.000 weak.py:37(WeakIdRef) + 1 0.000 0.000 0.000 0.000 graph.py:247(_node_list) + 1 0.000 0.000 0.000 0.000 events.py:24(Handle) + 1 0.000 0.000 0.000 0.000 line.py:2444(LinearEntity3D) + 1 0.000 0.000 0.000 0.000 companion.py:8(CompanionMatrix) + 1 0.000 0.000 0.000 0.000 synchronize.py:235(Condition) + 1 0.000 0.000 0.000 0.000 _nonlin.py:442(InverseJacobian) + 4 0.000 0.000 0.000 0.000 __init__.py:387(register_loader_type) + 1 0.000 0.000 0.000 0.000 line.py:2624(Ray3D) + 1 0.000 0.000 0.000 0.000 __init__.py:64(install) + 1 0.000 0.000 0.000 0.000 utils.py:2026(clear_and_catch_warnings) + 1 0.000 0.000 0.000 0.000 sequences.py:612(SeqFormula) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:2737(genexpon_gen) + 1 0.000 0.000 0.000 0.000 _machar.py:17(MachAr) + 1 0.000 0.000 0.000 0.000 symbolic_shapes.py:420(TrueDiv) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:4812(johnsonsb_gen) + 1 0.000 0.000 0.000 0.000 message.py:330(set_payload) + 1 0.000 0.000 0.000 0.000 library.py:18(Library) + 1 0.000 0.000 0.000 0.000 _interface.py:507(_CustomLinearOperator) + 1 0.000 0.000 0.000 0.000 _common.py:6(weekday) + 4 0.000 0.000 0.000 0.000 {method 'keys' of 'collections.OrderedDict' objects} + 1 0.000 0.000 0.000 0.000 tz.py:874(tzrange) + 1 0.000 0.000 0.000 0.000 complexes.py:1206(principal_branch) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:3980(hypsecant_gen) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.utf8} + 1 0.000 0.000 0.000 0.000 polyoptions.py:348(Order) + 1 0.000 0.000 0.000 0.000 inference.py:241(KB) + 1 0.000 0.000 0.000 0.000 _pyio.py:306(__getattr__) + 1 0.000 0.000 0.000 0.000 indexing.py:2400(_AtIndexer) + 2 0.000 0.000 0.000 0.000 subprocess.py:290(_optim_args_from_interpreter_flags) + 1 0.000 0.000 0.000 0.000 rnn.py:46(PackedParameter) + 1 0.000 0.000 0.000 0.000 evalf.py:1565(EvalfMixin) + 1 0.000 0.000 0.000 0.000 setupcfg.py:768(_AmbiguousMarker) + 1 0.000 0.000 0.000 0.000 polyoptions.py:383(Composite) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:1513(TypeVar) + 1 0.000 0.000 0.000 0.000 _iotools.py:133(LineSplitter) + 1 0.000 0.000 0.000 0.000 parallel.py:135(parallel_backend) + 1 0.000 0.000 0.000 0.000 _factories.py:13(__call__) + 1 0.000 0.000 0.000 0.000 kind.py:181(__new__) + 1 0.000 0.000 0.000 0.000 _morestats.py:2267(__init__) + 1 0.000 0.000 0.000 0.000 core.py:3241(CharsNotIn) + 2 0.000 0.000 0.000 0.000 {method '_release_save' of '_thread.RLock' objects} + 1 0.000 0.000 0.000 0.000 plot.py:807(Parametric2DLineSeries) + 1 0.000 0.000 0.000 0.000 symbolic_shapes.py:782(_make_node_sizes_strides) + 1 0.000 0.000 0.000 0.000 activation.py:140(Sigmoid) + 1 0.000 0.000 0.000 0.000 distributed.py:153(_BufferCommHook) + 1 0.000 0.000 0.000 0.000 _threadsafety.py:13(ReentrancyLock) + 1 0.000 0.000 0.000 0.000 core.py:8209(_convert2ma) + 1 0.000 0.000 0.000 0.000 __init__.py:44(__init__) + 2 0.000 0.000 0.000 0.000 constraints.py:315(__init__) + 1 0.000 0.000 0.000 0.000 _policybase.py:18(_PolicyBase) + 1 0.000 0.000 0.000 0.000 backend_registry.py:74() + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:970(boltzmann_gen) + 1 0.000 0.000 0.000 0.000 distance.py:1671(CDistWeightedMetricWrapper) + 6 0.000 0.000 0.000 0.000 symbolic_opset8.py:76(_interpolate) + 1 0.000 0.000 0.000 0.000 _mangling.py:9(PackageMangler) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:907(SupportsComplex) + 1 0.000 0.000 0.000 0.000 batchnorm.py:186(_LazyNormBase) + 1 0.000 0.000 0.000 0.000 _internal.py:613(_Stream) + 1 0.000 0.000 0.000 0.000 __init__.py:43(__exit__) + 1 0.000 0.000 0.000 0.000 normalization.py:161(InstanceNorm3d) + 1 0.000 0.000 0.000 0.000 _multivariate.py:2907(invwishart_frozen) + 1 0.000 0.000 0.000 0.000 headerregistry.py:490(ContentDispositionHeader) + 1 0.000 0.000 0.000 0.000 header.py:541(_Accumulator) + 1 0.000 0.000 0.000 0.000 lsoda.py:7(LSODA) + 1 0.000 0.000 0.000 0.000 core.py:4895(_generateDefaultName) + 1 0.000 0.000 0.000 0.000 py3k.py:84(contextlib_nullcontext) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:5528(loglaplace_gen) + 1 0.000 0.000 0.000 0.000 selector_events.py:1134(_SelectorDatagramTransport) + 1 0.000 0.000 0.000 0.000 constraints.py:186(_IndependentConstraint) + 1 0.000 0.000 0.000 0.000 __init__.py:1764(ZipManifests) + 1 0.000 0.000 0.000 0.000 polyoptions.py:620(Auto) + 1 0.000 0.000 0.000 0.000 rnn.py:1248(GRUCell) + 1 0.000 0.000 0.000 0.000 grad_mode.py:108(set_grad_enabled) + 3 0.000 0.000 0.000 0.000 libmpf.py:663(mpf_neg) + 1 0.000 0.000 0.000 0.000 unix_events.py:910(PidfdChildWatcher) + 1 0.000 0.000 0.000 0.000 request.py:908(HTTPPasswordMgrWithPriorAuth) + 1 0.000 0.000 0.000 0.000 __init__.py:65(install) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:3870(halflogistic_gen) + 1 0.000 0.000 0.000 0.000 _constraints.py:120(LinearConstraint) + 1 0.000 0.000 0.000 0.000 _rules.py:62(_MissingStandardSymbolicFunction) + 1 0.000 0.000 0.000 0.000 __init__.py:936(setLevel) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:916(SupportsBytes) + 1 0.000 0.000 0.000 0.000 ops.py:185(Constant) + 4 0.000 0.000 0.000 0.000 _pytree.py:8(register_pytree_flatten_spec) + 1 0.000 0.000 0.000 0.000 core.py:2524(CloseMatch) + 1 0.000 0.000 0.000 0.000 ssl.py:154() + 1 0.000 0.000 0.000 0.000 threading.py:273(_release_save) + 1 0.000 0.000 0.000 0.000 line.py:2175(Ray2D) + 1 0.000 0.000 0.000 0.000 diagonal.py:157(DiagMatrix) + 1 0.000 0.000 0.000 0.000 blocks.py:1931(NDArrayBackedExtensionBlock) + 1 0.000 0.000 0.000 0.000 format.py:204(CategoricalFormatter) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.uint32} + 1 0.000 0.000 0.000 0.000 padding.py:330(_ReplicationPadNd) + 6 0.000 0.000 0.000 0.000 symbolic_opset9.py:1997(_interpolate) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.uint64} + 1 0.000 0.000 0.000 0.000 encoder.py:105(__init__) + 1 0.000 0.000 0.000 0.000 request.py:645(HTTPRedirectHandler) + 1 0.000 0.000 0.000 0.000 pyfunctorch.py:118(GradInterpreter) + 1 0.000 0.000 0.000 0.000 response.py:68(addinfourl) + 1 0.000 0.000 0.000 0.000 attrmatrix.py:1() + 1 0.000 0.000 0.000 0.000 reduction.py:42(_C) + 1 0.000 0.000 0.000 0.000 reduction.py:128(CustomizablePickler) + 1 0.000 0.000 0.000 0.000 distance.py:1644(CDistMetricWrapper) + 1 0.000 0.000 0.000 0.000 request.py:2399(ftpwrapper) + 1 0.000 0.000 0.000 0.000 transports.py:9(BaseTransport) + 1 0.000 0.000 0.000 0.000 _ufunc_config.py:367(errstate) + 1 0.000 0.000 0.000 0.000 exp_family.py:6(ExponentialFamily) + 1 0.000 0.000 0.000 0.000 graph.py:42(_CustomBuiltin) + 1 0.000 0.000 0.000 0.000 function_base.py:2117(vectorize) + 1 0.000 0.000 0.000 0.000 info.py:1015(SeriesTableBuilder) + 1 0.000 0.000 0.000 0.000 distance.py:1722(PDistWeightedMetricWrapper) + 1 0.000 0.000 0.000 0.000 error_functions.py:971(erf2inv) + 1 0.000 0.000 0.000 0.000 padding.py:277(ReflectionPad3d) + 1 0.000 0.000 0.000 0.000 _multivariate.py:2358(wishart_frozen) + 1 0.000 0.000 0.000 0.000 integer.py:180(Int64Dtype) + 4 0.000 0.000 0.000 0.000 math2.py:42(_mathfun) + 1 0.000 0.000 0.000 0.000 boolalg.py:1086(Nand) + 1 0.000 0.000 0.000 0.000 tools.py:35(typed) + 4 0.000 0.000 0.000 0.000 utils.py:8(_ntuple) + 1 0.000 0.000 0.000 0.000 xml.py:60(_XMLFrameParser) + 1 0.000 0.000 0.000 0.000 observer.py:520(MovingAverageMinMaxObserver) + 1 0.000 0.000 0.000 0.000 state_name.py:1(StateNameMixin) + 1 0.000 0.000 0.000 0.000 docscrape.py:563(FunctionDoc) + 1 0.000 0.000 0.000 0.000 torch_version.py:41(TorchVersion) + 1 0.000 0.000 0.000 0.000 __init__.py:46(__getattr__) + 1 0.000 0.000 0.000 0.000 diagonal.py:86(DiagonalOf) + 1 0.000 0.000 0.000 0.000 line.py:2002(Line2D) + 1 0.000 0.000 0.000 0.000 code.py:15(InteractiveInterpreter) + 1 0.000 0.000 0.000 0.000 constraints.py:68(Constraint) + 2 0.000 0.000 0.000 0.000 functools.py:191(_special_method_cache) + 2 0.000 0.000 0.000 0.000 {built-in method _functools.cmp_to_key} + 1 0.000 0.000 0.000 0.000 symbolic_shapes.py:900(ShapeGuardPrinter) + 1 0.000 0.000 0.000 0.000 cnf.py:112(AND) + 1 0.000 0.000 0.000 0.000 _trace.py:1111(TracedModule) + 1 0.000 0.000 0.000 0.000 common.py:78(IOArgs) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:1809(exponweib_gen) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:3824(halfcauchy_gen) + 4 0.000 0.000 0.000 0.000 config.py:258(__init__) + 1 0.000 0.000 0.000 0.000 numbers.py:3223(Half) + 1 0.000 0.000 0.000 0.000 gexf.py:686(GEXFReader) + 1 0.000 0.000 0.000 0.000 core.py:4522(AtLineStart) + 6 0.000 0.000 0.000 0.000 fuser_method_mappings.py:153(_sequential_wrapper2) + 1 0.000 0.000 0.000 0.000 _linprog_doc.py:1() + 1 0.000 0.000 0.000 0.000 numbers.py:277(lucas) + 1 0.000 0.000 0.000 0.000 pooling.py:97(MaxPool2d) + 1 0.000 0.000 0.000 0.000 package_exporter.py:103(_PatternInfo) + 4 0.000 0.000 0.000 0.000 {pyarrow.lib.duration} + 1 0.000 0.000 0.000 0.000 __init__.py:41(_LazySeedTracker) + 1 0.000 0.000 0.000 0.000 expr.py:385() + 1 0.000 0.000 0.000 0.000 core.py:4555(FollowedBy) + 1 0.000 0.000 0.000 0.000 _ops.py:418(OpOverloadPacket) + 1 0.000 0.000 0.000 0.000 _page_trend_test.py:409(_PageL) + 8 0.000 0.000 0.000 0.000 _pep440.py:70(__neg__) + 1 0.000 0.000 0.000 0.000 sparse_ndim_array.py:138(MutableSparseNDimArray) + 1 0.000 0.000 0.000 0.000 zeta_functions.py:654(stieltjes) + 1 0.000 0.000 0.000 0.000 formal.py:1696(FormalPowerSeriesInverse) + 1 0.000 0.000 0.000 0.000 relational.py:859(_Greater) + 1 0.000 0.000 0.000 0.000 _decorator.py:11(functional_datapipe) + 1 0.000 0.000 0.000 0.000 context.py:230(DefaultContext) + 1 0.000 0.000 0.000 0.000 pooling.py:1121(_AdaptiveAvgPoolNd) + 1 0.000 0.000 0.000 0.000 events.py:161(AbstractServer) + 6 0.000 0.000 0.000 0.000 symbolic_opset8.py:67(_apply_params) + 1 0.000 0.000 0.000 0.000 anomaly_mode.py:9(detect_anomaly) + 1 0.000 0.000 0.000 0.000 padding.py:475(ZeroPad2d) + 1 0.000 0.000 0.000 0.000 pyprojecttoml.py:396(_EnsurePackagesDiscovered) + 1 0.000 0.000 0.000 0.000 pixelshuffle.py:60(PixelUnshuffle) + 1 0.000 0.000 0.000 0.000 line.py:1112(Line) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:4023(gausshyper_gen) + 3 0.000 0.000 0.000 0.000 dataclasses.py:1062() + 1 0.000 0.000 0.000 0.000 discovery.py:76(_Filter) + 1 0.000 0.000 0.000 0.000 _pep440.py:77(NegativeInfinity) + 1 0.000 0.000 0.000 0.000 ops.py:18(BlockPairInfo) + 1 0.000 0.000 0.000 0.000 tools_common.py:90(FusionGroup) + 1 0.000 0.000 0.000 0.000 loss.py:1414(TripletMarginLoss) + 1 0.000 0.000 0.000 0.000 _constraints.py:215(Bounds) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.date32} + 1 0.000 0.000 0.000 0.000 _utils.py:39(Interval) + 1 0.000 0.000 0.000 0.000 chi2.py:6(Chi2) + 1 0.000 0.000 0.000 0.000 __init__.py:7(Warning) + 1 0.000 0.000 0.000 0.000 normalization.py:121(InstanceNorm2d) + 1 0.000 0.000 0.000 0.000 autograd_function.py:547(CtxCustomSave) + 1 0.000 0.000 0.000 0.000 parameters.py:60(__init__) + 1 0.000 0.000 0.000 0.000 apply.py:1216(ResamplerWindowApply) + 1 0.000 0.000 0.000 0.000 doctest.py:354(_OutputRedirectingPdb) + 1 0.000 0.000 0.000 0.000 pprint.py:80(_safe_key) + 1 0.000 0.000 0.000 0.000 __init__.py:814(SubclassedDataFrame) + 1 0.000 0.000 0.000 0.000 core.py:2589(MaskedIterator) + 1 0.000 0.000 0.000 0.000 python_parser.py:1159(FixedWidthReader) + 1 0.000 0.000 0.000 0.000 _collections.py:27(Pair) + 1 0.000 0.000 0.000 0.000 __init__.py:757(path) + 1 0.000 0.000 0.000 0.000 _guards.py:216(DuplicateInputs) + 1 0.000 0.000 0.000 0.000 _backend.py:407(Dispatchable) + 1 0.000 0.000 0.000 0.000 numpy.py:33() + 1 0.000 0.000 0.000 0.000 _internal.py:204(dummy_ctype) + 6 0.000 0.000 0.000 0.000 core.py:846(__init__) + 1 0.000 0.000 0.000 0.000 _print_helpers.py:8(Printable) + 5 0.000 0.000 0.000 0.000 datetime.py:545(_check_tzinfo_arg) + 1 0.000 0.000 0.000 0.000 pycode.py:87() + 1 0.000 0.000 0.000 0.000 parameter.py:13(Parameter) + 1 0.000 0.000 0.000 0.000 fancysets.py:138(Naturals0) + 1 0.000 0.000 0.000 0.000 headerregistry.py:525(MessageIDHeader) + 1 0.000 0.000 0.000 0.000 single.py:1205(Separable) + 1 0.000 0.000 0.000 0.000 _hessian_update_strategy.py:111(__init__) + 2 0.000 0.000 0.000 0.000 constraints.py:366(__init__) + 1 0.000 0.000 0.000 0.000 _hypotests.py:1685(TukeyHSDResult) + 1 0.000 0.000 0.000 0.000 __init__.py:58(NegativeInfinityType) + 8 0.000 0.000 0.000 0.000 {method '__prepare__' of 'type' objects} + 1 0.000 0.000 0.000 0.000 bdf.py:72(BDF) + 1 0.000 0.000 0.000 0.000 modules.py:1335(QuotientModule) + 1 0.000 0.000 0.000 0.000 _rules.py:152(_FxTracerFailure) + 5 0.000 0.000 0.000 0.000 _apply_pyprojecttoml.py:303(_some_attrgetter) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:2014(foldcauchy_gen) + 1 0.000 0.000 0.000 0.000 boolalg.py:1115(Nor) + 1 0.000 0.000 0.000 0.000 gui.py:24(tqdm_gui) + 1 0.000 0.000 0.000 0.000 random.py:787(SystemRandom) + 1 0.000 0.000 0.000 0.000 _rbfinterp.py:134(RBFInterpolator) + 1 0.000 0.000 0.000 0.000 selectors.py:442(EpollSelector) + 1 0.000 0.000 0.000 0.000 _docscrape.py:562(FunctionDoc) + 1 0.000 0.000 0.000 0.000 logger.py:98(TraceAdapter) + 1 0.000 0.000 0.000 0.000 kl.py:80(_Match) + 1 0.000 0.000 0.000 0.000 dot_parser.py:37(P_AttrList) + 1 0.000 0.000 0.000 0.000 error_functions.py:2694(_eis) + 1 0.000 0.000 0.000 0.000 _cubic.py:468(CubicSpline) + 1 0.000 0.000 0.000 0.000 polyoptions.py:683(Gen) + 1 0.000 0.000 0.000 0.000 rules.py:5(Transform) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:223(kstwobign_gen) + 1 0.000 0.000 0.000 0.000 split_module.py:11(Partition) + 1 0.000 0.000 0.000 0.000 grad_scaler.py:13(_MultiDeviceReplicator) + 1 0.000 0.000 0.000 0.000 describe.py:144(DataFrameDescriber) + 1 0.000 0.000 0.000 0.000 _pytree.py:135(LeafSpec) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:1121(zipf_gen) + 1 0.000 0.000 0.000 0.000 _pyio.py:2182(writable) + 2 0.000 0.000 0.000 0.000 constraints.py:290(__init__) + 3 0.000 0.000 0.000 0.000 core.py:806(__init__) + 1 0.000 0.000 0.000 0.000 pytables.py:1840(TableIterator) + 1 0.000 0.000 0.000 0.000 observer.py:804(MovingAveragePerChannelMinMaxObserver) + 3 0.000 0.000 0.000 0.000 rendezvous.py:22(register_rendezvous_handler) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:1306(dlaplace_gen) + 1 0.000 0.000 0.000 0.000 python.py:11(PythonPrinter) + 1 0.000 0.000 0.000 0.000 conv.py:1402(LazyConvTranspose1d) + 1 0.000 0.000 0.000 0.000 apply.py:1085(SeriesApply) + 1 0.000 0.000 0.000 0.000 core.py:2299(Literal) + 1 0.000 0.000 0.000 0.000 info.py:589(InfoPrinterAbstract) + 1 0.000 0.000 0.000 0.000 doctest.py:2334(SkipDocTestCase) + 1 0.000 0.000 0.000 0.000 _dill.py:179(Sentinel) + 1 0.000 0.000 0.000 0.000 single.py:1752(LinearCoefficients) + 1 0.000 0.000 0.000 0.000 _creation.py:17() + 1 0.000 0.000 0.000 0.000 _expm_multiply.py:393(LazyOperatorNormInfo) + 1 0.000 0.000 0.000 0.000 message.py:211(is_multipart) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:263(AutoBatchingMixin) + 1 0.000 0.000 0.000 0.000 pytables.py:5220(Selection) + 1 0.000 0.000 0.000 0.000 format.py:268(SeriesFormatter) + 6 0.000 0.000 0.000 0.000 _common.py:13(tzname_in_python2) + 1 0.000 0.000 0.000 0.000 factor_.py:2264(primenu) + 1 0.000 0.000 0.000 0.000 _util.py:375(MapWrapper) + 3 0.000 0.000 0.000 0.000 utils.py:16() + 1 0.000 0.000 0.000 0.000 entity.py:538(GeometrySet) + 1 0.000 0.000 0.000 0.000 numbers.py:4227(EulerGamma) + 1 0.000 0.000 0.000 0.000 join.py:11(JoinHook) + 1 0.000 0.000 0.000 0.000 parse.py:820(_Quoter) + 1 0.000 0.000 0.000 0.000 loss.py:1179(MultiLabelSoftMarginLoss) + 1 0.000 0.000 0.000 0.000 _functions.py:273(BackwardHookFunction) + 1 0.000 0.000 0.000 0.000 _nonlin.py:1137(DiagBroyden) + 1 0.000 0.000 0.000 0.000 single.py:978(RationalRiccati) + 1 0.000 0.000 0.000 0.000 _interface.py:553(_AdjointLinearOperator) + 1 0.000 0.000 0.000 0.000 _rules.py:208(_FxPassConvertNegToSigmoid) + 1 0.000 0.000 0.000 0.000 fake_tensor.py:49(IncrementRecursionCount) + 1 0.000 0.000 0.000 0.000 _kdtree.py:327(innernode) + 1 0.000 0.000 0.000 0.000 _adapters.py:83(ChildPath) + 1 0.000 0.000 0.000 0.000 chainmap.py:12(DeepChainMap) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:611(_ProtocolMeta) + 3 0.000 0.000 0.000 0.000 typing.py:3069() + 1 0.000 0.000 0.000 0.000 _memmapping_reducer.py:111(_WeakArrayKeyMap) + 1 0.000 0.000 0.000 0.000 dataloader.py:82(_InfiniteConstantSampler) + 1 0.000 0.000 0.000 0.000 _infra.py:167(StackFrame) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3349(multinomial_frozen) + 1 0.000 0.000 0.000 0.000 html.py:713(_LxmlFrameParser) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.float32} + 1 0.000 0.000 0.000 0.000 format.py:442(EastAsianTextAdjustment) + 1 0.000 0.000 0.000 0.000 __init__.py:280(LogRecord) + 4 0.000 0.000 0.000 0.000 :315(__subclasshook__) + 1 0.000 0.000 0.000 0.000 headerregistry.py:439(ParameterizedMIMEHeader) + 1 0.000 0.000 0.000 0.000 ipc.py:114(RecordBatchFileWriter) + 1 0.000 0.000 0.000 0.000 tz.py:328(_ttinfo) + 1 0.000 0.000 0.000 0.000 lazy.py:16(LazyDict) + 1 0.000 0.000 0.000 0.000 matrices.py:70(DeferredVector) + 1 0.000 0.000 0.000 0.000 pathlib.py:300(_Selector) + 1 0.000 0.000 0.000 0.000 _decorator.py:47(guaranteed_datapipes_determinism) + 1 0.000 0.000 0.000 0.000 overrides.py:1872(enable_reentrant_dispatch) + 1 0.000 0.000 0.000 0.000 array_comprehension.py:344(ArrayComprehensionMap) + 1 0.000 0.000 0.000 0.000 accessors.py:305(TimedeltaProperties) + 1 0.000 0.000 0.000 0.000 core.py:6712(_extrema_operation) + 1 0.000 0.000 0.000 0.000 __init__.py:9(verbose) + 1 0.000 0.000 0.000 0.000 distance.py:1697(PDistMetricWrapper) + 1 0.000 0.000 0.000 0.000 __init__.py:110(DeQuantize) + 1 0.000 0.000 0.000 0.000 {method 'close' of '_io.BufferedWriter' objects} + 1 0.000 0.000 0.000 0.000 _rules.py:182(_FxFrontendAotautograd) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3406(special_ortho_group_gen) + 1 0.000 0.000 0.000 0.000 observer.py:1419(ReuseInputObserver) + 3 0.000 0.000 0.000 0.000 core.py:1362(getmask) + 1 0.000 0.000 0.000 0.000 _script.py:1478(_ScriptProfileColumn) + 1 0.000 0.000 0.000 0.000 combining.py:496(MultiplexerIterDataPipe) + 1 0.000 0.000 0.000 0.000 util.py:5(assoc) + 1 0.000 0.000 0.000 0.000 compressor.py:568(__init__) + 1 0.000 0.000 0.000 0.000 discovery.py:183(PEP420PackageFinder) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:224(QuotedString) + 1 0.000 0.000 0.000 0.000 conv.py:220(ConvTranspose1d) + 1 0.000 0.000 0.000 0.000 resource_tracker.py:80(ResourceTracker) + 1 0.000 0.000 0.000 0.000 mathieu_functions.py:210(mathieucprime) + 1 0.000 0.000 0.000 0.000 proxy.py:53(ScopeContextManager) + 1 0.000 0.000 0.000 0.000 grouping.py:19(__getattr__) + 1 0.000 0.000 0.000 0.000 constraints.py:515(_Cat) + 1 0.000 0.000 0.000 0.000 hub.py:20(_Faketqdm) + 1 0.000 0.000 0.000 0.000 unix_events.py:1434(_UnixDefaultEventLoopPolicy) + 1 0.000 0.000 0.000 0.000 numbers.py:4286(Catalan) + 1 0.000 0.000 0.000 0.000 activation.py:478(ELU) + 1 0.000 0.000 0.000 0.000 torch_version.py:6(_LazyImport) + 1 0.000 0.000 0.000 0.000 gml.py:288(Token) + 1 0.000 0.000 0.000 0.000 _script.py:413(RecursiveScriptClass) + 1 0.000 0.000 0.000 0.000 resource_tracker.py:82(__init__) + 1 0.000 0.000 0.000 0.000 dispatcher.py:366(MethodDispatcher) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3756(random_correlation_gen) + 1 0.000 0.000 0.000 0.000 _strptime.py:30(LocaleTime) + 4 0.000 0.000 0.000 0.000 results.py:14(__init__) + 1 0.000 0.000 0.000 0.000 padding.py:382(ReplicationPad2d) + 1 0.000 0.000 0.000 0.000 conv_fused.py:495(ConvBn2d) + 1 0.000 0.000 0.000 0.000 suite.py:328(_ErrorHolder) + 1 0.000 0.000 0.000 0.000 hooks.py:92(BackwardHook) + 1 0.000 0.000 0.000 0.000 _rules.py:346(_ArgFormatTooVerbose) + 1 0.000 0.000 0.000 0.000 expanding.py:879(ExpandingGroupby) + 1 0.000 0.000 0.000 0.000 testing.py:20(reset_pyparsing_context) + 1 0.000 0.000 0.000 0.000 loss.py:35(L1Loss) + 1 0.000 0.000 0.000 0.000 pytables.py:2247(GenericIndexCol) + 1 0.000 0.000 0.000 0.000 more.py:2676(seekable) + 1 0.000 0.000 0.000 0.000 unix_events.py:1115(FastChildWatcher) + 1 0.000 0.000 0.000 0.000 calendar.py:156(__init__) + 1 0.000 0.000 0.000 0.000 graphml.py:837(GraphMLReader) + 1 0.000 0.000 0.000 0.000 pytables.py:3164(BlockManagerFixed) + 1 0.000 0.000 0.000 0.000 _backend.py:33(_backend_from_arg) + 1 0.000 0.000 0.000 0.000 DAG.py:1070(PDAG) + 1 0.000 0.000 0.000 0.000 merge.py:1793(_AsOfMerge) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.int8} + 2 0.000 0.000 0.000 0.000 constraint_registry.py:83(__init__) + 2 0.000 0.000 0.000 0.000 {pyarrow.lib.time64} + 1 0.000 0.000 0.000 0.000 qconfig.py:106(QConfigDynamic) + 4 0.000 0.000 0.000 0.000 core.py:3405(dtype) + 1 0.000 0.000 0.000 0.000 assume.py:175(PredicateMeta) + 1 0.000 0.000 0.000 0.000 batchnorm.py:121(_BatchNorm) + 1 0.000 0.000 0.000 0.000 _multivariate.py:5520(uniform_direction_gen) + 1 0.000 0.000 0.000 0.000 clique.py:758(MaxWeightClique) + 1 0.000 0.000 0.000 0.000 loader.py:23(_FailedTest) + 3 0.000 0.000 0.000 0.000 orderings.py:157(__init__) + 1 0.000 0.000 0.000 0.000 _pep440.py:135(_BaseVersion) + 1 0.000 0.000 0.000 0.000 __init__.py:46(PackageNotFoundError) + 2 0.000 0.000 0.000 0.000 {built-in method posix.lseek} + 1 0.000 0.000 0.000 0.000 _common.py:609(_WrapNumbers) + 1 0.000 0.000 0.000 0.000 _morestats.py:2261(_ABW) + 1 0.000 0.000 0.000 0.000 planarity.py:190(Interval) + 1 0.000 0.000 0.000 0.000 __init__.py:572(IResourceProvider) + 1 0.000 0.000 0.000 0.000 selectors.py:206(_BaseSelectorImpl) + 1 0.000 0.000 0.000 0.000 core.py:3405(GoToColumn) + 8 0.000 0.000 0.000 0.000 _pyio.py:2127(buffer) + 1 0.000 0.000 0.000 0.000 depends.py:161(_update_globals) + 3 0.000 0.000 0.000 0.000 six.py:880(add_metaclass) + 3 0.000 0.000 0.000 0.000 core.py:5(exhaust) + 1 0.000 0.000 0.000 0.000 ElementTree.py:1272(XMLPullParser) + 1 0.000 0.000 0.000 0.000 modules.py:1001(SubQuotientModule) + 1 0.000 0.000 0.000 0.000 _symbolic_trace.py:876(_PatchedFn) + 1 0.000 0.000 0.000 0.000 integer.py:208(UInt64Dtype) + 1 0.000 0.000 0.000 0.000 polyoptions.py:710(Symbols) + 1 0.000 0.000 0.000 0.000 MarkovModel.py:6(MarkovModel) + 2 0.000 0.000 0.000 0.000 __init__.py:109() + 1 0.000 0.000 0.000 0.000 utils.py:48(Comparable) + 1 0.000 0.000 0.000 0.000 conv.py:1333(LazyConv3d) + 1 0.000 0.000 0.000 0.000 {method 'getrandbits' of '_random.Random' objects} + 1 0.000 0.000 0.000 0.000 linear.py:127(NonDynamicallyQuantizableLinear) + 3 0.000 0.000 0.000 0.000 {method 'copy' of 'mappingproxy' objects} + 1 0.000 0.000 0.000 0.000 nanops.py:74(disallow) + 1 0.000 0.000 0.000 0.000 request.py:1080(AbstractDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 formal.py:1549(FormalPowerSeriesProduct) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:885(MeijerFormula) + 1 0.000 0.000 0.000 0.000 _json.py:287(JSONTableWriter) + 1 0.000 0.000 0.000 0.000 more.py:911(bucket) + 1 0.000 0.000 0.000 0.000 extension.py:180(NDArrayBackedExtensionIndex) + 1 0.000 0.000 0.000 0.000 ecm.py:16(Point) + 1 0.000 0.000 0.000 0.000 _rotation_spline.py:251(RotationSpline) + 1 0.000 0.000 0.000 0.000 streams.py:117(FlowControlMixin) + 1 0.000 0.000 0.000 0.000 _guards.py:354(Source) + 1 0.000 0.000 0.000 0.000 abc.py:161(ResourceLoader) + 1 0.000 0.000 0.000 0.000 _trace.py:75(ONNXTracedModule) + 1 0.000 0.000 0.000 0.000 datetimes.py:102(YearMonthDayDict) + 1 0.000 0.000 0.000 0.000 reinplace.py:53(_FunctionalizationMetadataProp) + 1 0.000 0.000 0.000 0.000 _multivariate.py:5440(random_table_frozen) + 1 0.000 0.000 0.000 0.000 activation.py:733(LeakyReLU) + 1 0.000 0.000 0.000 0.000 _weights_only_unpickler.py:113(Unpickler) + 1 0.000 0.000 0.000 0.000 numpy.py:429() + 1 0.000 0.000 0.000 0.000 reportviews.py:736(OutEdgeDataView) + 1 0.000 0.000 0.000 0.000 reportviews.py:182(__len__) + 1 0.000 0.000 0.000 0.000 arrayprint.py:1304(DatetimeFormat) + 3 0.000 0.000 0.000 0.000 core.py:78(do_one) + 1 0.000 0.000 0.000 0.000 splitter_base.py:37(_SplitterSettingBase) + 1 0.000 0.000 0.000 0.000 __init__.py:1237(_StderrHandler) + 1 0.000 0.000 0.000 0.000 core.py:2261(Token) + 1 0.000 0.000 0.000 0.000 polynomials.py:664(chebyshevt_root) + 1 0.000 0.000 0.000 0.000 results.py:11(_ParseResultsWithOffset) + 1 0.000 0.000 0.000 0.000 algebraicconnectivity.py:21(_PCGSolver) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:455(Mailbox) + 1 0.000 0.000 0.000 0.000 transforms.py:89(__init__) + 1 0.000 0.000 0.000 0.000 padding.py:341(ReplicationPad1d) + 1 0.000 0.000 0.000 0.000 typing.py:441(__init__) + 1 0.000 0.000 0.000 0.000 parser.py:16(Parser) + 1 0.000 0.000 0.000 0.000 swa_utils.py:13(AveragedModel) + 1 0.000 0.000 0.000 0.000 info.py:1061(SeriesTableBuilderVerbose) + 1 0.000 0.000 0.000 0.000 info.py:688(SeriesInfoPrinter) + 1 0.000 0.000 0.000 0.000 BayesianModel.py:6(BayesianModel) + 1 0.000 0.000 0.000 0.000 datetime.py:1223(tzinfo) + 1 0.000 0.000 0.000 0.000 _multivariate.py:5039(multivariate_hypergeom_frozen) + 1 0.000 0.000 0.000 0.000 synchronize.py:321(Event) + 1 0.000 0.000 0.000 0.000 _meta.py:32(SimplePath) + 1 0.000 0.000 0.000 0.000 process.py:364(_ParentProcess) + 8 0.000 0.000 0.000 0.000 six.py:80(_add_doc) + 1 0.000 0.000 0.000 0.000 _exceptions.py:38(_UFuncBinaryResolutionError) + 1 0.000 0.000 0.000 0.000 __init__.py:975(subscribe) + 1 0.000 0.000 0.000 0.000 single.py:2846(LieGroup) + 1 0.000 0.000 0.000 0.000 loss.py:219(NLLLoss2d) + 1 0.000 0.000 0.000 0.000 _dual_annealing.py:384(LocalSearchWrapper) + 1 0.000 0.000 0.000 0.000 loss.py:726(HingeEmbeddingLoss) + 1 0.000 0.000 0.000 0.000 mock.py:1100(CallableMixin) + 1 0.000 0.000 0.000 0.000 boolalg.py:1465(Exclusive) + 1 0.000 0.000 0.000 0.000 graphml.py:700(GraphMLWriterLxml) + 1 0.000 0.000 0.000 0.000 tempfile.py:459(_TemporaryFileWrapper) + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_sha512} + 1 0.000 0.000 0.000 0.000 rootoftools.py:37(_pure_key_dict) + 1 0.000 0.000 0.000 0.000 coreviews.py:109(UnionAtlas) + 1 0.000 0.000 0.000 0.000 plot.py:571(Line2DBaseSeries) + 1 0.000 0.000 0.000 0.000 config.py:257(CallableDynamicDoc) + 1 0.000 0.000 0.000 0.000 reductions.py:22(StorageWeakRef) + 4 0.000 0.000 0.000 0.000 calendar.py:55() + 1 0.000 0.000 0.000 0.000 utils.py:210(CacheDict) + 6 0.000 0.000 0.000 0.000 signal.py:48(_wraps) + 1 0.000 0.000 0.000 0.000 __init__.py:275(cudaStatus) + 1 0.000 0.000 0.000 0.000 necompiler.py:221(Register) + 1 0.000 0.000 0.000 0.000 _rules.py:231(_FxIrAddNode) + 1 0.000 0.000 0.000 0.000 __init__.py:1744(EmptyProvider) + 1 0.000 0.000 0.000 0.000 _base.py:59(_Waiter) + 1 0.000 0.000 0.000 0.000 pooling.py:171(MaxPool3d) + 1 0.000 0.000 0.000 0.000 conv.py:1538(LazyConvTranspose3d) + 6 0.000 0.000 0.000 0.000 _dill.py:1193(save_dict_view_for_function) + 1 0.000 0.000 0.000 0.000 _odds_ratio.py:175(OddsRatioResult) + 1 0.000 0.000 0.000 0.000 core.py:977(_MaskedBinaryOperation) + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_sha384} + 1 0.000 0.000 0.000 0.000 sympy_parser.py:1236(__init__) + 1 0.000 0.000 0.000 0.000 process_executor.py:139(_ExecutorFlags) + 1 0.000 0.000 0.000 0.000 popen_loky_posix.py:25(_DupFd) + 1 0.000 0.000 0.000 0.000 bessel.py:1124(AiryBase) + 1 0.000 0.000 0.000 0.000 _binomtest.py:10(BinomTestResult) + 1 0.000 0.000 0.000 0.000 assume.py:15(AssumptionsContext) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.bool_} + 1 0.000 0.000 0.000 0.000 _optimize.py:57(MemoizeJac) + 1 0.000 0.000 0.000 0.000 locks.py:219(Condition) + 2 0.000 0.000 0.000 0.000 __init__.py:407(SeparatedValues) + 1 0.000 0.000 0.000 0.000 fancysets.py:1491(Complexes) + 1 0.000 0.000 0.000 0.000 _stats_py.py:6028(TtestResult) + 1 0.000 0.000 0.000 0.000 core.py:5363(TokenConverter) + 4 0.000 0.000 0.000 0.000 typing.py:402(__init_subclass__) + 1 0.000 0.000 0.000 0.000 __init__.py:13(verbose) + 1 0.000 0.000 0.000 0.000 splitter_base.py:186(Subgraph) + 1 0.000 0.000 0.000 0.000 _quad_vec.py:12(LRUDict) + 1 0.000 0.000 0.000 0.000 loss.py:1226(CosineEmbeddingLoss) + 1 0.000 0.000 0.000 0.000 extras.py:214(_fromnxfunction) + 1 0.000 0.000 0.000 0.000 more.py:2562(seekable) + 1 0.000 0.000 0.000 0.000 utilities.py:166(AlgIntPowers) + 1 0.000 0.000 0.000 0.000 request.py:1256(AbstractHTTPHandler) + 1 0.000 0.000 0.000 0.000 tasks.py:689(_GatheringFuture) + 1 0.000 0.000 0.000 0.000 _hessian_update_strategy.py:239(BFGS) + 1 0.000 0.000 0.000 0.000 constraints.py:146(_DependentProperty) + 1 0.000 0.000 0.000 0.000 diophantine.py:1038(GeneralPythagorean) + 1 0.000 0.000 0.000 0.000 boolalg.py:1149(Xnor) + 1 0.000 0.000 0.000 0.000 ctypeslib.py:204(_concrete_ndptr) + 1 0.000 0.000 0.000 0.000 temporalisomorphvf2.py:75(TimeRespectingGraphMatcher) + 1 0.000 0.000 0.000 0.000 _json.py:242(SeriesWriter) + 1 0.000 0.000 0.000 0.000 _dual_annealing.py:20(VisitingDistribution) + 1 0.000 0.000 0.000 0.000 _shgo.py:1541(LMapCache) + 1 0.000 0.000 0.000 0.000 grad_mode.py:164(inference_mode) + 1 0.000 0.000 0.000 0.000 _nonlin.py:1314(KrylovJacobian) + 1 0.000 0.000 0.000 0.000 __init__.py:840(_CudaBase) + 1 0.000 0.000 0.000 0.000 headerregistry.py:562(HeaderRegistry) + 1 0.000 0.000 0.000 0.000 _script.py:1534(_ScriptProfile) + 1 0.000 0.000 0.000 0.000 mpelements.py:28(ComplexElement) + 1 0.000 0.000 0.000 0.000 _distn_infrastructure.py:1666(_ShapeInfo) + 1 0.000 0.000 0.000 0.000 _root_scalar.py:19(MemoizeDer) + 1 0.000 0.000 0.000 0.000 _compression.py:9(BaseStream) + 1 0.000 0.000 0.000 0.000 _datasource.py:99(__init__) + 1 0.000 0.000 0.000 0.000 core.py:3543(WordStart) + 1 0.000 0.000 0.000 0.000 _rules.py:92(_OperatorSupportedInNewerOpsetVersion) + 1 0.000 0.000 0.000 0.000 padding.py:434(ReplicationPad3d) + 1 0.000 0.000 0.000 0.000 locks.py:158(Event) + 1 0.000 0.000 0.000 0.000 conv.py:155(Conv3d) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:994(_TypedDictMeta) + 1 0.000 0.000 0.000 0.000 ElementTree.py:1105(_ListDataStream) + 1 0.000 0.000 0.000 0.000 _rules.py:323(_FxFrontendDynamoMakeFx) + 1 0.000 0.000 0.000 0.000 abc.py:112(PathEntryFinder) + 1 0.000 0.000 0.000 0.000 anomaly_mode.py:91(set_detect_anomaly) + 1 0.000 0.000 0.000 0.000 core.py:195() + 1 0.000 0.000 0.000 0.000 constraints.py:384(__init__) + 1 0.000 0.000 0.000 0.000 getopt.py:43(GetoptError) + 1 0.000 0.000 0.000 0.000 contexts.py:216(RNGContext) + 1 0.000 0.000 0.000 0.000 loss.py:1614(CTCLoss) + 1 0.000 0.000 0.000 0.000 autograd_function.py:251(VmapInfo) + 1 0.000 0.000 0.000 0.000 heaps.py:281(BinaryHeap) + 1 0.000 0.000 0.000 0.000 __init__.py:329(SymBool) + 1 0.000 0.000 0.000 0.000 single.py:574(FirstLinear) + 1 0.000 0.000 0.000 0.000 format.py:1437(FloatArrayFormatter) + 1 0.000 0.000 0.000 0.000 tzfile.py:12(_byte_string) + 1 0.000 0.000 0.000 0.000 linear.py:5(Linear) + 1 0.000 0.000 0.000 0.000 config.py:76(DeprecatedOption) + 1 0.000 0.000 0.000 0.000 abc.py:230(ExecutionLoader) + 4 0.000 0.000 0.000 0.000 basic.py:750(args) + 1 0.000 0.000 0.000 0.000 determinant.py:65(Permanent) + 1 0.000 0.000 0.000 0.000 codeprinter.py:17(requires) + 1 0.000 0.000 0.000 0.000 ops.py:546(UnaryOp) + 1 0.000 0.000 0.000 0.000 _package_unpickler.py:7(PackageUnpickler) + 1 0.000 0.000 0.000 0.000 server_process_global_profiler.py:16(_server_process_global_profile) + 1 0.000 0.000 0.000 0.000 _kdtree.py:318(leafnode) + 1 0.000 0.000 0.000 0.000 floating.py:54(FloatingArray) + 1 0.000 0.000 0.000 0.000 pkgutil.py:194(ImpImporter) + 1 0.000 0.000 0.000 0.000 pool.py:48(CustomizablePickler) + 1 0.000 0.000 0.000 0.000 integer.py:62(IntegerArray) + 1 0.000 0.000 0.000 0.000 _json.py:1272(FrameParser) + 1 0.000 0.000 0.000 0.000 traversal.py:71(preorder_traversal) + 1 0.000 0.000 0.000 0.000 feedparser.py:210(_pop_message) + 1 0.000 0.000 0.000 0.000 _rules.py:277(_AtenlibFxToOnnx) + 1 0.000 0.000 0.000 0.000 index_tricks.py:306(__init__) + 1 0.000 0.000 0.000 0.000 csv.py:165(Sniffer) + 1 0.000 0.000 0.000 0.000 storage.py:230(UntypedStorage) + 3 0.000 0.000 0.000 0.000 {method '__getitem__' of 'dict' objects} + 1 0.000 0.000 0.000 0.000 _rules.py:300(_FxNodeToOnnx) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:1606(ParamSpec) + 1 0.000 0.000 0.000 0.000 _datasource.py:74(_FileOpeners) + 1 0.000 0.000 0.000 0.000 _globals.py:60(_NoValueType) + 1 0.000 0.000 0.000 0.000 base.py:258(ConstantDenseOutput) + 1 0.000 0.000 0.000 0.000 reportviews.py:1314(OutMultiEdgeView) + 1 0.000 0.000 0.000 0.000 python_parser.py:1277(FixedWidthFieldParser) + 1 0.000 0.000 0.000 0.000 _rules.py:126(_FxTracerSuccess) + 1 0.000 0.000 0.000 0.000 my_exceptions.py:19(__getattr__) + 1 0.000 0.000 0.000 0.000 constraint_registry.py:79(ConstraintRegistry) + 1 0.000 0.000 0.000 0.000 conv.py:1470(LazyConvTranspose2d) + 1 0.000 0.000 0.000 0.000 pytables.py:2780() + 1 0.000 0.000 0.000 0.000 line.py:2377(Segment2D) + 1 0.000 0.000 0.000 0.000 _decorator.py:148(runtime_validation_disabled) + 1 0.000 0.000 0.000 0.000 indexing.py:2361(_ScalarAccessIndexer) + 1 0.000 0.000 0.000 0.000 context.py:283(SpawnProcess) + 1 0.000 0.000 0.000 0.000 exponential.py:138(exp_polar) + 1 0.000 0.000 0.000 0.000 isomorphvf2.py:519(DiGraphMatcher) + 1 0.000 0.000 0.000 0.000 _rules.py:254(_AtenlibSymbolicFunction) + 1 0.000 0.000 0.000 0.000 xml.py:433(_EtreeFrameParser) + 4 0.000 0.000 0.000 0.000 config.py:797(is_type_factory) + 1 0.000 0.000 0.000 0.000 process.py:66(_ThreadWakeup) + 1 0.000 0.000 0.000 0.000 _zeros_py.py:33(RootResults) + 1 0.000 0.000 0.000 0.000 {built-in method _locale.getencoding} + 1 0.000 0.000 0.000 0.000 matrices.py:442(MatrixCalculus) + 1 0.000 0.000 0.000 0.000 pool.py:150(_PoolCache) + 1 0.000 0.000 0.000 0.000 __init__.py:1323(disable) + 2 0.000 0.000 0.000 0.000 __init__.py:229(Splitter) + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_sha3_256} + 1 0.000 0.000 0.000 0.000 plistlib.py:631(_BinaryPlistWriter) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.uint16} + 1 0.000 0.000 0.000 0.000 relational.py:877(_Less) + 1 0.000 0.000 0.000 0.000 _functions.py:52(Gather) + 1 0.000 0.000 0.000 0.000 selectors.py:433(PollSelector) + 3 0.000 0.000 0.000 0.000 {built-in method _stat.S_ISREG} + 1 0.000 0.000 0.000 0.000 code.py:162(InteractiveConsole) + 1 0.000 0.000 0.000 0.000 plistlib.py:321(_PlistWriter) + 1 0.000 0.000 0.000 0.000 parameters.py:7(_global_parameters) + 1 0.000 0.000 0.000 0.000 _hessian_update_strategy.py:377(SR1) + 1 0.000 0.000 0.000 0.000 selectors.py:60(_SelectorMapping) + 1 0.000 0.000 0.000 0.000 events.py:610(AbstractEventLoopPolicy) + 1 0.000 0.000 0.000 0.000 polynomials.py:704(chebyshevu_root) + 1 0.000 0.000 0.000 0.000 pooling.py:935(LPPool2d) + 1 0.000 0.000 0.000 0.000 process_executor.py:283(_SafeQueue) + 1 0.000 0.000 0.000 0.000 core.py:2472(CaselessLiteral) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:517(AddrSpec) + 2 0.000 0.000 0.000 0.000 utils.py:15(InvalidWheelFilename) + 1 0.000 0.000 0.000 0.000 numpy.py:431(CuPyPrinter) + 1 0.000 0.000 0.000 0.000 unix_events.py:831(AbstractChildWatcher) + 1 0.000 0.000 0.000 0.000 formal.py:1619(FormalPowerSeriesCompose) + 2 0.000 0.000 0.000 0.000 markers.py:34(InvalidMarker) + 1 0.000 0.000 0.000 0.000 numpy.py:452() + 1 0.000 0.000 0.000 0.000 facts.py:285(__init__) + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_sha3_512} + 1 0.000 0.000 0.000 0.000 _multivariate.py:1680(dirichlet_frozen) + 1 0.000 0.000 0.000 0.000 stata.py:664(StataValueLabel) + 1 0.000 0.000 0.000 0.000 exceptions.py:29(IncompleteReadError) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:263(Comment) + 1 0.000 0.000 0.000 0.000 polyutils.py:424(PicklableWithSlots) + 1 0.000 0.000 0.000 0.000 transforms.py:865(SoftmaxTransform) + 1 0.000 0.000 0.000 0.000 array_manager.py:1364(NullArrayProxy) + 1 0.000 0.000 0.000 0.000 __init__.py:1691(EggProvider) + 1 0.000 0.000 0.000 0.000 expressions.py:38(Expression) + 1 0.000 0.000 0.000 0.000 conv_fused.py:627(ConvBn3d) + 1 0.000 0.000 0.000 0.000 decorator.py:96(no_attrs_in_subclass) + 1 0.000 0.000 0.000 0.000 transforms.py:900(StickBreakingTransform) + 1 0.000 0.000 0.000 0.000 _functions.py:85(Scatter) + 1 0.000 0.000 0.000 0.000 _package_pickler.py:21(PackagePickler) + 1 0.000 0.000 0.000 0.000 _interface.py:690(_PowerLinearOperator) + 4 0.000 0.000 0.000 0.000 expressions.py:228(gen_reduce_axis_func) + 1 0.000 0.000 0.000 0.000 runner.py:14(_WritelnDecorator) + 1 0.000 0.000 0.000 0.000 constraints.py:550(_Stack) + 1 0.000 0.000 0.000 0.000 calendar.py:26(IllegalMonthError) + 1 0.000 0.000 0.000 0.000 loss.py:380(KLDivLoss) + 2 0.000 0.000 0.000 0.000 sysconfig.py:279(_get_preferred_schemes) + 1 0.000 0.000 0.000 0.000 _classes.py:21(__init__) + 1 0.000 0.000 0.000 0.000 configparser.py:169(Error) + 1 0.000 0.000 0.000 0.000 common.py:1006(_BytesZipFile) + 2 0.000 0.000 0.000 0.000 parallel.py:904(_print) + 1 0.000 0.000 0.000 0.000 branchings.py:283(Edmonds) + 1 0.000 0.000 0.000 0.000 polyoptions.py:610(Strict) + 1 0.000 0.000 0.000 0.000 plistlib.py:283(_DumbXMLWriter) + 1 0.000 0.000 0.000 0.000 _fitpack2.py:1200(_DerivedBivariateSpline) + 1 0.000 0.000 0.000 0.000 ipaddress.py:2173(IPv6Network) + 1 0.000 0.000 0.000 0.000 _fitpack2.py:1227(SmoothBivariateSpline) + 1 0.000 0.000 0.000 0.000 dataloader.py:660(_SingleProcessDataLoaderIter) + 1 0.000 0.000 0.000 0.000 single.py:1564(HomogeneousCoeffSubsIndepDivDep) + 1 0.000 0.000 0.000 0.000 xml.py:533(_LxmlFrameParser) + 1 0.000 0.000 0.000 0.000 discretize.py:147(UnbiasedDiscretizer) + 1 0.000 0.000 0.000 0.000 graph_manipulation.py:43(size_bytes) + 1 0.000 0.000 0.000 0.000 __init__.py:1152(FileHandler) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:556(DisplayName) + 1 0.000 0.000 0.000 0.000 datapipe.py:326(_DataPipeSerializationWrapper) + 1 0.000 0.000 0.000 0.000 _directory_reader.py:17(DirectoryReader) + 1 0.000 0.000 0.000 0.000 _deprecated_my_exceptions.py:11(JoblibException) + 1 0.000 0.000 0.000 0.000 _base.py:111(_AllCompletedWaiter) + 1 0.000 0.000 0.000 0.000 request.py:1374(HTTPHandler) + 1 0.000 0.000 0.000 0.000 groupby.py:598(GroupByPlot) + 1 0.000 0.000 0.000 0.000 pooling.py:488(_AvgPoolNd) + 1 0.000 0.000 0.000 0.000 _hessian_update_strategy.py:11(HessianUpdateStrategy) + 1 0.000 0.000 0.000 0.000 runtests.py:1581(SymPyDocTestFinder) + 4 0.000 0.000 0.000 0.000 bessel.py:385(c_memo) + 1 0.000 0.000 0.000 0.000 paths.py:23(PathOptimizer) + 4 0.000 0.000 0.000 0.000 mpelements.py:34(_set_mpc) + 4 0.000 0.000 0.000 0.000 core.py:6521(__has_singleton) + 1 0.000 0.000 0.000 0.000 core.py:2284(NoMatch) + 1 0.000 0.000 0.000 0.000 csv.py:54(excel) + 1 0.000 0.000 0.000 0.000 locks.py:331(Semaphore) + 1 0.000 0.000 0.000 0.000 _common.py:275(Error) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:190(SequentialBackend) + 1 0.000 0.000 0.000 0.000 grad_mode.py:293(_unsafe_preserve_version_counter) + 1 0.000 0.000 0.000 0.000 polyoptions.py:526(Gaussian) + 1 0.000 0.000 0.000 0.000 arpack.py:273(ArpackError) + 1 0.000 0.000 0.000 0.000 transforms.py:521(ExpTransform) + 1 0.000 0.000 0.000 0.000 transforms.py:2353(SineCosineTypeTransform) + 1 0.000 0.000 0.000 0.000 logic.py:401(Not) + 1 0.000 0.000 0.000 0.000 response.py:37(addclosehook) + 1 0.000 0.000 0.000 0.000 proxy.py:22(Scope) + 1 0.000 0.000 0.000 0.000 loss.py:17(_Loss) + 1 0.000 0.000 0.000 0.000 jiterator.py:42(_JittedFunction) + 1 0.000 0.000 0.000 0.000 conv.py:154(_ConvTransposeNd) + 1 0.000 0.000 0.000 0.000 activation.py:361(SiLU) + 1 0.000 0.000 0.000 0.000 _nonlin.py:1251(ExcitingMixing) + 1 0.000 0.000 0.000 0.000 calendar.py:573(LocaleTextCalendar) + 1 0.000 0.000 0.000 0.000 parse.py:190(_NetlocResultMixinStr) + 1 0.000 0.000 0.000 0.000 __init__.py:183(AbstractMethodError) + 1 0.000 0.000 0.000 0.000 plot.py:346(PlotGrid) + 1 0.000 0.000 0.000 0.000 _beartype.py:38(_create_beartype_decorator) + 1 0.000 0.000 0.000 0.000 pairs.py:1() + 1 0.000 0.000 0.000 0.000 ndim_array.py:590(ImmutableNDimArray) + 1 0.000 0.000 0.000 0.000 _base.py:74(_AsCompletedWaiter) + 1 0.000 0.000 0.000 0.000 polyoptions.py:50(BooleanOption) + 1 0.000 0.000 0.000 0.000 transports.py:46(ReadTransport) + 1 0.000 0.000 0.000 0.000 _recursive.py:358(__init__) + 1 0.000 0.000 0.000 0.000 logger.py:170(TraceFormatter) + 1 0.000 0.000 0.000 0.000 triangulation.py:454(VertexGroup) + 1 0.000 0.000 0.000 0.000 logger.py:260(TraceManager) + 2 0.000 0.000 0.000 0.000 planarity.py:198(__init__) + 1 0.000 0.000 0.000 0.000 bessel.py:577(hankel1) + 1 0.000 0.000 0.000 0.000 activation.py:849(Softshrink) + 1 0.000 0.000 0.000 0.000 _state.py:12(EnabledProxy) + 1 0.000 0.000 0.000 0.000 SEM.py:819(SEMAlg) + 4 0.000 0.000 0.000 0.000 function_base.py:1796(_trim_zeros) + 1 0.000 0.000 0.000 0.000 _exceptions.py:132(AxisError) + 1 0.000 0.000 0.000 0.000 config.py:83(RegisteredOption) + 1 0.000 0.000 0.000 0.000 request.py:834(HTTPPasswordMgr) + 1 0.000 0.000 0.000 0.000 containers.py:374(TupleKind) + 1 0.000 0.000 0.000 0.000 logger.py:63(Logger) + 1 0.000 0.000 0.000 0.000 runner.py:161(TextTestRunner) + 1 0.000 0.000 0.000 0.000 _fitpack2.py:625(InterpolatedUnivariateSpline) + 1 0.000 0.000 0.000 0.000 pyfunctorch.py:147(JvpInterpreter) + 1 0.000 0.000 0.000 0.000 __init__.py:711(BufferingFormatter) + 1 0.000 0.000 0.000 0.000 __init__.py:316(LZ4FrameDecompressor) + 1 0.000 0.000 0.000 0.000 doctest.py:2670(_TestClass) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:482(InvalidMailbox) + 1 0.000 0.000 0.000 0.000 reportviews.py:379(DiDegreeView) + 1 0.000 0.000 0.000 0.000 transforms.py:1785(LaplaceTransform) + 1 0.000 0.000 0.000 0.000 _typing.py:244(ReadCsvBuffer) + 1 0.000 0.000 0.000 0.000 base_subprocess.py:255(WriteSubprocessPipeProto) + 1 0.000 0.000 0.000 0.000 ctx_mp.py:1301(PrecisionManager) + 2 0.000 0.000 0.000 0.000 reprlib.py:9(recursive_repr) + 1 0.000 0.000 0.000 0.000 reductions.py:62(_after_fork) + 1 0.000 0.000 0.000 0.000 variable.py:13(Variable) + 1 0.000 0.000 0.000 0.000 _jit_internal.py:514(FunctionModifiers) + 1 0.000 0.000 0.000 0.000 _strptime.py:170(TimeRE) + 1 0.000 0.000 0.000 0.000 _multivariate.py:4536(multivariate_t_frozen) + 1 0.000 0.000 0.000 0.000 union_find.py:8(UnionFind) + 1 0.000 0.000 0.000 0.000 pytables.py:4295(AppendableTable) + 1 0.000 0.000 0.000 0.000 algorithms.py:1372(SelectNFrame) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:411(MultiprocessingBackend) + 1 0.000 0.000 0.000 0.000 simple_paths.py:590(PathBuffer) + 1 0.000 0.000 0.000 0.000 context.py:203(reducer) + 1 0.000 0.000 0.000 0.000 sparse.py:462(MutableSparseMatrix) + 1 0.000 0.000 0.000 0.000 gaussiandomains.py:169(GaussianInteger) + 3 0.000 0.000 0.000 0.000 __init__.py:983(setFormatter) + 1 0.000 0.000 0.000 0.000 single.py:2791(SecondLinearAiry) + 1 0.000 0.000 0.000 0.000 compressor.py:115(BZ2CompressorWrapper) + 1 0.000 0.000 0.000 0.000 _basinhopping.py:12(Storage) + 1 0.000 0.000 0.000 0.000 core.py:3569(WordEnd) + 1 0.000 0.000 0.000 0.000 profiler_util.py:534(FunctionEventAvg) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:308(Address) + 1 0.000 0.000 0.000 0.000 single.py:648(AlmostLinear) + 1 0.000 0.000 0.000 0.000 distributed_c10d.py:1345(P2POp) + 1 0.000 0.000 0.000 0.000 utils.py:69(ObjectWrapper) + 1 0.000 0.000 0.000 0.000 sets.py:2699(SetKind) + 1 0.000 0.000 0.000 0.000 _polyint.py:508(BarycentricInterpolator) + 1 0.000 0.000 0.000 0.000 nonreduce.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:340(UndefinedVariableError) + 1 0.000 0.000 0.000 0.000 pooling.py:893(LPPool1d) + 1 0.000 0.000 0.000 0.000 autograd_function.py:29(CustomFunctionPyOperator) + 1 0.000 0.000 0.000 0.000 transforms.py:2559(InverseCosineTransform) + 1 0.000 0.000 0.000 0.000 inverselaplace.py:667(LaplaceTransformInversionMethods) + 1 0.000 0.000 0.000 0.000 stubs.py:4(QuantStub) + 1 0.000 0.000 0.000 0.000 request.py:1588(CacheFTPHandler) + 1 0.000 0.000 0.000 0.000 container.py:31(Container) + 2 0.000 0.000 0.000 0.000 __init__.py:1991(__init__) + 1 0.000 0.000 0.000 0.000 six.py:108(MovedModule) + 1 0.000 0.000 0.000 0.000 hyper.py:1095(appellf1) + 1 0.000 0.000 0.000 0.000 combining.py:62(ForkerIterDataPipe) + 1 0.000 0.000 0.000 0.000 activation.py:298(Hardsigmoid) + 1 0.000 0.000 0.000 0.000 _ops.py:594(_Ops) + 1 0.000 0.000 0.000 0.000 __init__.py:2213(NullHandler) + 1 0.000 0.000 0.000 0.000 __init__.py:1200(__init__) + 1 0.000 0.000 0.000 0.000 one_hot_categorical.py:113(OneHotCategoricalStraightThrough) + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_shake_128} + 1 0.000 0.000 0.000 0.000 {method 'close' of '_io.BufferedReader' objects} + 1 0.000 0.000 0.000 0.000 _covariance.py:501(CovViaDiagonal) + 1 0.000 0.000 0.000 0.000 diophantine.py:215(Univariate) + 1 0.000 0.000 0.000 0.000 pool.py:80(MaybeEncodingError) + 1 0.000 0.000 0.000 0.000 pathlib.py:378(_RecursiveWildcardSelector) + 1 0.000 0.000 0.000 0.000 _qmc.py:2119(MultinomialQMC) + 1 0.000 0.000 0.000 0.000 argparse.py:1645(_ArgumentGroup) + 1 0.000 0.000 0.000 0.000 case.py:282(_AssertWarnsContext) + 1 0.000 0.000 0.000 0.000 instancenorm.py:153(LazyInstanceNorm1d) + 1 0.000 0.000 0.000 0.000 activation.py:568(SELU) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:1499(_DefaultMixin) + 1 0.000 0.000 0.000 0.000 doctest.py:1767(DebugRunner) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:2214(TypeVarTuple) + 1 0.000 0.000 0.000 0.000 sharding.py:23(_ShardingIterDataPipe) + 2 0.000 0.000 0.000 0.000 _pyio.py:43(text_encoding) + 1 0.000 0.000 0.000 0.000 polyutils.py:499(IntegerPowerable) + 1 0.000 0.000 0.000 0.000 _pytree.py:41(NodeDef) + 1 0.000 0.000 0.000 0.000 _monitor.py:15(TMonitor) + 1 0.000 0.000 0.000 0.000 compressor.py:120(__init__) + 4 0.000 0.000 0.000 0.000 {method 'values' of 'collections.OrderedDict' objects} + 1 0.000 0.000 0.000 0.000 index_methods.py:22(IndexConformanceException) + 1 0.000 0.000 0.000 0.000 quadrature.py:459(QuadratureMethods) + 1 0.000 0.000 0.000 0.000 config.py:421(option_context) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:289(AddressList) + 1 0.000 0.000 0.000 0.000 format.py:428(TextAdjustment) + 1 0.000 0.000 0.000 0.000 __init__.py:28(_QEngineProp) + 1 0.000 0.000 0.000 0.000 transforms.py:2440(InverseSineTransform) + 1 0.000 0.000 0.000 0.000 ordinals.py:261(OrdinalOmega) + 1 0.000 0.000 0.000 0.000 threading.py:410(Semaphore) + 1 0.000 0.000 0.000 0.000 transforms.py:587(SigmoidTransform) + 1 0.000 0.000 0.000 0.000 utils.py:77(_ntuple_from_first) + 1 0.000 0.000 0.000 0.000 protocols.py:9(BaseProtocol) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:1459(OneCycleLR) + 1 0.000 0.000 0.000 0.000 activation.py:650(GELU) + 5 0.000 0.000 0.000 0.000 {method 'bit_length' of 'int' objects} + 1 0.000 0.000 0.000 0.000 __init__.py:736(Context) + 1 0.000 0.000 0.000 0.000 argparse.py:1687(_MutuallyExclusiveGroup) + 1 0.000 0.000 0.000 0.000 graphs.py:118(graph) + 1 0.000 0.000 0.000 0.000 visualization.py:9(VisualizationMethods) + 1 0.000 0.000 0.000 0.000 dataframe_protocol.py:89(ColumnBuffers) + 1 0.000 0.000 0.000 0.000 _generated_version.py:1() + 1 0.000 0.000 0.000 0.000 pool.py:100(CustomizablePicklingQueue) + 1 0.000 0.000 0.000 0.000 _guards.py:284(GuardsContext) + 1 0.000 0.000 0.000 0.000 __init__.py:115() + 1 0.000 0.000 0.000 0.000 zipfile.py:2286(FastLookup) + 1 0.000 0.000 0.000 0.000 activation.py:524(CELU) + 1 0.000 0.000 0.000 0.000 polyutils.py:169() + 1 0.000 0.000 0.000 0.000 argparse.py:885(BooleanOptionalAction) + 1 0.000 0.000 0.000 0.000 grouping.py:89(UnBatcherIterDataPipe) + 1 0.000 0.000 0.000 0.000 pickle_compat.py:201(Unpickler) + 1 0.000 0.000 0.000 0.000 transforms.py:2381(SineTransform) + 1 0.000 0.000 0.000 0.000 _nonlin.py:310(TerminationCondition) + 1 0.000 0.000 0.000 0.000 mock.py:2515(__init__) + 1 0.000 0.000 0.000 0.000 dataframes.py:417(DataFrameTracer) + 1 0.000 0.000 0.000 0.000 queue.py:223(PriorityQueue) + 1 0.000 0.000 0.000 0.000 _polyint.py:222(KroghInterpolator) + 1 0.000 0.000 0.000 0.000 describe.py:131(SeriesDescriber) + 2 0.000 0.000 0.000 0.000 libmpf.py:692(mpf_sign) + 1 0.000 0.000 0.000 0.000 _jit_internal.py:631(_IgnoreContextManager) + 1 0.000 0.000 0.000 0.000 synchronize.py:358(Event) + 1 0.000 0.000 0.000 0.000 throughput_benchmark.py:61(ThroughputBenchmark) + 1 0.000 0.000 0.000 0.000 __init__.py:156(py_object) + 1 0.000 0.000 0.000 0.000 _parser.py:219(_resultbase) + 1 0.000 0.000 0.000 0.000 timeutils.py:40() + 1 0.000 0.000 0.000 0.000 modules.py:259(FreeModuleElement) + 1 0.000 0.000 0.000 0.000 text.py:14(_AsciiBaseGlyphs) + 2 0.000 0.000 0.000 0.000 typing_extensions.py:956(_ensure_subclassable) + 4 0.000 0.000 0.000 0.000 {method 'seek' of '_io.StringIO' objects} + 1 0.000 0.000 0.000 0.000 _basinhopping.py:34(BasinHoppingRunner) + 1 0.000 0.000 0.000 0.000 {built-in method psutil._psutil_posix.getpagesize} + 4 0.000 0.000 0.000 0.000 __init__.py:2063(register_finder) + 1 0.000 0.000 0.000 0.000 __init__.py:507(PackagePath) + 2 0.000 0.000 0.000 0.000 annotations.py:30(__init__) + 2 0.000 0.000 0.000 0.000 arrayprint.py:493(_recursive_guard) + 1 0.000 0.000 0.000 0.000 transforms.py:2180(FourierTypeTransform) + 4 0.000 0.000 0.000 0.000 :795(is_package) + 1 0.000 0.000 0.000 0.000 lazy_imports.py:84(DelayedImportErrorModule) + 1 0.000 0.000 0.000 0.000 argparse.py:109(_AttributeHolder) + 1 0.000 0.000 0.000 0.000 utils.py:94(SimpleTextIOWrapper) + 1 0.000 0.000 0.000 0.000 process.py:161(_SafeQueue) + 1 0.000 0.000 0.000 0.000 utilities.py:8(__init__) + 1 0.000 0.000 0.000 0.000 coreviews.py:295(FilterAdjacency) + 1 0.000 0.000 0.000 0.000 dataframe_protocol.py:106(CategoricalDescription) + 1 0.000 0.000 0.000 0.000 fake_tensor.py:69(DataDependentOutputException) + 2 0.000 0.000 0.000 0.000 context.py:163(__init__) + 1 0.000 0.000 0.000 0.000 _classes.py:6(_ClassNamespace) + 1 0.000 0.000 0.000 0.000 pooling.py:1160(AdaptiveAvgPool2d) + 1 0.000 0.000 0.000 0.000 actions.py:7(OnlyOnce) + 1 0.000 0.000 0.000 0.000 utils.py:33(FormatReplace) + 1 0.000 0.000 0.000 0.000 decoder.py:20(JSONDecodeError) + 1 0.000 0.000 0.000 0.000 _multivariate.py:4023(unitary_group_gen) + 1 0.000 0.000 0.000 0.000 conv.py:281(ConvTranspose2d) + 1 0.000 0.000 0.000 0.000 _pyio.py:623(RawIOBase) + 1 0.000 0.000 0.000 0.000 common.py:124(OdeSolution) + 1 0.000 0.000 0.000 0.000 expressions.py:39(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:303(device) + 1 0.000 0.000 0.000 0.000 request.py:624(HTTPErrorProcessor) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:272(MultiplicativeLR) + 1 0.000 0.000 0.000 0.000 _adapters.py:114(OrphanPath) + 1 0.000 0.000 0.000 0.000 core.py:3775(_ErrorStop) + 1 0.000 0.000 0.000 0.000 heaps.py:135(_Node) + 1 0.000 0.000 0.000 0.000 single.py:734(Bernoulli) + 1 0.000 0.000 0.000 0.000 memory.py:673(_CUDAAllocator) + 3 0.000 0.000 0.000 0.000 expr.py:273(disallow) + 1 0.000 0.000 0.000 0.000 ops.py:595(MathCall) + 1 0.000 0.000 0.000 0.000 activation.py:691(Hardshrink) + 1 0.000 0.000 0.000 0.000 generic.py:109(NamedAgg) + 1 0.000 0.000 0.000 0.000 six.py:129(_LazyModule) + 3 0.000 0.000 0.000 0.000 mock.py:290(__init__) + 1 0.000 0.000 0.000 0.000 instancenorm.py:269(LazyInstanceNorm2d) + 1 0.000 0.000 0.000 0.000 worker.py:51(ManagerWatchdog) + 1 0.000 0.000 0.000 0.000 tarfile.py:308(_LowLevelFile) + 3 0.000 0.000 0.000 0.000 typing.py:494(__repr__) + 1 0.000 0.000 0.000 0.000 proxy.py:304(GraphAppendingTracer) + 1 0.000 0.000 0.000 0.000 single.py:1109(Liouville) + 2 0.000 0.000 0.000 0.000 {method 'deleter' of 'property' objects} + 1 0.000 0.000 0.000 0.000 signals.py:9(_InterruptHandler) + 2 0.000 0.000 0.000 0.000 __init__.py:8(__init__) + 2 0.000 0.000 0.000 0.000 {method 'toordinal' of 'datetime.date' objects} + 1 0.000 0.000 0.000 0.000 __init__.py:290(_DeviceGuard) + 1 0.000 0.000 0.000 0.000 _exceptions.py:32(UFuncTypeError) + 1 0.000 0.000 0.000 0.000 heaps.py:21(_Item) + 1 0.000 0.000 0.000 0.000 utils.py:126(_Deprecate) + 1 0.000 0.000 0.000 0.000 multi.py:111(MultiIndexUIntEngine) + 2 0.000 0.000 0.000 0.000 rl.py:10(rm_id) + 2 0.000 0.000 0.000 0.000 _onenormest.py:121(_blocked_elementwise) + 1 0.000 0.000 0.000 0.000 pooling.py:1006(AdaptiveMaxPool1d) + 1 0.000 0.000 0.000 0.000 function.py:43(CompatValidator) + 1 0.000 0.000 0.000 0.000 _infra.py:40(PatchedPropertyBag) + 1 0.000 0.000 0.000 0.000 _script.py:215(OrderedModuleDict) + 1 0.000 0.000 0.000 0.000 _exceptions.py:54(_UFuncNoLoopError) + 1 0.000 0.000 0.000 0.000 core.py:903(_MaskedUnaryOperation) + 1 0.000 0.000 0.000 0.000 pydoc.py:1127(TextRepr) + 1 0.000 0.000 0.000 0.000 ssl.py:170(_TLSContentType) + 1 0.000 0.000 0.000 0.000 parameter.py:165(UninitializedParameter) + 1 0.000 0.000 0.000 0.000 pathlib.py:834(PurePosixPath) + 1 0.000 0.000 0.000 0.000 more.py:2381(islice_extended) + 1 0.000 0.000 0.000 0.000 readers.py:485(_DeprecationConfig) + 1 0.000 0.000 0.000 0.000 _pytesttester.py:16(PytestTester) + 1 0.000 0.000 0.000 0.000 dot_parser.py:62(DefaultStatement) + 1 0.000 0.000 0.000 0.000 transforms.py:341(MellinTransform) + 1 0.000 0.000 0.000 0.000 extension.py:20(Extension) + 1 0.000 0.000 0.000 0.000 reportviews.py:888(OutMultiEdgeDataView) + 1 0.000 0.000 0.000 0.000 base.py:15(OutputKey) + 1 0.000 0.000 0.000 0.000 _symbolic_trace.py:48(ProxyableClassMeta) + 1 0.000 0.000 0.000 0.000 core.py:194() + 1 0.000 0.000 0.000 0.000 core.py:6821(_frommethod) + 1 0.000 0.000 0.000 0.000 __init__.py:790(Filterer) + 1 0.000 0.000 0.000 0.000 _stats_py.py:5482(_ParallelP) + 1 0.000 0.000 0.000 0.000 pytables.py:4674(AppendableMultiSeriesTable) + 1 0.000 0.000 0.000 0.000 format.py:1620(Datetime64Formatter) + 1 0.000 0.000 0.000 0.000 _jit_internal.py:67(SourceLoader) + 1 0.000 0.000 0.000 0.000 _adapters.py:7(SpecLoaderAdapter) + 1 0.000 0.000 0.000 0.000 exceptions.py:256(RecursiveGrammarException) + 1 0.000 0.000 0.000 0.000 symbol.py:25(Str) + 1 0.000 0.000 0.000 0.000 common.py:1042(_IOWrapper) + 1 0.000 0.000 0.000 0.000 compressor.py:147(LZMACompressorWrapper) + 1 0.000 0.000 0.000 0.000 _collections.py:5(FreezableDefaultDict) + 1 0.000 0.000 0.000 0.000 dense.py:111(MutableDenseMatrix) + 1 0.000 0.000 0.000 0.000 :1(__create_fn__) + 1 0.000 0.000 0.000 0.000 core.py:4449(_IndentGreater) + 1 0.000 0.000 0.000 0.000 _jit_internal.py:1090(BroadcastingListCls) + 1 0.000 0.000 0.000 0.000 queues.py:161(SimpleQueue) + 1 0.000 0.000 0.000 0.000 spawn.py:25(ProcessRaisedException) + 1 0.000 0.000 0.000 0.000 triangulation.py:533(Vertex) + 1 0.000 0.000 0.000 0.000 core.py:5430(Group) + 1 0.000 0.000 0.000 0.000 _differentiable_functions.py:551(LinearVectorFunction) + 1 0.000 0.000 0.000 0.000 backends.py:73(__init__) + 1 0.000 0.000 0.000 0.000 activation.py:402(Mish) + 1 0.000 0.000 0.000 0.000 __init__.py:2045(EggMetadata) + 1 0.000 0.000 0.000 0.000 sympify.py:17(SympifyError) + 1 0.000 0.000 0.000 0.000 config.py:211(DictWrapper) + 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} + 1 0.000 0.000 0.000 0.000 blas.py:239() + 1 0.000 0.000 0.000 0.000 reportviews.py:1275(InEdgeView) + 1 0.000 0.000 0.000 0.000 ctx_mp_python.py:33(mpnumeric) + 1 0.000 0.000 0.000 0.000 zipfile.py:1999(PyZipFile) + 1 0.000 0.000 0.000 0.000 _exporter_states.py:9(ExportTypes) + 1 0.000 0.000 0.000 0.000 _directory_reader.py:9(_HasStorage) + 1 0.000 0.000 0.000 0.000 storage.py:995(_LegacyStorageMeta) + 1 0.000 0.000 0.000 0.000 _apply_pyprojecttoml.py:361(_WouldIgnoreField) + 1 0.000 0.000 0.000 0.000 parallel.py:268(BatchedCalls) + 1 0.000 0.000 0.000 0.000 common.py:3155(MatrixKind) + 1 0.000 0.000 0.000 0.000 cache.py:3(_cache) + 2 0.000 0.000 0.000 0.000 __init__.py:24(__init__) + 1 0.000 0.000 0.000 0.000 transforms.py:2202(FourierTransform) + 1 0.000 0.000 0.000 0.000 request.py:1398(HTTPCookieProcessor) + 1 0.000 0.000 0.000 0.000 _morestats.py:4049(DirectionalStats) + 1 0.000 0.000 0.000 0.000 serialization.py:250(_open_file) + 1 0.000 0.000 0.000 0.000 numeric.py:61(ComplexWarning) + 1 0.000 0.000 0.000 0.000 base.py:217(DenseOutput) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:493(Domain) + 1 0.000 0.000 0.000 0.000 facts.py:374(FactRules) + 1 0.000 0.000 0.000 0.000 runtests.py:87(Skipped) + 1 0.000 0.000 0.000 0.000 arrayprint.py:1222(IntegerFormat) + 1 0.000 0.000 0.000 0.000 hyper.py:56(TupleParametersBase) + 2 0.000 0.000 0.000 0.000 specifiers.py:40(InvalidSpecifier) + 1 0.000 0.000 0.000 0.000 doctest.py:437(Example) + 1 0.000 0.000 0.000 0.000 zipfile.py:786(_Tellable) + 1 0.000 0.000 0.000 0.000 parameter.py:6(_ParameterMeta) + 1 0.000 0.000 0.000 0.000 compressor.py:81(CompressorWrapper) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.date64} + 1 0.000 0.000 0.000 0.000 sympy_parser.py:1227(_T) + 1 0.000 0.000 0.000 0.000 package_importer.py:697(_PackageResourceReader) + 1 0.000 0.000 0.000 0.000 arpack.py:310(_ArpackParams) + 1 0.000 0.000 0.000 0.000 coreviews.py:266(FilterAtlas) + 2 0.000 0.000 0.000 0.000 ctx_mp_python.py:620() + 1 0.000 0.000 0.000 0.000 zipfile.py:746(_SharedFile) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:821(ContentType) + 1 0.000 0.000 0.000 0.000 ctx_iv.py:292(ivmpf_constant) + 1 0.000 0.000 0.000 0.000 importer.py:170(_SysImporter) + 1 0.000 0.000 0.000 0.000 dataframes.py:241(CaptureVariable) + 1 0.000 0.000 0.000 0.000 parser.py:79(BytesParser) + 2 0.000 0.000 0.000 0.000 version.py:55(InvalidVersion) + 1 0.000 0.000 0.000 0.000 boolalg.py:348(__hash__) + 1 0.000 0.000 0.000 0.000 extrapolation.py:728(cohen_alt_class) + 1 0.000 0.000 0.000 0.000 __init__.py:58(cuFFTPlanCacheManager) + 1 0.000 0.000 0.000 0.000 single.py:1934(NthOrderReducible) + 1 0.000 0.000 0.000 0.000 _nonlin.py:981(Anderson) + 1 0.000 0.000 0.000 0.000 locks.py:13(_ContextManagerMixin) + 1 0.000 0.000 0.000 0.000 {method 'write' of '_io.StringIO' objects} + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.int32} + 1 0.000 0.000 0.000 0.000 compressor.py:187(LZ4CompressorWrapper) + 1 0.000 0.000 0.000 0.000 activation.py:807(Softplus) + 1 0.000 0.000 0.000 0.000 package_exporter.py:128(PackagingError) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:634(DomainLiteral) + 1 0.000 0.000 0.000 0.000 _factories.py:8(_TzSingleton) + 1 0.000 0.000 0.000 0.000 _trustregion_dogleg.py:38(DoglegSubproblem) + 1 0.000 0.000 0.000 0.000 pool.py:178(PicklingPool) + 1 0.000 0.000 0.000 0.000 __init__.py:3068(EggInfoDistribution) + 1 0.000 0.000 0.000 0.000 mock.py:2146(AsyncMagicMixin) + 1 0.000 0.000 0.000 0.000 _json.py:1224(SeriesParser) + 2 0.000 0.000 0.000 0.000 _common.py:748(get_procfs_path) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.int64} + 1 0.000 0.000 0.000 0.000 _ops.py:524(_OpNamespace) + 2 0.000 0.000 0.000 0.000 _parser.py:27(Variable) + 2 0.000 0.000 0.000 0.000 requirements.py:14(InvalidRequirement) + 2 0.000 0.000 0.000 0.000 cloudpickle.py:676(instance) + 1 0.000 0.000 0.000 0.000 kcomponents.py:265(AntiAdjacencyView) + 1 0.000 0.000 0.000 0.000 activation.py:438(Hardswish) + 1 0.000 0.000 0.000 0.000 _interface.py:755(IdentityOperator) + 1 0.000 0.000 0.000 0.000 threading.py:1421(_DummyThread) + 1 0.000 0.000 0.000 0.000 core.py:3436(LineStart) + 1 0.000 0.000 0.000 0.000 single.py:914(RiccatiSpecial) + 1 0.000 0.000 0.000 0.000 graph.py:203(save_on_cpu) + 1 0.000 0.000 0.000 0.000 _policybase.py:41(__init__) + 1 0.000 0.000 0.000 0.000 usertools.py:1() + 1 0.000 0.000 0.000 0.000 minimize_trustregion_constr.py:25(HessianLinearOperator) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:182(WhiteSpaceTokenList) + 1 0.000 0.000 0.000 0.000 structures.py:7(DataChunkDF) + 1 0.000 0.000 0.000 0.000 plot.py:948(Line3DBaseSeries) + 1 0.000 0.000 0.000 0.000 __init__.py:46(__init__) + 1 0.000 0.000 0.000 0.000 polyoptions.py:647(Formal) + 1 0.000 0.000 0.000 0.000 runtests.py:1859(SymPyOutputChecker) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:333(MailboxList) + 1 0.000 0.000 0.000 0.000 online.py:90(EWMMeanState) + 1 0.000 0.000 0.000 0.000 single.py:2102(NthLinearConstantCoeffHomogeneous) + 4 0.000 0.000 0.000 0.000 shape_base.py:19(_atleast_1d_dispatcher) + 1 0.000 0.000 0.000 0.000 common.py:11(HolderModule) + 1 0.000 0.000 0.000 0.000 constraints.py:409(_Multinomial) + 1 0.000 0.000 0.000 0.000 tzinfo.py:66(BaseTzInfo) + 1 0.000 0.000 0.000 0.000 util.py:125(LRUMemo) + 1 0.000 0.000 0.000 0.000 homomorphisms.py:574(SubModuleHomomorphism) + 2 0.000 0.000 0.000 0.000 {built-in method sys.audit} + 4 0.000 0.000 0.000 0.000 __init__.py:2240(register_namespace_handler) + 1 0.000 0.000 0.000 0.000 synchronize.py:140(Semaphore) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:364(Group) + 1 0.000 0.000 0.000 0.000 msvc.py:32(winreg) + 1 0.000 0.000 0.000 0.000 errors.py:93(NonPrintableDefect) + 1 0.000 0.000 0.000 0.000 __init__.py:28(RTLD_for_MKL) + 2 0.000 0.000 0.000 0.000 {method 'copy' of 'list' objects} + 1 0.000 0.000 0.000 0.000 locks.py:421(BoundedSemaphore) + 1 0.000 0.000 0.000 0.000 bessel.py:623(hankel2) + 1 0.000 0.000 0.000 0.000 pythonfinitefield.py:9(PythonFiniteField) + 1 0.000 0.000 0.000 0.000 quality.py:17(NotAPartition) + 2 0.000 0.000 0.000 0.000 __init__.py:2009(_warn_on_replacement) + 1 0.000 0.000 0.000 0.000 _parser.py:1589(ParserError) + 1 0.000 0.000 0.000 0.000 context.py:276(ForkProcess) + 1 0.000 0.000 0.000 0.000 transports.py:197(SubprocessTransport) + 1 0.000 0.000 0.000 0.000 conv.py:1128(_ConvTransposeMixin) + 1 0.000 0.000 0.000 0.000 numerictypes.py:424(_typedict) + 1 0.000 0.000 0.000 0.000 core.py:1125(_DomainedBinaryOperation) + 1 0.000 0.000 0.000 0.000 gmpyfinitefield.py:9(GMPYFiniteField) + 1 0.000 0.000 0.000 0.000 forward_ad.py:145(dual_level) + 1 0.000 0.000 0.000 0.000 hyper.py:24(TupleArg) + 1 0.000 0.000 0.000 0.000 symbolic_opset13.py:410(_reduce_op_symbolic) + 2 0.000 0.000 0.000 0.000 generic.py:137(pin_allowlisted_properties) + 1 0.000 0.000 0.000 0.000 assumptions.py:477(getit) + 1 0.000 0.000 0.000 0.000 distributed_c10d.py:414(GroupMember) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:657(Parameter) + 1 0.000 0.000 0.000 0.000 pytables.py:4265(WORMTable) + 1 0.000 0.000 0.000 0.000 diophantine.py:447(BinaryQuadratic) + 1 0.000 0.000 0.000 0.000 __init__.py:279(CudaError) + 2 0.000 0.000 0.000 0.000 rootoftools.py:82(__init__) + 1 0.000 0.000 0.000 0.000 fake_tensor.py:1398(FakeCopyMode) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:509(LinearLR) + 1 0.000 0.000 0.000 0.000 _pytesttester.py:46(PytestTester) + 1 0.000 0.000 0.000 0.000 boolalg.py:423(__hash__) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1118(MeijerShiftA) + 1 0.000 0.000 0.000 0.000 doctest.py:1729(DocTestFailure) + 1 0.000 0.000 0.000 0.000 __init__.py:26(ContextProp) + 1 0.000 0.000 0.000 0.000 initializers.py:45(_chain_initializers) + 1 0.000 0.000 0.000 0.000 polyoptions.py:365(Field) + 1 0.000 0.000 0.000 0.000 tarfile.py:574(_StreamProxy) + 1 0.000 0.000 0.000 0.000 factorials.py:16(CombinatorialFunction) + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_sha3_384} + 1 0.000 0.000 0.000 0.000 plot.py:961(Parametric3DLineSeries) + 1 0.000 0.000 0.000 0.000 pydoc.py:389(ErrorDuringImport) + 1 0.000 0.000 0.000 0.000 utils.py:56(GlobalRelabelThreshold) + 1 0.000 0.000 0.000 0.000 greedy_coloring.py:420(_AdjEntry) + 1 0.000 0.000 0.000 0.000 pooling.py:1036(AdaptiveMaxPool2d) + 1 0.000 0.000 0.000 0.000 single.py:2487(NthLinearEulerEqNonhomogeneousVariationOfParameters) + 1 0.000 0.000 0.000 0.000 _testutils.py:21(PytestTester) + 1 0.000 0.000 0.000 0.000 algorithms.py:1295(SelectNSeries) + 2 0.000 0.000 0.000 0.000 torch_version.py:19(__init__) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:1727(nchypergeom_wallenius_gen) + 1 0.000 0.000 0.000 0.000 grad_mode.py:226(set_multithreading_enabled) + 1 0.000 0.000 0.000 0.000 parse.py:136(_ResultMixinStr) + 1 0.000 0.000 0.000 0.000 contract.py:15(PathInfo) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:598(LocalPart) + 1 0.000 0.000 0.000 0.000 loss.py:1279(MarginRankingLoss) + 2 0.000 0.000 0.000 0.000 core.py:3421(shape) + 1 0.000 0.000 0.000 0.000 core.py:4443(_Indent) + 1 0.000 0.000 0.000 0.000 optimization.py:15(Newton) + 1 0.000 0.000 0.000 0.000 module.py:27(_IncompatibleKeys) + 1 0.000 0.000 0.000 0.000 core.py:3523(StringEnd) + 1 0.000 0.000 0.000 0.000 fetch.py:7(_BaseDatasetFetcher) + 1 0.000 0.000 0.000 0.000 pooling.py:1078(AdaptiveMaxPool3d) + 2 0.000 0.000 0.000 0.000 utils.py:21(InvalidSdistFilename) + 1 0.000 0.000 0.000 0.000 mutable_ndim_array.py:4(MutableNDimArray) + 1 0.000 0.000 0.000 0.000 reportviews.py:1387(InMultiEdgeView) + 1 0.000 0.000 0.000 0.000 merge.py:1707(_OrderedMerge) + 1 0.000 0.000 0.000 0.000 pooling.py:1199(AdaptiveAvgPool3d) + 1 0.000 0.000 0.000 0.000 fake_tensor.py:64(DynamicOutputShapeException) + 1 0.000 0.000 0.000 0.000 single.py:2196(NthLinearConstantCoeffVariationOfParameters) + 1 0.000 0.000 0.000 0.000 str.py:1005(StrReprPrinter) + 1 0.000 0.000 0.000 0.000 inverselaplace.py:4(InverseLaplaceTransform) + 1 0.000 0.000 0.000 0.000 ElementPath.py:350(_SelectorContext) + 1 0.000 0.000 0.000 0.000 batchnorm.py:306(LazyBatchNorm1d) + 2 0.000 0.000 0.000 0.000 index_tricks.py:145(__init__) + 1 0.000 0.000 0.000 0.000 six.py:91(_LazyDescr) + 1 0.000 0.000 0.000 0.000 qconfig.py:79(QConfig) + 1 0.000 0.000 0.000 0.000 unicode.py:155(Greek) + 1 0.000 0.000 0.000 0.000 bdb.py:864(Tdb) + 4 0.000 0.000 0.000 0.000 {method 'items' of 'collections.OrderedDict' objects} + 5 0.000 0.000 0.000 0.000 _pep440.py:446() + 1 0.000 0.000 0.000 0.000 dataset.py:36(Dataset) + 2 0.000 0.000 0.000 0.000 markers.py:40(UndefinedComparison) + 1 0.000 0.000 0.000 0.000 tz.py:1036(tzstr) + 1 0.000 0.000 0.000 0.000 _recursive.py:123(SourceContext) + 1 0.000 0.000 0.000 0.000 expr_with_intlimits.py:5(ReorderError) + 1 0.000 0.000 0.000 0.000 __info__.py:1() + 1 0.000 0.000 0.000 0.000 more.py:1481(UnequalIterablesError) + 1 0.000 0.000 0.000 0.000 expressions.py:42(set_use_numexpr) + 1 0.000 0.000 0.000 0.000 plot.py:655(List2DSeries) + 1 0.000 0.000 0.000 0.000 decorators.py:195(_SympifyWrapper) + 1 0.000 0.000 0.000 0.000 {built-in method _hashlib.openssl_shake_256} + 2 0.000 0.000 0.000 0.000 _decorators.py:341(rewrite_axis_style_signature) + 1 0.000 0.000 0.000 0.000 errors.py:45(UnsupportedOperatorError) + 1 0.000 0.000 0.000 0.000 fake_tensor.py:59(UnsupportedFakeTensorException) + 1 0.000 0.000 0.000 0.000 accessor.py:26(BaseAccessor) + 1 0.000 0.000 0.000 0.000 symbol.py:354() + 1 0.000 0.000 0.000 0.000 typing_extensions.py:1507(_TypeVarLikeMeta) + 1 0.000 0.000 0.000 0.000 _util.py:363(_FunctionWrapper) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:173(_enable_get_lr_call) + 1 0.000 0.000 0.000 0.000 expressions.py:479(RawNode) + 1 0.000 0.000 0.000 0.000 threading.py:1001(_set_ident) + 1 0.000 0.000 0.000 0.000 _constraints.py:292(PreparedConstraint) + 1 0.000 0.000 0.000 0.000 _utils.py:769(_ClassPropertyDescriptor) + 1 0.000 0.000 0.000 0.000 c10d_error_logger.py:30(_get_logging_handler) + 1 0.000 0.000 0.000 0.000 core.py:5467(Dict) + 1 0.000 0.000 0.000 0.000 single.py:841(Factorable) + 1 0.000 0.000 0.000 0.000 stride_tricks.py:15(DummyArray) + 1 0.000 0.000 0.000 0.000 common.py:1073(_BytesIOWrapper) + 1 0.000 0.000 0.000 0.000 kind.py:106(_NumberKind) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:608(SequentialLR) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:1336(CosineAnnealingWarmRestarts) + 1 0.000 0.000 0.000 0.000 __init__.py:1786(RootLogger) + 1 0.000 0.000 0.000 0.000 client.py:1485(IncompleteRead) + 1 0.000 0.000 0.000 0.000 threading.py:1370(Timer) + 1 0.000 0.000 0.000 0.000 arpack.py:598(_UnsymmetricArpackParams) + 1 0.000 0.000 0.000 0.000 more.py:3272(_IChunk) + 1 0.000 0.000 0.000 0.000 single.py:1301(SeparableReduced) + 1 0.000 0.000 0.000 0.000 loss.py:850(SmoothL1Loss) + 1 0.000 0.000 0.000 0.000 compressor.py:192(__init__) + 1 0.000 0.000 0.000 0.000 utils.py:8(IterableWrapperIterDataPipe) + 1 0.000 0.000 0.000 0.000 _basinhopping.py:294(Metropolis) + 1 0.000 0.000 0.000 0.000 transforms.py:670(AbsTransform) + 1 0.000 0.000 0.000 0.000 _fitpack2.py:742(LSQUnivariateSpline) + 1 0.000 0.000 0.000 0.000 _typing.py:340(_IterDataPipeMeta) + 1 0.000 0.000 0.000 0.000 loss.py:991(SoftMarginLoss) + 1 0.000 0.000 0.000 0.000 pytables.py:337(ConditionBinOp) + 1 0.000 0.000 0.000 0.000 traceback.py:90(_Sentinel) + 1 0.000 0.000 0.000 0.000 arrayprint.py:1245(ComplexFloatingFormat) + 1 0.000 0.000 0.000 0.000 _dual_annealing.py:212(StrategyChain) + 2 0.000 0.000 0.000 0.000 _elffile.py:17(ELFInvalid) + 1 0.000 0.000 0.000 0.000 gaussiandomains.py:209(GaussianRational) + 1 0.000 0.000 0.000 0.000 reportviews.py:811(EdgeDataView) + 1 0.000 0.000 0.000 0.000 loss.py:931(HuberLoss) + 1 0.000 0.000 0.000 0.000 process.py:118(_RemoteTraceback) + 1 0.000 0.000 0.000 0.000 reportviews.py:1179(EdgeView) + 1 0.000 0.000 0.000 0.000 index_tricks.py:619(ndindex) + 1 0.000 0.000 0.000 0.000 context.py:197(get_start_method) + 1 0.000 0.000 0.000 0.000 algebraicconnectivity.py:79(_LUSolver) + 1 0.000 0.000 0.000 0.000 report.py:31(BasicReport) + 1 0.000 0.000 0.000 0.000 memory.py:683(CUDAPluggableAllocator) + 1 0.000 0.000 0.000 0.000 index_tricks.py:570(ndenumerate) + 1 0.000 0.000 0.000 0.000 transforms.py:2500(CosineTransform) + 1 0.000 0.000 0.000 0.000 graph.py:403(name) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.int16} + 1 0.000 0.000 0.000 0.000 exceptions.py:47(LimitOverrunError) + 1 0.000 0.000 0.000 0.000 calendar.py:594(LocaleHTMLCalendar) + 2 0.000 0.000 0.000 0.000 _parser.py:37(Op) + 1 0.000 0.000 0.000 0.000 polyerrors.py:13(ExactQuotientFailed) + 1 0.000 0.000 0.000 0.000 kind.py:84(_UndefinedKind) + 1 0.000 0.000 0.000 0.000 pickletools.py:174(ArgumentDescriptor) + 1 0.000 0.000 0.000 0.000 core.py:67(BasicMeta) + 1 0.000 0.000 0.000 0.000 util.py:368(ForkAwareThreadLock) + 1 0.000 0.000 0.000 0.000 loss.py:474(MSELoss) + 1 0.000 0.000 0.000 0.000 _discrete_distns.py:1644(nchypergeom_fisher_gen) + 1 0.000 0.000 0.000 0.000 graph.py:236(_InsertPoint) + 1 0.000 0.000 0.000 0.000 mock.py:2103(MagicMixin) + 1 0.000 0.000 0.000 0.000 :4(cy_wrap) + 1 0.000 0.000 0.000 0.000 _base.py:141(_AcquireFutures) + 1 0.000 0.000 0.000 0.000 polyoptions.py:637(Frac) + 1 0.000 0.000 0.000 0.000 argparse.py:1104(_HelpAction) + 1 0.000 0.000 0.000 0.000 core.py:45(Registry) + 1 0.000 0.000 0.000 0.000 numpy_pickle_compat.py:79(NDArrayWrapper) + 2 0.000 0.000 0.000 0.000 context.py:240(suppress) + 1 0.000 0.000 0.000 0.000 _exporter_states.py:18(SymbolicContext) + 1 0.000 0.000 0.000 0.000 polyoptions.py:663(Include) + 1 0.000 0.000 0.000 0.000 __init__.py:753(Filter) + 1 0.000 0.000 0.000 0.000 blocks.py:1998(DatetimeLikeBlock) + 1 0.000 0.000 0.000 0.000 single.py:2016(SecondHypergeometric) + 1 0.000 0.000 0.000 0.000 parameter.py:196(UninitializedBuffer) + 1 0.000 0.000 0.000 0.000 homomorphisms.py:537(FreeModuleHomomorphism) + 1 0.000 0.000 0.000 0.000 _dill.py:298(MetaCatchingDict) + 1 0.000 0.000 0.000 0.000 context.py:233(__init__) + 1 0.000 0.000 0.000 0.000 configparser.py:361(Interpolation) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:251(BareQuotedString) + 1 0.000 0.000 0.000 0.000 parquet.py:146(PyArrowImpl) + 1 0.000 0.000 0.000 0.000 __init__.py:292(ResolutionError) + 1 0.000 0.000 0.000 0.000 fused.py:149(ConvAdd2d) + 1 0.000 0.000 0.000 0.000 _json.py:257(FrameWriter) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:717(PolynomialLR) + 1 0.000 0.000 0.000 0.000 forward_ad.py:190(_set_fwd_grad_enabled) + 1 0.000 0.000 0.000 0.000 transforms.py:611(SoftplusTransform) + 1 0.000 0.000 0.000 0.000 frontend.py:101(FrontendError) + 1 0.000 0.000 0.000 0.000 pooling.py:1132(AdaptiveAvgPool1d) + 1 0.000 0.000 0.000 0.000 __init__.py:826(Lookup) + 1 0.000 0.000 0.000 0.000 {method 'copy' of 'set' objects} + 5 0.000 0.000 0.000 0.000 platform.py:777(_unknown_as_blank) + 1 0.000 0.000 0.000 0.000 executor.py:108(_TestingMemmappingExecutor) + 1 0.000 0.000 0.000 0.000 __init__.py:29(context) + 1 0.000 0.000 0.000 0.000 common.py:3126(_MatrixWrapper) + 1 0.000 0.000 0.000 0.000 package_exporter.py:120(EmptyMatchError) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:361(reset_batch_stats) + 1 0.000 0.000 0.000 0.000 coreviews.py:65(AdjacencyView) + 3 0.000 0.000 0.000 0.000 symbolic_opset9.py:2106(wrap_logical_op_with_cast_to) + 1 0.000 0.000 0.000 0.000 _interface.py:634(_ProductLinearOperator) + 1 0.000 0.000 0.000 0.000 symbolic_shapes.py:69(SymDispatchMode) + 1 0.000 0.000 0.000 0.000 _quad_vec.py:29(SemiInfiniteFunc) + 1 0.000 0.000 0.000 0.000 _memory_viz.py:112(Bytes) + 1 0.000 0.000 0.000 0.000 pool.py:794(MapResult) + 1 0.000 0.000 0.000 0.000 exception.py:27(NetworkXException) + 1 0.000 0.000 0.000 0.000 engines.py:125(PythonEngine) + 1 0.000 0.000 0.000 0.000 _comparison.py:389(ObjectPair) + 1 0.000 0.000 0.000 0.000 {built-in method numpy._set_promotion_state} + 1 0.000 0.000 0.000 0.000 abc.py:276(SourceLoader) + 1 0.000 0.000 0.000 0.000 printing.py:511(PrettyDict) + 2 0.000 0.000 0.000 0.000 calendar.py:76(__init__) + 1 0.000 0.000 0.000 0.000 arrayprint.py:1278(_TimelikeFormat) + 1 0.000 0.000 0.000 0.000 {method 'groups' of 're.Match' objects} + 1 0.000 0.000 0.000 0.000 _ndgriddata.py:20(NearestNDInterpolator) + 1 0.000 0.000 0.000 0.000 _ops.py:44(PyOperatorABC) + 1 0.000 0.000 0.000 0.000 package_importer.py:668(_ModuleNode) + 1 0.000 0.000 0.000 0.000 index_tricks.py:212(MGridClass) + 1 0.000 0.000 0.000 0.000 plot.py:1053(SurfaceOver2DRangeSeries) + 1 0.000 0.000 0.000 0.000 parse.py:220(_NetlocResultMixinBytes) + 1 0.000 0.000 0.000 0.000 transforms.py:50(IntegralTransformError) + 1 0.000 0.000 0.000 0.000 constraints.py:245(_IntegerInterval) + 1 0.000 0.000 0.000 0.000 _interface.py:574(_TransposedLinearOperator) + 1 0.000 0.000 0.000 0.000 constraints.py:311(_GreaterThan) + 1 0.000 0.000 0.000 0.000 cycles.py:335(_NeighborhoodCache) + 1 0.000 0.000 0.000 0.000 zipfile.py:43(BadZipFile) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:8985(FitUniformFixedScaleDataError) + 1 0.000 0.000 0.000 0.000 treewidth.py:86(MinDegreeHeuristic) + 1 0.000 0.000 0.000 0.000 utils.py:51(Endianness) + 1 0.000 0.000 0.000 0.000 modules.py:1282(SubModuleQuotientRing) + 1 0.000 0.000 0.000 0.000 arpack.py:380(_SymmetricArpackParams) + 1 0.000 0.000 0.000 0.000 grad_mode.py:61(enable_grad) + 1 0.000 0.000 0.000 0.000 plot.py:1567(TextBackend) + 1 0.000 0.000 0.000 0.000 qs.py:10(SievePolynomial) + 1 0.000 0.000 0.000 0.000 queue.py:242(LifoQueue) + 1 0.000 0.000 0.000 0.000 arpack.py:956(IterInv) + 1 0.000 0.000 0.000 0.000 single.py:2298(NthLinearConstantCoeffUndeterminedCoefficients) + 1 0.000 0.000 0.000 0.000 protocols.py:66(Protocol) + 1 0.000 0.000 0.000 0.000 orderings.py:36(LexOrder) + 1 0.000 0.000 0.000 0.000 operator_schemas.py:44(_FakeGlobalNamespace) + 1 0.000 0.000 0.000 0.000 csv.py:69(unix_dialect) + 1 0.000 0.000 0.000 0.000 numbers.py:12(Number) + 1 0.000 0.000 0.000 0.000 _polyint.py:143(_Interpolator1DWithDerivatives) + 1 0.000 0.000 0.000 0.000 _sources.py:86(SourceContext) + 2 0.000 0.000 0.000 0.000 _parallel_backends.py:137(retrieval_context) + 1 0.000 0.000 0.000 0.000 {pyarrow.lib.float64} + 1 0.000 0.000 0.000 0.000 indexing.py:87(_IndexSlice) + 1 0.000 0.000 0.000 0.000 argparse.py:1123(_VersionAction) + 1 0.000 0.000 0.000 0.000 __init__.py:7(is_built) + 1 0.000 0.000 0.000 0.000 dotproduct.py:6(DotProduct) + 1 0.000 0.000 0.000 0.000 _trace.py:290(TracingCheckError) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:139(_Sentinel) + 1 0.000 0.000 0.000 0.000 process.py:35(LokyInitMainProcess) + 1 0.000 0.000 0.000 0.000 exceptions.py:4(ClosureFailure) + 1 0.000 0.000 0.000 0.000 request.py:1050(HTTPBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:370(ThreadingBackend) + 1 0.000 0.000 0.000 0.000 optimizer.py:20(_RequiredParameter) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:721(MimeParameters) + 1 0.000 0.000 0.000 0.000 info.py:838(DataFrameTableBuilderNonVerbose) + 1 0.000 0.000 0.000 0.000 std.py:213(EMA) + 1 0.000 0.000 0.000 0.000 blocks.py:2076(CategoricalBlock) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:353(StepLR) + 1 0.000 0.000 0.000 0.000 dataframes.py:187(CaptureLikeMock) + 1 0.000 0.000 0.000 0.000 modules.py:500(FreeModuleQuotientRing) + 1 0.000 0.000 0.000 0.000 _exceptions.py:99(_UFuncOutputCastingError) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1298(MeijerUnShiftD) + 1 0.000 0.000 0.000 0.000 numbers.py:3411(_as_mpf_val) + 1 0.000 0.000 0.000 0.000 __init__.py:2229(createLock) + 3 0.000 0.000 0.000 0.000 core.py:867(__init__) + 1 0.000 0.000 0.000 0.000 _page_trend_test.py:412(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:415(dev) + 1 0.000 0.000 0.000 0.000 _compute_docstrings.py:1() + 1 0.000 0.000 0.000 0.000 mock.py:2933(PropertyMock) + 1 0.000 0.000 0.000 0.000 mathieu_functions.py:9(MathieuBase) + 1 0.000 0.000 0.000 0.000 pickletools.py:948(StackObject) + 1 0.000 0.000 0.000 0.000 uuid.py:78(SafeUUID) + 1 0.000 0.000 0.000 0.000 six.py:178(__init__) + 1 0.000 0.000 0.000 0.000 unicode.py:149(LatinB) + 1 0.000 0.000 0.000 0.000 singleton.py:134(Singleton) + 1 0.000 0.000 0.000 0.000 message.py:1195(EmailMessage) + 1 0.000 0.000 0.000 0.000 more.py:2631(SequenceView) + 1 0.000 0.000 0.000 0.000 single.py:2391(NthLinearEulerEqHomogeneous) + 1 0.000 0.000 0.000 0.000 traceback.py:615(_ExceptionPrintContext) + 1 0.000 0.000 0.000 0.000 __init__.py:1261(PlaceHolder) + 1 0.000 0.000 0.000 0.000 codeop.py:109(Compile) + 1 0.000 0.000 0.000 0.000 feedparser.py:532(BytesFeedParser) + 2 0.000 0.000 0.000 0.000 __init__.py:121(create_module) + 1 0.000 0.000 0.000 0.000 format.py:1838(Timedelta64Formatter) + 1 0.000 0.000 0.000 0.000 core.py:3483(LineEnd) + 1 0.000 0.000 0.000 0.000 plot.py:1095(ParametricSurfaceSeries) + 1 0.000 0.000 0.000 0.000 expr.py:775(PythonExprVisitor) + 1 0.000 0.000 0.000 0.000 pydoc.py:1979(__init__) + 1 0.000 0.000 0.000 0.000 _base.py:96(_FirstCompletedWaiter) + 1 0.000 0.000 0.000 0.000 __init__.py:21(cuFFTPlanCacheAttrContextProp) + 1 0.000 0.000 0.000 0.000 filters.py:50(show_nodes) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:402(MultiStepLR) + 1 0.000 0.000 0.000 0.000 modules.py:1886(EndomorphismRing) + 1 0.000 0.000 0.000 0.000 pydot.py:1643(Cluster) + 1 0.000 0.000 0.000 0.000 function.py:862(UndefSageHelper) + 1 0.000 0.000 0.000 0.000 expr.py:4016(UnevaluatedExpr) + 1 0.000 0.000 0.000 0.000 pathlib.py:1398(WindowsPath) + 1 0.000 0.000 0.000 0.000 context.py:295(ForkServerProcess) + 1 0.000 0.000 0.000 0.000 stata.py:955(StataParser) + 1 0.000 0.000 0.000 0.000 sql.py:1256(PandasSQL) + 1 0.000 0.000 0.000 0.000 graph.py:422(_swap_with_cloned) + 1 0.000 0.000 0.000 0.000 _cubic.py:70(CubicHermiteSpline) + 1 0.000 0.000 0.000 0.000 multidimensional.py:56(vectorize) + 1 0.000 0.000 0.000 0.000 utils.py:97(lazy_property) + 1 0.000 0.000 0.000 0.000 configparser.py:277(InterpolationSyntaxError) + 1 0.000 0.000 0.000 0.000 annotations.py:29(Module) + 1 0.000 0.000 0.000 0.000 sql.py:1304(SQLAlchemyEngine) + 1 0.000 0.000 0.000 0.000 six.py:144(MovedAttribute) + 3 0.000 0.000 0.000 0.000 numbers.py:708(class_key) + 1 0.000 0.000 0.000 0.000 runtests.py:1770(SymPyDocTestRunner) + 1 0.000 0.000 0.000 0.000 stubs.py:21(DeQuantStub) + 1 0.000 0.000 0.000 0.000 parser.py:17(__init__) + 4 0.000 0.000 0.000 0.000 message.py:633(get_default_type) + 1 0.000 0.000 0.000 0.000 distributed_c10d.py:278(_reduce_op) + 1 0.000 0.000 0.000 0.000 _base.py:22(Future) + 1 0.000 0.000 0.000 0.000 pydot.py:549(Error) + 1 0.000 0.000 0.000 0.000 utils.py:46(Level) + 1 0.000 0.000 0.000 0.000 hashing.py:22(_ConsistentSet) + 1 0.000 0.000 0.000 0.000 flow_matrix.py:81(FullInverseLaplacian) + 1 0.000 0.000 0.000 0.000 doctest.py:256(_SpoofOut) + 1 0.000 0.000 0.000 0.000 streams.py:117(ExternalStream) + 2 0.000 0.000 0.000 0.000 {built-in method sys.setdlopenflags} + 1 0.000 0.000 0.000 0.000 expressions.py:499(ConstantNode) + 1 0.000 0.000 0.000 0.000 transforms.py:2670(HankelTransform) + 1 0.000 0.000 0.000 0.000 polyoptions.py:673(All) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:603(SafeFunction) + 1 0.000 0.000 0.000 0.000 diophantine.py:689(HomogeneousTernaryQuadraticNormal) + 1 0.000 0.000 0.000 0.000 constraints.py:328(_GreaterThanEq) + 1 0.000 0.000 0.000 0.000 fetch.py:18(_IterableDatasetFetcher) + 1 0.000 0.000 0.000 0.000 core.py:3506(StringStart) + 1 0.000 0.000 0.000 0.000 registration.py:210(__init__) + 4 0.000 0.000 0.000 0.000 {built-in method _sre.ascii_iscased} + 1 0.000 0.000 0.000 0.000 queues.py:234(LifoQueue) + 2 0.000 0.000 0.000 0.000 __init__.py:440(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:1260(FileType) + 1 0.000 0.000 0.000 0.000 constraints.py:284(_IntegerGreaterThan) + 1 0.000 0.000 0.000 0.000 {built-in method numpy.core._multiarray_umath.set_typeDict} + 1 0.000 0.000 0.000 0.000 _utils.py:610(ExceptionWrapper) + 1 0.000 0.000 0.000 0.000 utilities.py:7(DotProdSimpState) + 1 0.000 0.000 0.000 0.000 transforms.py:2263(InverseFourierTransform) + 1 0.000 0.000 0.000 0.000 cloudpickle_wrapper.py:9(CloudpickledObjectWrapper) + 1 0.000 0.000 0.000 0.000 __init__.py:826(SubclassedCategorical) + 1 0.000 0.000 0.000 0.000 spectral_norm.py:159(SpectralNormLoadStateDictPreHook) + 2 0.000 0.000 0.000 0.000 expr.py:169(_is_type) + 1 0.000 0.000 0.000 0.000 _typing.py:215(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:1319(disable) + 1 0.000 0.000 0.000 0.000 pathlib.py:844(PureWindowsPath) + 1 0.000 0.000 0.000 0.000 core.py:2273(Empty) + 1 0.000 0.000 0.000 0.000 argparse.py:727(MetavarTypeHelpFormatter) + 1 0.000 0.000 0.000 0.000 __init__.py:2157(NoDists) + 1 0.000 0.000 0.000 0.000 serialization.py:1096(StorageType) + 1 0.000 0.000 0.000 0.000 initializers.py:30(_ChainedInitializer) + 1 0.000 0.000 0.000 0.000 coreviews.py:216(UnionMultiInner) + 1 0.000 0.000 0.000 0.000 _infra.py:302(Invocation) + 1 0.000 0.000 0.000 0.000 resource_sharer.py:45(DupFd) + 1 0.000 0.000 0.000 0.000 optimization.py:58(Secant) + 1 0.000 0.000 0.000 0.000 dropout.py:25(Dropout) + 1 0.000 0.000 0.000 0.000 error.py:19(URLError) + 1 0.000 0.000 0.000 0.000 _hypotests.py:354(CramerVonMisesResult) + 1 0.000 0.000 0.000 0.000 std.py:39(TqdmWarning) + 1 0.000 0.000 0.000 0.000 dropout.py:195(AlphaDropout) + 1 0.000 0.000 0.000 0.000 polyerrors.py:6(BasePolynomialError) + 1 0.000 0.000 0.000 0.000 api.py:87(AllGatherStates) + 1 0.000 0.000 0.000 0.000 characteristiczero.py:7(CharacteristicZero) + 1 0.000 0.000 0.000 0.000 _warnings_errors.py:4(DegenerateDataWarning) + 1 0.000 0.000 0.000 0.000 unicode.py:8(_lazyclassproperty) + 1 0.000 0.000 0.000 0.000 client.py:176(HTTPMessage) + 1 0.000 0.000 0.000 0.000 activation.py:274(Sigmoid) + 1 0.000 0.000 0.000 0.000 digraph.py:21(_CachedPropertyResetterAdjAndSucc) + 1 0.000 0.000 0.000 0.000 accessor.py:154(CachedAccessor) + 1 0.000 0.000 0.000 0.000 errors.py:33(MessageDefect) + 1 0.000 0.000 0.000 0.000 _interface.py:663(_ScaledLinearOperator) + 1 0.000 0.000 0.000 0.000 arpack.py:907(SpLuInv) + 1 0.000 0.000 0.000 0.000 pathlib.py:347(_WildcardSelector) + 1 0.000 0.000 0.000 0.000 core.py:4835(OneOrMore) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:585(FitDataError) + 1 0.000 0.000 0.000 0.000 synchronize.py:123(Semaphore) + 1 0.000 0.000 0.000 0.000 docscrape.py:602(ObjDoc) + 1 0.000 0.000 0.000 0.000 exceptions.py:220(ParseException) + 1 0.000 0.000 0.000 0.000 _covariance.py:611(CovViaPSD) + 1 0.000 0.000 0.000 0.000 utils.py:43(KnownFailureException) + 1 0.000 0.000 0.000 0.000 dataframes.py:39(CaptureControl) + 1 0.000 0.000 0.000 0.000 pytables.py:92(Constant) + 1 0.000 0.000 0.000 0.000 profiler.py:552(emit_itt) + 1 0.000 0.000 0.000 0.000 dtypes.py:114(CategoricalDtypeType) + 1 0.000 0.000 0.000 0.000 line.py:2519(Line3D) + 1 0.000 0.000 0.000 0.000 tz.py:373(_tzfile) + 1 0.000 0.000 0.000 0.000 _endian.py:23(_swapped_meta) + 2 0.000 0.000 0.000 0.000 results.py:434() + 1 0.000 0.000 0.000 0.000 instancenorm.py:192(InstanceNorm2d) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:926(MeijerFormulaCollection) + 1 0.000 0.000 0.000 0.000 logic.py:367(And) + 1 0.000 0.000 0.000 0.000 _dill.py:862(_attrgetter_helper) + 1 0.000 0.000 0.000 0.000 spawn.py:79(ProcessContext) + 1 0.000 0.000 0.000 0.000 mock.py:300(_Sentinel) + 1 0.000 0.000 0.000 0.000 {built-in method _imp.get_frozen_object} + 1 0.000 0.000 0.000 0.000 format.py:1648(ExtensionArrayFormatter) + 1 0.000 0.000 0.000 0.000 core.py:2344(_SingleCharLiteral) + 1 0.000 0.000 0.000 0.000 pool.py:57(RemoteTraceback) + 1 0.000 0.000 0.000 0.000 orderings.py:46(GradedLexOrder) + 1 0.000 0.000 0.000 0.000 numbers.py:3023(RationalConstant) + 1 0.000 0.000 0.000 0.000 worker.py:119(_IterableDatasetStopIteration) + 1 0.000 0.000 0.000 0.000 zipfile.py:1876(close) + 1 0.000 0.000 0.000 0.000 indexing.py:246(GroupByPositionalSelector) + 1 0.000 0.000 0.000 0.000 _script.py:352(ConstMap) + 1 0.000 0.000 0.000 0.000 arrayprint.py:1235(BoolFormat) + 1 0.000 0.000 0.000 0.000 _typing.py:224(WriteBuffer) + 1 0.000 0.000 0.000 0.000 quadrature.py:260(TanhSinh) + 1 0.000 0.000 0.000 0.000 qs.py:49(FactorBaseElem) + 1 0.000 0.000 0.000 0.000 mock.py:2975(_AsyncIterator) + 1 0.000 0.000 0.000 0.000 _differentiable_functions.py:601(IdentityVectorFunction) + 1 0.000 0.000 0.000 0.000 gzip.py:117(BadGzipFile) + 1 0.000 0.000 0.000 0.000 radau.py:542(RadauDenseOutput) + 1 0.000 0.000 0.000 0.000 _common.py:309(NoSuchProcess) + 1 0.000 0.000 0.000 0.000 numpy.py:310() + 1 0.000 0.000 0.000 0.000 _optimize.py:3718(_Brute_Wrapper) + 1 0.000 0.000 0.000 0.000 _deprecated_my_exceptions.py:39(TransportableException) + 1 0.000 0.000 0.000 0.000 coreviews.py:330(FilterMultiInner) + 1 0.000 0.000 0.000 0.000 fancy_getopt.py:449(OptionDummy) + 1 0.000 0.000 0.000 0.000 graphml.py:685(IncrementalElement) + 1 0.000 0.000 0.000 0.000 exception.py:112(PowerIterationFailedConvergence) + 1 0.000 0.000 0.000 0.000 mock.py:2430(_ANY) + 1 0.000 0.000 0.000 0.000 function.py:281(FunctionMeta) + 2 0.000 0.000 0.000 0.000 ast.py:516(_getter) + 1 0.000 0.000 0.000 0.000 rk.py:538(RkDenseOutput) + 1 0.000 0.000 0.000 0.000 suite.py:375(_DebugResult) + 2 0.000 0.000 0.000 0.000 core.py:26(condition) + 1 0.000 0.000 0.000 0.000 engines.py:108(NumExprEngine) + 1 0.000 0.000 0.000 0.000 nanops.py:106(bottleneck_switch) + 2 0.000 0.000 0.000 0.000 multiarray.py:1079(copyto) + 1 0.000 0.000 0.000 0.000 _typing.py:218(ReadBuffer) + 1 0.000 0.000 0.000 0.000 transports.py:172(DatagramTransport) + 1 0.000 0.000 0.000 0.000 kind.py:36(KindMeta) + 1 0.000 0.000 0.000 0.000 streamreader.py:8(StreamReaderIterDataPipe) + 1 0.000 0.000 0.000 0.000 protocols.py:162(DatagramProtocol) + 1 0.000 0.000 0.000 0.000 __init__.py:315(_CountryTimezoneDict) + 2 0.000 0.000 0.000 0.000 matexpr.py:474(get_postprocessor) + 1 0.000 0.000 0.000 0.000 diophantine.py:670(InhomogeneousTernaryQuadratic) + 1 0.000 0.000 0.000 0.000 exceptions.py:3(GeometryError) + 1 0.000 0.000 0.000 0.000 _guards.py:74(GuardBuilderBase) + 1 0.000 0.000 0.000 0.000 triangulation.py:507(Cell) + 1 0.000 0.000 0.000 0.000 arpack.py:283(ArpackNoConvergence) + 1 0.000 0.000 0.000 0.000 _exceptions.py:81(_UFuncInputCastingError) + 1 0.000 0.000 0.000 0.000 request.py:1226(HTTPDigestAuthHandler) + 4 0.000 0.000 0.000 0.000 {built-in method _sre.ascii_tolower} + 1 0.000 0.000 0.000 0.000 compressor.py:180(XZCompressorWrapper) + 1 0.000 0.000 0.000 0.000 abc.py:75(MetaPathFinder) + 1 0.000 0.000 0.000 0.000 dispatcher.py:33(RaiseNotImplementedError) + 1 0.000 0.000 0.000 0.000 graph_module.py:28(__init__) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:840(ChainedScheduler) + 1 0.000 0.000 0.000 0.000 core.py:3398(PositionToken) + 1 0.000 0.000 0.000 0.000 unicode.py:235(Kanji) + 1 0.000 0.000 0.000 0.000 __init__.py:129(PEP440Warning) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:809(FormulaCollection) + 1 0.000 0.000 0.000 0.000 frontend.py:118(UnsupportedNodeError) + 1 0.000 0.000 0.000 0.000 request.py:791(ProxyHandler) + 1 0.000 0.000 0.000 0.000 pydot.py:558(InvocationException) + 1 0.000 0.000 0.000 0.000 vf2userfunc.py:73(GraphMatcher) + 1 0.000 0.000 0.000 0.000 _interface.py:725(MatrixLinearOperator) + 1 0.000 0.000 0.000 0.000 rootoftools.py:151(RootOf) + 1 0.000 0.000 0.000 0.000 rszeta.py:53(RSCache) + 1 0.000 0.000 0.000 0.000 logger.py:116(__init__) + 1 0.000 0.000 0.000 0.000 headerregistry.py:387(SingleAddressHeader) + 1 0.000 0.000 0.000 0.000 parquet.py:262(FastParquetImpl) + 1 0.000 0.000 0.000 0.000 calendar.py:548(different_locale) + 1 0.000 0.000 0.000 0.000 discretize.py:97(RoundingDiscretizer) + 1 0.000 0.000 0.000 0.000 __init__.py:923(__init__) + 1 0.000 0.000 0.000 0.000 {built-in method _elementtree._set_factories} + 1 0.000 0.000 0.000 0.000 common.py:42(NonSquareMatrixError) + 1 0.000 0.000 0.000 0.000 hashing.py:154(NumpyHasher) + 1 0.000 0.000 0.000 0.000 mixins.py:9(_LoopBoundMixin) + 1 0.000 0.000 0.000 0.000 variable.py:8(VariableMeta) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3570(special_ortho_group_frozen) + 1 0.000 0.000 0.000 0.000 modules.py:1844(ModuleEndomorphism) + 1 0.000 0.000 0.000 0.000 dataframes.py:178(CaptureA) + 1 0.000 0.000 0.000 0.000 necompiler.py:250(Immediate) + 1 0.000 0.000 0.000 0.000 plot.py:1164(ContourSeries) + 1 0.000 0.000 0.000 0.000 sparse_ndim_array.py:104(ImmutableSparseNDimArray) + 1 0.000 0.000 0.000 0.000 polyoptions.py:601(Symmetric) + 1 0.000 0.000 0.000 0.000 mul.py:22(NC_Marker) + 1 0.000 0.000 0.000 0.000 argparse.py:761(ArgumentError) + 1 0.000 0.000 0.000 0.000 case.py:201(_AssertRaisesBaseContext) + 1 0.000 0.000 0.000 0.000 error.py:70(ContentTooShortError) + 1 0.000 0.000 0.000 0.000 configparser.py:1243(SafeConfigParser) + 1 0.000 0.000 0.000 0.000 enum.py:785(__getitem__) + 1 0.000 0.000 0.000 0.000 _odepack_py.py:11(ODEintWarning) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:246(_ExtensionsSpecialForm) + 1 0.000 0.000 0.000 0.000 extras.py:1549(mr_class) + 1 0.000 0.000 0.000 0.000 _distn_infrastructure.py:518(rv_discrete_frozen) + 1 0.000 0.000 0.000 0.000 solveset.py:64(NonlinearError) + 1 0.000 0.000 0.000 0.000 argparse.py:1315(Namespace) + 1 0.000 0.000 0.000 0.000 graph.py:494(_AllowMutationOnSavedContext) + 1 0.000 0.000 0.000 0.000 :1() + 1 0.000 0.000 0.000 0.000 _monkeytype_config.py:153(JitTypeTraceStoreLogger) + 1 0.000 0.000 0.000 0.000 dropout.py:62(Dropout1d) + 1 0.000 0.000 0.000 0.000 extras.py:264(_fromnxfunction_single) + 1 0.000 0.000 0.000 0.000 threading.py:498(BoundedSemaphore) + 1 0.000 0.000 0.000 0.000 parse.py:144(_ResultMixinBytes) + 1 0.000 0.000 0.000 0.000 ops.py:1342(SeriesSplitter) + 1 0.000 0.000 0.000 0.000 response.py:57(addinfo) + 1 0.000 0.000 0.000 0.000 _quadpack_py.py:1174(_RangeFunc) + 4 0.000 0.000 0.000 0.000 _pep440.py:426(_parse_local_version) + 1 0.000 0.000 0.000 0.000 pycode.py:740(SymPyPrinter) + 1 0.000 0.000 0.000 0.000 _exceptions.py:72(_UFuncCastingError) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:217(EncodedWord) + 1 0.000 0.000 0.000 0.000 ops.py:517(Div) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:913(WhiteSpaceTerminal) + 1 0.000 0.000 0.000 0.000 simpledomain.py:7(SimpleDomain) + 1 0.000 0.000 0.000 0.000 decoder.py:114(ImageHandler) + 2 0.000 0.000 0.000 0.000 core.py:883(__init__) + 1 0.000 0.000 0.000 0.000 _fitpack2.py:1331(LSQBivariateSpline) + 1 0.000 0.000 0.000 0.000 diophantine.py:247(Linear) + 2 0.000 0.000 0.000 0.000 {method '_is_owned' of '_thread.RLock' objects} + 1 0.000 0.000 0.000 0.000 process_executor.py:213(_RemoteTraceback) + 1 0.000 0.000 0.000 0.000 paths.py:868(DynamicProgramming) + 1 0.000 0.000 0.000 0.000 base.py:462(__init__) + 1 0.000 0.000 0.000 0.000 bdist.py:25(ListCompat) + 1 0.000 0.000 0.000 0.000 vf2userfunc.py:120(DiGraphMatcher) + 1 0.000 0.000 0.000 0.000 text.py:35(_UtfBaseGlyphs) + 1 0.000 0.000 0.000 0.000 coreviews.py:87(MultiAdjacencyView) + 1 0.000 0.000 0.000 0.000 argparse.py:982(_StoreTrueAction) + 1 0.000 0.000 0.000 0.000 pyfunctorch.py:176(FunctionalizeInterpreter) + 1 0.000 0.000 0.000 0.000 _base.py:45(Error) + 1 0.000 0.000 0.000 0.000 ipc.py:88(RecordBatchFileReader) + 1 0.000 0.000 0.000 0.000 plot.py:1018(SurfaceBaseSeries) + 1 0.000 0.000 0.000 0.000 exponential.py:211(ExpMeta) + 1 0.000 0.000 0.000 0.000 orderings.py:243(_ItemGetter) + 1 0.000 0.000 0.000 0.000 lsoda.py:179(LsodaDenseOutput) + 1 0.000 0.000 0.000 0.000 pretty_symbology.py:41(pretty_use_unicode) + 1 0.000 0.000 0.000 0.000 _dill.py:855(_itemgetter_helper) + 1 0.000 0.000 0.000 0.000 utils.py:157(CallbackIOWrapper) + 1 0.000 0.000 0.000 0.000 instancenorm.py:77(InstanceNorm1d) + 1 0.000 0.000 0.000 0.000 _symbolic_trace.py:885(_PatchedFnSetItem) + 1 0.000 0.000 0.000 0.000 pathlib.py:331(_PreciseSelector) + 1 0.000 0.000 0.000 0.000 voterank_alg.py:1() + 1 0.000 0.000 0.000 0.000 reportviews.py:865(InEdgeDataView) + 1 0.000 0.000 0.000 0.000 sql.py:1285(BaseEngine) + 1 0.000 0.000 0.000 0.000 kind.py:165(_BooleanKind) + 1 0.000 0.000 0.000 0.000 community_utils.py:1() + 1 0.000 0.000 0.000 0.000 util.py:81(_UnboundedCache) + 1 0.000 0.000 0.000 0.000 core.py:2853(_WordRegex) + 1 0.000 0.000 0.000 0.000 mock.py:1069(_AnyComparer) + 1 0.000 0.000 0.000 0.000 numpy_pickle_compat.py:124(ZNDArrayWrapper) + 1 0.000 0.000 0.000 0.000 core.py:2378(__init__) + 1 0.000 0.000 0.000 0.000 pydot.py:1589(Subgraph) + 1 0.000 0.000 0.000 0.000 profiler_util.py:373(Interval) + 1 0.000 0.000 0.000 0.000 serialization.py:239(_opener) + 1 0.000 0.000 0.000 0.000 isomorphvf2.py:845(GMState) + 1 0.000 0.000 0.000 0.000 configparser.py:182(NoSectionError) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1009(ShiftA) + 1 0.000 0.000 0.000 0.000 polyerrors.py:30(PolynomialDivisionFailed) + 1 0.000 0.000 0.000 0.000 more.py:2517(SequenceView) + 1 0.000 0.000 0.000 0.000 more.py:3186(time_limited) + 1 0.000 0.000 0.000 0.000 libmpf.py:132(h_mask_big) + 1 0.000 0.000 0.000 0.000 optimization.py:159(Halley) + 1 0.000 0.000 0.000 0.000 context.py:283(LokyInitMainContext) + 1 0.000 0.000 0.000 0.000 vertex_cover.py:1() + 1 0.000 0.000 0.000 0.000 assumptions.py:594(ManagedProperties) + 1 0.000 0.000 0.000 0.000 zipfile.py:693(_check_compression) + 1 0.000 0.000 0.000 0.000 pickle.py:97(_Stop) + 1 0.000 0.000 0.000 0.000 pickle_compat.py:78(_LoadSparseSeries) + 1 0.000 0.000 0.000 0.000 unicode.py:136(Latin1) + 1 0.000 0.000 0.000 0.000 _endian.py:48(BigEndianStructure) + 1 0.000 0.000 0.000 0.000 protocols.py:177(SubprocessProtocol) + 1 0.000 0.000 0.000 0.000 request.py:1531(FTPHandler) + 1 0.000 0.000 0.000 0.000 distributed_c10d.py:320(__init__) + 1 0.000 0.000 0.000 0.000 more.py:3071(time_limited) + 1 0.000 0.000 0.000 0.000 synchronize.py:208(RLock) + 1 0.000 0.000 0.000 0.000 unicode.py:242(Hiragana) + 1 0.000 0.000 0.000 0.000 mock.py:2134(NonCallableMagicMock) + 1 0.000 0.000 0.000 0.000 __init__.py:29(__init__) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:347(GroupList) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:451(ConstantLR) + 1 0.000 0.000 0.000 0.000 function.py:263(BackwardCFunction) + 1 0.000 0.000 0.000 0.000 client.py:1511(BadStatusLine) + 1 0.000 0.000 0.000 0.000 pytree_hacks.py:16(PlaceHolder) + 2 0.000 0.000 0.000 0.000 index_tricks.py:762(__init__) + 1 0.000 0.000 0.000 0.000 _quad_vec.py:57(DoubleInfiniteFunc) + 1 0.000 0.000 0.000 0.000 __init__.py:201(DeferredCudaCallError) + 1 0.000 0.000 0.000 0.000 :1() + 1 0.000 0.000 0.000 0.000 configparser.py:285(InterpolationDepthError) + 1 0.000 0.000 0.000 0.000 mock.py:2174(MagicProxy) + 1 0.000 0.000 0.000 0.000 indexed.py:120(IndexException) + 1 0.000 0.000 0.000 0.000 dispatcher.py:10(MDNotImplementedError) + 1 0.000 0.000 0.000 0.000 __init__.py:395(PyperclipWindowsException) + 1 0.000 0.000 0.000 0.000 dataframes.py:169(CaptureF) + 1 0.000 0.000 0.000 0.000 calendar.py:33(IllegalWeekdayError) + 2 0.000 0.000 0.000 0.000 lazy.py:91(LazyList) + 1 0.000 0.000 0.000 0.000 argparse.py:924(_StoreAction) + 1 0.000 0.000 0.000 0.000 process_executor.py:262(_CallItem) + 2 0.000 0.000 0.000 0.000 markers.py:46(UndefinedEnvironmentName) + 1 0.000 0.000 0.000 0.000 frontend.py:315(Builder) + 1 0.000 0.000 0.000 0.000 format.py:1825(Datetime64TZFormatter) + 1 0.000 0.000 0.000 0.000 polyoptions.py:61(OptionType) + 1 0.000 0.000 0.000 0.000 copyreg.py:22(constructor) + 1 0.000 0.000 0.000 0.000 reportviews.py:972(MultiEdgeDataView) + 1 0.000 0.000 0.000 0.000 mock.py:302(__init__) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:577(ExponentialLR) + 1 0.000 0.000 0.000 0.000 tarfile.py:708(ExFileObject) + 1 0.000 0.000 0.000 0.000 _multivariate.py:5650(uniform_direction_frozen) + 1 0.000 0.000 0.000 0.000 accessors.py:412(PeriodProperties) + 1 0.000 0.000 0.000 0.000 _pytesttester.py:21(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:204(_Section) + 1 0.000 0.000 0.000 0.000 _docscrape.py:101(ParseError) + 2 0.000 0.000 0.000 0.000 six.py:199(__get_module) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1247(MeijerUnShiftC) + 1 0.000 0.000 0.000 0.000 importer.py:22(ObjMismatchError) + 1 0.000 0.000 0.000 0.000 memory.py:63(JobLibCollisionWarning) + 1 0.000 0.000 0.000 0.000 flow_matrix.py:95(SuperLUInverseLaplacian) + 1 0.000 0.000 0.000 0.000 reportviews.py:474(DegreeView) + 1 0.000 0.000 0.000 0.000 process_executor.py:243(_WorkItem) + 1 0.000 0.000 0.000 0.000 gradcheck.py:18(GradcheckError) + 1 0.000 0.000 0.000 0.000 parallel.py:360(BatchCompletionCallBack) + 1 0.000 0.000 0.000 0.000 _guards.py:205(GuardEnvExpr) + 1 0.000 0.000 0.000 0.000 function.py:576(InplaceFunction) + 1 0.000 0.000 0.000 0.000 graph.py:458(_CloneArgBeforeMutateMode) + 1 0.000 0.000 0.000 0.000 {method 'difference_update' of 'set' objects} + 1 0.000 0.000 0.000 0.000 polyoptions.py:374(Greedy) + 1 0.000 0.000 0.000 0.000 experimental_lambdify.py:149(lambdify) + 1 0.000 0.000 0.000 0.000 fused.py:159(ConvAddReLU2d) + 1 0.000 0.000 0.000 0.000 pathlib.py:325(_TerminatingSelector) + 1 0.000 0.000 0.000 0.000 orderings.py:55(ReversedGradedLexOrder) + 1 0.000 0.000 0.000 0.000 errors.py:73(SymbolicValueError) + 1 0.000 0.000 0.000 0.000 accessors.py:479(CombinedDatetimelikeProperties) + 4 0.000 0.000 0.000 0.000 {built-in method io.text_encoding} + 1 0.000 0.000 0.000 0.000 {built-in method sys.getdlopenflags} + 1 0.000 0.000 0.000 0.000 hyperexpand.py:949(Operator) + 1 0.000 0.000 0.000 0.000 doctest.py:2421(DocFileCase) + 1 0.000 0.000 0.000 0.000 request.py:1383(HTTPSHandler) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:599(FitSolverError) + 1 0.000 0.000 0.000 0.000 dataframes.py:43(DataFrameTracedOps) + 1 0.000 0.000 0.000 0.000 dataframes.py:360(CaptureInitial) + 1 0.000 0.000 0.000 0.000 core.py:840(_DomainSafeDivide) + 1 0.000 0.000 0.000 0.000 __init__.py:2020(PathMetadata) + 1 0.000 0.000 0.000 0.000 parse.py:323(DefragResult) + 1 0.000 0.000 0.000 0.000 multi.py:150(MultiIndexPyIntEngine) + 1 0.000 0.000 0.000 0.000 core.py:192(_should_enable_warnings) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:593(ImmediateResult) + 1 0.000 0.000 0.000 0.000 sympy_parser.py:88(ParenthesisGroup) + 1 0.000 0.000 0.000 0.000 dist.py:1237(DistDeprecationWarning) + 1 0.000 0.000 0.000 0.000 core.py:4899(_NullToken) + 1 0.000 0.000 0.000 0.000 numbers.py:3036(IntegerConstant) + 1 0.000 0.000 0.000 0.000 report.py:39(SQPReport) + 1 0.000 0.000 0.000 0.000 unicode.py:130(BasicMultilingualPlane) + 5 0.000 0.000 0.000 0.000 libmpf.py:49() + 1 0.000 0.000 0.000 0.000 activation.py:1338(Softsign) + 1 0.000 0.000 0.000 0.000 pool.py:63(ExceptionWithTraceback) + 1 0.000 0.000 0.000 0.000 constraints.py:265(_IntegerLessThan) + 1 0.000 0.000 0.000 0.000 constraints.py:232(_OneHot) + 1 0.000 0.000 0.000 0.000 {method '__exit__' of 'posix.ScandirIterator' objects} + 2 0.000 0.000 0.000 0.000 _functools.py:83() + 2 0.000 0.000 0.000 0.000 ordinals.py:83() + 1 0.000 0.000 0.000 0.000 _utils.py:603(KeyErrorMessage) + 2 0.000 0.000 0.000 0.000 {method 'release' of '_thread.lock' objects} + 1 0.000 0.000 0.000 0.000 _dual_annealing.py:366(ObjectiveFunWrapper) + 1 0.000 0.000 0.000 0.000 unicode.py:254(Katakana) + 1 0.000 0.000 0.000 0.000 constraints.py:222(_Boolean) + 1 0.000 0.000 0.000 0.000 batchnorm.py:233(BatchNorm1d) + 1 0.000 0.000 0.000 0.000 core.py:797(_DomainCheckInterval) + 1 0.000 0.000 0.000 0.000 _continuous_distns.py:5788(gilbrat_gen) + 1 0.000 0.000 0.000 0.000 optimization.py:290(Bisection) + 1 0.000 0.000 0.000 0.000 process.py:349(AuthenticationString) + 1 0.000 0.000 0.000 0.000 batchnorm.py:413(LazyBatchNorm2d) + 1 0.000 0.000 0.000 0.000 index_tricks.py:538(CClass) + 1 0.000 0.000 0.000 0.000 _nonlin.py:917(BroydenSecond) + 1 0.000 0.000 0.000 0.000 _tzpath.py:170(InvalidTZPathWarning) + 1 0.000 0.000 0.000 0.000 errors.py:81(HeaderDefect) + 2 0.000 0.000 0.000 0.000 {method 'truncate' of '_io.StringIO' objects} + 1 0.000 0.000 0.000 0.000 profiler.py:745(EnforceUnique) + 1 0.000 0.000 0.000 0.000 utils.py:1351(_Dummy) + 2 0.000 0.000 0.000 0.000 ordinals.py:84() + 1 0.000 0.000 0.000 0.000 {built-in method sys.getdefaultencoding} + 1 0.000 0.000 0.000 0.000 diophantine.py:1143(GeneralSumOfEvenPowers) + 1 0.000 0.000 0.000 0.000 queue.py:23(Full) + 1 0.000 0.000 0.000 0.000 _fitpack2.py:1626(SmoothSphereBivariateSpline) + 1 0.000 0.000 0.000 0.000 more.py:3795(countable) + 1 0.000 0.000 0.000 0.000 synchronize.py:162(BoundedSemaphore) + 1 0.000 0.000 0.000 0.000 cloudpickle_wrapper.py:30(CallableObjectWrapper) + 1 0.000 0.000 0.000 0.000 logger.py:91(PrintTime) + 1 0.000 0.000 0.000 0.000 cast.py:2100(LossySetitemError) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1129(MeijerShiftB) + 1 0.000 0.000 0.000 0.000 case.py:192(_BaseTestCaseContext) + 1 0.000 0.000 0.000 0.000 pickletools.py:1093(OpcodeInfo) + 1 0.000 0.000 0.000 0.000 pickle.py:73(PickleError) + 1 0.000 0.000 0.000 0.000 pytables.py:329(JointFilterBinOp) + 1 0.000 0.000 0.000 0.000 engine.py:379(__init__) + 1 0.000 0.000 0.000 0.000 text.py:23(AsciiDirectedGlyphs) + 1 0.000 0.000 0.000 0.000 _common.py:163(ZoneInfoNotFoundError) + 1 0.000 0.000 0.000 0.000 python.py:67(Lit) + 1 0.000 0.000 0.000 0.000 _ops.py:588(_PyOpNamespace) + 1 0.000 0.000 0.000 0.000 __init__.py:399(PyDLL) + 1 0.000 0.000 0.000 0.000 report.py:47(IPReport) + 1 0.000 0.000 0.000 0.000 {built-in method sys.getfilesystemencodeerrors} + 1 0.000 0.000 0.000 0.000 _quadpack_py.py:1187(_OptFunc) + 1 0.000 0.000 0.000 0.000 _adapters.py:20(TraversableResourcesLoader) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1162(MeijerUnShiftA) + 1 0.000 0.000 0.000 0.000 context.py:310(ForkServerContext) + 1 0.000 0.000 0.000 0.000 __init__.py:323(device_of) + 1 0.000 0.000 0.000 0.000 __init__.py:129(InvalidVersion) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1200(MeijerUnShiftB) + 1 0.000 0.000 0.000 0.000 codeop.py:124(CommandCompiler) + 1 0.000 0.000 0.000 0.000 _codata.py:1563(ConstantWarning) + 1 0.000 0.000 0.000 0.000 exceptions.py:11(Error) + 1 0.000 0.000 0.000 0.000 polyerrors.py:155(PolificationFailed) + 2 0.000 0.000 0.000 0.000 _state.py:39(__bool__) + 1 0.000 0.000 0.000 0.000 _typing.py:22(GenericMeta) + 1 0.000 0.000 0.000 0.000 core.py:84(MaskedArrayFutureWarning) + 1 0.000 0.000 0.000 0.000 doctest.py:2351(_DocTestSuite) + 1 0.000 0.000 0.000 0.000 errors.py:21(OnnxExporterWarning) + 1 0.000 0.000 0.000 0.000 _python_dispatch.py:97(BaseTorchDispatchMode) + 1 0.000 0.000 0.000 0.000 process_executor.py:254(_ResultItem) + 1 0.000 0.000 0.000 0.000 lazy.py:121(LazySet) + 1 0.000 0.000 0.000 0.000 single.py:39(ODEMatchError) + 1 0.000 0.000 0.000 0.000 spawn.py:163(SpawnContext) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:923(ValueTerminal) + 1 0.000 0.000 0.000 0.000 decorator.py:254(ContextManager) + 1 0.000 0.000 0.000 0.000 chordal.py:24(NetworkXTreewidthBoundExceeded) + 1 0.000 0.000 0.000 0.000 index_tricks.py:264(OGridClass) + 1 0.000 0.000 0.000 0.000 hyperbolic.py:28(HyperbolicFunction) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:767(CosineAnnealingLR) + 1 0.000 0.000 0.000 0.000 pydoc.py:2212(ModuleScanner) + 1 0.000 0.000 0.000 0.000 datapipe.py:207(DFIterDataPipe) + 1 0.000 0.000 0.000 0.000 exceptions.py:13(DMError) + 1 0.000 0.000 0.000 0.000 reportviews.py:1008(InMultiEdgeDataView) + 1 0.000 0.000 0.000 0.000 evalf.py:68(PrecisionExhausted) + 1 0.000 0.000 0.000 0.000 ops.py:611(FuncNode) + 1 0.000 0.000 0.000 0.000 utils.py:34(MatchAllNode) + 1 0.000 0.000 0.000 0.000 _sf_error.py:13(SpecialFunctionError) + 1 0.000 0.000 0.000 0.000 process_executor.py:223(_ExceptionWithTraceback) + 1 0.000 0.000 0.000 0.000 unicode.py:143(LatinA) + 1 0.000 0.000 0.000 0.000 __init__.py:414(_make_alias) + 1 0.000 0.000 0.000 0.000 _factories.py:19(_TzFactory) + 1 0.000 0.000 0.000 0.000 meijerint.py:314(_CoeffExpValueError) + 1 0.000 0.000 0.000 0.000 magic.py:1() + 1 0.000 0.000 0.000 0.000 shutil.py:67(SpecialFileError) + 1 0.000 0.000 0.000 0.000 pytables.py:627(TermValue) + 1 0.000 0.000 0.000 0.000 diophantine.py:967(GeneralSumOfSquares) + 1 0.000 0.000 0.000 0.000 optimization.py:7(OptimizationMethods) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:2179(_UnpackSpecialForm) + 1 0.000 0.000 0.000 0.000 serialization.py:281(_open_zipfile_reader) + 1 0.000 0.000 0.000 0.000 common.py:3118(_CastableMatrix) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:933(EWWhiteSpaceTerminal) + 1 0.000 0.000 0.000 0.000 dataframes.py:205(CaptureCall) + 1 0.000 0.000 0.000 0.000 docscrape.py:107(ParseError) + 1 0.000 0.000 0.000 0.000 reduction.py:211(_C) + 1 0.000 0.000 0.000 0.000 profiler_util.py:622(MemRecordsAcc) + 1 0.000 0.000 0.000 0.000 {built-in method numpy.core._multiarray_umath._reload_guard} + 1 0.000 0.000 0.000 0.000 _fitpack2.py:1542(SphereBivariateSpline) + 1 0.000 0.000 0.000 0.000 _misc.py:9(LinAlgWarning) + 1 0.000 0.000 0.000 0.000 constraints.py:481(_Symmetric) + 1 0.000 0.000 0.000 0.000 blocks.py:1926(NumericBlock) + 1 0.000 0.000 0.000 0.000 constraints.py:345(_LessThan) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1035(UnShiftA) + 1 0.000 0.000 0.000 0.000 lambdify.py:1250(_TensorflowEvaluatorPrinter) + 1 0.000 0.000 0.000 0.000 dataframes.py:337(CaptureGetAttr) + 1 0.000 0.000 0.000 0.000 _typing.py:239(WriteExcelBuffer) + 1 0.000 0.000 0.000 0.000 core.py:4672(Located) + 1 0.000 0.000 0.000 0.000 _comparison.py:306(UnsupportedInputs) + 1 0.000 0.000 0.000 0.000 _base.py:22(SparseEfficiencyWarning) + 1 0.000 0.000 0.000 0.000 _quadpack_py.py:16(IntegrationWarning) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:650(MIMEVersion) + 1 0.000 0.000 0.000 0.000 tz.py:1156(_tzicalvtzcomp) + 1 0.000 0.000 0.000 0.000 unicode.py:195(Cyrillic) + 1 0.000 0.000 0.000 0.000 __init__.py:82(is_available) + 1 0.000 0.000 0.000 0.000 decorators.py:107(skipif) + 1 0.000 0.000 0.000 0.000 _matfuncs_sqrtm.py:20(SqrtmError) + 1 0.000 0.000 0.000 0.000 connection.py:764(ConnectionWrapper) + 1 0.000 0.000 0.000 0.000 linalg.py:44(LinAlgError) + 1 0.000 0.000 0.000 0.000 __init__.py:1011(_ReqExtras) + 1 0.000 0.000 0.000 0.000 pdb.py:119(_rstr) + 1 0.000 0.000 0.000 0.000 isoparser.py:43(__init__) + 1 0.000 0.000 0.000 0.000 _nonlin.py:557(GenericBroyden) + 1 0.000 0.000 0.000 0.000 base.py:4(BaseDistribution) + 1 0.000 0.000 0.000 0.000 argparse.py:676(RawDescriptionHelpFormatter) + 1 0.000 0.000 0.000 0.000 _memory_viz.py:313(PlotWriter) + 1 0.000 0.000 0.000 0.000 ipaddress.py:20(AddressValueError) + 1 0.000 0.000 0.000 0.000 solveset.py:606(_SolveTrig1Error) + 1 0.000 0.000 0.000 0.000 tarfile.py:736(SpecialFileError) + 1 0.000 0.000 0.000 0.000 _globals.py:33(ModuleDeprecationWarning) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1076(UnShiftB) + 1 0.000 0.000 0.000 0.000 serialization.py:258(_open_buffer_reader) + 1 0.000 0.000 0.000 0.000 triangulation.py:612(VertexCache) + 1 0.000 0.000 0.000 0.000 diophantine.py:776(HomogeneousTernaryQuadratic) + 1 0.000 0.000 0.000 0.000 _trustregion_ncg.py:42(CGSteihaugSubproblem) + 1 0.000 0.000 0.000 0.000 stata.py:789(StataNonCatValueLabel) + 1 0.000 0.000 0.000 0.000 datapipes.py:42(ConcatDataFramesPipe) + 1 0.000 0.000 0.000 0.000 _factories.py:25(_TzOffsetFactory) + 1 0.000 0.000 0.000 0.000 _shims.py:99(_CallableReduce) + 1 0.000 0.000 0.000 0.000 fused.py:22(ConvReLU2d) + 1 0.000 0.000 0.000 0.000 _distn_infrastructure.py:527(rv_continuous_frozen) + 1 0.000 0.000 0.000 0.000 hashing.py:40(_MyHash) + 1 0.000 0.000 0.000 0.000 config.py:104(OptionError) + 1 0.000 0.000 0.000 0.000 modules.py:450(FreeModulePolyRing) + 1 0.000 0.000 0.000 0.000 logic.py:393(Or) + 1 0.000 0.000 0.000 0.000 dataframes.py:231(CaptureVariableAssign) + 1 0.000 0.000 0.000 0.000 zipfile.py:47(LargeZipFile) + 1 0.000 0.000 0.000 0.000 parser.py:71(HeaderParser) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:858(InvalidMessageID) + 1 0.000 0.000 0.000 0.000 errors.py:12(DistutilsError) + 1 0.000 0.000 0.000 0.000 inverselaplace.py:220(Stehfest) + 1 0.000 0.000 0.000 0.000 activation.py:337(Tanh) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:446(ObsRoute) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:845(MsgID) + 1 0.000 0.000 0.000 0.000 ordinals.py:253(OrdinalZero) + 1 0.000 0.000 0.000 0.000 iterables.py:2888(NotIterable) + 1 0.000 0.000 0.000 0.000 core.py:822(_DomainTan) + 1 0.000 0.000 0.000 0.000 pickle.py:77(PicklingError) + 1 0.000 0.000 0.000 0.000 _quad_vec.py:94(_Bunch) + 1 0.000 0.000 0.000 0.000 _fitpack2.py:1954(RectSphereBivariateSpline) + 1 0.000 0.000 0.000 0.000 more.py:3981(countable) + 1 0.000 0.000 0.000 0.000 polyerrors.py:57(OperationNotSupported) + 1 0.000 0.000 0.000 0.000 constraints.py:380(_HalfOpenInterval) + 1 0.000 0.000 0.000 0.000 _ufunc_config.py:360(_unspecified) + 1 0.000 0.000 0.000 0.000 pytables.py:3260(FrameFixed) + 1 0.000 0.000 0.000 0.000 arrayprint.py:1341(SubArrayFormat) + 1 0.000 0.000 0.000 0.000 symbolic_shapes.py:25(GuardOnDataDependentSymNode) + 1 0.000 0.000 0.000 0.000 decoder.py:236(MatHandler) + 1 0.000 0.000 0.000 0.000 __init__.py:246(c_void_p) + 1 0.000 0.000 0.000 0.000 errors.py:42(PackageDiscoveryError) + 1 0.000 0.000 0.000 0.000 coreviews.py:247(UnionMultiAdjacency) + 1 0.000 0.000 0.000 0.000 _script.py:264(ScriptMeta) + 1 0.000 0.000 0.000 0.000 __init__.py:165(c_short) + 1 0.000 0.000 0.000 0.000 linsolve.py:25(MatrixRankWarning) + 1 0.000 0.000 0.000 0.000 solvers.py:18(PolyNonlinearError) + 1 0.000 0.000 0.000 0.000 numbers.py:3577(_as_mpf_val) + 1 0.000 0.000 0.000 0.000 argparse.py:1151(_ChoicesPseudoAction) + 1 0.000 0.000 0.000 0.000 rk.py:563(Dop853DenseOutput) + 1 0.000 0.000 0.000 0.000 optimization.py:357(Illinois) + 1 0.000 0.000 0.000 0.000 errors.py:112(InvalidDateDefect) + 1 0.000 0.000 0.000 0.000 _monkeytype_config.py:157(JitTypeTraceStore) + 1 0.000 0.000 0.000 0.000 index_tricks.py:436(RClass) + 1 0.000 0.000 0.000 0.000 unicode.py:208(Chinese) + 1 0.000 0.000 0.000 0.000 frequencies.py:470(_TimedeltaFrequencyInferer) + 1 0.000 0.000 0.000 0.000 function.py:105(ArgumentIndexError) + 1 0.000 0.000 0.000 0.000 serialization.py:52(SourceChangeWarning) + 1 0.000 0.000 0.000 0.000 serialization.py:294(_open_zipfile_writer_buffer) + 1 0.000 0.000 0.000 0.000 arrayprint.py:1336(TimedeltaFormat) + 1 0.000 0.000 0.000 0.000 indexing.py:2445(_iAtIndexer) + 1 0.000 0.000 0.000 0.000 exceptions.py:21(SendfileNotAvailableError) + 1 0.000 0.000 0.000 0.000 results.py:85(List) + 1 0.000 0.000 0.000 0.000 polyutils.py:47(RankWarning) + 1 0.000 0.000 0.000 0.000 _quadrature.py:142(AccuracyWarning) + 1 0.000 0.000 0.000 0.000 configparser.py:191(DuplicateSectionError) + 1 0.000 0.000 0.000 0.000 _typing.py:234(ReadPickleBuffer) + 1 0.000 0.000 0.000 0.000 parser.py:126(BytesHeaderParser) + 1 0.000 0.000 0.000 0.000 tarfile.py:271(TarError) + 1 0.000 0.000 0.000 0.000 errors.py:47(DistutilsFileError) + 1 0.000 0.000 0.000 0.000 package_importer.py:658(_PathNode) + 1 0.000 0.000 0.000 0.000 unicode.py:293(Thai) + 1 0.000 0.000 0.000 0.000 __init__.py:3167(RequirementParseError) + 1 0.000 0.000 0.000 0.000 constraints.py:398(_Simplex) + 1 0.000 0.000 0.000 0.000 parse.py:331(SplitResult) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:840(HeaderLabel) + 1 0.000 0.000 0.000 0.000 constraints.py:427(_LowerTriangular) + 2 0.000 0.000 0.000 0.000 _parser.py:99(checklookbehindgroup) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:512(NoFoldLiteral) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:690(Attribute) + 1 0.000 0.000 0.000 0.000 constraints.py:438(_LowerCholesky) + 1 0.000 0.000 0.000 0.000 _monkeytype_config.py:158(__init__) + 1 0.000 0.000 0.000 0.000 core.py:861(_DomainGreater) + 1 0.000 0.000 0.000 0.000 :1() + 2 0.000 0.000 0.000 0.000 __init__.py:176(is_initialized) + 1 0.000 0.000 0.000 0.000 ElementTree.py:106(ParseError) + 1 0.000 0.000 0.000 0.000 coding.py:26(NotATree) + 1 0.000 0.000 0.000 0.000 diophantine.py:944(HomogeneousGeneralQuadratic) + 1 0.000 0.000 0.000 0.000 case.py:334(_OrderedChainMap) + 1 0.000 0.000 0.000 0.000 index_tricks.py:718(IndexExpression) + 1 0.000 0.000 0.000 0.000 datapipe.py:372(_MapDataPipeSerializationWrapper) + 1 0.000 0.000 0.000 0.000 _covariance.py:536(CovViaCholesky) + 1 0.000 0.000 0.000 0.000 _bvp.py:514(BVPResult) + 1 0.000 0.000 0.000 0.000 _common.py:591(deprecated_method) + 1 0.000 0.000 0.000 0.000 cache.py:43(__cacheit) + 1 0.000 0.000 0.000 0.000 core.py:893(_MaskedUFunc) + 1 0.000 0.000 0.000 0.000 flow_matrix.py:113(CGInverseLaplacian) + 1 0.000 0.000 0.000 0.000 mock.py:41(InvalidSpecError) + 1 0.000 0.000 0.000 0.000 facts.py:465(InconsistentAssumptions) + 1 0.000 0.000 0.000 0.000 fused.py:67(ConvBnReLU1d) + 1 0.000 0.000 0.000 0.000 _common.py:348(TimeoutExpired) + 1 0.000 0.000 0.000 0.000 polyerrors.py:136(ComputationFailed) + 1 0.000 0.000 0.000 0.000 utils.py:117(_lazy_property_and_property) + 1 0.000 0.000 0.000 0.000 request.py:1641(DataHandler) + 1 0.000 0.000 0.000 0.000 :1() + 1 0.000 0.000 0.000 0.000 __init__.py:523(FileHash) + 1 0.000 0.000 0.000 0.000 pathlib.py:1391(PosixPath) + 1 0.000 0.000 0.000 0.000 parse.py:342(DefragResultBytes) + 1 0.000 0.000 0.000 0.000 importer.py:16(ObjNotFoundError) + 1 0.000 0.000 0.000 0.000 _pslinux.py:784(_Ipv6UnsupportedError) + 1 0.000 0.000 0.000 0.000 compressor.py:542(ZlibCompressorWrapper) + 1 0.000 0.000 0.000 0.000 misc.py:13(Undecidable) + 1 0.000 0.000 0.000 0.000 dataframes.py:298(CaptureAdd) + 1 0.000 0.000 0.000 0.000 _linesearch.py:23(LineSearchWarning) + 1 0.000 0.000 0.000 0.000 graph.py:22(_CachedPropertyResetterAdj) + 1 0.000 0.000 0.000 0.000 __init__.py:94(cuBLASModule) + 1 0.000 0.000 0.000 0.000 _base.py:14(SparseWarning) + 1 0.000 0.000 0.000 0.000 facts.py:251(TautologyDetected) + 1 0.000 0.000 0.000 0.000 std.py:51(TqdmExperimentalWarning) + 1 0.000 0.000 0.000 0.000 base_subprocess.py:281(ReadSubprocessPipeProto) + 1 0.000 0.000 0.000 0.000 coreerrors.py:4(BaseCoreError) + 1 0.000 0.000 0.000 0.000 zipfile.py:645(LZMADecompressor) + 1 0.000 0.000 0.000 0.000 reportviews.py:704(OutMultiDegreeView) + 1 0.000 0.000 0.000 0.000 symbolic_opset13.py:23(_apply_params) + 1 0.000 0.000 0.000 0.000 _common.py:337(AccessDenied) + 1 0.000 0.000 0.000 0.000 exceptions.py:10(CancelledError) + 1 0.000 0.000 0.000 0.000 __init__.py:374(_CountryNameDict) + 1 0.000 0.000 0.000 0.000 activation.py:784(LogSigmoid) + 1 0.000 0.000 0.000 0.000 _common.py:322(ZombieProcess) + 1 0.000 0.000 0.000 0.000 synchronize.py:159(Lock) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:807(ParameterizedHeaderValue) + 1 0.000 0.000 0.000 0.000 polyerrors.py:102(NotReversible) + 1 0.000 0.000 0.000 0.000 optimization.py:104(MNewton) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:2611(_NamedTupleMeta) + 1 0.000 0.000 0.000 0.000 polynomial.py:28(RankWarning) + 1 0.000 0.000 0.000 0.000 :1() + 1 0.000 0.000 0.000 0.000 :1() + 1 0.000 0.000 0.000 0.000 events.py:659(_Local) + 1 0.000 0.000 0.000 0.000 instancenorm.py:308(InstanceNorm3d) + 1 0.000 0.000 0.000 0.000 info.py:1047(SeriesTableBuilderNonVerbose) + 1 0.000 0.000 0.000 0.000 libmpf.py:43(ComplexResult) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3979(random_correlation_frozen) + 1 0.000 0.000 0.000 0.000 _fitpack2.py:1769(LSQSphereBivariateSpline) + 2 0.000 0.000 0.000 0.000 calendar.py:57(__init__) + 1 0.000 0.000 0.000 0.000 _shgo.py:1532(LMap) + 1 0.000 0.000 0.000 0.000 _pep440.py:141() + 1 0.000 0.000 0.000 0.000 digraph.py:48(_CachedPropertyResetterPred) + 1 0.000 0.000 0.000 0.000 request.py:1244(ProxyDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 _multivariate.py:3726(ortho_group_frozen) + 1 0.000 0.000 0.000 0.000 _memory_viz.py:113(__init__) + 1 0.000 0.000 0.000 0.000 pydoc.py:1545(_PlainTextDoc) + 1 0.000 0.000 0.000 0.000 modules.py:1324(QuotientModuleElement) + 1 0.000 0.000 0.000 0.000 threading.py:568(is_set) + 1 0.000 0.000 0.000 0.000 unicode.py:322(Devanagari) + 1 0.000 0.000 0.000 0.000 mock.py:348(_CallList) + 1 0.000 0.000 0.000 0.000 net_min_base.py:31(FxNetMinimizerBadModuleError) + 1 0.000 0.000 0.000 0.000 optimization.py:458(Ridder) + 1 0.000 0.000 0.000 0.000 dataframes.py:311(CaptureMul) + 1 0.000 0.000 0.000 0.000 datetimelike.py:154(InvalidComparison) + 1 0.000 0.000 0.000 0.000 __init__.py:16(IntCastingNaNError) + 1 0.000 0.000 0.000 0.000 mock.py:401(Base) + 1 0.000 0.000 0.000 0.000 dataframes.py:282(CaptureSetItem) + 1 0.000 0.000 0.000 0.000 :1() + 1 0.000 0.000 0.000 0.000 _factories.py:55(_TzStrFactory) + 1 0.000 0.000 0.000 0.000 functions.py:138(NoShapeError) + 1 0.000 0.000 0.000 0.000 inverselaplace.py:39(FixedTalbot) + 1 0.000 0.000 0.000 0.000 engine.py:20(DiagnosticError) + 1 0.000 0.000 0.000 0.000 diophantine.py:921(InhomogeneousGeneralQuadratic) + 1 0.000 0.000 0.000 0.000 _sf_error.py:5(SpecialFunctionWarning) + 1 0.000 0.000 0.000 0.000 conflict.py:3(AmbiguityWarning) + 1 0.000 0.000 0.000 0.000 case.py:25(SkipTest) + 1 0.000 0.000 0.000 0.000 :1() + 1 0.000 0.000 0.000 0.000 systems.py:32(ODEOrderError) + 1 0.000 0.000 0.000 0.000 ipaddress.py:1127(_BaseConstants) + 1 0.000 0.000 0.000 0.000 pickle_compat.py:96(_LoadSparseFrame) + 1 0.000 0.000 0.000 0.000 datapipes.py:83(FilterDataFramesPipe) + 1 0.000 0.000 0.000 0.000 _monitor.py:9(TqdmSynchronisationWarning) + 1 0.000 0.000 0.000 0.000 arpack.py:931(LuInv) + 1 0.000 0.000 0.000 0.000 errors.py:32(RemovedCommandError) + 1 0.000 0.000 0.000 0.000 polysys.py:15(SolveFailed) + 1 0.000 0.000 0.000 0.000 queues.py:11(QueueEmpty) + 1 0.000 0.000 0.000 0.000 serialization.py:264(_open_buffer_writer) + 1 0.000 0.000 0.000 0.000 unicode.py:268(Hangul) + 1 0.000 0.000 0.000 0.000 plot.py:1588(DefaultBackend) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1140(MeijerShiftC) + 1 0.000 0.000 0.000 0.000 __init__.py:9(warn_distutils_present) + 1 0.000 0.000 0.000 0.000 _warnings_errors.py:21(NearConstantInputWarning) + 1 0.000 0.000 0.000 0.000 argparse.py:698(ArgumentDefaultsHelpFormatter) + 2 0.000 0.000 0.000 0.000 distributed_c10d.py:323(default_pg) + 1 0.000 0.000 0.000 0.000 common.py:33(MatrixError) + 1 0.000 0.000 0.000 0.000 errors.py:8(MessageError) + 1 0.000 0.000 0.000 0.000 datapipes.py:59(ShuffleDataFramesPipe) + 1 0.000 0.000 0.000 0.000 argparse.py:1016(_AppendAction) + 1 0.000 0.000 0.000 0.000 _testutils.py:16(FPUModeChangeWarning) + 1 0.000 0.000 0.000 0.000 mock.py:2820(_SpecState) + 1 0.000 0.000 0.000 0.000 polyerrors.py:67(HeuristicGCDFailed) + 1 0.000 0.000 0.000 0.000 mock.py:395(_MockIter) + 1 0.000 0.000 0.000 0.000 common.py:37(ShapeError) + 1 0.000 0.000 0.000 0.000 argparse.py:959(_StoreConstAction) + 1 0.000 0.000 0.000 0.000 unicode.py:308(Hebrew) + 1 0.000 0.000 0.000 0.000 request.py:898(HTTPPasswordMgrWithDefaultRealm) + 1 0.000 0.000 0.000 0.000 fetch.py:45(_MapDatasetFetcher) + 1 0.000 0.000 0.000 0.000 _jit_internal.py:68(__init__) + 1 0.000 0.000 0.000 0.000 transforms.py:2732(InverseHankelTransform) + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1022(ShiftB) + 1 0.000 0.000 0.000 0.000 fused.py:10(_FusedModule) + 1 0.000 0.000 0.000 0.000 api.py:466(RRef) + 1 0.000 0.000 0.000 0.000 utils.py:1984(IgnoreException) + 1 0.000 0.000 0.000 0.000 triangulation.py:521(Simplex) + 1 0.000 0.000 0.000 0.000 codeprinter.py:30(AssignmentError) + 1 0.000 0.000 0.000 0.000 batchnorm.py:446(BatchNorm3d) + 1 0.000 0.000 0.000 0.000 _basinhopping.py:247(RandomDisplacement) + 1 0.000 0.000 0.000 0.000 extras.py:282(_fromnxfunction_seq) + 1 0.000 0.000 0.000 0.000 _parser.py:661(_result) + 2 0.000 0.000 0.000 0.000 lazy.py:144(LazySet) + 1 0.000 0.000 0.000 0.000 dropout.py:153(Dropout3d) + 1 0.000 0.000 0.000 0.000 pdb.py:90(Restart) + 1 0.000 0.000 0.000 0.000 optimization.py:213(Muller) + 1 0.000 0.000 0.000 0.000 errors.py:95(DistutilsTemplateError) + 1 0.000 0.000 0.000 0.000 hyperbolic.py:1122(InverseHyperbolicFunction) + 1 0.000 0.000 0.000 0.000 sqrtdenest.py:217(SqrtdenestStopIteration) + 1 0.000 0.000 0.000 0.000 constraints.py:493(_PositiveSemidefinite) + 1 0.000 0.000 0.000 0.000 types.py:26(SymInt) + 1 0.000 0.000 0.000 0.000 expressions.py:472(VariableNode) + 1 0.000 0.000 0.000 0.000 batchnorm.py:341(BatchNorm2d) + 1 0.000 0.000 0.000 0.000 __init__.py:240(c_char_p) + 1 0.000 0.000 0.000 0.000 pytables.py:383(JointConditionBinOp) + 1 0.000 0.000 0.000 0.000 bdb.py:13(BdbQuit) + 1 0.000 0.000 0.000 0.000 spectral_norm.py:205(SpectralNormStateDictHook) + 1 0.000 0.000 0.000 0.000 _multivariate.py:4142(unitary_group_frozen) + 1 0.000 0.000 0.000 0.000 fused.py:85(ConvBn3d) + 1 0.000 0.000 0.000 0.000 parse.py:336(ParseResult) + 1 0.000 0.000 0.000 0.000 text.py:29(AsciiUndirectedGlyphs) + 1 0.000 0.000 0.000 0.000 csv.py:64(excel_tab) + 1 0.000 0.000 0.000 0.000 unix_events.py:807(_UnixSubprocessTransport) + 1 0.000 0.000 0.000 0.000 shutil.py:61(Error) + 1 0.000 0.000 0.000 0.000 _quadpack_py.py:1196(_NQuad) + 1 0.000 0.000 0.000 0.000 __init__.py:22(NullFrequencyError) + 1 0.000 0.000 0.000 0.000 unicode.py:300(Arabic) + 1 0.000 0.000 0.000 0.000 fused.py:76(ConvBnReLU2d) + 1 0.000 0.000 0.000 0.000 _nonlin.py:26(NoConvergence) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:828(ContentDisposition) + 1 0.000 0.000 0.000 0.000 exception.py:31(NetworkXError) + 1 0.000 0.000 0.000 0.000 _base.py:49(CancelledError) + 1 0.000 0.000 0.000 0.000 lr_scheduler.py:169(_LRScheduler) + 1 0.000 0.000 0.000 0.000 __init__.py:28(clear_distutils) + 1 0.000 0.000 0.000 0.000 compressor.py:566(GzipCompressorWrapper) + 1 0.000 0.000 0.000 0.000 quadrature.py:389(GaussLegendre) + 1 0.000 0.000 0.000 0.000 odes.py:4(ODEMethods) + 1 0.000 0.000 0.000 0.000 dataframes.py:268(CaptureGetItem) + 1 0.000 0.000 0.000 0.000 constraints.py:504(_PositiveDefinite) + 1 0.000 0.000 0.000 0.000 calculus.py:1(CalculusMethods) + 1 0.000 0.000 0.000 0.000 ipaddress.py:24(NetmaskValueError) + 1 0.000 0.000 0.000 0.000 process.py:124(_ExceptionWithTraceback) + 1 0.000 0.000 0.000 0.000 reportviews.py:588(MultiDegreeView) + 1 0.000 0.000 0.000 0.000 client.py:1474(UnknownProtocol) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:193(UnstructuredTokenList) + 1 0.000 0.000 0.000 0.000 libhyper.py:43(NoConvergence) + 1 0.000 0.000 0.000 0.000 reportviews.py:542(OutDegreeView) + 1 0.000 0.000 0.000 0.000 polyoptions.py:44(Flag) + 1 0.000 0.000 0.000 0.000 graph.py:44(_CachedPropertyResetterNode) + 1 0.000 0.000 0.000 0.000 synchronize.py:184(RLock) + 1 0.000 0.000 0.000 0.000 __init__.py:14(_Await) + 1 0.000 0.000 0.000 0.000 profiler_util.py:613(StringTable) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:700(Section) + 1 0.000 0.000 0.000 0.000 _threadsafety.py:9(ReentrancyError) + 1 0.000 0.000 0.000 0.000 {built-in method _thread._set_sentinel} + 1 0.000 0.000 0.000 0.000 hyperexpand.py:1002(MultOperator) + 1 0.000 0.000 0.000 0.000 eigen.py:38(Eigen) + 1 0.000 0.000 0.000 0.000 util.py:108(_platform_supports_abstract_sockets) + 1 0.000 0.000 0.000 0.000 __init__.py:198(c_double) + 1 0.000 0.000 0.000 0.000 transforms.py:463(MellinTransformStripError) + 1 0.000 0.000 0.000 0.000 argparse.py:1054(_AppendConstAction) + 1 0.000 0.000 0.000 0.000 :1() + 1 0.000 0.000 0.000 0.000 reportviews.py:565(InDegreeView) + 1 0.000 0.000 0.000 0.000 argparse.py:1081(_CountAction) + 2 0.000 0.000 0.000 0.000 feedparser.py:125(__iter__) + 1 0.000 0.000 0.000 0.000 identification.py:13(IdentificationMethods) + 1 0.000 0.000 0.000 0.000 isomorphvf2.py:933(DiGMState) + 1 0.000 0.000 0.000 0.000 string_.py:211(BaseStringArray) + 1 0.000 0.000 0.000 0.000 boolalg.py:351(__eq__) + 1 0.000 0.000 0.000 0.000 errors.py:88(DistutilsInternalError) + 1 0.000 0.000 0.000 0.000 optimization.py:517(ANewton) + 1 0.000 0.000 0.000 0.000 _spectral.py:11(_NoConvergence) + 1 0.000 0.000 0.000 0.000 warnings.py:83(InformationOnly) + 1 0.000 0.000 0.000 0.000 configparser.py:265(InterpolationMissingOptionError) + 1 0.000 0.000 0.000 0.000 coreerrors.py:8(NonCommutativeExpression) + 1 0.000 0.000 0.000 0.000 process.py:397(_MainProcess) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:212(Token) + 1 0.000 0.000 0.000 0.000 _parser.py:1378(_attr) + 1 0.000 0.000 0.000 0.000 line.py:2788(Segment3D) + 1 0.000 0.000 0.000 0.000 :1() + 1 0.000 0.000 0.000 0.000 :1() + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:197(Phrase) + 1 0.000 0.000 0.000 0.000 format.py:1609(IntArrayFormatter) + 1 0.000 0.000 0.000 0.000 sympify.py:39(CantSympify) + 1 0.000 0.000 0.000 0.000 _pep440.py:129(InvalidVersion) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:200(Word) + 1 0.000 0.000 0.000 0.000 constraints.py:303(_Real) + 1 0.000 0.000 0.000 0.000 _dill.py:122() + 1 0.000 0.000 0.000 0.000 rl.py:42(glom) + 1 0.000 0.000 0.000 0.000 core.py:88(switch) + 1 0.000 0.000 0.000 0.000 fused.py:31(ConvReLU3d) + 1 0.000 0.000 0.000 0.000 pool.py:906(IMapUnorderedIterator) + 1 0.000 0.000 0.000 0.000 my_exceptions.py:30(WorkerInterrupt) + 1 0.000 0.000 0.000 0.000 reportviews.py:673(InMultiDegreeView) + 1 0.000 0.000 0.000 0.000 kind.py:48(Kind) + 1 0.000 0.000 0.000 0.000 runtests.py:90(TimeOutError) + 1 0.000 0.000 0.000 0.000 _basinhopping.py:278(MinimizerWrapper) + 1 0.000 0.000 0.000 0.000 process_executor.py:925(LokyRecursionError) + 1 0.000 0.000 0.000 0.000 vf2userfunc.py:187(MultiGraphMatcher) + 1 0.000 0.000 0.000 0.000 reportviews.py:628(DiMultiDegreeView) + 1 0.000 0.000 0.000 0.000 exceptions.py:18(DMBadInputError) + 1 0.000 0.000 0.000 0.000 numbers.py:1433(_MultisetHistogram) + 1 0.000 0.000 0.000 0.000 core.py:877(_DomainGreaterEqual) + 1 0.000 0.000 0.000 0.000 {built-in method gc.enable} + 1 0.000 0.000 0.000 0.000 kcomponents.py:302(AntiDegreeView) + 1 0.000 0.000 0.000 0.000 events.py:709(_RunningLoop) + 1 0.000 0.000 0.000 0.000 dropout.py:237(FeatureAlphaDropout) + 1 0.000 0.000 0.000 0.000 optimization.py:602(MDNewton) + 1 0.000 0.000 0.000 0.000 context.py:23(AuthenticationError) + 1 0.000 0.000 0.000 0.000 queues.py:16(QueueFull) + 1 0.000 0.000 0.000 0.000 operations.py:460(ShortCircuit) + 1 0.000 0.000 0.000 0.000 configparser.py:217(DuplicateOptionError) + 1 0.000 0.000 0.000 0.000 argparse.py:1249(_ExtendAction) + 1 0.000 0.000 0.000 0.000 fused.py:104(BNReLU2d) + 1 0.000 0.000 0.000 0.000 _exceptions.py:118(TooHardError) + 1 0.000 0.000 0.000 0.000 exceptions.py:17(InvalidStateError) + 1 0.000 0.000 0.000 0.000 _monkeytype_config.py:161(JitTypeTraceConfig) + 1 0.000 0.000 0.000 0.000 common.py:46(NonInvertibleMatrixError) + 1 0.000 0.000 0.000 0.000 datapipes.py:30(PerRowDataFramesPipe) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:2184(_UnpackAlias) + 1 0.000 0.000 0.000 0.000 extension.py:147(Library) + 1 0.000 0.000 0.000 0.000 argparse.py:687(RawTextHelpFormatter) + 1 0.000 0.000 0.000 0.000 case.py:33(_ShouldStop) + 1 0.000 0.000 0.000 0.000 _script.py:323(_CachedForward) + 1 0.000 0.000 0.000 0.000 plistlib.py:448(InvalidFileException) + 1 0.000 0.000 0.000 0.000 six.py:245(_MovedItems) + 1 0.000 0.000 0.000 0.000 nanops.py:64(set_use_bottleneck) + 1 0.000 0.000 0.000 0.000 _symbolic_trace.py:890(_PatchedFnDel) + 1 0.000 0.000 0.000 0.000 __init__.py:3318(PkgResourcesDeprecationWarning) + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:631(FallbackToBackend) + 1 0.000 0.000 0.000 0.000 fused.py:58(ConvBn2d) + 1 0.000 0.000 0.000 0.000 __init__.py:11(_PyAwaitMeta) + 1 0.000 0.000 0.000 0.000 {built-in method _operator.mul} + 1 0.000 0.000 0.000 0.000 _base.py:18(SparseFormatWarning) + 1 0.000 0.000 0.000 0.000 fused.py:49(ConvBn1d) + 1 0.000 0.000 0.000 0.000 factorials.py:272(MultiFactorial) + 1 0.000 0.000 0.000 0.000 __init__.py:256(c_wchar_p) + 1 0.000 0.000 0.000 0.000 diophantine.py:1116(CubicThue) + 1 0.000 0.000 0.000 0.000 exceptions.py:33(DMFormatError) + 1 0.000 0.000 0.000 0.000 function.py:111(BadSignatureError) + 1 0.000 0.000 0.000 0.000 core.py:148(MAError) + 1 0.000 0.000 0.000 0.000 ops.py:1350(FrameSplitter) + 1 0.000 0.000 0.000 0.000 connection.py:786(XmlListener) + 1 0.000 0.000 0.000 0.000 _pep440.py:150() + 1 0.000 0.000 0.000 0.000 fused.py:113(BNReLU3d) + 1 0.000 0.000 0.000 0.000 decorator.py:46(get_init) + 1 0.000 0.000 0.000 0.000 _ccallback.py:9(CData) + 1 0.000 0.000 0.000 0.000 mock.py:1204(Mock) + 1 0.000 0.000 0.000 0.000 polyerrors.py:114(PolynomialError) + 1 0.000 0.000 0.000 0.000 fused.py:94(ConvBnReLU3d) + 1 0.000 0.000 0.000 0.000 {method 'pop' of 'collections.OrderedDict' objects} + 1 0.000 0.000 0.000 0.000 exception.py:35(NetworkXPointlessConcept) + 1 0.000 0.000 0.000 0.000 util.py:102(_FifoCache) + 1 0.000 0.000 0.000 0.000 net_min_base.py:40(FxNetMinimizerRunFuncError) + 1 0.000 0.000 0.000 0.000 mock.py:2152(MagicMock) + 1 0.000 0.000 0.000 0.000 inverselaplace.py:354(deHoog) + 1 0.000 0.000 0.000 0.000 _dill.py:876(_dictproxy_helper) + 1 0.000 0.000 0.000 0.000 shutil.py:64(SameFileError) + 1 0.000 0.000 0.000 0.000 _endian.py:55(BigEndianUnion) + 1 0.000 0.000 0.000 0.000 context.py:14(ProcessError) + 1 0.000 0.000 0.000 0.000 __init__.py:453(IncompatibilityWarning) + 1 0.000 0.000 0.000 0.000 random.py:814(seed) + 1 0.000 0.000 0.000 0.000 pytables.py:389(UnaryOp) + 1 0.000 0.000 0.000 0.000 six.py:382(Module_six_moves_urllib_error) + 1 0.000 0.000 0.000 0.000 modules.py:1092(ModuleOrder) + 1 0.000 0.000 0.000 0.000 exceptions.py:53(NonExistentTimeError) + 1 0.000 0.000 0.000 0.000 modules.py:1864(InnerEndomorphism) + 1 0.000 0.000 0.000 0.000 errors.py:25(DistutilsClassError) + 1 0.000 0.000 0.000 0.000 core.py:830(__init__) + 1 0.000 0.000 0.000 0.000 request.py:1416(UnknownHandler) + 1 0.000 0.000 0.000 0.000 __init__.py:13(_PyFutureMeta) + 1 0.000 0.000 0.000 0.000 _iotools.py:421(ConverterError) + 1 0.000 0.000 0.000 0.000 common.py:3008(MatrixCommon) + 1 0.000 0.000 0.000 0.000 process.py:153(_CallItem) + 1 0.000 0.000 0.000 0.000 text.py:47(UtfDirectedGlyphs) + 1 0.000 0.000 0.000 0.000 context.py:302(ForkContext) + 1 0.000 0.000 0.000 0.000 threading.py:1400(_MainThread) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:204(CFWSList) + 1 0.000 0.000 0.000 0.000 transports.py:148(Transport) + 1 0.000 0.000 0.000 0.000 exceptions.py:38(StructureError) + 1 0.000 0.000 0.000 0.000 __init__.py:482(PossiblePrecisionLoss) + 1 0.000 0.000 0.000 0.000 _internal.py:243(c_void_p) + 1 0.000 0.000 0.000 0.000 process.py:146(_ResultItem) + 1 0.000 0.000 0.000 0.000 compressor.py:549(BinaryGzipFile) + 1 0.000 0.000 0.000 0.000 _dill.py:314(PicklingWarning) + 1 0.000 0.000 0.000 0.000 rl.py:81(sort) + 1 0.000 0.000 0.000 0.000 process.py:49(AuthenticationKey) + 1 0.000 0.000 0.000 0.000 ivp.py:24(OdeResult) + 1 0.000 0.000 0.000 0.000 constraints.py:466(_Square) + 1 0.000 0.000 0.000 0.000 _arrays.py:80(dia_array) + 1 0.000 0.000 0.000 0.000 abc.py:267(FileLoader) + 1 0.000 0.000 0.000 0.000 unicode.py:290(CJK) + 1 0.000 0.000 0.000 0.000 __init__.py:265(sic) + 1 0.000 0.000 0.000 0.000 __init__.py:373(UnknownExtra) + 1 0.000 0.000 0.000 0.000 graph.py:419(_Handle) + 1 0.000 0.000 0.000 0.000 _warnings_errors.py:33(FitError) + 1 0.000 0.000 0.000 0.000 function.py:101(PoleError) + 1 0.000 0.000 0.000 0.000 _dist_ver.py:1() + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:83(stop_call) + 1 0.000 0.000 0.000 0.000 argparse.py:999(_StoreFalseAction) + 1 0.000 0.000 0.000 0.000 fused.py:131(LinearLeakyReLU) + 1 0.000 0.000 0.000 0.000 {pyarrow._compute.function_registry} + 1 0.000 0.000 0.000 0.000 boolalg.py:426(__eq__) + 1 0.000 0.000 0.000 0.000 _pyio.py:2052(_check_newline) + 1 0.000 0.000 0.000 0.000 {built-in method gc.disable} + 1 0.000 0.000 0.000 0.000 headerregistry.py:271(UniqueUnstructuredHeader) + 1 0.000 0.000 0.000 0.000 pyprojecttoml.py:436(_BetaConfiguration) + 1 0.000 0.000 0.000 0.000 configparser.py:341(MissingSectionHeaderError) + 1 0.000 0.000 0.000 0.000 _parser.py:1608(UnknownTimezoneWarning) + 1 0.000 0.000 0.000 0.000 tz.py:627() + 1 0.000 0.000 0.000 0.000 _parallel_backends.py:80(start_call) + 1 0.000 0.000 0.000 0.000 _globals.py:47(VisibleDeprecationWarning) + 1 0.000 0.000 0.000 0.000 ctx_base.py:21(Context) + 1 0.000 0.000 0.000 0.000 __init__.py:11(DeprecatedTzFormatWarning) + 1 0.000 0.000 0.000 0.000 release.py:1() + 1 0.000 0.000 0.000 0.000 :1() + 1 0.000 0.000 0.000 0.000 tarfile.py:724(AbsolutePathError) + 1 0.000 0.000 0.000 0.000 exceptions.py:240(ParseFatalException) + 1 0.000 0.000 0.000 0.000 fused.py:140(LinearTanh) + 1 0.000 0.000 0.000 0.000 subprocess.py:123(SubprocessError) + 1 0.000 0.000 0.000 0.000 threading.py:832() + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:507(DotAtomText) + 1 0.000 0.000 0.000 0.000 expressions.py:468(LeafNode) + 1 0.000 0.000 0.000 0.000 context.py:213(_check_available) + 1 0.000 0.000 0.000 0.000 fused.py:40(LinearReLU) + 1 0.000 0.000 0.000 0.000 extras.py:295(_fromnxfunction_args) + 1 0.000 0.000 0.000 0.000 setupcfg.py:788(_DeprecatedConfig) + 1 0.000 0.000 0.000 0.000 tarfile.py:746(LinkOutsideDestinationError) + 1 0.000 0.000 0.000 0.000 {built-in method numpy.core._multiarray_umath._set_madvise_hugepage} + 1 0.000 0.000 0.000 0.000 mock.py:2387(AsyncMock) + 1 0.000 0.000 0.000 0.000 tarfile.py:741(AbsoluteLinkError) + 1 0.000 0.000 0.000 0.000 configparser.py:244(NoOptionError) + 1 0.000 0.000 0.000 0.000 headerregistry.py:322(UniqueDateHeader) + 1 0.000 0.000 0.000 0.000 splitter_base.py:182(FxNetSplitterInternalError) + 1 0.000 0.000 0.000 0.000 proxy.py:317(TraceError) + 1 0.000 0.000 0.000 0.000 extras.py:320(_fromnxfunction_allargs) + 1 0.000 0.000 0.000 0.000 warnings.py:93(SetuptoolsDeprecationWarning) + 1 0.000 0.000 0.000 0.000 errors.py:18(DistutilsModuleError) + 1 0.000 0.000 0.000 0.000 __init__.py:1179(ExtractionError) + 1 0.000 0.000 0.000 0.000 exceptions.py:15(UnknownTimeZoneError) + 1 0.000 0.000 0.000 0.000 exceptions.py:38(InvalidTimeError) + 1 0.000 0.000 0.000 0.000 config_init.py:745(register_plotting_backend_cb) + 1 0.000 0.000 0.000 0.000 fused.py:123(LinearBn1d) + 2 0.000 0.000 0.000 0.000 __init__.py:125(exec_module) + 1 0.000 0.000 0.000 0.000 errors.py:55(DistutilsOptionError) + 1 0.000 0.000 0.000 0.000 net_min_base.py:49(FxNetMinimizerResultMismatchError) + 1 0.000 0.000 0.000 0.000 _utils_internal.py:37(prepare_multiprocessing_environment) + 1 0.000 0.000 0.000 0.000 _base.py:55(InvalidStateError) + 1 0.000 0.000 0.000 0.000 polyerrors.py:71(ModularGCDFailed) + 2 0.000 0.000 0.000 0.000 __init__.py:2110(find_nothing) + 1 0.000 0.000 0.000 0.000 constraints.py:452(_CorrCholesky) + 1 0.000 0.000 0.000 0.000 _typing.py:30(Boolean) + 1 0.000 0.000 0.000 0.000 typing_extensions.py:2737(Buffer) + 1 0.000 0.000 0.000 0.000 frontend.py:114(NotSupportedError) + 1 0.000 0.000 0.000 0.000 six.py:340(Module_six_moves_urllib_parse) + 1 0.000 0.000 0.000 0.000 systems.py:37(ODENonlinearError) + 1 0.000 0.000 0.000 0.000 coreviews.py:359(FilterMultiAdjacency) + 1 0.000 0.000 0.000 0.000 _symbolic_trace.py:895(_PatchedFnSetAttr) + 1 0.000 0.000 0.000 0.000 tarfile.py:729(OutsideDestinationError) + 1 0.000 0.000 0.000 0.000 pickle.py:84(UnpicklingError) + 1 0.000 0.000 0.000 0.000 _arrays.py:64(bsr_array) + 1 0.000 0.000 0.000 0.000 alphabets.py:1() + 1 0.000 0.000 0.000 0.000 errors.py:61(MultipartInvariantViolationDefect) + 1 0.000 0.000 0.000 0.000 context.py:17(BufferTooShort) + 1 0.000 0.000 0.000 0.000 __init__.py:14(is_available) + 1 0.000 0.000 0.000 0.000 core.py:156(MaskError) + 1 0.000 0.000 0.000 0.000 _optimize.py:553(_MaxFuncCallError) + 1 0.000 0.000 0.000 0.000 process_executor.py:930(BrokenProcessPool) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:834(ContentTransferEncoding) + 1 0.000 0.000 0.000 0.000 pytables.py:2592(GenericDataIndexableCol) + 1 0.000 0.000 0.000 0.000 errors.py:41(NoBoundaryInMultipartDefect) + 1 0.000 0.000 0.000 0.000 function.py:583(_nested_map) + 1 0.000 0.000 0.000 0.000 _arrays.py:68(coo_array) + 1 0.000 0.000 0.000 0.000 headerregistry.py:382(UniqueAddressHeader) + 1 0.000 0.000 0.000 0.000 __init__.py:31(PerformanceWarning) + 1 0.000 0.000 0.000 0.000 forward_ad.py:108(UnpackedDualTensor) + 1 0.000 0.000 0.000 0.000 utils.py:94(NoBufferPresent) + 1 0.000 0.000 0.000 0.000 exceptions.py:23(DMDomainError) + 1 0.000 0.000 0.000 0.000 client.py:1463(HTTPException) + 1 0.000 0.000 0.000 0.000 client.py:1518(LineTooLong) + 1 0.000 0.000 0.000 0.000 distributed_c10d.py:411(group) + 1 0.000 0.000 0.000 0.000 tarfile.py:298(InvalidHeaderError) + 1 0.000 0.000 0.000 0.000 errors.py:33(OnnxExporterError) + 1 0.000 0.000 0.000 0.000 contextlib.py:65(_recreate_cm) + 1 0.000 0.000 0.000 0.000 multiarray.py:152(concatenate) + 1 0.000 0.000 0.000 0.000 errors.py:27(CallHintViolationWarning) + 1 0.000 0.000 0.000 0.000 _base.py:651(BrokenExecutor) + 1 0.000 0.000 0.000 0.000 exceptions.py:11(ExceptionWordUnicode) + 1 0.000 0.000 0.000 0.000 results.py:8() + 1 0.000 0.000 0.000 0.000 inverselaplace.py:542(Cohen) + 1 0.000 0.000 0.000 0.000 std.py:31(TqdmTypeError) + 1 0.000 0.000 0.000 0.000 calendar.py:162(setfirstweekday) + 1 0.000 0.000 0.000 0.000 discovery.py:263(FlatLayoutModuleFinder) + 1 0.000 0.000 0.000 0.000 {method 'keys' of 'mappingproxy' objects} + 1 0.000 0.000 0.000 0.000 polyoptions.py:657(Polys) + 1 0.000 0.000 0.000 0.000 frontend.py:131(FrontendTypeError) + 1 0.000 0.000 0.000 0.000 errors.py:99(DistutilsByteCompileError) + 1 0.000 0.000 0.000 0.000 expressions.py:516(OpNode) + 1 0.000 0.000 0.000 0.000 exceptions.py:43(DMRankError) + 1 0.000 0.000 0.000 0.000 __init__.py:169(c_ushort) + 1 0.000 0.000 0.000 0.000 polyerrors.py:122(UnsolvableFactorError) + 1 0.000 0.000 0.000 0.000 parse.py:355(ParseResultBytes) + 1 0.000 0.000 0.000 0.000 exceptions.py:38(DMNonInvertibleMatrixError) + 1 0.000 0.000 0.000 0.000 spawn.py:31(get_executable) + 1 0.000 0.000 0.000 0.000 _script.py:328(ScriptWarning) + 1 0.000 0.000 0.000 0.000 _optimize.py:1140(_LineSearchError) + 1 0.000 0.000 0.000 0.000 six.py:454(Module_six_moves_urllib_response) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:503(DotAtom) + 1 0.000 0.000 0.000 0.000 text.py:53(UtfUndirectedGlyphs) + 1 0.000 0.000 0.000 0.000 errors.py:107(NonASCIILocalPartDefect) + 1 0.000 0.000 0.000 0.000 expressions.py:525(FuncNode) + 1 0.000 0.000 0.000 0.000 exceptions.py:53(DMNonSquareMatrixError) + 1 0.000 0.000 0.000 0.000 __init__.py:1249(stream) + 1 0.000 0.000 0.000 0.000 _optimize.py:212(OptimizeWarning) + 1 0.000 0.000 0.000 0.000 errors.py:20(BoundaryError) + 1 0.000 0.000 0.000 0.000 errors.py:76(InvalidBase64LengthDefect) + 1 0.000 0.000 0.000 0.000 exception.py:90(AmbiguousSolution) + 1 0.000 0.000 0.000 0.000 expr.py:322(add_ops) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:550(ObsLocalPart) + 1 0.000 0.000 0.000 0.000 _dill.py:311(PickleWarning) + 1 0.000 0.000 0.000 0.000 more.py:3579(AbortThread) + 1 0.000 0.000 0.000 0.000 six.py:402(Module_six_moves_urllib_request) + 1 0.000 0.000 0.000 0.000 _arrays.py:72(csc_array) + 1 0.000 0.000 0.000 0.000 package_importer.py:675(_ExternNode) + 1 0.000 0.000 0.000 0.000 _endian.py:34(_swapped_struct_meta) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:208(Atom) + 1 0.000 0.000 0.000 0.000 function.py:116(BadArgumentsError) + 1 0.000 0.000 0.000 0.000 errors.py:34(DistutilsGetoptError) + 1 0.000 0.000 0.000 0.000 exception.py:55(NetworkXUnfeasible) + 1 0.000 0.000 0.000 0.000 common.py:51(NonPositiveDefiniteMatrixError) + 1 0.000 0.000 0.000 0.000 exception.py:77(NetworkXUnbounded) + 1 0.000 0.000 0.000 0.000 runtests.py:1957(Reporter) + 1 0.000 0.000 0.000 0.000 _dill.py:877(__ror__) + 1 0.000 0.000 0.000 0.000 errors.py:104(ObsoleteHeaderDefect) + 1 0.000 0.000 0.000 0.000 __init__.py:177(c_ulong) + 1 0.000 0.000 0.000 0.000 vf2userfunc.py:191(MultiDiGraphMatcher) + 1 0.000 0.000 0.000 0.000 polyerrors.py:78(IsomorphismFailed) + 1 0.000 0.000 0.000 0.000 context.py:306(SpawnContext) + 1 0.000 0.000 0.000 0.000 process.py:608(BrokenProcessPool) + 1 0.000 0.000 0.000 0.000 errors.py:104(CCompilerError) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:685(InvalidParameter) + 1 0.000 0.000 0.000 0.000 _typing.py:26(Integer) + 1 0.000 0.000 0.000 0.000 std.py:56(TqdmDeprecationWarning) + 1 0.000 0.000 0.000 0.000 context.py:20(TimeoutError) + 1 0.000 0.000 0.000 0.000 errors.py:16(HeaderParseError) + 1 0.000 0.000 0.000 0.000 errors.py:73(DistutilsPlatformError) + 1 0.000 0.000 0.000 0.000 client.py:1523(RemoteDisconnected) + 1 0.000 0.000 0.000 0.000 _arrays.py:84(dok_array) + 1 0.000 0.000 0.000 0.000 errors.py:66(DistutilsSetupError) + 1 0.000 0.000 0.000 0.000 exceptions.py:48(DMShapeError) + 1 0.000 0.000 0.000 0.000 errors.py:12(MessageParseError) + 1 0.000 0.000 0.000 0.000 errors.py:64(InvalidMultipartContentTransferEncodingDefect) + 1 0.000 0.000 0.000 0.000 six.py:475(Module_six_moves_urllib_robotparser) + 1 0.000 0.000 0.000 0.000 errors.py:108(PreprocessError) + 1 0.000 0.000 0.000 0.000 __init__.py:202(c_longdouble) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:862(Header) + 1 0.000 0.000 0.000 0.000 exceptions.py:61(BrokenBarrierError) + 1 0.000 0.000 0.000 0.000 polyerrors.py:177(OptionError) + 1 0.000 0.000 0.000 0.000 exception.py:60(NetworkXNoPath) + 1 0.000 0.000 0.000 0.000 errors.py:87(InvalidHeaderDefect) + 1 0.000 0.000 0.000 0.000 shutil.py:71(ExecError) + 1 0.000 0.000 0.000 0.000 errors.py:116(LibError) + 1 0.000 0.000 0.000 0.000 __init__.py:45(UnsortedIndexError) + 1 0.000 0.000 0.000 0.000 tarfile.py:277(ReadError) + 1 0.000 0.000 0.000 0.000 spawn.py:43(get_executable) + 1 0.000 0.000 0.000 0.000 exception.py:102(ExceededMaxIterations) + 1 0.000 0.000 0.000 0.000 errors.py:44(StartBoundaryNotFoundDefect) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:854(MessageID) + 1 0.000 0.000 0.000 0.000 errors.py:40(DistutilsArgError) + 1 0.000 0.000 0.000 0.000 __init__.py:440(ClosedFileError) + 1 0.000 0.000 0.000 0.000 exceptions.py:42(AmbiguousTimeError) + 1 0.000 0.000 0.000 0.000 polyerrors.py:86(EvaluationFailed) + 1 0.000 0.000 0.000 0.000 polyerrors.py:181(FlagError) + 1 0.000 0.000 0.000 0.000 errors.py:39(CheckerError) + 1 0.000 0.000 0.000 0.000 exception.py:65(NetworkXNoCycle) + 1 0.000 0.000 0.000 0.000 __init__.py:122(EmptyDataError) + 1 0.000 0.000 0.000 0.000 exceptions.py:46(MissingUnityError) + 1 0.000 0.000 0.000 0.000 tarfile.py:274(ExtractError) + 1 0.000 0.000 0.000 0.000 _header_value_parser.py:943(_InvalidEwError) + 1 0.000 0.000 0.000 0.000 errors.py:67(UndecodableBytesDefect) + 1 0.000 0.000 0.000 0.000 _iotools.py:437(ConversionWarning) + 1 0.000 0.000 0.000 0.000 polyerrors.py:147(UnivariatePolynomialError) + 1 0.000 0.000 0.000 0.000 exceptions.py:28(DMNotAField) + 1 0.000 0.000 0.000 0.000 argparse.py:781(ArgumentTypeError) + 1 0.000 0.000 0.000 0.000 __init__.py:169(MergeError) + 1 0.000 0.000 0.000 0.000 __init__.py:251(c_bool) + 1 0.000 0.000 0.000 0.000 headerregistry.py:397(UniqueSingleAddressHeader) + 1 0.000 0.000 0.000 0.000 __init__.py:409(CSSWarning) + 1 0.000 0.000 0.000 0.000 __init__.py:497(ValueLabelTypeMismatch) + 1 0.000 0.000 0.000 0.000 std.py:61(TqdmMonitorWarning) + 1 0.000 0.000 0.000 0.000 tarfile.py:721(FilterError) + 1 0.000 0.000 0.000 0.000 __init__.py:128(ParserWarning) + 1 0.000 0.000 0.000 0.000 _endian.py:35(_swapped_union_meta) + 1 0.000 0.000 0.000 0.000 __init__.py:205(NumbaUtilError) + 1 0.000 0.000 0.000 0.000 threading.py:798(BrokenBarrierError) + 1 0.000 0.000 0.000 0.000 shutil.py:74(ReadError) + 1 0.000 0.000 0.000 0.000 exception.py:51(NetworkXAlgorithmError) + 1 0.000 0.000 0.000 0.000 polyerrors.py:110(DomainError) + 1 0.000 0.000 0.000 0.000 client.py:1471(InvalidURL) + 1 0.000 0.000 0.000 0.000 errors.py:53(MisplacedEnvelopeHeaderDefect) + 1 0.000 0.000 0.000 0.000 _arrays.py:76(csr_array) + 1 0.000 0.000 0.000 0.000 exceptions.py:247(ParseSyntaxException) + 1 0.000 0.000 0.000 0.000 __init__.py:173(c_long) + 1 0.000 0.000 0.000 0.000 errors.py:28(CharsetError) + 1 0.000 0.000 0.000 0.000 tarfile.py:301(SubsequentHeaderError) + 1 0.000 0.000 0.000 0.000 _arrays.py:88(lil_array) + 1 0.000 0.000 0.000 0.000 exception.py:70(HasACycle) + 1 0.000 0.000 0.000 0.000 expressiondomain.py:156(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:190(c_uint) + 1 0.000 0.000 0.000 0.000 process_executor.py:951(ShutdownExecutorError) + 1 0.000 0.000 0.000 0.000 exception.py:82(NetworkXNotImplemented) + 1 0.000 0.000 0.000 0.000 __init__.py:321(NumExprClobberingError) + 1 0.000 0.000 0.000 0.000 client.py:1468(NotConnected) + 1 0.000 0.000 0.000 0.000 __init__.py:249(SpecificationError) + 1 0.000 0.000 0.000 0.000 errors.py:90(HeaderMissingRequiredValue) + 1 0.000 0.000 0.000 0.000 client.py:1508(ResponseNotReady) + 1 0.000 0.000 0.000 0.000 _iotools.py:429(ConverterLockError) + 1 0.000 0.000 0.000 0.000 __init__.py:230(c_byte) + 1 0.000 0.000 0.000 0.000 polyerrors.py:94(CoercionFailed) + 1 0.000 0.000 0.000 0.000 __init__.py:387(PyperclipException) + 1 0.000 0.000 0.000 0.000 client.py:1502(CannotSendRequest) + 1 0.000 0.000 0.000 0.000 tarfile.py:289(EmptyHeaderError) + 1 0.000 0.000 0.000 0.000 __init__.py:194(c_float) + 1 0.000 0.000 0.000 0.000 tarfile.py:280(CompressionError) + 1 0.000 0.000 0.000 0.000 errors.py:81(DistutilsExecError) + 1 0.000 0.000 0.000 0.000 polyerrors.py:106(NotAlgebraic) + 1 0.000 0.000 0.000 0.000 __init__.py:186(c_int) + 1 0.000 0.000 0.000 0.000 __init__.py:235(c_char) + 1 0.000 0.000 0.000 0.000 errors.py:121(LinkError) + 1 0.000 0.000 0.000 0.000 __init__.py:211(DuplicateLabelError) + 1 0.000 0.000 0.000 0.000 integerring.py:50(__init__) + 1 0.000 0.000 0.000 0.000 polyerrors.py:98(NotInvertible) + 1 0.000 0.000 0.000 0.000 polyerrors.py:82(ExtraneousFactors) + 1 0.000 0.000 0.000 0.000 process_executor.py:939(TerminatedWorkerError) + 1 0.000 0.000 0.000 0.000 errors.py:126(UnknownFileError) + 1 0.000 0.000 0.000 0.000 runtests.py:93(DependencyError) + 1 0.000 0.000 0.000 0.000 __init__.py:67(DtypeWarning) + 1 0.000 0.000 0.000 0.000 __init__.py:428(PossibleDataLossError) + 1 0.000 0.000 0.000 0.000 __init__.py:459(AttributeConflictWarning) + 1 0.000 0.000 0.000 0.000 polyerrors.py:132(GeneratorsNeeded) + 1 0.000 0.000 0.000 0.000 tarfile.py:286(HeaderError) + 1 0.000 0.000 0.000 0.000 __init__.py:53(ParserError) + 1 0.000 0.000 0.000 0.000 __init__.py:366(IndexingError) + 1 0.000 0.000 0.000 0.000 {built-in method gc.isenabled} + 1 0.000 0.000 0.000 0.000 __init__.py:37(UnsupportedFunctionCall) + 1 0.000 0.000 0.000 0.000 gaussiandomains.py:609(__init__) + 1 0.000 0.000 0.000 0.000 errors.py:70(InvalidBase64PaddingDefect) + 1 0.000 0.000 0.000 0.000 errors.py:47(CloseBoundaryNotFoundDefect) + 1 0.000 0.000 0.000 0.000 __init__.py:240(DataError) + 1 0.000 0.000 0.000 0.000 std.py:35(TqdmKeyError) + 1 0.000 0.000 0.000 0.000 exception.py:86(NodeNotFound) + 1 0.000 0.000 0.000 0.000 case.py:38(_UnexpectedSuccess) + 1 0.000 0.000 0.000 0.000 __init__.py:509(InvalidColumnName) + 1 0.000 0.000 0.000 0.000 shutil.py:77(RegistryError) + 1 0.000 0.000 0.000 0.000 __init__.py:469(DatabaseError) + 1 0.000 0.000 0.000 0.000 __init__.py:232(InvalidIndexError) + 1 0.000 0.000 0.000 0.000 client.py:1479(UnknownTransferEncoding) + 1 0.000 0.000 0.000 0.000 _diagnostic.py:107(background_context) + 1 0.000 0.000 0.000 0.000 shutil.py:81(_GiveupOnFastCopy) + 1 0.000 0.000 0.000 0.000 errors.py:24(MultipartConversionError) + 1 0.000 0.000 0.000 0.000 tarfile.py:295(EOFHeaderError) + 1 0.000 0.000 0.000 0.000 polyerrors.py:151(MultivariatePolynomialError) + 1 0.000 0.000 0.000 0.000 expr.py:977(_eval_power) + 1 0.000 0.000 0.000 0.000 errors.py:50(FirstHeaderLineIsContinuationDefect) + 1 0.000 0.000 0.000 0.000 errors.py:56(MissingHeaderBodySeparatorDefect) + 1 0.000 0.000 0.000 0.000 errors.py:73(InvalidBase64CharactersDefect) + 1 0.000 0.000 0.000 0.000 __init__.py:299(SettingWithCopyWarning) + 1 0.000 0.000 0.000 0.000 errors.py:112(CompileError) + 1 0.000 0.000 0.000 0.000 _dill.py:317(UnpicklingWarning) + 1 0.000 0.000 0.000 0.000 tarfile.py:283(StreamError) + 1 0.000 0.000 0.000 0.000 __init__.py:223(c_ubyte) + 1 0.000 0.000 0.000 0.000 rationalfield.py:45(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:261(c_wchar) + 1 0.000 0.000 0.000 0.000 tarfile.py:292(TruncatedHeaderError) + 1 0.000 0.000 0.000 0.000 more.py:3395(AbortThread) + 1 0.000 0.000 0.000 0.000 __init__.py:177(AccessorRegistrationWarning) + 1 0.000 0.000 0.000 0.000 expressionrawdomain.py:28(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:277(SettingWithCopyError) + 1 0.000 0.000 0.000 0.000 polyerrors.py:118(UnificationFailed) + 1 0.000 0.000 0.000 0.000 polyerrors.py:128(GeneratorsError) + 1 0.000 0.000 0.000 0.000 polyerrors.py:74(HomomorphismFailed) + 1 0.000 0.000 0.000 0.000 polyerrors.py:90(RefinementFailed) + 1 0.000 0.000 0.000 0.000 __init__.py:524(CategoricalConversionWarning) + 1 0.000 0.000 0.000 0.000 client.py:1505(CannotSendHeader) + 1 0.000 0.000 0.000 0.000 __init__.py:1757(__init__) + 1 0.000 0.000 0.000 0.000 dataframes.py:367(CaptureDataFrame) + 1 0.000 0.000 0.000 0.000 client.py:1499(ImproperConnectionState) + 1 0.000 0.000 0.000 0.000 tz.py:1818(_get_supported_offset) + 1 0.000 0.000 0.000 0.000 client.py:1482(UnimplementedFileMode) + 1 0.000 0.000 0.000 0.000 six.py:239(exec_module) + 1 0.000 0.000 0.000 0.000 gaussiandomains.py:438(__init__) + 1 0.000 0.000 0.000 0.000 _pyio.py:479(writable) + + diff --git a/students/amartins/tarefas/tarefa1.py b/students/amartins/tarefas/tarefa1.py new file mode 100644 index 0000000..a956d45 --- /dev/null +++ b/students/amartins/tarefas/tarefa1.py @@ -0,0 +1,81 @@ +from pgmpy.readwrite import BIFReader +import networkx as nx +import pydot +from networkx.drawing.nx_pydot import graphviz_layout + +def summary_dag(filename): + file = BIFReader(filename) + model = file.get_model() # Cria um objeto BayesianModel + nodes = model.nodes() + + asc = 0 + des = 0 + nodes_in = 0 + nodes_out = 0 + + for x in nodes: + # Obtem os nós pais e filhos de cada nós + parents = model.get_parents(x) + children = model.get_children(x) + + if len(parents) != 0: + des += 1 + if len(children) != 0: + asc += 1 + nodes_in += len(children) + nodes_out += len(parents) + + return {'dag_file': filename, 'nodes': nodes, 'count_parents': des, 'count_children': asc, 'count_in_edges': nodes_in, 'count_out_edges': nodes_out} + +def summary_str(d): + s = "DAG file: " + d["dag_file"] + "\n" + s += " Number of nodes: " + str(len(d["nodes"])) + "\n" + s += " Number of parents: " + str(d["count_parents"]) + "\n" + s += " Number of children: " + str(d["count_children"]) + "\n" + s += " Average in-degree: " + str(d["count_in_edges"]/len(d["nodes"])) + "\n" + s += " Average out-degree: " + str(d["count_out_edges"]/len(d["nodes"])) + "\n" + s += " Nodes:" + "\n" + nodes = d["nodes"] + for x in nodes: + s += " " + str(x) + "\n" + return s + +def show_dag(model): + G = nx.DiGraph() + for node in model.nodes: + G.add_node(node) + for edge in model.edges: + G.add_edge(edge[0], edge[1]) + # objeto pydot + dot = pydot.Dot(graph_type='digraph') + for node in model.nodes: + dot.add_node(pydot.Node(node)) + for edge in model.edges: + dot.add_edge(pydot.Edge(edge[0], edge[1])) + # defina o layout do grafo + pos = graphviz_layout(G, prog='dot') + # desenhe o grafo usando o networkx + nx.draw(G, pos, with_labels=True) + +def save_dag(model, target_filename): + G = nx.DiGraph() + for node in model.nodes: + G.add_node(node) + for edge in model.edges: + G.add_edge(edge[0], edge[1]) + # objeto pydot + dot = pydot.Dot(graph_type='digraph') + for node in model.nodes: + dot.add_node(pydot.Node(node)) + for edge in model.edges: + dot.add_edge(pydot.Edge(edge[0], edge[1])) + # defina o layout do grafo + pos = graphviz_layout(G, prog='dot') + # renderize o grafo com o pydot + graph = pydot.graph_from_dot_data(dot.to_string())[0] + graph.write_png(target_filename) + + +summary = summary_dag("asia2.bif") +message = summary_str(summary) +print(message) \ No newline at end of file diff --git a/students/amartins/tarefas/tarefa1a.py b/students/amartins/tarefas/tarefa1a.py new file mode 100644 index 0000000..f53898e --- /dev/null +++ b/students/amartins/tarefas/tarefa1a.py @@ -0,0 +1,38 @@ +import bnlearn as bn + +asia = bn.import_DAG("asia2.bif") + +model = asia['model'] # Cria um objeto BayesianModel + + + +nos = model.nodes() +print("Número de nós:", len(nos)) #resposta à pergunta "quantos nós tem a rede?" + +print("Lista de nós:", nos) + +asc = 0 +des = 0 +nos_in = 0 +nos_out = 0 + +for x in nos: + # Obtem os nós pais e filhos de cada nós + parents = model.get_parents(x) + children = model.get_children(x) + + if len(parents) != 0: + asc += 1 + if len(children) != 0: + des += 1 + nos_in += len(children) + nos_out += len(parents) + +#resposta à pergunta "quantos nós são descendentes? quantos são ascendentes?" +print("Nós ascendentes: ", asc) +print("Nós descendentes: ", des) +# resposta à pergunta "qual é o número médio de arestas "in"? e "out"?" +nos_in = float(nos_in/len(nos)) +nos_out = float(nos_out/len(nos)) +print("Número médio de arestas in: ", nos_in) +print("Número médio de arestas out: ", nos_out) \ No newline at end of file diff --git a/students/amartins/tarefas/tarefa1b.py b/students/amartins/tarefas/tarefa1b.py new file mode 100644 index 0000000..f0ddec1 --- /dev/null +++ b/students/amartins/tarefas/tarefa1b.py @@ -0,0 +1,35 @@ +import bnlearn as bn +import networkx as nx +import pydot +from networkx.drawing.nx_pydot import graphviz_layout + +asia = bn.import_DAG("asia2.bif") +model = asia['model'] + +# DiGraph do networkx +G = nx.DiGraph() + +for node in model.nodes: + G.add_node(node) + +for edge in model.edges: + G.add_edge(edge[0], edge[1]) + +# objeto pydot +dot = pydot.Dot(graph_type='digraph') + +for node in model.nodes: + dot.add_node(pydot.Node(node)) + +for edge in model.edges: + dot.add_edge(pydot.Edge(edge[0], edge[1])) + +# defina o layout do grafo +pos = graphviz_layout(G, prog='dot') + +# desenhe o grafo usando o networkx +nx.draw(G, pos, with_labels=True) + +# renderize o grafo com o pydot +graph = pydot.graph_from_dot_data(dot.to_string())[0] +graph.write_png('graph_asia2.png') diff --git a/students/amartins/tarefas/tarefa2.md b/students/amartins/tarefas/tarefa2.md new file mode 100644 index 0000000..2eb0254 --- /dev/null +++ b/students/amartins/tarefas/tarefa2.md @@ -0,0 +1,87 @@ +# Tarefa 2: Ler Redes Bayesianas, Escrever Programas Lógicos + +> **Estado da Tarefa.** Importação de Redes Bayesianas - OK; Construção de Programa Lógico a Partir de uma RB - Em Curso. + +## Importar uma Rede Bayesiana + +Passos: + +- [x] Implementar +- [ ] Testar e Documentar +- [x] Usar + +Função `summary_dag(filename)` no módulo `bninput`. **Deve ser testada e documentada.** + +## Construir um Programa Lógico dada uma Rede Bayesiana + +Passos: + +- [x] Implementar +- [ ] Testar e Documentar +- [ ] Usar + +### 2023-07-20 + +O ficheiro `tarefa2.py` está **quase** adequado para esta tarefa. Em particular, tem código para converter a descrição de uma bn em _algo que se assemelha a um programa lógico_. No entanto: + +**Criar funções.** À semelhança do que fez no `bninput`, deve **colocar o código "essencial" em funções**. Isto é, o essencial de + +```python +if __name__ == "__main__": + summary = summary_dag("asia2.bif") + model = summary["bnmodel"] + probabilities = get_yes_probabilities(model) + for node, yes_prob in probabilities.items(): + parents = model.get_parents(node) + s = "" + if len(parents) == 0: +... +``` + +deve ir para uma função. A minha sugestão é que o argumento dessa função seja um `model` que poderá resultar de, por exemplo, `summary_dag(...)`. + +**Adaptar a notação dos programas lógicos.** + +A sintaxe para os programas lógicos é a seguinte: +```prolog +f. /* Facto Determinista */ +h :- b1, ..., bN. /* Regra Determinista */ +p::f. /* Facto Probabilístico */ +p::h :- b1, ..., bN./* Regra Probabilística */ +``` + +em que `p` é uma probabilidade (um `float` entre 0 e 1); `f` é um "facto" (por exemplo, `asia`) e `h :- b1, ..., bN` é uma "regra" em que `h` é a "cabeça" (_"head"_) e o "corpo" (_"body"_) tem "literais" (factos ou negações de factos) `b1, ..., bN`. O símbolo "`,`" denota a _conjunção_ ($\wedge$), "`-`" a negação ($\neg$) e "`:-`" (em vez de "`<-`", e lê-se "_if_" ou "se") denota $\leftarrow$. + +Além disso, em relação ao que o seu programa produz, cada regra e cada facto termina em "`.`". Portanto, **falta acertar a sintaxe com a dos programas lógicos.** + +**Sintaxe, parte 2** + +Há, ainda, um aspeto adicional: Os programas que processam os programas lógicos não suportam (mais ou menos, em geral, por enquanto) factos e regras probabilísticas. Isso significa que a sintaxe +```prolog +p::f. /* Facto Probabilístico */ +p::h :- b1, ..., bN./* Regra Probabilística */ +``` +está "errada" para esses programas. O que podemos fazer, por enquanto, é escrever +```prolog +%* p::f. *% +f ; -f. +%* p::h. *% +h ; -h :- b1, ..., bN. +``` + +Por exemplo, +```prolog +%* 0.01::asia. *% +asia ; -asia. +``` +em vez de +```prolog +0.01::asia. +``` + +Nestes exemplos a sintaxe dos programas lógicos está acrescentada com "`;`" para denotar a disjunção ($\vee$) e "`%* ... *%`" para blocos de comentários. Isto é, +```prolog +%* 0.01::asia. *% +asia ; -asia. +``` +diz que temos um **facto disjuntivo**, `asia ; -asia` que indica que ou "acontece" `asia` ou "acontece" não `asia`. O comentário `%* 0.01::asia. *%` serve para "transportar" a informação sobre as probabilidades. Esta informação será tratada posteriormente, talvez na tarefa 4 ou na 5. \ No newline at end of file diff --git a/students/amartins/tarefas/tarefa2.pdf b/students/amartins/tarefas/tarefa2.pdf new file mode 100644 index 0000000..d751b67 Binary files /dev/null and b/students/amartins/tarefas/tarefa2.pdf differ diff --git a/students/amartins/tarefas/tarefa2.py b/students/amartins/tarefas/tarefa2.py new file mode 100755 index 0000000..87ab094 --- /dev/null +++ b/students/amartins/tarefas/tarefa2.py @@ -0,0 +1,79 @@ +#!env python +import pickle +from pgmpy.readwrite import BIFReader +import networkx as nx +import pydot +from networkx.drawing.nx_pydot import graphviz_layout +from bninput import * + +def get_yes_probabilities(model): + nodes = model.nodes() + + yes_probabilities = {} + + for node in nodes: + cpd = model.get_cpds(node) + state_names = cpd.state_names[node] + yes_index = state_names.index("yes") + yes_prob = cpd.values[yes_index] + yes_probabilities[node] = yes_prob + + return yes_probabilities + +def compile_bn2asp(model): + """_summary_ + + Args: + model (_type_): _description_ + + Returns: + _type_: _description_ + """ + probabilities = get_yes_probabilities(model) + sf = "" + for node, yes_prob in probabilities.items(): + parents = model.get_parents(node) + s = "" + if len(parents) == 0: + s += f"%* {yes_prob} :: {node}. *% \n" + s += f"{node} ; -{node}. \n\n" + sf += s + elif len(parents) == 1: + p = parents[0] + s += f"%* {yes_prob[0]} :: {node} :- {p}. *% \n" + s += f"{node} ; -{node} :- {p}. \n" + s += f"%* {yes_prob[1]} :: {node} :- -{p}. *% \n" + s += f"{node} ; -{node} :- -{p}. \n\n" + sf += s + else: + yes1 = yes_prob[0] + yes2 = yes_prob[1] + p0 = parents[0] + p1 = parents[1] + s += f"%* {yes1[0]} :: {node} :- {p0}, {p1}. *% \n" + s += f"{node} ; -{node} :- {p0}, {p1}. \n" + s += f"%* {yes2[0]} :: {node} :- -{p0}, {p1}. *% \n" + s += f"{node} ; -{node} :- -{p0}, {p1}. \n" + s += f"%* {yes1[1]} :: {node} :- {p0}, -{p1}. *% \n" + s += f"{node} ; -{node} :- {p0}, -{p1}. \n" + s += f"%* {yes2[1]} :: {node} :- -{p0}, -{p1}. *% \n" + s += f"{node} ; -{node} :- -{p0}, -{p1}. \n" + + sf += s + return sf + +if __name__ == "__main__": + # summary = summary_dag("/home/fc/sci/projetos/zugzwang/students/amartins/tarefas/asia2.bif") + summary = pickle.load(open("asia2.pkl", "rb")) + # 3.2776401042938232 + + model = summary["bnmodel"] + # 1.1920928955078125e-06 + + sum = compile_bn2asp(model) + # 0.00010275840759277344 + + print(sum) + # 5.269050598144531e-05 + + # TOTAL DE TEMPO: 5.778 SEGUNDOS diff --git a/students/amartins/tarefas/test/test_bninput.py b/students/amartins/tarefas/test/test_bninput.py new file mode 100644 index 0000000..e04034f --- /dev/null +++ b/students/amartins/tarefas/test/test_bninput.py @@ -0,0 +1,13 @@ +import unittest +from bninput import * + +class Test(unittest.TestCase): + def test_valid_file(self): + result = summary_dag('asia2.bif') + + self.assertEqual(result['dag_file'], 'asia2.bif') + self.assertIsInstance(result['nodes'], list) + self.assertIsInstance(result['count_parents'], int) + self.assertIsInstance(result['count_children'], int) + self.assertIsInstance(result['count_in_edges'], int) + self.assertIsInstance(result['count_out_edges'], int) \ No newline at end of file diff --git a/students/amartins/tarefas/v01-tarefa1a.py b/students/amartins/tarefas/v01-tarefa1a.py new file mode 100644 index 0000000..bac9ca2 --- /dev/null +++ b/students/amartins/tarefas/v01-tarefa1a.py @@ -0,0 +1,31 @@ +import bnlearn as bn + +asia = bn.import_DAG("asia2.bif") + +model = asia['model'] # Cria um objeto BayesianModel + + + +nos = model.nodes() +print("Número de nós:", len(nos)) #resposta à pergunta "quantos nós tem a rede?" + +print("Lista de nós:", nos) + +nos_in = 0 +nos_out = 0 + +for x in nos: + # Obtem os nós pais e filhos de cada nós + parents = model.get_parents(x) + children = model.get_children(x) + #resposta à pergunta "quantos nós são descendentes? quantos são ascendentes?" + print("Pais de ", x, ": ", parents) + print("Filhos de ", x, " :", children) + nos_in += len(children) + nos_out += len(parents) + +# resposta à pergunta "qual é o número médio de arestas "in"? e "out"?" +nos_in = nos_in/len(nos) +nos_out = nos_out/len(nos) +print("Número médio de arestas in: ", nos_in) +print("Número médio de arestas out: ", nos_out) \ No newline at end of file diff --git a/students/biblio/final_paper.pdf b/students/biblio/final_paper.pdf new file mode 100644 index 0000000..e99d73f Binary files /dev/null and b/students/biblio/final_paper.pdf differ diff --git a/students/zugzwuang-amartins.code-workspace b/students/zugzwuang-amartins.code-workspace new file mode 100644 index 0000000..883c31e --- /dev/null +++ b/students/zugzwuang-amartins.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [ + { + "path": "amartins/tarefas" + }, + { + "path": "amartins" + } + ], + "settings": {} +} \ No newline at end of file diff --git a/text/backup/probast_draft/probast_draf.pdf b/text/backup/probast_draft/probast_draf.pdf new file mode 100644 index 0000000..8b9c2dd Binary files /dev/null and b/text/backup/probast_draft/probast_draf.pdf differ diff --git a/text/backup/probast_draft/probast_draf.tex b/text/backup/probast_draft/probast_draf.tex new file mode 100644 index 0000000..a24ed2b --- /dev/null +++ b/text/backup/probast_draft/probast_draf.tex @@ -0,0 +1,323 @@ +\documentclass[bigger]{beamer} +\useinnertheme{circles} +\usefonttheme[onlymath]{serif} +\usefonttheme{structurebold} +\setbeamertemplate{navigation symbols}{} +\usepackage{xcolor} +\setbeamercolor{highlight block}{bg=gray} + +\usepackage{tikz} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[normalem]{ulem} % To strikeout +\usepackage{commath} + +\newcommand{\naf}{\ensuremath{\sim\!\!}} + +\title{Probabilistic Answer Set Programming} +\subtitle{A Research Draft} +\author{Francisco Coelho} +\institute[\texttt{fc@uevora.pt}]{ + NOVA LINCS \&\\ + High Performance Computing Chair \&\\ + Departamento de Informática, Universidade de Évora +} + +\begin{document} + \begin{frame}[plain] + \titlepage + \end{frame} + + \section*{Motivation} + + \begin{frame} + \frametitle{In short\ldots\hfill\small \ldots a word wall. I'm sorry.} + + \begin{itemize} + \item \textbf{Machine Learning} has important limitations: + \begin{itemize} + \item The \emph{one table, conditionally independent rows} assumption. + \item \emph{Background knowledge} is hard to include. + \item \emph{Training} requires ``large'' amounts of data. + \item \emph{Models} are hard do interpret. + \end{itemize} + \item \textbf{Inductive Logic Programming} is based on first order logic --- solves all the problems above but is sensible to \emph{noise}. + \item \textbf{Distribution Semantics} defines the probability of a proposition from probabilities of the (marginally independent) facts. + \item \textbf{Answer Set Programs} resets the common syntax and semantic of logic programs; A ``program'' defines \emph{stable models}, not a computation neither a variable substitution. + \end{itemize} + \end{frame} + + \begin{frame} + \frametitle{\xout{Goals} Wish list} + + \begin{block}{Extend distribution semantics to answer sets} + \begin{itemize} + \item Within a theoretical framework. + \item Computationally applicable to ``real world'' scenarios. + \item Easy to include background knowledge. + \item Perform common tasks such as \emph{marg, mle, map, etc.} + \item Learn program ``parameters'' and ``structure'' from \emph{noisy samples} --- possibly using \emph{templates}. + \item Related to Bayesian Networks, HMMs, \emph{etc.} + \end{itemize} + + \end{block} + \end{frame} + + \section{Development} + + \begin{frame} + \tableofcontents[currentsection] + \end{frame} + + \begin{frame} + \frametitle{The seed on an idea} + We want to define the \textbf{joint distribution} of the stable models. + \begin{enumerate} + \item A \textbf{boolean random variable} can be described by a disjunction $a; \neg a$. + \item This ASP program has two stable models: $a$ and $\neg a$. + \item A program with $n$ such facts $a_i; \neg a_i$ has $2^n$ stable models, the distinct combinations of those choices. + \item \textbf{If each $a_i$ has probability $p_i$ then the probability of a stable model $W$ would be} $$P(W) = \prod_{a_i \in W}p_i \prod_{\neg a_i \in W} (1 - p_i).$$ + \end{enumerate} + \pause + \begin{alertblock}{But this is wrong.} + Even assuming that those facts are marginally independent --- which we will do. + \end{alertblock} + \end{frame} + + \begin{frame}{Problem 1: Disjuntive Clauses} + The ASP program with probabilistic facts + $$ + \begin{aligned} + &b \vee \neg b\\ + &h_1 \vee h_2 \leftarrow b + \end{aligned} + $$ + has \textbf{three} stable models: $\set{\neg b}, \set{b, h_1}$ and $\set{b, h_2}$. + + \begin{block}{How to assign a probability to each model?} + \pause + Possible approaches: + \begin{enumerate} + \item Pre-assign a \textbf{conditional distribution of the head}: + $$P(h_1, h_2 | b).$$ + \item Bayesian learn from \textbf{observations}: + $$P(h_1, h_2 | b,z) \propto P(b, z | h_1, h_2) P(h_1, h_2).$$ + \item Start with the former as \textbf{prior} and \textbf{update} with the latter. + \end{enumerate} + \end{block} + + \end{frame} + + \begin{frame} + \frametitle{Questions to address} + + \begin{itemize} + \item How to \textbf{match} an observation $z$ with a clause case $h,b$? + \item How do observations \textbf{update} the probabilities? + \item Why match observations with clauses and \textbf{not with stable models}? + \item Is this just \textbf{bayesian networking}? + \item How to frame this in a \textbf{sound theoretic setting}? + \item Is this enough to compute the \textbf{joint distribution of the atoms}? + \end{itemize} + \onslide<2-> + \begin{exampleblock}{Counters} + Instead of setting and updating probabilities, we associate \textbf{counters} to disjunctive clauses and their cases. + \end{exampleblock} + + \end{frame} + + \begin{frame} + \frametitle{Bayesian updates: Matching observations} + + \begin{itemize} + \item An \alert{observation} is a subset of the literals from a program\footnote{The set of atoms, $a$, of the program and their classic negations, $\neg a$.}. + \item A \alert{consistent} observation has no subset $\set{p, \neg p}$. + \item A \textbf{consistent} observation $z$ is \alert{relevant} for the clause $h \leftarrow b$ if $b \subseteq z$. + \item A disjunctive clause $$h_1 \vee \cdots \vee h_n \leftarrow b_1 \wedge \cdots \wedge b_m$$ has $n$ \alert{cases}: $\set{h_i, b_1, \ldots, b_m}, i = 1:n$. + \item The \textbf{consistent} observation $z$ \alert{matches} the case $\set{h, b_\ast}$ if + $\set{h, b_\ast} \subseteq z$. + \end{itemize} + The above definitions also apply to \textbf{facts} \emph{i.e.} clauses with an empty body and \textbf{constraints} \emph{i.e.} clauses with no head. + \end{frame} + + \begin{frame} + \frametitle{Bayesian updates: Clauses Update} + A consistent observation \textbf{relevant} for a clause $h_1 \vee \cdots \vee h_n \leftarrow b$ should: + \begin{itemize} + \item Increase the \emph{probability of any matched case}. + \item Decrease the \emph{probability of any unmatched case}. + \end{itemize} + \pause + \begin{block}{Update algorithm} + \begin{enumerate} + \item Associate three \textbf{counters}, $r, u, n$, to each clause $h \leftarrow b$. + \item Associate a \textbf{counter}, $m_i$, to each case $h_i, b$ of each clause. + \item \textbf{Initial} values result from \emph{prior} knowledge. + \item Each \emph{consistent} observation \textbf{increments}: + \begin{itemize} + \item The $r$ counters of \alert{r}elevant clauses. + \item The $u$ counters of \alert{u}nmatched relevant clauses. + \item The $n$ counters of \alert{n}ot relevant clauses. + \item The $m_i$ counters of \alert{m}atched cases $h_i, b$. + \item Clause counters must verify $r \leq u + \sum_i m_i$. + \end{itemize} + \end{enumerate} + \end{block} + \end{frame} + + \begin{frame} + \frametitle{Updates and counters: An example} + Given the following ASP program with \textbf{annotated counters}, + $$ + \begin{aligned} + %&H \leftarrow B&&\text{counters:}~ m_{1:n}; r, u, n \\ + &b \vee \neg b &&\text{counters:}~ 7, 2; 12, 3, 0 \\ + &h_1 \vee h_2 \leftarrow b &&\text{counters:}~ 4 , 3 ; 6, 2, 5 + \end{aligned} + $$ + \onslide*<2>{ + \begin{columns}[t] + \begin{column}{0.5\textwidth} + \begin{block}{Counters of $b \vee \neg b$}\small + $0$ observations where not relevant (because the body is $\top$); + + There where $12$ relevant observations; + + Of those, $b$ was matched by $7$, $\neg b$ by $2$ and $3$ observations matched neither ($\models\naf b, \naf \neg b$). + \end{block} + \end{column} + \begin{column}{0.5\textwidth} + \begin{block}{Counters of $h_1 \vee h_2 \leftarrow b$}\small + There where $11 = 6 + 5$ observations, $6$ relevant to this clause; + + From these, $4$ matched $h_1$, $3$ matched $h_2$ and $2$ matched no case. + \end{block} + \end{column} + \end{columns} + } + \onslide<3-> + \begin{block}{What can be computed?} + \begin{itemize} + \item $P(\neg b) = \frac{2}{12}$ because $\neg b$ matched $2$ of $12$ relevant observations. + \item $P(h_1 | b) = \frac{4}{6}$ because $h_1$ matched $4$ of $6$ relevant observations. + \item $P(b)$ \alert{can't be computed} without further information. \emph{E.g.} supposing that \textbf{observations are independent} then + $$P(b) = \frac{7 + 6}{12 + 0 + 6 + 5}.$$ + \end{itemize} + + \end{block} + \end{frame} + + \begin{frame} + \frametitle{Updates and counters: An example} + Given the following ASP program with \textbf{annotated counters}, + $$ + \begin{aligned} + %&H \leftarrow B&&\text{counters:}~ m_{1:n}; r, u, n \\ + &b \vee \neg b &&\text{counters:}~ 7, 2; 12, 3, 0 \\ + &h_1 \vee h_2 \leftarrow b &&\text{counters:}~ 4 , 3 ; 6, 2, 5 + \end{aligned} + $$ + \begin{block}{Note\ldots} + \onslide*<1>{Counters are local to clauses and, for distinct clauses, may result from distinct sources. \emph{E.g. the relevant counter of $h_1 \vee h_2 \leftarrow b$ and the match counter of $b$ in $b \vee \neg b$.}} + \onslide*<3>{Some observations may have neither $b$ nor $\neg b$: $$P(b) + P(\neg b) < 1.$$} + \onslide*<4>{Since $h_1$ and $h_2$ are not independent, $$\sum_m P(m) \approx 1.02 > 1.$$} + \onslide*<5>{What is missing to compute the \alert{joint distribution} of the program's atoms $$P(H_1, H_2, B)?$$} + \end{block} + \end{frame} + + \begin{frame} + \frametitle{Shortcomming 2: Default Negation} + + \begin{itemize} + \item How to deal with rules with $\naf a$ parts? + \item Should missing elements on observations be replaced with $\naf a$ atoms? + \end{itemize} + \end{frame} + \section{Conclusions} + + \begin{frame} + \tableofcontents[currentsection] + \end{frame} + + \section*{Background Material} + + \begin{frame} + \Huge Background Material + \end{frame} + + \begin{frame}{Machine Learning} + Models are numeric functions: $y \approx f_\theta(x),~\theta_i, x_j, y\in\mathbf{R}$. + \begin{itemize} + \item Amazing achievements. + \item Noise tolerant. + \item (as of today) Huge enterprise funding . + \end{itemize} + but + \begin{itemize} + \item (essentially) Academically solved. + \item Models trained from ``large'' amounts of samples. + \item Hard to add background knowledge. + \item Models are hard to interpret. + \item Single table, independent rows assumption. + \end{itemize} + \end{frame} + + \begin{frame}{Inductive Logic Programming} + Models are logic program: $p_\theta(x, y),~\theta_i, x_j, y\in{\cal A}$. + \begin{itemize} + \item Amazing achievements, at scale. + \item Models trained from ``small'' amounts of samples. + \item Compact, readable models. + \item Background knowledge is easy to incorporate and edit. + \end{itemize} + but + \begin{itemize} + \item as of today, Little enterprise commitment. + \item as of today, Mostly academic interest. + \item Noise sensitive. + \end{itemize} + \end{frame} + + \begin{frame}{Distribution Semantics} + Assigns probability to (marginally independent) facts and derives probability of ground propositions. + + Let $F$ be set of facts, $S\subseteq F$, $R$ a set of definite clauses and $p$ a proposition: + $$\small + \begin{aligned} + P_F(S) &= \prod_{f \in S} P(f) \prod_{f \not\in S} \left(1 - P(f) \right) \cr + P(W) &= \sum_{S \subseteq F :~W=M(S\cup R)} P_F(S) \cr + P(p) &= \sum_{S :~ S\cup R ~\vdash~ p} P_F(S) = \sum_{W :~ p\in W} P(W) + \end{aligned} + $$ + \begin{itemize} + \item Amazing achievements, at scale. + \item Lots of tools and research. + \item The best of both ``worlds''? + \end{itemize} + + \end{frame} + + \begin{frame}{Answer Set Programming} + A ``program'' defines stable models \emph{i.e.} minimal sets of derived ground atoms\footnote{Alternative \xout{fact} definition: $X$ is a stable model of $P$ if $X = \text{Cn}(P^X)$.}. + \begin{itemize} + \item Pure declarative language, unlike Prolog. + \item Uses \emph{generate \& test} methods instead of proofs . + \item Uses both default $\sim\!p$ and classical negation $\neg p$\footnote{Classic negation $\neg a$ in ASP results from replacing the occurrences of $\neg a$ by a new atom $a_\neg$ and adding the restriction $\leftarrow a_\neg, a$.} + \item Clauses can be disjunctive $a ; b \leftarrow c, d.$ + \end{itemize} + \end{frame} + + \subsection*{Stable Sets} + + \begin{frame} + \tableofcontents[currentsection] + \end{frame} + + \subsection*{References} + + \begin{frame} + \tableofcontents[currentsection] + \end{frame} +\end{document} + + diff --git a/text/backup/zz_old/00_DRAFTS.md b/text/backup/zz_old/00_DRAFTS.md new file mode 100644 index 0000000..059618d --- /dev/null +++ b/text/backup/zz_old/00_DRAFTS.md @@ -0,0 +1,21 @@ +# PASP Drafts + +Consider the logic program + +$$ +\begin{aligned} +c_1 &= a \vee \neg a, \cr +c_2 &= b \larr \sim a \land \sim c, \cr +c_3 &= c \larr \sim b +\end{aligned} +$$ + +This program has three stable models: + +$$ +\begin{aligned} +m_1 &= \set{a, c} \cr +m_2 &= \set{b, \neg a} \cr +m_3 &= \set{c, \neg a} +\end{aligned} +$$ \ No newline at end of file diff --git a/text/backup/zz_old/00_PASP.pdf b/text/backup/zz_old/00_PASP.pdf new file mode 100644 index 0000000..6f764a9 Binary files /dev/null and b/text/backup/zz_old/00_PASP.pdf differ diff --git a/text/backup/zz_old/00_PASP.tex b/text/backup/zz_old/00_PASP.tex new file mode 100644 index 0000000..b732c99 --- /dev/null +++ b/text/backup/zz_old/00_PASP.tex @@ -0,0 +1,1047 @@ +\documentclass{beamer} +%------------------------------------------ +\usecolortheme{rose} +%------------------------------------------ +\useinnertheme{circles} +%------------------------------------------ +\setbeamertemplate{navigation symbols}{} +%------------------------------------------ +\AtBeginSection{ + \begin{frame}\small + \tableofcontents[currentsection,subsectionstyle=shaded/shaded/hide] + \end{frame} +} +%------------------------------------------ +\AtBeginSubsection{ + \begin{frame}\small + \tableofcontents[ + currentsection,sectionstyle=shaded/shaded, + currentsubsection,subsectionstyle=show/shaded/hide] + \end{frame} +} +%------------------------------------------ +\usepackage[overridenote]{pdfpc} + +\usepackage{tikz} +\usetikzlibrary{ + % shapes, + % arrows, + % backgrounds, + positioning, +} +\tikzset{ + sm/.style={ + rectangle, + rounded corners, + fill=teal!10, + align=center, + minimum height=1.5em, + }, + sup/.style={ + rectangle, + rounded corners, + fill=blue!10, + align=center, + minimum height=1.5em, + }, + sub/.style={ + rectangle, + rounded corners, + fill=red!10, + align=center, + minimum height=1.5em, + }, + ind/.style={ + align=center, + minimum height=1.5em, + }, +} + +\usepackage[T1]{fontenc} +\usepackage{hyperref} +\hypersetup{% + colorlinks=true, + allcolors=blue, +} +\usepackage{commath} +\usepackage{amssymb} +% +% Local commands +% +\newcommand{\todo}[1]{{\color{orange}TODO #1}} +\newcommand{\naf}{\ensuremath{\sim\!}} +\newcommand{\larr}{\ensuremath{\leftarrow}} +\newcommand{\at}[1]{\ensuremath{\!\del{#1}}} +\newcommand{\co}[1]{\ensuremath{\overline{#1}}} +\newcommand{\fml}[1]{\ensuremath{{\cal #1}}} +\newcommand{\deft}[1]{\textbf{#1}} +\newcommand{\pset}[1]{\ensuremath{\mathbb{P}\at{#1}}} +\newcommand{\ent}{\ensuremath{\lhd}} +\newcommand{\cset}[2]{\ensuremath{\set{#1,~#2}}} +\newcommand{\langof}[1]{\ensuremath{\fml{L}\at{#1}}} +\newcommand{\uset}[1]{\ensuremath{\left|{#1}\right>}} +\newcommand{\lset}[1]{\ensuremath{\left<{#1}\right|}} +\newcommand{\pr}[1]{\ensuremath{\mathrm{p}\at{#1}}} +\newcommand{\given}{\ensuremath{~\middle|~}} +% +% Identificação deste documento +% +\title{Zugzwang} +\subtitle{Stochastic Adventures in Inductive Logic} +\author{Francisco Coelho} +\institute[\texttt{fc@uevora.pt}]{ + Departamento de Informática, Universidade de Évora\\ + High Performance Computing Chair\\ + NOVA-LINCS +} + +\begin{document} +% +\begin{frame}[plain] +\titlepage +\end{frame} + +\section{Introduction} + + +\begin{frame}{Notation and Assumptions} + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item $\co{x} = 1 - x$. + % -------------------------------- + \item \textbf{Probabilistic Atomic Choice (PAC):} $x :: a$ defines $a \lor \neg a$ and probabilities $\pr{a} = x, \pr{\neg a} = \co{x}$. + % -------------------------------- + \item $\delta a$ denotes $a \lor \neg a$ and $\delta\! \set{x :: a, a \in \fml{A}} = \set{\delta a, a \in \fml{A}}$ for a set of atoms $\fml{A}$. + % -------------------------------- + \item \textbf{Closed World Assumption:} $\naf p \models \neg p$. + % -------------------------------- + % \item Probabilistic choices and sub-goals are independent. + % -------------------------------- + \end{itemize} + % -------------------------------- +\end{frame} +% ================================================================ +\begin{frame}{General Setting} + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item \textbf{Atoms} $\fml{A}$, + $\overline{\fml{A}} = \cset{\neg a}{a \in \fml{A}}$, and \textbf{literals} $\fml{L} = \fml{A} \cup \co{\fml{A}}$. + % -------------------------------- + \item \textbf{Samples} $z \in \fml{Z} \iff z \subseteq \fml{L}$. + % -------------------------------- + \item \textbf{Events} or \textit{consistent samples} $\fml{E}$ : + $$\fml{E} = \cset{z \in \fml{Z} }{ \forall a \in \fml{A}~\envert{\set{a,\neg a} \cap z} \leq 1}.$$ + % -------------------------------- + \item \textit{PASP Problem} or \textbf{Specification:} $P = C \land F \land R$ where + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item $C = C_P = \cset{x_i :: a_i }{ i \in 1:n \land a_i \in \fml{A}}$ \textit{pacs}. + % -------------------------------- + \item $F = F_P$ \textit{facts}. + % -------------------------------- + \item $R = R_P$ \textit{rules}. + % -------------------------------- + \item $\fml{A}_P, \fml{Z}_P$ and $\fml{E}_P$: \textit{atoms}, \textit{samples} and \textit{events} of $P$. + \end{itemize} + % -------------------------------- + \item \textbf{Stable Models} of $P$, $\fml{S} = \fml{S}_P$, are the stable models of $\delta P = \delta C + F + R$. + % -------------------------------- + \end{itemize} + % -------------------------------- +\end{frame} +% ================================================================ +\begin{frame}{Distribution Semantics} + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item \textbf{Total Choices:} $\Theta = \Theta_C = \Theta_P$ elements are $\theta = \cset{t_c}{c \in C}$ where $c=x::a$ and $t_c$ is $a$ or $\neg a$. + % -------------------------------- + %\item For $s\in\fml{S}$ let $\theta_s \subseteq s$ (unique \textit{total choice}) + %\item Define $\fml{S}_\theta = \cset{s \in \fml{S}}{\theta \subset s}$. + % -------------------------------- + + % -------------------------------- + \item \textbf{Total Choice Probability:} + \begin{equation} + \pr{\theta} = \prod_{a \in \theta}x \prod_{\neg a \in \theta}\co{x}.\label{eq:prob.tc} + \end{equation} + % -------------------------------- + \end{itemize} + % -------------------------------- + This is the \emph{distribution semantic} as set by Sato. +\end{frame} +% ================================================================ +\begin{frame} + % -------------------------------- + \begin{block}{Problem Statement} + How to \textit{extend} probability from total choices to stable models, events and samples? + \end{block} + % -------------------------------- + \begin{quotation} + There's a problem right at extending to stable models. + \end{quotation} + % -------------------------------- +\end{frame} +% ================================================================ +\begin{frame}{The Disjunction Case} + % -------------------------------- + \begin{exampleblock}{Disjuntion Example} + The specification + % -------------------------------- + $$ + \begin{aligned} + 0.3 :: a &, \cr + b \lor c &\larr a . + \end{aligned} + $$ + % -------------------------------- + has three stable models, + % -------------------------------- + $$ + \begin{aligned} + s_1 &= \set{\neg a}, & s_2 &= \set{a, b}, & s_3 &= \set{a, c}. + \end{aligned} + $$ + \end{exampleblock} + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item\label{prop:unique.ext.tcsm}\textit{Any stable model contains exactly one total choice.~$\blacksquare$} + % -------------------------------- + \item $\pr{\set{\neg a}} = 0.7$ is straightforward. + % -------------------------------- + \item But, no \textit{informed} choice for $x\in\intcc{0,1}$ in + $$ + \begin{aligned} + \pr{\set{a, b}} &= 0.3 x, \cr + \pr{\set{a, c}} &= 0.3 \co{x}. + \end{aligned} + $$ + % -------------------------------- + \end{itemize} + % -------------------------------- +\end{frame} +% ================================================================ +\begin{frame}{Lack of Information \& Parametrization} + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item The specification \textit{lacks information} to set $x\in\intcc{0,1}$ in + $$ + \begin{aligned} + \pr{\set{a, b}} &= 0.3 x, \cr + \pr{\set{a, c}} &= 0.3 \co{x}. + \end{aligned} + $$ + \item A \textit{random variable} captures this uncertainty, \alert{assuming} that the stable models are statistically independent: + $$ + \begin{aligned} + \pr{\set{\neg a} \given X = x } &= 0.7, \cr + \pr{\set{a, b} \given X = x } &= 0.3 x, \cr + \pr{\set{a, c} \given X = x } &= 0.3 \co{x}. + \end{aligned} + $$ + \item Other uncertainties may lead to further conditions: + $$ + \pr{s \given X_1 = x_1, \ldots, X_n = x_n }. + $$ + % -------------------------------- + \end{itemize} + Reducing \textbf{uncertainty}, \textit{e.g.} setting $X = 0.21$, must result from \textbf{external} sources, since the specification lacks information for further assertions. + % -------------------------------- +\end{frame} +% ================================================================ +\begin{frame}{Independence of Stable Models} + % -------------------------------- + + \begin{itemize} + \item[Q:] Why are the stable models assumed statistically independent? + % -------------------------------- + \item[A:] Because dependence can be \textit{explicitly} modelled. + % -------------------------------- + \item So, it is assumed \textit{intention} of the \textit{modeller} to not explicit express such dependences. + % -------------------------------- + \item \textbf{For example:} \todo{Some key examples}. + \end{itemize} + % -------------------------------- +\end{frame} +% ================================================================ +\begin{frame}%{Main Research Question} + % -------------------------------- + A \textit{random variable} captures this uncertainty: + $$ + \begin{aligned} + \pr{\set{\neg a} \given X = x } &= 0.7, \cr + \pr{\set{a, b} \given X = x } &= 0.3 x, \cr + \pr{\set{a, c} \given X = x } &= 0.3 \co{x}. + \end{aligned} + $$ + % -------------------------------- + \begin{block}{Main Research Question} + Can \textit{all} specification uncertainties be neatly expressed as that example? + \end{block} + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item Follow ASP syntax; for each case, what are the uncertainty scenarios? + % -------------------------------- + \item The disjunction example illustrates one such scenario. + % -------------------------------- + \item \textit{Neat} means a function $d: \fml{S} \to \intcc{0, 1}$ such that + $$ + \sum_{s\in\fml{S}_\theta} d\at{s} = 1 + $$ + for each $\theta \in \Theta$. + % -------------------------------- + \end{itemize} + % -------------------------------- +\end{frame} +% ================================================================ +\begin{frame}{Leap into Inductive Programming} + % -------------------------------- + Given a method that produces a distribution of samples, $p$, from a specification, $P$ and: + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item $Z$, a dataset (of samples). + % -------------------------------- + \item $e$, the respective empirical distribution. + % -------------------------------- + \item $D$, some probability divergence, \textit{e.g.} Kullback-Leibler. + % -------------------------------- + \end{itemize} + % -------------------------------- + \begin{block}{Specification Performance \& Inductive Programming} + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item $D\at{P} = D\at{e, p}$ is a \textbf{performance} measure of $P$. + % -------------------------------- + \item Predictor performance measures, such as accuracy, are common in \textit{Machine Learning} tasks. + % -------------------------------- + \item For \textit{Inductive Programming} this performance can be used, \textit{e.g.} as fitness, by algorithms searching for \textbf{optimal specifications of a dataset}. + % -------------------------------- + \end{itemize} + % -------------------------------- + \end{block} + % -------------------------------- +\end{frame} +% ================================================================ +\section{Extending Probability to Samples} +% ================================================================ +\begin{frame}{Resolution Path} + Prior to \textit{conciliation} with data: + \begin{enumerate} + \item \alert{Hopefully}, \textit{conditional parameters} extend probability from total choices to \textit{standard models}. + \item \textbf{How} to extend it to \textit{events}? + \begin{itemize} + \item $\pr{x} = 0$ for $x$ \textit{excluded} by the specification, including \textit{inconsistent} samples. + \item $\pr{x}$ depends on the $s \in \fml{S}$ that contain/are contained in $x$. + \end{itemize} + \end{enumerate} + \alert{Consider probabilities \textbf{conditional} on the total choice!} +\end{frame} +% ================================================================ +\begin{frame}{Bounds of Events} + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item For $x\in\fml{E}$: + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item \textbf{Lower Models:} $\lset{x} = \cset{s\in \fml{S} }{ s \subseteq x}$. + % -------------------------------- + \item \textbf{Upper Models:} $\uset{x} = \cset{s\in \fml{S} }{ x \subseteq s}$. + % -------------------------------- + \end{itemize} + % -------------------------------- + \item\label{prop:lucases} \textbf{Proposition.} Exactly \textit{one} of the following cases takes place: + % -------------------------------- + \begin{enumerate} + % -------------------------------- + \item\label{prop:lucases.a} $\lset{x} = \set{x} = \uset{x}$ and $x$ is a stable model. Then: + \begin{equation} + \pr{x \given C = \theta_x} = d\at{x}. + \end{equation} + % -------------------------------- + \item\label{prop:lucases.b} $\lset{x} \neq \emptyset \land \uset{x} = \emptyset$. Then: + \begin{equation} + \pr{x \given C = \theta_s, s \in \lset{x}} = \prod_{s\in\lset{x}} d\at{s}. + \end{equation} + % -------------------------------- + \item\label{prop:lucases.c} $\lset{x} = \emptyset \land \uset{x} \neq \emptyset$. Then: + \begin{equation} + \pr{x \given C = \theta_s, s \in \uset{x}} = \sum_{s\in\uset{x}} d\at{s}. + \end{equation} + % -------------------------------- + \item\label{prop:lucases.d} $\lset{x} = \emptyset = \uset{x}$. Then: + \begin{equation} + \pr{x} = 0. + \end{equation} + % -------------------------------- + \end{enumerate} + because stable models are \textit{minimal}. + % -------------------------------- + \end{itemize} + % -------------------------------- +\end{frame} +% ================================================================ +\begin{frame}{Conditional on Total Choices} + % -------------------------------- + \begin{itemize} + % -------------------------------- + \item A stable model is entailed by an atomic choice plus the facts and rules of the specification. + \item We express that entailment as a \textit{conditional}. For example: + $$\pr{\set{a,b} \given X = x} = \pr{b \given X = x, \Theta = a}\pr{\theta = a}$$ + \item And now $\pr{b \given X = x, \Theta = a} = x$, since $X$ is a proxy for the stable models of the total choice $\theta = a$, we can further. + % -------------------------------- + \end{itemize} + % -------------------------------- +\end{frame} +% ================================================================ +\begin{frame}{Disjunction Example | The Events Lattice} + \begin{center} + \begin{tikzpicture} + % -------------------------------- + %\draw [help lines, color=gray!20] grid (11,7); + % -------------------------------- + \node at (7, 7) {$\pr{\Theta=a} = 0.3$}; + \node at (7, 6) {$x = \pr{S = ab \given \Theta}$}; + \node at (7, 5) {$\co{x} = \pr{S \not= ab \given \Theta}$}; + \node at (7, 7.5) {$\pr{E = abc \given \Theta} = \pr{S = ab, S = ac \given \Theta }$}; + % -------------------------------- + % \node [rrect] (sub) at (2, 7) {sub}; + % -------------------------------- + % \node [ fill=gray!10] (sup) at (3, 7) {sup}; + % -------------------------------- + % \node (ind) at (4, 7) {ind}; + % -------------------------------- + % + % -------------------------------- + \node [ sub, + pin=45:\textcolor{violet}{$1$} ] + (E) at (5.5,0) {$\emptyset$}; + % -------------------------------- + % + % -------------------------------- + \node [ sub, + pin=0:\textcolor{blue!75}{$1$} ] + (a) at (1.5,1.5) {$a$}; + % -------------------------------- + \node [ sub, + pin=315:\textcolor{blue!50}{$x$}] + (b) at (0,1.5) {$b$}; + % -------------------------------- + \node [ sub, + pin=315:\textcolor{blue!50}{$\co{x}$}] + (c) at (4.5,1.5) {$c$}; + % -------------------------------- + % \node [ sm, + % pin=270:\textcolor{teal}{$1$}] + % (A) at (8.5,1.5) {$\co{a}$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (B) at (9.5, 1.5) {$\co{b}$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (C) at (10.5, 1.5) {$\co{c}$}; + % -------------------------------- + % + % -------------------------------- + \node [ sm, + pin=0:\textcolor{teal}{$x$}] + (ab) at (0,4) {$ab$}; + % -------------------------------- + \node [ sm, + pin=0:\textcolor{teal}{$\co{x}$}] + (ac) at (3,4) {$ac$}; + % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (aB) at (1,4) {$a\co{b}$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (aC) at (2,4) {$a\co{c}$}; + % -------------------------------- + % \node [ sup, + % pin=90:\textcolor{blue!50}{$1$}] + % (Ab) at (4,4) {$\co{a}b$}; + % % -------------------------------- + % \node [ sup, + % pin=90:\textcolor{blue!50}{$1$}] + % (Ac) at (5,4) {$\co{a}c$}; + % % -------------------------------- + % \node [ sup, + % pin=90:\textcolor{blue!50}{$1$}] + % (AB) at (6,4) {$\co{a}\co{b}$}; + % % -------------------------------- + % \node [ sup, + % pin=90:\textcolor{blue!50}{$1$}] + % (AC) at (7,4) {$\co{a}\co{c}$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (bc) at (10,4) {$bc$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (bC) at (11,4) {$b\co{c}$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (Bc) at (9.5,3.5) {$\co{b}c$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (BC) at (10.5,3.5) {$\co{b}\co{c}$}; + % -------------------------------- + % + % -------------------------------- + \node [ sup, + pin=45:\textcolor{blue!75}{$x\co{x}$}] + (abc) at (1.5,6) + {$abc$}; + % -------------------------------- + \node [ sup, + pin=45:\textcolor{blue!50}{$x$}] + (abC) at (0,6) {$ab\co{c}$}; + % -------------------------------- + \node [ sup, + pin=45:\textcolor{blue!50}{$\co{x}$}] + (aBc) at (3,6) {$a\co{b}c$}; + % -------------------------------- + % \node [ ind, + % pin=90:\textcolor{purple}{$0$}] + % (aBC) at (5,6) {$a\co{b}\co{c}$}; + % -------------------------------- + % \node [ sup, + % pin=90:\textcolor{blue!50}{$1$}] + % (Abc) at (7,6) {$\co{a}bc$}; + % % -------------------------------- + % \node [ sup, + % pin=270:\textcolor{blue!50}{$1$}] + % (AbC) at (8,6) {$\co{a}b\co{c}$}; + % % -------------------------------- + % \node [ sup, + % pin=270:\textcolor{blue!50}{$1$}] + % (ABc) at (9,6) {$\co{a}\co{b}c$}; + % % -------------------------------- + % \node [ sup, + % pin=270:\textcolor{blue!50}{$1$}] + % (ABC) at (10,6) {$\co{a}\co{b}\co{c}$}; + % -------------------------------- + % + % -------------------------------- + \draw [->] (ab) to [out=270,in=180] (E); + \draw [->] (ab) to [out=270,in=90] (a); + \draw [->] (ab) to [out=270,in=90] (b); + \draw [->] (ab) to [out=90,in=270] (abc); + \draw [->] (ab) to [out=90,in=270] (abC); + % + \draw [->] (ac) to [out=270,in=180] (E); + \draw [->] (ac) to [out=270,in=90] (a); + \draw [->] (ac) to [out=270,in=90] (c); + \draw [->] (ac) to [out=90,in=270] (abc); + \draw [->] (ac) to [out=90,in=270] (aBc); + % + % \draw [->] (A) to [out=270,in=0] (E); + % % + % \draw [->] (A) to [out=90,in=270] (Abc); + % \draw [->] (A) to [out=90,in=270] (AbC); + % \draw [->] (A) to [out=90,in=270] (ABc); + % \draw [->] (A) to [out=90,in=270] (ABC); + % % + % \draw [->] (A) to [out=90,in=270] (Ab); + % \draw [->] (A) to [out=90,in=270] (Ac); + % \draw [->] (A) to [out=90,in=270] (AB); + % \draw [->] (A) to [out=90,in=270] (AC); + \end{tikzpicture} + \end{center} +\end{frame} +% ================================================================ +\begin{frame}{Disjunction Example | The Events Lattice} + \begin{center} + \begin{tikzpicture} + % -------------------------------- + %\draw [help lines, color=gray!20] grid (11,7); + % -------------------------------- + \node [sm] (sm) at (5, 7) {$\pr{\Theta=\set{\co{a}}} = \co{0.3}$}; + % -------------------------------- + % \node [rrect] (sub) at (2, 7) {sub}; + % -------------------------------- + % \node [ fill=gray!10] (sup) at (3, 7) {sup}; + % -------------------------------- + % \node (ind) at (4, 7) {ind}; + % -------------------------------- + % + % -------------------------------- + \node [ sub, + pin=45:\textcolor{violet}{$1$} ] + (E) at (5.5,0) {$\emptyset$}; + % -------------------------------- + % + % -------------------------------- + % \node [ sub, + % pin=270:\textcolor{blue!75}{$1$} ] + % (a) at (1.5,1.5) {$a$}; + % % -------------------------------- + % \node [ sub, + % pin=270:\textcolor{blue!50}{$x$}] + % (b) at (0,1.5) {$b$}; + % % -------------------------------- + % \node [ sub, + % pin=270:\textcolor{blue!50}{$\co{x}$}] + (c) at (4.5,1.5) {$c$}; + % -------------------------------- + \node [ sm, + pin=45:\textcolor{teal}{$1$}] + (A) at (8.5,1.5) {$\co{a}$}; + % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (B) at (9.5, 1.5) {$\co{b}$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (C) at (10.5, 1.5) {$\co{c}$}; + % -------------------------------- + % + % -------------------------------- + % \node [ sm, + % pin=90:\textcolor{teal}{$x$}] + % (ab) at (0,4) {$ab$}; + % % -------------------------------- + % \node [ sm, + % pin=90:\textcolor{teal}{$\co{x}$}] + % (ac) at (3,4) {$ac$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (aB) at (1,4) {$a\co{b}$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (aC) at (2,4) {$a\co{c}$}; + % -------------------------------- + \node [ sup, + pin=135:\textcolor{blue!50}{$1$}] + (Ab) at (4,4) {$\co{a}b$}; + % -------------------------------- + \node [ sup, + pin=135:\textcolor{blue!50}{$1$}] + (Ac) at (5,4) {$\co{a}c$}; + % -------------------------------- + \node [ sup, + pin=135:\textcolor{blue!50}{$1$}] + (AB) at (6,4) {$\co{a}\co{b}$}; + % -------------------------------- + \node [ sup, + pin=135:\textcolor{blue!50}{$1$}] + (AC) at (7,4) {$\co{a}\co{c}$}; + % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (bc) at (10,4) {$bc$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (bC) at (11,4) {$b\co{c}$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (Bc) at (9.5,3.5) {$\co{b}c$}; + % % -------------------------------- + % \node [ ind, + % pin=270:\textcolor{purple}{$0$}] + % (BC) at (10.5,3.5) {$\co{b}\co{c}$}; + % -------------------------------- + % + % -------------------------------- + % \node [ sup, + % pin=90:\textcolor{blue!75}{$x\co{x}$}] + % (abc) at (1.5,6) + % {$abc$}; + % % -------------------------------- + % \node [ sup, + % pin=90:\textcolor{blue!50}{$x$}] + % (abC) at (0,6) {$ab\co{c}$}; + % % -------------------------------- + % \node [ sup, + % pin=90:\textcolor{blue!50}{$\co{x}$}] + % (aBc) at (3,6) {$a\co{b}c$}; + % % -------------------------------- + % \node [ ind, + % pin=90:\textcolor{purple}{$0$}] + % (aBC) at (5,6) {$a\co{b}\co{c}$}; + % -------------------------------- + \node [ sup, + pin=45:\textcolor{blue!50}{$1$}] + (Abc) at (7,6) {$\co{a}bc$}; + % -------------------------------- + \node [ sup, + pin=45:\textcolor{blue!50}{$1$}] + (AbC) at (8,6) {$\co{a}b\co{c}$}; + % -------------------------------- + \node [ sup, + pin=45:\textcolor{blue!50}{$1$}] + (ABc) at (9,6) {$\co{a}\co{b}c$}; + % -------------------------------- + \node [ sup, + pin=45:\textcolor{blue!50}{$1$}] + (ABC) at (10,6) {$\co{a}\co{b}\co{c}$}; + % -------------------------------- + % + % -------------------------------- + % \draw [->] (ab) to [out=270,in=180] (E); + % \draw [->] (ab) to [out=270,in=90] (a); + % \draw [->] (ab) to [out=270,in=90] (b); + % \draw [->] (ab) to [out=90,in=270] (abc); + % \draw [->] (ab) to [out=90,in=270] (abC); + % % + % \draw [->] (ac) to [out=270,in=180] (E); + % \draw [->] (ac) to [out=270,in=90] (a); + % \draw [->] (ac) to [out=270,in=90] (c); + % \draw [->] (ac) to [out=90,in=270] (abc); + % \draw [->] (ac) to [out=90,in=270] (aBc); + % + \draw [->] (A) to [out=270,in=0] (E); + % + \draw [->] (A) to [out=90,in=270] (Abc); + \draw [->] (A) to [out=90,in=270] (AbC); + \draw [->] (A) to [out=90,in=270] (ABc); + \draw [->] (A) to [out=90,in=270] (ABC); + % + \draw [->] (A) to [out=90,in=270] (Ab); + \draw [->] (A) to [out=90,in=270] (Ac); + \draw [->] (A) to [out=90,in=270] (AB); + \draw [->] (A) to [out=90,in=270] (AC); + \end{tikzpicture} + \end{center} +\end{frame} +% ================================================================ +\begin{frame} + + + \begin{itemize} + \item Consider the ASP program $P = C \land F \land R$ with total choices $\Theta $ and stable models $\fml{S}$. + + \item Let $d : \fml{S} \to \intcc{0,1}$ such that $\sum_{s\in\fml{S}_\theta} d\at{s} = 1$ for each $\theta \in \Theta$. + \end{itemize} +\end{frame} +% ================================================================ +\begin{frame} + For each $z\in\fml{Z}$ only one of the following cases takes place + \begin{enumerate} + \item $z$ is inconsistent. Then \textbf{define} + \begin{equation} + w_d\at{x} = 0.\label{def:w.inconsistent} + \end{equation} + % + \item $z$ is an event and $\lset{z} = \set{z} = \uset{z}$. Then $z$ is a stable model and \textbf{define} + \begin{equation} + w_d\at{z} = w\at{z} = d\at{z} \pr{\theta_z}.\label{eq:prob.sm} + \end{equation} + % + \item $z$ is an event and $\lset{z} \neq \emptyset \land \uset{x} = \emptyset$. Then \textbf{define} + \begin{equation} + w_d\at{z} = \sum_{s \in \lset{z}} w_d\at{s}.\label{def:w.disj} + \end{equation} + % + \item $z$ is an event and $\lset{z} = \emptyset \land \uset{z} \neq \emptyset$. Then \textbf{define} + \begin{equation} + w_d\at{z} = \prod_{s \in \uset{z}} w_d\at{s}.\label{def:w.conj} + \end{equation} + % + \item $z$ is an event and $\lset{z} = \emptyset \land \uset{z} = \emptyset$. Then \textbf{define} + \begin{equation} + w_d\at{z} = 0.\label{def:w.empty} + \end{equation} + \end{enumerate} + \end{frame} + % ================================================================ + \begin{frame} + \begin{enumerate} + % + \item The last point defines a ``weight'' function on the samples that depends not only on the total choices and stable models of a PASP but also on a certain function $d$ that must respect some conditions. To simplify the notation we use the subscript in $w_d$ only when necessary. + % + \item At first, it may seem counter-intuitive that $w\at{\emptyset} = \sum_{s\in\fml{S}} w\at{s}$ is the largest ``weight'' in the lattice. But $\emptyset$, as an event, sets zero restrictions on the ``compatible'' stable models. The ``complement'' of $\bot = \emptyset$ is the \emph{maximal inconsistent} sample $\top = \fml{A} \cup \cset{\neg a }{ a \in \fml{A}}$. + % + \item \textbf{We haven't yet defined a probability measure.} To do so we must define a set of samples $\Omega$, a set of events $F\subseteq \pset{\Omega}$ and a function $P:F\to\intcc{0,1}$ such that: + \begin{enumerate} + \item $\pr{E} \in \intcc{0, 1}$ for any $E \in F$. + \item $\pr{\Omega} = 1$. + \item if $E_1 \cap E_2 = \emptyset$ then $\pr{E_1 \cup E_2} = \pr{E_1} + \pr{E_2}$. + \end{enumerate} + % + \item In the following, assume that the stable models are iid. + % + \item Let the sample space $\Omega = \fml{Z}$ and the event space $F = \pset{\Omega}$. Define $Z = \sum_{\zeta\in\fml{Z}} w\at{\zeta}$ and + \begin{equation} + \pr{z} = \frac{w\at{z}}{Z}, z \in \Omega \label{eq:def.prob} + \end{equation} + and + \begin{equation} + \pr{E} = \sum_{x\in E} \pr{x}, E \subseteq \Omega. \label{eq:def.prob.event} + \end{equation} + Now: + \begin{enumerate} + \item $P(E) \in \intcc{0,1}$ results directly from the definitions of $P$ and $w$. + \item $\pr{\Omega} = 1$ also results directly from the definitions. + \item Consider two disjunct events $A, B \subset \Omega \land A \cap B = \emptyset$. Then + $$ + \begin{aligned} + \pr{A \cup B} &= \sum_{x \in A \cup B} \pr{x} \cr + &= \sum_{x \in A} \pr{x} + \sum_{x \in B} \pr{x} - \sum_{x \in A \cap B} \pr{x} \cr + &= \sum_{x \in A} \pr{x} + \sum_{x \in B} \pr{x} &\text{because}~A\cap B = \emptyset \cr + &= \pr{A} + \pr{B}. + \end{aligned} + $$ + \item So $\del{\Omega = \fml{Z}, F = \pset{\Omega}, P}$ is a probability space. {$\blacksquare$} + \end{enumerate} + \end{enumerate} + +\end{frame} +% ================================================================ +\section{Cases \& Examples} +% ================================================================ +\subsection{Programs with disjunctive heads} +% ================================================================ +\begin{frame} + + Consider the program: + $$ + \begin{aligned} + c_1 &= a \lor \neg a, \cr + c_2 &= b \lor c \larr a. + \end{aligned} + $$ + This program has two total choices, + $$ + \begin{aligned} + \theta_1&= \set{ \neg a }, \cr + \theta_2&= \set{ a }. + \end{aligned} + $$ + and three stable models, + $$ + \begin{aligned} + s_1 &= \set{ \neg a }, \cr + s_2 &= \set{ a, b }, \cr + s_3 &= \set{ a, c }. + \end{aligned} + $$ +\end{frame} +% ================================================================ +\begin{frame} + Suppose that we add an annotation $x :: a$, which entails $\co{x} :: \neg a$. This is enough to get $w\at{s_1} = \co{x}$ but, on the absence of further information, no fixed probability can be assigned to either model $s_2, s_3$ except that the respective sum must be $x$. So, expressing our lack of knowledge using a parameter $d \in \intcc{0, 1}$ we get: + $$ + \begin{cases} + w\at{s_1 } = &\co{x}\cr + w\at{s_2 } = &dx\cr + w\at{s_3} = &\co{d}x. + \end{cases} + $$ +\end{frame} +% ================================================================ +\begin{frame} + + In this diagram: + \begin{itemize} + \item Negations are represented as \emph{e.g.} $\co{a}$ instead of $\neg a$; Stable models are denoted by shaded nodes as \tikz{\node[fill=gray!50] {$ab$}}. + + \item Events in $\lset{x}$ are \emph{e.g.} \tikz{\node[ circle] {$a$}} and those in $\uset{x}$ are \emph{e.g.} \tikz{\node[draw] {$\co{a}b$}}. The remaining are simply denoted by \emph{e.g.} \tikz{\node {$a\co{b}$}}. + + \item The edges connect stable models with related events. Up arrow indicate links to $\uset{s}$ and down arrows to $\lset{s}$. + + \item The \emph{weight propagation} sets: + $$ + \begin{aligned} + w\at{abc} &= w\at{ab} w\at{ac} = x^2d\co{d}, \cr + w\at{\co{a}\cdot\cdot} &= w\at{\neg a} = \co{x}, \cr + w\at{a} &= w\at{ab} + w\at{ac} = x(d + \co{d}) = x, \cr + w\at{b} &= w\at{ab} = dx, \cr + w\at{c} &= w\at{ac} = \co{d}x, \cr + w\at{\emptyset} &= w\at{ab} + w\at{ac} + w\at{\neg a} = dx + \co{d}x + \co{x} = 1, \cr + w\at{a\co{b}} &= 0. + \end{aligned} + $$ + \item The total weight is + $$ + \begin{aligned} + Z &= w\at{abc} + 8 w\at{\co{a}b}\cr + &+ w\at{ab} + w\at{ac} + w\at{\co{a}}\cr + &+ w\at{a}+ w\at{b}+ w\at{c}\cr + &+ w\at{\emptyset}\cr + % + &= - x^{2} d^{2} + x^{2} d + 2 x d - 7 x + 10 + \end{aligned} + $$ + \item Now, if $x$ has an annotation to \emph{e.g.} $0.3$ we get + $$ + Z = - 0.09 d^{2} + 0.69 d + 7.9 + $$ + \item Now some statistics are possible. For example we get + $$ + \pr{abc \mid x = 0.3} = \frac{0.09 d \left(d - 1\right)}{0.09 d^{2} - 0.69 d - 7.9} + $$. + + \item This expression can be plotted for $d\in\intcc{0,1}$ + \begin{center} + \includegraphics[height=15em]{Pabc_alpha03.pdf} + \end{center} + + \item If a data set $E$ entails \emph{e.g.} $\pr{abc \mid E} = 0.0015$ we can numerically solve + $$ + \begin{aligned} + \pr{abc \mid x = 0.3} &= \pr{abc \mid E} \cr + \iff\cr + \frac{0.09 d \del{d - 1}}{0.09 d^{2} - 0.69 d - 7.9} &= 0.0015 + \end{aligned} + $$ + which has two solutions, $d \approx 0.15861$ or $d \approx 0.83138$. + \end{itemize} +\end{frame} +% ================================================================ +\subsection{Non-stratified programs} +% ================================================================ +\begin{frame} + The following LP is non-stratified, because has a cycle with negated arcs: + $$ + \begin{aligned} + c_1 &= a\lor \neg a,\cr + c_2 &= b \larr \naf c \land \naf a, \cr + c_3 &= c \larr \naf b. + \end{aligned} + $$ + This program has three stable models + $$ + \begin{aligned} + s_1 &= \set{ a, c }, \cr + s_2 &= \set{ \neg a, b }, \cr + s_3 &= \set{ \neg a, c }. + \end{aligned} + $$ +\end{frame} + +\begin{frame} + The disjunctive clause $a\lor\neg a$ defines a set of \textbf{total choices} + $$ + \Theta = \set{ + \theta_1 = \set{ a }, + \theta_2 = \set{ \neg a } + }. + $$ +\end{frame} +% ================================================================ +\begin{frame} + + Looking into probabilistic events of the program and/or its models, we define $x = \pr{\Theta = \theta_1}\in\intcc{0, 1}$ and $\pr{\Theta = \theta_2} = \co{x}$. + + Since $s_1$ is the only stable model that results from $\Theta = \theta_1$, it is natural to extend $\pr{ s_1 } = \pr{\Theta = \theta_1} = x$. However, there is no clear way to assign $\pr{s_2}, \pr{s_3}$ since \emph{both models result from the single total choice} $\Theta = \theta_2$. Clearly, + $$\pr{s_2 \mid \Theta} + \pr{s_3 \mid \Theta} = + \begin{cases} + 0 & \text{if}~\Theta = \theta_1\cr + 1 & \text{if}~\Theta = \theta_2 + \end{cases} + $$ + but further assumptions are not supported \emph{a priori}. So let's \textbf{parameterize} the equation above, + $$ + \begin{cases} + \pr{s_2 \mid \Theta = \theta_2} = &\beta \in \intcc{0, 1} \cr + \pr{s_3 \mid \Theta = \theta_2} = &\co{\beta}, + \end{cases} + $$ + in order to explicit our knowledge, or lack of, with numeric values and relations. +\end{frame} +% ================================================================ +\begin{frame} + Now we are able to define the \textbf{joint distribution} of the boolean random variables $A,B,C$: + + $$ + \begin{array}{cc|l} + A, B, C& P & \text{Obs.}\cr + \hline + a, \neg b, c & x & s_1, \Theta=\theta_1\cr + \neg a, b, \neg c & \co{x}\beta & s_2, \Theta=\theta_2\cr + \neg a, \neg b, c & \co{x}\co{\beta} & s_3, \Theta=\theta_2\cr + \ast & 0&\text{not stable models} + \end{array} + $$ + where $x, \beta\in\intcc{0,1}$. +\end{frame} +% ================================================================ +\section{Conclusions} +% ================================================================ +\begin{frame} + \begin{itemize} + \item We can use the basics of probability theory and logic programming to assign explicit \emph{parameterized} probabilities to the (stable) models of a program. + \item In the covered cases it was possible to define a (parameterized) \emph{family of joint distributions}. + \item How far this approach can cover all the cases on logic programs is (still) an issue \emph{under investigation}. + \item However, it is non-restrictive since \emph{no unusual assumptions are made}. + \end{itemize} +\end{frame} +% ================================================================ +\section*{ASP \& related definitions} +% ================================================================ +\begin{frame} + + \begin{itemize} + \item An \deft{atom} is $r(t_1, \ldots t_n)$ where + \begin{itemize} + \item $r$ is a $n$-ary predicate symbol and each $t_i$ is a constant or a variable. + \item A \deft{ground atom} has no variables; A \deft{literal} is either an atom $a$ or a negated atom $\neg a$. + \end{itemize} + + \item An \deft{ASP Program} is a set of \deft{rules} such as $h_1 \vee \cdots \vee h_m \leftarrow b_1 \wedge \cdots \wedge b_n$. + \begin{itemize} + \item The \deft{head} of this rule is $h_1 \vee \cdots \vee h_m$, the \deft{body} is $b_1 \wedge \cdots \wedge b_n$ and each $b_i$ is a \deft{subgoal}. + \item Each $h_i$ is a literal, each subgoal $b_j$ is a literal or a literal preceded by $\naf\;$ and $m + n > 0$. + \item A \deft{propositional program} has no variables. + \item A \deft{non-disjunctive rule} has $m \leq 1$; A \deft{normal rule} has $m = 1$; A \deft{constraint} has $m = 0$; A \deft{fact} is a normal rule with $n = 0$. + \end{itemize} + + \item The \deft{Herbrand base} of a program is the set of ground literals that result from combining all the predicates and constants of the program. + \begin{itemize} + \item An \deft{event} is a consistent subset (\emph{i.e.} doesn't contain $\set{a, \neg a}$) of the Herbrand base. + \item Given an event $I$, a ground literal $a$ is \deft{true}, $I \models a$, if $a \in I$; otherwise the literal is \deft{false}. + \item A ground subgoal, $\naf b$, where $b$ is a ground literal, is \deft{true}, $I \models \naf b$, if $b \not\in I$; otherwise, if $b \in I$, it is \deft{false}. + \item A ground rule $r = h_1 \vee \cdots \vee h_m \leftarrow b_1 \wedge \cdots \wedge b_n$ is \deft{satisfied} by the event $I$, \emph{i.e.} $I \models r$, iff + $$ + \forall j \exists i~I \models b_j \implies I \models h_i. + $$ + \item A \deft{model} of a program is an event that satisfies all its rules. Denote $\fml{M}_P$ the set of all models of $P$. + \end{itemize} + + \item The \deft{dependency graph} of a program is a digraph where: + \begin{itemize} + \item Each grounded atom is a node. + \item For each grounded rule there are edges from the atoms in the body to the atoms in the head. + \item A \deft{negative edge} results from an atom with $\naf\;$; Otherwise it is a \deft{positive edge}. + \item An \deft{acyclic program} has an acyclic dependency graph; A \deft{normal program} has only normal rules; A \deft{definite program} is a normal program that doesn't contains $\neg$ neither $\naf\;$. + \item In the dependency graph of a \deft{stratified program} no cycle contains a negative edge. + \item \textbf{A stratified program has a single minimal model} that assigns either true or false to each atom. + \end{itemize} + \item Every \emph{definite program} has a unique minimal model: its \deft{semantic}. + \item Programs with negation may have no unique minimal model. + \item Given a program $P$ and an event $I$, their \deft{reduct}, $P^I$, is the propositional program that results from + \begin{enumerate} + \item Removing all the rules with $\naf b$ in the body where $b \in I$. + \item Removing all the $\naf b$ subgoals from the remaining rules. + \end{enumerate} + \item A \deft{stable model} (or \deft{answer set}) of the program $P$ is an event $I$ that is the minimal model of the reduct $P^I$. + \item Denote $\fml{S}_P$ the set of all stable models of program $P$. The \deft{semantics} (or \deft{answer sets}) of a program $P$ is the set $\fml{S}_P$. + \begin{itemize} + \item Some programs, such as $a \leftarrow \naf a$, have no stable models. + \item A stable model is an event closed under the rules of the program. + \end{itemize} + \end{itemize} +\end{frame} +% ================================================================ +\end{document} \ No newline at end of file diff --git a/text/backup/zz_old/00_PROB.pdf b/text/backup/zz_old/00_PROB.pdf new file mode 100644 index 0000000..c4e3126 Binary files /dev/null and b/text/backup/zz_old/00_PROB.pdf differ diff --git a/text/backup/zz_old/Empty File b/text/backup/zz_old/Empty File new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/text/backup/zz_old/Empty File diff --git a/text/backup/zz_old/Pabc_alpha03.pdf b/text/backup/zz_old/Pabc_alpha03.pdf new file mode 100644 index 0000000..e80e2ea Binary files /dev/null and b/text/backup/zz_old/Pabc_alpha03.pdf differ diff --git a/text/backup/zz_old/README.md b/text/backup/zz_old/README.md new file mode 100644 index 0000000..86c88ba --- /dev/null +++ b/text/backup/zz_old/README.md @@ -0,0 +1,67 @@ +# Probabilistic ILP + +**Check** Conformal prediction. + +> Fonte: [Turning 30: New Ideas in Inductive Logic Programming](https://arxiv.org/abs/2002.11002) + +## Introduction + +- How pILP relates to: + - ILP? + - ASP? + - RML? +- What + - tools? + - methods? + - theory? + - Distributed semantics + - applications? + +### Overview of Bibliography and State of the Art + +Recursion; Predicate Invention; Higher order, ASP Hypotheses; Optimality; Prolog, ASP, NNs + +## Context + +### Kanren + +### Inductive Logic Programming + +### Answer Set Programming + +### Relational Machine Learning + +### SAT Solvers + +## Tools + +- [(mini)kanren](http://minikanren.org/) + - in Julia: [MuKanren](https://github.com/latticetower/MuKanren.jl), [YA microkanren in Julia](https://www.philipzucker.com/yet-another-microkanren-in-julia/)!. +- [metagol | archive](https://github.com/metagol/metagol) _superseeded by **popper**._ +- ILP: [popper](https://github.com/logic-and-learning-lab/Popper) +- ASP: [ILASP](https://github.com/ilaspltd/ILASP-releases) +- [Inspire | Kazmi et al. 2017]() +- ASP: [Potassco: clingo, clasp, ...](https://potassco.org/) +- [cplint (on SWISH)](http://cplint.ml.unife.it/) + - exact probabilistic inference (PITA) + - Fabrizio Riguzzi and Terrance Swift. Well-definedness and efficient inference for probabilistic logic programming under the distribution semantics. Theory and Practice of Logic Programming, 13(Special Issue 02 - 25th Annual GULP Conference):279-302, © Cambridge University Press, March 2013. + - Monte Carlo inference (MCINTYRE) + - Fabrizio Riguzzi. MCINTYRE: A Monte Carlo system for probabilistic logic programming. Fundamenta Informaticae, 124(4):521-541, © IOS Press, 2013. + - Metropolis/Hastings sampling + - Arun Nampally and C. R. Ramakrishnan. Adaptive MCMC-Based Inference in Probabilistic Logic Programs. arXiv preprint arXiv:1403.6036, 2014. + - parameter learning (EMBLEM) + - Elena Bellodi and Fabrizio Riguzzi. Expectation Maximization over binary decision diagrams for probabilistic logic programs. Intelligent Data Analysis, 17(2):343-363, © IOS Press, 2013. + - SLIPCOVER algorithm for structure learning + - Elena Bellodi and Fabrizio Riguzzi. Structure learning of probabilistic logic programs by searching the clause space. Theory and Practice of Logic Programming, 15(2):169-212, © Cambridge University Press, 2015. + - LEMUR algorithm for structure learning + - Nicola Di Mauro, Elena Bellodi, and Fabrizio Riguzzi. Bandit-based Monte-Carlo structure learning of probabilistic logic programs. Machine Learning, 100(1):127-156, © Springer International Publishing, July 2015. + +## Methods + +## Theory + +### Distributed Semantics + +## Applications + +### ELearning diff --git a/text/backup/zz_old/README.pdf b/text/backup/zz_old/README.pdf new file mode 100644 index 0000000..24279f1 Binary files /dev/null and b/text/backup/zz_old/README.pdf differ diff --git a/text/backup/zz_old/SCASP-best-practices.pdf b/text/backup/zz_old/SCASP-best-practices.pdf new file mode 100644 index 0000000..ea0feef Binary files /dev/null and b/text/backup/zz_old/SCASP-best-practices.pdf differ diff --git a/text/backup/zz_old/State of the art.txt b/text/backup/zz_old/State of the art.txt new file mode 100644 index 0000000..fe11e38 --- /dev/null +++ b/text/backup/zz_old/State of the art.txt @@ -0,0 +1,42 @@ +https://ceur-ws.org/Vol-3204/paper_9.pdf (Damiano Azzolini, Elena Bellodi and Fabrizio Riguzzi) + + Abduction in ASP an PASP + +https://link.springer.com/article/10.1007/s10489-022-03669-z (Serge Sonfack Sounchio, Laurent Geneste & Bernard Kamsu Foguem) + + evaluate ASP models’ beliefs using experts’ evidence distributions, while reducing the knowledge-intensive load of the expertise process + + +https://hal-emse.ccsd.cnrs.fr/emse-03261182/file/actes_IC_CH_PFIA2021.pdf#page=99 (S. SONFACK SOUNCHIO, L. GENESTE, B. KAMSU FOGUE) + + Hybridation of ASP + + +https://link.springer.com/chapter/10.1007/978-3-031-15707-3_4 (Damiano Azzolini, Elena Bellodi & Fabrizio Riguzzi) + + + “Probabilistic Answer set programming for STAtistical probabilities” + + +https://content.iospress.com/articles/fundamenta-informaticae/fi1975 ( Tarzariol, Alice; Zanazzo, Eugenia; Dovier, Agostino; Policriti, Alberto) + + Use ASP to develop a tool-chain capable of analyzing a data collection of temporally qualified (genetic) mutation profile + + +https://link.springer.com/chapter/10.1007/978-3-030-97454-1_4 (Leopoldo Bertossi & Gabriela Reyes) + + how answer-set programs can be used to declaratively specify counterfactual interventions on entities under classification, and reason about them. + + +https://www.sciencedirect.com/science/article/pii/S0888613X20302012?casa_token=9T4mnIP5OR4AAAAA:_39BvC91LBUO2wPyHMozq1iUdrmqHF7rwk15uXieLGQbd53Ddr-BNZtYGK7JD9wR3VDt7ZKnIw + +(Fabio Gagliardi Cozman, Denis Deratani Mauá) + + + inference algorithm to compute (upper) probabilities given a program. (PASP) + + +https://link.springer.com/chapter/10.1007/978-3-030-99461-7_12 (Germán Vidal) + + + Explanations as Programs in Probabilistic Logic Programming \ No newline at end of file diff --git a/text/backup/zz_old/drafts.pdf b/text/backup/zz_old/drafts.pdf new file mode 100644 index 0000000..325b288 Binary files /dev/null and b/text/backup/zz_old/drafts.pdf differ diff --git a/text/backup/zz_old/drafts.tex b/text/backup/zz_old/drafts.tex new file mode 100644 index 0000000..bcdaf5d --- /dev/null +++ b/text/backup/zz_old/drafts.tex @@ -0,0 +1,83 @@ +\documentclass{standalone} + +\usepackage[x11colors]{xcolor} +% +\usepackage{tikz} +\tikzset{ + event/.style={}, + smodel/.style={fill=gray!25}, + tchoice/.style={draw, circle}, + indep/.style={draw, dashed}, + proptc/.style = {-latex, dashed}, + propsm/.style = {-latex, thick}, + doubt/.style = {gray} +} +\usetikzlibrary{calc, positioning} +% +\usepackage{hyperref} +\hypersetup{ + colorlinks=true, + linkcolor=blue, +} + + +\usepackage{commath} + + +% +% Local commands +% +\newcommand{\note}[1]{\marginpar{\scriptsize #1}} +\newcommand{\naf}{\ensuremath{\sim\!}} +\newcommand{\larr}{\ensuremath{\leftarrow}} +\newcommand{\at}[1]{\ensuremath{\!\del{#1}}} +\newcommand{\co}[1]{\ensuremath{\overline{#1}}} +\newcommand{\fml}[1]{\ensuremath{{\cal #1}}} +\newcommand{\deft}[1]{\textbf{#1}} +\newcommand{\pset}[1]{\ensuremath{\mathbb{P}\at{#1}}} +\newcommand{\ent}{\ensuremath{\lhd}} +\newcommand{\cset}[2]{\ensuremath{\set{#1,~#2}}} +\newcommand{\langof}[1]{\ensuremath{\fml{L}\at{#1}}} +\newcommand{\uset}[1]{\ensuremath{\left|{#1}\right>}} +\newcommand{\lset}[1]{\ensuremath{\left<{#1}\right|}} +\newcommand{\pr}[1]{\ensuremath{\mathrm{P}\at{#1}}} +\newcommand{\given}{\ensuremath{~\middle|~}} + +\begin{document} +\begin{tikzpicture} + \node[event] (E) {$\bot$}; + \node[tchoice, above left = of E] (a) {$a$}; + \node[smodel, above left = of a] (ab) {$ab$}; + \node[smodel, above right = of a] (ac) {$ac$}; + \node[event, below = of ab] (b) {$b$}; + \node[event, below = of ac] (c) {$c$}; + \node[event, above right = of ab] (abc) {$abc$}; + \node[indep, right = of ac] (bc) {$bc$}; + \node[tchoice, smodel, below right = of bc] (A) {$\co{a}$}; + \node[event, above = of A] (Ac) {$\co{a}c$}; + \node[event, above right = of Ac] (Abc) {$\co{a}bc$}; + % ---- + \draw[proptc] (a) to[bend left] (ab); + \draw[proptc] (a) to[bend right] (ac); + + \draw[propsm] (ab) to[bend left] (abc); + \draw[propsm] (ac) to[bend right] (abc); + + \draw[propsm] (A) to[bend right] (Ac); + \draw[propsm] (A) to[bend right] (Abc); + + \draw[doubt] (ab) to[bend right] (E); + \draw[doubt] (ac) to[bend right] (E); + \draw[doubt] (A) to[bend left] (E); + + \draw[doubt] (ab) to[bend right] (b); + \draw[doubt] (ac) to[bend left] (c); + \draw[doubt] (ab) to[bend left] (a); + \draw[doubt] (ac) to[bend right] (a); + \draw[doubt] (c) to[bend right] (bc); + \draw[doubt] (abc) to[bend left] (bc); + \draw[doubt] (Abc) to (bc); + \draw[doubt] (c) to[bend right] (Ac); +\end{tikzpicture} + +\end{document} \ No newline at end of file diff --git a/text/backup/zz_old/meetings.pdf b/text/backup/zz_old/meetings.pdf new file mode 100644 index 0000000..eae0221 Binary files /dev/null and b/text/backup/zz_old/meetings.pdf differ diff --git a/text/backup/zz_old/probast_draft/probast_draf.pdf b/text/backup/zz_old/probast_draft/probast_draf.pdf new file mode 100644 index 0000000..59fdd2a Binary files /dev/null and b/text/backup/zz_old/probast_draft/probast_draf.pdf differ diff --git a/text/backup/zz_old/probast_draft/probast_draf.tex b/text/backup/zz_old/probast_draft/probast_draf.tex new file mode 100644 index 0000000..a15f2d2 --- /dev/null +++ b/text/backup/zz_old/probast_draft/probast_draf.tex @@ -0,0 +1,434 @@ +\documentclass[bigger]{beamer} +\useinnertheme{circles} +\usefonttheme[onlymath]{serif} +\usefonttheme{structurebold} +\setbeamertemplate{navigation symbols}{} +\usepackage{xcolor} +\setbeamercolor{highlight block}{bg=gray} + +\usepackage{tikz} +\usetikzlibrary{ + automata,% + positioning,% + calc,% + decorations,% + decorations.pathmorphing% +} +\usepackage{tkz-graph} +\newcommand{\qlr}[2]{\ensuremath{\begin{matrix}#1\cr\begin{aligned}\hline #2\end{aligned}\end{matrix}}} +\newcommand{\q}[1]{\mathbf{#1}} +\newcommand{\isep}{~,~} + +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[normalem]{ulem} % To strikeout +\usepackage{commath} + +\newcommand{\naf}{\ensuremath{\sim\!\!}} + +\title{Probabilistic Answer Set Programming} +\subtitle{A Research Draft} +\author{Francisco Coelho} +\institute[\texttt{fc@uevora.pt}]{ + NOVA LINCS \&\\ + High Performance Computing Chair \&\\ + Departamento de Informática, Universidade de Évora +} + +\begin{document} + \begin{frame}[plain] + \titlepage + \end{frame} + + \section*{Motivation} + + \begin{frame} + \frametitle{In short} + + \begin{itemize} + \item Use \textbf{logic programs} to formalize knowledge. + \begin{itemize} + \item logic program = formula = model. + \item \textbf{Observations} not always agree with such models --- errors may result from sensors or from a wrong or incomplete model. + \end{itemize} + \item We can associate \textbf{quantities} to formulas and sub-formulas. + \begin{itemize} + \item And define how observations \textbf{update} those quantities. + \end{itemize} + \item Adequate quantities and updates might be used to \textbf{interpret or evaluate the model} \emph{e.g.} define a joint distribution or measure the accuracy of a clause. + \end{itemize} + \end{frame} + + % \begin{frame} + % \frametitle{Plan} + % \begin{itemize} + % \item Use \textbf{answer set programs} as a logic programming language. + % \item Define the effect of an \textbf{observation} on quantities associated to clauses and their parts. + % \item Later, use those numbers to define \textbf{probabilistic interpretations} or \textbf{performance quantities} of a formula, clauses and atoms. + % \end{itemize} + % \end{frame} + + \section{Development} + + \begin{frame} + \tableofcontents[currentsection] + \end{frame} + + % \begin{frame} + % \frametitle{The seed on an idea} + % We want to define the \textbf{joint distribution} of the stable models. + % \begin{enumerate} + % \item A \textbf{boolean random variable} can be described by a disjunction $a; \neg a$. + % \item This ASP program has two stable models: $a$ and $\neg a$. + % \item A program with $n$ such facts $a_i; \neg a_i$ has $2^n$ stable models, the distinct combinations of those choices. + % \item \textbf{If each $a_i$ has probability $p_i$ then the probability of a stable model $W$ would be} $$P(W) = \prod_{a_i \in W}p_i \prod_{\neg a_i \in W} (1 - p_i).$$ + % \end{enumerate} + % \pause + % \begin{alertblock}{But this is wrong.} + % Even assuming that those facts are marginally independent --- which we will do. + % \end{alertblock} + % \end{frame} + + \begin{frame}{Problem 1: Probabilities} + The stable models of $c_1 \wedge c_2$ where + $$ + \begin{aligned} + c_1 &: b \vee \neg b\\ + c_2 &: h_1 \vee h_2 &\leftarrow b + \end{aligned} + $$ + are $$\set{\neg b}, \set{b, h_1}~\text{and}~\set{b, h_2}.$$ + + \begin{block}{Associate quantities to clauses and update them with observations.} + \onslide*<1>{ + Then compute: + \begin{itemize} + \item The probability of a stable model. + \item The probability of an atom. + \item The joint distribution of all atoms. + \end{itemize} + } + \onslide*<2>{ + \begin{itemize} + \item How to \textbf{match} an observation $z$ with a clause case $h_i,b$? + \item How do observations \textbf{update} the probabilities? + \item Is this enough to compute the \textbf{joint distribution of the atoms}? + \end{itemize} + } + \end{block} + \end{frame} + + \begin{frame} + \frametitle{Matching observations and sub-formulas} + + \begin{itemize} + \item An \alert{observation} is a subset of the literals\footnote{The set of atoms, $a$, of the program and their classic negations, $\neg a$.} from a program. + \item A \alert{consistent} observation has no subset $\set{p, \neg p}$. + \item A \emph{consistent} observation $z$ is \alert{relevant} for the clause $h \leftarrow b$ if $b \subseteq z$. + \item A disjunctive clause $$h_1 \vee \cdots \vee h_n \leftarrow b_1 \wedge \cdots \wedge b_m$$ has $n$ \alert{cases}: $\set{h_i, b_1, \ldots, b_m}, i = 1:n$. + \item The \emph{consistent} observation $z$ and the case $\set{h, b_{1:n}}$ \alert{match} if + $\set{h, b_{1:n}} \subseteq z$. + \end{itemize} + The above definitions apply to \textbf{facts}, $m=0$, and \textbf{constraints}, $n=0$. + \end{frame} + + \begin{frame} + \frametitle{Counters and updates} + A consistent observation \textbf{relevant} for a clause $h_1 \vee \cdots \vee h_n \leftarrow b$ should \textbf{increase the probability of matched cases}. + \begin{block}{Counters and updates} + \onslide*<1>{ + \begin{enumerate} + \item Associate \textbf{counters}, $u, r, n$, to clauses $h \leftarrow b$. + \item Associate a \textbf{counter}, $m_i$, to cases $h_i, b$. + \item \textbf{Initial} values result from \emph{prior} knowledge. + \item Each \emph{consistent} observation \textbf{increments}: + \begin{itemize} + \item The $u$ counters of relevant \alert{u}nmatched clauses (no matched cases). + \item The $r$ counters of \alert{r}elevant clauses. + \item The $n$ counters of \alert{n}ot relevant clauses. + \item The $m_i$ counters of \alert{m}atched cases $h_i, b$. + \item Clause counters must verify $r \leq u + \sum_i m_i$. + \end{itemize} + \end{enumerate} + } + \onslide*<2>{ + \begin{itemize} + \item Literals must be explicitly observed: $\neg b \not= \naf b$. + \item Counters relate a clause structure with observations. + \item So far stable models had no role. + \end{itemize} + } + \end{block} + \end{frame} + + \begin{frame} + \frametitle{Counters and updates: An example} + Given the following clauses with \alert{annotated counters}, + $$ + \begin{aligned} + %&H \leftarrow B&&\text{counters:}~ m_{1:n} ; u, r, n \\ + &b \vee \neg b &&\text{counters:}~ 7, 2 ; 3, 12, 0 \\ + &h_1 \vee h_2 \leftarrow b &&\text{counters:}~ 4, 3 ; 2, 6, 5 + \end{aligned} + $$ + \onslide*<2>{ + \begin{columns}[t] + \begin{column}{0.5\textwidth} + \begin{block}{Counters of $b \vee \neg b$}\small + $0$ observations where not relevant (because the body is $\top$); + + There where $12$ relevant observations; + + Of those, $b$ was matched by $7$, $\neg b$ by $2$ and $3$ observations matched neither ($\models\naf b, \naf \neg b$). + \end{block} + \end{column} + \begin{column}{0.5\textwidth} + \begin{block}{Counters of $h_1 \vee h_2 \leftarrow b$}\small + There where $11 = 6 + 5$ observations, $6$ relevant to this clause; + + From these, $4$ matched $h_1$, $3$ matched $h_2$ and $2$ matched no case. + \end{block} + \end{column} + \end{columns} + } + \onslide*<3>{ + \begin{block}{What can be computed?} + \begin{itemize} + \item $P(\neg b) = \frac{2}{12}$ because $\neg b$ matched $2$ of $12$ relevant observations. + \item $P(h_1 | b) = \frac{4}{6}$ because $h_1, b$ matched $4$ of $6$ relevant observations. + \item \alert{$P(b)$ needs further information}. + \begin{itemize} + \item \emph{E.g.} \textbf{assuming independent observations}, + $$P(b) = \frac{7 + 6}{12 + 0 + 6 + 5}.$$ + \end{itemize} + \end{itemize} + \end{block}} + \onslide*<4>{ + \begin{block}{What can be computed? --- assuming independent observations} + \begin{itemize} + \item $P(b) + P(\neg b) = \frac{13}{23} + \frac{2}{12} \approx 0.73 < 1$ because some observations have neither $b$ nor $\neg b$. + \item $P(h_1, b) = P(h_1 | b) P(b) = \frac{4}{6}\frac{13}{23}$ from above. + \item $P(h_2, b) = P(h_2 | b) P(b)$ is analogous. + \item \alert{But not \emph{e.g.} $P(h_1 | \neg b)$} because no clause relates $h_1$ and $\neg b$. + \end{itemize} + \end{block}} + \onslide*<5->{ + \begin{block}{Also\ldots} + \onslide*<5>{Counters are local to clauses and, for distinct clauses, may result from distinct sources. \emph{E.g. the relevant counter of $h_1 \vee h_2 \leftarrow b$ and the match counter of $b$ in $b \vee \neg b$.}} + \onslide*<6>{Some observations may have neither $b$ nor $\neg b$ so: $$P(b) + P(\neg b) < 1.$$} + \onslide*<7>{Assuming independent observations, since $h_1$ and $h_2$ are not independent, $$\sum_m P(m) > 1.$$} + \onslide*<8>{What's missing to define the \alert{joint distribution} $$P(H_1, H_2, B)?$$} + \end{block} + } + \onslide*<8->{ + \begin{block}{The joint distribution, according to the clauses} + \begin{tikzpicture}[node distance=35mm, ->, >=stealth, state/.style={draw, rounded corners}]\small + \node (B) [state] {\qlr{B}{ + b && \neg b && \naf b \cr + \bullet && \bullet && \cdot + }}; + \node (H1) [state, left of=B] { + \qlr{H_1}{ + ~ && h_1 && \neg h_1 && \naf h_1 \cr + b && \bullet && \circ && \circ \cr + \neg b && \circ && \circ && \circ \cr + \naf b && \circ && \circ && \circ + } + }; + \node (H2) [state, right of=B] { + \qlr{H_2}{ + ~ && h_2 && \neg h_2 && \naf h_2 \cr + b && \bullet && \circ && \circ \cr + \neg b && \circ && \circ && \circ \cr + \naf b && \circ && \circ && \circ + } + }; + \path + (B) edge (H1) + (B) edge (H2) + ; + \end{tikzpicture} + \end{block} + } + \end{frame} + + \begin{frame} + \frametitle{Shortcomming 2: Default Negation} + + \begin{itemize} + \item How to deal with rules with $\naf a$ parts? + \item Should missing elements on observations be replaced with $\naf a$ atoms? + \end{itemize} + \end{frame} + \section{Conclusions} + + \begin{frame} + \tableofcontents[currentsection] + \end{frame} + + \section*{Background Material} + + \begin{frame} + \Huge Background Material + \end{frame} + + \begin{frame}{Machine Learning} + Models are numeric functions: $y \approx f_\theta(x),~\theta_i, x_j, y\in\mathbf{R}$. + \begin{itemize} + \item Amazing achievements. + \item Noise tolerant. + \item (as of today) Huge enterprise funding . + \end{itemize} + but + \begin{itemize} + \item (essentially) Academically solved. + \item Models trained from ``large'' amounts of samples. + \item Hard to add background knowledge. + \item Models are hard to interpret. + \item Single table, independent rows assumption. + \end{itemize} + \end{frame} + + \begin{frame}{Inductive Logic Programming} + Models are logic program: $p_\theta(x, y),~\theta_i, x_j, y\in{\cal A}$. + \begin{itemize} + \item Amazing achievements, at scale. + \item Models trained from ``small'' amounts of samples. + \item Compact, readable models. + \item Background knowledge is easy to incorporate and edit. + \end{itemize} + but + \begin{itemize} + \item as of today, Little enterprise commitment. + \item as of today, Mostly academic interest. + \item Noise sensitive. + \end{itemize} + \end{frame} + + \begin{frame}{Distribution Semantics} + Assigns probability to (marginally independent) facts and derives probability of ground propositions. + + Let $F$ be set of facts, $S\subseteq F$, $R$ a set of definite clauses and $p$ a proposition: + $$\small + \begin{aligned} + P_F(S) &= \prod_{f \in S} P(f) \prod_{f \not\in S} \left(1 - P(f) \right) \cr + P(W) &= \sum_{S \subseteq F :~W=M(S\cup R)} P_F(S) \cr + P(p) &= \sum_{S :~ S\cup R ~\vdash~ p} P_F(S) = \sum_{W :~ p\in W} P(W) + \end{aligned} + $$ + \begin{itemize} + \item Amazing achievements, at scale. + \item Lots of tools and research. + \item The best of both ``worlds''? + \end{itemize} + + \end{frame} + + \begin{frame}{Answer Set Programming} + A program defines stable models. + \begin{itemize} + \item Pure declarative language, unlike Prolog. + \item Uses \emph{generate \& test} methods instead of proofs. + \item Uses both default $\sim\!p$ and classical negation $\neg p$. + \item Clauses can be disjunctive $a \vee b \leftarrow c \wedge d$. + \end{itemize} + \end{frame} + + \begin{frame}{ASP definitions} + \begin{itemize} + \item An \textbf{atom} is $r(t_1, \ldots t_n)$ where + \begin{itemize} + \item $r$ is a $n$-ary predicate symbol. + \item each $t_i$ is a constant or a variable. + \end{itemize} + \item A \textbf{ground atom} has no variables. + \item A \textbf{literal} is either an atom $a$ or a negated atom $\neg a$. + \item An \textbf{ASP Program} is a set of \textbf{rules} such as $h_1 \vee \cdots \vee h_m \leftarrow b_1 \wedge \cdots \wedge b_n$ where + \begin{itemize} + \item Each $h_i$ is a literal, $a$ or $\neg a$. + \item Each $b_j$ is a literal like above or preceded by $\naf~$. + \item $m + n > 0$. + \end{itemize} + \item The \textbf{head} of such rule is $h_1 \vee \cdots \vee h_m$. + \item The \textbf{body} of such rule is $b_1 \wedge \cdots \wedge b_n$. + \item Each $b_i$ is a \textbf{subgoal}. + \end{itemize} + \end{frame} + + \begin{frame}{ASP definitions \hfill(cont.)} + \begin{itemize}\setcounter{enumi}{7} + \item A \textbf{non-disjunctive rule} has $m \leq 1$. + \item A \textbf{normal rule} has $m = 1$. + \item A \textbf{constraint} has $m = 0$. + \item A \textbf{fact} is a normal rule with $n = 0$. + \item The \textbf{dependency graph} of a program is a digraph where: + \begin{itemize} + \item Each grounded atom is a node. + \item For each grounded rule there are edges from the atoms in the body to the atoms in the head. + \end{itemize} + \item A \textbf{negative edge} results from an atom with $\naf~$; Otherwise it is a \textbf{positive edge}. + \item An \textbf{acyclic program} has an acyclic dependency graph. + \end{itemize} + \end{frame} + + \begin{frame}{ASP definitions \hfill(cont.)} + \begin{itemize}\setcounter{enumi}{14} + \item A \textbf{normal program} has only normal rules. + \item A \textbf{definite program} is a normal program that doesn't contains $\neg$ neither $\naf~$. + \item In the dependency graph of a \textbf{stratified program} no cycle contains a negative edge. + \begin{itemize} + \item A stratified program has a single minimal model that assigns either true or false to each atom. + \end{itemize} + \item A \textbf{propositional program} has no variables. + \end{itemize} + \end{frame} + + \begin{frame}{ASP definitions \hfill(cont.)} + \begin{itemize}\setcounter{enumi}{18} + \item The \textbf{Herbrand base} of a program is the set of ground literals that result from combining all the predicates and constants of the program. + \item An \textbf{interpretation} is a consistent subset (\emph{i.e.} doesn't contain $\set{a, \neg a}$) of the Herbrand base. + \item A ground literal is \textbf{true}, $I \models a$, if $a \in I$; otherwise the literal is \textbf{false}. + \item A ground subgoal, $\naf b$, where $b$ is a ground literal, is \textbf{true}, $I \models \naf b$, if $b \not\in I$; otherwise, if $b \in I$, it is \textbf{false}. + \item A ground rule $r = h_1 \vee \cdots \vee h_m \leftarrow b_1 \wedge \cdots \wedge b_n$ is \textbf{satisfied} by the interpretation $I$, \emph{i.e.} $I \models r$, iff + \begin{itemize} + \item $I \not\models b_j$ for some $j$ or $I \models h_i$ for some $i$, + \end{itemize} + \item A \textbf{model} of a program is an interpretation that satisfies all the rules. + \end{itemize} + \end{frame} + + \begin{frame}{Stable Semantics} + \begin{itemize} + \item Every definite program has a unique minimal model; its \emph{semantics}. + \item Programs with negation may have no unique minimal model. + \item Given a program $P$ and an interpretation $I$, their \textbf{reduct}, $P^I$ is the propositional program that results from + \begin{enumerate} + \item Removing all the rules with $\naf b$ in the body where $b \in I$. + \item Removing all the $\naf b$ subgoals from the remaining rules. + \end{enumerate} + \item A \textbf{stable model} of the program $P$ is an interpretation $I$ that is the minimal model of the reduct $P^I$. + \item The \textbf{semantics} (the \textbf{answer sets}) of a program is the set of stable models of that program. + \end{itemize} + \end{frame} + + \begin{frame}{Stable Semantics} + \begin{itemize} + \item A program such as $a \leftarrow \naf a$ may have no stable models. + \item A stable model is a closed interpretation (under the rules of program). + \end{itemize} + \end{frame} + + \subsection*{Stable Sets} + + \begin{frame} + \tableofcontents[currentsection] + \end{frame} + + \subsection*{References} + + \begin{frame} + \tableofcontents[currentsection] + \end{frame} +\end{document} + + diff --git a/text/backup/zz_old/proposal/Objectivos .md b/text/backup/zz_old/proposal/Objectivos .md new file mode 100644 index 0000000..141fa29 --- /dev/null +++ b/text/backup/zz_old/proposal/Objectivos .md @@ -0,0 +1 @@ +O nosso objetivo é o desenvolvimento de um conjunto de ferramentas informáticas para aplicar e avaliar os resultados teóricos a problemas relevantes e bem conhecidos. O alvo inicial é a suite de referência Potassco, que suporta a linguagem ASP-Core-2 e proporciona uma API Python para os programas de grounding (CLASP) e resolução (CLINGO). \ No newline at end of file diff --git a/text/backup/zz_old/proposal/proposal.md b/text/backup/zz_old/proposal/proposal.md new file mode 100644 index 0000000..7f94fb9 --- /dev/null +++ b/text/backup/zz_old/proposal/proposal.md @@ -0,0 +1,49 @@ +# Zugzwang, Stochastic Adventures in Inductive Logic Specifications + +**Abstract.** A major limitation of logical representations is the implicit assumption that the Background Knowledge (BK) is perfect. This assumption is problematic if data is noisy, which is often the case. Here we aim to explore how ASP specifications with probabilistic facts can lead to characterizations of the joint distribution of the specification's atoms. + +**Sumário** Uma limitação importante das representações lógicas é a suposição implícita de que o _Background Knowledge_ é perfeito. Este é um princípio problemática se os dados tiverem ruído, o que costuma ser o caso. Aqui pretendemos explorar como uma especificação ASP com factos probabilísticos pode levar a uma caracterização da distribuição conjunta dos átomos da especificação. + +## Introduction and Motivation + +Answer Set Programming (ASP) is a logic programming paradigm based on the Stable Model semantics of Normal Logic Programs (NP) that can be implemented using the latest advances in SAT solving technology. ASP is a truly declarative language that supports language constructs such as disjunction in the head of a clause, choice rules, and hard and weak constraints. + +The Distribution Semantics (DS) is a key approach to extend logical representations with probabilistic reasoning. Probabilistic Facts (PF) are the most basic stochastic DS primitive and they take the form of logical facts labelled with a probability $p$; Each probabilistic fact represents a boolean random variable that is true with probability $p$ and false with probability $1 − p$. + +Crucially, a joint distribution of atoms derived from an ASP specification can be used to _quantitatively measure the performance of that specification_ given data observed from the system it is intended to describe. Then, given competing specifications to describe a certain system, these performance measures can be applied in various optimization techniques in order to obtain one that best describes the target system. + +The following example illustrates a critical problem with stochastic semantics of ASP specifications. The specification +```prolog +a::0.3. +b ; c :- a. +``` +has three stable models, `{-a}, {a, b}` and `{a, c}`. While it is quite natural to set `P(-a)=0.7`, there is no further information to assign values to `P(a,b)` and `P(a,c)`. At best, we can use a parameter $\alpha$ such that +$$ +\begin{aligned} +P(a,b) &= 0.3 \alpha,\cr +P(a,c) &= 0.3 (1 - \alpha). +\end{aligned} +$$ + +In summary, if an ASP specification is intended to describe some system and that system can be observed then: + +1. The observations can be used to estimate the value of the parameters (such as $\alpha$ above and others entailed from the laws of probability). +2. Once probabilities are set for each stable model, we can proceed to define a joint distribution of the atoms. +3. If that specification is only one of many possible candidates then the joint distributions together with the observations can be used to score and sort the specifications. + +## Work Plan + +A team of two **(or three?)** researchers and a graduate student, working over six months with adequate resources, should be able to produce an intermediate progress report for a workshop and a final comprehensive paper for a conference, describing: + +- The formalization of the methods outlined above including the parameter estimation from observations and the joint distribution extending the probabilities of the stable models. +- Application and evaluation of this approach to well-known problems, using available software tools, such as + - Problems: **Assim, de momento, não me lembro de nenhum!** + - Software tools: [`s(casp)`](https://ciao-lang.org/playground/scasp.html), [Potassco suit](https://potassco.org/), _etc._ + +## References + +1. Victor Verreet, Vincent Derkinderen, Pedro Zuidberg Dos Martires, Luc De Raedt, Inference and Learning with Model Uncertainty in Probabilistic Logic Programs (2022) +2. Andrew Cropper, Sebastijan Dumancic, Richard Evans, Stephen H. Muggleton, Inductive logic programming at 30 (2021) +3. Fabio Gagliardi Cozman, Denis Deratani Mauá, The joy of Probabilistic Answer Set Programming: Semantics - complexity, expressivity, inference (2020) +4. Fabrizio Riguzzi, Foundations of Probabilistic Logic Programming Languages, Semantics, Inference and Learning. Rivers Publishers (2018) +6. Martin Gebser, Roland Kaminski, Benjamin Kaufmann, and Torsten Schaub, Answer Set Solving in Practice, Morgan & Claypool Publishers (2013) diff --git a/text/backup/zz_old/proposal/proposal.pdf b/text/backup/zz_old/proposal/proposal.pdf new file mode 100644 index 0000000..49b14ed Binary files /dev/null and b/text/backup/zz_old/proposal/proposal.pdf differ diff --git a/text/backup/zz_old/proposal/proposal.tex b/text/backup/zz_old/proposal/proposal.tex new file mode 100644 index 0000000..c296897 --- /dev/null +++ b/text/backup/zz_old/proposal/proposal.tex @@ -0,0 +1,111 @@ +\documentclass[a4paper]{article} + + +\usepackage[ + bibstyle=numeric, + citestyle=numeric +]{biblatex} %Imports biblatex package +\addbibresource{zugzwang.bib} %Import the bibliography file + +\usepackage{commath} +\usepackage{hyperref} +\hypersetup{ + colorlinks=true, + citecolor=blue, + linkcolor=blue, +} + +\title{Zugzwang\\\textit{Logic and Artificial Intelligence}} +\author{ + \begin{tabular}{cc} + Francisco Coelho & Bruno Dinis\\ + \texttt{fc@uevora.pt} & \texttt{bruno.dinis@uevora.pt} + \end{tabular} +} + +\begin{document} + +\maketitle + +\nocite{*} + +\begin{abstract} + A major limitation of logical representations is the implicit assumption that the Background Knowledge (BK) is perfect. This assumption is problematic if data is noisy, which is often the case. Here we aim to explore how ASP specifications with probabilistic facts can lead to characterizations of probability functions on the specification's domain. +\end{abstract} + +\section{Introduction and Motivation } + +Answer Set Programming (ASP) \cite{gebser2012answer} is a logic programming paradigm based on the Stable Model semantics of Normal Logic Programs (NP) that can be implemented using the latest advances in SAT solving technology. ASP is a truly declarative language that supports language constructs such as disjunction in the head of a clause, choice rules, and hard and weak constraints. + +The Distribution Semantics (DS) \cite{riguzzi2022foundations} is a key approach to extend logical representations with probabilistic reasoning. Probabilistic Facts (PF) \cite{riguzzi2022foundations} are the most basic stochastic DS primitive and they take the form of logical facts, $a$, labelled with a probability, such as $p::a$; Each probabilistic fact represents a boolean random variable that is true with probability $p$ and false with probability $1 - p$. A (consistent) combination of the PFs defines a \textit{total choice} $\theta = \set{p::a, \ldots}$ such that + +\begin{equation} + P(\theta) = \prod_{a\in\theta} p \prod_{a \not\in \theta} (1- p). +\end{equation} + +Our goal is to extend this probability, from total choices, to cover the specification domain. We can foresee two key applications of this extended probability: + +\begin{enumerate} + \item Support any probabilistic reasoning/task on the specification domain. + \item Also, given a dataset and a divergence measure, now the specification can be scored (by the divergence w.r.t. the \emph{empiric} distribution of the dataset), and sorted amongst other specifications. This is a key ingredient in algorithms searching, for example, an \textit{optimal specification} of the dataset. +\end{enumerate} + +This goal faces a critical problem concerning situations where \textit{multiple} standard models result from a given total choice\cite{cozman2020joy}, illustrated by the following example. The specification +$$ +\begin{aligned} + 0.3::a&,\cr + b \vee c& \leftarrow a. +\end{aligned} +$$ +has three stable models, $\set{\neg a}, \set{a, b}$ and $\set{a, c}$. While it is straightforward to set $P(\neg a)=0.7$, there is \textit{no further information} to assign values to $P(a,b)$ and $P(a,c)$. At best, we can use a parameter $\alpha$ such that +$$ +\begin{aligned} +P(a,b) &= 0.3 \alpha,\cr +P(a,c) &= 0.3 (1 - \alpha). +\end{aligned} +$$ + +This uncertainty in inherent to the specification, but can be mitigated with the help of a dataset: the parameter $\alpha$ can be estimated from the empirical distribution. + +In summary, if an ASP specification is intended to describe some system that can be observed then: + +\begin{enumerate} + \item The observations can be used to estimate the value of the parameters (such as $\alpha$ above and others entailed from further clauses). + \item With a probability set for the stable models, we want to extend it to all the samples (\textit{i.e.} consistent sets of literals) of the specification. + \item This extended probability can then be related to the \textit{empirical distribution}, using a probability divergence, such as Kullback-Leibler; and the divergence value used as a \textit{performance} measure of the specification with respect to the observations. + \item If that specification is only but one of many possible candidates then that performance measure can be used, \textit{e.g.} as fitness, by algorithms searching (optimal) specifications of a dataset of observations. +\end{enumerate} + +Currently, we are on the step two above: Extending a probability function (with parameters such as $\alpha$), defined on the stable sets of a specification, to all the samples of the specification. This extension must, of course, respect the axioms of probability so that probabilistic reasoning is consistent with the ASP specification. + +\section{Work Plan} + +A team of two researchers and a undergraduate, master, or Ph.D. student, working over six months with adequate resources, should be able to advance substantial contributions and produce an intermediate progress report for a workshop, a final comprehensive paper for a conference, or start a Ph.D. project with greater reach and depth, describing: + +\begin{itemize} + \item The formalization of the methods outlined above, including the parameter estimation from observations and the probability distribution over the specification samples. + \item Application and evaluation of this approach, using tools such as \hyperlink{https://ciao-lang.org/playground/scasp.html}{s(casp)}, or the \hyperlink{https://potassco.org/}{Potassco suit} to a range of problems from the simple \textit{Burglar, Earthquake, Alarm} to measuring a specification accuracy on a given dataset, or finding an optimal specification for a given dataset given some background knowledge. +\end{itemize} + +While the theoretical work for this project has yet to be completed, there are some relevant tasks that, with different levels of ambition, can be started right now: +\begin{enumerate} + \item \textit{Extract Probability Annotations}. For example, convert the annotated specification \verb!0.3::a. b ; c :- a.! to \verb! a ; -a. b ; c :- a!. This is a simple, syntactical task that can be implemented either with \texttt{prolog} or using \texttt{python} and the API provided by the Potassco suite. + \item \textit{Extend Probability to Stable Models}. Application of the method outlined before, where the probability of total choices is extended to standard models using parameters, which are next estimated with a dataset. + \item \textit{Relate Samples, Stable Models and Total Choices}. Determine which stable models, or total choices, contain and which are contained in a given sample. + \item \textit{Propagate Probability to Samples}. Use of the relation above to assign a probability to an arbitrary event, using an aggregation operation, such as $\max$ or $\prod$, from the relevant stable models. + \item \textit{Process Evaluation on Well-known Cases}. Assessment of the implemented prototype using well-known problems such as the ``A\-larm-Bur\-glar-Earth\-qua\-ke''. +\end{enumerate} + +\section*{References} + +\printbibliography + +% \begin{enumerate} +% \item Victor Verreet, Vincent Derkinderen, Pedro Zuidberg Dos Martires, Luc De Raedt, Inference and Learning with Model Uncertainty in Probabilistic Logic Programs (2022) +% \item Andrew Cropper, Sebastijan Dumancic, Richard Evans, Stephen H. Muggleton, Inductive logic programming at 30 (2021) +% \item Fabio Gagliardi Cozman, Denis Deratani Mauá, The joy of Probabilistic Answer Set Programming: Semantics - complexity, expressivity, inference (2020) +% \item Fabrizio Riguzzi, Foundations of Probabilistic Logic Programming Languages, Semantics, Inference and Learning. Rivers Publishers (2018) +% \item Martin Gebser, Roland Kaminski, Benjamin Kaufmann, and Torsten Schaub, Answer Set Solving in Practice, Morgan \& Claypool Publishers (2013) +% \end{enumerate} + +\end{document} \ No newline at end of file diff --git a/text/backup/zz_old/proposal/zugzwang.bib b/text/backup/zz_old/proposal/zugzwang.bib new file mode 100644 index 0000000..5f1392b --- /dev/null +++ b/text/backup/zz_old/proposal/zugzwang.bib @@ -0,0 +1,48 @@ +@inproceedings{verreet2022inference, + title={Inference and learning with model uncertainty in probabilistic logic programs}, + author={Verreet, Victor and Derkinderen, Vincent and Dos Martires, Pedro Zuidberg and De Raedt, Luc}, + booktitle={Proceedings of the AAAI Conference on Artificial Intelligence}, + volume={36}, + number={9}, + pages={10060--10069}, + year={2022} +} + +@article{cropper2022inductive, + title={Inductive logic programming at 30}, + author={Cropper, Andrew and Duman{\v{c}}i{\'c}, Sebastijan and Evans, Richard and Muggleton, Stephen H}, + journal={Machine Learning}, + volume={111}, + number={1}, + pages={147--172}, + year={2022}, + publisher={Springer} +} + +@article{cozman2020joy, + title={The joy of probabilistic answer set programming: semantics, complexity, expressivity, inference}, + author={Cozman, Fabio Gagliardi and Mau{\'a}, Denis Deratani}, + journal={International Journal of Approximate Reasoning}, + volume={125}, + pages={218--239}, + year={2020}, + publisher={Elsevier} +} + +@book{riguzzi2022foundations, + title={Foundations of probabilistic logic programming: Languages, semantics, inference and learning}, + author={Riguzzi, Fabrizio}, + year={2022}, + publisher={CRC Press} +} + +@article{gebser2012answer, + title={Answer set solving in practice}, + author={Gebser, Martin and Kaminski, Roland and Kaufmann, Benjamin and Schaub, Torsten}, + journal={Synthesis lectures on artificial intelligence and machine learning}, + volume={6}, + number={3}, + pages={1--238}, + year={2012}, + publisher={Morgan \& Claypool Publishers} +} diff --git a/text/paper_01/LLNCS/aasasp-llncs.pdf b/text/paper_01/LLNCS/aasasp-llncs.pdf new file mode 100644 index 0000000..3893398 Binary files /dev/null and b/text/paper_01/LLNCS/aasasp-llncs.pdf differ diff --git a/text/paper_01/LLNCS/aasasp-llncs.tex b/text/paper_01/LLNCS/aasasp-llncs.tex new file mode 100644 index 0000000..cd3e2ec --- /dev/null +++ b/text/paper_01/LLNCS/aasasp-llncs.tex @@ -0,0 +1,1336 @@ +%\documentclass[a4paper, 10pt]{article} +\documentclass{llncs} + +\usepackage[ +bibstyle=numeric, +citestyle=numeric +]{biblatex} %Imports biblatex package +\addbibresource{zugzwang.bib} %Import the bibliography file + +\usepackage[x11colors]{xcolor} + +\usepackage{tikz} +\tikzset{ +event/.style={}, +smodel/.style={fill=gray!25}, +tchoice/.style={draw, circle}, +indep/.style={},%{draw, dashed}, +proptc/.style = {-latex, dashed}, +propsm/.style = {-latex, thick}, +doubt/.style = {gray} +} +\usetikzlibrary{calc, positioning, patterns} + +\usepackage{hyperref} +\hypersetup{ +colorlinks=true, +linkcolor=blue, +citecolor=blue, +urlcolor=blue, +} + +\usepackage{commath} +%\usepackage{amsthm} +\newtheorem{assumption}{Assumption} +%\newtheorem{definition}{Definition} +%\newtheorem{proposition}{Proposition} +%\newtheorem{example}{Example} +%\newtheorem{theorem}{Theorem} +\usepackage{amssymb} +\usepackage[normalem]{ulem} +\usepackage[nice]{nicefrac} +\usepackage{stmaryrd} +\usepackage{acronym} +\usepackage{multicol} +\usepackage{cleveref} +% +% Local commands +% +\newcommand{\naf}{\ensuremath{\sim\!}} +\newcommand{\larr}{\ensuremath{\leftarrow}} +\newcommand{\at}[1]{\ensuremath{\!\del{#1}}} +\newcommand{\co}[1]{\ensuremath{\overline{#1}}} +\newcommand{\fml}[1]{\ensuremath{{\cal #1}}} +\newcommand{\deft}[1]{\textbf{#1}} +\newcommand{\pset}[1]{\ensuremath{\mathbb{P}\at{#1}}} +\newcommand{\ent}{\ensuremath{\lhd}} +\newcommand{\cset}[2]{\ensuremath{\set{#1,~#2}}} +\newcommand{\langof}[1]{\ensuremath{\fml{L}\at{#1}}} +\newcommand{\uset}[1]{\ensuremath{#1^{\ast}}} +\newcommand{\lset}[1]{\ensuremath{#1_{\ast}}} +\newcommand{\yset}[1]{\ensuremath{\left\langle #1 \right\rangle}} +\newcommand{\stablecore}[1]{\ensuremath{\left\llbracket #1 \right\rrbracket}} +\newcommand{\uclass}[1]{\ensuremath{\intco{#1}}} +\newcommand{\lclass}[1]{\ensuremath{\intoc{#1}}} +\newcommand{\smclass}[1]{\ensuremath{\intcc{#1}}} +\newcommand{\pr}[1]{\ensuremath{\mathrm{P}\at{#1}}} +\newcommand{\err}[1]{\ensuremath{\mathrm{err}\at{#1}}} +\newcommand{\pw}[1]{\ensuremath{\mu\at{#1}}} +\newcommand{\pwcfname}{\ensuremath{\mu_{\textrm{TC}}}} +\newcommand{\pwc}[1]{\ensuremath{\pwcfname\at{#1}}} +\newcommand{\class}[1]{\ensuremath{[{#1}]_{\sim}}} +\newcommand{\urep}[1]{\ensuremath{\rep{#1}{}}} +\newcommand{\lrep}[1]{\ensuremath{\rep{}{#1}}} +\newcommand{\rep}[2]{\ensuremath{\left\langle #1 \middle| #2 \right\rangle}} +\newcommand{\inconsistent}{\bot} +\newcommand{\given}{\ensuremath{~\middle|~}} +\newcommand{\emptyevent}{\ensuremath{\vartriangle}} +\newcommand{\indepclass}{\ensuremath{\Diamond}} +\newcommand{\probfact}[2]{\ensuremath{#2\mkern-4mu:\mkern-4mu#1}} +\newcommand{\probrule}[3]{\probfact{#1}{#2} \leftarrow #3} +%\newcommand{\tcgen}[1]{\ensuremath{\widehat{#1}}} +\newcommand{\tcgen}[1]{\ensuremath{\left<#1\right>}} +\newcommand{\lfrac}[2]{\ensuremath{{#1}/{#2}}} +\newcommand{\condsymb}[2]{\ensuremath{p_{#1|#2}}} +% +%\newcommand{\oldnote}[1]{\marginpar{\scriptsize #1}} +\newcommand{\oldnote}[1]{\note{#1}} +\newcommand{\todo}[1]{{\color{red!50!black}(\emph{#1})}} +% \newcommand{\oldremark}[2]{\uwave{#1}~{\color{green!40!black}(\emph{#2})}} +\newcommand{\oldremark}[2]{\remark{#1}{#2}} +\newcommand{\oldreplace}[2]{\sout{#1}/{\color{green!20!black}#2}} +\newcommand{\delete}[1]{\xout{#1}} +\newcommand{\franc}[1]{{\color{orange!60!black}#1}} +\newcommand{\bruno}{\color{red!60!blue}} + +% +% Acronyms +% +\acrodef{BK}[BK]{background knowledge} +\acrodef{ASP}[ASP]{answer set programming} +\acrodef{NP}[NP]{normal program} +\acrodef{DS}[DS]{distribution semantics} +\acrodef{PF}[PF]{probabilistic fact} +\acrodef{TC}[TC]{total choice} +\acrodef{SM}[SM]{stable model} +\acrodef{SC}[SC]{stable core} +\acrodef{KL}[KL]{Kullback-Leibler} +\acrodef{SBF}[SBF]{Simple But Fruitful} +\acrodef{RSL}[RSL]{Random Set of Literals} +\acrodef{RCE}[RCE]{Random Consistent Event} +% + +% +% +% +\renewcommand{\remark}[2]{% + \stepcounter{remark}% + \!{\color{red}/\!}% + #1% + {\!\color{red}/}\footnotemark[\arabic{remark}]% + \footnotetext[\arabic{remark}]{{\color{red}/}#2}% + } +\renewcommand{\note}[1]{ + \stepcounter{remark}% + {\!\!\color{red}/}\footnotemark[\arabic{remark}]\!\!% + \footnotetext[\arabic{remark}]{{\color{red}/}#1} +} +% +% +% +\begin{document} +% +% +% +% +% + \title{An Algebraic Approach to Stochastic ASP} + \author{Salvador Abreu\inst{1} \and Francisco Coelho\inst{1} \and Bruno Dinis \inst{1}} + \institute{Universidade de Évora} + \date{} + \maketitle\thispagestyle{empty} + +% +% +% +\begin{abstract} + We address the problem of extending probability from the total choices of an \acs{ASP} program to the \aclp{SM}, and from there to general events. + % + Our approach is algebraic in the sense that it relies on an equivalence relation over the set of events and uncertainty is expressed with variables and polynomial expressions. + % + We illustrate our methods with two examples, one of which shows a connection to bayesian networks. +\end{abstract} +% +% +% +\section{Introduction and Motivation} +% +% +% +A major limitation of logical representations in real world applications is the implicit assumption that the \acl{BK} is perfect. This assumption is problematic if data is noisy, which is often the case. Here we aim to explore how \acl{ASP} programs with probabilistic facts can lead to characterizations of probability functions on the program's domain, which is not straightforward in the context of \acl{ASP}, as explained below (see also \cite{cozman2020joy,verreet2022inference,baral2009probabilistic,pajunen2021solution}). Unlike current systems such as ProbLog \cite{de2007problog}, P-log \cite{baral2009probabilistic}, LP\textsuperscript{MLN} \cite{lee2016weighted}, or cplint \cite{alberti2017cplint}, that derive a probability distribution from a program, in our system some choices are represented by a parameter that can be later estimated from further information, \emph{e.g.}\ observations. This approach enables later refinement and scoring of a partial program of a model from additional evidence. + +\Ac{ASP} \cite{lifschitz2002answer} is a logic programming paradigm based on the \ac{SM} semantics of \acp{NP} that can be implemented using the latest advances in SAT solving technology. Unlike ProLog, \ac{ASP} is a truly declarative language that supports language constructs such as disjunction in the head of a clause, choice rules, and both hard and weak constraints. + +The \ac{DS} \cite{sato1995statistical,riguzzi2022foundations} is a key approach to extend logical representations with probabilistic reasoning. +% +Let $\fml{A}$ be a finite set of atoms. A \emph{pre-total choice} is a subset $t^{\ast}$ of \fml{A}. The \emph{\acl{TC}} (TC) associated to $t^{\ast}$ is the set $t := t^{\ast} \cup \set{\co{a} \given a \in \fml{A} \setminus t^{\ast}}$ where $\co{a}$ stands for $\neg a$. \Acp{PF} are the most basic \ac{DS} stochastic primitives and take the form $\probfact{p}{a}$ where each $a\in\fml{A}$ is associated to some $p\in\intcc{0, 1}$. Each \ac{PF} then represents a boolean random variable that is true with probability $p$ and false with probability $\co{p} = 1 - p$. + +%\note{revisit this part. $\co{a}$ não foi definido! Talvez escrever $\neg a$ na definição de $t$?} +Let $F = \set{\probfact{p}{a} \given a \in \fml{A}, p \in \intcc{0, 1}}$. For a \acl{TC} $t$ over $\fml{A}$, define +$$ +P_t := \set{ p \given a \in t^{\ast} \wedge \probfact{p}{a} \in F} \cup + \set{\co{p} \given a \in t \setminus t^{\ast} \wedge \probfact{p}{a} \in F} +$$ + +and + +\begin{equation} + \pr{T = t} = \prod_{p \in P_t} p, + \label{eq:prob.total.choice} +\end{equation} + +where $T$ is a random variable whose values are \aclp{TC}. + +Our goal is to extend this probability (which is, indeed, a product of Bernoulli distributions \cite{Teugels90}), from \aclp{TC}, to cover the program domain. We use the term ``program'' as a set of rules and facts, plain and probabilistic. We can foresee two key applications of this extended probability: + +\begin{enumerate} + \item Support probabilistic reasoning/tasks on the program domain. + \item Given a dataset and a divergence measure, the program can be scored (by the divergence w.r.t.\ the \emph{empiric} distribution of the dataset), and weighted or sorted amongst other programs. These are key ingredients in algorithms searching, for example, optimal models of a dataset. +\end{enumerate} + +To extend probabilities from \aclp{TC} we start with the stance that \emph{a program describes an observable system}, that \emph{the \aclp{SM} are all the possible states} of that system and that \emph{observations (i.e.\ events) are stochastic} --- one observation can be sub-complete (a proper subset of a \ac{SM}) or super-complete (a proper superset of a \ac{SM}), +%\note{We should explain this!} + and might not determine the real state of the system. From here, probabilities must be extended from \acp{TC} to \acp{SM} and then to any event. +% +This extension process starts with a critical problem, illustrated by the example in \cref{sec:example.1}, concerning situations where multiple \acp{SM}, $ab$ and $ac$, result from a single \ac{TC}, $a$, but there is not enough information (in the program) to assign a single probability to each \ac{SM}. We propose to address this issue by using algebraic variables to describe that lack of information and then estimate the value of those variables from empirical data. This lack of uniqueness is also addressed in \cite{cozman2020joy} along a different approach, using credal sets. + +In another related work \cite{verreet2022inference} epistemic uncertainty (or model uncertainty) is considered as a lack of knowledge about the underlying model, that may be mi\-ti\-ga\-ted via further observations. This seems to presuppose a bayesian approach to imperfect knowledge in the sense that having further observations allows to improve/correct the model. Indeed, that approach uses Beta distributions on the total choices in order to be able to learn a distribution on the events +%\remark{events}{Check this: do they learn distributions on the events?} +. This approach seems to be specially fitted to being able to tell when some probability lies beneath some given value. Our approach seems to be similar in spirit, while remaining algebraic in the way that the extension of probabilities is addressed. + +The example in \cref{sec:example.1} uses the code available in the project's repository\footnote{\url{https://git.xdi.uevora.pt/fc/sasp}}, developed with the \textit{Julia} programming language \cite{bezanson2017julia}, and the \textit{Symbolics} \cite{gowda2021high}, and \textit{DataFrames} \cite{bouchetvalat2023dataframes} libraries. +% +% +% +\section{A Simple but Fruitful Example}\label{sec:example.1} +% +% +% +In this section we consider a somewhat simple case that showcases the problem of extending probabilities from \aclp{TC} to \aclp{SM} and then to events. As mentioned before, the main issue arises from the lack of information in the program to assign a single probability to each stable model. This becomes a crucial problem in situations where multiple \aclp{SM} result from a single \acl{TC}. We will come back to this example in \cref{subsec:sbf.example}, after we present our proposal for extending probabilities from \aclp{TC} to \aclp{SM} in \cref{sec:extending.probalilities}. + + +\begin{example}\label{running.example} + Consider $\fml{A} = \set{a, b, c}$ and the following program + %\note{Introduce the notation $\probfact{p}{a}$ and what is the underlying ASP program.} + + \begin{equation} + \begin{aligned} + \probfact{0.3}{a} & ,\cr + b \vee c & \leftarrow a. + \end{aligned} + \label{eq:example.1} + \end{equation} + + %\note{Explain how the SM are defined.} + %\note{Explain our position about negation and be clear about $\co{a} = \neg a$ and not $\co{a} =\,\sim\!\! a$.} + %\note{Introduce the parameterization $\theta_{s,t}$.} + The \emph{standard form} of this program results from replacing annotated facts, such as $\probfact{0.3}{a}$, by the associated disjunctions, $a \vee \neg a$. The \aclp{SM} of the annotated program are the same as the ones from the standard form: $\co{a}, ab$ and $ac$, where $\co{a}$ stands for $\neg a$ (see \cref{fig:running.example}). While it is straightforward to assume $\pr{\co{a}}=0.7$, there is no obvious explicit way to assign values to $\pr{ab}$ and $\pr{ac}$. For instance, we can use a parameter $\theta$ as in + $$ + \begin{aligned} + \pr{ab} & = 0.3 \theta,\cr + \pr{ac} & = 0.3 (1 - \theta) + \end{aligned} + $$ + to express our knowledge that $ab,ac$ are events related in a certain way and, simultaneously, our uncertainty about that relation. The pa\-ra\-me\-ter $\theta=\theta_{s,t}$ depends on both the \acl{SM} $s$ and the \acl{TC} $t$. This uncertainty can then be addressed with the help of adequate distributions, such as empirical distributions from a dataset. +\end{example} + +If an \ac{ASP} program is intended to describe some system then: + +\begin{enumerate} + + \item With a probability set for the \aclp{SM}, we want to extend it to all the events of the program domain. + + \item In the case where some statistical knowledge is available, for example, in the form of a distribution, we consider it as ``external'' knowledge about the parameters, that doesn't affect the extension procedure described below. + + \item Statistical knowledge can be used to estimate parameters and to ``score'' the program. + + \item\label{item:program.selection} If that program is only but one of many possible candidates then that score can be used, \emph{e.g.} as fitness, by algorithms searching (optimal) programs of a dataset of observations. + + \item If observations are not consistent with the program, then we ought to conclude that the program is wrong and must be changed accordingly. +\end{enumerate} + +Currently, we are addressing the problem of extending a probability function (possibly using parameters such as $\theta$ above), defined on the \acp{SM} of a program, to all the events of that program. This extension must satisfy the Kolmogorov axioms of probability so that probabilistic reasoning is consistent with the \ac{ASP} program and follow our interpretation of \aclp{SM} as the states of an observable system. + +As sets, the \acp{SM} can have non-empty intersection. But, as states of a system, we assume that \acp{SM} are disjoint events, in the following sense: + +\begin{assumption}\label{assumption:smodels.disjoint} + \Aclp{SM} are disjoint events: For any set $X$ of \aclp{SM}, + \begin{equation} + \pr{X} = \sum_{s\in X}\pr{s} + \end{equation} +\end{assumption} + +Consider the \aclp{SM} $ab, ac$ from \cref{running.example}, that result from the clause $b \vee c \leftarrow a$ and the \acl{TC} $\set{a}$. Since we intend to associate each \acl{SM} with a state of the system, $ab$ and $ac$ should be \emph{disjoint} events. So $b \vee c$ is interpreted as an \emph{exclusive disjunction} and, from that particular clause, no further relation between $b$ and $c$ is assumed. This does not prevent that other clauses may be added that entail further dependencies between $b$ and $c$, which in turn may change the \aclp{SM}. + +By not making distribution assumptions on the clauses of the program we can state such properties on the semantics of the program, as we've done in assumption \ref{assumption:smodels.disjoint}. +% +% +% +\section{Extending Probabilities}\label{sec:extending.probalilities} +% +% +% +\begin{figure}[t] + \begin{center} + \begin{tikzpicture} + \node[event] (E) {$\emptyevent$}; + \node[tchoice, above left = of E] (a) {$a$}; + \node[smodel, above left = of a] (ab) {$ab$}; + \node[smodel, above right = of a] (ac) {$ac$}; + \node[event, below = of ab] (b) {$b$}; + \node[event, below = of ac] (c) {$c$}; + \node[event, above right = of ab] (abc) {$abc$}; + \node[event, above left = of ab] (abC) {$\co{c}ab$}; + \node[event, above right = of ac] (aBc) {$\co{b}ac$}; + \node[indep, right = of ac] (bc) {$bc$}; + \node[tchoice, smodel, below right = of bc] (A) {$\co{a}$}; + \node[event, above = of A] (Ac) {$\co{a}c$}; + \node[event, above right = of Ac] (Abc) {$\co{a}bc$}; + % ---- + \draw[doubt] (a) to[bend left] (ab); + \draw[doubt] (a) to[bend right] (ac); + + \draw[doubt] (ab) to[bend left] (abc); + \draw[doubt] (ab) to[bend right] (abC); + + \draw[doubt] (ac) to[bend right] (abc); + \draw[doubt] (ac) to[bend left] (aBc); + + \draw[doubt, dashed] (Ac) to (Abc); + + \draw[doubt] (A) to (Ac); + \draw[doubt] (A) to (Abc); + + \draw[doubt] (ab) to[bend right] (E); + \draw[doubt] (ac) to[bend right] (E); + \draw[doubt] (A) to[bend left] (E); + + \draw[doubt] (ab) to (b); + \draw[doubt] (ac) to (c); + % \draw[doubt] (ab) to[bend left] (a); + % \draw[doubt] (ac) to[bend right] (a); + \draw[doubt, dashed] (c) to[bend right] (bc); + \draw[doubt, dashed] (abc) to[bend left] (bc); + \draw[doubt, dashed] (bc) to (Abc); + \draw[doubt, dashed] (c) to[bend right] (Ac); + \end{tikzpicture} + \end{center} + + \caption{Some events related to the \aclp{SM} of \cref{running.example}. The circle nodes are \aclp{TC} and shaded nodes are \aclp{SM}. Solid lines represent relations with the \acp{SM} and dashed lines relations between other events. The set of events contained in all \aclp{SM}, denoted by $\emptyevent$, is empty in this example.} + \label{fig:running.example} +\end{figure} + +The diagram in \cref{fig:running.example} illustrates the problem of extending probabilities from \aclp{TC} to \aclp{SM} and then to general events in an \emph{edge-wise} process, where the value in a node is defined from the values in its neighbors. This quickly leads to coherence problems concerning probability, with no clear systematic approach. Notice that $bc$ is not directly related with any \acl{SM} therefore propagating values through edges would assign a hard to justify ($\not= 0$) value to $bc$. Instead, we propose to base the extension in the relation an event has with the \aclp{SM}. +% +% +% +\subsection{An Equivalence Relation}\label{subsec:equivalence.relation} +% +% +% +\begin{figure}[t] + \begin{center} + \begin{tikzpicture} + \node[event] (E) {$\emptyevent$}; + \node[tchoice, above left = of E] (a) {$a$}; + \node[smodel, above left = of a] (ab) {$ab$}; + \node[smodel, above right = of a] (ac) {$ac$}; + \node[event, below = of ab] (b) {$b$}; + \node[event, below = of ac] (c) {$c$}; + \node[event, above right = of ab] (abc) {$abc$}; + \node[event, above left = of ab] (abC) {$\co{c}ab$}; + \node[event, above right = of ac] (aBc) {$\co{b}ac$}; + \node[indep, right = of ac] (bc) {$bc$}; + \node[tchoice, smodel, below right = of bc] (A) {$\co{a}$}; + \node[event, above = of A] (Ac) {$\co{a}c$}; + \node[event, above right = of Ac] (Abc) {$\co{a}bc$}; + % ---- + \path[draw, rounded corners, pattern=north west lines, opacity=0.2] + (ab.west) -- + (ab.north west) -- + % + (abC.south west) -- + (abC.north west) -- + (abC.north) -- + % + (abc.north east) -- + (abc.east) -- + (abc.south east) -- + % + (ab.north east) -- + (ab.east) -- + (ab.south east) -- + % + (a.north east) -- + % + (E.north east) -- + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (b.south west) -- + % + (ab.west) + ; + % ---- + \path[draw, rounded corners, pattern=north east lines, opacity=0.2] + (ac.south west) -- + (ac.west) -- + (ac.north west) -- + % + (abc.south west) -- + (abc.west) -- + (abc.north west) -- + % + (aBc.north east) -- + (aBc.east) -- + (aBc.south east) -- + % + (ac.north east) -- + % + (c.east) -- + % + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (a.south west) -- + (a.west) -- + (a.north west) -- + (a.north) -- + % + (ac.south west) + ; + % ---- + \path[draw, rounded corners, pattern=horizontal lines, opacity=0.2] + % (A.north west) -- + % + (Ac.north west) -- + % + (Abc.north west) -- + (Abc.north) -- + (Abc.north east) -- + (Abc.south east) -- + % + % (Ac.north east) -- + % (Ac.east) -- + % + % (A.east) -- + (A.south east) -- + % + (E.south east) -- + (E.south) -- + (E.south west) -- + (E.west) -- + (E.north west) -- + % + (Ac.north west) + ; + \end{tikzpicture} + \end{center} + + \caption{Classes (of consistent events) related to the \aclp{SM} of \cref{running.example} are defined through intersections and inclusions. In this picture we can see, for example, the classes $\set{\co{c}ab, ab, b}$ and $\set{a, abc}$. Different fillings correspond to different classes and, as before, the circle nodes are \aclp{TC} and shaded nodes are \aclp{SM}. Notice that $bc$ is not in a ``filled'' area.} + \label{fig:running.example.classes} +\end{figure} + +Given an ASP program, we consider a set of \emph{atoms} $ \fml{A}$, the set $\fml{L}$ of the \emph{literals} over \fml{A}, and the set of \emph{events} $\fml{E}$ such that $e \in \fml{E} \iff e \subseteq \fml{L}$. We also consider $\fml{W}$ the set of \emph{worlds} (consistent events), +%\note{Be more precise on this definition} +a set of \emph{\aclp{TC}} $\fml{T}$ such that for every $a \in \fml{A}$ we have $a \in t$ or $\neg a \in t$ +%\note{Shouldn't it be $a \in t$ or $\neg a \in t$???} +, and $\fml{S}$ the set of \emph{\aclp{SM}} such that $ \fml{S}\subset\fml{W}$. At last, the set of \aclp{SM} entailed by the \acl{TC} $t$ is denoted by $\tcgen{t}$. + +Our path to extend probabilities starts with a perspective of \aclp{SM} as playing a role similar to \emph{prime factors}. The \aclp{SM} of a program are the irreducible events entailed from that program and any event must be considered under its relation with the \aclp{SM}. + +From \cref{running.example}, consider the \acp{SM} $\co{a}, ab, ac$ and events $a, abc$ and $c$. While $a$ is related with (contained in) with both $ab, ac$, event $c$ is related only with $ac$. So, $a$ and $c$ are related with different \acp{SM}. On the other hand, both $ab, ac$ are related with $abc$. So $a$ and $abc$ are related with the same \aclp{SM}. + +\begin{definition}\label{def:stable.core} + The \emph{\ac{SC}} of the event $e\in \fml{E}$ is + \begin{equation} + \stablecore{e} := \set{s \in \fml{S} \given s \subseteq e \vee e \subseteq s}. \label{eq:stable.core} + \end{equation} + where $\fml{S}$ is the set of \aclp{SM}. +\end{definition} + +We now define an equivalence relation so that two events are related if either both are inconsistent or both are consistent and, in the latter case, with the same \acl{SC}. + +\begin{definition}\label{def:equiv.rel} + For a given program, let $u, v \in \fml{E}$. The equivalence relation $\sim$ is defined by + \begin{equation} + u \sim v :\!\iff u,v \not\in\fml{W} \vee \del{u,v \in \fml{W} \wedge \stablecore{u} = \stablecore{v}}.\label{eq:equiv.rel} + \end{equation} +\end{definition} + +Observe that the minimality of \aclp{SM} implies that, in \cref{def:stable.core}, either $e$ is a \acl{SM} or at least one of $\exists s \del{s \subseteq e}, \exists s \del{e \subseteq s}$ is false. This equivalence relation defines a partition on the set of events, where each class holds a unique relation with the \aclp{SM}. In particular we denote each class by: + +\begin{equation} + \class{e} = + \begin{cases} + \inconsistent := \fml{E} \setminus \fml{W} + & \text{if~} e \in \fml{E} \setminus \fml{W}, \\ + \set{u \in \fml{W} \given \stablecore{u} = \stablecore{e}} + & \text{if~} e \in \fml{W}. + \end{cases}\label{eq:event.class} +\end{equation} + +The combinations of the \aclp{SM}, together with the set of inconsistent events $\inconsistent$, form a set of representatives. Consider again \cref{running.example}. As previously mentioned, the \aclp{SM} are the elements of $\fml{S} = \set{\co{a}, ab, ac}$ so the quotient set of this relation is +\begin{equation} + \class{\fml{E}} = \set{ + \inconsistent, + \indepclass, + \class{\co{a}}, + \class{ab}, + \class{ac}, + \class{\co{a}, ab}, + \class{\co{a}, ac}, + \class{ab, ac}, + \class{\co{a}, ab, ac} + }, +\end{equation} +where $\indepclass$ denotes, with abuse of notation, both the class of \emph{independent} events $e$ such that $\stablecore{e} = \emptyset$ and its core and $\emptyevent$ is the set of events contained in all \acp{SM}. We have: +%\note{Remark the odd nature of $\emptyevent$.} + +\begin{equation*} + \begin{array}{l|lr} + \text{\textbf{Core}}, \stablecore{e} + & \text{\textbf{Class}}, \class{e} + & \text{\textbf{Size}}, \# \class{e} \\ + \hline + % + \inconsistent + & \co{a}a, \ldots + & 37 + \\ + % + \indepclass + & \co{b}, \co{c}, bc, \co{b}a, \co{b}c, \co{bc}, \co{c}a, \co{c}b, \co{bc}a + & 9 + \\ + % + \co{a} + & \co{a}, \co{a}b, \co{a}c, \co{ab}, \co{ac}, \co{a}bc, \co{ac}b, \co{ab}c, \co{abc} + & 9 + \\ + % + ab + & b, ab, \co{c}ab + & 3 + \\ + % + ac + & c, ac, \co{b}ac + & 3 + \\ + % + \co{a}, ab + & \emptyset + & 0 + \\ + % + \co{a}, ac + & \emptyset + & 0 + % + \\ + % + ab, ac + & a, abc + & 2 + \\ + % + \co{a}, ab, ac + & \emptyevent + & 1 + \\ + % + \hline + \class{\fml{E}} + & \fml{E} + & 64 + \end{array} +\end{equation*} + + Since all events within an equivalence class are in relation with a specific set of \aclp{SM}, \emph{measures, including probability, should be constant within classes}: + \[ + \forall u\in \class{e} \left(\mu\at{u} = \mu\at{e} \right). + \] + + In general, we have \emph{much more} \aclp{SM} than literals but their combinations are still \emph{much less} than events. Nevertheless, the equivalence classes allow us to propagate probabilities from \aclp{TC} to events, as explained in the next subsection. + + In this specific case, instead of dealing with $64 = 2^6$ events, we consider only the $9 = 2^3 + 1$ classes, well defined in terms of combinations of the \aclp{SM}. + +% +% +% +\subsection{From Total Choices to Events}\label{subsec:from.tchoices.to.events} +% +% +% +Our path to set a distribution on $\fml{E}$ starts with the more general problem of extending \emph{measures}, since extending \emph{probabilities} easily follows by means of a suitable normalization (done in \eqref{eq:measure.events.unconditional} and \eqref{eq:probability.event}), and has two phases: +\begin{enumerate} + \item Extension of the probabilities, \emph{as measures}, from the \aclp{TC} to events. + \item Normalization of the measures on events, recovering a probability. +\end{enumerate} + +The ``extension'' phase, traced by \cref{eq:prob.total.choice} and eqs.\ \eqref{eq:measure.tchoice} to \eqref{eq:measure.events}, starts with the measure (probability) of \aclp{TC}, $\pw{t} = \pr{T = t}$, expands it to \aclp{SM}, $\pw{s}$, and then, within the equivalence relation from \cref{eq:equiv.rel}, to (general) events, $\pw{e}$, including (consistent) worlds. + +\begin{description} + % + \item[Total Choices.] Using \cref{eq:prob.total.choice}, this case is given by + \begin{equation} + \pwc{t} := \pr{T = t}= \prod_{p\in P_t} p. + \label{eq:measure.tchoice} + \end{equation} + % + + \item[Stable Models.] Recall that each \acl{TC} $t$, together with the rules and the other facts of a program, defines the set \tcgen{t} of \aclp{SM} associated with that choice. + Given a \acl{TC} $t$, a \acl{SM} $s$, and variables or values $\theta_{s,t} \in \intcc{0, 1}$ such that $\sum_{s\in \tcgen{t}} \theta_{s,t} = 1$, we define + \begin{equation} + \pw{s, t} := \begin{cases} + \theta_{s,t} & \text{if~} s \in \tcgen{t}\cr + 0 & \text{otherwise.} + \end{cases} + \label{eq:measure.stablemodel} + \end{equation} + + % + + \item[Classes.] \label{item:class.cases} Each class is either the inconsistent class, $\inconsistent$, or is represented by some set of \aclp{SM}. + \begin{description} + \item[Inconsistent Class.] The inconsistent class contains events that are logically inconsistent, thus should never be observed and have measure zero: + \begin{equation} + \pw{\inconsistent, t} := 0.\footnote{Notice that this measure being equal to zero is actually independent of the \acl{TC}.} + \label{eq:measure.class.inconsistent} + \end{equation} + \item[Independent Class.] A world that neither contains nor is contained in a \acl{SM} corresponds to a non-state, according to the program. So the respective measure is also set to zero: + \begin{equation} + \pw{\indepclass, t} := 0. + \label{eq:measure.class.independent} + \end{equation} + \item[Other Classes.] The extension must be constant within a class, its value should result from the elements in the \acl{SC}, and respects assumption \ref{assumption:smodels.disjoint} (\aclp{SM} are disjoint): + \begin{equation} + \pw{\class{e}, t} := \pw{\stablecore{e}, t} = \sum_{s\in\stablecore{e}}\pw{s, t} + \label{eq:measure.class.other} + \end{equation} + and + \begin{equation} + \pw{\class{e}} := \sum_{t \in \fml{T}} \pw{\class{e}, t}\pwc{t}. + \label{eq:measure.class.unconditional} + \end{equation} + \end{description} + % + + \item[Events.] \label{item:event.cases} Each (general) event $e$ is in the class defined by its \acl{SC}, $\stablecore{e}$. So, denoting by $\# X$ the number of elements in $X$, we set: + \begin{equation} + \pw{e, t} := + \begin{cases} + \frac{\pw{\class{e}, t}}{\# \class{e}} & \text{if~}\# \class{e} > 0, \\ + 0 & \text{otherwise}. + \end{cases} + \label{eq:measure.events} + \end{equation} + and + \begin{equation} + \pw{e} := \sum_{t\in\fml{T}} \pw{e, t} \pwc{t}. + \label{eq:measure.events.unconditional} + \end{equation} +\end{description} + + + +The $\theta_{s,t}$ parameters in equation \eqref{eq:measure.stablemodel} express the \emph{program's} lack of knowledge about the measure assignment, when a single \acl{TC} entails more than one \acl{SM}. In that case, how to distribute the respective measures? Our proposal to address this problem consists in assigning an unknown measure, $\theta_{s,t}$, conditional on the \acl{TC}, $t$, to each \acl{SM} $s$. This approach allows the expression of an unknown quantity and future estimation, given observed data. +% Consider the event $bc$ from \cref{running.example}. Since $\class{bc} = \indepclass$, from \cref{eq:measure.class.independent} we get $\mu\at{bc} = 0$. data. + +% SUPERSET +Equation \eqref{eq:measure.class.other} results from assumption \ref{assumption:smodels.disjoint} and states that the measure of a class $\class{e}$ is the sum over it's \acl{SC}, $\stablecore{e}$, and \eqref{eq:measure.class.unconditional} \emph{marginalizes} the \acp{TC} on \eqref{eq:measure.class.other}. + +The \emph{normalizing factor} is: +\begin{equation*} + Z := + \sum_{e \in \fml{E}} \pw{e} = + \sum_{\class{e} \in \class{\fml{E}}} \pw{\class{e}}, +\end{equation*} + +and now equation \eqref{eq:measure.events.unconditional} provides a straightforward way to define the \emph{probability of observation of a single event}: + +\begin{equation} + \pr{E = e} := \frac{\pw{e}}{Z}.\label{eq:probability.event} +\end{equation} + +Equation \eqref{eq:measure.events.unconditional} together with external statistical knowledge, can be used to learn about the \emph{initial} probabilities of the atoms, that should not (and by \cref{prop:two.distributions} can't) be confused with the explicit $\pwcfname$ set in the program. + +It is now straightforward to check that $\pr{E}$ satisfies the Kolmogorov axioms of probability. + +Since \aclp{TC} are also events, one can ask, for an arbitrary \aclp{TC} $t$, if $\pr{T = t} = \pr{E = t}$ or, equivalently, if $\pwc{t} = \pw{t}$. However, it is easy to see that, in general, that cannot be true. While the domain of the random variable $T$ is the set of \aclp{TC}, for $E$ the domain is much larger, including all the events. Except for trivial programs, where the \acp{SM} are the \acp{TC}, some events other than \aclp{TC} have non-zero probability. + +\begin{proposition} \label{prop:two.distributions} + In a program with a \acl{SM} that is not a \acl{TC} there is at least one $t\in\fml{T}$ such that: + \begin{equation} + \pr{T = t} \not= \pr{E = t}. \label{eq:two.distributions} + \end{equation} +\end{proposition} + +\begin{proof} + Suppose towards a contradiction that $\pr{T = t} = \pr{E = t}$ for all $t \in \fml{T}$. Then + $$ + \sum_{t\in\fml{T}} \pr{E = t} = \sum_{t\in\fml{T}} \pr{T = t} = 1. + $$ + + Hence $\pr{E = x} = 0$ for all $x \in \fml{E}\setminus\fml{T}$, in contradiction with the fact that for at least one $s \in \fml{S}\setminus\fml{T}$ one has $\pr{E = s} > 0$. +\end{proof} + +The essential conclusion of \cref{prop:two.distributions} is that we are dealing with \emph{two distributions}: one, on the \acp{TC}, explicit in the annotations of the programs and another one, on the events, and entailed by the explicit annotations \emph{and the structure of the \aclp{SM}}. + +% +% +% +\section{Developed Examples}\label{sec:developed.examples} +% +% +% +Here we apply the methods from \cref{sec:extending.probalilities} to \cref{running.example} and to a well known bayesian network: the Earthquake, Burglar, Alarm problem. + +\subsection{The SBF Example}\label{subsec:sbf.example} + +We continue with the program from \cref{eq:example.1}. + +\begin{description} + % + \item[\Aclp{TC}.] The \aclp{TC}, and respective \aclp{SM}, are + % + \begin{center} + \begin{tabular}{ll|r} + \textbf{\Acl{TC}} & \textbf{\Aclp{SM}} & \textbf{$\pwc{t}$} \\ + \hline + $a$ & $ab, ac$ & $0.3$ \\ + $\co{a}$ & $\co{a}$ & $\co{0.3} = 0.7$ + \end{tabular} + \end{center} + % + + \item[\Aclp{SM}.] The $\theta_{s,t}$ parameters in this example are + $$ + \begin{array}{l|cc} + \theta_{s,t} & \co{a} & a \\ + \hline + \co{a} & 1 & 0 \\ + ab & 0 & \theta \\ + ac & 0 & \co{\theta} + \end{array} + $$ + with $\theta \in \intcc{0, 1}$. + + \item[Classes.] Following the definitions in \cref{eq:stable.core,eq:equiv.rel,eq:event.class,eq:measure.class.inconsistent,eq:measure.class.independent,eq:measure.class.other} we get the following quotient set (ignoring $\inconsistent$ and $\indepclass$), and measures: + \begin{equation*} + \begin{array}{l|ll|rr|r} + \stablecore{e} + & \pw{s, \co{a}} + & \pw{s, a} + & \pw{\class{e}, \co{a}} + & \pw{\class{e}, a} + & \pw{\class{e}} + \\[2pt] + & \co{a}, ab, ac + & \co{a}, ab, ac + & \pwcfname=0.7 + & \pwcfname=0.3 + & + \\[2pt] + \hline + \co{a} + & \boxed{1},0,0 + & \boxed{0},\theta, \co{\theta} + & 1 + & 0 + & 0.7 + \\[2pt] + % + ab + & 1,\boxed{0},0 + & 0,\boxed{\theta}, \co{\theta} + & 0 + & \theta + & 0.3\theta + \\[2pt] + % + ac + & 1,0,\boxed{0} + & 0,\theta, \boxed{\co{\theta}} + & 0 + & \co{\theta} + & 0.3\co{\theta} + \\[2pt] + % + \co{a}, ab + & \boxed{1},\boxed{0},0 + & \boxed{0},\boxed{\theta}, \co{\theta} + & 1 + & \theta + & 0.7 + 0.3\theta + \\[2pt] + % + \co{a}, ac + & \boxed{1},0,\boxed{0} + & \boxed{0},\theta, \boxed{\co{\theta}} + & 1 + & \co{\theta} + & 0.7 + 0.3\co{\theta} + \\[2pt] + % + ab, ac + & 1,\boxed{0},\boxed{0} + & 0,\boxed{\theta}, \boxed{\co{\theta}} + & 0 + & \theta + \co{\theta} = 1 + & 0.3 + \\[2pt] + % + \co{a}, ab, ac + & \boxed{1},\boxed{0},\boxed{0} + & \boxed{0},\boxed{\theta}, \boxed{\co{\theta}} + & 1 + & \theta + \co{\theta} = 1 + & 1 + \end{array} + \end{equation*} + + \item[Prior Distributions.] Following the above values (in rational form), and considering the inconsistent and independent classes (resp. $\inconsistent, \indepclass$): + \begin{equation*} + \begin{array}{lr|cc|cc} + \stablecore{e} + & \# \class{e} + & \pw{\class{e}} + & \pw{e} + & \pr{E = e} + & \pr{E \in \class{e}} + \\ + \hline + % + \inconsistent + & 37 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + \indepclass + & 9 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + \co{a} + & 9 + & \frac{7}{10} + & \frac{7}{90} + & \frac{7}{207} + & \frac{7}{23} + \\[4pt] + % + ab + & 3 + & \frac{3}{10}\theta + & \frac{1}{10}\theta + & \frac{1}{23}\theta + & \frac{3}{23}\theta + \\[4pt] + % + ac + & 3 + & \frac{3}{10}\co{\theta} + & \frac{1}{10}\co{\theta} + & \frac{1}{23}\co{\theta} + & \frac{3}{23}\co{\theta} + \\[4pt] + % + \co{a}, ab + & 0 + & \frac{7 + 3\theta}{10} + & 0 + & 0 + & 0 + \\[4pt] + % + \co{a}, ac + & 0 + & \frac{7 + 3\co{\theta}}{10} + & 0 + & 0 + & 0 + % + \\[4pt] + % + ab, ac + & 2 + & \frac{3}{10} + & \frac{3}{20} + & \frac{3}{46} + & \frac{3}{23} + \\[4pt] + % + \co{a}, ab, ac + & 1 + & 1 + & 1 + & \frac{10}{23} + & \frac{10}{23} + \\[4pt] + % + \hline + & + & + & Z = \frac{23}{10} + & + %& \Sigma = 1 + \end{array} + \end{equation*} +\end{description} + +So the prior distributions, denoted by the random variable $E$, of events and classes are: + +\begin{equation} + \begin{array}{l|ccccccccc} + \stablecore{e} & + \inconsistent & + \indepclass & + \co{a} & + ab & + ac & + \co{a}, ab & + \co{a}, ac & + ab, ac & + \co{a}, ab, ac + \\ \hline\\[-12pt] + + \pr{E = e} & + 0 & + 0 & + \frac{7}{207} & + \frac{1}{23}\theta & + \frac{1}{23}\co{\theta} & + 0 & + 0 & + \frac{3}{46} & + \frac{10}{23} + \\[4pt] + + \pr{E \in \class{e}} & + 0 & + 0 & + \frac{7}{23} & + \frac{3}{23}\theta & + \frac{3}{23}\co{\theta} & + 0 & + 0 & + \frac{3}{23} & + \frac{10}{23} + \end{array}\label{eq:sbf.prior} +\end{equation} +% +% +% +\subsubsection*{Testing the Prior Distributions} +% +% +% +These results can be \emph{tested by simulation} in a two-step process, where (1) a ``system'' is \emph{simulated}, to gather some ``observations'' and then (2) empirical distributions from those samples are \emph{related} with the prior distributions from \cref{eq:sbf.prior}. \Cref{tab:sbf.example,tab:sbf.examples.2.3} summarize some of those tests, where datasets of $n = 1000$ observations are generated and analyzed. + +\bigskip\noindent\textbf{Simulating a System.} Following some criteria, more or less related to the given program, a set of events, that represent observations, is generated. Possible simulation procedures include: +\begin{itemize} + % + \item \emph{Random.} Each sample is a \ac{RSL}. Additional sub-criteria may require, for example, consistent events, a \ac{RCE} simulation. + % + \item \emph{Model+Noise.} Gibbs' sampling \cite{geman84} tries to replicate the program model and also to add some noise. For example, let $\alpha, \beta, \gamma \in \intcc{0,1}$ be some parameters to control the sample generation. The first parameter, $\alpha$ is the ``out of model'' samples ratio; $\beta$ represents the choice $a$ or $\co{a}$ (explicit in the model) and $\gamma$ is the simulation representation of $\theta$. A single sample is then generated following the probabilistic choices below: + $$ + \begin{cases} + \alpha & \text{by \ac{RCE}} \\%[-2pt] + & + \begin{cases} + \beta & \co{a} \\%[-2pt] + & + \begin{cases} + \gamma & ab \\%[-2pt] + & ac + \end{cases} + \end{cases} + \end{cases}, + $$ + where + $$ + \begin{cases} + p & x \\%[-4pt] + & y + \end{cases} + $$ + denotes ``\emph{the value of $x$ with probability $p$, otherwise $y$}'' --- notice that $y$ might entail $x$ and \emph{vice-versa}: E.g.\ some $ab$ can be generated in the \ac{RCE}. + \item \emph{Other Processes.} Besides the two sample generations procedures above, any other processes and variations can be used. For example, requiring that one of $x, \co{x}$ literals is always in a sample or using specific distributions to guide the sampling of literals or events. +\end{itemize} + +\noindent\textbf{Relating the Empirical and the Prior Distributions.} The data from the simulated observations is used to test the prior distribution. Consider the prior, $\pr{E}$, and the empirical, $\pr{S}$, distributions and the following error function: +\begin{equation} + \err{\theta} := \sum_{e\in\fml{E}} \del{\pr{E = e} - \pr{S = e}}^2.\label{eq:err.e.s} +\end{equation} + +Since $E$ depends on $\theta$, one can ask how does the error varies with $\theta$, what is the \emph{optimal} (i.e.\ minimum) error value + \begin{equation} + \hat{\theta} := \arg\min_\theta \err{\theta}\label{eq:opt.err} + \end{equation} + and what does it tell us about the program. + + +\begin{table} + \begin{center} + $$ + \begin{array}{l|cc|c} + \stablecore{e} + & \#\set{S \in \class{e}} + & \pr{S \in \class{e}} + & \pr{E \in \class{e}} + \\ + \hline + % + \inconsistent + & 0 + & 0 + & 0 + \\[2pt] + % + \indepclass + & 24 + & \frac{24}{1000} + & 0 + \\[2pt] + % + \co{a} + & 647 + & \frac{647}{1000} + & \frac{7}{23} + \\[2pt] + % + ab + & 66 + & \frac{66}{1000} + & \frac{3}{23}\theta + \\[2pt] + % + ac + & 231 + & \frac{231}{1000} + & \frac{3}{23}\co{\theta} + \\[2pt] + % + \co{a}, ab + & 0 + & 0 + & 0 + \\[2pt] + % + \co{a}, ac + & 0 + & 0 + & 0 + % + \\[2pt] + % + ab, ac + & 7 + & \frac{7}{1000} + & \frac{3}{23} + \\[2pt] + % + \co{a}, ab, ac + & 25 + & \frac{25}{1000} + & \frac{10}{23} + \\[2pt] + \hline + & n = 1000 + \end{array} + $$ + \end{center} + + \caption{\emph{Experiment 1.} Results from an experiment where $n=1000$ samples where generated following the \emph{Model+Noise} procedure with parameters $\alpha = 0.1, \beta = 0.3, \gamma = 0.2$. The \emph{empirical} distribution is represented by the random variable $S$ while the \emph{prior}, as before, is denoted by $E$.}\label{tab:sbf.example} +\end{table} + +In order to illustrate this analysis, consider the experiment summarized in \cref{tab:sbf.example}: + +\begin{enumerate} + \item Equation \eqref{eq:err.e.s} becomes + $$ + \err{\theta} = \frac{20869963}{66125000} + \frac{477}{52900}\theta + \frac{18}{529}\theta^2. + $$ + \item The minimum of $\err{\theta}$ is at $\frac{477}{52900} + 2\frac{18}{529}\theta = 0$. Since this value is negative and $\theta \in \intcc{0,1}$, it must be $\hat{\theta} = 0$, and + $$ + \err{\hat{\theta}} = \frac{20869963}{66125000} \approx 0.31561. + $$ +\end{enumerate} + +The parameters $\alpha, \beta, \gamma$ of that experiment favour $ac$ over $ab$. In particular, setting $\gamma = 0.2$ means that in the simulation process, choices between $ab$ and $ac$ favour $ac$, 4 to 1. For completeness sake, we also describe one experiment that favours $ab$ over $ac$ (setting $\gamma=0.8$) and one balanced ($\gamma=0.5$). + +\begin{description} + \item[For $\gamma=0.8$,] the error function is + \begin{equation*} + \err{\theta} = \frac{188207311}{529000000} - \frac{21903}{264500} \theta + \frac{18}{529} \theta^{2} \approx 0.35579 - 0.08281 \theta + 0.03403 \theta ^2 + \end{equation*} + and, with $\theta\in\intcc{0, 1}$ the minimum is at $-0.08281 + 0.06805 \theta = 0$, \emph{i.e.}: + \begin{eqnarray*} + \hat{\theta} : \frac{0.08281}{0.06805} \approx 1.21683& >1. &\text{So,~} \hat{\theta} = 1, \\ + \err{\hat{\theta}} \approx 0.30699&. + \end{eqnarray*} + + \item[For $\gamma=0.5$,] the error function is + \begin{equation*} + \err{\theta} = \frac{10217413}{33062500} - \frac{2181}{66125} \theta + \frac{18}{529} \theta^{2}\approx 0.30903 - 0.03298 \theta + 0.03402 \theta ^2 + \end{equation*} + and, with $\theta\in\intcc{0, 1}$ the minimum is at $-0.03298 + 0.06804 \theta = 0$, \emph{i.e.}: + \begin{eqnarray*} + \hat{\theta} &\approx & + \frac{0.03298}{0.06804} + \approx 0.48471 + \approx \frac{1}{2}, \\ + \err{\hat{\theta}} &\approx & + 0.30104 + \end{eqnarray*} + +\end{description} + +\begin{table} + \begin{center} + $$ + \begin{array}{l|ccc} + \stablecore{e} + & \#\set{S_{0.2} \in \class{e}} + & \#\set{S_{0.8} \in \class{e}} + & \#\set{S_{0.5} \in \class{e}} + \\ + \hline + % + \inconsistent + & 0 + & 0 + & 0 + \\[2pt] + % + \indepclass + & 24 + & 28 + & 23 + \\[2pt] + % + \co{a} + & 647 + & 632 + & 614 + \\[2pt] + % + ab + & 66 + & 246 + & 165 + \\[2pt] + % + ac + & 231 + & 59 + & 169 + \\[2pt] + % + \co{a}, ab + & 0 + & 0 + & 0 + \\[2pt] + % + \co{a}, ac + & 0 + & 0 + & 0 + % + \\[2pt] + % + ab, ac + & 7 + & 8 + & 4 + \\[2pt] + % + \co{a}, ab, ac + & 25 + & 27 + & 25 + \end{array} + $$ + \end{center} + + \caption{\emph{Experiments 2 and 3.} Results from experiments, each with $n=1000$ samples generated following the \emph{Model+Noise} procedure, with parameters $\alpha = 0.1, \beta = 0.3, \gamma = 0.8$ (Experiment 2) and $\gamma=0.5$ (Experiment 3). Empirical distributions are represented by the random variables $S_{0.8}$ and $S_{0.5}$ respectively. Data from experience \cref{tab:sbf.example} is also included, and denoted by $S_{0.2}$, to provide reference.}\label{tab:sbf.examples.2.3} +\end{table} + +%\oldnote{under- and over- estimation} +These experiments show that data can indeed be used to estimate the parameters of the model. However, we observe that the estimated $\hat{\theta}$ has a tendency to over- or under- estimate the $\theta$ used to generate the samples. More precisely, in experiment \ref{tab:sbf.example} data is generated with $\gamma = 0.2$ (the surrogate of $\theta$) which is under-estimated with $\hat{\theta} = 0$ while in experiment 2, $\gamma = 0.8$ leads the over-estimation $\hat{\theta} = 1$. This suggests that we might need to refine the error estimation process. However, experiment 3 data results from $\gamma = 0.5$ and we've got $\hat{\theta} \approx 0.48471 \approx 0.5$, which is more in line with what is to be expected. +% +% +% +\subsection{An Example Involving Bayesian Networks}\label{subsec:example.bayesian.networks} +% +% +% +As it turns out, our framework is suitable to deal with more sophisticated cases, in particular cases involving bayesian networks. In order to illustrate this, in this section we see how the classical example of the Burglary, Earthquake, Alarm \cite{Judea88} works in our setting. This example is a commonly used example in bayesian networks because it illustrates reasoning under uncertainty. The gist of the example is given in \cref{Figure_Alarm}. It involves a simple network of events and conditional probabilities. + +The events are: Burglary ($B$), Earthquake ($E$), Alarm ($A$), Mary calls ($M$) and John calls ($J$). The initial events $B$ and $E$ are assumed to be independent events that occur with probabilities $\pr{B}$ and $\pr{E}$, respectively. There is an alarm system that can be triggered by either of the initial events $B$ and $E$. The probability of the alarm going off is a conditional probability given that $B$ and $E$ have occurred. One denotes these probabilities, as per usual, by $\pr{A \given B}$, and $\pr{A \given E}$. There are two neighbors, Mary and John who have agreed to call if they hear the alarm. The probability that they do actually call is also a conditional probability denoted by $\pr{M \given A}$ and $\pr{J \given A}$, respectively. + +\begin{figure} + \begin{center} + \begin{tikzpicture}[node distance=2.5cm] + + % Nodes + \node[smodel, circle] (A) {A}; + \node[tchoice, above right of=A] (B) {B}; + \node[tchoice, above left of=A] (E) {E}; + \node[tchoice, below left of=A] (M) {M}; + \node[tchoice, below right of=A] (J) {J}; + + % Edges + \draw[->] (B) to[bend left] (A) node[right,xshift=1.1cm,yshift=0.8cm] {\footnotesize{$\pr{B}=0.001$}} ; + \draw[->] (E) to[bend right] (A) node[left, xshift=-1.4cm,yshift=0.8cm] {\footnotesize{$\pr{E}=0.002$}} ; + \draw[->] (A) to[bend right] (M) node[left,xshift=0.2cm,yshift=0.7cm] {\footnotesize{$\pr{M \given A}$}}; + \draw[->] (A) to[bend left] (J) node[right,xshift=-0.2cm,yshift=0.7cm] {\footnotesize{$\pr{J \given A}$}} ; + \end{tikzpicture} + \end{center} + + \begin{multicols}{3} + + \footnotesize{ + \begin{equation*} + \begin{split} + &\pr{M \given A}\\ + & \begin{array}{c|cc} + & m & \neg m \\ + \hline + a & 0.9 & 0.1 \\ + \neg a & 0.05 & 0.95 + \end{array} + \end{split} + \end{equation*} + } + + \footnotesize{ + \begin{equation*} + \begin{split} + &\pr{J \given A}\\ + & \begin{array}{c|cc} + & j & \neg j \\ + \hline + a & 0.7 & 0.3 \\ + \neg a & 0.01 & 0.99 + \end{array} + \end{split} + \end{equation*} + } + \footnotesize{ + \begin{equation*} + \begin{split} + \pr{A \given B \wedge E}\\ + \begin{array}{c|c|cc} + & & a & \neg a \\ + \hline + b & e & 0.95 & 0.05 \\ + b & \neg e & 0.94 & 0.06 \\ + \neg b & e & 0.29 & 0.71 \\ + \neg b & \neg e & 0.001 & 0.999 + \end{array} + \end{split} + \end{equation*} + } + \end{multicols} + \caption{The Earthquake, Burglary, Alarm model} + \label{Figure_Alarm} +\end{figure} + +We follow the convention of representing the (upper case) random variable $X$ by the lower case $x$. +% +Considering the probabilities given in \cref{Figure_Alarm} we obtain the following spe\-ci\-fi\-ca\-tion: + +\begin{equation*} + \begin{aligned} + \probfact{0.001}{b} & ,\cr + \probfact{0.002}{e} & ,\cr + \end{aligned} + \label{eq:not_so_simple_example} +\end{equation*} + +For the table giving the probability $\pr{M \given A}$ we obtain the program: + +\begin{equation*} + \begin{aligned} + \probfact{0.9}{\condsymb{m}{a}} & ,\cr + \probfact{0.05}{\condsymb{m}{\co{a}}} & ,\cr + m & \leftarrow a \wedge \condsymb{m}{a},\cr + m & \leftarrow \neg a \wedge \condsymb{m}{\co{a}}. + \end{aligned} +\end{equation*} + +The latter program can be simplified (abusing notation) by writing $\probrule{0.9}{m}{a}$ and $\probrule{0.05}{m}{\neg a}$. +%\note{SPA: \emph{parece-me que pode ser feito assim, mas estritamente falando já não corresponde à forma inicialmente anunciada} --- ``abusing notation''} + +Similarly, for the probability $\pr{J \given A}$ we obtain + +\begin{equation*} + \begin{aligned} + \probrule{0.7}{j}{&a}, \\ + \probrule{0.01}{j}{&\neg a}, + \end{aligned} +\end{equation*} + +Finally, for the probability $\pr{A \given B \wedge E}$ we obtain + +\begin{equation*} + \begin{aligned} + \probrule{0.95}{a}{b, e}, & & & + \probrule{0.94}{a}{b, \co{e}},\cr + \probrule{0.29}{a}{\co{b}, e}, & & & + \probrule{0.001}{a}{\co{b}, \co{e}}. + \end{aligned} +\end{equation*} + +One can then proceed as in the previous subsection and analyze this example. The details of such analysis are not given here since they are analogous, albeit admittedly more cumbersome. +% +% +% +\section{Discussion and Future Work} +% +% +% +This work is a first venture into expressing probability distributions using algebraic expressions derived from a logical program, in particular an \ac{ASP}. +We would like to point out that there is still much to explore concerning the full expressive power of logic programs and \ac{ASP} programs. So far, we have not considered recursion, logical variables or functional symbols. Also, there is still little effort to articulate with the related fields, probabilistic logical programming, machine learning, inductive programming, \emph{etc.} + +The equivalence relation from \cref{def:equiv.rel} identifies the $s \subseteq e$ and $e \subseteq s$ cases. Relations that distinguish such cases might enable better relations between the models and processes from the \aclp{SM}. + +The example from \cref{subsec:example.bayesian.networks} shows that the theory, methodology, and tools, from bayesian networks can be adapted to our approach. The connection with Markov Fields \cite{kindermann80} is left for future work. An example of a ``program selection'' application (as mentioned in \cref{item:program.selection}, \cref{sec:example.1}) is also left for future work. + +%\oldnote{under- over- estimate} +Related with the remark at the end of \cref{subsec:sbf.example}, on the tendency of $\hat{\theta}$ to under- or over- estimate $\theta$, notice that the error function in \eqref{eq:err.e.s} expresses only one of many possible ``distances'' between the empirical and prior distributions. Variations include normalizing this function by the size of $\fml{E}$ or using the \acl{KL} divergence. The key contribution of this function in this work is to find an optimal $\theta$. Moreover, further experiments, not included in this paper, with $\alpha = 0.0$, lead to $\hat{\theta} \approx \gamma$, \emph{i.e.}\ setting the prior noise to zero leads to full recovering $\theta$ from the observations. + +We decided to set the measure of inconsistent events to $0$ but, maybe, in some cases, we shouldn't. For example, since observations may be affected by noise, one can expect inconsistencies between the literals of an observation to occur. +% +% +% +\section*{Acknowledgements} +% +% +% +This work is supported by NOVALINCS (UIDB/04516/2020) with the financial support of FCT.IP. +The third author acknowledges the support of FCT - Funda\c{c}\~ao para a Ci\^{e}ncia e Tecnologia under the project UIDP/04674/2020, and the research center CIMA -- Centro de Investigação em Matemática e Aplicações. + +The authors grateful to Lígia Henriques-Rodrigues, Matthias Knorr and Ricardo Gonçalves for valuable comments on a preliminary version of this paper, and Alice Martins for contributions on software. +% +% +% +\printbibliography +% +% +% +\end{document} \ No newline at end of file diff --git a/text/paper_01/LLNCS/asp.bib b/text/paper_01/LLNCS/asp.bib new file mode 100644 index 0000000..6f1b94f --- /dev/null +++ b/text/paper_01/LLNCS/asp.bib @@ -0,0 +1,15 @@ + +@article{lifschitz_answer_2002, + title = {Answer set programming and plan generation}, + volume = {138}, + issn = {0004-3702}, + url = {https://www.sciencedirect.com/science/article/pii/S0004370202001868}, + doi = {https://doi.org/10.1016/S0004-3702(02)00186-8}, + abstract = {The idea of answer set programming is to represent a given computational problem by a logic program whose answer sets correspond to solutions, and then use an answer set solver, such as smodels or dlv, to find an answer set for this program. Applications of this method to planning are related to the line of research on the frame problem that started with the invention of formal nonmonotonic reasoning in 1980.}, + number = {1}, + journal = {Artificial Intelligence}, + author = {Lifschitz, Vladimir}, + year = {2002}, + keywords = {Answer sets, Default logic, Frame problem, Logic programming, Planning}, + pages = {39--54}, +} diff --git a/text/paper_01/LLNCS/example_annotASP2plainASP.txt b/text/paper_01/LLNCS/example_annotASP2plainASP.txt new file mode 100644 index 0000000..9b80363 --- /dev/null +++ b/text/paper_01/LLNCS/example_annotASP2plainASP.txt @@ -0,0 +1,14 @@ +a : 0.3. -a:0.7 +b : 0.5. -b:0.5 +c : 0.1. -c:0.9 + +t1 = { } => + +P(T = t1) = \sum_ + + +0.3:: a. +b ; c :- a. + +a ; -a. +b ; c :- a. diff --git a/text/paper_01/LLNCS/extended_abstract.txt b/text/paper_01/LLNCS/extended_abstract.txt new file mode 100644 index 0000000..cdc48c4 --- /dev/null +++ b/text/paper_01/LLNCS/extended_abstract.txt @@ -0,0 +1,7 @@ +We address the problem of extending probability from the total choices of an ASP program to the standard models, and from there to general events. +% +Our approach is algebraic in the sense that it relies on an equivalence relation over the set of events and uncertainty is expressed with variables and polynomial expressions. +% +We illustrate our methods with two examples, one of which shows a connection to bayesian networks. +% +Possible applications of the process described here include assigning a score to a logic program with respect to the empiric distribution of a given dataset, which in turn can be used by evolutionary algorithms searching for optimal models of that dataset. \ No newline at end of file diff --git a/text/paper_01/LLNCS/foundations.bib b/text/paper_01/LLNCS/foundations.bib new file mode 100644 index 0000000..f04a9c0 --- /dev/null +++ b/text/paper_01/LLNCS/foundations.bib @@ -0,0 +1,17 @@ + +@book{riguzzi2022foundations, + address = {New York}, + edition = {1}, + title = {Foundations of {Probabilistic} {Logic} {Programming}: {Languages}, {Semantics}, {Inference} and {Learning}}, + isbn = {978-1-00-333819-2}, + shorttitle = {Foundations of {Probabilistic} {Logic} {Programming}}, + url = {https://www.taylorfrancis.com/books/9781003338192}, + language = {en}, + urldate = {2023-03-01}, + publisher = {River Publishers}, + author = {Riguzzi, Fabrizio}, + month = sep, + year = {2022}, + doi = {10.1201/9781003338192}, + file = {Riguzzi - 2018 - Foundations of probabilistic logic programming la.pdf:/home/fc/sci/zotero/storage/X84FP7FV/Riguzzi - 2018 - Foundations of probabilistic logic programming la.pdf:application/pdf}, +} diff --git a/text/paper_01/LLNCS/llncs.cls b/text/paper_01/LLNCS/llncs.cls new file mode 100644 index 0000000..040102a --- /dev/null +++ b/text/paper_01/LLNCS/llncs.cls @@ -0,0 +1,1208 @@ +% LLNCS DOCUMENT CLASS -- version 2.19 (31-Mar-2014) +% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science +% +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{llncs}[2014/03/31 v2.19 +^^J LaTeX document class for Lecture Notes in Computer Science] +% Options +\let\if@envcntreset\iffalse +\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue} +\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y} +\DeclareOption{oribibl}{\let\oribibl=Y} +\let\if@custvec\iftrue +\DeclareOption{orivec}{\let\if@custvec\iffalse} +\let\if@envcntsame\iffalse +\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue} +\let\if@envcntsect\iffalse +\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue} +\let\if@runhead\iffalse +\DeclareOption{runningheads}{\let\if@runhead\iftrue} + +\let\if@openright\iftrue +\let\if@openbib\iffalse +\DeclareOption{openbib}{\let\if@openbib\iftrue} + +% languages +\let\switcht@@therlang\relax +\def\ds@deutsch{\def\switcht@@therlang{\switcht@deutsch}} +\def\ds@francais{\def\switcht@@therlang{\switcht@francais}} + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} + +\ProcessOptions + +\LoadClass[twoside]{article} +\RequirePackage{multicol} % needed for the list of participants, index +\RequirePackage{aliascnt} + +\setlength{\textwidth}{12.2cm} +\setlength{\textheight}{19.3cm} +\renewcommand\@pnumwidth{2em} +\renewcommand\@tocrmarg{3.5em} +% +\def\@dottedtocline#1#2#3#4#5{% + \ifnum #1>\c@tocdepth \else + \vskip \z@ \@plus.2\p@ + {\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \parindent #2\relax\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima #3\relax + \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip + {#4}\nobreak + \leaders\hbox{$\m@th + \mkern \@dotsep mu\hbox{.}\mkern \@dotsep + mu$}\hfill + \nobreak + \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}% + \par}% + \fi} +% +\def\switcht@albion{% +\def\abstractname{Abstract.}% +\def\ackname{Acknowledgement.}% +\def\andname{and}% +\def\lastandname{\unskip, and}% +\def\appendixname{Appendix}% +\def\chaptername{Chapter}% +\def\claimname{Claim}% +\def\conjecturename{Conjecture}% +\def\contentsname{Table of Contents}% +\def\corollaryname{Corollary}% +\def\definitionname{Definition}% +\def\examplename{Example}% +\def\exercisename{Exercise}% +\def\figurename{Fig.}% +\def\keywordname{{\bf Keywords:}}% +\def\indexname{Index}% +\def\lemmaname{Lemma}% +\def\contriblistname{List of Contributors}% +\def\listfigurename{List of Figures}% +\def\listtablename{List of Tables}% +\def\mailname{{\it Correspondence to\/}:}% +\def\noteaddname{Note added in proof}% +\def\notename{Note}% +\def\partname{Part}% +\def\problemname{Problem}% +\def\proofname{Proof}% +\def\propertyname{Property}% +\def\propositionname{Proposition}% +\def\questionname{Question}% +\def\remarkname{Remark}% +\def\seename{see}% +\def\solutionname{Solution}% +\def\subclassname{{\it Subject Classifications\/}:}% +\def\tablename{Table}% +\def\theoremname{Theorem}} +\switcht@albion +% Names of theorem like environments are already defined +% but must be translated if another language is chosen +% +% French section +\def\switcht@francais{%\typeout{On parle francais.}% + \def\abstractname{R\'esum\'e.}% + \def\ackname{Remerciements.}% + \def\andname{et}% + \def\lastandname{ et}% + \def\appendixname{Appendice}% + \def\chaptername{Chapitre}% + \def\claimname{Pr\'etention}% + \def\conjecturename{Hypoth\`ese}% + \def\contentsname{Table des mati\`eres}% + \def\corollaryname{Corollaire}% + \def\definitionname{D\'efinition}% + \def\examplename{Exemple}% + \def\exercisename{Exercice}% + \def\figurename{Fig.}% + \def\keywordname{{\bf Mots-cl\'e:}}% + \def\indexname{Index}% + \def\lemmaname{Lemme}% + \def\contriblistname{Liste des contributeurs}% + \def\listfigurename{Liste des figures}% + \def\listtablename{Liste des tables}% + \def\mailname{{\it Correspondence to\/}:}% + \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}% + \def\notename{Remarque}% + \def\partname{Partie}% + \def\problemname{Probl\`eme}% + \def\proofname{Preuve}% + \def\propertyname{Caract\'eristique}% +%\def\propositionname{Proposition}% + \def\questionname{Question}% + \def\remarkname{Remarque}% + \def\seename{voir}% + \def\solutionname{Solution}% + \def\subclassname{{\it Subject Classifications\/}:}% + \def\tablename{Tableau}% + \def\theoremname{Th\'eor\`eme}% +} +% +% German section +\def\switcht@deutsch{%\typeout{Man spricht deutsch.}% + \def\abstractname{Zusammenfassung.}% + \def\ackname{Danksagung.}% + \def\andname{und}% + \def\lastandname{ und}% + \def\appendixname{Anhang}% + \def\chaptername{Kapitel}% + \def\claimname{Behauptung}% + \def\conjecturename{Hypothese}% + \def\contentsname{Inhaltsverzeichnis}% + \def\corollaryname{Korollar}% +%\def\definitionname{Definition}% + \def\examplename{Beispiel}% + \def\exercisename{\"Ubung}% + \def\figurename{Abb.}% + \def\keywordname{{\bf Schl\"usselw\"orter:}}% + \def\indexname{Index}% +%\def\lemmaname{Lemma}% + \def\contriblistname{Mitarbeiter}% + \def\listfigurename{Abbildungsverzeichnis}% + \def\listtablename{Tabellenverzeichnis}% + \def\mailname{{\it Correspondence to\/}:}% + \def\noteaddname{Nachtrag}% + \def\notename{Anmerkung}% + \def\partname{Teil}% +%\def\problemname{Problem}% + \def\proofname{Beweis}% + \def\propertyname{Eigenschaft}% +%\def\propositionname{Proposition}% + \def\questionname{Frage}% + \def\remarkname{Anmerkung}% + \def\seename{siehe}% + \def\solutionname{L\"osung}% + \def\subclassname{{\it Subject Classifications\/}:}% + \def\tablename{Tabelle}% +%\def\theoremname{Theorem}% +} + +% Ragged bottom for the actual page +\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil +\global\let\@textbottom\relax}} + +\renewcommand\small{% + \@setfontsize\small\@ixpt{11}% + \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@}% + \belowdisplayskip \abovedisplayskip +} + +\frenchspacing +\widowpenalty=10000 +\clubpenalty=10000 + +\setlength\oddsidemargin {63\p@} +\setlength\evensidemargin {63\p@} +\setlength\marginparwidth {90\p@} + +\setlength\headsep {16\p@} + +\setlength\footnotesep{7.7\p@} +\setlength\textfloatsep{8mm\@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {8mm\@plus 2\p@ \@minus 2\p@} + +\setcounter{secnumdepth}{2} + +\newcounter {chapter} +\renewcommand\thechapter {\@arabic\c@chapter} + +\newif\if@mainmatter \@mainmattertrue +\newcommand\frontmatter{\cleardoublepage + \@mainmatterfalse\pagenumbering{Roman}} +\newcommand\mainmatter{\cleardoublepage + \@mainmattertrue\pagenumbering{arabic}} +\newcommand\backmatter{\if@openright\cleardoublepage\else\clearpage\fi + \@mainmatterfalse} + +\renewcommand\part{\cleardoublepage + \thispagestyle{empty}% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \null\vfil + \secdef\@part\@spart} + +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname~\thepart + \par + \vskip 20\p@ + \fi + \Huge \bfseries #2\par}% + \@endpart} +\def\@spart#1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries #1\par}% + \@endpart} +\def\@endpart{\vfil\newpage + \if@twoside + \null + \thispagestyle{empty}% + \newpage + \fi + \if@tempswa + \twocolumn + \fi} + +\newcommand\chapter{\clearpage + \thispagestyle{empty}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} +\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +\def\@makechapterhead#1{% +% \vspace*{50\p@}% + {\centering + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \large\bfseries \@chapapp{} \thechapter + \par\nobreak + \vskip 20\p@ + \fi + \fi + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} +\def\@schapter#1{\if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}% + \@afterheading + \fi} +\def\@makeschapterhead#1{% +% \vspace*{50\p@}% + {\centering + \normalfont + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} + +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {12\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\large\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {8\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\normalsize\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\bfseries\boldmath}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {-12\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\itshape}} +\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use + \string\subparagraph\space with this class}\vskip0.5cm +You should not use \verb|\subparagraph| with this class.\vskip0.5cm} + +\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00} +\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01} +\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02} +\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03} +\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04} +\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05} +\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06} +\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07} +\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08} +\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09} +\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A} + +\let\footnotesize\small + +\if@custvec +\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle#1$}} +{\mbox{\boldmath$\textstyle#1$}} +{\mbox{\boldmath$\scriptstyle#1$}} +{\mbox{\boldmath$\scriptscriptstyle#1$}}} +\fi + +\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}} +\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil +\penalty50\hskip1em\null\nobreak\hfil\squareforqed +\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi} + +\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr\gets\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +\gets\cr\to\cr}}}}} +\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +<\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr +>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.8pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.3pt}<\cr}}}}} +\def\bbbr{{\rm I\!R}} %reelle Zahlen +\def\bbbm{{\rm I\!M}} +\def\bbbn{{\rm I\!N}} %natuerliche Zahlen +\def\bbbf{{\rm I\!F}} +\def\bbbh{{\rm I\!H}} +\def\bbbk{{\rm I\!K}} +\def\bbbp{{\rm I\!P}} +\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l} +{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}} +\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}} +\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbs{{\mathchoice +{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}} +\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}} +{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}} + +\let\ts\, + +\setlength\leftmargini {17\p@} +\setlength\leftmargin {\leftmargini} +\setlength\leftmarginii {\leftmargini} +\setlength\leftmarginiii {\leftmargini} +\setlength\leftmarginiv {\leftmargini} +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} + +\def\@listI{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@} +\let\@listi\@listI +\@listi +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus2\p@ \@minus\p@} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus\p@\@minus\p@ + \parsep \z@ + \partopsep \p@ \@plus\z@ \@minus\p@} + +\renewcommand\labelitemi{\normalfont\bfseries --} +\renewcommand\labelitemii{$\m@th\bullet$} + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\def\tableofcontents{\chapter*{\contentsname\@mkboth{{\contentsname}}% + {{\contentsname}}} + \def\authcount##1{\setcounter{auco}{##1}\setcounter{@auth}{1}} + \def\lastand{\ifnum\value{auco}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{auco}% + \lastand + \else + \unskip, + \fi}% + \@starttoc{toc}\if@restonecol\twocolumn\fi} + +\def\l@part#1#2{\addpenalty{\@secpenalty}% + \addvspace{2em plus\p@}% % space above part line + \begingroup + \parindent \z@ + \rightskip \z@ plus 5em + \hrule\vskip5pt + \large % same size as for a contribution heading + \bfseries\boldmath % set line in boldface + \leavevmode % TeX command to enter horizontal mode. + #1\par + \vskip5pt + \hrule + \vskip1pt + \nobreak % Never break after part entry + \endgroup} + +\def\@dotsep{2} + +\let\phantomsection=\relax + +\def\hyperhrefextend{\ifx\hyper@anchor\@undefined\else +{}\fi} + +\def\addnumcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline + {\thechapter}#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmarkwop#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}}% + +\def\@adcmk[#1]{\ifcase #1 \or +\def\@gtempa{\addnumcontentsmark}% + \or \def\@gtempa{\addcontentsmark}% + \or \def\@gtempa{\addcontentsmarkwop}% + \fi\@gtempa{toc}{chapter}% +} +\def\addtocmark{% +\phantomsection +\@ifnextchar[{\@adcmk}{\@adcmk[3]}% +} + +\def\l@chapter#1#2{\addpenalty{-\@highpenalty} + \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + {\large\bfseries\boldmath#1}\ifx0#2\hfil\null + \else + \nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}% + \fi\par + \penalty\@highpenalty \endgroup} + +\def\l@title#1#2{\addpenalty{-\@highpenalty} + \addvspace{8pt plus 1pt} + \@tempdima \z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + #1\nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}\par + \penalty\@highpenalty \endgroup} + +\def\l@author#1#2{\addpenalty{\@highpenalty} + \@tempdima=15\p@ %\z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima %\hskip -\leftskip + \textit{#1}\par + \penalty\@highpenalty \endgroup} + +\setcounter{tocdepth}{0} +\newdimen\tocchpnum +\newdimen\tocsecnum +\newdimen\tocsectotal +\newdimen\tocsubsecnum +\newdimen\tocsubsectotal +\newdimen\tocsubsubsecnum +\newdimen\tocsubsubsectotal +\newdimen\tocparanum +\newdimen\tocparatotal +\newdimen\tocsubparanum +\tocchpnum=\z@ % no chapter numbers +\tocsecnum=15\p@ % section 88. plus 2.222pt +\tocsubsecnum=23\p@ % subsection 88.8 plus 2.222pt +\tocsubsubsecnum=27\p@ % subsubsection 88.8.8 plus 1.444pt +\tocparanum=35\p@ % paragraph 88.8.8.8 plus 1.666pt +\tocsubparanum=43\p@ % subparagraph 88.8.8.8.8 plus 1.888pt +\def\calctocindent{% +\tocsectotal=\tocchpnum +\advance\tocsectotal by\tocsecnum +\tocsubsectotal=\tocsectotal +\advance\tocsubsectotal by\tocsubsecnum +\tocsubsubsectotal=\tocsubsectotal +\advance\tocsubsubsectotal by\tocsubsubsecnum +\tocparatotal=\tocsubsubsectotal +\advance\tocparatotal by\tocparanum} +\calctocindent + +\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}} +\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}} +\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}} +\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}} +\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}} + +\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}} + \@starttoc{lof}\if@restonecol\twocolumn\fi} +\def\l@figure{\@dottedtocline{1}{0em}{1.5em}} + +\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}} + \@starttoc{lot}\if@restonecol\twocolumn\fi} +\let\l@table\l@figure + +\renewcommand\listoffigures{% + \section*{\listfigurename + \@mkboth{\listfigurename}{\listfigurename}}% + \@starttoc{lof}% + } + +\renewcommand\listoftables{% + \section*{\listtablename + \@mkboth{\listtablename}{\listtablename}}% + \@starttoc{lot}% + } + +\ifx\oribibl\undefined +\ifx\citeauthoryear\undefined +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \def\@biblabel##1{##1.} + \small + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw + {\let\protect\noexpand\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} +\newcount\@tempcntc +\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi + \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do + {\@ifundefined + {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries + ?}\@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}% + \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne + \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}% + \else + \advance\@tempcntb\@ne + \ifnum\@tempcntb=\@tempcntc + \else\advance\@tempcntb\m@ne\@citeo + \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}} +\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else + \@citea\def\@citea{,\,\hskip\z@skip}% + \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else + {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else + \def\@citea{--}\fi + \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi} +\else +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \small + \list{}% + {\settowidth\labelwidth{}% + \leftmargin\parindent + \itemindent=-\parindent + \labelsep=\z@ + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} + \def\@cite#1{#1}% + \def\@lbibitem[#1]#2{\item[]\if@filesw + {\def\protect##1{\string ##1\space}\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} + \fi +\else +\@cons\@openbib@code{\noexpand\small} +\fi + +\def\idxquad{\hskip 10\p@}% space that divides entry from number + +\def\@idxitem{\par\hangindent 10\p@} + +\def\subitem{\par\setbox0=\hbox{--\enspace}% second order + \noindent\hangindent\wd0\box0}% index entry + +\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third + \noindent\hangindent\wd0\box0}% order index entry + +\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax} + +\renewenvironment{theindex} + {\@mkboth{\indexname}{\indexname}% + \thispagestyle{empty}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\par + \def\,{\relax\ifmmode\mskip\thinmuskip + \else\hskip0.2em\ignorespaces\fi}% + \normalfont\small + \begin{multicols}{2}[\@makeschapterhead{\indexname}]% + } + {\end{multicols}} + +\renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width 2truecm + \kern2.6\p@} + \newdimen\fnindent + \fnindent1em +\long\def\@makefntext#1{% + \parindent \fnindent% + \leftskip \fnindent% + \noindent + \llap{\hb@xt@1em{\hss\@makefnmark\ }}\ignorespaces#1} + +\long\def\@makecaption#1#2{% + \small + \vskip\abovecaptionskip + \sbox\@tempboxa{{\bfseries #1.} #2}% + \ifdim \wd\@tempboxa >\hsize + {\bfseries #1.} #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + +\def\fps@figure{htbp} +\def\fnum@figure{\figurename\thinspace\thefigure} +\def \@floatboxreset {% + \reset@font + \small + \@setnobreak + \@setminipage +} +\def\fps@table{htbp} +\def\fnum@table{\tablename~\thetable} +\renewenvironment{table} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@float{table}} + {\end@float} +\renewenvironment{table*} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@dblfloat{table}} + {\end@dblfloat} + +\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname + ext@#1\endcsname}{#1}{\protect\numberline{\csname + the#1\endcsname}{\ignorespaces #2}}\begingroup + \@parboxrestore + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} + +% LaTeX does not provide a command to enter the authors institute +% addresses. The \institute command is defined here. + +\newcounter{@inst} +\newcounter{@auth} +\newcounter{auco} +\newdimen\instindent +\newbox\authrun +\newtoks\authorrunning +\newtoks\tocauthor +\newbox\titrun +\newtoks\titlerunning +\newtoks\toctitle + +\def\clearheadinfo{\gdef\@author{No Author Given}% + \gdef\@title{No Title Given}% + \gdef\@subtitle{}% + \gdef\@institute{No Institute Given}% + \gdef\@thanks{}% + \global\titlerunning={}\global\authorrunning={}% + \global\toctitle={}\global\tocauthor={}} + +\def\institute#1{\gdef\@institute{#1}} + +\def\institutename{\par + \begingroup + \parskip=\z@ + \parindent=\z@ + \setcounter{@inst}{1}% + \def\and{\par\stepcounter{@inst}% + \noindent$^{\the@inst}$\enspace\ignorespaces}% + \setbox0=\vbox{\def\thanks##1{}\@institute}% + \ifnum\c@@inst=1\relax + \gdef\fnnstart{0}% + \else + \xdef\fnnstart{\c@@inst}% + \setcounter{@inst}{1}% + \noindent$^{\the@inst}$\enspace + \fi + \ignorespaces + \@institute\par + \endgroup} + +\def\@fnsymbol#1{\ensuremath{\ifcase#1\or\star\or{\star\star}\or + {\star\star\star}\or \dagger\or \ddagger\or + \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger + \or \ddagger\ddagger \else\@ctrerr\fi}} + +\def\inst#1{\unskip$^{#1}$} +\def\fnmsep{\unskip$^,$} +\def\email#1{{\tt#1}} +\AtBeginDocument{\@ifundefined{url}{\def\url#1{#1}}{}% +\@ifpackageloaded{babel}{% +\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}% +\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}% +\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}% +\@ifundefined{extrasngerman}{}{\addto\extrasngerman{\switcht@deutsch}}% +}{\switcht@@therlang}% +\providecommand{\keywords}[1]{\par\addvspace\baselineskip +\noindent\keywordname\enspace\ignorespaces#1}% +} +\def\homedir{\~{ }} + +\def\subtitle#1{\gdef\@subtitle{#1}} +\clearheadinfo +% +%%% to avoid hyperref warnings +\providecommand*{\toclevel@author}{999} +%%% to make title-entry parent of section-entries +\providecommand*{\toclevel@title}{0} +% +\renewcommand\maketitle{\newpage +\phantomsection + \refstepcounter{chapter}% + \stepcounter{section}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{figure}{0} + \setcounter{table}{0} + \setcounter{equation}{0} + \setcounter{footnote}{0}% + \begingroup + \parindent=\z@ + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi + \thispagestyle{empty}\@thanks +% + \def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}% + \def\thanks##1{\unskip{}}\def\fnmsep{\unskip}% + \instindent=\hsize + \advance\instindent by-\headlineindent + \if!\the\toctitle!\addcontentsline{toc}{title}{\@title}\else + \addcontentsline{toc}{title}{\the\toctitle}\fi + \if@runhead + \if!\the\titlerunning!\else + \edef\@title{\the\titlerunning}% + \fi + \global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}% + \ifdim\wd\titrun>\instindent + \typeout{Title too long for running head. Please supply}% + \typeout{a shorter form with \string\titlerunning\space prior to + \string\maketitle}% + \global\setbox\titrun=\hbox{\small\rm + Title Suppressed Due to Excessive Length}% + \fi + \xdef\@title{\copy\titrun}% + \fi +% + \if!\the\tocauthor!\relax + {\def\and{\noexpand\protect\noexpand\and}% + \protected@xdef\toc@uthor{\@author}}% + \else + \def\\{\noexpand\protect\noexpand\newline}% + \protected@xdef\scratch{\the\tocauthor}% + \protected@xdef\toc@uthor{\scratch}% + \fi + \addtocontents{toc}{\noexpand\protect\noexpand\authcount{\the\c@auco}}% + \addcontentsline{toc}{author}{\toc@uthor}% + \if@runhead + \if!\the\authorrunning! + \value{@inst}=\value{@auth}% + \setcounter{@auth}{1}% + \else + \edef\@author{\the\authorrunning}% + \fi + \global\setbox\authrun=\hbox{\small\unboldmath\@author\unskip}% + \ifdim\wd\authrun>\instindent + \typeout{Names of authors too long for running head. Please supply}% + \typeout{a shorter form with \string\authorrunning\space prior to + \string\maketitle}% + \global\setbox\authrun=\hbox{\small\rm + Authors Suppressed Due to Excessive Length}% + \fi + \xdef\@author{\copy\authrun}% + \markboth{\@author}{\@title}% + \fi + \endgroup + \setcounter{footnote}{\fnnstart}% + \clearheadinfo} +% +\def\@maketitle{\newpage + \markboth{}{}% + \def\lastand{\ifnum\value{@inst}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{@inst}% + \lastand + \else + \unskip, + \fi}% + \begin{center}% + \let\newline\\ + {\Large \bfseries\boldmath + \pretolerance=10000 + \@title \par}\vskip .8cm +\if!\@subtitle!\else {\large \bfseries\boldmath + \vskip -.65cm + \pretolerance=10000 + \@subtitle \par}\vskip .8cm\fi + \setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}% + \def\thanks##1{}\@author}% + \global\value{@inst}=\value{@auth}% + \global\value{auco}=\value{@auth}% + \setcounter{@auth}{1}% +{\lineskip .5em +\noindent\ignorespaces +\@author\vskip.35cm} + {\small\institutename} + \end{center}% + } + +% definition of the "\spnewtheorem" command. +% +% Usage: +% +% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font} +% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font} +% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font} +% +% New is "cap_font" and "body_font". It stands for +% fontdefinition of the caption and the text itself. +% +% "\spnewtheorem*" gives a theorem without number. +% +% A defined spnewthoerem environment is used as described +% by Lamport. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\@thmcountersep{} +\def\@thmcounterend{.} + +\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}} + +% definition of \spnewtheorem with number + +\def\@spnthm#1#2{% + \@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}} +\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}} + +\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@addtoreset{#1}{#3}% + \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand + \csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spothm#1[#2]#3#4#5{% + \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\newaliascnt{#1}{#2}% + \expandafter\xdef\csname #1name\endcsname{#3}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}}} + +\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\refstepcounter{#1}% +\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}} + +\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}% + \ignorespaces} + +\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname + the#1\endcsname}{#5}{#3}{#4}\ignorespaces} + +\def\@spbegintheorem#1#2#3#4{\trivlist + \item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4} + +\def\@spopargbegintheorem#1#2#3#4#5{\trivlist + \item[\hskip\labelsep{#4#1\ #2}]{#4(#3)\@thmcounterend\ }#5} + +% definition of \spnewtheorem* without number + +\def\@sthm#1#2{\@Ynthm{#1}{#2}} + +\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}} + +\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces} + +\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1} + {#4}{#2}{#3}\ignorespaces} + +\def\@Begintheorem#1#2#3{#3\trivlist + \item[\hskip\labelsep{#2#1\@thmcounterend}]} + +\def\@Opargbegintheorem#1#2#3#4{#4\trivlist + \item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }} + +\if@envcntsect + \def\@thmcountersep{.} + \spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape} +\else + \spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape} + \if@envcntreset + \@addtoreset{theorem}{section} + \else + \@addtoreset{theorem}{chapter} + \fi +\fi + +%definition of divers theorem environments +\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily} +\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily} +\if@envcntsame % alle Umgebungen wie Theorem. + \def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}} +\else % alle Umgebungen mit eigenem Zaehler + \if@envcntsect % mit section numeriert + \def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}} + \else % nicht mit section numeriert + \if@envcntreset + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{section}} + \else + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{chapter}}% + \fi + \fi +\fi +\spn@wtheorem{case}{Case}{\itshape}{\rmfamily} +\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily} +\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape} +\spn@wtheorem{definition}{Definition}{\bfseries}{\itshape} +\spn@wtheorem{example}{Example}{\itshape}{\rmfamily} +\spn@wtheorem{exercise}{Exercise}{\itshape}{\rmfamily} +\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape} +\spn@wtheorem{note}{Note}{\itshape}{\rmfamily} +\spn@wtheorem{problem}{Problem}{\itshape}{\rmfamily} +\spn@wtheorem{property}{Property}{\itshape}{\rmfamily} +\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape} +\spn@wtheorem{question}{Question}{\itshape}{\rmfamily} +\spn@wtheorem{solution}{Solution}{\itshape}{\rmfamily} +\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily} + +\def\@takefromreset#1#2{% + \def\@tempa{#1}% + \let\@tempd\@elt + \def\@elt##1{% + \def\@tempb{##1}% + \ifx\@tempa\@tempb\else + \@addtoreset{##1}{#2}% + \fi}% + \expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname + \expandafter\def\csname cl@#2\endcsname{}% + \@tempc + \let\@elt\@tempd} + +\def\theopargself{\def\@spopargbegintheorem##1##2##3##4##5{\trivlist + \item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5} + \def\@Opargbegintheorem##1##2##3##4{##4\trivlist + \item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }} + } + +\renewenvironment{abstract}{% + \list{}{\advance\topsep by0.35cm\relax\small + \leftmargin=1cm + \labelwidth=\z@ + \listparindent=\z@ + \itemindent\listparindent + \rightmargin\leftmargin}\item[\hskip\labelsep + \bfseries\abstractname]} + {\endlist} + +\newdimen\headlineindent % dimension for space between +\headlineindent=1.166cm % number and text of headings. + +\def\ps@headings{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \leftmark\hfil} + \def\@oddhead{\normalfont\small\hfil\rightmark\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\def\ps@titlepage{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \hfil} + \def\@oddhead{\normalfont\small\hfil\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\if@runhead\ps@headings\else +\ps@empty\fi + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\endinput +%end of file llncs.cls diff --git a/text/paper_01/LLNCS/zugz-paper_01.code-workspace b/text/paper_01/LLNCS/zugz-paper_01.code-workspace new file mode 100644 index 0000000..975da5d --- /dev/null +++ b/text/paper_01/LLNCS/zugz-paper_01.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [ + { + "path": "." + }, + { + "path": "../.." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/text/paper_01/LLNCS/zugzwang.bib b/text/paper_01/LLNCS/zugzwang.bib new file mode 100644 index 0000000..ea300c8 --- /dev/null +++ b/text/paper_01/LLNCS/zugzwang.bib @@ -0,0 +1,251 @@ +@article {Teugels90, + AUTHOR = {Teugels, Jozef L.}, + TITLE = {Some representations of the multivariate {B}ernoulli and + binomial distributions}, + JOURNAL = {J. Multivariate Anal.}, + FJOURNAL = {Journal of Multivariate Analysis}, + VOLUME = {32}, + YEAR = {1990}, + NUMBER = {2}, + PAGES = {256--268}, + ISSN = {0047-259X,1095-7243}, + MRCLASS = {62H17 (62H20)}, + MRNUMBER = {1046768}, +MRREVIEWER = {Friedrich\ Liese}, + DOI = {10.1016/0047-259X(90)90084-U}, + URL = {https://doi.org/10.1016/0047-259X(90)90084-U}, +} + + +@book{kindermann80, + author = {Kindermann, Ross and Snell, J. Laurie}, + title = {Markov random fields and their applications}, + series = {Contemporary Mathematics}, + volume = {1}, + publisher = {American Mathematical Society, Providence, RI}, + year = {1980}, + pages = {ix+142}, + isbn = {0-8218-5001-6}, + mrclass = {60K35 (60G60 82A42 82A67 94A05)}, + mrnumber = {620955}, + mrreviewer = {J.\ Theodore\ Cox} +} + +@article{geman84, + author = {Geman, Stuart and Geman, Donald}, + journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence}, + title = {Stochastic Relaxation, Gibbs Distributions, and the Bayesian Restoration of Images}, + year = {1984}, + volume = {PAMI-6}, + number = {6}, + pages = {721-741}, + doi = {10.1109/TPAMI.1984.4767596} +} + + +@book{Judea88, + author = {Pearl, Judea}, + title = {Probabilistic reasoning in intelligent systems: networks of + plausible inference}, + series = {The Morgan Kaufmann Series in Representation and Reasoning}, + publisher = {Morgan Kaufmann, San Mateo, CA}, + year = {1988}, + pages = {xx+552}, + isbn = {0-934613-73-7}, + mrclass = {68-02 (68T01 92A25)}, + mrnumber = {965765}, + mrreviewer = {V. Yu. Trakhtman} +} + + @article{sympy, + title = {SymPy: symbolic computing in Python}, + author = {Meurer, Aaron and Smith, Christopher P. and Paprocki, Mateusz and \v{C}ert\'{i}k, Ond\v{r}ej and Kirpichev, Sergey B. and Rocklin, Matthew and Kumar, AMiT and Ivanov, Sergiu and Moore, Jason K. and Singh, Sartaj and Rathnayake, Thilina and Vig, Sean and Granger, Brian E. and Muller, Richard P. and Bonazzi, Francesco and Gupta, Harsh and Vats, Shivam and Johansson, Fredrik and Pedregosa, Fabian and Curry, Matthew J. and Terrel, Andy R. and Rou\v{c}ka, \v{S}t\v{e}p\'{a}n and Saboo, Ashutosh and Fernando, Isuru and Kulal, Sumith and Cimrman, Robert and Scopatz, Anthony}, + year = 2017, + month = jan, + keywords = {Python, Computer algebra system, Symbolics}, + abstract = { + SymPy is an open source computer algebra system written in pure Python. It is built with a focus on extensibility and ease of use, through both interactive and programmatic applications. These characteristics have led SymPy to become a popular symbolic library for the scientific Python ecosystem. This paper presents the architecture of SymPy, a description of its features, and a discussion of select submodules. The supplementary material provide additional examples and further outline details of the architecture and features of SymPy. + }, + volume = 3, + pages = {e103}, + journal = {PeerJ Computer Science}, + issn = {2376-5992}, + url = {https://doi.org/10.7717/peerj-cs.103}, + doi = {10.7717/peerj-cs.103} +} + +@inproceedings{verreet2022inference, + title = {Inference and learning with model uncertainty in probabilistic logic programs}, + author = {Verreet, Victor and Derkinderen, Vincent and Dos Martires, Pedro Zuidberg and De Raedt, Luc}, + booktitle = {Proceedings of the AAAI Conference on Artificial Intelligence}, + volume = {36}, + number = {9}, + pages = {10060--10069}, + year = {2022} +} + +@article{cropper2022inductive, + title = {Inductive logic programming at 30}, + author = {Cropper, Andrew and Duman{\v{c}}i{\'c}, Sebastijan and Evans, Richard and Muggleton, Stephen H}, + journal = {Machine Learning}, + volume = {111}, + number = {1}, + pages = {147--172}, + year = {2022}, + publisher = {Springer} +} + +@article{cozman2020joy, + title = {The joy of probabilistic answer set programming: semantics, complexity, expressivity, inference}, + author = {Cozman, Fabio Gagliardi and Mau{\'a}, Denis Deratani}, + journal = {International Journal of Approximate Reasoning}, + volume = {125}, + pages = {218--239}, + year = {2020}, + publisher = {Elsevier} +} + +@article{gebser2012answer, + title = {Answer set solving in practice}, + author = {Gebser, Martin and Kaminski, Roland and Kaufmann, Benjamin and Schaub, Torsten}, + journal = {Synthesis lectures on artificial intelligence and machine learning}, + volume = {6}, + number = {3}, + pages = {1--238}, + year = {2012}, + publisher = {Morgan \& Claypool Publishers} +} + + +@article{bezanson2017julia, + author = {Bezanson, Jeff and Edelman, Alan and Karpinski, Stefan and Shah, Viral B.}, + title = {Julia: A Fresh Approach to Numerical Computing}, + journal = {SIAM Review}, + volume = {59}, + number = {1}, + pages = {65-98}, + year = {2017}, + doi = {10.1137/141000671}, + %url = {https://doi.org/10.1137/141000671}, + %eprint = {https://doi.org/10.1137/141000671}, + abstract = { Bridging cultures that have often been distant, Julia combines expertise from the diverse fields of computer science and computational science to create a new approach to numerical computing. Julia is designed to be easy and fast and questions notions generally held to be “laws of nature" by practitioners of numerical computing: \beginlist \item High-level dynamic programs have to be slow. \item One must prototype in one language and then rewrite in another language for speed or deployment. \item There are parts of a system appropriate for the programmer, and other parts that are best left untouched as they have been built by the experts. \endlist We introduce the Julia programming language and its design---a dance between specialization and abstraction. Specialization allows for custom treatment. Multiple dispatch, a technique from computer science, picks the right algorithm for the right circumstance. Abstraction, which is what good computation is really about, recognizes what remains the same after differences are stripped away. Abstractions in mathematics are captured as code through another technique from computer science, generic programming. Julia shows that one can achieve machine performance without sacrificing human convenience. } +} + +@article{gowda2021high, + title={High-performance symbolic-numerics via multiple dispatch}, + author={Gowda, Shashi and Ma, Yingbo and Cheli, Alessandro and Gwozdz, Maja and Shah, Viral B and Edelman, Alan and Rackauckas, Christopher}, + journal={arXiv preprint arXiv:2105.03949}, + year={2021} +} + +@article{bouchetvalat2023dataframes, + title={DataFrames.jl: Flexible and Fast Tabular Data in Julia}, + volume={107}, + %url={https://www.jstatsoft.org/index.php/jss/article/view/v107i04}, + doi={10.18637/jss.v107.i04}, + abstract={DataFrames.jl is a package written for and in the Julia language offering flexible and efficient handling of tabular data sets in memory. Thanks to Julia’s unique strengths, it provides an appealing set of features: Rich support for standard data processing tasks and excellent flexibility and efficiency for more advanced and non-standard operations. We present the fundamental design of the package and how it compares with implementations of data frames in other languages, its main features, performance, and possible extensions. We conclude with a practical illustration of typical data processing operations.}, + number={4}, + journal={Journal of Statistical Software}, + author={Bouchet-Valat, Milan and Kamiński, Bogumił}, + year={2023}, + pages={1--32} +} + +@book{riguzzi2022foundations, + address = {New York}, + edition = {1}, + title = {Foundations of {Probabilistic} {Logic} {Programming}: {Languages}, {Semantics}, {Inference} and {Learning}}, + isbn = {978-1-00-333819-2}, + shorttitle = {Foundations of {Probabilistic} {Logic} {Programming}}, + %url = {https://www.taylorfrancis.com/books/9781003338192}, + language = {en}, + urldate = {2023-03-01}, + publisher = {River Publishers}, + author = {Riguzzi, Fabrizio}, + month = sep, + year = {2022}, + doi = {10.1201/9781003338192}, +} + +@inproceedings{sato1995statistical, + title={A Statistical Learning Method for Logic Programs with Distribution Semantics}, + author={Taisuke Sato}, + booktitle={International Conference on Logic Programming}, + year={1995}, + %url={https://api.semanticscholar.org/CorpusID:10424169} +} + + +@article{lifschitz2002answer, + title = {Answer set programming and plan generation}, + volume = {138}, + issn = {0004-3702}, + %url = {https://www.sciencedirect.com/science/article/pii/S0004370202001868}, + doi = {https://doi.org/10.1016/S0004-3702(02)00186-8}, + abstract = {The idea of answer set programming is to represent a given computational problem by a logic program whose answer sets correspond to solutions, and then use an answer set solver, such as smodels or dlv, to find an answer set for this program. Applications of this method to planning are related to the line of research on the frame problem that started with the invention of formal nonmonotonic reasoning in 1980.}, + number = {1}, + journal = {Artificial Intelligence}, + author = {Lifschitz, Vladimir}, + year = {2002}, + keywords = {Answer sets, Default logic, Frame problem, Logic programming, Planning}, + pages = {39--54}, +} + +@inproceedings{lee2016weighted, + title={Weighted rules under the stable model semantics}, + author={Lee, Joohyung and Wang, Yi}, + booktitle={Fifteenth international conference on the principles of knowledge representation and reasoning}, + year={2016} +} + +@article{baral2009probabilistic, + title={Probabilistic reasoning with {A}nswer {S}ets}, + author={Baral, Chitta and Gelfond, Michael and Rushton, Nelson}, + journal={Theory and Practice of Logic Programming}, + volume={9}, + number={1}, + pages={57--144}, + year={2009}, + publisher={Cambridge University Press} +} + +@inproceedings{de2007problog, + title={ProbLog: A probabilistic {P}rolog and its application in link discovery}, + author={De Raedt, Luc and Kimmig, Angelika and Toivonen, Hannu and Veloso, M}, + booktitle={IJCAI 2007, Proceedings of the 20th international joint conference on artificial intelligence}, + pages={2462--2467}, + year={2007}, + organization={IJCAI-INT JOINT CONF ARTIF INTELL} +} + +@inproceedings{lee2017lpmln, + title={LPMLN, {W}eak {C}onstraints, and {P}-log}, + author={Lee, Joohyung and Yang, Zhun}, + booktitle={Proceedings of the AAAI Conference on Artificial Intelligence}, + volume={31}, + number={1}, + year={2017} +} + +@article{pajunen2021solution, + title={Solution enumeration by optimality in {A}nswer {S}et {P}rogramming}, + author={Pajunen, Jukka and Janhunen, Tomi}, + journal={Theory and Practice of Logic Programming}, + volume={21}, + number={6}, + pages={750--767}, + year={2021}, + publisher={Cambridge University Press} +} + + +@article{alberti2017cplint, + title={cplint on SWISH: Probabilistic logical inference with a web browser}, + author={Alberti, Marco and Bellodi, Elena and Cota, Giuseppe and Riguzzi, Fabrizio and Zese, Riccardo}, + journal={Intelligenza Artificiale}, + volume={11}, + number={1}, + pages={47--64}, + year={2017}, + publisher={IOS Press} +} diff --git a/text/paper_01/asp.bib b/text/paper_01/asp.bib new file mode 100644 index 0000000..6f1b94f --- /dev/null +++ b/text/paper_01/asp.bib @@ -0,0 +1,15 @@ + +@article{lifschitz_answer_2002, + title = {Answer set programming and plan generation}, + volume = {138}, + issn = {0004-3702}, + url = {https://www.sciencedirect.com/science/article/pii/S0004370202001868}, + doi = {https://doi.org/10.1016/S0004-3702(02)00186-8}, + abstract = {The idea of answer set programming is to represent a given computational problem by a logic program whose answer sets correspond to solutions, and then use an answer set solver, such as smodels or dlv, to find an answer set for this program. Applications of this method to planning are related to the line of research on the frame problem that started with the invention of formal nonmonotonic reasoning in 1980.}, + number = {1}, + journal = {Artificial Intelligence}, + author = {Lifschitz, Vladimir}, + year = {2002}, + keywords = {Answer sets, Default logic, Frame problem, Logic programming, Planning}, + pages = {39--54}, +} diff --git a/text/paper_01/example_annotASP2plainASP.txt b/text/paper_01/example_annotASP2plainASP.txt new file mode 100644 index 0000000..9b80363 --- /dev/null +++ b/text/paper_01/example_annotASP2plainASP.txt @@ -0,0 +1,14 @@ +a : 0.3. -a:0.7 +b : 0.5. -b:0.5 +c : 0.1. -c:0.9 + +t1 = { } => + +P(T = t1) = \sum_ + + +0.3:: a. +b ; c :- a. + +a ; -a. +b ; c :- a. diff --git a/text/paper_01/foundations.bib b/text/paper_01/foundations.bib new file mode 100644 index 0000000..f04a9c0 --- /dev/null +++ b/text/paper_01/foundations.bib @@ -0,0 +1,17 @@ + +@book{riguzzi2022foundations, + address = {New York}, + edition = {1}, + title = {Foundations of {Probabilistic} {Logic} {Programming}: {Languages}, {Semantics}, {Inference} and {Learning}}, + isbn = {978-1-00-333819-2}, + shorttitle = {Foundations of {Probabilistic} {Logic} {Programming}}, + url = {https://www.taylorfrancis.com/books/9781003338192}, + language = {en}, + urldate = {2023-03-01}, + publisher = {River Publishers}, + author = {Riguzzi, Fabrizio}, + month = sep, + year = {2022}, + doi = {10.1201/9781003338192}, + file = {Riguzzi - 2018 - Foundations of probabilistic logic programming la.pdf:/home/fc/sci/zotero/storage/X84FP7FV/Riguzzi - 2018 - Foundations of probabilistic logic programming la.pdf:application/pdf}, +} diff --git a/text/paper_01/pre-paper.pdf b/text/paper_01/pre-paper.pdf new file mode 100644 index 0000000..a39d0e4 Binary files /dev/null and b/text/paper_01/pre-paper.pdf differ diff --git a/text/paper_01/pre-paper.tex b/text/paper_01/pre-paper.tex new file mode 100644 index 0000000..32aaa16 --- /dev/null +++ b/text/paper_01/pre-paper.tex @@ -0,0 +1,1342 @@ +\documentclass[a4paper, 10pt]{article} +%\documentclass{llncs} + +\usepackage[ +bibstyle=numeric, +citestyle=numeric +]{biblatex} %Imports biblatex package +\addbibresource{zugzwang.bib} %Import the bibliography file + +\usepackage[x11colors]{xcolor} + +\usepackage{tikz} +\tikzset{ +event/.style={}, +smodel/.style={fill=gray!25}, +tchoice/.style={draw, circle}, +indep/.style={},%{draw, dashed}, +proptc/.style = {-latex, dashed}, +propsm/.style = {-latex, thick}, +doubt/.style = {gray} +} +\usetikzlibrary{calc, positioning, patterns} + +\usepackage{hyperref} +\hypersetup{ +colorlinks=true, +linkcolor=blue, +citecolor=blue, +urlcolor=blue, +} + +\usepackage{commath} +\usepackage{amsthm} +\newtheorem{assumption}{Assumption} +\newtheorem{definition}{Definition} +\newtheorem{proposition}{Proposition} +\newtheorem{example}{Example} +\newtheorem{theorem}{Theorem} +\usepackage{amssymb} +\usepackage[normalem]{ulem} +\usepackage[nice]{nicefrac} +\usepackage{stmaryrd} +\usepackage{acronym} +\usepackage{multicol} +\usepackage{cleveref} +% +% Local commands +% +\newcommand{\naf}{\ensuremath{\sim\!}} +\newcommand{\larr}{\ensuremath{\leftarrow}} +\newcommand{\at}[1]{\ensuremath{\!\del{#1}}} +\newcommand{\co}[1]{\ensuremath{\overline{#1}}} +\newcommand{\fml}[1]{\ensuremath{{\cal #1}}} +\newcommand{\deft}[1]{\textbf{#1}} +\newcommand{\pset}[1]{\ensuremath{\mathbb{P}\at{#1}}} +\newcommand{\ent}{\ensuremath{\lhd}} +\newcommand{\cset}[2]{\ensuremath{\set{#1,~#2}}} +\newcommand{\langof}[1]{\ensuremath{\fml{L}\at{#1}}} +\newcommand{\uset}[1]{\ensuremath{#1^{\ast}}} +\newcommand{\lset}[1]{\ensuremath{#1_{\ast}}} +\newcommand{\yset}[1]{\ensuremath{\left\langle #1 \right\rangle}} +\newcommand{\stablecore}[1]{\ensuremath{\left\llbracket #1 \right\rrbracket}} +\newcommand{\uclass}[1]{\ensuremath{\intco{#1}}} +\newcommand{\lclass}[1]{\ensuremath{\intoc{#1}}} +\newcommand{\smclass}[1]{\ensuremath{\intcc{#1}}} +\newcommand{\pr}[1]{\ensuremath{\mathrm{P}\at{#1}}} +\newcommand{\err}[1]{\ensuremath{\mathrm{err}\at{#1}}} +\newcommand{\pw}[1]{\ensuremath{\mu\at{#1}}} +\newcommand{\pwcfname}{\ensuremath{\mu_{\textrm{TC}}}} +\newcommand{\pwc}[1]{\ensuremath{\pwcfname\at{#1}}} +\newcommand{\class}[1]{\ensuremath{[{#1}]_{\sim}}} +\newcommand{\urep}[1]{\ensuremath{\rep{#1}{}}} +\newcommand{\lrep}[1]{\ensuremath{\rep{}{#1}}} +\newcommand{\rep}[2]{\ensuremath{\left\langle #1 \middle| #2 \right\rangle}} +\newcommand{\inconsistent}{\bot} +\newcommand{\given}{\ensuremath{~\middle|~}} +\newcommand{\emptyevent}{\ensuremath{\vartriangle}} +\newcommand{\indepclass}{\ensuremath{\Diamond}} +\newcommand{\probfact}[2]{\ensuremath{#2\mkern-4mu:\mkern-4mu#1}} +\newcommand{\probrule}[3]{\probfact{#1}{#2} \leftarrow #3} +%\newcommand{\tcgen}[1]{\ensuremath{\widehat{#1}}} +\newcommand{\tcgen}[1]{\ensuremath{\left<#1\right>}} +\newcommand{\lfrac}[2]{\ensuremath{{#1}/{#2}}} +\newcommand{\condsymb}[2]{\ensuremath{p_{#1|#2}}} +% +%\newcommand{\oldnote}[1]{\marginpar{\scriptsize #1}} +\newcommand{\oldnote}[1]{\note{#1}} +\newcommand{\todo}[1]{{\color{red!50!black}(\emph{#1})}} +% \newcommand{\oldremark}[2]{\uwave{#1}~{\color{green!40!black}(\emph{#2})}} +\newcommand{\oldremark}[2]{\remark{#1}{#2}} +\newcommand{\oldreplace}[2]{\sout{#1}/{\color{green!20!black}#2}} +\newcommand{\delete}[1]{\xout{#1}} +\newcommand{\franc}[1]{{\color{orange!60!black}#1}} +\newcommand{\bruno}{\color{red!60!blue}} +% +\newcounter{remark} +\newcommand{\remark}[2]{% + \stepcounter{remark}% + \!{\color{red}/\!}% + #1% + {\!\color{red}/}\footnotemark[\arabic{remark}]% + \footnotetext[\arabic{remark}]{{\color{red}/}#2}% + } +\newcommand{\note}[1]{ + \stepcounter{remark}% + {\!\!\color{red}/}\footnotemark[\arabic{remark}]\!\!% + \footnotetext[\arabic{remark}]{{\color{red}/}#1} +} +% +% Acronyms +% +\acrodef{BK}[BK]{background knowledge} +\acrodef{ASP}[ASP]{answer set programming} +\acrodef{NP}[NP]{normal program} +\acrodef{DS}[DS]{distribution semantics} +\acrodef{PF}[PF]{probabilistic fact} +\acrodef{TC}[TC]{total choice} +\acrodef{SM}[SM]{stable model} +\acrodef{SC}[SC]{stable core} +\acrodef{KL}[KL]{Kullback-Leibler} +\acrodef{SBF}[SBF]{Simple But Fruitful} +\acrodef{RSL}[RSL]{Random Set of Literals} +\acrodef{RCE}[RCE]{Random Consistent Event} +% +% +% +\title{An Algebraic Approach to Stochastic ASP} +% +% +% +\author{ +\begin{tabular}{ccc} + Salvador Abreu + \footnote{Universidade de Évora, NOVALINCS} + & + Francisco Coelho + \footnote{Universidade de Évora, NOVALINCS, High Performance Computing Chair} + & Bruno Dinis + \footnote{Universidade de Évora, CIMA, CMAFcIO} + \\ + \texttt{spa@uevora.pt} + & \texttt{fc@uevora.pt} + & \texttt{bruno.dinis@uevora.pt} +\end{tabular} +} +% +% +% +\begin{document} +% +% +% +\maketitle +% +% +% +\begin{abstract} + We address the problem of extending probability from the total choices of an \acs{ASP} program to the \aclp{SM}, and from there to general events. + % + Our approach is algebraic in the sense that it relies on an equivalence relation over the set of events and uncertainty is expressed with variables and polynomial expressions. + % + We illustrate our methods with two examples, one of which shows a connection to bayesian networks. +\end{abstract} +% +% +% +\section{Introduction and Motivation} +% +% +% +A major limitation of logical representations in real world applications is the implicit assumption that the \acl{BK} is perfect. This assumption is problematic if data is noisy, which is often the case. Here we aim to explore how \acl{ASP} programs with probabilistic facts can lead to characterizations of probability functions on the program's domain, which is not straightforward in the context of \acl{ASP}, as explained below (see also \cite{cozman2020joy,verreet2022inference,baral2009probabilistic,pajunen2021solution}). Unlike current systems such as ProbLog \cite{de2007problog}, P-log \cite{baral2009probabilistic}, LP\textsuperscript{MLN} \cite{lee2016weighted}, or cplint \cite{alberti2017cplint}, that derive a probability distribution from a program, in our system some choices are represented by a parameter that can be later estimated from further information, \emph{e.g.}\ observations. This approach enables later refinement and scoring of a partial program of a model from additional evidence. + +\Ac{ASP} \cite{lifschitz2002answer} is a logic programming paradigm based on the \ac{SM} semantics of \acp{NP} that can be implemented using the latest advances in SAT solving technology. Unlike ProLog, \ac{ASP} is a truly declarative language that supports language constructs such as disjunction in the head of a clause, choice rules, and both hard and weak constraints. + +The \ac{DS} \cite{sato1995statistical,riguzzi2022foundations} is a key approach to extend logical representations with probabilistic reasoning. +% +Let $\fml{A}$ be a finite set of atoms. A \emph{pre-total choice} is a subset $t^{\ast}$ of \fml{A}. The \emph{\acl{TC}} (TC) associated to $t^{\ast}$ is the set $t := t^{\ast} \cup \set{\co{a} \given a \in \fml{A} \setminus t^{\ast}}$. \Acp{PF} are the most basic \ac{DS} stochastic primitives and take the form $\probfact{p}{a}$ where $a\in\fml{A}$ is associated to some $p\in\intcc{0, 1}$. Each \ac{PF} then represents a boolean random variable that is true with probability $p$ and false with probability $\co{p} = 1 - p$. + +\note{revisit this part.}Let $F = \set{\probfact{p}{a} \given a \in \fml{A}, p \in \intcc{0, 1}}$. For a \acl{TC} $t$ over $\fml{A}$, define +$$ +P_t := \set{ p \given a \in t^{\ast} \wedge \probfact{p}{a} \in F} \cup + \set{\co{p} \given a \in t \setminus t^{\ast} \wedge \probfact{p}{a} \in F} +$$ + +and + +\begin{equation} + \pr{T = t} = \prod_{p \in P_t} p, + \label{eq:prob.total.choice} +\end{equation} + +where $T$ is a random variable whose values are \aclp{TC}. + +Our goal is to extend this probability (which is, indeed, a product of Bernoulli distributions), from \aclp{TC}, to cover the program domain. We use the term ``program'' as a set of rules and facts, plain and probabilistic. We can foresee two key applications of this extended probability: + +\begin{enumerate} + \item Support probabilistic reasoning/tasks on the program domain. + \item Also, given a dataset and a divergence measure, the program can be scored (by the divergence w.r.t.\ the \emph{empiric} distribution of the dataset), and weighted or sorted amongst other programs. These are key ingredients in algorithms searching, for example, optimal models of a dataset. +\end{enumerate} + +To extend probabilities from \aclp{TC} we start with the stance that \emph{a program describes an observable system}, that \emph{the \aclp{SM} are all the possible states} of that system and that \emph{observations (i.e.\ events) are stochastic} --- one observation can be sub-complete or super-complete, and might not determine the real state of the system. From here, probabilities must be extended from \acp{TC} to \acp{SM} and then to any event. +% +This extension process starts with a critical problem, illustrated by the example in \cref{sec:example.1}, concerning situations where multiple \acp{SM}, $ab$ and $ac$, result from a single \ac{TC}, $a$, but there is not enough information (in the program) to assign a single probability to each \ac{SM}. We propose to address this issue by using algebraic variables to describe that lack of information and then estimate the value of those variables from empirical data. This lack of uniqueness is also addressed in \cite{cozman2020joy} along a different approach, using credal sets. + +In another related work \cite{verreet2022inference} epistemic uncertainty (or model uncertainty) is considered as a lack of knowledge about the underlying model, that may be mitigated via further observations. This seems to presuppose a bayesian approach to imperfect knowledge in the sense that having further observations allows to improve/correct the model. Indeed, that approach uses Beta distributions on the total choices in order to be able to learn a distribution on the \remark{events}{Check this: do they learn distributions on the events?}. This approach seems to be specially fitted to being able to tell when some probability lies beneath some given value. Our approach seems to be similar in spirit, while remaining algebraic in the way that the extension of probabilities is addressed. + +The example in \cref{sec:example.1} uses the code available in the project's repository\footnote{\url{https://git.xdi.uevora.pt/fc/sasp}}, developed with the \textit{Julia} programming language \cite{bezanson2017julia}, and the \textit{Symbolics} \cite{gowda2021high}, and \textit{DataFrames} \cite{bouchetvalat2023dataframes} libraries. +% +% +% +\section{A Simple but Fruitful Example}\label{sec:example.1} +% +% +% +In this section we consider a somewhat simple case, which we call the \ac{SBF} example, that showcases the problem of extending probabilities from \aclp{TC} to \aclp{SM} and then to events. As mentioned before, the main issue arises from the lack of information in the program to assign a single probability to each stable model. This becomes a crucial problem in situations where multiple \aclp{SM} result from a single \acl{TC}. We will come back to this example in \cref{subsec:sbf.example}, after we present our proposal for extending probabilities from \aclp{TC} to \aclp{SM} in \cref{sec:extending.probalilities}. + + +\begin{example}\label{running.example} + Consider $\fml{A} = \set{a, b, c}$ and the following program + %\note{Introduce the notation $\probfact{p}{a}$ and what is the underlying ASP program.} + + \begin{equation} + \begin{aligned} + \probfact{0.3}{a} & ,\cr + b \vee c & \leftarrow a. + \end{aligned} + \label{eq:example.1} + \end{equation} + + %\note{Explain how the SM are defined.} + %\note{Explain our position about negation and be clear about $\co{a} = \neg a$ and not $\co{a} =\,\sim\!\! a$.} + %\note{Introduce the parameterization $\theta_{s,t}$.} + The \emph{standard form} of this program results from replacing annotated facts, such as $\probfact{0.3}{a}$, by the associated disjunctions, $a \vee \neg a$. The \aclp{SM} of the annotated program are the same as the ones from the standard form: $\co{a}, ab$ and $ac$, where $\co{a}$ stands for $\neg a$ (see \cref{fig:running.example}). While it is straightforward to assume $\pr{\co{a}}=0.7$, there is no obvious, explicit, way to assign values to $\pr{ab}$ and $\pr{ac}$. For instance, we can use a parameter $\theta$ as in + $$ + \begin{aligned} + \pr{ab} & = 0.3 \theta,\cr + \pr{ac} & = 0.3 (1 - \theta) + \end{aligned} + $$ + to express our knowledge that $ab,ac$ are events related in a certain way and, simultaneously, our uncertainty about that relation. The pa\-ra\-me\-ter $\theta=\theta_{s,t}$ depends on both the \acl{SM} $s$ and the \acl{TC} $t$. This uncertainty can then be addressed with the help of adequate distributions, such as empirical distributions from a dataset. +\end{example} + +If an \ac{ASP} program is intended to describe some system then: + +\begin{enumerate} + + \item With a probability set for the \aclp{SM}, we want to extend it to all the events of the program domain. + + \item In the case where some statistical knowledge is available, for example, in the form of a distribution, we consider it as ``external'' knowledge about the parameters, that doesn't affect the extension procedure described below. + + \item Statistical knowledge can be used to estimate parameters and to ``score'' the program. + + \item\label{item:program.selection} If that program is only but one of many possible candidates then that score can be used, \emph{e.g.} as fitness, by algorithms searching (optimal) programs of a dataset of observations. + + \item If observations are not consistent with the program, then we ought to conclude that the program is wrong and must be changed accordingly. +\end{enumerate} + +Currently, we are addressing the problem of extending a probability function (possibly using parameters such as $\theta$), defined on the \acp{SM} of a program, to all the events of that program. This extension must satisfy the Kolmogorov axioms of probability (see \cref{prop:kolmogorov}) so that probabilistic reasoning is consistent with the \ac{ASP} program and follow our interpretation of \aclp{SM} as the states of an observable system. + +As sets, the \acp{SM} can have non-empty intersection. But, as states of a system, we assume that \acp{SM} are disjoint events, in the following sense: + +\begin{assumption}\label{assumption:smodels.disjoint} + \Aclp{SM} are disjoint events: For any set $X$ of \aclp{SM}, + \begin{equation} + \pr{X} = \sum_{s\in X}\pr{s} + \end{equation} +\end{assumption} + +Consider the \aclp{SM} $ab, ac$ from \cref{running.example}, that result from the clause $b \vee c \leftarrow a$ and the \acl{TC} $\set{a}$. Since we intend to associate each \acl{SM} with a state of the system, $ab$ and $ac$ should be \emph{disjoint} events. So $b \vee c$ is interpreted as an \emph{exclusive disjunction} and, from that particular clause, no further relation between $b$ and $c$ is assumed. This does not prevent that other clauses may be added that entail further dependencies between $b$ and $c$, which in turn may change the \aclp{SM}. + +By not making distribution assumptions on the clauses of the program we can state such properties on the semantics of the program, as we've done in assumption \ref{assumption:smodels.disjoint}. +% +% +% +\section{Extending Probabilities}\label{sec:extending.probalilities} +% +% +% +\begin{figure}[t] + \begin{center} + \begin{tikzpicture} + \node[event] (E) {$\emptyevent$}; + \node[tchoice, above left = of E] (a) {$a$}; + \node[smodel, above left = of a] (ab) {$ab$}; + \node[smodel, above right = of a] (ac) {$ac$}; + \node[event, below = of ab] (b) {$b$}; + \node[event, below = of ac] (c) {$c$}; + \node[event, above right = of ab] (abc) {$abc$}; + \node[event, above left = of ab] (abC) {$\co{c}ab$}; + \node[event, above right = of ac] (aBc) {$\co{b}ac$}; + \node[indep, right = of ac] (bc) {$bc$}; + \node[tchoice, smodel, below right = of bc] (A) {$\co{a}$}; + \node[event, above = of A] (Ac) {$\co{a}c$}; + \node[event, above right = of Ac] (Abc) {$\co{a}bc$}; + % ---- + \draw[doubt] (a) to[bend left] (ab); + \draw[doubt] (a) to[bend right] (ac); + + \draw[doubt] (ab) to[bend left] (abc); + \draw[doubt] (ab) to[bend right] (abC); + + \draw[doubt] (ac) to[bend right] (abc); + \draw[doubt] (ac) to[bend left] (aBc); + + \draw[doubt, dashed] (Ac) to (Abc); + + \draw[doubt] (A) to (Ac); + \draw[doubt] (A) to (Abc); + + \draw[doubt] (ab) to[bend right] (E); + \draw[doubt] (ac) to[bend right] (E); + \draw[doubt] (A) to[bend left] (E); + + \draw[doubt] (ab) to (b); + \draw[doubt] (ac) to (c); + % \draw[doubt] (ab) to[bend left] (a); + % \draw[doubt] (ac) to[bend right] (a); + \draw[doubt, dashed] (c) to[bend right] (bc); + \draw[doubt, dashed] (abc) to[bend left] (bc); + \draw[doubt, dashed] (bc) to (Abc); + \draw[doubt, dashed] (c) to[bend right] (Ac); + \end{tikzpicture} + \end{center} + + \caption{Some events related to the \aclp{SM} of \cref{running.example}. The circle nodes are \aclp{TC} and shaded nodes are \aclp{SM}. Solid lines represent relations with the \acp{SM} and dashed lines relations between other events. The set of events contained in all \aclp{SM}, denoted by $\emptyevent$, is empty in this example.} + \label{fig:running.example} +\end{figure} + +The diagram in \cref{fig:running.example} illustrates the problem of extending probabilities from \aclp{TC} to \aclp{SM} and then to general events in an \emph{edge-wise} process, where the value in a node is defined from the values in its neighbors. This quickly leads to coherence problems concerning probability, with no clear systematic approach. Notice that $bc$ is not directly related with any \acl{SM} therefore propagating values through edges would assign a hard to justify ($\not= 0$) value to $bc$. Instead, we propose to base the extension in the relation an event has with the \aclp{SM}. +% +% +% +\subsection{An Equivalence Relation}\label{subsec:equivalence.relation} +% +% +% +\begin{figure}[t] + \begin{center} + \begin{tikzpicture} + \node[event] (E) {$\emptyevent$}; + \node[tchoice, above left = of E] (a) {$a$}; + \node[smodel, above left = of a] (ab) {$ab$}; + \node[smodel, above right = of a] (ac) {$ac$}; + \node[event, below = of ab] (b) {$b$}; + \node[event, below = of ac] (c) {$c$}; + \node[event, above right = of ab] (abc) {$abc$}; + \node[event, above left = of ab] (abC) {$\co{c}ab$}; + \node[event, above right = of ac] (aBc) {$\co{b}ac$}; + \node[indep, right = of ac] (bc) {$bc$}; + \node[tchoice, smodel, below right = of bc] (A) {$\co{a}$}; + \node[event, above = of A] (Ac) {$\co{a}c$}; + \node[event, above right = of Ac] (Abc) {$\co{a}bc$}; + % ---- + \path[draw, rounded corners, pattern=north west lines, opacity=0.2] + (ab.west) -- + (ab.north west) -- + % + (abC.south west) -- + (abC.north west) -- + (abC.north) -- + % + (abc.north east) -- + (abc.east) -- + (abc.south east) -- + % + (ab.north east) -- + (ab.east) -- + (ab.south east) -- + % + (a.north east) -- + % + (E.north east) -- + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (b.south west) -- + % + (ab.west) + ; + % ---- + \path[draw, rounded corners, pattern=north east lines, opacity=0.2] + (ac.south west) -- + (ac.west) -- + (ac.north west) -- + % + (abc.south west) -- + (abc.west) -- + (abc.north west) -- + % + (aBc.north east) -- + (aBc.east) -- + (aBc.south east) -- + % + (ac.north east) -- + % + (c.east) -- + % + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (a.south west) -- + (a.west) -- + (a.north west) -- + (a.north) -- + % + (ac.south west) + ; + % ---- + \path[draw, rounded corners, pattern=horizontal lines, opacity=0.2] + % (A.north west) -- + % + (Ac.north west) -- + % + (Abc.north west) -- + (Abc.north) -- + (Abc.north east) -- + (Abc.south east) -- + % + % (Ac.north east) -- + % (Ac.east) -- + % + % (A.east) -- + (A.south east) -- + % + (E.south east) -- + (E.south) -- + (E.south west) -- + (E.west) -- + (E.north west) -- + % + (Ac.north west) + ; + \end{tikzpicture} + \end{center} + + \caption{Classes (of consistent events) related to the \aclp{SM} of \cref{running.example} are defined through intersections and inclusions. In this picture we can see, for example, the classes $\set{\co{c}ab, ab, b}$ and $\set{a, abc}$. Different fillings are different classes and, as before, the circle nodes are \aclp{TC} and shaded nodes are \aclp{SM}. Notice that $bc$ is not in a ``filled'' area.} + \label{fig:running.example.classes} +\end{figure} + +Given an ASP program, we consider a set of \emph{atoms} $ \fml{A}$, the set $\fml{L}$ of the \emph{literals} over \fml{A}, and the set of \emph{events} $\fml{E}$ such that $e \in \fml{E} \iff e \subseteq \fml{L}$. We also consider $\fml{W}$ the set of \emph{worlds} (consistent events), \note{Be more precise on this definition} a set of \emph{\aclp{TC}} $\fml{T}$ such that for every $a \in \fml{A}$ we have $t = a$ or $t = \neg a$, and $\fml{S}$ the set of \emph{\aclp{SM}} such that $ \fml{S}\subset\fml{W}$. At last, the set of \aclp{SM} entailed by the \acl{TC} $t$ is denoted by $\tcgen{t}$. + +Our path to extend probabilities starts with a perspective of \aclp{SM} as playing a role similar to \emph{prime factors}. The \aclp{SM} of a program are the irreducible events entailed from that program and any event must be considered under its relation with the \aclp{SM}. + +From \cref{running.example}, consider the \acp{SM} $\co{a}, ab, ac$ and events $a, abc$ and $c$. While $a$ is related with (contained in) with both $ab, ac$, event $c$ is related only with $ac$. So, $a$ and $c$ are related with different \acp{SM}. On the other hand, both $ab, ac$ are related with $abc$. So $a$ and $abc$ are related with the same \aclp{SM}. + +\begin{definition}\label{def:stable.core} + The \emph{\ac{SC}} of the event $e\in \fml{E}$ is + \begin{equation} + \stablecore{e} := \set{s \in \fml{S} \given s \subseteq e \vee e \subseteq s}. \label{eq:stable.core} + \end{equation} + where $\fml{S}$ is the set of \aclp{SM}. +\end{definition} + +We now define an equivalence relation so that two events are related if either both are inconsistent or both are consistent and, in the latter case, with the same \acl{SC}. + +\begin{definition}\label{def:equiv.rel} + For a given program, let $u, v \in \fml{E}$. The equivalence relation $\sim$ is defined by + \begin{equation} + u \sim v :\!\iff u,v \not\in\fml{W} \vee \del{u,v \in \fml{W} \wedge \stablecore{u} = \stablecore{v}}.\label{eq:equiv.rel} + \end{equation} +\end{definition} + +Observe that the minimality of \aclp{SM} implies that, in \cref{def:stable.core}, either $e$ is a \acl{SM} or at least one of $\exists s \del{s \subseteq e}, \exists s \del{e \subseteq s}$ is false. This equivalence relation defines a partition on the set of events, where each class holds a unique relation with the \aclp{SM}. In particular we denote each class by: + +\begin{equation} + \class{e} = + \begin{cases} + \inconsistent := \fml{E} \setminus \fml{W} + & \text{if~} e \in \fml{E} \setminus \fml{W}, \\ + \set{u \in \fml{W} \given \stablecore{u} = \stablecore{e}} + & \text{if~} e \in \fml{W}. + \end{cases}\label{eq:event.class} +\end{equation} + +The combinations of the \aclp{SM}, together with the set $\inconsistent$, form a set of representatives. Consider again \cref{running.example}. As previously mentioned, the \aclp{SM} are the elements of $\fml{S} = \set{\co{a}, ab, ac}$ so the quotient set of this relation, with abuse of notation, is: +\begin{equation} + \class{\fml{E}} = \set{ + \inconsistent, + \indepclass, + \class{\co{a}}, + \class{ab}, + \class{ac}, + \class{\co{a}, ab}, + \class{\co{a}, ac}, + \class{ab, ac}, + \class{\co{a}, ab, ac} + }, +\end{equation} +where $\indepclass$ denotes, with abuse of notation, both the class of \emph{independent} events $e$ such that $\stablecore{e} = \emptyset$ and its core. We have\note{Remark the odd nature of $\emptyevent$.}: + +\begin{equation*} + \begin{array}{l|lr} + \text{\textbf{Core}}, \stablecore{e} + & \text{\textbf{Class}}, \class{e} + & \text{\textbf{Size}}, \# \class{e} \\ + \hline + % + \inconsistent + & \co{a}a, \ldots + & 37 + \\ + % + \indepclass + & \co{b}, \co{c}, bc, \co{b}a, \co{b}c, \co{bc}, \co{c}a, \co{c}b, \co{bc}a + & 9 + \\ + % + \co{a} + & \co{a}, \co{a}b, \co{a}c, \co{ab}, \co{ac}, \co{a}bc, \co{ac}b, \co{ab}c, \co{abc} + & 9 + \\ + % + ab + & b, ab, \co{c}ab + & 3 + \\ + % + ac + & c, ac, \co{b}ac + & 3 + \\ + % + \co{a}, ab + & \emptyset + & 0 + \\ + % + \co{a}, ac + & \emptyset + & 0 + % + \\ + % + ab, ac + & a, abc + & 2 + \\ + % + \co{a}, ab, ac + & \emptyevent + & 1 + \\ + % + \hline + \class{\fml{E}} + & \fml{E} + & 64 + \end{array} +\end{equation*} + +\begin{itemize} + % + \item Since all events within an equivalence class are in relation with a specific set of \aclp{SM}, \emph{measures, including probability, should be constant within classes}: + \[ + \forall u\in \class{e} \left(\mu\at{u} = \mu\at{e} \right). + \] + % + \item In general, we have \emph{much more} \aclp{SM} than literals but their combinations are still \emph{much less} than events. Nevertheless, the equivalence classes allow us to propagate probabilities from \aclp{TC} to events, as explained in the next subsection. + % + \item In this specific case, instead of dealing with $64 = 2^6$ events, we consider only the $9 = 2^3 + 1$ classes, well defined in terms of combinations of the \aclp{SM}. +\end{itemize} +% +% +% +\subsection{From Total Choices to Events}\label{subsec:from.tchoices.to.events} +% +% +% +Our path to set a distribution on $\fml{E}$ starts with the more general problem of extending \emph{measures}, since extending \emph{probabilities} easily follows by means of a suitable normalization (see \eqref{eq:measure.events.unconditional} and \eqref{eq:probability.event}), and has two phases: +\begin{enumerate} + \item Extension of the probabilities, \emph{as measures}, from the \aclp{TC} to events. + \item Normalization of the measures on events, recovering a probability. +\end{enumerate} + +The ``extension'' phase, traced by \cref{eq:prob.total.choice} and eqs.\ \eqref{eq:measure.tchoice} to \eqref{eq:measure.events}, starts with the measure (probability) of \aclp{TC}, $\pw{t} = \pr{T = t}$, expands it to \aclp{SM}, $\pw{s}$, and then, within the equivalence relation from \cref{eq:equiv.rel}, to (general) events, $\pw{e}$, including (consistent) worlds. + +\begin{description} + % + \item[Total Choices.] Using \cref{eq:prob.total.choice}, this case is given by + \begin{equation} + \pwc{t} := \pr{T = t}= \prod_{p\in P_t} p. + \label{eq:measure.tchoice} + \end{equation} + % + + \item[Stable Models.] Recall that each \acl{TC} $t$, together with the rules and the other facts of a program, defines the set \tcgen{t} of \aclp{SM} associated with that choice. \note{Remark that we want to associate a number or an unknown to each SM of each TC.} \note{Recall what was said in Example 1 (?)} + Given a \acl{TC} $t$, a \acl{SM} $s$, and variables or values $\theta_{s,t} \in \intcc{0, 1}$, we define + \begin{equation} + \pw{s, t} := \begin{cases} + \theta_{s,t} & \text{if~} s \in \tcgen{t}\cr + 0 & \text{otherwise} + \end{cases} + \label{eq:measure.stablemodel} + \end{equation} + such that $\sum_{s\in \tcgen{t}} \theta_{s,t} = 1$. + % + + \item[Classes.] \label{item:class.cases} Each class is either the inconsistent class, $\inconsistent$, or is represented by some set of \aclp{SM}. + \begin{description} + \item[Inconsistent Class.] The inconsistent class contains events that are logically inconsistent, thus should never be observed and have measure zero: + \begin{equation} + \pw{\inconsistent, t} := 0.\footnote{Notice that this measure being equal to zero is actually independent of the \acl{TC}.} + \label{eq:measure.class.inconsistent} + \end{equation} + \item[Independent Class.] A world that neither contains nor is contained in a \acl{SM} corresponds to a non-state, according to the program. So the respective measure is also set to zero: + \begin{equation} + \pw{\indepclass, t} := 0. + \label{eq:measure.class.independent} + \end{equation} + \item[Other Classes.] The extension must be constant within a class, its value should result from the elements in the \acl{SC}, and respects assumption \ref{assumption:smodels.disjoint} (\aclp{SM} are disjoint): + \begin{equation} + \pw{\class{e}, t} := \pw{\stablecore{e}, t} = \sum_{s\in\stablecore{e}}\pw{s, t} + \label{eq:measure.class.other} + \end{equation} + and + \begin{equation} + \pw{\class{e}} := \sum_{t \in \fml{T}} \pw{\class{e}, t}\pwc{t}. + \label{eq:measure.class.unconditional} + \end{equation} + \end{description} + % + + \item[Events.] \label{item:event.cases} Each (general) event $e$ is in the class defined by its \acl{SC}, $\stablecore{e}$. So, denoting by $\# X$ the number of elements in $X$, we set: + \begin{equation} + \pw{e, t} := + \begin{cases} + \frac{\pw{\class{e}, t}}{\# \class{e}} & \text{if~}\# \class{e} > 0, \\ + 0 & \text{otherwise}. + \end{cases} + \label{eq:measure.events} + \end{equation} + and + \begin{equation} + \pw{e} := \sum_{t\in\fml{T}} \pw{e, t} \pwc{t}. + \label{eq:measure.events.unconditional} + \end{equation} +\end{description} + + + +The $\theta_{s,t}$ parameters in equation \eqref{eq:measure.stablemodel} express the \emph{program's} lack of knowledge about the measure assignment, when a single \acl{TC} entails more than one \acl{SM}. In that case, how to distribute the respective measures? Our proposal to address this problem consists in assigning an unknown measure, $\theta_{s,t}$, conditional on the \acl{TC}, $t$, to each \acl{SM} $s$. This approach allows the expression of an unknown quantity and future estimation, given observed + +% Consider the event $bc$ from \cref{running.example}. Since $\class{bc} = \indepclass$, from \cref{eq:measure.class.independent} we get $\mu\at{bc} = 0$. data. + +% SUPERSET +Equation \eqref{eq:measure.class.other} results from assumption \ref{assumption:smodels.disjoint} and states that the measure of a class $\class{e}$ is the sum over it's \acl{SC}, $\stablecore{e}$, and \eqref{eq:measure.class.unconditional} \emph{marginalizes} the \acp{TC} on \eqref{eq:measure.class.other}. + +The \emph{normalizing factor} is: +\begin{equation*} + Z := + \sum_{e \in \fml{E}} \pw{e} = + \sum_{\class{e} \in \class{\fml{E}}} \pw{\class{e}}, +\end{equation*} + +and now equation \eqref{eq:measure.events.unconditional} provides a straightforward way to define the \emph{probability of observation of a single event}: + +\begin{equation} + \pr{E = e} := \frac{\pw{e}}{Z}.\label{eq:probability.event} +\end{equation} + +Equation \eqref{eq:measure.events.unconditional} together with external statistical knowledge, can be used to learn about the \emph{initial} probabilities of the atoms, that should not (and by \cref{prop:two.distributions} can't) be confused with the explicit $\pwcfname$ set in the program. + +It is now straightforward to check that $\pr{E}$ satisfies the Kolmogorov axioms of probability. + +Since \aclp{TC} are also events, one can ask, for an arbitrary \aclp{TC} $t$, if $\pr{T = t} = \pr{E = t}$ or, equivalently, if $\pwc{t} = \pw{t}$. However, it is easy to see that, in general, that cannot be true. While the domain of the random variable $T$ is the set of \aclp{TC}, for $E$ the domain is much larger, including all the events. Except for trivial programs, where the \acp{SM} are the \acp{TC}, some events other than \aclp{TC} have non-zero probability. + +\begin{proposition} \label{prop:two.distributions} + In a program with a \acl{SM} that is not a \acl{TC} there is at least one $t\in\fml{T}$ such that: + \begin{equation} + \pr{T = t} \not= \pr{E = t}. \label{eq:two.distributions} + \end{equation} +\end{proposition} + +\begin{proof} + Supposing towards a contradiction that $\pr{T = t} = \pr{E = t}$ for all $t \in \fml{T}$. Then + $$ + \sum_{t\in\fml{T}} \pr{E = t} = \sum_{t\in\fml{T}} \pr{T = t} = 1. + $$ + + Hence $\pr{E = x} = 0$ for all $x \in \fml{E}\setminus\fml{T}$, in contradiction with the fact that for at least one $s \in \fml{S}\setminus\fml{T}$ one has $\pr{E = s} > 0$. +\end{proof} + +The essential conclusion of \cref{prop:two.distributions} is that we are dealing with \emph{two distributions}: one, on the \acp{TC}, explicit in the annotations of the programs and another one, on the events, and entailed by the explicit annotations \emph{and the structure of the \aclp{SM}}. + +% +% +% +\section{Developed Examples}\label{sec:developed.examples} +% +% +% +Here we apply the methods from \cref{sec:extending.probalilities} to the SBF example and to a well known bayesian network, the Earthquake, Burglar, Alarm problem. + +\subsection{The SBF Example}\label{subsec:sbf.example} + +We continue with the program from \cref{eq:example.1}. + +\begin{description} + % + \item[\Aclp{TC}.] The \aclp{TC}, and respective \aclp{SM}, are + % + \begin{center} + \begin{tabular}{ll|r} + \textbf{\Acl{TC}} & \textbf{\Aclp{SM}} & \textbf{$\pwc{t}$} \\ + \hline + $a$ & $ab, ac$ & $0.3$ \\ + $\co{a}$ & $\co{a}$ & $\co{0.3} = 0.7$ + \end{tabular} + \end{center} + % + + \item[\Aclp{SM}.] The $\theta_{s,t}$ parameters in this example are + $$ + \begin{array}{l|cc} + \theta_{s,t} & \co{a} & a \\ + \hline + \co{a} & 1 & 0 \\ + ab & 0 & \theta \\ + ac & 0 & \co{\theta} + \end{array} + $$ + with $\theta \in \intcc{0, 1}$. + + \item[Classes.] Following the definitions in \cref{eq:stable.core,eq:equiv.rel,eq:event.class,eq:measure.class.inconsistent,eq:measure.class.independent,eq:measure.class.other} we get the following quotient set (ignoring $\inconsistent$ and $\indepclass$), and measures: + \begin{equation*} + \begin{array}{l|ll|rr|r} + \stablecore{e} + & \pw{s, \co{a}} + & \pw{s, a} + & \pw{\class{e}, \co{a}} + & \pw{\class{e}, a} + & \pw{\class{e}} + \\[2pt] + & \co{a}, ab, ac + & \co{a}, ab, ac + & \pwcfname=0.7 + & \pwcfname=0.3 + & + \\[2pt] + \hline + \co{a} + & \boxed{1},0,0 + & \boxed{0},\theta, \co{\theta} + & 1 + & 0 + & 0.7 + \\[2pt] + % + ab + & 1,\boxed{0},0 + & 0,\boxed{\theta}, \co{\theta} + & 0 + & \theta + & 0.3\theta + \\[2pt] + % + ac + & 1,0,\boxed{0} + & 0,\theta, \boxed{\co{\theta}} + & 0 + & \co{\theta} + & 0.3\co{\theta} + \\[2pt] + % + \co{a}, ab + & \boxed{1},\boxed{0},0 + & \boxed{0},\boxed{\theta}, \co{\theta} + & 1 + & \theta + & 0.7 + 0.3\theta + \\[2pt] + % + \co{a}, ac + & \boxed{1},0,\boxed{0} + & \boxed{0},\theta, \boxed{\co{\theta}} + & 1 + & \co{\theta} + & 0.7 + 0.3\co{\theta} + \\[2pt] + % + ab, ac + & 1,\boxed{0},\boxed{0} + & 0,\boxed{\theta}, \boxed{\co{\theta}} + & 0 + & \theta + \co{\theta} = 1 + & 0.3 + \\[2pt] + % + \co{a}, ab, ac + & \boxed{1},\boxed{0},\boxed{0} + & \boxed{0},\boxed{\theta}, \boxed{\co{\theta}} + & 1 + & \theta + \co{\theta} = 1 + & 1 + \end{array} + \end{equation*} + + \item[Prior Distributions.] Following the above values (in rational form), and considering the inconsistent and independent classes (resp. $\inconsistent, \indepclass$): + \begin{equation*} + \begin{array}{lr|cc|cc} + \stablecore{e} + & \# \class{e} + & \pw{\class{e}} + & \pw{e} + & \pr{E = e} + & \pr{E \in \class{e}} + \\ + \hline + % + \inconsistent + & 37 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + \indepclass + & 9 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + \co{a} + & 9 + & \frac{7}{10} + & \frac{7}{90} + & \frac{7}{207} + & \frac{7}{23} + \\[4pt] + % + ab + & 3 + & \frac{3}{10}\theta + & \frac{1}{10}\theta + & \frac{1}{23}\theta + & \frac{3}{23}\theta + \\[4pt] + % + ac + & 3 + & \frac{3}{10}\co{\theta} + & \frac{1}{10}\co{\theta} + & \frac{1}{23}\co{\theta} + & \frac{3}{23}\co{\theta} + \\[4pt] + % + \co{a}, ab + & 0 + & \frac{7 + 3\theta}{10} + & 0 + & 0 + & 0 + \\[4pt] + % + \co{a}, ac + & 0 + & \frac{7 + 3\co{\theta}}{10} + & 0 + & 0 + & 0 + % + \\[4pt] + % + ab, ac + & 2 + & \frac{3}{10} + & \frac{3}{20} + & \frac{3}{46} + & \frac{3}{23} + \\[4pt] + % + \co{a}, ab, ac + & 1 + & 1 + & 1 + & \frac{10}{23} + & \frac{10}{23} + \\[4pt] + % + \hline + & + & + & Z = \frac{23}{10} + & + %& \Sigma = 1 + \end{array} + \end{equation*} +\end{description} + +So the prior distributions, denoted by the random variable $E$, of events and classes are: + +\begin{equation} + \begin{array}{l|ccccccccc} + \stablecore{e} & + \inconsistent & + \indepclass & + \co{a} & + ab & + ac & + \co{a}, ab & + \co{a}, ac & + ab, ac & + \co{a}, ab, ac + \\ \hline\\[-12pt] + + \pr{E = e} & + 0 & + 0 & + \frac{7}{207} & + \frac{1}{23}\theta & + \frac{1}{23}\co{\theta} & + 0 & + 0 & + \frac{3}{46} & + \frac{10}{23} + \\[4pt] + + \pr{E \in \class{e}} & + 0 & + 0 & + \frac{7}{23} & + \frac{3}{23}\theta & + \frac{3}{23}\co{\theta} & + 0 & + 0 & + \frac{3}{23} & + \frac{10}{23} + \end{array}\label{eq:sbf.prior} +\end{equation} +% +% +% +\subsubsection*{Testing the Prior Distributions} +% +% +% +These results can be \emph{tested by simulation} in a two-step process, where (1) a ``system'' is \emph{simulated}, to gather some ``observations'' and then (2) empirical distributions from those samples are \emph{related} with the prior distributions from \cref{eq:sbf.prior}. \Cref{tab:sbf.example,tab:sbf.examples.2.3} summarize some of those tests, where datasets of $n = 1000$ observations are generated and analyzed. + +\bigskip\noindent\textbf{Simulating a System.} Following some criteria, more or less related to the given program, a set of events, that represent observations, is generated. Possible simulation procedures include: +\begin{itemize} + % + \item \emph{Random.} Each sample is a \ac{RSL}. Additional sub-criteria may require, for example, consistent events, a \ac{RCE} simulation. + % + \item \emph{Model+Noise.} Gibbs' sampling \cite{geman84} tries to replicate the program model and also to add some noise. For example, let $\alpha, \beta, \gamma \in \intcc{0,1}$ be some parameters to control the sample generation. The first parameter, $\alpha$ is the ``out of model'' samples ratio; $\beta$ represents the total choice $a$ or $\co{a}$ (explicit in the model) and $\gamma$ is the simulation representation of $\theta$. A single sample is then generated following the probabilistic choices below: + $$ + \begin{cases} + \alpha & \text{by \ac{RCE}} \\%[-2pt] + & + \begin{cases} + \beta & \co{a} \\%[-2pt] + & + \begin{cases} + \gamma & ab \\%[-2pt] + & ac + \end{cases} + \end{cases} + \end{cases}, + $$ + where + $$ + \begin{cases} + p & x \\%[-4pt] + & y + \end{cases} + $$ + denotes ``\emph{the value of $x$ with probability $p$, otherwise $y$}'' --- notice that $y$ might entail $x$ and \emph{vice-versa}: E.g.\ some $ab$ can be generated in the \ac{RCE}. + \item \emph{Other Processes.} Besides the two sample generations procedures above, any other processes and variations can be used. For example, requiring that one of $x, \co{x}$ literals is always in a sample or using specific distributions to guide the sampling of literals or events. +\end{itemize} + +\noindent\textbf{Relating the Empirical and the Prior Distributions.} The data from the simulated observations is used to test the prior distribution. Consider the prior, $\pr{E}$, and the empirical, $\pr{S}$, distributions and the following error function: +\begin{equation} + \err{\theta} := \sum_{e\in\fml{E}} \del{\pr{E = e} - \pr{S = e}}^2.\label{eq:err.e.s} +\end{equation} + +\begin{itemize} + \item Since $E$ depends on $\theta$, one can ask how does the error varies with $\theta$. + \item What is the \emph{optimal} (i.e.\ minimum) error value + \begin{equation} + \hat{\theta} := \arg\min_\theta \err{\theta}\label{eq:opt.err} + \end{equation} + and what does it tell us about the program. +\end{itemize} + +\begin{table} + \begin{center} + $$ + \begin{array}{l|cc|c} + \stablecore{e} + & \#\set{S \in \class{e}} + & \pr{S \in \class{e}} + & \pr{E \in \class{e}} + \\ + \hline + % + \inconsistent + & 0 + & 0 + & 0 + \\[2pt] + % + \indepclass + & 24 + & \frac{24}{1000} + & 0 + \\[2pt] + % + \co{a} + & 647 + & \frac{647}{1000} + & \frac{7}{23} + \\[2pt] + % + ab + & 66 + & \frac{66}{1000} + & \frac{3}{23}\theta + \\[2pt] + % + ac + & 231 + & \frac{231}{1000} + & \frac{3}{23}\co{\theta} + \\[2pt] + % + \co{a}, ab + & 0 + & 0 + & 0 + \\[2pt] + % + \co{a}, ac + & 0 + & 0 + & 0 + % + \\[2pt] + % + ab, ac + & 7 + & \frac{7}{1000} + & \frac{3}{23} + \\[2pt] + % + \co{a}, ab, ac + & 25 + & \frac{25}{1000} + & \frac{10}{23} + \\[2pt] + \hline + & n = 1000 + \end{array} + $$ + \end{center} + + \caption{\textbf{Experiment 1.} Results from an experiment where $n=1000$ samples where generated following the \emph{Model+Noise} procedure with parameters $\alpha = 0.1, \beta = 0.3, \gamma = 0.2$. The \emph{empirical} distribution is represented by the random variable $S$ while the \emph{prior}, as before, is denoted by $E$.}\label{tab:sbf.example} +\end{table} + +In order to illustrate this analysis, consider the experiment summarized in \cref{tab:sbf.example}: + +\begin{enumerate} + \item Equation \eqref{eq:err.e.s} becomes + $$ + \err{\theta} = \frac{20869963}{66125000} + \frac{477}{52900}\theta + \frac{18}{529}\theta^2. + $$ + \item The minimum of $\err{\theta}$ is at $\frac{477}{52900} + 2\frac{18}{529}\theta = 0$. Since this value is negative and $\theta \in \intcc{0,1}$, it must be $\hat{\theta} = 0$, and + $$ + \err{\hat{\theta}} = \frac{20869963}{66125000} \approx 0.31561. + $$ +\end{enumerate} + +The parameters $\alpha, \beta, \gamma$ of that experiment favour $ac$ over $ab$. In particular, setting $\gamma = 0.2$ means that in the simulation process, choices between $ab$ and $ac$ favour $ac$, 4 to 1. For completeness sake, we also describe one experiment that favours $ab$ over $ac$ (setting $\gamma=0.8$) and one balanced ($\gamma=0.5$). + +\begin{description} + \item[For $\gamma=0.8$,] the error function is + \begin{equation*} + \err{\theta} = \frac{188207311}{529000000} - \frac{21903}{264500} \theta + \frac{18}{529} \theta^{2} \approx 0.35579 - 0.08281 \theta + 0.03403 \theta ^2 + \end{equation*} + and, with $\theta\in\intcc{0, 1}$ the minimum is at $-0.08281 + 0.06805 \theta = 0$, \emph{i.e.}: + \begin{eqnarray*} + \hat{\theta} : \frac{0.08281}{0.06805} \approx 1.21683& >1. &\text{So,~} \hat{\theta} = 1, \\ + \err{\hat{\theta}} \approx 0.30699&. + \end{eqnarray*} + + \item[For $\gamma=0.5$,] the error function is + \begin{equation*} + \err{\theta} = \frac{10217413}{33062500} - \frac{2181}{66125} \theta + \frac{18}{529} \theta^{2}\approx 0.30903 - 0.03298 \theta + 0.03402 \theta ^2 + \end{equation*} + and, with $\theta\in\intcc{0, 1}$ the minimum is at $-0.03298 + 0.06804 \theta = 0$, \emph{i.e.}: + \begin{eqnarray*} + \hat{\theta} &\approx & + \frac{0.03298}{0.06804} + \approx 0.48471 + \approx \frac{1}{2}, \\ + \err{\hat{\theta}} &\approx & + 0.30104 + \end{eqnarray*} + +\end{description} + +\begin{table} + \begin{center} + $$ + \begin{array}{l|ccc} + \stablecore{e} + & \#\set{S_{0.2} \in \class{e}} + & \#\set{S_{0.8} \in \class{e}} + & \#\set{S_{0.5} \in \class{e}} + \\ + \hline + % + \inconsistent + & 0 + & 0 + & 0 + \\[2pt] + % + \indepclass + & 24 + & 28 + & 23 + \\[2pt] + % + \co{a} + & 647 + & 632 + & 614 + \\[2pt] + % + ab + & 66 + & 246 + & 165 + \\[2pt] + % + ac + & 231 + & 59 + & 169 + \\[2pt] + % + \co{a}, ab + & 0 + & 0 + & 0 + \\[2pt] + % + \co{a}, ac + & 0 + & 0 + & 0 + % + \\[2pt] + % + ab, ac + & 7 + & 8 + & 4 + \\[2pt] + % + \co{a}, ab, ac + & 25 + & 27 + & 25 + \end{array} + $$ + \end{center} + + \caption{\textbf{Experiments 2 and 3.} Results from experiments where, in each, $n=1000$ samples are generated following the \emph{Model+Noise} procedure with parameters $\alpha = 0.1, \beta = 0.3, \gamma = 0.8$ (Experiment 2) and $\gamma=0.5$ (Experiment 3). Empirical distributions are represented by the random variables $S_{0.8}$ and $S_{0.5}$ respectively. Data from experience \cref{tab:sbf.example} is also included, and denoted by $S_{0.2}$, to provide reference.}\label{tab:sbf.examples.2.3} +\end{table} + +%\oldnote{under- and over- estimation} +These experiments show that data can indeed be used to estimate the parameters of the model. However, we observe that the estimated $\hat{\theta}$ has a tendency to over- or under- estimate the $\theta$ used to generate the samples. More precisely, in experiment \ref{tab:sbf.example} data is generated with $\gamma = 0.2$ (the surrogate of $\theta$) which is under-estimated with $\hat{\theta} = 0$ while in experiment 2, $\gamma = 0.8$ leads the over-estimation $\hat{\theta} = 1$. This suggests that we might need to refine the error estimation process. However, experiment 3 data results from $\gamma = 0.5$ and we've got $\hat{\theta} \approx 0.48471 \approx 0.5$, which is more in line with what is to be expected. +% +% +% +\subsection{An Example Involving Bayesian Networks}\label{subsec:example.bayesian.networks} +% +% +% +As it turns out, our framework is suitable to deal with more sophisticated cases, in particular cases involving Bayesian networks. In order to illustrate this, in this section we see how the classical example of the Burglary, Earthquake, Alarm \cite{Judea88} works in our setting. This example is a commonly used example in Bayesian networks because it illustrates reasoning under uncertainty. The gist of the example is given in \cref{Figure_Alarm}. It involves a simple network of events and conditional probabilities. + +The events are: Burglary ($B$), Earthquake ($E$), Alarm ($A$), Mary calls ($M$) and John calls ($J$). The initial events $B$ and $E$ are assumed to be independent events that occur with probabilities $\pr{B}$ and $\pr{E}$, respectively. There is an alarm system that can be triggered by either of the initial events $B$ and $E$. The probability of the alarm going off is a conditional probability given that $B$ and $E$ have occurred. One denotes these probabilities, as per usual, by $\pr{A \given B}$, and $\pr{A \given E}$. There are two neighbors, Mary and John who have agreed to call if they hear the alarm. The probability that they do actually call is also a conditional probability denoted by $\pr{M \given A}$ and $\pr{J \given A}$, respectively. + +\begin{figure} + \begin{center} + \begin{tikzpicture}[node distance=2.5cm] + + % Nodes + \node[smodel, circle] (A) {A}; + \node[tchoice, above right of=A] (B) {B}; + \node[tchoice, above left of=A] (E) {E}; + \node[tchoice, below left of=A] (M) {M}; + \node[tchoice, below right of=A] (J) {J}; + + % Edges + \draw[->] (B) to[bend left] (A) node[right,xshift=1.1cm,yshift=0.8cm] {\footnotesize{$\pr{B}=0.001$}} ; + \draw[->] (E) to[bend right] (A) node[left, xshift=-1.4cm,yshift=0.8cm] {\footnotesize{$\pr{E}=0.002$}} ; + \draw[->] (A) to[bend right] (M) node[left,xshift=0.2cm,yshift=0.7cm] {\footnotesize{$\pr{M \given A}$}}; + \draw[->] (A) to[bend left] (J) node[right,xshift=-0.2cm,yshift=0.7cm] {\footnotesize{$\pr{J \given A}$}} ; + \end{tikzpicture} + \end{center} + + \begin{multicols}{3} + + \footnotesize{ + \begin{equation*} + \begin{split} + &\pr{M \given A}\\ + & \begin{array}{c|cc} + & m & \neg m \\ + \hline + a & 0.9 & 0.1 \\ + \neg a & 0.05 & 0.95 + \end{array} + \end{split} + \end{equation*} + } + + \footnotesize{ + \begin{equation*} + \begin{split} + &\pr{J \given A}\\ + & \begin{array}{c|cc} + & j & \neg j \\ + \hline + a & 0.7 & 0.3 \\ + \neg a & 0.01 & 0.99 + \end{array} + \end{split} + \end{equation*} + } + \footnotesize{ + \begin{equation*} + \begin{split} + \pr{A \given B \wedge E}\\ + \begin{array}{c|c|cc} + & & a & \neg a \\ + \hline + b & e & 0.95 & 0.05 \\ + b & \neg e & 0.94 & 0.06 \\ + \neg b & e & 0.29 & 0.71 \\ + \neg b & \neg e & 0.001 & 0.999 + \end{array} + \end{split} + \end{equation*} + } + \end{multicols} + \caption{The Earthquake, Burglary, Alarm model} + \label{Figure_Alarm} +\end{figure} + +We follow the convention of representing the (upper case) random variable $X$ by the lower case $x$. +% +Considering the probabilities given in \cref{Figure_Alarm} we obtain the following spe\-ci\-fi\-ca\-tion: + +\begin{equation*} + \begin{aligned} + \probfact{0.001}{b} & ,\cr + \probfact{0.002}{e} & ,\cr + \end{aligned} + \label{eq:not_so_simple_example} +\end{equation*} + +For the table giving the probability $\pr{M \given A}$ we obtain the program: + +\begin{equation*} + \begin{aligned} + \probfact{0.9}{\condsymb{m}{a}} & ,\cr + \probfact{0.05}{\condsymb{m}{\co{a}}} & ,\cr + m & \leftarrow a \wedge \condsymb{m}{a},\cr + m & \leftarrow \neg a \wedge \condsymb{m}{\co{a}}. + \end{aligned} +\end{equation*} + +This latter program can be simplified by writing $\probrule{0.9}{m}{a}$ and $\probrule{0.05}{m}{\neg a}$. +\note{SPA: \emph{parece-me que pode ser feito assim, mas estritamente falando já não corresponde à forma inicialmente anunciada}} + +Similarly, for the probability $\pr{J \given A}$ we obtain + +\begin{equation*} + \begin{aligned} + \probrule{0.7}{j}{&a}, \\ + \probrule{0.01}{j}{&\neg a}, + \end{aligned} +\end{equation*} + +Finally, for the probability $\pr{A \given B \wedge E}$ we obtain + +\begin{equation*} + \begin{aligned} + \probrule{0.95}{a}{b, e}, & & & + \probrule{0.94}{a}{b, \co{e}},\cr + \probrule{0.29}{a}{\co{b}, e}, & & & + \probrule{0.001}{a}{\co{b}, \co{e}}. + \end{aligned} +\end{equation*} + +One can then proceed as in the previous subsection and analyze this example. The details of such analysis are not given here since they are analogous, albeit admittedly more cumbersome. +% +% +% +\section{Discussion and Future Work} +% +% +% +This work is a first venture into expressing probability distributions using algebraic expressions derived from a logical program. +We would like to point out that there is still much to explore concerning the full expressive power of logic programs and \ac{ASP} programs. So far, we have not considered recursion, logical variables or functional symbols. Also, there is still little effort to articulate with the related fields, probabilistic logical programming, machine learning, inductive programming, \emph{etc.} + +The equivalence relation from \cref{def:equiv.rel} identifies the $s \subseteq e$ and $e \subseteq s$ cases. Relations that distinguish such cases might enable better relations between the models and processes from the \aclp{SM}. + +The example from \cref{subsec:example.bayesian.networks} shows that the theory, methodology, and tools, from bayesian networks can be adapted to our approach. The connection with Markov Fields \cite{kindermann80} is left for future work. An example of a ``program selection'' application (as mentioned in \cref{item:program.selection}, \cref{sec:example.1}) is also left for future work. + +%\oldnote{under- over- estimate} +Related with the remark at the end of \cref{subsec:sbf.example}, on the tendency of $\hat{\theta}$ to under- or over- estimate $\theta$, notice that the error function in \eqref{eq:err.e.s} expresses only one of many possible ``distances'' between the empirical and prior distributions. Variations include normalizing this function by the size of $\fml{E}$ or using the \acl{KL} divergence. The key contribution of this function in this work is to find an optimal $\theta$. Moreover, further experiments, not included in this paper, with $\alpha = 0.0$, lead to $\hat{\theta} \approx \gamma$, \emph{i.e.}\ setting the prior noise to zero leads to full recovering $\theta$ from the observations. + +We decided to set the measure of inconsistent events to $0$ but, maybe, in some cases, we shouldn't. For example, since observations may be affected by noise, one can expect inconsistencies between the literals of an observation to occur. +% +% +% +\section*{Acknowledgements} +% +% +% +This work is supported by NOVALINCS (UIDB/04516/2020) with the financial support of FCT.IP. +The third author acknowledges the support of FCT - Funda\c{c}\~ao para a Ci\^{e}ncia e Tecnologia under the projects: UIDP/04561/2020 and UIDP/04674/2020, and the research centers CMAFcIO -- Centro de Matem\'{a}tica, Aplica\c{c}\~{o}es Fundamentais e Investiga\c{c}\~{a}o Operacional and CIMA -- Centro de Investigação em Matemática e Aplicações. + +The authors thank Lígia Henriques-Rodrigues, Matthias Knorr and Ricardo Gonçalves for valuable comments on a preliminary version of this paper, and Alice Martins for contributions on software. +% +% +% +\printbibliography +% +% +% +\end{document} \ No newline at end of file diff --git a/text/paper_01/related_papers_plingo.md b/text/paper_01/related_papers_plingo.md new file mode 100644 index 0000000..ac7a239 --- /dev/null +++ b/text/paper_01/related_papers_plingo.md @@ -0,0 +1,9 @@ +[1] J. Lee and Y. Wang. (2016). Weighted Rules under the Stable Model Semantics + +[2] C. Baral and M. Gelfond and J.N. Rushton. (2009), Probabilistic Reasoning with Answer Sets + +[3] L. De Raedt and A. Kimmig and H. Toivonen ProbLog: A Probabilistic Prolog and its Applications in Link Discovery + +[4] J. Lee and Z. Yang (2017). LPMLN, Weak Constraints and P-log + +[5] J. Pajunen and T. Janhunen. (2021). Solution Enumeration by Optimality in Answer Set Programming. Theory and Practice of Logic Programming, 21(6), 750-767. \ No newline at end of file diff --git a/text/paper_01/reviews/pre-paperComments.pdf b/text/paper_01/reviews/pre-paperComments.pdf new file mode 100644 index 0000000..d32ce86 Binary files /dev/null and b/text/paper_01/reviews/pre-paperComments.pdf differ diff --git a/text/paper_01/temp.fc/LecBayesNetsAndInference.pdf b/text/paper_01/temp.fc/LecBayesNetsAndInference.pdf new file mode 100644 index 0000000..067233e Binary files /dev/null and b/text/paper_01/temp.fc/LecBayesNetsAndInference.pdf differ diff --git a/text/paper_01/temp.fc/hj18.pdf b/text/paper_01/temp.fc/hj18.pdf new file mode 100644 index 0000000..6f78ce1 Binary files /dev/null and b/text/paper_01/temp.fc/hj18.pdf differ diff --git a/text/paper_01/temp.fc/lec15.pdf b/text/paper_01/temp.fc/lec15.pdf new file mode 100644 index 0000000..0fbb6ff Binary files /dev/null and b/text/paper_01/temp.fc/lec15.pdf differ diff --git a/text/paper_01/zugz-paper_01.code-workspace b/text/paper_01/zugz-paper_01.code-workspace new file mode 100644 index 0000000..975da5d --- /dev/null +++ b/text/paper_01/zugz-paper_01.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [ + { + "path": "." + }, + { + "path": "../.." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/text/paper_01/zugzwang.bib b/text/paper_01/zugzwang.bib new file mode 100644 index 0000000..342f020 --- /dev/null +++ b/text/paper_01/zugzwang.bib @@ -0,0 +1,232 @@ +@book{kindermann80, + author = {Kindermann, Ross and Snell, J. Laurie}, + title = {Markov random fields and their applications}, + series = {Contemporary Mathematics}, + volume = {1}, + publisher = {American Mathematical Society, Providence, RI}, + year = {1980}, + pages = {ix+142}, + isbn = {0-8218-5001-6}, + mrclass = {60K35 (60G60 82A42 82A67 94A05)}, + mrnumber = {620955}, + mrreviewer = {J.\ Theodore\ Cox} +} + +@article{geman84, + author = {Geman, Stuart and Geman, Donald}, + journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence}, + title = {Stochastic Relaxation, Gibbs Distributions, and the Bayesian Restoration of Images}, + year = {1984}, + volume = {PAMI-6}, + number = {6}, + pages = {721-741}, + doi = {10.1109/TPAMI.1984.4767596} +} + + +@book{Judea88, + author = {Pearl, Judea}, + title = {Probabilistic reasoning in intelligent systems: networks of + plausible inference}, + series = {The Morgan Kaufmann Series in Representation and Reasoning}, + publisher = {Morgan Kaufmann, San Mateo, CA}, + year = {1988}, + pages = {xx+552}, + isbn = {0-934613-73-7}, + mrclass = {68-02 (68T01 92A25)}, + mrnumber = {965765}, + mrreviewer = {V. Yu. Trakhtman} +} + + @article{sympy, + title = {SymPy: symbolic computing in Python}, + author = {Meurer, Aaron and Smith, Christopher P. and Paprocki, Mateusz and \v{C}ert\'{i}k, Ond\v{r}ej and Kirpichev, Sergey B. and Rocklin, Matthew and Kumar, AMiT and Ivanov, Sergiu and Moore, Jason K. and Singh, Sartaj and Rathnayake, Thilina and Vig, Sean and Granger, Brian E. and Muller, Richard P. and Bonazzi, Francesco and Gupta, Harsh and Vats, Shivam and Johansson, Fredrik and Pedregosa, Fabian and Curry, Matthew J. and Terrel, Andy R. and Rou\v{c}ka, \v{S}t\v{e}p\'{a}n and Saboo, Ashutosh and Fernando, Isuru and Kulal, Sumith and Cimrman, Robert and Scopatz, Anthony}, + year = 2017, + month = jan, + keywords = {Python, Computer algebra system, Symbolics}, + abstract = { + SymPy is an open source computer algebra system written in pure Python. It is built with a focus on extensibility and ease of use, through both interactive and programmatic applications. These characteristics have led SymPy to become a popular symbolic library for the scientific Python ecosystem. This paper presents the architecture of SymPy, a description of its features, and a discussion of select submodules. The supplementary material provide additional examples and further outline details of the architecture and features of SymPy. + }, + volume = 3, + pages = {e103}, + journal = {PeerJ Computer Science}, + issn = {2376-5992}, + url = {https://doi.org/10.7717/peerj-cs.103}, + doi = {10.7717/peerj-cs.103} +} + +@inproceedings{verreet2022inference, + title = {Inference and learning with model uncertainty in probabilistic logic programs}, + author = {Verreet, Victor and Derkinderen, Vincent and Dos Martires, Pedro Zuidberg and De Raedt, Luc}, + booktitle = {Proceedings of the AAAI Conference on Artificial Intelligence}, + volume = {36}, + number = {9}, + pages = {10060--10069}, + year = {2022} +} + +@article{cropper2022inductive, + title = {Inductive logic programming at 30}, + author = {Cropper, Andrew and Duman{\v{c}}i{\'c}, Sebastijan and Evans, Richard and Muggleton, Stephen H}, + journal = {Machine Learning}, + volume = {111}, + number = {1}, + pages = {147--172}, + year = {2022}, + publisher = {Springer} +} + +@article{cozman2020joy, + title = {The joy of probabilistic answer set programming: semantics, complexity, expressivity, inference}, + author = {Cozman, Fabio Gagliardi and Mau{\'a}, Denis Deratani}, + journal = {International Journal of Approximate Reasoning}, + volume = {125}, + pages = {218--239}, + year = {2020}, + publisher = {Elsevier} +} + +@article{gebser2012answer, + title = {Answer set solving in practice}, + author = {Gebser, Martin and Kaminski, Roland and Kaufmann, Benjamin and Schaub, Torsten}, + journal = {Synthesis lectures on artificial intelligence and machine learning}, + volume = {6}, + number = {3}, + pages = {1--238}, + year = {2012}, + publisher = {Morgan \& Claypool Publishers} +} + + +@article{bezanson2017julia, + author = {Bezanson, Jeff and Edelman, Alan and Karpinski, Stefan and Shah, Viral B.}, + title = {Julia: A Fresh Approach to Numerical Computing}, + journal = {SIAM Review}, + volume = {59}, + number = {1}, + pages = {65-98}, + year = {2017}, + doi = {10.1137/141000671}, + %url = {https://doi.org/10.1137/141000671}, + %eprint = {https://doi.org/10.1137/141000671}, + abstract = { Bridging cultures that have often been distant, Julia combines expertise from the diverse fields of computer science and computational science to create a new approach to numerical computing. Julia is designed to be easy and fast and questions notions generally held to be “laws of nature" by practitioners of numerical computing: \beginlist \item High-level dynamic programs have to be slow. \item One must prototype in one language and then rewrite in another language for speed or deployment. \item There are parts of a system appropriate for the programmer, and other parts that are best left untouched as they have been built by the experts. \endlist We introduce the Julia programming language and its design---a dance between specialization and abstraction. Specialization allows for custom treatment. Multiple dispatch, a technique from computer science, picks the right algorithm for the right circumstance. Abstraction, which is what good computation is really about, recognizes what remains the same after differences are stripped away. Abstractions in mathematics are captured as code through another technique from computer science, generic programming. Julia shows that one can achieve machine performance without sacrificing human convenience. } +} + +@article{gowda2021high, + title={High-performance symbolic-numerics via multiple dispatch}, + author={Gowda, Shashi and Ma, Yingbo and Cheli, Alessandro and Gwozdz, Maja and Shah, Viral B and Edelman, Alan and Rackauckas, Christopher}, + journal={arXiv preprint arXiv:2105.03949}, + year={2021} +} + +@article{bouchetvalat2023dataframes, + title={DataFrames.jl: Flexible and Fast Tabular Data in Julia}, + volume={107}, + %url={https://www.jstatsoft.org/index.php/jss/article/view/v107i04}, + doi={10.18637/jss.v107.i04}, + abstract={DataFrames.jl is a package written for and in the Julia language offering flexible and efficient handling of tabular data sets in memory. Thanks to Julia’s unique strengths, it provides an appealing set of features: Rich support for standard data processing tasks and excellent flexibility and efficiency for more advanced and non-standard operations. We present the fundamental design of the package and how it compares with implementations of data frames in other languages, its main features, performance, and possible extensions. We conclude with a practical illustration of typical data processing operations.}, + number={4}, + journal={Journal of Statistical Software}, + author={Bouchet-Valat, Milan and Kamiński, Bogumił}, + year={2023}, + pages={1--32} +} + +@book{riguzzi2022foundations, + address = {New York}, + edition = {1}, + title = {Foundations of {Probabilistic} {Logic} {Programming}: {Languages}, {Semantics}, {Inference} and {Learning}}, + isbn = {978-1-00-333819-2}, + shorttitle = {Foundations of {Probabilistic} {Logic} {Programming}}, + %url = {https://www.taylorfrancis.com/books/9781003338192}, + language = {en}, + urldate = {2023-03-01}, + publisher = {River Publishers}, + author = {Riguzzi, Fabrizio}, + month = sep, + year = {2022}, + doi = {10.1201/9781003338192}, +} + +@inproceedings{sato1995statistical, + title={A Statistical Learning Method for Logic Programs with Distribution Semantics}, + author={Taisuke Sato}, + booktitle={International Conference on Logic Programming}, + year={1995}, + %url={https://api.semanticscholar.org/CorpusID:10424169} +} + + +@article{lifschitz2002answer, + title = {Answer set programming and plan generation}, + volume = {138}, + issn = {0004-3702}, + %url = {https://www.sciencedirect.com/science/article/pii/S0004370202001868}, + doi = {https://doi.org/10.1016/S0004-3702(02)00186-8}, + abstract = {The idea of answer set programming is to represent a given computational problem by a logic program whose answer sets correspond to solutions, and then use an answer set solver, such as smodels or dlv, to find an answer set for this program. Applications of this method to planning are related to the line of research on the frame problem that started with the invention of formal nonmonotonic reasoning in 1980.}, + number = {1}, + journal = {Artificial Intelligence}, + author = {Lifschitz, Vladimir}, + year = {2002}, + keywords = {Answer sets, Default logic, Frame problem, Logic programming, Planning}, + pages = {39--54}, +} + +@inproceedings{lee2016weighted, + title={Weighted rules under the stable model semantics}, + author={Lee, Joohyung and Wang, Yi}, + booktitle={Fifteenth international conference on the principles of knowledge representation and reasoning}, + year={2016} +} + +@article{baral2009probabilistic, + title={Probabilistic reasoning with {A}nswer {S}ets}, + author={Baral, Chitta and Gelfond, Michael and Rushton, Nelson}, + journal={Theory and Practice of Logic Programming}, + volume={9}, + number={1}, + pages={57--144}, + year={2009}, + publisher={Cambridge University Press} +} + +@inproceedings{de2007problog, + title={ProbLog: A probabilistic {P}rolog and its application in link discovery}, + author={De Raedt, Luc and Kimmig, Angelika and Toivonen, Hannu and Veloso, M}, + booktitle={IJCAI 2007, Proceedings of the 20th international joint conference on artificial intelligence}, + pages={2462--2467}, + year={2007}, + organization={IJCAI-INT JOINT CONF ARTIF INTELL} +} + +@inproceedings{lee2017lpmln, + title={LPMLN, {W}eak {C}onstraints, and {P}-log}, + author={Lee, Joohyung and Yang, Zhun}, + booktitle={Proceedings of the AAAI Conference on Artificial Intelligence}, + volume={31}, + number={1}, + year={2017} +} + +@article{pajunen2021solution, + title={Solution enumeration by optimality in {A}nswer {S}et {P}rogramming}, + author={Pajunen, Jukka and Janhunen, Tomi}, + journal={Theory and Practice of Logic Programming}, + volume={21}, + number={6}, + pages={750--767}, + year={2021}, + publisher={Cambridge University Press} +} + + +@article{alberti2017cplint, + title={cplint on SWISH: Probabilistic logical inference with a web browser}, + author={Alberti, Marco and Bellodi, Elena and Cota, Giuseppe and Riguzzi, Fabrizio and Zese, Riccardo}, + journal={Intelligenza Artificiale}, + volume={11}, + number={1}, + pages={47--64}, + year={2017}, + publisher={IOS Press} +} diff --git a/text/presentation_01/00base/abstract.md b/text/presentation_01/00base/abstract.md new file mode 100644 index 0000000..1ffc91a --- /dev/null +++ b/text/presentation_01/00base/abstract.md @@ -0,0 +1,13 @@ +We address the problem of extending probability from the total choices of an ASP specification to the stable models and, from there, to general events. + +Our approach is algebraic in the sense that it relies on an equivalence relation over the set of events and uncertainty is expressed with variables and polynomial expressions. + +We frame our work in the context of machine learning and induction of logic problems, the two (current) forms of artificial intelligence. + +References: + +- https://arxiv.org/abs/1801.00631, Gary Marcus, Deep Learning: A Critical Appraisal, 2018. +- https://arxiv.org/abs/1911.01547, François Chollet, On the Measure of Intelligence, 2019. +- https://arxiv.org/abs/1801.00631, Bengio et al., A Meta-Transfer Objective for Learning to Disentangle Causal Mechanisms, 2019. +- https://arxiv.org/abs/1801.00631, Cropper et al., Turning 30: New Ideas in Inductive Logic Programming, 2020. +- https://doi.org/10.1201/9781003427421, Fabrizio Riguzzi, Foundations of Probabilistic Logic Programming, 2023. \ No newline at end of file diff --git a/text/presentation_01/00base/color.lp b/text/presentation_01/00base/color.lp new file mode 100644 index 0000000..11a6225 --- /dev/null +++ b/text/presentation_01/00base/color.lp @@ -0,0 +1,15 @@ +node(1..6). + +edge(1,2). edge(2,4). edge(3,1). +edge(4,1). edge(5,3). edge(6,2). +edge(1,3). edge(2,5). edge(3,4). +edge(4,2). edge(5,4). edge(6,3). +edge(1,4). edge(2,6). edge(3,5). +edge(5,6). edge(6,5). + +color(r). color(b). color(g). + +1 { color(X,C) : color(C) } 1 :- node(X). +:- edge(X,Y), color(X,C), color(Y,C). + +#show color/2. \ No newline at end of file diff --git a/text/presentation_01/00base/drafts.ipynb b/text/presentation_01/00base/drafts.ipynb new file mode 100644 index 0000000..b6c2d3d --- /dev/null +++ b/text/presentation_01/00base/drafts.ipynb @@ -0,0 +1,11322 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# using Plots" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "using RDatasets" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "iris = dataset(\"datasets\", \"iris\");\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
150×6 DataFrame
125 rows omitted
RowSepalLengthSepalWidthPetalLengthPetalWidthSpeciesColor
Float64Float64Float64Float64Cat…String
15.13.51.40.2setosamagenta
24.93.01.40.2setosamagenta
34.73.21.30.2setosamagenta
44.63.11.50.2setosamagenta
55.03.61.40.2setosamagenta
65.43.91.70.4setosamagenta
74.63.41.40.3setosamagenta
85.03.41.50.2setosamagenta
94.42.91.40.2setosamagenta
104.93.11.50.1setosamagenta
115.43.71.50.2setosamagenta
124.83.41.60.2setosamagenta
134.83.01.40.1setosamagenta
1396.03.04.81.8virginicacyan
1406.93.15.42.1virginicacyan
1416.73.15.62.4virginicacyan
1426.93.15.12.3virginicacyan
1435.82.75.11.9virginicacyan
1446.83.25.92.3virginicacyan
1456.73.35.72.5virginicacyan
1466.73.05.22.3virginicacyan
1476.32.55.01.9virginicacyan
1486.53.05.22.0virginicacyan
1496.23.45.42.3virginicacyan
1505.93.05.11.8virginicacyan
" + ], + "text/latex": [ + "\\begin{tabular}{r|cccccc}\n", + "\t& SepalLength & SepalWidth & PetalLength & PetalWidth & Species & Color\\\\\n", + "\t\\hline\n", + "\t& Float64 & Float64 & Float64 & Float64 & Cat… & String\\\\\n", + "\t\\hline\n", + "\t1 & 5.1 & 3.5 & 1.4 & 0.2 & setosa & magenta \\\\\n", + "\t2 & 4.9 & 3.0 & 1.4 & 0.2 & setosa & magenta \\\\\n", + "\t3 & 4.7 & 3.2 & 1.3 & 0.2 & setosa & magenta \\\\\n", + "\t4 & 4.6 & 3.1 & 1.5 & 0.2 & setosa & magenta \\\\\n", + "\t5 & 5.0 & 3.6 & 1.4 & 0.2 & setosa & magenta \\\\\n", + "\t6 & 5.4 & 3.9 & 1.7 & 0.4 & setosa & magenta \\\\\n", + "\t7 & 4.6 & 3.4 & 1.4 & 0.3 & setosa & magenta \\\\\n", + "\t8 & 5.0 & 3.4 & 1.5 & 0.2 & setosa & magenta \\\\\n", + "\t9 & 4.4 & 2.9 & 1.4 & 0.2 & setosa & magenta \\\\\n", + "\t10 & 4.9 & 3.1 & 1.5 & 0.1 & setosa & magenta \\\\\n", + "\t11 & 5.4 & 3.7 & 1.5 & 0.2 & setosa & magenta \\\\\n", + "\t12 & 4.8 & 3.4 & 1.6 & 0.2 & setosa & magenta \\\\\n", + "\t13 & 4.8 & 3.0 & 1.4 & 0.1 & setosa & magenta \\\\\n", + "\t14 & 4.3 & 3.0 & 1.1 & 0.1 & setosa & magenta \\\\\n", + "\t15 & 5.8 & 4.0 & 1.2 & 0.2 & setosa & magenta \\\\\n", + "\t16 & 5.7 & 4.4 & 1.5 & 0.4 & setosa & magenta \\\\\n", + "\t17 & 5.4 & 3.9 & 1.3 & 0.4 & setosa & magenta \\\\\n", + "\t18 & 5.1 & 3.5 & 1.4 & 0.3 & setosa & magenta \\\\\n", + "\t19 & 5.7 & 3.8 & 1.7 & 0.3 & setosa & magenta \\\\\n", + "\t20 & 5.1 & 3.8 & 1.5 & 0.3 & setosa & magenta \\\\\n", + "\t21 & 5.4 & 3.4 & 1.7 & 0.2 & setosa & magenta \\\\\n", + "\t22 & 5.1 & 3.7 & 1.5 & 0.4 & setosa & magenta \\\\\n", + "\t23 & 4.6 & 3.6 & 1.0 & 0.2 & setosa & magenta \\\\\n", + "\t24 & 5.1 & 3.3 & 1.7 & 0.5 & setosa & magenta \\\\\n", + "\t25 & 4.8 & 3.4 & 1.9 & 0.2 & setosa & magenta \\\\\n", + "\t26 & 5.0 & 3.0 & 1.6 & 0.2 & setosa & magenta \\\\\n", + "\t27 & 5.0 & 3.4 & 1.6 & 0.4 & setosa & magenta \\\\\n", + "\t28 & 5.2 & 3.5 & 1.5 & 0.2 & setosa & magenta \\\\\n", + "\t29 & 5.2 & 3.4 & 1.4 & 0.2 & setosa & magenta \\\\\n", + "\t30 & 4.7 & 3.2 & 1.6 & 0.2 & setosa & magenta \\\\\n", + "\t$\\dots$ & $\\dots$ & $\\dots$ & $\\dots$ & $\\dots$ & $\\dots$ & $\\dots$ \\\\\n", + "\\end{tabular}\n" + ], + "text/plain": [ + "\u001b[1m150×6 DataFrame\u001b[0m\n", + "\u001b[1m Row \u001b[0m│\u001b[1m SepalLength \u001b[0m\u001b[1m SepalWidth \u001b[0m\u001b[1m PetalLength \u001b[0m\u001b[1m PetalWidth \u001b[0m\u001b[1m Species \u001b[0m\u001b[1m Color \u001b[0m\n", + " │\u001b[90m Float64 \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Cat… \u001b[0m\u001b[90m String \u001b[0m\n", + "─────┼──────────────────────────────────────────────────────────────────────\n", + " 1 │ 5.1 3.5 1.4 0.2 setosa magenta\n", + " 2 │ 4.9 3.0 1.4 0.2 setosa magenta\n", + " 3 │ 4.7 3.2 1.3 0.2 setosa magenta\n", + " 4 │ 4.6 3.1 1.5 0.2 setosa magenta\n", + " 5 │ 5.0 3.6 1.4 0.2 setosa magenta\n", + " 6 │ 5.4 3.9 1.7 0.4 setosa magenta\n", + " 7 │ 4.6 3.4 1.4 0.3 setosa magenta\n", + " 8 │ 5.0 3.4 1.5 0.2 setosa magenta\n", + " 9 │ 4.4 2.9 1.4 0.2 setosa magenta\n", + " 10 │ 4.9 3.1 1.5 0.1 setosa magenta\n", + " 11 │ 5.4 3.7 1.5 0.2 setosa magenta\n", + " ⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮\n", + " 141 │ 6.7 3.1 5.6 2.4 virginica cyan\n", + " 142 │ 6.9 3.1 5.1 2.3 virginica cyan\n", + " 143 │ 5.8 2.7 5.1 1.9 virginica cyan\n", + " 144 │ 6.8 3.2 5.9 2.3 virginica cyan\n", + " 145 │ 6.7 3.3 5.7 2.5 virginica cyan\n", + " 146 │ 6.7 3.0 5.2 2.3 virginica cyan\n", + " 147 │ 6.3 2.5 5.0 1.9 virginica cyan\n", + " 148 │ 6.5 3.0 5.2 2.0 virginica cyan\n", + " 149 │ 6.2 3.4 5.4 2.3 virginica cyan\n", + " 150 │ 5.9 3.0 5.1 1.8 virginica cyan\n", + "\u001b[36m 129 rows omitted\u001b[0m" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unique(iris.Species)\n", + "species_color = Dict(\"virginica\" => \"cyan\", \"setosa\" => \"magenta\", \"versicolor\" => \"yellow\")\n", + "transform!(iris, :Species => ByRow(s -> species_color[s]) => :Color)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "scatter(label=[\"setosa\", \"virginica\", \"versicolor\"], xlabel=\"Sepal Length\", ylabel=\"Sepal Width\", iris.SepalLength, iris.SepalWidth, color=iris.Color)\n", + "x = 4:0.1:6.5;\n", + "y = (x -> 0.65 * x - 0.4)\n", + "plot!(x, y, label=\"model\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.20000000000000018" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2.4 - 0.65 * 4" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "using Gadfly" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: both Gadfly and Plots export \"plot\"; uses of it in module Main must be qualified\n" + ] + }, + { + "ename": "LoadError", + "evalue": "UndefVarError: `plot` not defined", + "output_type": "error", + "traceback": [ + "UndefVarError: `plot` not defined", + "", + "Stacktrace:", + " [1] top-level scope", + " @ In[8]:1" + ] + } + ], + "source": [ + "plot(dataset(\"datasets\",\"iris\"), x=\"SepalWidth\", y=\"SepalLength\", color=\"Species\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " SepalLength\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4\n", + " \n", + " \n", + " \n", + " \n", + " 5\n", + " \n", + " \n", + " \n", + " \n", + " 6\n", + " \n", + " \n", + " \n", + " \n", + " 7\n", + " \n", + " \n", + " \n", + " \n", + " 8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.9,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.2,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.5,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.8,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.9,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.9,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.7,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,2.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.9,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.4,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.2,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.2,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.2,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.7,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.9,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,2.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.7,2.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.7,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.5,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.8,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.5,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.2,3.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.3,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.6,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.5,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.1,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.2,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,2.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,2.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,2.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,2.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,2.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.8,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.6,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.9,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.2,2.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,2.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.9,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,2.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.2,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.6,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,2.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.5,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,2.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.9,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.0,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.3,3.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.6,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.8,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.4,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.5,2.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.4,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,3.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,4.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.2,4.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.8,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.7,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.2,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.2,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.8,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.6,3.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,4.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,4.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.3,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.8,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.8,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.4,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.6,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.6,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.7,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " setosa\n", + " \n", + " \n", + " \n", + " \n", + " versicolor\n", + " \n", + " \n", + " \n", + " \n", + " virginica\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Iris\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 2.0\n", + " \n", + " \n", + " \n", + " \n", + " 2.5\n", + " \n", + " \n", + " \n", + " \n", + " 3.0\n", + " \n", + " \n", + " \n", + " \n", + " 3.5\n", + " \n", + " \n", + " \n", + " \n", + " 4.0\n", + " \n", + " \n", + " \n", + " \n", + " 4.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " SepalWidth\n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " SepalLength\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4\n", + " \n", + " \n", + " \n", + " \n", + " 5\n", + " \n", + " \n", + " \n", + " \n", + " 6\n", + " \n", + " \n", + " \n", + " \n", + " 7\n", + " \n", + " \n", + " \n", + " \n", + " 8\n", + " \n", + " \n", + " \n", + " \n", + " 4.0\n", + " \n", + " \n", + " \n", + " \n", + " 4.2\n", + " \n", + " \n", + " \n", + " \n", + " 4.4\n", + " \n", + " \n", + " \n", + " \n", + " 4.6\n", + " \n", + " \n", + " \n", + " \n", + " 4.8\n", + " \n", + " \n", + " \n", + " \n", + " 5.0\n", + " \n", + " \n", + " \n", + " \n", + " 5.2\n", + " \n", + " \n", + " \n", + " \n", + " 5.4\n", + " \n", + " \n", + " \n", + " \n", + " 5.6\n", + " \n", + " \n", + " \n", + " \n", + " 5.8\n", + " \n", + " \n", + " \n", + " \n", + " 6.0\n", + " \n", + " \n", + " \n", + " \n", + " 6.2\n", + " \n", + " \n", + " \n", + " \n", + " 6.4\n", + " \n", + " \n", + " \n", + " \n", + " 6.6\n", + " \n", + " \n", + " \n", + " \n", + " 6.8\n", + " \n", + " \n", + " \n", + " \n", + " 7.0\n", + " \n", + " \n", + " \n", + " \n", + " 7.2\n", + " \n", + " \n", + " \n", + " \n", + " 7.4\n", + " \n", + " \n", + " \n", + " \n", + " 7.6\n", + " \n", + " \n", + " \n", + " \n", + " 7.8\n", + " \n", + " \n", + " \n", + " \n", + " 8.0\n", + " \n", + " \n", + " \n", + " \n", + " 3.98\n", + " \n", + " \n", + " \n", + " \n", + " 4.00\n", + " \n", + " \n", + " \n", + " \n", + " 4.02\n", + " \n", + " \n", + " \n", + " \n", + " 4.04\n", + " \n", + " \n", + " \n", + " \n", + " 4.06\n", + " \n", + " \n", + " \n", + " \n", + " 4.08\n", + " \n", + " \n", + " \n", + " \n", + " 4.10\n", + " \n", + " \n", + " \n", + " \n", + " 4.12\n", + " \n", + " \n", + " \n", + " \n", + " 4.14\n", + " \n", + " \n", + " \n", + " \n", + " 4.16\n", + " \n", + " \n", + " \n", + " \n", + " 4.18\n", + " \n", + " \n", + " \n", + " \n", + " 4.20\n", + " \n", + " \n", + " \n", + " \n", + " 4.22\n", + " \n", + " \n", + " \n", + " \n", + " 4.24\n", + " \n", + " \n", + " \n", + " \n", + " 4.26\n", + " \n", + " \n", + " \n", + " \n", + " 4.28\n", + " \n", + " \n", + " \n", + " \n", + " 4.30\n", + " \n", + " \n", + " \n", + " \n", + " 4.32\n", + " \n", + " \n", + " \n", + " \n", + " 4.34\n", + " \n", + " \n", + " \n", + " \n", + " 4.36\n", + " \n", + " \n", + " \n", + " \n", + " 4.38\n", + " \n", + " \n", + " \n", + " \n", + " 4.40\n", + " \n", + " \n", + " \n", + " \n", + " 4.42\n", + " \n", + " \n", + " \n", + " \n", + " 4.44\n", + " \n", + " \n", + " \n", + " \n", + " 4.46\n", + " \n", + " \n", + " \n", + " \n", + " 4.48\n", + " \n", + " \n", + " \n", + " \n", + " 4.50\n", + " \n", + " \n", + " \n", + " \n", + " 4.52\n", + " \n", + " \n", + " \n", + " \n", + " 4.54\n", + " \n", + " \n", + " \n", + " \n", + " 4.56\n", + " \n", + " \n", + " \n", + " \n", + " 4.58\n", + " \n", + " \n", + " \n", + " \n", + " 4.60\n", + " \n", + " \n", + " \n", + " \n", + " 4.62\n", + " \n", + " \n", + " \n", + " \n", + " 4.64\n", + " \n", + " \n", + " \n", + " \n", + " 4.66\n", + " \n", + " \n", + " \n", + " \n", + " 4.68\n", + " \n", + " \n", + " \n", + " \n", + " 4.70\n", + " \n", + " \n", + " \n", + " \n", + " 4.72\n", + " \n", + " \n", + " \n", + " \n", + " 4.74\n", + " \n", + " \n", + " \n", + " \n", + " 4.76\n", + " \n", + " \n", + " \n", + " \n", + " 4.78\n", + " \n", + " \n", + " \n", + " \n", + " 4.80\n", + " \n", + " \n", + " \n", + " \n", + " 4.82\n", + " \n", + " \n", + " \n", + " \n", + " 4.84\n", + " \n", + " \n", + " \n", + " \n", + " 4.86\n", + " \n", + " \n", + " \n", + " \n", + " 4.88\n", + " \n", + " \n", + " \n", + " \n", + " 4.90\n", + " \n", + " \n", + " \n", + " \n", + " 4.92\n", + " \n", + " \n", + " \n", + " \n", + " 4.94\n", + " \n", + " \n", + " \n", + " \n", + " 4.96\n", + " \n", + " \n", + " \n", + " \n", + " 4.98\n", + " \n", + " \n", + " \n", + " \n", + " 5.00\n", + " \n", + " \n", + " \n", + " \n", + " 5.02\n", + " \n", + " \n", + " \n", + " \n", + " 5.04\n", + " \n", + " \n", + " \n", + " \n", + " 5.06\n", + " \n", + " \n", + " \n", + " \n", + " 5.08\n", + " \n", + " \n", + " \n", + " \n", + " 5.10\n", + " \n", + " \n", + " \n", + " \n", + " 5.12\n", + " \n", + " \n", + " \n", + " \n", + " 5.14\n", + " \n", + " \n", + " \n", + " \n", + " 5.16\n", + " \n", + " \n", + " \n", + " \n", + " 5.18\n", + " \n", + " \n", + " \n", + " \n", + " 5.20\n", + " \n", + " \n", + " \n", + " \n", + " 5.22\n", + " \n", + " \n", + " \n", + " \n", + " 5.24\n", + " \n", + " \n", + " \n", + " \n", + " 5.26\n", + " \n", + " \n", + " \n", + " \n", + " 5.28\n", + " \n", + " \n", + " \n", + " \n", + " 5.30\n", + " \n", + " \n", + " \n", + " \n", + " 5.32\n", + " \n", + " \n", + " \n", + " \n", + " 5.34\n", + " \n", + " \n", + " \n", + " \n", + " 5.36\n", + " \n", + " \n", + " \n", + " \n", + " 5.38\n", + " \n", + " \n", + " \n", + " \n", + " 5.40\n", + " \n", + " \n", + " \n", + " \n", + " 5.42\n", + " \n", + " \n", + " \n", + " \n", + " 5.44\n", + " \n", + " \n", + " \n", + " \n", + " 5.46\n", + " \n", + " \n", + " \n", + " \n", + " 5.48\n", + " \n", + " \n", + " \n", + " \n", + " 5.50\n", + " \n", + " \n", + " \n", + " \n", + " 5.52\n", + " \n", + " \n", + " \n", + " \n", + " 5.54\n", + " \n", + " \n", + " \n", + " \n", + " 5.56\n", + " \n", + " \n", + " \n", + " \n", + " 5.58\n", + " \n", + " \n", + " \n", + " \n", + " 5.60\n", + " \n", + " \n", + " \n", + " \n", + " 5.62\n", + " \n", + " \n", + " \n", + " \n", + " 5.64\n", + " \n", + " \n", + " \n", + " \n", + " 5.66\n", + " \n", + " \n", + " \n", + " \n", + " 5.68\n", + " \n", + " \n", + " \n", + " \n", + " 5.70\n", + " \n", + " \n", + " \n", + " \n", + " 5.72\n", + " \n", + " \n", + " \n", + " \n", + " 5.74\n", + " \n", + " \n", + " \n", + " \n", + " 5.76\n", + " \n", + " \n", + " \n", + " \n", + " 5.78\n", + " \n", + " \n", + " \n", + " \n", + " 5.80\n", + " \n", + " \n", + " \n", + " \n", + " 5.82\n", + " \n", + " \n", + " \n", + " \n", + " 5.84\n", + " \n", + " \n", + " \n", + " \n", + " 5.86\n", + " \n", + " \n", + " \n", + " \n", + " 5.88\n", + " \n", + " \n", + " \n", + " \n", + " 5.90\n", + " \n", + " \n", + " \n", + " \n", + " 5.92\n", + " \n", + " \n", + " \n", + " \n", + " 5.94\n", + " \n", + " \n", + " \n", + " \n", + " 5.96\n", + " \n", + " \n", + " \n", + " \n", + " 5.98\n", + " \n", + " \n", + " \n", + " \n", + " 6.00\n", + " \n", + " \n", + " \n", + " \n", + " 6.02\n", + " \n", + " \n", + " \n", + " \n", + " 6.04\n", + " \n", + " \n", + " \n", + " \n", + " 6.06\n", + " \n", + " \n", + " \n", + " \n", + " 6.08\n", + " \n", + " \n", + " \n", + " \n", + " 6.10\n", + " \n", + " \n", + " \n", + " \n", + " 6.12\n", + " \n", + " \n", + " \n", + " \n", + " 6.14\n", + " \n", + " \n", + " \n", + " \n", + " 6.16\n", + " \n", + " \n", + " \n", + " \n", + " 6.18\n", + " \n", + " \n", + " \n", + " \n", + " 6.20\n", + " \n", + " \n", + " \n", + " \n", + " 6.22\n", + " \n", + " \n", + " \n", + " \n", + " 6.24\n", + " \n", + " \n", + " \n", + " \n", + " 6.26\n", + " \n", + " \n", + " \n", + " \n", + " 6.28\n", + " \n", + " \n", + " \n", + " \n", + " 6.30\n", + " \n", + " \n", + " \n", + " \n", + " 6.32\n", + " \n", + " \n", + " \n", + " \n", + " 6.34\n", + " \n", + " \n", + " \n", + " \n", + " 6.36\n", + " \n", + " \n", + " \n", + " \n", + " 6.38\n", + " \n", + " \n", + " \n", + " \n", + " 6.40\n", + " \n", + " \n", + " \n", + " \n", + " 6.42\n", + " \n", + " \n", + " \n", + " \n", + " 6.44\n", + " \n", + " \n", + " \n", + " \n", + " 6.46\n", + " \n", + " \n", + " \n", + " \n", + " 6.48\n", + " \n", + " \n", + " \n", + " \n", + " 6.50\n", + " \n", + " \n", + " \n", + " \n", + " 6.52\n", + " \n", + " \n", + " \n", + " \n", + " 6.54\n", + " \n", + " \n", + " \n", + " \n", + " 6.56\n", + " \n", + " \n", + " \n", + " \n", + " 6.58\n", + " \n", + " \n", + " \n", + " \n", + " 6.60\n", + " \n", + " \n", + " \n", + " \n", + " 6.62\n", + " \n", + " \n", + " \n", + " \n", + " 6.64\n", + " \n", + " \n", + " \n", + " \n", + " 6.66\n", + " \n", + " \n", + " \n", + " \n", + " 6.68\n", + " \n", + " \n", + " \n", + " \n", + " 6.70\n", + " \n", + " \n", + " \n", + " \n", + " 6.72\n", + " \n", + " \n", + " \n", + " \n", + " 6.74\n", + " \n", + " \n", + " \n", + " \n", + " 6.76\n", + " \n", + " \n", + " \n", + " \n", + " 6.78\n", + " \n", + " \n", + " \n", + " \n", + " 6.80\n", + " \n", + " \n", + " \n", + " \n", + " 6.82\n", + " \n", + " \n", + " \n", + " \n", + " 6.84\n", + " \n", + " \n", + " \n", + " \n", + " 6.86\n", + " \n", + " \n", + " \n", + " \n", + " 6.88\n", + " \n", + " \n", + " \n", + " \n", + " 6.90\n", + " \n", + " \n", + " \n", + " \n", + " 6.92\n", + " \n", + " \n", + " \n", + " \n", + " 6.94\n", + " \n", + " \n", + " \n", + " \n", + " 6.96\n", + " \n", + " \n", + " \n", + " \n", + " 6.98\n", + " \n", + " \n", + " \n", + " \n", + " 7.00\n", + " \n", + " \n", + " \n", + " \n", + " 7.02\n", + " \n", + " \n", + " \n", + " \n", + " 7.04\n", + " \n", + " \n", + " \n", + " \n", + " 7.06\n", + " \n", + " \n", + " \n", + " \n", + " 7.08\n", + " \n", + " \n", + " \n", + " \n", + " 7.10\n", + " \n", + " \n", + " \n", + " \n", + " 7.12\n", + " \n", + " \n", + " \n", + " \n", + " 7.14\n", + " \n", + " \n", + " \n", + " \n", + " 7.16\n", + " \n", + " \n", + " \n", + " \n", + " 7.18\n", + " \n", + " \n", + " \n", + " \n", + " 7.20\n", + " \n", + " \n", + " \n", + " \n", + " 7.22\n", + " \n", + " \n", + " \n", + " \n", + " 7.24\n", + " \n", + " \n", + " \n", + " \n", + " 7.26\n", + " \n", + " \n", + " \n", + " \n", + " 7.28\n", + " \n", + " \n", + " \n", + " \n", + " 7.30\n", + " \n", + " \n", + " \n", + " \n", + " 7.32\n", + " \n", + " \n", + " \n", + " \n", + " 7.34\n", + " \n", + " \n", + " \n", + " \n", + " 7.36\n", + " \n", + " \n", + " \n", + " \n", + " 7.38\n", + " \n", + " \n", + " \n", + " \n", + " 7.40\n", + " \n", + " \n", + " \n", + " \n", + " 7.42\n", + " \n", + " \n", + " \n", + " \n", + " 7.44\n", + " \n", + " \n", + " \n", + " \n", + " 7.46\n", + " \n", + " \n", + " \n", + " \n", + " 7.48\n", + " \n", + " \n", + " \n", + " \n", + " 7.50\n", + " \n", + " \n", + " \n", + " \n", + " 7.52\n", + " \n", + " \n", + " \n", + " \n", + " 7.54\n", + " \n", + " \n", + " \n", + " \n", + " 7.56\n", + " \n", + " \n", + " \n", + " \n", + " 7.58\n", + " \n", + " \n", + " \n", + " \n", + " 7.60\n", + " \n", + " \n", + " \n", + " \n", + " 7.62\n", + " \n", + " \n", + " \n", + " \n", + " 7.64\n", + " \n", + " \n", + " \n", + " \n", + " 7.66\n", + " \n", + " \n", + " \n", + " \n", + " 7.68\n", + " \n", + " \n", + " \n", + " \n", + " 7.70\n", + " \n", + " \n", + " \n", + " \n", + " 7.72\n", + " \n", + " \n", + " \n", + " \n", + " 7.74\n", + " \n", + " \n", + " \n", + " \n", + " 7.76\n", + " \n", + " \n", + " \n", + " \n", + " 7.78\n", + " \n", + " \n", + " \n", + " \n", + " 7.80\n", + " \n", + " \n", + " \n", + " \n", + " 7.82\n", + " \n", + " \n", + " \n", + " \n", + " 7.84\n", + " \n", + " \n", + " \n", + " \n", + " 7.86\n", + " \n", + " \n", + " \n", + " \n", + " 7.88\n", + " \n", + " \n", + " \n", + " \n", + " 7.90\n", + " \n", + " \n", + " \n", + " \n", + " 7.92\n", + " \n", + " \n", + " \n", + " \n", + " 7.94\n", + " \n", + " \n", + " \n", + " \n", + " 7.96\n", + " \n", + " \n", + " \n", + " \n", + " 7.98\n", + " \n", + " \n", + " \n", + " \n", + " 8.00\n", + " \n", + " \n", + " \n", + " \n", + " 4\n", + " \n", + " \n", + " \n", + " \n", + " 6\n", + " \n", + " \n", + " \n", + " \n", + " 8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.9,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.2,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.5,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.8,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.9,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.9,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.7,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,2.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.9,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.4,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.2,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.2,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.2,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.7,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.9,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,2.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.7,2.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.7,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.5,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.8,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.5,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.2,3.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.3,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.6,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.5,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.1,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.2,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,2.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,2.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,2.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,2.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,2.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.8,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.6,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.9,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,2.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.2,2.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.7,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.6,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.1,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.0,2.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.9,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,2.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.2,2.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.6,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,2.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.3,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.5,2.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,2.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.9,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 6.4,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 7.0,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.3,3.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.6,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.8,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.4,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.5,2.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.4,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,3.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.5,4.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.2,4.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.8,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.7,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.2,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.2,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.8,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.3\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.6,3.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,3.8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.7,4.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.8,4.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.3,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.8,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.8,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.7\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.4,2.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.6,3.4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.4,3.9\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.0,3.6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.6,3.1\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.7,3.2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 4.9,3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 5.1,3.5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " h,j,k,l,arrows,drag to pan\n", + " \n", + " \n", + " \n", + " \n", + " i,o,+,-,scroll,shift-drag to zoom\n", + " \n", + " \n", + " \n", + " \n", + " r,dbl-click to reset\n", + " \n", + " \n", + " \n", + " \n", + " c for coordinates\n", + " \n", + " \n", + " \n", + " \n", + " ? for help\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " ?\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " setosa\n", + " \n", + " \n", + " \n", + " \n", + " versicolor\n", + " \n", + " \n", + " \n", + " \n", + " virginica\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Iris\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 2.0\n", + " \n", + " \n", + " \n", + " \n", + " 2.5\n", + " \n", + " \n", + " \n", + " \n", + " 3.0\n", + " \n", + " \n", + " \n", + " \n", + " 3.5\n", + " \n", + " \n", + " \n", + " \n", + " 4.0\n", + " \n", + " \n", + " \n", + " \n", + " 4.5\n", + " \n", + " \n", + " \n", + " \n", + " 2.0\n", + " \n", + " \n", + " \n", + " \n", + " 2.1\n", + " \n", + " \n", + " \n", + " \n", + " 2.2\n", + " \n", + " \n", + " \n", + " \n", + " 2.3\n", + " \n", + " \n", + " \n", + " \n", + " 2.4\n", + " \n", + " \n", + " \n", + " \n", + " 2.5\n", + " \n", + " \n", + " \n", + " \n", + " 2.6\n", + " \n", + " \n", + " \n", + " \n", + " 2.7\n", + " \n", + " \n", + " \n", + " \n", + " 2.8\n", + " \n", + " \n", + " \n", + " \n", + " 2.9\n", + " \n", + " \n", + " \n", + " \n", + " 3.0\n", + " \n", + " \n", + " \n", + " \n", + " 3.1\n", + " \n", + " \n", + " \n", + " \n", + " 3.2\n", + " \n", + " \n", + " \n", + " \n", + " 3.3\n", + " \n", + " \n", + " \n", + " \n", + " 3.4\n", + " \n", + " \n", + " \n", + " \n", + " 3.5\n", + " \n", + " \n", + " \n", + " \n", + " 3.6\n", + " \n", + " \n", + " \n", + " \n", + " 3.7\n", + " \n", + " \n", + " \n", + " \n", + " 3.8\n", + " \n", + " \n", + " \n", + " \n", + " 3.9\n", + " \n", + " \n", + " \n", + " \n", + " 4.0\n", + " \n", + " \n", + " \n", + " \n", + " 4.1\n", + " \n", + " \n", + " \n", + " \n", + " 4.2\n", + " \n", + " \n", + " \n", + " \n", + " 4.3\n", + " \n", + " \n", + " \n", + " \n", + " 4.4\n", + " \n", + " \n", + " \n", + " \n", + " 4.5\n", + " \n", + " \n", + " \n", + " \n", + " 1.99\n", + " \n", + " \n", + " \n", + " \n", + " 2.00\n", + " \n", + " \n", + " \n", + " \n", + " 2.01\n", + " \n", + " \n", + " \n", + " \n", + " 2.02\n", + " \n", + " \n", + " \n", + " \n", + " 2.03\n", + " \n", + " \n", + " \n", + " \n", + " 2.04\n", + " \n", + " \n", + " \n", + " \n", + " 2.05\n", + " \n", + " \n", + " \n", + " \n", + " 2.06\n", + " \n", + " \n", + " \n", + " \n", + " 2.07\n", + " \n", + " \n", + " \n", + " \n", + " 2.08\n", + " \n", + " \n", + " \n", + " \n", + " 2.09\n", + " \n", + " \n", + " \n", + " \n", + " 2.10\n", + " \n", + " \n", + " \n", + " \n", + " 2.11\n", + " \n", + " \n", + " \n", + " \n", + " 2.12\n", + " \n", + " \n", + " \n", + " \n", + " 2.13\n", + " \n", + " \n", + " \n", + " \n", + " 2.14\n", + " \n", + " \n", + " \n", + " \n", + " 2.15\n", + " \n", + " \n", + " \n", + " \n", + " 2.16\n", + " \n", + " \n", + " \n", + " \n", + " 2.17\n", + " \n", + " \n", + " \n", + " \n", + " 2.18\n", + " \n", + " \n", + " \n", + " \n", + " 2.19\n", + " \n", + " \n", + " \n", + " \n", + " 2.20\n", + " \n", + " \n", + " \n", + " \n", + " 2.21\n", + " \n", + " \n", + " \n", + " \n", + " 2.22\n", + " \n", + " \n", + " \n", + " \n", + " 2.23\n", + " \n", + " \n", + " \n", + " \n", + " 2.24\n", + " \n", + " \n", + " \n", + " \n", + " 2.25\n", + " \n", + " \n", + " \n", + " \n", + " 2.26\n", + " \n", + " \n", + " \n", + " \n", + " 2.27\n", + " \n", + " \n", + " \n", + " \n", + " 2.28\n", + " \n", + " \n", + " \n", + " \n", + " 2.29\n", + " \n", + " \n", + " \n", + " \n", + " 2.30\n", + " \n", + " \n", + " \n", + " \n", + " 2.31\n", + " \n", + " \n", + " \n", + " \n", + " 2.32\n", + " \n", + " \n", + " \n", + " \n", + " 2.33\n", + " \n", + " \n", + " \n", + " \n", + " 2.34\n", + " \n", + " \n", + " \n", + " \n", + " 2.35\n", + " \n", + " \n", + " \n", + " \n", + " 2.36\n", + " \n", + " \n", + " \n", + " \n", + " 2.37\n", + " \n", + " \n", + " \n", + " \n", + " 2.38\n", + " \n", + " \n", + " \n", + " \n", + " 2.39\n", + " \n", + " \n", + " \n", + " \n", + " 2.40\n", + " \n", + " \n", + " \n", + " \n", + " 2.41\n", + " \n", + " \n", + " \n", + " \n", + " 2.42\n", + " \n", + " \n", + " \n", + " \n", + " 2.43\n", + " \n", + " \n", + " \n", + " \n", + " 2.44\n", + " \n", + " \n", + " \n", + " \n", + " 2.45\n", + " \n", + " \n", + " \n", + " \n", + " 2.46\n", + " \n", + " \n", + " \n", + " \n", + " 2.47\n", + " \n", + " \n", + " \n", + " \n", + " 2.48\n", + " \n", + " \n", + " \n", + " \n", + " 2.49\n", + " \n", + " \n", + " \n", + " \n", + " 2.50\n", + " \n", + " \n", + " \n", + " \n", + " 2.51\n", + " \n", + " \n", + " \n", + " \n", + " 2.52\n", + " \n", + " \n", + " \n", + " \n", + " 2.53\n", + " \n", + " \n", + " \n", + " \n", + " 2.54\n", + " \n", + " \n", + " \n", + " \n", + " 2.55\n", + " \n", + " \n", + " \n", + " \n", + " 2.56\n", + " \n", + " \n", + " \n", + " \n", + " 2.57\n", + " \n", + " \n", + " \n", + " \n", + " 2.58\n", + " \n", + " \n", + " \n", + " \n", + " 2.59\n", + " \n", + " \n", + " \n", + " \n", + " 2.60\n", + " \n", + " \n", + " \n", + " \n", + " 2.61\n", + " \n", + " \n", + " \n", + " \n", + " 2.62\n", + " \n", + " \n", + " \n", + " \n", + " 2.63\n", + " \n", + " \n", + " \n", + " \n", + " 2.64\n", + " \n", + " \n", + " \n", + " \n", + " 2.65\n", + " \n", + " \n", + " \n", + " \n", + " 2.66\n", + " \n", + " \n", + " \n", + " \n", + " 2.67\n", + " \n", + " \n", + " \n", + " \n", + " 2.68\n", + " \n", + " \n", + " \n", + " \n", + " 2.69\n", + " \n", + " \n", + " \n", + " \n", + " 2.70\n", + " \n", + " \n", + " \n", + " \n", + " 2.71\n", + " \n", + " \n", + " \n", + " \n", + " 2.72\n", + " \n", + " \n", + " \n", + " \n", + " 2.73\n", + " \n", + " \n", + " \n", + " \n", + " 2.74\n", + " \n", + " \n", + " \n", + " \n", + " 2.75\n", + " \n", + " \n", + " \n", + " \n", + " 2.76\n", + " \n", + " \n", + " \n", + " \n", + " 2.77\n", + " \n", + " \n", + " \n", + " \n", + " 2.78\n", + " \n", + " \n", + " \n", + " \n", + " 2.79\n", + " \n", + " \n", + " \n", + " \n", + " 2.80\n", + " \n", + " \n", + " \n", + " \n", + " 2.81\n", + " \n", + " \n", + " \n", + " \n", + " 2.82\n", + " \n", + " \n", + " \n", + " \n", + " 2.83\n", + " \n", + " \n", + " \n", + " \n", + " 2.84\n", + " \n", + " \n", + " \n", + " \n", + " 2.85\n", + " \n", + " \n", + " \n", + " \n", + " 2.86\n", + " \n", + " \n", + " \n", + " \n", + " 2.87\n", + " \n", + " \n", + " \n", + " \n", + " 2.88\n", + " \n", + " \n", + " \n", + " \n", + " 2.89\n", + " \n", + " \n", + " \n", + " \n", + " 2.90\n", + " \n", + " \n", + " \n", + " \n", + " 2.91\n", + " \n", + " \n", + " \n", + " \n", + " 2.92\n", + " \n", + " \n", + " \n", + " \n", + " 2.93\n", + " \n", + " \n", + " \n", + " \n", + " 2.94\n", + " \n", + " \n", + " \n", + " \n", + " 2.95\n", + " \n", + " \n", + " \n", + " \n", + " 2.96\n", + " \n", + " \n", + " \n", + " \n", + " 2.97\n", + " \n", + " \n", + " \n", + " \n", + " 2.98\n", + " \n", + " \n", + " \n", + " \n", + " 2.99\n", + " \n", + " \n", + " \n", + " \n", + " 3.00\n", + " \n", + " \n", + " \n", + " \n", + " 3.01\n", + " \n", + " \n", + " \n", + " \n", + " 3.02\n", + " \n", + " \n", + " \n", + " \n", + " 3.03\n", + " \n", + " \n", + " \n", + " \n", + " 3.04\n", + " \n", + " \n", + " \n", + " \n", + " 3.05\n", + " \n", + " \n", + " \n", + " \n", + " 3.06\n", + " \n", + " \n", + " \n", + " \n", + " 3.07\n", + " \n", + " \n", + " \n", + " \n", + " 3.08\n", + " \n", + " \n", + " \n", + " \n", + " 3.09\n", + " \n", + " \n", + " \n", + " \n", + " 3.10\n", + " \n", + " \n", + " \n", + " \n", + " 3.11\n", + " \n", + " \n", + " \n", + " \n", + " 3.12\n", + " \n", + " \n", + " \n", + " \n", + " 3.13\n", + " \n", + " \n", + " \n", + " \n", + " 3.14\n", + " \n", + " \n", + " \n", + " \n", + " 3.15\n", + " \n", + " \n", + " \n", + " \n", + " 3.16\n", + " \n", + " \n", + " \n", + " \n", + " 3.17\n", + " \n", + " \n", + " \n", + " \n", + " 3.18\n", + " \n", + " \n", + " \n", + " \n", + " 3.19\n", + " \n", + " \n", + " \n", + " \n", + " 3.20\n", + " \n", + " \n", + " \n", + " \n", + " 3.21\n", + " \n", + " \n", + " \n", + " \n", + " 3.22\n", + " \n", + " \n", + " \n", + " \n", + " 3.23\n", + " \n", + " \n", + " \n", + " \n", + " 3.24\n", + " \n", + " \n", + " \n", + " \n", + " 3.25\n", + " \n", + " \n", + " \n", + " \n", + " 3.26\n", + " \n", + " \n", + " \n", + " \n", + " 3.27\n", + " \n", + " \n", + " \n", + " \n", + " 3.28\n", + " \n", + " \n", + " \n", + " \n", + " 3.29\n", + " \n", + " \n", + " \n", + " \n", + " 3.30\n", + " \n", + " \n", + " \n", + " \n", + " 3.31\n", + " \n", + " \n", + " \n", + " \n", + " 3.32\n", + " \n", + " \n", + " \n", + " \n", + " 3.33\n", + " \n", + " \n", + " \n", + " \n", + " 3.34\n", + " \n", + " \n", + " \n", + " \n", + " 3.35\n", + " \n", + " \n", + " \n", + " \n", + " 3.36\n", + " \n", + " \n", + " \n", + " \n", + " 3.37\n", + " \n", + " \n", + " \n", + " \n", + " 3.38\n", + " \n", + " \n", + " \n", + " \n", + " 3.39\n", + " \n", + " \n", + " \n", + " \n", + " 3.40\n", + " \n", + " \n", + " \n", + " \n", + " 3.41\n", + " \n", + " \n", + " \n", + " \n", + " 3.42\n", + " \n", + " \n", + " \n", + " \n", + " 3.43\n", + " \n", + " \n", + " \n", + " \n", + " 3.44\n", + " \n", + " \n", + " \n", + " \n", + " 3.45\n", + " \n", + " \n", + " \n", + " \n", + " 3.46\n", + " \n", + " \n", + " \n", + " \n", + " 3.47\n", + " \n", + " \n", + " \n", + " \n", + " 3.48\n", + " \n", + " \n", + " \n", + " \n", + " 3.49\n", + " \n", + " \n", + " \n", + " \n", + " 3.50\n", + " \n", + " \n", + " \n", + " \n", + " 3.51\n", + " \n", + " \n", + " \n", + " \n", + " 3.52\n", + " \n", + " \n", + " \n", + " \n", + " 3.53\n", + " \n", + " \n", + " \n", + " \n", + " 3.54\n", + " \n", + " \n", + " \n", + " \n", + " 3.55\n", + " \n", + " \n", + " \n", + " \n", + " 3.56\n", + " \n", + " \n", + " \n", + " \n", + " 3.57\n", + " \n", + " \n", + " \n", + " \n", + " 3.58\n", + " \n", + " \n", + " \n", + " \n", + " 3.59\n", + " \n", + " \n", + " \n", + " \n", + " 3.60\n", + " \n", + " \n", + " \n", + " \n", + " 3.61\n", + " \n", + " \n", + " \n", + " \n", + " 3.62\n", + " \n", + " \n", + " \n", + " \n", + " 3.63\n", + " \n", + " \n", + " \n", + " \n", + " 3.64\n", + " \n", + " \n", + " \n", + " \n", + " 3.65\n", + " \n", + " \n", + " \n", + " \n", + " 3.66\n", + " \n", + " \n", + " \n", + " \n", + " 3.67\n", + " \n", + " \n", + " \n", + " \n", + " 3.68\n", + " \n", + " \n", + " \n", + " \n", + " 3.69\n", + " \n", + " \n", + " \n", + " \n", + " 3.70\n", + " \n", + " \n", + " \n", + " \n", + " 3.71\n", + " \n", + " \n", + " \n", + " \n", + " 3.72\n", + " \n", + " \n", + " \n", + " \n", + " 3.73\n", + " \n", + " \n", + " \n", + " \n", + " 3.74\n", + " \n", + " \n", + " \n", + " \n", + " 3.75\n", + " \n", + " \n", + " \n", + " \n", + " 3.76\n", + " \n", + " \n", + " \n", + " \n", + " 3.77\n", + " \n", + " \n", + " \n", + " \n", + " 3.78\n", + " \n", + " \n", + " \n", + " \n", + " 3.79\n", + " \n", + " \n", + " \n", + " \n", + " 3.80\n", + " \n", + " \n", + " \n", + " \n", + " 3.81\n", + " \n", + " \n", + " \n", + " \n", + " 3.82\n", + " \n", + " \n", + " \n", + " \n", + " 3.83\n", + " \n", + " \n", + " \n", + " \n", + " 3.84\n", + " \n", + " \n", + " \n", + " \n", + " 3.85\n", + " \n", + " \n", + " \n", + " \n", + " 3.86\n", + " \n", + " \n", + " \n", + " \n", + " 3.87\n", + " \n", + " \n", + " \n", + " \n", + " 3.88\n", + " \n", + " \n", + " \n", + " \n", + " 3.89\n", + " \n", + " \n", + " \n", + " \n", + " 3.90\n", + " \n", + " \n", + " \n", + " \n", + " 3.91\n", + " \n", + " \n", + " \n", + " \n", + " 3.92\n", + " \n", + " \n", + " \n", + " \n", + " 3.93\n", + " \n", + " \n", + " \n", + " \n", + " 3.94\n", + " \n", + " \n", + " \n", + " \n", + " 3.95\n", + " \n", + " \n", + " \n", + " \n", + " 3.96\n", + " \n", + " \n", + " \n", + " \n", + " 3.97\n", + " \n", + " \n", + " \n", + " \n", + " 3.98\n", + " \n", + " \n", + " \n", + " \n", + " 3.99\n", + " \n", + " \n", + " \n", + " \n", + " 4.00\n", + " \n", + " \n", + " \n", + " \n", + " 4.01\n", + " \n", + " \n", + " \n", + " \n", + " 4.02\n", + " \n", + " \n", + " \n", + " \n", + " 4.03\n", + " \n", + " \n", + " \n", + " \n", + " 4.04\n", + " \n", + " \n", + " \n", + " \n", + " 4.05\n", + " \n", + " \n", + " \n", + " \n", + " 4.06\n", + " \n", + " \n", + " \n", + " \n", + " 4.07\n", + " \n", + " \n", + " \n", + " \n", + " 4.08\n", + " \n", + " \n", + " \n", + " \n", + " 4.09\n", + " \n", + " \n", + " \n", + " \n", + " 4.10\n", + " \n", + " \n", + " \n", + " \n", + " 4.11\n", + " \n", + " \n", + " \n", + " \n", + " 4.12\n", + " \n", + " \n", + " \n", + " \n", + " 4.13\n", + " \n", + " \n", + " \n", + " \n", + " 4.14\n", + " \n", + " \n", + " \n", + " \n", + " 4.15\n", + " \n", + " \n", + " \n", + " \n", + " 4.16\n", + " \n", + " \n", + " \n", + " \n", + " 4.17\n", + " \n", + " \n", + " \n", + " \n", + " 4.18\n", + " \n", + " \n", + " \n", + " \n", + " 4.19\n", + " \n", + " \n", + " \n", + " \n", + " 4.20\n", + " \n", + " \n", + " \n", + " \n", + " 4.21\n", + " \n", + " \n", + " \n", + " \n", + " 4.22\n", + " \n", + " \n", + " \n", + " \n", + " 4.23\n", + " \n", + " \n", + " \n", + " \n", + " 4.24\n", + " \n", + " \n", + " \n", + " \n", + " 4.25\n", + " \n", + " \n", + " \n", + " \n", + " 4.26\n", + " \n", + " \n", + " \n", + " \n", + " 4.27\n", + " \n", + " \n", + " \n", + " \n", + " 4.28\n", + " \n", + " \n", + " \n", + " \n", + " 4.29\n", + " \n", + " \n", + " \n", + " \n", + " 4.30\n", + " \n", + " \n", + " \n", + " \n", + " 4.31\n", + " \n", + " \n", + " \n", + " \n", + " 4.32\n", + " \n", + " \n", + " \n", + " \n", + " 4.33\n", + " \n", + " \n", + " \n", + " \n", + " 4.34\n", + " \n", + " \n", + " \n", + " \n", + " 4.35\n", + " \n", + " \n", + " \n", + " \n", + " 4.36\n", + " \n", + " \n", + " \n", + " \n", + " 4.37\n", + " \n", + " \n", + " \n", + " \n", + " 4.38\n", + " \n", + " \n", + " \n", + " \n", + " 4.39\n", + " \n", + " \n", + " \n", + " \n", + " 4.40\n", + " \n", + " \n", + " \n", + " \n", + " 4.41\n", + " \n", + " \n", + " \n", + " \n", + " 4.42\n", + " \n", + " \n", + " \n", + " \n", + " 4.43\n", + " \n", + " \n", + " \n", + " \n", + " 4.44\n", + " \n", + " \n", + " \n", + " \n", + " 4.45\n", + " \n", + " \n", + " \n", + " \n", + " 4.46\n", + " \n", + " \n", + " \n", + " \n", + " 4.47\n", + " \n", + " \n", + " \n", + " \n", + " 4.48\n", + " \n", + " \n", + " \n", + " \n", + " 4.49\n", + " \n", + " \n", + " \n", + " \n", + " 4.50\n", + " \n", + " \n", + " \n", + " \n", + " 2\n", + " \n", + " \n", + " \n", + " \n", + " 3\n", + " \n", + " \n", + " \n", + " \n", + " 4\n", + " \n", + " \n", + " \n", + " \n", + " 5\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " SepalWidth\n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "Plot(...)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "using RDatasets, Gadfly, Compose\n", + "set_default_plot_size(131.25mm, 90mm)\n", + "iris = dataset(\"datasets\",\"iris\")\n", + "p = plot(iris, \n", + " layer(x= :SepalLength, y= :SepalWidth, color= :Species),\n", + " layer(x -> 0.65 * x - 0.4, 4, 7.5, color=[colorant\"red\"], style(line_width=1mm)),\n", + " Guide.colorkey(title=\"Iris\", pos=[0.05w,-0.28h]))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "import Cairo,\n", + "Fontconfig\n", + "draw(PDF(\"iris_plot.pdf\", 131.25mm, 90mm), p)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2-element Vector{Float64}:\n", + " 131.25\n", + " 90.0" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1.25 .* [105, 72]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.9.3", + "language": "julia", + "name": "julia-1.9" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/text/presentation_01/00base/iris_plot.pdf b/text/presentation_01/00base/iris_plot.pdf new file mode 100644 index 0000000..ec92c9b Binary files /dev/null and b/text/presentation_01/00base/iris_plot.pdf differ diff --git a/text/presentation_01/00base/iris_plot.svg b/text/presentation_01/00base/iris_plot.svg new file mode 100644 index 0000000..b4f9bec --- /dev/null +++ b/text/presentation_01/00base/iris_plot.svg @@ -0,0 +1,2295 @@ + + + + + + + + + + + + SepalLength + + + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5.9,3.0 + + + + + + + + + + + + + + 6.2,3.4 + + + + + + + + + + + + + + 6.5,3.0 + + + + + + + + + + + + + + 6.3,2.5 + + + + + + + + + + + + + + 6.7,3.0 + + + + + + + + + + + + + + 6.7,3.3 + + + + + + + + + + + + + + 6.8,3.2 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 6.9,3.1 + + + + + + + + + + + + + + 6.7,3.1 + + + + + + + + + + + + + + 6.9,3.1 + + + + + + + + + + + + + + 6.0,3.0 + + + + + + + + + + + + + + 6.4,3.1 + + + + + + + + + + + + + + 6.3,3.4 + + + + + + + + + + + + + + 7.7,3.0 + + + + + + + + + + + + + + 6.1,2.6 + + + + + + + + + + + + + + 6.3,2.8 + + + + + + + + + + + + + + 6.4,2.8 + + + + + + + + + + + + + + 7.9,3.8 + + + + + + + + + + + + + + 7.4,2.8 + + + + + + + + + + + + + + 7.2,3.0 + + + + + + + + + + + + + + 6.4,2.8 + + + + + + + + + + + + + + 6.1,3.0 + + + + + + + + + + + + + + 6.2,2.8 + + + + + + + + + + + + + + 7.2,3.2 + + + + + + + + + + + + + + 6.7,3.3 + + + + + + + + + + + + + + 6.3,2.7 + + + + + + + + + + + + + + 7.7,2.8 + + + + + + + + + + + + + + 5.6,2.8 + + + + + + + + + + + + + + 6.9,3.2 + + + + + + + + + + + + + + 6.0,2.2 + + + + + + + + + + + + + + 7.7,2.6 + + + + + + + + + + + + + + 7.7,3.8 + + + + + + + + + + + + + + 6.5,3.0 + + + + + + + + + + + + + + 6.4,3.2 + + + + + + + + + + + + + + 5.8,2.8 + + + + + + + + + + + + + + 5.7,2.5 + + + + + + + + + + + + + + 6.8,3.0 + + + + + + + + + + + + + + 6.4,2.7 + + + + + + + + + + + + + + 6.5,3.2 + + + + + + + + + + + + + + 7.2,3.6 + + + + + + + + + + + + + + 6.7,2.5 + + + + + + + + + + + + + + 7.3,2.9 + + + + + + + + + + + + + + 4.9,2.5 + + + + + + + + + + + + + + 7.6,3.0 + + + + + + + + + + + + + + 6.5,3.0 + + + + + + + + + + + + + + 6.3,2.9 + + + + + + + + + + + + + + 7.1,3.0 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 6.3,3.3 + + + + + + + + + + + + + + 5.7,2.8 + + + + + + + + + + + + + + 5.1,2.5 + + + + + + + + + + + + + + 6.2,2.9 + + + + + + + + + + + + + + 5.7,2.9 + + + + + + + + + + + + + + 5.7,3.0 + + + + + + + + + + + + + + 5.6,2.7 + + + + + + + + + + + + + + 5.0,2.3 + + + + + + + + + + + + + + 5.8,2.6 + + + + + + + + + + + + + + 6.1,3.0 + + + + + + + + + + + + + + 5.5,2.6 + + + + + + + + + + + + + + 5.5,2.5 + + + + + + + + + + + + + + 5.6,3.0 + + + + + + + + + + + + + + 6.3,2.3 + + + + + + + + + + + + + + 6.7,3.1 + + + + + + + + + + + + + + 6.0,3.4 + + + + + + + + + + + + + + 5.4,3.0 + + + + + + + + + + + + + + 6.0,2.7 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 5.5,2.4 + + + + + + + + + + + + + + 5.5,2.4 + + + + + + + + + + + + + + 5.7,2.6 + + + + + + + + + + + + + + 6.0,2.9 + + + + + + + + + + + + + + 6.7,3.0 + + + + + + + + + + + + + + 6.8,2.8 + + + + + + + + + + + + + + 6.6,3.0 + + + + + + + + + + + + + + 6.4,2.9 + + + + + + + + + + + + + + 6.1,2.8 + + + + + + + + + + + + + + 6.3,2.5 + + + + + + + + + + + + + + 6.1,2.8 + + + + + + + + + + + + + + 5.9,3.2 + + + + + + + + + + + + + + 5.6,2.5 + + + + + + + + + + + + + + 6.2,2.2 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 5.6,3.0 + + + + + + + + + + + + + + 6.7,3.1 + + + + + + + + + + + + + + 5.6,2.9 + + + + + + + + + + + + + + 6.1,2.9 + + + + + + + + + + + + + + 6.0,2.2 + + + + + + + + + + + + + + 5.9,3.0 + + + + + + + + + + + + + + 5.0,2.0 + + + + + + + + + + + + + + 5.2,2.7 + + + + + + + + + + + + + + 6.6,2.9 + + + + + + + + + + + + + + 4.9,2.4 + + + + + + + + + + + + + + 6.3,3.3 + + + + + + + + + + + + + + 5.7,2.8 + + + + + + + + + + + + + + 6.5,2.8 + + + + + + + + + + + + + + 5.5,2.3 + + + + + + + + + + + + + + 6.9,3.1 + + + + + + + + + + + + + + 6.4,3.2 + + + + + + + + + + + + + + 7.0,3.2 + + + + + + + + + + + + + + 5.0,3.3 + + + + + + + + + + + + + + 5.3,3.7 + + + + + + + + + + + + + + 4.6,3.2 + + + + + + + + + + + + + + 5.1,3.8 + + + + + + + + + + + + + + 4.8,3.0 + + + + + + + + + + + + + + 5.1,3.8 + + + + + + + + + + + + + + 5.0,3.5 + + + + + + + + + + + + + + 4.4,3.2 + + + + + + + + + + + + + + 4.5,2.3 + + + + + + + + + + + + + + 5.0,3.5 + + + + + + + + + + + + + + 5.1,3.4 + + + + + + + + + + + + + + 4.4,3.0 + + + + + + + + + + + + + + 4.9,3.6 + + + + + + + + + + + + + + 5.5,3.5 + + + + + + + + + + + + + + 5.0,3.2 + + + + + + + + + + + + + + 4.9,3.1 + + + + + + + + + + + + + + 5.5,4.2 + + + + + + + + + + + + + + 5.2,4.1 + + + + + + + + + + + + + + 5.4,3.4 + + + + + + + + + + + + + + 4.8,3.1 + + + + + + + + + + + + + + 4.7,3.2 + + + + + + + + + + + + + + 5.2,3.4 + + + + + + + + + + + + + + 5.2,3.5 + + + + + + + + + + + + + + 5.0,3.4 + + + + + + + + + + + + + + 5.0,3.0 + + + + + + + + + + + + + + 4.8,3.4 + + + + + + + + + + + + + + 5.1,3.3 + + + + + + + + + + + + + + 4.6,3.6 + + + + + + + + + + + + + + 5.1,3.7 + + + + + + + + + + + + + + 5.4,3.4 + + + + + + + + + + + + + + 5.1,3.8 + + + + + + + + + + + + + + 5.7,3.8 + + + + + + + + + + + + + + 5.1,3.5 + + + + + + + + + + + + + + 5.4,3.9 + + + + + + + + + + + + + + 5.7,4.4 + + + + + + + + + + + + + + 5.8,4.0 + + + + + + + + + + + + + + 4.3,3.0 + + + + + + + + + + + + + + 4.8,3.0 + + + + + + + + + + + + + + 4.8,3.4 + + + + + + + + + + + + + + 5.4,3.7 + + + + + + + + + + + + + + 4.9,3.1 + + + + + + + + + + + + + + 4.4,2.9 + + + + + + + + + + + + + + 5.0,3.4 + + + + + + + + + + + + + + 4.6,3.4 + + + + + + + + + + + + + + 5.4,3.9 + + + + + + + + + + + + + + 5.0,3.6 + + + + + + + + + + + + + + 4.6,3.1 + + + + + + + + + + + + + + 4.7,3.2 + + + + + + + + + + + + + + 4.9,3.0 + + + + + + + + + + + + + + 5.1,3.5 + + + + + + + + + + + setosa + + + + + versicolor + + + + + virginica + + + + + + + + + + + + + + + + + + Iris + + + + + + + + + + 2.0 + + + + + 2.5 + + + + + 3.0 + + + + + 3.5 + + + + + 4.0 + + + + + 4.5 + + + + + + + SepalWidth + + + + + + + + + + diff --git a/text/presentation_01/00base/pqueens.lp b/text/presentation_01/00base/pqueens.lp new file mode 100644 index 0000000..18a3d70 --- /dev/null +++ b/text/presentation_01/00base/pqueens.lp @@ -0,0 +1,21 @@ +% Column and row domains. +col(1 .. n). +row(1 .. n). + +% One queen on some row per colum. +1 { queen(I, J) : row(J) } 1 :- col(I). + +% One queen on some columns per row. +1 { queen(I, J) : col(I) } 1 :- row(J). + +% Number descending diagonals. +diag1(I, J, I - J + n) :- col(I), row(J). +% Number ascending diagonals. +diag2(I, J, I + J - 1) :- col(I), row(J). +% +% Negative Restrictions +:- D = 1 .. 2 * n - 1, not { queen(I, J) : diag1(I, J, D) } 1. +:- D = 1 .. 2 * n - 1, not { queen(I, J) : diag2(I, J, D) } 1. +% +% Output this predicate. +#show queen/2. \ No newline at end of file diff --git a/text/presentation_01/00base/probasp.pdf b/text/presentation_01/00base/probasp.pdf new file mode 100644 index 0000000..ac26505 Binary files /dev/null and b/text/presentation_01/00base/probasp.pdf differ diff --git a/text/presentation_01/00base/probasp.tex b/text/presentation_01/00base/probasp.tex new file mode 100644 index 0000000..c50e518 --- /dev/null +++ b/text/presentation_01/00base/probasp.tex @@ -0,0 +1,1203 @@ +% !TeX program=xelatex +\documentclass[bigger,xcolor={x11names,svgnames}]{beamer} + +\useinnertheme{circles} +\usefonttheme[onlymath]{serif} +\usefonttheme{structurebold} +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{footline}[frame number] +%\usepackage[x11names,usenames]{xcolor} +\setbeamercolor{highlight block}{bg=gray} +\setbeamercolor{alerted text}{fg=Crimson} +\usepackage{tikz} +\usetikzlibrary{ +automata,% +positioning,% +calc,% +patterns, +decorations,% +decorations.pathmorphing,% +arrows.meta, +shapes.misc +} +\tikzset{ + vert/.style={draw, circle, inner sep=2pt}, + event/.style={}, + smodel/.style={fill=gray!25}, + tchoice/.style={draw, circle}, + indep/.style={},%{draw, dashed}, + proptc/.style = {-latex, dashed}, + propsm/.style = {-latex, thick}, + doubt/.style = {gray} +} + +\usepackage{tkz-graph} +\newcommand{\qlr}[2]{\ensuremath{\begin{matrix}#1\cr\begin{aligned}\hline #2\end{aligned}\end{matrix}}} + +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[normalem]{ulem} % To strikeout +\usepackage{commath} +\usepackage{amssymb} +\usepackage[normalem]{ulem} +\usepackage[nice]{nicefrac} +\usepackage{stmaryrd} +\usepackage{acronym} +\usepackage{multicol} +\usepackage{cleveref} + +\usepackage{listings} + +\newcommand{\at}[1]{\ensuremath{\!\del{#1}}} +\newcommand{\class}[1]{\ensuremath{[{#1}]_{\sim}}} +\newcommand{\co}[1]{\ensuremath{\overline{#1}}} +\newcommand{\condsymb}[2]{\ensuremath{p_{#1|#2}}} +\newcommand{\cset}[2]{\ensuremath{\set{#1,~#2}}} +\newcommand{\deft}[1]{\textbf{#1}} +\newcommand{\emptyevent}{\ensuremath{\vartriangle}} +\newcommand{\ent}{\ensuremath{\lhd}} +\newcommand{\err}[1]{\ensuremath{\mathrm{err}\at{#1}}} +\newcommand{\fml}[1]{\ensuremath{{\cal #1}}} +\newcommand{\given}{\ensuremath{~\middle|~}} +\newcommand{\inconsistent}{\bot} +\newcommand{\indepclass}{\ensuremath{\Diamond}} +\newcommand{\isep}{~,~} +\newcommand{\langof}[1]{\ensuremath{\fml{L}\at{#1}}} +\newcommand{\larr}{\ensuremath{\leftarrow}} +\newcommand{\lclass}[1]{\ensuremath{\intoc{#1}}} +\newcommand{\lfrac}[2]{\ensuremath{{#1}/{#2}}} +\newcommand{\lrep}[1]{\ensuremath{\rep{}{#1}}} +\newcommand{\lset}[1]{\ensuremath{#1_{\ast}}} +\newcommand{\naf}{\ensuremath{\sim\!}} +\newcommand{\pr}[1]{\ensuremath{\mathrm{P}\at{#1}}} +\newcommand{\probfact}[2]{\ensuremath{#2:#1}} +\newcommand{\probrule}[3]{\probfact{#2}{#1} \leftarrow #3} +\newcommand{\pset}[1]{\ensuremath{\mathbb{P}\at{#1}}} +\newcommand{\pw}[1]{\ensuremath{\mu\at{#1}}} +\newcommand{\pwc}[1]{\ensuremath{\pwcfname\at{#1}}} +\newcommand{\pwcfname}{\ensuremath{\mu_{\textrm{TC}}}} +\newcommand{\q}[1]{\mathbf{#1}} +\newcommand{\rep}[2]{\ensuremath{\left\langle #1 \middle| #2 \right\rangle}} +\newcommand{\smclass}[1]{\ensuremath{\intcc{#1}}} +\newcommand{\stablecore}[1]{\ensuremath{\left\llbracket #1 \right\rrbracket}} +\newcommand{\tcgen}[1]{\ensuremath{\left<#1\right>}} +\newcommand{\uclass}[1]{\ensuremath{\intco{#1}}} +\newcommand{\urep}[1]{\ensuremath{\rep{#1}{}}} +\newcommand{\uset}[1]{\ensuremath{#1^{\ast}}} +\newcommand{\yset}[1]{\ensuremath{\left\langle #1 \right\rangle}} +%\newcommand{\tcgen}[1]{\ensuremath{\widehat{#1}}} + +\title{Stochastic Answer Set Programming} +\subtitle{A Research Program} +\author{Francisco Coelho} +\date{November 15, 2023} +\institute[\texttt{fc@uevora.pt}]{ +NOVA LINCS\\ +High Performance Computing Chair\\ +Departamento de Informática, Universidade de Évora +} +% +%=============================================================== +% +\begin{document} +% +\lstset{language=Prolog} +% +%=============================================================== +% +\begin{frame}[plain] + \titlepage + + \begin{center} + \footnotesize This is a join work with \textbf{Salvador Abreu}@DInf and \textbf{Bruno Dinis}@DMat. + \end{center} +\end{frame} +% +%=============================================================== +% +\section*{Motivation} +% +%=============================================================== +% +\begin{frame} + \frametitle{In Short} + + + \begin{itemize} + \item About \textbf{Machine Learning}: + \begin{itemize} + \item Vector or matrix based models lack ``structure''. + \item Large models don't \emph{explain} data. + \end{itemize} + \item About \textbf{Logic Programs}: + \begin{itemize} + \item Logic programs formalize knowledge. + \item Logic doesn't \emph{capture} uncertainty and is \emph{fragile} to noise. + \end{itemize} + \item \textbf{Probabilistic Logic Programs} extend formal knowledge with probabilities. + \begin{itemize} + \item How to propagate probabilities through rules? + \end{itemize} + \end{itemize} + \vfill + \begin{center} + \alert{\bf Goal:} Combine Logic and Statistics. + \end{center} +\end{frame} +% +%=============================================================== +% \begin{frame} +% %------------------------------------------------------------- +% %[fragile] +% %------------------------------------------------------------- +% \frametitle{Statistics and Machine Learning} +% %------------------------------------------------------------- +% \vfill +% \begin{itemize} +% \item \textbf{Data Analysis:} understand and summarize. +% \item \textbf{Model Building:} tools and techniques. +% \item \textbf{Model Evaluation:} performance. +% \item [] +% \item To calculate the accuracy/precision/recall of a model. +% \item To choose the right model for a problem. +% \item To tune the hyperparameters of a model. +% \end{itemize} +% \vfill +% \begin{center}\footnotesize +% Highlights of \texttt{Bard}'s (Google's LLM) reply to ``Explain what is the role of statistics in machine learning''. +% \end{center} +% \end{frame} +% +%=============================================================== +% +\section{Machine Learning} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\bf Machine Learning} + \end{center} + \vfill + \begin{itemize} + \item Standard Example --- Iris Classification + \item Assumptions of Machine Learning + \item Where Machine Learning Fails + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{The Standard Example --- Iris Classification} + %------------------------------------------------------------- + \small + \begin{center} + Learning Functions: \href{https://en.wikipedia.org/wiki/Iris_flower_data_set}{The famous Iris database} + \end{center} + \begin{columns} + \column{0.4\textwidth} + \begin{itemize}\setlength{\itemsep}{-0.5em} + \item[$x_1$] sepal length. + \item[$x_2$] sepal width. + \item[$x_3$] petal length. + \item[$x_4$] petal width. + \item[$y$] species (one of \emph{setosa}, \emph{versicolor}, \emph{virginica}). + \end{itemize} + \column{0.6\textwidth} + \begin{center} + \includegraphics[width=\textwidth]{iris_plot.pdf} + \end{center} + \end{columns} + \vfill + \begin{itemize} + \item A \emph{setosa} model: $ - 0.40 -0.65x_1 + 1.00x_2 > 0.00$. + \item A general \textbf{model template}: + $$ + f_\theta(\vec{x}) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3 + \theta_4 x_4> 0 + $$ + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Assumptions of Machine Learning} + %------------------------------------------------------------- + \begin{itemize} + \item Each instance is described in a \textbf{single row} by a \textbf{fixed set of features} + $$ + \begin{array}{cccc|c} + \mathbf{x_1} & \mathbf{x_2} & \ldots & \mathbf{x_n} & \mathbf{y} \\ + \hline + x_{11} & x_{21} & \ldots & x_{n1} & y_1 \\ + & & \vdots \\ + x_{1m} & x_{2m} & \ldots & x_{nm} & y_m \\ + \end{array} + .$$ + \item Instances are \textbf{independent} of one another, \textbf{given the model} + $$ + y = f_\theta(\vec{x}). + $$ + \item Parameters \textbf{minimize estimation error} \emph{e.g.} + $$ + \hat{\theta} = \arg\min_\theta \sum_i \norm{y_i - f_\theta(\vec{x_{i}})}. + $$ + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Failing Assumptions\hfill~1/2} + %------------------------------------------------------------- + \vfill + \begin{columns}[c] + \column{0.5\textwidth} + $$ + \begin{array}{ccc} + \text{student} & \text{course} & \text{grade} \\ + \hline + s_1 & c_1 & a \\ + s_2 & c_1 & c \\ + s_1 & c_2 & b \\ + s_2 & c_3 & b \\ + s_3 & c_2 & b \\ + s_4 & c_3 & b \\ + s_3 & c_4 & X \\ + s_4 & c_4 & Y \\ + \end{array} + $$ + \column{0.5\textwidth} + \emph{Infer $X \succ_g Y$.} + + \bigskip + ``\emph{Proof.}'' + + \bigskip + $s_1 \succ_s s_2$ (rows 1 \& 2)\\ so $c_2 \succ_c c_3$ (3 \& 4). + + \bigskip + Then $s_3 \succ_s s_4$ (5 \& 6)\\ therefore $X \succ_g Y\qed$. + \end{columns} + \vfill + \begin{itemize} + \item Instances are not independent. + \item Small dataset, so \emph{no statistics}. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Failing Assumptions\hfill~2/2} + %------------------------------------------------------------- + \footnotesize + \begin{center} + \textbf{Prompt:} Given \texttt{f(machine) = e}, \texttt{f(learning) = g} and \texttt{f(algorithm) = m}, what is the value of \texttt{f(ksadbf)}? + \end{center} + + \vfill + \begin{columns}[t] + \scriptsize + \column{0.35\textwidth} + $$ + \begin{array}{r|l} + \textbf{input} & \textbf{output} \\ + \hline + machine & e \\ + learning & g \\ + algorithm & m \\ + ksadbf & ? + \end{array} + $$ + + \bigskip + \textbf{Bard:} \tt f(ksadbf) = 11. + + We can see that the value of f(x) is simply the first letter of x minus 96. + + \column{0.65\textwidth} + + \textbf{ChatGPT:} \tt The information provided seems to define a function $f$ where certain inputs are associated with specific outputs. Based on the given information: + \begin{itemize} + \item $f(\text{machine}) = e$ + \item $f(\text{learning}) = g$ + \item $f(\text{algorithm}) = m$ + \end{itemize} + However, there is no information given about \( f(\text{ksadbf}) \). Without additional information or a specific rule that determines the output for \( f(\text{ksadbf}) \), \emph{it is not possible to determine its value}. + % + If there is a pattern or rule for how the outputs are assigned based on the inputs, you would need to provide that information for me to help determine the value of \( f(\text{ksadbf}) \). + \end{columns} + + \vfill + \begin{center} + No help from state-of-the-art Natural Language Processing or LLMs. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Where Machine Learning Fails} + %------------------------------------------------------------- + \begin{itemize} + \item No \emph{interpretability}: large models ($\dim \theta \sim \text{millions}$) are \alert{not understandable by humans}. + \item Need for \emph{large number of training} examples. + \item Unfit for \emph{multiple relations}, \emph{intersample dependencies} and \emph{variable features}: The \textit{Students, Courses and Results} and \emph{Last Letter} examples. + \item Poor \emph{generalization}: A model trained in the iris dataset is useless in any other domain. + \item \alert{No use of background knowledge}. + \end{itemize} +\end{frame} +% +%=============================================================== +% +\section{Logic Programming} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\bf Logic Programming} + \end{center} + \vfill + \begin{itemize} + \item An Example of Logic Programming. + \item Inductive Logic Programming. + \item Where ILP Fails. + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + [fragile] + %------------------------------------------------------------- + \frametitle{An Example of Logic Programming} + %------------------------------------------------------------- + \begin{columns}[c] + \column{0.4\textwidth} + \begin{tikzpicture}[>=Latex] + \node[vert] (v6) {6}; + \node[vert, above left = of v6] (v3) {3}; + \node[vert, above right = of v6] (v5) {5}; + \node[vert, below left = of v6] (v1) {1}; + \node[vert, below right = of v6] (v2) {2}; + \node[vert, below right = of v1] (v4) {4}; + \draw[->] (v6) to (v3); + \draw[<->] (v6) to (v5); + \draw[<->] (v6) to (v2); + \draw[<->] (v3) to (v5); + \draw[<->] (v3) to (v1); + \draw[->] (v3) to[bend right, out=225, in =180,relative=false] (v4); + \draw[->] (v1) to (v2); + \draw[<->] (v1) to (v4); + \draw[->] (v2) to (v5); + \draw[<->] (v2) to (v4); + \draw[->] (v5) to[bend left, out=-45, in=0,relative=false] (v4); + \end{tikzpicture} + \column{0.6\textwidth} + \scriptsize + \begin{lstlisting} +node(1..6). + +edge(1,2). edge(2,4). edge(3,1). +edge(4,1). edge(5,3). edge(6,2). +edge(1,3). edge(2,5). edge(3,4). +edge(4,2). edge(5,4). edge(6,3). +edge(1,4). edge(2,6). edge(3,5). +edge(5,6). edge(6,5). + +col(r). col(b). col(g). + +1 { color(X,C) : col(C) } 1 :- node(X). +:- edge(X,Y), color(X,C), color(Y,C). + +#show color/2. + \end{lstlisting} + \end{columns} + \vfill + \scriptsize + \begin{lstlisting} +color(2,b) color(1,g) color(4,r) color(3,b) color(5,g) color(6,r) +color(1,r) color(2,b) color(4,g) color(3,b) color(5,r) color(6,g) +color(1,r) color(2,g) color(4,b) color(3,g) color(5,r) color(6,b) +color(1,b) color(2,g) color(4,r) color(3,g) color(5,b) color(6,r) +color(2,r) color(1,g) color(4,b) color(3,r) color(5,g) color(6,b) +color(2,r) color(1,b) color(4,g) color(3,r) color(5,b) color(6,g) + \end{lstlisting} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Inductive Logic Programming} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + Learning Logic Programs from Examples. + \end{center} + + \vfill + \alert{Generate rules} that\ldots + \begin{itemize} + \item use \textbf{background knowledge} + $$ + \begin{aligned} + & parent(john,mary), & & parent(david,steve), \\ + & parent(kathy,mary), & & female(kathy), \\ + & male(john), & & male(david). + \end{aligned} + $$ + \item to entail all the \textbf{positive examples}, $father(john,mary), father(david,steve)$, + \item but none of the \textbf{negative examples}. $father(kathy,mary), father(john,steve)$, + + \end{itemize} + + \vfill + A \textbf{solution} is $$father(X,Y) \leftarrow parent(X,Y) \wedge male(X).$$ + +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Where Logic Programming Fails} + %------------------------------------------------------------- + \begin{center} + Meanwhile, in the \textbf{real world}, samples are \emph{incomplete} and come with \emph{noise}. + \end{center} + \vfill + \textbf{Logic inference is \alert{fragile}}: a mistake in the transcription of a fact is dramatic to the consequences: + \begin{itemize} + \item $parent(david,mary)$. + \item $parent(jonh,mary)$. + \end{itemize} + \vfill + \begin{center} + The statistic essence of machine learning provides \alert{robustness}. + \end{center} +\end{frame} +% +%=============================================================== +% +\section{Probabilistic Logic Programming} +% +%=============================================================== +% +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \vfill + \begin{center} + {\huge\bf Probabilistic Logic Programming} + \end{center} + \vfill + \begin{itemize} + \item Define distributions from logic programs. + \item Stochastic ASP: Specifying distributions. + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilistic Logic Programs (PLPs)} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + Logic programs \textbf{annotated} with probabilities. + \end{center} + + \vfill + \begin{columns}[c] + + \column{0.4\textwidth} + \begin{tikzpicture}[>=Latex] + \node[draw, rounded rectangle] (A) {$Alarm$}; + \node[draw, rounded rectangle, below = of A] (J) {$Johncalls$}; + \draw[->] (A) to (J); + \end{tikzpicture} + + \column{0.6\textwidth} + $ + \begin{aligned} + alarm:0.00251, & \\ + johncalls:0.9 & \leftarrow alarm, \\ + johncalls:0.05 & \leftarrow \neg alarm + \end{aligned} + $ + \end{columns} + + \vfill + \begin{itemize} + \item \alert{$alarm:0.00251$} is $alarm \vee \neg alarm$ plus $P(Alarm = true) = 0.00251$. + \item \alert{$johncalls:0.9 \leftarrow alarm$} is + $$P\del{Johncalls = true \middle| Alarm = true} = 0.9$$ + \end{itemize} + + \vfill + \begin{center} + Any bayesian network can be represented by a PLP. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Distributions from Logic Programs} + %------------------------------------------------------------- + \vfill + The program + $$ + \begin{aligned} + alarm:0.00251, & \\ + johncalls:0.9 & \leftarrow alarm, \\ + johncalls:0.05 & \leftarrow \neg alarm + \end{aligned} + $$ + entails four possible models (or worlds): + $$ + \begin{array}{r|r} + \text{model} & \text{probability} \\ + \hline + alarm, johncalls & 0.002259 \\ + alarm, \neg johncalls & 0.000251 \\ + \neg alarm, johncalls & 0.049874 \\ + \neg alarm, \neg johncalls & 0.947616 \\ + \end{array} + $$ + \begin{itemize} + \item \alert{\textbf{Models}} are special sets of \emph{literals} \textbf{entailed} from the program. + \item Probabilities \emph{propagate} from facts, through rules. + \end{itemize} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{There's a Problem\ldots} + %------------------------------------------------------------- + \vfill + The program + $$ + \begin{aligned} + alarm:0.00251, & \\ + johncalls \vee marycalls & \leftarrow alarm + \end{aligned} + $$ + entails three \alert{stable} (\emph{i.e.}\ minimal) models + $$ + \begin{array}{r|l} + \text{model} & \text{probability} \\ + \hline + alarm, johncalls & x \\ + alarm, marycalls & y \\ + \neg alarm & 0.99749 + \end{array} + $$ + but \textbf{no single way to set $x,y$}. + \vfill + \begin{center} + Some \emph{Probabilistic Logic Programs} define more than one joint distribution. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{\ldots and an Oportunity} + %------------------------------------------------------------- + \begin{center} + Some \emph{PLP}s define more than one joint distribution. + \end{center} + \vfill + \begin{itemize} + \item There is \textbf{no single probability assignment} from the facts stable models: $x,y \in \intcc{0,1}$. + \item But any assignment is bound by Kolmogorov's axioms, and \textbf{forms equations} such as: + $$x + y = P\del{alarm}.$$ + \item Existing \textbf{data can be used to estimate the unknowns} in those equations. + \end{itemize} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Stable Models, Events and Probabilities} + %------------------------------------------------------------- + \vfill + \begin{center} + What are we talking about? + \end{center} + \vfill + \begin{itemize} + \item A logic program has \textbf{atoms} (and \textbf{literals}) and \textbf{rules}: + $$ + \begin{aligned} + &male(john), \neg parent(kathy,mary), \\ + &father(X, Y) \leftarrow parent(X, Y) \wedge male(X). + \end{aligned} + $$ + \item A \alert{\textbf{stable model}} is a \textbf{minimal} model that contains: + \begin{itemize} + \item program's \emph{facts}: $parent(john,mary),~male(john)$. + \item consequences, by the \emph{rules}: $father(john,mary)$. + \end{itemize} + \item Some programs have more than one model: + \begin{tabular}{c|c} + \textbf{Logic Program} & \textbf{Stable Models} \\ + \hline + $a \vee \neg a, b \vee c \leftarrow a$ + & + $\set{\neg a}, \set{a, b}, \set{a, c}$ + \end{tabular} + \end{itemize} + \vfill + \begin{center} + How to propagate probability from annotated facts to other \emph{events}? + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Logic Programs and Probabilities} + %------------------------------------------------------------- + % \vfill + % \begin{center} + % The \textbf{space of events}, $\Omega$, is the set of all sets of literals. + % \end{center} + \vfill + \begin{itemize} + \item Consider the literals of a logic program $$L = \set{a_1, \ldots a_n, \neg a_1, \ldots \neg a_n}.$$ + \item Any model of that program is a (consistent) subset of $L$. + \item Let $\Omega = \mathbf{P}\del{L}$, \emph{i.e.} an \alert{event} $e$ is a subset of $L$, $e \subseteq L$. + \begin{itemize} + \item Setting a probability for some events seems straightforward: $P\del{\neg alarm} = 0.997483558$. + \item For others, not so much: + \begin{itemize} + \item $P\del{alarm, johncalls}$, $P\del{johncalls, marycalls, alarm}$, $P\del{marycalls}$? + \item $P\del{alarm, \neg alarm}$, $P\del{\neg marycalls}$? + \end{itemize} + \end{itemize} + \end{itemize} + \vfill + \begin{center} + How to \alert{propagate} probability from \emph{facts} to \emph{consequences} or other \emph{events}? + \end{center} +\end{frame} +% +\newcommand{\diagram}{ + \resizebox{!}{24ex}{ + \begin{tikzpicture}%[scale=0.6, every node/.style={scale=0.6}] + \node[event] (E) {$\emptyevent$}; + \node[tchoice, above left = of E, pin={[red!50!black]175:$0.3$}] (a) {$a$}; + \node[smodel, above left = of a, pin={[red!50!black]175:$0.3\theta$}] (ab) {$ab$}; + \node[smodel, above right = of a, pin={[red!50!black]175:$0.3\co{\theta}$}] (ac) {$ac$}; + \node[event, below = of ab] (b) {$b$}; + \node[event, below = of ac] (c) {$c$}; + \node[event, above right = of ab] (abc) {$abc$}; + \node[event, above left = of ab] (abC) {$\co{c}ab$}; + \node[event, above right = of ac] (aBc) {$\co{b}ac$}; + \node[indep, right = of ac] (bc) {$bc$}; + \node[tchoice, smodel, below right = of bc, pin={[red!50!black]175:$0.7$}] (A) {$\co{a}$}; + \node[event, above = of A] (Ac) {$\co{a}c$}; + \node[event, above right = of Ac] (Abc) {$\co{a}bc$}; + % ---- + \path[draw, rounded corners, fill=cyan, opacity=0.1] + (ab.west) -- + (ab.north west) -- + % + (abC.south west) -- + (abC.north west) -- + (abC.north) -- + % + (abc.north east) -- + (abc.east) -- + (abc.south east) -- + % + (ab.north east) -- + (ab.east) -- + (ab.south east) -- + % + (a.north east) -- + % + (E.north east) -- + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (b.south west) -- + % + (ab.west) + ; + % ---- + \path[draw, rounded corners, fill=yellow, opacity=0.1] + (ac.south west) -- + (ac.west) -- + (ac.north west) -- + % + (abc.south west) -- + (abc.west) -- + (abc.north west) -- + % + (aBc.north east) -- + (aBc.east) -- + (aBc.south east) -- + % + (ac.north east) -- + % + (c.east) -- + % + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (a.south west) -- + (a.west) -- + (a.north west) -- + (a.north) -- + % + (ac.south west) + ; + % ---- + \path[draw, rounded corners, fill=magenta, opacity=0.1] + % (A.north west) -- + % + (Ac.north west) -- + % + (Abc.north west) -- + (Abc.north) -- + (Abc.north east) -- + (Abc.south east) -- + % + % (Ac.north east) -- + % (Ac.east) -- + % + % (A.east) -- + (A.south east) -- + % + (E.south east) -- + (E.south) -- + (E.south west) -- + (E.west) -- + (E.north west) -- + % + (Ac.north west) + ; + \end{tikzpicture} + } +} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Classes of Events} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + \diagram + \end{center} + + \vfill + \begin{center} + \begin{tabular}{lr} + $\begin{aligned} + \probfact{0.3}{a} \\ + b \vee c & \leftarrow a + \end{aligned}$ + & + $\co{a} = \set{\neg a}, ab = \set{a, b}, ac = \set{a, c}$ + \end{tabular} + \end{center} + + \vfill + \begin{itemize} + \item Define \alert{equivalence classes} for all events, based on $\subseteq, \supseteq$ relations with the \textbf{stable models}. + \item This example shows $6$ out of $2^3 + 1$ classes. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilities for all Events} + %------------------------------------------------------------- + \vfill + \begin{center} + \diagram + \end{center} + \vfill + \footnotesize + \begin{enumerate} + \item Set \alert{weights} in the stable models (shaded nodes), using parameters when needed: $\mu\del{\co{a}} = 0.7; \mu\del{ab} = 0.3\theta; \mu\del{ac}=0.3\del{1 - \theta}$ + \item Assume that the stable models are \alert{disjoint events}. + \item Define \alert{weight of an event} as the sum of the weights of the related stable models. + \item Normalize weights to get a (probability) \alert{distribution}. + \end{enumerate} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilities for all Events} + %------------------------------------------------------------- + \vfill + % \begin{center} + % \diagram + % \end{center} + % \vfill + % \scriptsize + + \begin{equation*} + \begin{array}{clr|cc|cc} + & \stablecore{e} + & \# \class{e} + & \pw{\class{e}} + & \pw{e} + & \pr{E = e} + & \pr{E \in \class{e}} + \\ + \hline + % + & \inconsistent + & 37 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + \square + & \indepclass + & 9 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + {\color{magenta!20}\blacksquare } + & \co{a} + & 9 + & \frac{7}{10} + & \frac{7}{90} + & \frac{7}{207} + & \frac{7}{23} + \\[4pt] + % + {\color{cyan!20}\blacksquare } + & ab + & 3 + & \frac{3}{10}\theta + & \frac{1}{10}\theta + & \frac{1}{23}\alert{\theta} + & \frac{3}{23}\theta + \\[4pt] + % + {\color{yellow!20}\blacksquare } + & ac + & 3 + & \frac{3}{10}\co{\theta} + & \frac{1}{10}\co{\theta} + & \frac{1}{23}\alert{\co{\theta}} + & \frac{3}{23}\co{\theta} + \\[4pt] + % + & \co{a}, ab + & 0 + & \frac{7 + 3\theta}{10} + & 0 + & 0 + & 0 + \\[4pt] + % + & \co{a}, ac + & 0 + & \frac{7 + 3\co{\theta}}{10} + & 0 + & 0 + & 0 + % + \\[4pt] + % + {\color{green!20}\blacksquare } + & ab, ac + & 2 + & \frac{3}{10} + & \frac{3}{20} + & \frac{3}{46} + & \frac{3}{23} + \\[4pt] + % + {\color{gray!20}\blacksquare } + & \co{a}, ab, ac + & 1 + & 1 + & 1 + & \frac{10}{23} + & \frac{10}{23} + \\[4pt] + % + \hline + & + & 64 + & + & Z = \frac{23}{10} + & + %& \Sigma = 1 + \end{array} + \end{equation*} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Estimating the Parameters} + %------------------------------------------------------------- + A \alert{sample} can be used to estimate the parameters $\theta$, by minimizing + \begin{equation*} + \err{\theta} := \sum_{e\in\fml{E}} \del{\pr{E = e\given \Theta = \theta} - \pr{S = e}}^2.\label{eq:err.e.s} + \end{equation*} + where + \begin{itemize} + \item $\fml{E}$ is the set of all events, + \item $\pr{E\given \Theta}$ the \textbf{model+parameters} based distribution, + \item $\pr{S}$ is the \textbf{empiric} distribution from the given sample. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Behind Parameter Estimation} + %------------------------------------------------------------- + \vfill + So, we can derive a distribution $\pr{E\given \Theta = \hat{\theta}}$ from a program $P$ and a sample $S$. + \begin{itemize} + \item The sample defines an empiric distribution $\pr{S}$\ldots + \item \ldots that is used to estimate $\theta$ in $\pr{E\given \Theta}$\ldots + \item \ldots and \alert{score the program} $P$ w.r.t.\ that sample using, \emph{e.g.} the $\err{}$ function. + \end{itemize} + \vfill + +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Back to Inductive Logic Programming} + %------------------------------------------------------------- + \vfill + Recall the \emph{Learning Logic Programs from Examples} setting: + \begin{itemize} + \item Given \textbf{positive} and \textbf{negative} examples, and \textbf{background knowledge}\ldots + \item find a \textbf{program}\ldots + \begin{itemize} + \item \ldots using the facts and relations from the \textbf{BK}\ldots + \item \ldots such that \textbf{all the PE} and \textbf{none the NE} examples are entailed. + \end{itemize} + \end{itemize} + \vfill + \begin{quotation} + Given a sample of events, and a set of programs, \alert{the score} of those programs (w.r.t. the sample) \alert{can be used in evolutionary algorithms} while searching for better solutions. + \end{quotation} +\end{frame} +% +%=============================================================== +% +\section{In Conclusion} +% +%=============================================================== +% +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \vfill + \begin{center} + {\huge\bf In Conclusion} + \end{center} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + \begin{itemize} + \item \textbf{Machine Learning} has limitations. + \item As does \textbf{Inductive Logic Programming}. + \item But, distributions can be defined by \textbf{Stochastic Logic Programs}. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + Distributions can be defined by \textbf{Stochastic Logic Programs}. Here we: + \begin{enumerate} + \item Look at the program's \textbf{stable models} and + \item Use them to partition the \textbf{events} and then + \item Using annotated probabilities, define: + \begin{enumerate} + \item a finite \textbf{measure}\ldots + \item that, normalized, is a \textbf{distribution} on all events. + \end{enumerate} + \end{enumerate} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + Distributions can be defined by \textbf{Stochastic Logic Programs}. + \begin{itemize} + \item These distributions might have some \textbf{parameters}, due to indeterminism in the program. + \item A \textbf{sample} can be used to estimate those parameters\ldots + \item \ldots and \textbf{score} programs concurring to describe it. + \item This score a key ingredient in \textbf{evolutionary algorithms}. + \end{itemize} + \begin{quotation} + \ldots and a step towards the \alert{induction of stochastic logic programs} using \textbf{data} and \textbf{background knowledge}. + \end{quotation} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Future Work} + %------------------------------------------------------------- + \vfill + \begin{center} + Induction of Stochastic Logic (ASP) Programs. + \end{center} + \vfill + \begin{enumerate} + \item \textbf{Meta-programming:} formal rules for rule generation. + \item \textbf{Generation}, \textbf{Combination} and \textbf{Mutation} operators. + \item \textbf{Complexity.} + \item \textbf{Applications.} + \item \textbf{Profit.} + \end{enumerate} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\alert{\bf Thank You!}} + \vfill + Questions? + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{References} + \begin{itemize} + \item \href{https://arxiv.org/abs/1801.00631}{Gary Marcus, \emph{Deep Learning: A Critical Appraisal}, 2018}. + \item \href{https://arxiv.org/abs/1911.01547}{François Chollet, \emph{On the Measure of Intelligence}, 2019}. + \item \href{https://arxiv.org/abs/1801.00631}{Bengio \emph{et al.}, \emph{A Meta-Transfer Objective for Learning to Disentangle Causal Mechanisms}, 2019}. + \item \href{https://arxiv.org/abs/1801.00631}{Cropper \emph{et al.}, \emph{Turning 30: New Ideas in Inductive Logic Programming}, 2020}. + \item \href{https://doi.org/10.1201/9781003427421}{Fabrizio Riguzzi, \emph{Foundations of Probabilistic Logic Programming }, 2023}. + \end{itemize} + %------------------------------------------------------------- +\end{frame} +% +\end{document} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{TITLE} + %------------------------------------------------------------- +\end{frame} +% + + diff --git a/text/presentation_01/00base/scg.lp b/text/presentation_01/00base/scg.lp new file mode 100644 index 0000000..f45d374 --- /dev/null +++ b/text/presentation_01/00base/scg.lp @@ -0,0 +1,40 @@ +r(s1, c1, a). +r(s2, c1, c). +r(s1, c2, b). +r(s2, c3, b). +r(s3, c2, b). +r(s4, c3, b). +1 { r(s3, c4, G) : grade(G) } 1. +1 { r(s4, c4, G) : grade(G) } 1. + +student(s1). +student(s2). +student(s3). +student(s4). + +course(c1). +course(c2). +course(c3). +course(c4). + +grade(a). +grade(b). +grade(c). + +better(a, b). +better(b, c). +better(G1, G2) :- better(G1, G3), better(G3, G2). + +harder(C1, C2) :- r(S, C1, G1), r(S, C2, G2), better(G2, G1). +harder(C1, C2) :- harder(C1, C3), harder(C3, C2). + +smarter(S1, S2) :- r(S1, C, G1), r(S2, C, G2), better(G1, G2). +smarter(S1, S2) :- r(S1, C1, G), r(S2, C2, G), harder(C1, C2). +smarter(S1, S2) :- smarter(S1, S3), smarter(S3, S2). + +:- r(S1, C, G1), r(S2, C, G2), smarter(S1, S2), better(G2, G1). +:- r(S, C1, G1), r(S, C2, G2), harder(C1, C2), better(G1, G2). + +query(G1, G2) :- r(s3, c4, G1), r(s4, c4, G2). + +#show query/2. \ No newline at end of file diff --git a/text/presentation_01/bits_goa/bits_goa-2024-01-10.pdf b/text/presentation_01/bits_goa/bits_goa-2024-01-10.pdf new file mode 100644 index 0000000..8c0eafc Binary files /dev/null and b/text/presentation_01/bits_goa/bits_goa-2024-01-10.pdf differ diff --git a/text/presentation_01/bits_goa/bits_goa-2024-01-10.tex b/text/presentation_01/bits_goa/bits_goa-2024-01-10.tex new file mode 100644 index 0000000..e5d86ce --- /dev/null +++ b/text/presentation_01/bits_goa/bits_goa-2024-01-10.tex @@ -0,0 +1,1210 @@ +% !TeX program=xelatex +\documentclass[bigger]{beamer} + +\useinnertheme{circles} +\usefonttheme[onlymath]{serif} +\usefonttheme{structurebold} +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{footline}[frame number] +\usepackage{xcolor} +\setbeamercolor{highlight block}{bg=gray} + +\usepackage{tikz} +\usetikzlibrary{ +automata,% +positioning,% +calc,% +patterns, +decorations,% +decorations.pathmorphing,% +arrows.meta, +shapes.misc +} +\tikzset{ + vert/.style={draw, circle, inner sep=2pt}, + event/.style={}, + smodel/.style={fill=gray!25}, + tchoice/.style={draw, circle}, + indep/.style={},%{draw, dashed}, + proptc/.style = {-latex, dashed}, + propsm/.style = {-latex, thick}, + doubt/.style = {gray} +} + +\usepackage{tkz-graph} +\newcommand{\qlr}[2]{\ensuremath{\begin{matrix}#1\cr\begin{aligned}\hline #2\end{aligned}\end{matrix}}} + +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[normalem]{ulem} % To strikeout +\usepackage{commath} +\usepackage{amssymb} +\usepackage[normalem]{ulem} +\usepackage[nice]{nicefrac} +\usepackage{stmaryrd} +\usepackage{acronym} +\usepackage{multicol} +\usepackage{cleveref} + +\usepackage{listings} + +\newcommand{\at}[1]{\ensuremath{\!\del{#1}}} +\newcommand{\class}[1]{\ensuremath{[{#1}]_{\sim}}} +\newcommand{\co}[1]{\ensuremath{\overline{#1}}} +\newcommand{\condsymb}[2]{\ensuremath{p_{#1|#2}}} +\newcommand{\cset}[2]{\ensuremath{\set{#1,~#2}}} +\newcommand{\deft}[1]{\textbf{#1}} +\newcommand{\emptyevent}{\ensuremath{\vartriangle}} +\newcommand{\ent}{\ensuremath{\lhd}} +\newcommand{\err}[1]{\ensuremath{\mathrm{err}\at{#1}}} +\newcommand{\fml}[1]{\ensuremath{{\cal #1}}} +\newcommand{\given}{\ensuremath{~\middle|~}} +\newcommand{\inconsistent}{\bot} +\newcommand{\indepclass}{\ensuremath{\Diamond}} +\newcommand{\isep}{~,~} +\newcommand{\langof}[1]{\ensuremath{\fml{L}\at{#1}}} +\newcommand{\larr}{\ensuremath{\leftarrow}} +\newcommand{\lclass}[1]{\ensuremath{\intoc{#1}}} +\newcommand{\lfrac}[2]{\ensuremath{{#1}/{#2}}} +\newcommand{\lrep}[1]{\ensuremath{\rep{}{#1}}} +\newcommand{\lset}[1]{\ensuremath{#1_{\ast}}} +\newcommand{\naf}{\ensuremath{\sim\!}} +\newcommand{\pr}[1]{\ensuremath{\mathrm{P}\at{#1}}} +\newcommand{\probfact}[2]{\ensuremath{#2:#1}} +\newcommand{\probrule}[3]{\probfact{#2}{#1} \leftarrow #3} +\newcommand{\pset}[1]{\ensuremath{\mathbb{P}\at{#1}}} +\newcommand{\pw}[1]{\ensuremath{\mu\at{#1}}} +\newcommand{\pwc}[1]{\ensuremath{\pwcfname\at{#1}}} +\newcommand{\pwcfname}{\ensuremath{\mu_{\textrm{TC}}}} +\newcommand{\q}[1]{\mathbf{#1}} +\newcommand{\rep}[2]{\ensuremath{\left\langle #1 \middle| #2 \right\rangle}} +\newcommand{\smclass}[1]{\ensuremath{\intcc{#1}}} +\newcommand{\stablecore}[1]{\ensuremath{\left\llbracket #1 \right\rrbracket}} +\newcommand{\tcgen}[1]{\ensuremath{\left<#1\right>}} +\newcommand{\uclass}[1]{\ensuremath{\intco{#1}}} +\newcommand{\urep}[1]{\ensuremath{\rep{#1}{}}} +\newcommand{\uset}[1]{\ensuremath{#1^{\ast}}} +\newcommand{\yset}[1]{\ensuremath{\left\langle #1 \right\rangle}} +%\newcommand{\tcgen}[1]{\ensuremath{\widehat{#1}}} + +\title{Stochastic Answer Set Programming} +\subtitle{A Research Program} +\author{Francisco Coelho} +\date{January 9, 2024} +\institute[\texttt{fc@uevora.pt}]{ +NOVA LINCS\\ +High Performance Computing Chair\\ +Departamento de Informática, Universidade de Évora +} +% +%=============================================================== +% +\begin{document} +% +\lstset{language=Prolog} +% +%=============================================================== +% +\begin{frame}[plain] + \titlepage + + \begin{center} + \footnotesize This is a join work with \textbf{Salvador Abreu}@DInf and \textbf{Bruno Dinis}@DMat. + \end{center} +\end{frame} +% +%=============================================================== +% +\section*{Motivation} +% +%=============================================================== +% +\begin{frame} + \frametitle{In Short} + + + \begin{itemize} + \item About \textbf{Machine Learning}: + \begin{itemize} + \item Vector or matrix based models lack ``structure''. + \item Large models don't \emph{explain} data. + \end{itemize} + \item About \textbf{Logic Programs}: + \begin{itemize} + \item Logic programs formalize knowledge. + \item Logic doesn't \emph{capture} uncertainty and is \emph{fragile} to noise. + \end{itemize} + \item \textbf{Probabilistic Logic Programs} extend formal knowledge with probabilities. + \begin{itemize} + \item How to propagate probabilities through rules? + \end{itemize} + \end{itemize} + \vfill + \begin{center} + \alert{\bf Goal:} Combine Logic and Statistics. + \end{center} +\end{frame} +% +%=============================================================== +% \begin{frame} +% %------------------------------------------------------------- +% %[fragile] +% %------------------------------------------------------------- +% \frametitle{Statistics and Machine Learning} +% %------------------------------------------------------------- +% \vfill +% \begin{itemize} +% \item \textbf{Data Analysis:} understand and summarize. +% \item \textbf{Model Building:} tools and techniques. +% \item \textbf{Model Evaluation:} performance. +% \item [] +% \item To calculate the accuracy/precision/recall of a model. +% \item To choose the right model for a problem. +% \item To tune the hyperparameters of a model. +% \end{itemize} +% \vfill +% \begin{center}\footnotesize +% Highlights of \texttt{Bard}'s (Google's LLM) reply to ``Explain what is the role of statistics in machine learning''. +% \end{center} +% \end{frame} +% +%=============================================================== +% +\section{Machine Learning} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\bf Machine Learning} + \end{center} + \vfill + \begin{itemize} + \item Standard Example --- Iris Classification + \item Assumptions of Machine Learning + \item Where Machine Learning Fails + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{The Standard Example --- Iris Classification} + %------------------------------------------------------------- + \small + \begin{center} + Learning Functions: \href{https://en.wikipedia.org/wiki/Iris_flower_data_set}{The famous Iris database} + \end{center} + \begin{columns} + \column{0.4\textwidth} + \begin{itemize}\setlength{\itemsep}{-0.5em} + \item[$x_1$] sepal length. + \item[$x_2$] sepal width. + \item[$x_3$] petal length. + \item[$x_4$] petal width. + \item[$y$] species (one of \emph{setosa}, \emph{versicolor}, \emph{virginica}). + \end{itemize} + \column{0.6\textwidth} + \begin{center} + \includegraphics[width=\textwidth]{iris_plot.pdf} + \end{center} + \end{columns} + \vfill + \begin{itemize} + \item A \emph{setosa} model: $ - 0.40 -0.65x_1 + 1.00x_2 > 0.00$. + \item A general \textbf{model template}: + $$ + f_\theta(\vec{x}) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3 + \theta_4 x_4> 0 + $$ + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Assumptions of Machine Learning} + %------------------------------------------------------------- + \begin{itemize} + \item Each instance is described in a \textbf{single row} by a \textbf{fixed set of features} + $$ + \begin{array}{cccc|c} + \mathbf{x_1} & \mathbf{x_2} & \ldots & \mathbf{x_n} & \mathbf{y} \\ + \hline + x_{11} & x_{21} & \ldots & x_{n1} & y_1 \\ + & & \vdots \\ + x_{1m} & x_{2m} & \ldots & x_{nm} & y_m \\ + \end{array} + .$$ + \item Instances are \textbf{independent} of one another, \textbf{given the model} + $$ + y = f_\theta(\vec{x}). + $$ + \item Parameters \textbf{minimize estimation error} \emph{e.g.} + $$ + \hat{\theta} = \arg\min_\theta \sum_i \norm{y_i - f_\theta(\vec{x_{i}})}. + $$ + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Failing Assumptions\hfill~1/2} + %------------------------------------------------------------- + \vfill + \begin{columns}[c] + \column{0.5\textwidth} + $$ + \begin{array}{ccc} + \text{student} & \text{course} & \text{grade} \\ + \hline + s_1 & c_1 & a \\ + s_2 & c_1 & c \\ + s_1 & c_2 & b \\ + s_2 & c_3 & b \\ + s_3 & c_2 & b \\ + s_4 & c_3 & b \\ + s_3 & c_4 & X \\ + s_4 & c_4 & Y \\ + \end{array} + $$ + \column{0.5\textwidth} + \emph{Infer $X \succ_g Y$.} + + \bigskip + ``\emph{Proof.}'' + + \bigskip + $s_1 \succ_s s_2$ (rows 1 \& 2)\\ so $c_2 \succ_c c_3$ (3 \& 4). + + \bigskip + Then $s_3 \succ_s s_4$ (5 \& 6)\\ therefore $X \succ_g Y\qed$. + \end{columns} + \vfill + \begin{itemize} + \item Instances are not independent. + \item Small dataset, so \emph{no statistics}. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Failing Assumptions\hfill~2/2} + %------------------------------------------------------------- + \footnotesize + \begin{center} + \textbf{Prompt:} Given \texttt{f(machine) = e}, \texttt{f(learning) = g} and \texttt{f(algorithm) = m}, what is the value of \texttt{f(ksadbf)}? + \end{center} + + \vfill + \begin{columns}[t] + \scriptsize + \column{0.35\textwidth} + $$ + \begin{array}{r|l} + \textbf{input} & \textbf{output} \\ + \hline + machine & e \\ + learning & g \\ + algorithm & m \\ + ksadbf & ? + \end{array} + $$ + + \bigskip + \textbf{Bard:} \tt f(ksadbf) = 11. + + We can see that the value of f(x) is simply the first letter of x minus 96. + + \column{0.65\textwidth} + + \textbf{ChatGPT:} \tt The information provided seems to define a function $f$ where certain inputs are associated with specific outputs. Based on the given information: + \begin{itemize} + \item $f(\text{machine}) = e$ + \item $f(\text{learning}) = g$ + \item $f(\text{algorithm}) = m$ + \end{itemize} + However, there is no information given about \( f(\text{ksadbf}) \). Without additional information or a specific rule that determines the output for \( f(\text{ksadbf}) \), \emph{it is not possible to determine its value}. + % + If there is a pattern or rule for how the outputs are assigned based on the inputs, you would need to provide that information for me to help determine the value of \( f(\text{ksadbf}) \). + \end{columns} + + \vfill + \begin{center} + No help from state-of-the-art Natural Language Processing or LLMs. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Where Machine Learning Fails} + %------------------------------------------------------------- + \begin{itemize} + \item No \emph{interpretability}: large models ($\dim \theta \sim \text{thousands of millions}$) are \alert{not understandable by humans}. + \item Need for \emph{large number of training} examples. + \item Unfit for \emph{multiple relations}, \emph{intersample dependencies} and \emph{variable features}: The \textit{Students, Courses and Results} and \emph{Last Letter} examples. + \item Poor \emph{generalization}: A model trained in the iris dataset is useless in any other domain. + \item \alert{No use of background knowledge}. + \end{itemize} +\end{frame} +% +%=============================================================== +% +\section{Logic Programming} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\bf Logic Programming} + \end{center} + \vfill + \begin{itemize} + \item An Example of Logic Programming. + \item Inductive Logic Programming. + \item Where ILP Fails. + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + [fragile] + %------------------------------------------------------------- + \frametitle{An Example of Logic Programming} + %------------------------------------------------------------- + \begin{columns}[c] + \column{0.4\textwidth} + \begin{tikzpicture}[>=Latex] + \node[vert] (v6) {6}; + \node[vert, above left = of v6] (v3) {3}; + \node[vert, above right = of v6] (v5) {5}; + \node[vert, below left = of v6] (v1) {1}; + \node[vert, below right = of v6] (v2) {2}; + \node[vert, below right = of v1] (v4) {4}; + \draw[->] (v6) to (v3); + \draw[<->] (v6) to (v5); + \draw[<->] (v6) to (v2); + \draw[<->] (v3) to (v5); + \draw[<->] (v3) to (v1); + \draw[->] (v3) to[bend right, out=225, in =180,relative=false] (v4); + \draw[->] (v1) to (v2); + \draw[<->] (v1) to (v4); + \draw[->] (v2) to (v5); + \draw[<->] (v2) to (v4); + \draw[->] (v5) to[bend left, out=-45, in=0,relative=false] (v4); + \end{tikzpicture} + \column{0.6\textwidth} + \scriptsize + \begin{lstlisting} +node(1..6). + +edge(1,2). edge(2,4). edge(3,1). +edge(4,1). edge(5,3). edge(6,2). +edge(1,3). edge(2,5). edge(3,4). +edge(4,2). edge(5,4). edge(6,3). +edge(1,4). edge(2,6). edge(3,5). +edge(5,6). edge(6,5). + +col(r). col(b). col(g). + +1 { color(X,C) : col(C) } 1 :- node(X). +:- edge(X,Y), color(X,C), color(Y,C). + +#show color/2. + \end{lstlisting} + \end{columns} + \vfill + \scriptsize + \begin{lstlisting} +color(2,b) color(1,g) color(4,r) color(3,b) color(5,g) color(6,r) +color(1,r) color(2,b) color(4,g) color(3,b) color(5,r) color(6,g) +color(1,r) color(2,g) color(4,b) color(3,g) color(5,r) color(6,b) +color(1,b) color(2,g) color(4,r) color(3,g) color(5,b) color(6,r) +color(2,r) color(1,g) color(4,b) color(3,r) color(5,g) color(6,b) +color(2,r) color(1,b) color(4,g) color(3,r) color(5,b) color(6,g) + \end{lstlisting} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Inductive Logic Programming} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + Learning Logic Programs from Examples. + \end{center} + + \vfill + \alert{Generate rules} that\ldots + \begin{itemize} + \item use \textbf{background knowledge} + $$ + \begin{aligned} + & parent(john,mary), & & parent(david,steve), \\ + & parent(kathy,mary), & & female(kathy), \\ + & male(john), & & male(david). + \end{aligned} + $$ + \item to entail all the \textbf{positive examples}, $father(john,mary), father(david,steve)$, + \item but none of the \textbf{negative examples}. $father(kathy,mary), father(john,steve)$, + + \end{itemize} + + \vfill + A \textbf{solution} is $$father(X,Y) \leftarrow parent(X,Y) \wedge male(X).$$ + +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Where Logic Programming Fails} + %------------------------------------------------------------- + \begin{center} + Meanwhile, in the \textbf{real world}, samples are \emph{incomplete} and come with \emph{noise}. + \end{center} + \vfill + \textbf{Logic inference is \alert{fragile}}: a mistake in the transcription of a fact is dramatic to the consequences: + \begin{itemize} + \item $parent(david,mary)$. + \item $parent(jonh,mary)$. + \end{itemize} + \vfill + \begin{center} + The statistic essence of machine learning provides \alert{robustness}. + \end{center} +\end{frame} +% +%=============================================================== +% +\section{Probabilistic Logic Programming} +% +%=============================================================== +% +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \vfill + \begin{center} + {\huge\bf Probabilistic Logic Programming} + \end{center} + \vfill + \begin{itemize} + \item Define distributions from logic programs. + \item Stochastic ASP: Specifying distributions. + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilistic Logic Programs (PLPs)} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + Logic programs \textbf{annotated} with probabilities. + \end{center} + + \vfill + \begin{columns}[c] + + \column{0.4\textwidth} + \begin{tikzpicture}[>=Latex] + \node[draw, rounded rectangle] (A) {$Alarm$}; + \node[draw, rounded rectangle, below = of A] (J) {$Johncalls$}; + \draw[->] (A) to (J); + \end{tikzpicture} + + \column{0.6\textwidth} + $ + \begin{aligned} + alarm:0.00251, & \\ + johncalls:0.9 & \leftarrow alarm, \\ + johncalls:0.05 & \leftarrow \neg alarm + \end{aligned} + $ + \end{columns} + + \vfill + \begin{itemize} + \item \alert{$alarm:0.00251$} is $alarm \vee \neg alarm$ plus $P(Alarm = true) = 0.00251$. + \item \alert{$johncalls:0.9 \leftarrow alarm$} is + $$P\del{Johncalls = true \middle| Alarm = true} = 0.9$$ + \end{itemize} + + \vfill + \begin{center} + Any bayesian network can be represented by a PLP. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Distributions from Logic Programs} + %------------------------------------------------------------- + \vfill + The program + $$ + \begin{aligned} + alarm:0.00251, & \\ + johncalls:0.9 & \leftarrow alarm, \\ + johncalls:0.05 & \leftarrow \neg alarm + \end{aligned} + $$ + entails four possible models (or worlds): + $$ + \begin{array}{r|r} + \text{model} & \text{probability} \\ + \hline + alarm, johncalls & 0.002259 \\ + alarm, \neg johncalls & 0.000251 \\ + \neg alarm, johncalls & 0.049874 \\ + \neg alarm, \neg johncalls & 0.947616 \\ + \end{array} + $$ + \begin{itemize} + \item \alert{\textbf{Models}} are special sets of \emph{literals} \textbf{entailed} from the program. + \item Probabilities \emph{propagate} from facts, through rules. + \end{itemize} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{There's a Problem\ldots} + %------------------------------------------------------------- + \vfill + The program + $$ + \begin{aligned} + alarm:0.00251, & \\ + johncalls \vee marycalls & \leftarrow alarm + \end{aligned} + $$ + entails three \alert{stable} (\emph{i.e.}\ minimal) models + $$ + \begin{array}{r|l} + \text{model} & \text{probability} \\ + \hline + alarm, johncalls & x \\ + alarm, marycalls & y \\ + \neg alarm & 0.99749 + \end{array} + $$ + but \textbf{no single way to set $x,y$}. + \vfill + \begin{center} + Some \emph{Probabilistic Logic Programs} define more than one joint distribution. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{\ldots and an Oportunity} + %------------------------------------------------------------- + \begin{center} + Some \emph{PLP}s define more than one joint distribution. + \end{center} + \vfill + \begin{itemize} + \item There is \textbf{no single probability assignment} from the facts stable models: $x,y \in \intcc{0,1}$. + \item But any assignment is bound by Kolmogorov's axioms, and \textbf{forms equations} such as: + $$x + y = P\del{alarm}.$$ + \item Existing \textbf{data can be used to estimate the unknowns} in those equations. + \end{itemize} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Stable Models, Events and Probabilities} + %------------------------------------------------------------- + \vfill + \begin{center} + What are we talking about? + \end{center} + \vfill + \begin{itemize} + \item A logic program has \textbf{atoms} (and \textbf{literals}) and \textbf{rules}: + $$ + \begin{aligned} + &male(john), \neg parent(kathy,mary), \\ + &father(X, Y) \leftarrow parent(X, Y) \wedge male(X). + \end{aligned} + $$ + \item A \alert{\textbf{stable model}} is a \textbf{minimal} model that contains: + \begin{itemize} + \item program's \emph{facts}: $parent(john,mary),~male(john)$. + \item consequences, by the \emph{rules}: $father(john,mary)$. + \end{itemize} + \item Some programs have more than one model: + \begin{tabular}{c|c} + \textbf{Logic Program} & \textbf{Stable Models} \\ + \hline + $a \vee \neg a, b \vee c \leftarrow a$ + & + $\set{\neg a}, \set{a, b}, \set{a, c}$ + \end{tabular} + \end{itemize} + \vfill + \begin{center} + How to propagate probability from annotated facts to other \emph{events}? + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Logic Programs and Probabilities} + %------------------------------------------------------------- + % \vfill + % \begin{center} + % The \textbf{space of events}, $\Omega$, is the set of all sets of literals. + % \end{center} + \vfill + \begin{itemize} + \item Consider the literals of a logic program $$L = \set{a_1, \ldots a_n, \neg a_1, \ldots \neg a_n}.$$ + \item Any model of that program is a (consistent) subset of $L$. + \item Let $\Omega = \mathbf{P}\del{L}$, \emph{i.e.} an \alert{event} $e$ is a subset of $L$, $e \subseteq L$. + \begin{itemize} + \item Setting a probability for some events seems straightforward: $P\del{\neg alarm} = 0.997483558$. + \item For others, not so much: + \begin{itemize} + \item $P\del{alarm, johncalls}$, $P\del{johncalls, marycalls, alarm}$, $P\del{marycalls}$? + \item $P\del{alarm, \neg alarm}$, $P\del{\neg marycalls}$? + \end{itemize} + \end{itemize} + \end{itemize} + \vfill + \begin{center} + How to \alert{propagate} probability from \emph{facts} to \emph{consequences} and other \emph{events}? + \end{center} +\end{frame} +% +\newcommand{\diagram}{ + \resizebox{!}{24ex}{ + \begin{tikzpicture}%[scale=0.6, every node/.style={scale=0.6}] + \node[event] (E) {$\emptyevent$}; + \node[tchoice, above left = of E, pin={[red!50!black]175:$0.3$}] (a) {$a$}; + \node[smodel, above left = of a, pin={[red!50!black]175:$0.3\theta$}] (ab) {$ab$}; + \node[smodel, above right = of a, pin={[red!50!black]175:$0.3\co{\theta}$}] (ac) {$ac$}; + \node[event, below = of ab] (b) {$b$}; + \node[event, below = of ac] (c) {$c$}; + \node[event, above right = of ab] (abc) {$abc$}; + \node[event, above left = of ab] (abC) {$\co{c}ab$}; + \node[event, above right = of ac] (aBc) {$\co{b}ac$}; + \node[indep, right = of ac] (bc) {$bc$}; + \node[tchoice, smodel, below right = of bc, pin={[red!50!black]175:$0.7$}] (A) {$\co{a}$}; + \node[event, above = of A] (Ac) {$\co{a}c$}; + \node[event, above right = of Ac] (Abc) {$\co{a}bc$}; + % ---- + \path[draw, rounded corners, fill=cyan, opacity=0.1] + (ab.west) -- + (ab.north west) -- + % + (abC.south west) -- + (abC.north west) -- + (abC.north) -- + % + (abc.north east) -- + (abc.east) -- + (abc.south east) -- + % + (ab.north east) -- + (ab.east) -- + (ab.south east) -- + % + (a.north east) -- + % + (E.north east) -- + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (b.south west) -- + % + (ab.west) + ; + % ---- + \path[draw, rounded corners, fill=yellow, opacity=0.1] + (ac.south west) -- + (ac.west) -- + (ac.north west) -- + % + (abc.south west) -- + (abc.west) -- + (abc.north west) -- + % + (aBc.north east) -- + (aBc.east) -- + (aBc.south east) -- + % + (ac.north east) -- + % + (c.east) -- + % + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (a.south west) -- + (a.west) -- + (a.north west) -- + (a.north) -- + % + (ac.south west) + ; + % ---- + \path[draw, rounded corners, fill=magenta, opacity=0.1] + % (A.north west) -- + % + (Ac.north west) -- + % + (Abc.north west) -- + (Abc.north) -- + (Abc.north east) -- + (Abc.south east) -- + % + % (Ac.north east) -- + % (Ac.east) -- + % + % (A.east) -- + (A.south east) -- + % + (E.south east) -- + (E.south) -- + (E.south west) -- + (E.west) -- + (E.north west) -- + % + (Ac.north west) + ; + \end{tikzpicture} + } +} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Classes of Events} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + \diagram + \end{center} + + \vfill + \begin{center} + \begin{tabular}{lr} + $\begin{aligned} + \probfact{0.3}{a} \\ + b \vee c & \leftarrow a + \end{aligned}$ + & + $\co{a} = \set{\neg a}, ab = \set{a, b}, ac = \set{a, c}$ + \end{tabular} + \end{center} + + \vfill + \begin{itemize} + \item Define \alert{equivalence classes} for all events, based on $\subseteq, \supseteq$ relations with the \textbf{stable models}. + \item This example shows $6$ out of $2^3 + 1$ classes. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilities for all Events} + %------------------------------------------------------------- + \vfill + \begin{center} + \diagram + \end{center} + \vfill + \footnotesize + \begin{enumerate} + \item Set \alert{weights} in the stable models (shaded nodes), using parameters when needed: $\mu\del{\co{a}} = 0.7; \mu\del{ab} = 0.3\theta; \mu\del{ac}=0.3\del{1 - \theta}$ + \item Assume that the stable models are \alert{disjoint events}. + \item Define \alert{weight of an event} as the sum of the weights of the related stable models. + \item Normalize weights to get a (probability) \alert{distribution}. + \end{enumerate} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilities for all Events} + %------------------------------------------------------------- + \vfill + % \begin{center} + % \diagram + % \end{center} + % \vfill + % \scriptsize + + \begin{equation*} + \begin{array}{clr|cc|cc} + & \stablecore{e} + & \# \class{e} + & \pw{\class{e}} + & \pw{e} + & \pr{E = e} + & \pr{E \in \class{e}} + \\ + \hline + % + & \inconsistent + & 37 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + \square + & \indepclass + & 9 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + {\color{magenta!20}\blacksquare } + & \co{a} + & 9 + & \frac{7}{10} + & \frac{7}{90} + & \frac{7}{207} + & \frac{7}{23} + \\[4pt] + % + {\color{cyan!20}\blacksquare } + & ab + & 3 + & \frac{3}{10}\theta + & \frac{1}{10}\theta + & \frac{1}{23}\alert{\theta} + & \frac{3}{23}\theta + \\[4pt] + % + {\color{yellow!20}\blacksquare } + & ac + & 3 + & \frac{3}{10}\co{\theta} + & \frac{1}{10}\co{\theta} + & \frac{1}{23}\alert{\co{\theta}} + & \frac{3}{23}\co{\theta} + \\[4pt] + % + & \co{a}, ab + & 0 + & \frac{7 + 3\theta}{10} + & 0 + & 0 + & 0 + \\[4pt] + % + & \co{a}, ac + & 0 + & \frac{7 + 3\co{\theta}}{10} + & 0 + & 0 + & 0 + % + \\[4pt] + % + {\color{green!20}\blacksquare } + & ab, ac + & 2 + & \frac{3}{10} + & \frac{3}{20} + & \frac{3}{46} + & \frac{3}{23} + \\[4pt] + % + {\color{gray!20}\blacksquare } + & \co{a}, ab, ac + & 1 + & 1 + & 1 + & \frac{10}{23} + & \frac{10}{23} + \\[4pt] + % + \hline + & + & 64 + & + & Z = \frac{23}{10} + & + %& \Sigma = 1 + \end{array} + \end{equation*} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Estimating the Parameters} + %------------------------------------------------------------- + A \alert{sample} can be used to estimate the parameters $\theta$, by minimizing + \begin{equation*} + \err{\theta} := \sum_{e\in\fml{E}} \del{\pr{E = e\given \Theta = \theta} - \pr{S = e}}^2.\label{eq:err.e.s} + \end{equation*} + where + \begin{itemize} + \item $\fml{E}$ is the set of all events, + \item $\pr{E\given \Theta}$ the \textbf{model+parameters} based distribution, + \item $\pr{S}$ is the \textbf{empiric} distribution from the given sample. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Behind Parameter Estimation} + %------------------------------------------------------------- + \vfill + So, we can derive a distribution $\pr{E\given \Theta = \hat{\theta}}$ from a program $P$ and a sample $S$. + \begin{itemize} + \item The sample defines an empiric distribution $\pr{S}$\ldots + \item \ldots that is used to estimate $\theta$ in $\pr{E\given \Theta}$\ldots + \item \ldots and \alert{score the program} $P$ w.r.t.\ that sample using, \emph{e.g.} the $\err{}$ function. + \end{itemize} + \vfill + +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Back to Inductive Logic Programming} + %------------------------------------------------------------- + \vfill + Recall the \emph{Learning Logic Programs from Examples} setting: + \begin{itemize} + \item Given \textbf{positive} and \textbf{negative} examples, and \textbf{background knowledge}\ldots + \item find a \textbf{program}\ldots + \begin{itemize} + \item \ldots using the facts and relations from the \textbf{BK}\ldots + \item \ldots such that \textbf{all the PE} and \textbf{none the NE} examples are entailed. + \end{itemize} + \end{itemize} + \vfill + \begin{quotation} + Given a sample of events, and a set of programs, \alert{the score} of those programs (w.r.t. the sample) \alert{can be used in evolutionary algorithms} while searching for better solutions. + \end{quotation} +\end{frame} +% +%=============================================================== +% +\section{In Conclusion} +% +%=============================================================== +% +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \vfill + \begin{center} + {\huge\bf In Conclusion} + \end{center} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + \begin{itemize} + \item \textbf{Machine Learning} has limitations. + \item As does \textbf{Inductive Logic Programming}. + \item But, distributions can be defined by \textbf{Stochastic Logic Programs}. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + Distributions can be defined by \textbf{Stochastic Logic Programs}. + + \vfill + Here we: + \begin{enumerate} + \item Look at the program's \textbf{stable models} and + \item Use them to partition the \textbf{events} and then + \item Using annotated probabilities, define: + \begin{enumerate} + \item a finite \textbf{measure}\ldots + \item that, normalized, is a \textbf{distribution} on all events. + \end{enumerate} + \end{enumerate} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + Distributions can be defined by \textbf{Stochastic Logic Programs}. + + \vfill + \begin{itemize} + \item These distributions might have some \textbf{parameters}, due to indeterminism in the program. + \item A \textbf{sample} can be used to estimate those parameters\ldots + \item \ldots and \alert{score} programs concurring to describe it. + \item This score a key ingredient in \textbf{evolutionary algorithms}. + \end{itemize} + + \vfill + \begin{quotation} + \ldots and a step towards the \alert{induction of stochastic logic programs} using \textbf{data} and \textbf{background knowledge}. + \end{quotation} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Future Work} + %------------------------------------------------------------- + \vfill + \begin{center} + Induction of Stochastic Logic (ASP) Programs. + \end{center} + \vfill + \begin{enumerate} + \item \textbf{Meta-programming:} formal rules for rule generation. + \item \textbf{Generation}, \textbf{Combination} and \textbf{Mutation} operators. + \item \textbf{Complexity.} + \item \textbf{Applications.} + \item \textbf{Profit.} + \end{enumerate} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\alert{\bf Thank You!}} + \vfill + Questions? + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{References} + \begin{itemize} + \item \href{https://arxiv.org/abs/1801.00631}{Gary Marcus, \emph{Deep Learning: A Critical Appraisal}, 2018}. + \item \href{https://arxiv.org/abs/1911.01547}{François Chollet, \emph{On the Measure of Intelligence}, 2019}. + \item \href{https://arxiv.org/abs/1801.00631}{Bengio \emph{et al.}, \emph{A Meta-Transfer Objective for Learning to Disentangle Causal Mechanisms}, 2019}. + \item \href{https://arxiv.org/abs/1801.00631}{Cropper \emph{et al.}, \emph{Turning 30: New Ideas in Inductive Logic Programming}, 2020}. + \item \href{https://doi.org/10.1201/9781003427421}{Fabrizio Riguzzi, \emph{Foundations of Probabilistic Logic Programming }, 2023}. + \end{itemize} + %------------------------------------------------------------- +\end{frame} +% +\end{document} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{TITLE} + %------------------------------------------------------------- +\end{frame} +% + + diff --git a/text/presentation_01/bits_goa/iris_plot.pdf b/text/presentation_01/bits_goa/iris_plot.pdf new file mode 100644 index 0000000..ec92c9b Binary files /dev/null and b/text/presentation_01/bits_goa/iris_plot.pdf differ diff --git a/text/presentation_01/cima_pdoutmat_2023-12-11/cima_pdoutmat_2023-12-11.pdf b/text/presentation_01/cima_pdoutmat_2023-12-11/cima_pdoutmat_2023-12-11.pdf new file mode 100644 index 0000000..80998e4 Binary files /dev/null and b/text/presentation_01/cima_pdoutmat_2023-12-11/cima_pdoutmat_2023-12-11.pdf differ diff --git a/text/presentation_01/cima_pdoutmat_2023-12-11/cima_pdoutmat_2023-12-11.tex b/text/presentation_01/cima_pdoutmat_2023-12-11/cima_pdoutmat_2023-12-11.tex new file mode 100644 index 0000000..4eccd7e --- /dev/null +++ b/text/presentation_01/cima_pdoutmat_2023-12-11/cima_pdoutmat_2023-12-11.tex @@ -0,0 +1,1203 @@ +% !TeX program=xelatex +\documentclass[bigger]{beamer} + +\useinnertheme{circles} +\usefonttheme[onlymath]{serif} +\usefonttheme{structurebold} +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{footline}[frame number] +\usepackage{xcolor} +\setbeamercolor{highlight block}{bg=gray} + +\usepackage{tikz} +\usetikzlibrary{ +automata,% +positioning,% +calc,% +patterns, +decorations,% +decorations.pathmorphing,% +arrows.meta, +shapes.misc +} +\tikzset{ + vert/.style={draw, circle, inner sep=2pt}, + event/.style={}, + smodel/.style={fill=gray!25}, + tchoice/.style={draw, circle}, + indep/.style={},%{draw, dashed}, + proptc/.style = {-latex, dashed}, + propsm/.style = {-latex, thick}, + doubt/.style = {gray} +} + +\usepackage{tkz-graph} +\newcommand{\qlr}[2]{\ensuremath{\begin{matrix}#1\cr\begin{aligned}\hline #2\end{aligned}\end{matrix}}} + +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[normalem]{ulem} % To strikeout +\usepackage{commath} +\usepackage{amssymb} +\usepackage[normalem]{ulem} +\usepackage[nice]{nicefrac} +\usepackage{stmaryrd} +\usepackage{acronym} +\usepackage{multicol} +\usepackage{cleveref} + +\usepackage{listings} + +\newcommand{\at}[1]{\ensuremath{\!\del{#1}}} +\newcommand{\class}[1]{\ensuremath{[{#1}]_{\sim}}} +\newcommand{\co}[1]{\ensuremath{\overline{#1}}} +\newcommand{\condsymb}[2]{\ensuremath{p_{#1|#2}}} +\newcommand{\cset}[2]{\ensuremath{\set{#1,~#2}}} +\newcommand{\deft}[1]{\textbf{#1}} +\newcommand{\emptyevent}{\ensuremath{\vartriangle}} +\newcommand{\ent}{\ensuremath{\lhd}} +\newcommand{\err}[1]{\ensuremath{\mathrm{err}\at{#1}}} +\newcommand{\fml}[1]{\ensuremath{{\cal #1}}} +\newcommand{\given}{\ensuremath{~\middle|~}} +\newcommand{\inconsistent}{\bot} +\newcommand{\indepclass}{\ensuremath{\Diamond}} +\newcommand{\isep}{~,~} +\newcommand{\langof}[1]{\ensuremath{\fml{L}\at{#1}}} +\newcommand{\larr}{\ensuremath{\leftarrow}} +\newcommand{\lclass}[1]{\ensuremath{\intoc{#1}}} +\newcommand{\lfrac}[2]{\ensuremath{{#1}/{#2}}} +\newcommand{\lrep}[1]{\ensuremath{\rep{}{#1}}} +\newcommand{\lset}[1]{\ensuremath{#1_{\ast}}} +\newcommand{\naf}{\ensuremath{\sim\!}} +\newcommand{\pr}[1]{\ensuremath{\mathrm{P}\at{#1}}} +\newcommand{\probfact}[2]{\ensuremath{#2:#1}} +\newcommand{\probrule}[3]{\probfact{#2}{#1} \leftarrow #3} +\newcommand{\pset}[1]{\ensuremath{\mathbb{P}\at{#1}}} +\newcommand{\pw}[1]{\ensuremath{\mu\at{#1}}} +\newcommand{\pwc}[1]{\ensuremath{\pwcfname\at{#1}}} +\newcommand{\pwcfname}{\ensuremath{\mu_{\textrm{TC}}}} +\newcommand{\q}[1]{\mathbf{#1}} +\newcommand{\rep}[2]{\ensuremath{\left\langle #1 \middle| #2 \right\rangle}} +\newcommand{\smclass}[1]{\ensuremath{\intcc{#1}}} +\newcommand{\stablecore}[1]{\ensuremath{\left\llbracket #1 \right\rrbracket}} +\newcommand{\tcgen}[1]{\ensuremath{\left<#1\right>}} +\newcommand{\uclass}[1]{\ensuremath{\intco{#1}}} +\newcommand{\urep}[1]{\ensuremath{\rep{#1}{}}} +\newcommand{\uset}[1]{\ensuremath{#1^{\ast}}} +\newcommand{\yset}[1]{\ensuremath{\left\langle #1 \right\rangle}} +%\newcommand{\tcgen}[1]{\ensuremath{\widehat{#1}}} + +\title{Stochastic Answer Set Programming} +\subtitle{A Research Program} +\author{Francisco Coelho} +\date{December 11, 2023} +\institute[\texttt{fc@uevora.pt}]{ +NOVA LINCS\\ +High Performance Computing Chair\\ +Departamento de Informática, Universidade de Évora +} +% +%=============================================================== +% +\begin{document} +% +\lstset{language=Prolog} +% +%=============================================================== +% +\begin{frame}[plain] + \titlepage + + \begin{center} + \footnotesize This is a join work with \textbf{Salvador Abreu}@DInf and \textbf{Bruno Dinis}@DMat. + \end{center} +\end{frame} +% +%=============================================================== +% +\section*{Motivation} +% +%=============================================================== +% +\begin{frame} + \frametitle{In Short} + + + \begin{itemize} + \item About \textbf{Machine Learning}: + \begin{itemize} + \item Vector or matrix based models lack ``structure''. + \item Large models don't \emph{explain} data. + \end{itemize} + \item About \textbf{Logic Programs}: + \begin{itemize} + \item Logic programs formalize knowledge. + \item Logic doesn't \emph{capture} uncertainty and is \emph{fragile} to noise. + \end{itemize} + \item \textbf{Probabilistic Logic Programs} extend formal knowledge with probabilities. + \begin{itemize} + \item How to propagate probabilities through rules? + \end{itemize} + \end{itemize} + \vfill + \begin{center} + \alert{\bf Goal:} Combine Logic and Statistics. + \end{center} +\end{frame} +% +%=============================================================== +% \begin{frame} +% %------------------------------------------------------------- +% %[fragile] +% %------------------------------------------------------------- +% \frametitle{Statistics and Machine Learning} +% %------------------------------------------------------------- +% \vfill +% \begin{itemize} +% \item \textbf{Data Analysis:} understand and summarize. +% \item \textbf{Model Building:} tools and techniques. +% \item \textbf{Model Evaluation:} performance. +% \item [] +% \item To calculate the accuracy/precision/recall of a model. +% \item To choose the right model for a problem. +% \item To tune the hyperparameters of a model. +% \end{itemize} +% \vfill +% \begin{center}\footnotesize +% Highlights of \texttt{Bard}'s (Google's LLM) reply to ``Explain what is the role of statistics in machine learning''. +% \end{center} +% \end{frame} +% +%=============================================================== +% +\section{Machine Learning} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\bf Machine Learning} + \end{center} + \vfill + \begin{itemize} + \item Standard Example --- Iris Classification + \item Assumptions of Machine Learning + \item Where Machine Learning Fails + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{The Standard Example --- Iris Classification} + %------------------------------------------------------------- + \small + \begin{center} + Learning Functions: \href{https://en.wikipedia.org/wiki/Iris_flower_data_set}{The famous Iris database} + \end{center} + \begin{columns} + \column{0.4\textwidth} + \begin{itemize}\setlength{\itemsep}{-0.5em} + \item[$x_1$] sepal length. + \item[$x_2$] sepal width. + \item[$x_3$] petal length. + \item[$x_4$] petal width. + \item[$y$] species (one of \emph{setosa}, \emph{versicolor}, \emph{virginica}). + \end{itemize} + \column{0.6\textwidth} + \begin{center} + \includegraphics[width=\textwidth]{iris_plot.pdf} + \end{center} + \end{columns} + \vfill + \begin{itemize} + \item A \emph{setosa} model: $ - 0.40 -0.65x_1 + 1.00x_2 > 0.00$. + \item A general \textbf{model template}: + $$ + f_\theta(\vec{x}) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3 + \theta_4 x_4> 0 + $$ + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Assumptions of Machine Learning} + %------------------------------------------------------------- + \begin{itemize} + \item Each instance is described in a \textbf{single row} by a \textbf{fixed set of features} + $$ + \begin{array}{cccc|c} + \mathbf{x_1} & \mathbf{x_2} & \ldots & \mathbf{x_n} & \mathbf{y} \\ + \hline + x_{11} & x_{21} & \ldots & x_{n1} & y_1 \\ + & & \vdots \\ + x_{1m} & x_{2m} & \ldots & x_{nm} & y_m \\ + \end{array} + .$$ + \item Instances are \textbf{independent} of one another, \textbf{given the model} + $$ + y = f_\theta(\vec{x}). + $$ + \item Parameters \textbf{minimize estimation error} \emph{e.g.} + $$ + \hat{\theta} = \arg\min_\theta \sum_i \norm{y_i - f_\theta(\vec{x_{i}})}. + $$ + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Failing Assumptions\hfill~1/2} + %------------------------------------------------------------- + \vfill + \begin{columns}[c] + \column{0.5\textwidth} + $$ + \begin{array}{ccc} + \text{student} & \text{course} & \text{grade} \\ + \hline + s_1 & c_1 & a \\ + s_2 & c_1 & c \\ + s_1 & c_2 & b \\ + s_2 & c_3 & b \\ + s_3 & c_2 & b \\ + s_4 & c_3 & b \\ + s_3 & c_4 & X \\ + s_4 & c_4 & Y \\ + \end{array} + $$ + \column{0.5\textwidth} + \emph{Infer $X \succ_g Y$.} + + \bigskip + ``\emph{Proof.}'' + + \bigskip + $s_1 \succ_s s_2$ (rows 1 \& 2)\\ so $c_2 \succ_c c_3$ (3 \& 4). + + \bigskip + Then $s_3 \succ_s s_4$ (5 \& 6)\\ therefore $X \succ_g Y\qed$. + \end{columns} + \vfill + \begin{itemize} + \item Instances are not independent. + \item Small dataset, so \emph{no statistics}. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Failing Assumptions\hfill~2/2} + %------------------------------------------------------------- + \footnotesize + \begin{center} + \textbf{Prompt:} Given \texttt{f(machine) = e}, \texttt{f(learning) = g} and \texttt{f(algorithm) = m}, what is the value of \texttt{f(ksadbf)}? + \end{center} + + \vfill + \begin{columns}[t] + \scriptsize + \column{0.35\textwidth} + $$ + \begin{array}{r|l} + \textbf{input} & \textbf{output} \\ + \hline + machine & e \\ + learning & g \\ + algorithm & m \\ + ksadbf & ? + \end{array} + $$ + + \bigskip + \textbf{Bard:} \tt f(ksadbf) = 11. + + We can see that the value of f(x) is simply the first letter of x minus 96. + + \column{0.65\textwidth} + + \textbf{ChatGPT:} \tt The information provided seems to define a function $f$ where certain inputs are associated with specific outputs. Based on the given information: + \begin{itemize} + \item $f(\text{machine}) = e$ + \item $f(\text{learning}) = g$ + \item $f(\text{algorithm}) = m$ + \end{itemize} + However, there is no information given about \( f(\text{ksadbf}) \). Without additional information or a specific rule that determines the output for \( f(\text{ksadbf}) \), \emph{it is not possible to determine its value}. + % + If there is a pattern or rule for how the outputs are assigned based on the inputs, you would need to provide that information for me to help determine the value of \( f(\text{ksadbf}) \). + \end{columns} + + \vfill + \begin{center} + No help from state-of-the-art Natural Language Processing or LLMs. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Where Machine Learning Fails} + %------------------------------------------------------------- + \begin{itemize} + \item No \emph{interpretability}: large models ($\dim \theta \sim \text{millions}$) are \alert{not understandable by humans}. + \item Need for \emph{large number of training} examples. + \item Unfit for \emph{multiple relations}, \emph{intersample dependencies} and \emph{variable features}: The \textit{Students, Courses and Results} and \emph{Last Letter} examples. + \item Poor \emph{generalization}: A model trained in the iris dataset is useless in any other domain. + \item \alert{No use of background knowledge}. + \end{itemize} +\end{frame} +% +%=============================================================== +% +\section{Logic Programming} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\bf Logic Programming} + \end{center} + \vfill + \begin{itemize} + \item An Example of Logic Programming. + \item Inductive Logic Programming. + \item Where ILP Fails. + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + [fragile] + %------------------------------------------------------------- + \frametitle{An Example of Logic Programming} + %------------------------------------------------------------- + \begin{columns}[c] + \column{0.4\textwidth} + \begin{tikzpicture}[>=Latex] + \node[vert] (v6) {6}; + \node[vert, above left = of v6] (v3) {3}; + \node[vert, above right = of v6] (v5) {5}; + \node[vert, below left = of v6] (v1) {1}; + \node[vert, below right = of v6] (v2) {2}; + \node[vert, below right = of v1] (v4) {4}; + \draw[->] (v6) to (v3); + \draw[<->] (v6) to (v5); + \draw[<->] (v6) to (v2); + \draw[<->] (v3) to (v5); + \draw[<->] (v3) to (v1); + \draw[->] (v3) to[bend right, out=225, in =180,relative=false] (v4); + \draw[->] (v1) to (v2); + \draw[<->] (v1) to (v4); + \draw[->] (v2) to (v5); + \draw[<->] (v2) to (v4); + \draw[->] (v5) to[bend left, out=-45, in=0,relative=false] (v4); + \end{tikzpicture} + \column{0.6\textwidth} + \scriptsize + \begin{lstlisting} +node(1..6). + +edge(1,2). edge(2,4). edge(3,1). +edge(4,1). edge(5,3). edge(6,2). +edge(1,3). edge(2,5). edge(3,4). +edge(4,2). edge(5,4). edge(6,3). +edge(1,4). edge(2,6). edge(3,5). +edge(5,6). edge(6,5). + +col(r). col(b). col(g). + +1 { color(X,C) : col(C) } 1 :- node(X). +:- edge(X,Y), color(X,C), color(Y,C). + +#show color/2. + \end{lstlisting} + \end{columns} + \vfill + \scriptsize + \begin{lstlisting} +color(2,b) color(1,g) color(4,r) color(3,b) color(5,g) color(6,r) +color(1,r) color(2,b) color(4,g) color(3,b) color(5,r) color(6,g) +color(1,r) color(2,g) color(4,b) color(3,g) color(5,r) color(6,b) +color(1,b) color(2,g) color(4,r) color(3,g) color(5,b) color(6,r) +color(2,r) color(1,g) color(4,b) color(3,r) color(5,g) color(6,b) +color(2,r) color(1,b) color(4,g) color(3,r) color(5,b) color(6,g) + \end{lstlisting} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Inductive Logic Programming} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + Learning Logic Programs from Examples. + \end{center} + + \vfill + \alert{Generate rules} that\ldots + \begin{itemize} + \item use \textbf{background knowledge} + $$ + \begin{aligned} + & parent(john,mary), & & parent(david,steve), \\ + & parent(kathy,mary), & & female(kathy), \\ + & male(john), & & male(david). + \end{aligned} + $$ + \item to entail all the \textbf{positive examples}, $father(john,mary), father(david,steve)$, + \item but none of the \textbf{negative examples}. $father(kathy,mary), father(john,steve)$, + + \end{itemize} + + \vfill + A \textbf{solution} is $$father(X,Y) \leftarrow parent(X,Y) \wedge male(X).$$ + +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Where Logic Programming Fails} + %------------------------------------------------------------- + \begin{center} + Meanwhile, in the \textbf{real world}, samples are \emph{incomplete} and come with \emph{noise}. + \end{center} + \vfill + \textbf{Logic inference is \alert{fragile}}: a mistake in the transcription of a fact is dramatic to the consequences: + \begin{itemize} + \item $parent(david,mary)$. + \item $parent(jonh,mary)$. + \end{itemize} + \vfill + \begin{center} + The statistic essence of machine learning provides \alert{robustness}. + \end{center} +\end{frame} +% +%=============================================================== +% +\section{Probabilistic Logic Programming} +% +%=============================================================== +% +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \vfill + \begin{center} + {\huge\bf Probabilistic Logic Programming} + \end{center} + \vfill + \begin{itemize} + \item Define distributions from logic programs. + \item Stochastic ASP: Specifying distributions. + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilistic Logic Programs (PLPs)} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + Logic programs \textbf{annotated} with probabilities. + \end{center} + + \vfill + \begin{columns}[c] + + \column{0.4\textwidth} + \begin{tikzpicture}[>=Latex] + \node[draw, rounded rectangle] (A) {$Alarm$}; + \node[draw, rounded rectangle, below = of A] (J) {$Johncalls$}; + \draw[->] (A) to (J); + \end{tikzpicture} + + \column{0.6\textwidth} + $ + \begin{aligned} + alarm:0.00251, & \\ + johncalls:0.9 & \leftarrow alarm, \\ + johncalls:0.05 & \leftarrow \neg alarm + \end{aligned} + $ + \end{columns} + + \vfill + \begin{itemize} + \item \alert{$alarm:0.00251$} is $alarm \vee \neg alarm$ plus $P(Alarm = true) = 0.00251$. + \item \alert{$johncalls:0.9 \leftarrow alarm$} is + $$P\del{Johncalls = true \middle| Alarm = true} = 0.9$$ + \end{itemize} + + \vfill + \begin{center} + Any bayesian network can be represented by a PLP. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Distributions from Logic Programs} + %------------------------------------------------------------- + \vfill + The program + $$ + \begin{aligned} + alarm:0.00251, & \\ + johncalls:0.9 & \leftarrow alarm, \\ + johncalls:0.05 & \leftarrow \neg alarm + \end{aligned} + $$ + entails four possible models (or worlds): + $$ + \begin{array}{r|r} + \text{model} & \text{probability} \\ + \hline + alarm, johncalls & 0.002259 \\ + alarm, \neg johncalls & 0.000251 \\ + \neg alarm, johncalls & 0.049874 \\ + \neg alarm, \neg johncalls & 0.947616 \\ + \end{array} + $$ + \begin{itemize} + \item \alert{\textbf{Models}} are special sets of \emph{literals} \textbf{entailed} from the program. + \item Probabilities \emph{propagate} from facts, through rules. + \end{itemize} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{There's a Problem\ldots} + %------------------------------------------------------------- + \vfill + The program + $$ + \begin{aligned} + alarm:0.00251, & \\ + johncalls \vee marycalls & \leftarrow alarm + \end{aligned} + $$ + entails three \alert{stable} (\emph{i.e.}\ minimal) models + $$ + \begin{array}{r|l} + \text{model} & \text{probability} \\ + \hline + alarm, johncalls & x \\ + alarm, marycalls & y \\ + \neg alarm & 0.99749 + \end{array} + $$ + but \textbf{no single way to set $x,y$}. + \vfill + \begin{center} + Some \emph{Probabilistic Logic Programs} define more than one joint distribution. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{\ldots and an Oportunity} + %------------------------------------------------------------- + \begin{center} + Some \emph{PLP}s define more than one joint distribution. + \end{center} + \vfill + \begin{itemize} + \item There is \textbf{no single probability assignment} from the facts stable models: $x,y \in \intcc{0,1}$. + \item But any assignment is bound by Kolmogorov's axioms, and \textbf{forms equations} such as: + $$x + y = P\del{alarm}.$$ + \item Existing \textbf{data can be used to estimate the unknowns} in those equations. + \end{itemize} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Stable Models, Events and Probabilities} + %------------------------------------------------------------- + \vfill + \begin{center} + What are we talking about? + \end{center} + \vfill + \begin{itemize} + \item A logic program has \textbf{atoms} (and \textbf{literals}) and \textbf{rules}: + $$ + \begin{aligned} + &male(john), \neg parent(kathy,mary), \\ + &father(X, Y) \leftarrow parent(X, Y) \wedge male(X). + \end{aligned} + $$ + \item A \alert{\textbf{stable model}} is a \textbf{minimal} model that contains: + \begin{itemize} + \item program's \emph{facts}: $parent(john,mary),~male(john)$. + \item consequences, by the \emph{rules}: $father(john,mary)$. + \end{itemize} + \item Some programs have more than one model: + \begin{tabular}{c|c} + \textbf{Logic Program} & \textbf{Stable Models} \\ + \hline + $a \vee \neg a, b \vee c \leftarrow a$ + & + $\set{\neg a}, \set{a, b}, \set{a, c}$ + \end{tabular} + \end{itemize} + \vfill + \begin{center} + How to propagate probability from annotated facts to other \emph{events}? + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Logic Programs and Probabilities} + %------------------------------------------------------------- + % \vfill + % \begin{center} + % The \textbf{space of events}, $\Omega$, is the set of all sets of literals. + % \end{center} + \vfill + \begin{itemize} + \item Consider the literals of a logic program $$L = \set{a_1, \ldots a_n, \neg a_1, \ldots \neg a_n}.$$ + \item Any model of that program is a (consistent) subset of $L$. + \item Let $\Omega = \mathbf{P}\del{L}$, \emph{i.e.} an \alert{event} $e$ is a subset of $L$, $e \subseteq L$. + \begin{itemize} + \item Setting a probability for some events seems straightforward: $P\del{\neg alarm} = 0.997483558$. + \item For others, not so much: + \begin{itemize} + \item $P\del{alarm, johncalls}$, $P\del{johncalls, marycalls, alarm}$, $P\del{marycalls}$? + \item $P\del{alarm, \neg alarm}$, $P\del{\neg marycalls}$? + \end{itemize} + \end{itemize} + \end{itemize} + \vfill + \begin{center} + How to \alert{propagate} probability from \emph{facts} to \emph{consequences} and other \emph{events}? + \end{center} +\end{frame} +% +\newcommand{\diagram}{ + \resizebox{!}{24ex}{ + \begin{tikzpicture}%[scale=0.6, every node/.style={scale=0.6}] + \node[event] (E) {$\emptyevent$}; + \node[tchoice, above left = of E, pin={[red!50!black]175:$0.3$}] (a) {$a$}; + \node[smodel, above left = of a, pin={[red!50!black]175:$0.3\theta$}] (ab) {$ab$}; + \node[smodel, above right = of a, pin={[red!50!black]175:$0.3\co{\theta}$}] (ac) {$ac$}; + \node[event, below = of ab] (b) {$b$}; + \node[event, below = of ac] (c) {$c$}; + \node[event, above right = of ab] (abc) {$abc$}; + \node[event, above left = of ab] (abC) {$\co{c}ab$}; + \node[event, above right = of ac] (aBc) {$\co{b}ac$}; + \node[indep, right = of ac] (bc) {$bc$}; + \node[tchoice, smodel, below right = of bc, pin={[red!50!black]175:$0.7$}] (A) {$\co{a}$}; + \node[event, above = of A] (Ac) {$\co{a}c$}; + \node[event, above right = of Ac] (Abc) {$\co{a}bc$}; + % ---- + \path[draw, rounded corners, fill=cyan, opacity=0.1] + (ab.west) -- + (ab.north west) -- + % + (abC.south west) -- + (abC.north west) -- + (abC.north) -- + % + (abc.north east) -- + (abc.east) -- + (abc.south east) -- + % + (ab.north east) -- + (ab.east) -- + (ab.south east) -- + % + (a.north east) -- + % + (E.north east) -- + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (b.south west) -- + % + (ab.west) + ; + % ---- + \path[draw, rounded corners, fill=yellow, opacity=0.1] + (ac.south west) -- + (ac.west) -- + (ac.north west) -- + % + (abc.south west) -- + (abc.west) -- + (abc.north west) -- + % + (aBc.north east) -- + (aBc.east) -- + (aBc.south east) -- + % + (ac.north east) -- + % + (c.east) -- + % + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (a.south west) -- + (a.west) -- + (a.north west) -- + (a.north) -- + % + (ac.south west) + ; + % ---- + \path[draw, rounded corners, fill=magenta, opacity=0.1] + % (A.north west) -- + % + (Ac.north west) -- + % + (Abc.north west) -- + (Abc.north) -- + (Abc.north east) -- + (Abc.south east) -- + % + % (Ac.north east) -- + % (Ac.east) -- + % + % (A.east) -- + (A.south east) -- + % + (E.south east) -- + (E.south) -- + (E.south west) -- + (E.west) -- + (E.north west) -- + % + (Ac.north west) + ; + \end{tikzpicture} + } +} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Classes of Events} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + \diagram + \end{center} + + \vfill + \begin{center} + \begin{tabular}{lr} + $\begin{aligned} + \probfact{0.3}{a} \\ + b \vee c & \leftarrow a + \end{aligned}$ + & + $\co{a} = \set{\neg a}, ab = \set{a, b}, ac = \set{a, c}$ + \end{tabular} + \end{center} + + \vfill + \begin{itemize} + \item Define \alert{equivalence classes} for all events, based on $\subseteq, \supseteq$ relations with the \textbf{stable models}. + \item This example shows $6$ out of $2^3 + 1$ classes. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilities for all Events} + %------------------------------------------------------------- + \vfill + \begin{center} + \diagram + \end{center} + \vfill + \footnotesize + \begin{enumerate} + \item Set \alert{weights} in the stable models (shaded nodes), using parameters when needed: $\mu\del{\co{a}} = 0.7; \mu\del{ab} = 0.3\theta; \mu\del{ac}=0.3\del{1 - \theta}$ + \item Assume that the stable models are \alert{disjoint events}. + \item Define \alert{weight of an event} as the sum of the weights of the related stable models. + \item Normalize weights to get a (probability) \alert{distribution}. + \end{enumerate} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilities for all Events} + %------------------------------------------------------------- + \vfill + % \begin{center} + % \diagram + % \end{center} + % \vfill + % \scriptsize + + \begin{equation*} + \begin{array}{clr|cc|cc} + & \stablecore{e} + & \# \class{e} + & \pw{\class{e}} + & \pw{e} + & \pr{E = e} + & \pr{E \in \class{e}} + \\ + \hline + % + & \inconsistent + & 37 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + \square + & \indepclass + & 9 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + {\color{magenta!20}\blacksquare } + & \co{a} + & 9 + & \frac{7}{10} + & \frac{7}{90} + & \frac{7}{207} + & \frac{7}{23} + \\[4pt] + % + {\color{cyan!20}\blacksquare } + & ab + & 3 + & \frac{3}{10}\theta + & \frac{1}{10}\theta + & \frac{1}{23}\alert{\theta} + & \frac{3}{23}\theta + \\[4pt] + % + {\color{yellow!20}\blacksquare } + & ac + & 3 + & \frac{3}{10}\co{\theta} + & \frac{1}{10}\co{\theta} + & \frac{1}{23}\alert{\co{\theta}} + & \frac{3}{23}\co{\theta} + \\[4pt] + % + & \co{a}, ab + & 0 + & \frac{7 + 3\theta}{10} + & 0 + & 0 + & 0 + \\[4pt] + % + & \co{a}, ac + & 0 + & \frac{7 + 3\co{\theta}}{10} + & 0 + & 0 + & 0 + % + \\[4pt] + % + {\color{green!20}\blacksquare } + & ab, ac + & 2 + & \frac{3}{10} + & \frac{3}{20} + & \frac{3}{46} + & \frac{3}{23} + \\[4pt] + % + {\color{gray!20}\blacksquare } + & \co{a}, ab, ac + & 1 + & 1 + & 1 + & \frac{10}{23} + & \frac{10}{23} + \\[4pt] + % + \hline + & + & 64 + & + & Z = \frac{23}{10} + & + %& \Sigma = 1 + \end{array} + \end{equation*} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Estimating the Parameters} + %------------------------------------------------------------- + A \alert{sample} can be used to estimate the parameters $\theta$, by minimizing + \begin{equation*} + \err{\theta} := \sum_{e\in\fml{E}} \del{\pr{E = e\given \Theta = \theta} - \pr{S = e}}^2.\label{eq:err.e.s} + \end{equation*} + where + \begin{itemize} + \item $\fml{E}$ is the set of all events, + \item $\pr{E\given \Theta}$ the \textbf{model+parameters} based distribution, + \item $\pr{S}$ is the \textbf{empiric} distribution from the given sample. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Behind Parameter Estimation} + %------------------------------------------------------------- + \vfill + So, we can derive a distribution $\pr{E\given \Theta = \hat{\theta}}$ from a program $P$ and a sample $S$. + \begin{itemize} + \item The sample defines an empiric distribution $\pr{S}$\ldots + \item \ldots that is used to estimate $\theta$ in $\pr{E\given \Theta}$\ldots + \item \ldots and \alert{score the program} $P$ w.r.t.\ that sample using, \emph{e.g.} the $\err{}$ function. + \end{itemize} + \vfill + +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Back to Inductive Logic Programming} + %------------------------------------------------------------- + \vfill + Recall the \emph{Learning Logic Programs from Examples} setting: + \begin{itemize} + \item Given \textbf{positive} and \textbf{negative} examples, and \textbf{background knowledge}\ldots + \item find a \textbf{program}\ldots + \begin{itemize} + \item \ldots using the facts and relations from the \textbf{BK}\ldots + \item \ldots such that \textbf{all the PE} and \textbf{none the NE} examples are entailed. + \end{itemize} + \end{itemize} + \vfill + \begin{quotation} + Given a sample of events, and a set of programs, \alert{the score} of those programs (w.r.t. the sample) \alert{can be used in evolutionary algorithms} while searching for better solutions. + \end{quotation} +\end{frame} +% +%=============================================================== +% +\section{In Conclusion} +% +%=============================================================== +% +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \vfill + \begin{center} + {\huge\bf In Conclusion} + \end{center} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + \begin{itemize} + \item \textbf{Machine Learning} has limitations. + \item As does \textbf{Inductive Logic Programming}. + \item But, distributions can be defined by \textbf{Stochastic Logic Programs}. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + Distributions can be defined by \textbf{Stochastic Logic Programs}. Here we: + \begin{enumerate} + \item Look at the program's \textbf{stable models} and + \item Use them to partition the \textbf{events} and then + \item Using annotated probabilities, define: + \begin{enumerate} + \item a finite \textbf{measure}\ldots + \item that, normalized, is a \textbf{distribution} on all events. + \end{enumerate} + \end{enumerate} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + Distributions can be defined by \textbf{Stochastic Logic Programs}. + \begin{itemize} + \item These distributions might have some \textbf{parameters}, due to indeterminism in the program. + \item A \textbf{sample} can be used to estimate those parameters\ldots + \item \ldots and \textbf{score} programs concurring to describe it. + \item This score a key ingredient in \textbf{evolutionary algorithms}. + \end{itemize} + \begin{quotation} + \ldots and a step towards the \alert{induction of stochastic logic programs} using \textbf{data} and \textbf{background knowledge}. + \end{quotation} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Future Work} + %------------------------------------------------------------- + \vfill + \begin{center} + Induction of Stochastic Logic (ASP) Programs. + \end{center} + \vfill + \begin{enumerate} + \item \textbf{Meta-programming:} formal rules for rule generation. + \item \textbf{Generation}, \textbf{Combination} and \textbf{Mutation} operators. + \item \textbf{Complexity.} + \item \textbf{Applications.} + \item \textbf{Profit.} + \end{enumerate} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\alert{\bf Thank You!}} + \vfill + Questions? + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{References} + \begin{itemize} + \item \href{https://arxiv.org/abs/1801.00631}{Gary Marcus, \emph{Deep Learning: A Critical Appraisal}, 2018}. + \item \href{https://arxiv.org/abs/1911.01547}{François Chollet, \emph{On the Measure of Intelligence}, 2019}. + \item \href{https://arxiv.org/abs/1801.00631}{Bengio \emph{et al.}, \emph{A Meta-Transfer Objective for Learning to Disentangle Causal Mechanisms}, 2019}. + \item \href{https://arxiv.org/abs/1801.00631}{Cropper \emph{et al.}, \emph{Turning 30: New Ideas in Inductive Logic Programming}, 2020}. + \item \href{https://doi.org/10.1201/9781003427421}{Fabrizio Riguzzi, \emph{Foundations of Probabilistic Logic Programming }, 2023}. + \end{itemize} + %------------------------------------------------------------- +\end{frame} +% +\end{document} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{TITLE} + %------------------------------------------------------------- +\end{frame} +% + + diff --git a/text/presentation_01/cima_pdoutmat_2023-12-11/iris_plot.pdf b/text/presentation_01/cima_pdoutmat_2023-12-11/iris_plot.pdf new file mode 100644 index 0000000..ec92c9b Binary files /dev/null and b/text/presentation_01/cima_pdoutmat_2023-12-11/iris_plot.pdf differ diff --git a/text/presentation_01/cima_pdoutmat_2023-12-11/iris_plot.svg b/text/presentation_01/cima_pdoutmat_2023-12-11/iris_plot.svg new file mode 100644 index 0000000..b4f9bec --- /dev/null +++ b/text/presentation_01/cima_pdoutmat_2023-12-11/iris_plot.svg @@ -0,0 +1,2295 @@ + + + + + + + + + + + + SepalLength + + + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5.9,3.0 + + + + + + + + + + + + + + 6.2,3.4 + + + + + + + + + + + + + + 6.5,3.0 + + + + + + + + + + + + + + 6.3,2.5 + + + + + + + + + + + + + + 6.7,3.0 + + + + + + + + + + + + + + 6.7,3.3 + + + + + + + + + + + + + + 6.8,3.2 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 6.9,3.1 + + + + + + + + + + + + + + 6.7,3.1 + + + + + + + + + + + + + + 6.9,3.1 + + + + + + + + + + + + + + 6.0,3.0 + + + + + + + + + + + + + + 6.4,3.1 + + + + + + + + + + + + + + 6.3,3.4 + + + + + + + + + + + + + + 7.7,3.0 + + + + + + + + + + + + + + 6.1,2.6 + + + + + + + + + + + + + + 6.3,2.8 + + + + + + + + + + + + + + 6.4,2.8 + + + + + + + + + + + + + + 7.9,3.8 + + + + + + + + + + + + + + 7.4,2.8 + + + + + + + + + + + + + + 7.2,3.0 + + + + + + + + + + + + + + 6.4,2.8 + + + + + + + + + + + + + + 6.1,3.0 + + + + + + + + + + + + + + 6.2,2.8 + + + + + + + + + + + + + + 7.2,3.2 + + + + + + + + + + + + + + 6.7,3.3 + + + + + + + + + + + + + + 6.3,2.7 + + + + + + + + + + + + + + 7.7,2.8 + + + + + + + + + + + + + + 5.6,2.8 + + + + + + + + + + + + + + 6.9,3.2 + + + + + + + + + + + + + + 6.0,2.2 + + + + + + + + + + + + + + 7.7,2.6 + + + + + + + + + + + + + + 7.7,3.8 + + + + + + + + + + + + + + 6.5,3.0 + + + + + + + + + + + + + + 6.4,3.2 + + + + + + + + + + + + + + 5.8,2.8 + + + + + + + + + + + + + + 5.7,2.5 + + + + + + + + + + + + + + 6.8,3.0 + + + + + + + + + + + + + + 6.4,2.7 + + + + + + + + + + + + + + 6.5,3.2 + + + + + + + + + + + + + + 7.2,3.6 + + + + + + + + + + + + + + 6.7,2.5 + + + + + + + + + + + + + + 7.3,2.9 + + + + + + + + + + + + + + 4.9,2.5 + + + + + + + + + + + + + + 7.6,3.0 + + + + + + + + + + + + + + 6.5,3.0 + + + + + + + + + + + + + + 6.3,2.9 + + + + + + + + + + + + + + 7.1,3.0 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 6.3,3.3 + + + + + + + + + + + + + + 5.7,2.8 + + + + + + + + + + + + + + 5.1,2.5 + + + + + + + + + + + + + + 6.2,2.9 + + + + + + + + + + + + + + 5.7,2.9 + + + + + + + + + + + + + + 5.7,3.0 + + + + + + + + + + + + + + 5.6,2.7 + + + + + + + + + + + + + + 5.0,2.3 + + + + + + + + + + + + + + 5.8,2.6 + + + + + + + + + + + + + + 6.1,3.0 + + + + + + + + + + + + + + 5.5,2.6 + + + + + + + + + + + + + + 5.5,2.5 + + + + + + + + + + + + + + 5.6,3.0 + + + + + + + + + + + + + + 6.3,2.3 + + + + + + + + + + + + + + 6.7,3.1 + + + + + + + + + + + + + + 6.0,3.4 + + + + + + + + + + + + + + 5.4,3.0 + + + + + + + + + + + + + + 6.0,2.7 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 5.5,2.4 + + + + + + + + + + + + + + 5.5,2.4 + + + + + + + + + + + + + + 5.7,2.6 + + + + + + + + + + + + + + 6.0,2.9 + + + + + + + + + + + + + + 6.7,3.0 + + + + + + + + + + + + + + 6.8,2.8 + + + + + + + + + + + + + + 6.6,3.0 + + + + + + + + + + + + + + 6.4,2.9 + + + + + + + + + + + + + + 6.1,2.8 + + + + + + + + + + + + + + 6.3,2.5 + + + + + + + + + + + + + + 6.1,2.8 + + + + + + + + + + + + + + 5.9,3.2 + + + + + + + + + + + + + + 5.6,2.5 + + + + + + + + + + + + + + 6.2,2.2 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 5.6,3.0 + + + + + + + + + + + + + + 6.7,3.1 + + + + + + + + + + + + + + 5.6,2.9 + + + + + + + + + + + + + + 6.1,2.9 + + + + + + + + + + + + + + 6.0,2.2 + + + + + + + + + + + + + + 5.9,3.0 + + + + + + + + + + + + + + 5.0,2.0 + + + + + + + + + + + + + + 5.2,2.7 + + + + + + + + + + + + + + 6.6,2.9 + + + + + + + + + + + + + + 4.9,2.4 + + + + + + + + + + + + + + 6.3,3.3 + + + + + + + + + + + + + + 5.7,2.8 + + + + + + + + + + + + + + 6.5,2.8 + + + + + + + + + + + + + + 5.5,2.3 + + + + + + + + + + + + + + 6.9,3.1 + + + + + + + + + + + + + + 6.4,3.2 + + + + + + + + + + + + + + 7.0,3.2 + + + + + + + + + + + + + + 5.0,3.3 + + + + + + + + + + + + + + 5.3,3.7 + + + + + + + + + + + + + + 4.6,3.2 + + + + + + + + + + + + + + 5.1,3.8 + + + + + + + + + + + + + + 4.8,3.0 + + + + + + + + + + + + + + 5.1,3.8 + + + + + + + + + + + + + + 5.0,3.5 + + + + + + + + + + + + + + 4.4,3.2 + + + + + + + + + + + + + + 4.5,2.3 + + + + + + + + + + + + + + 5.0,3.5 + + + + + + + + + + + + + + 5.1,3.4 + + + + + + + + + + + + + + 4.4,3.0 + + + + + + + + + + + + + + 4.9,3.6 + + + + + + + + + + + + + + 5.5,3.5 + + + + + + + + + + + + + + 5.0,3.2 + + + + + + + + + + + + + + 4.9,3.1 + + + + + + + + + + + + + + 5.5,4.2 + + + + + + + + + + + + + + 5.2,4.1 + + + + + + + + + + + + + + 5.4,3.4 + + + + + + + + + + + + + + 4.8,3.1 + + + + + + + + + + + + + + 4.7,3.2 + + + + + + + + + + + + + + 5.2,3.4 + + + + + + + + + + + + + + 5.2,3.5 + + + + + + + + + + + + + + 5.0,3.4 + + + + + + + + + + + + + + 5.0,3.0 + + + + + + + + + + + + + + 4.8,3.4 + + + + + + + + + + + + + + 5.1,3.3 + + + + + + + + + + + + + + 4.6,3.6 + + + + + + + + + + + + + + 5.1,3.7 + + + + + + + + + + + + + + 5.4,3.4 + + + + + + + + + + + + + + 5.1,3.8 + + + + + + + + + + + + + + 5.7,3.8 + + + + + + + + + + + + + + 5.1,3.5 + + + + + + + + + + + + + + 5.4,3.9 + + + + + + + + + + + + + + 5.7,4.4 + + + + + + + + + + + + + + 5.8,4.0 + + + + + + + + + + + + + + 4.3,3.0 + + + + + + + + + + + + + + 4.8,3.0 + + + + + + + + + + + + + + 4.8,3.4 + + + + + + + + + + + + + + 5.4,3.7 + + + + + + + + + + + + + + 4.9,3.1 + + + + + + + + + + + + + + 4.4,2.9 + + + + + + + + + + + + + + 5.0,3.4 + + + + + + + + + + + + + + 4.6,3.4 + + + + + + + + + + + + + + 5.4,3.9 + + + + + + + + + + + + + + 5.0,3.6 + + + + + + + + + + + + + + 4.6,3.1 + + + + + + + + + + + + + + 4.7,3.2 + + + + + + + + + + + + + + 4.9,3.0 + + + + + + + + + + + + + + 5.1,3.5 + + + + + + + + + + + setosa + + + + + versicolor + + + + + virginica + + + + + + + + + + + + + + + + + + Iris + + + + + + + + + + 2.0 + + + + + 2.5 + + + + + 3.0 + + + + + 3.5 + + + + + 4.0 + + + + + 4.5 + + + + + + + SepalWidth + + + + + + + + + + diff --git a/text/presentation_01/mead/iris_plot.pdf b/text/presentation_01/mead/iris_plot.pdf new file mode 100644 index 0000000..ec92c9b Binary files /dev/null and b/text/presentation_01/mead/iris_plot.pdf differ diff --git a/text/presentation_01/mead/iris_plot.svg b/text/presentation_01/mead/iris_plot.svg new file mode 100644 index 0000000..b4f9bec --- /dev/null +++ b/text/presentation_01/mead/iris_plot.svg @@ -0,0 +1,2295 @@ + + + + + + + + + + + + SepalLength + + + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5.9,3.0 + + + + + + + + + + + + + + 6.2,3.4 + + + + + + + + + + + + + + 6.5,3.0 + + + + + + + + + + + + + + 6.3,2.5 + + + + + + + + + + + + + + 6.7,3.0 + + + + + + + + + + + + + + 6.7,3.3 + + + + + + + + + + + + + + 6.8,3.2 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 6.9,3.1 + + + + + + + + + + + + + + 6.7,3.1 + + + + + + + + + + + + + + 6.9,3.1 + + + + + + + + + + + + + + 6.0,3.0 + + + + + + + + + + + + + + 6.4,3.1 + + + + + + + + + + + + + + 6.3,3.4 + + + + + + + + + + + + + + 7.7,3.0 + + + + + + + + + + + + + + 6.1,2.6 + + + + + + + + + + + + + + 6.3,2.8 + + + + + + + + + + + + + + 6.4,2.8 + + + + + + + + + + + + + + 7.9,3.8 + + + + + + + + + + + + + + 7.4,2.8 + + + + + + + + + + + + + + 7.2,3.0 + + + + + + + + + + + + + + 6.4,2.8 + + + + + + + + + + + + + + 6.1,3.0 + + + + + + + + + + + + + + 6.2,2.8 + + + + + + + + + + + + + + 7.2,3.2 + + + + + + + + + + + + + + 6.7,3.3 + + + + + + + + + + + + + + 6.3,2.7 + + + + + + + + + + + + + + 7.7,2.8 + + + + + + + + + + + + + + 5.6,2.8 + + + + + + + + + + + + + + 6.9,3.2 + + + + + + + + + + + + + + 6.0,2.2 + + + + + + + + + + + + + + 7.7,2.6 + + + + + + + + + + + + + + 7.7,3.8 + + + + + + + + + + + + + + 6.5,3.0 + + + + + + + + + + + + + + 6.4,3.2 + + + + + + + + + + + + + + 5.8,2.8 + + + + + + + + + + + + + + 5.7,2.5 + + + + + + + + + + + + + + 6.8,3.0 + + + + + + + + + + + + + + 6.4,2.7 + + + + + + + + + + + + + + 6.5,3.2 + + + + + + + + + + + + + + 7.2,3.6 + + + + + + + + + + + + + + 6.7,2.5 + + + + + + + + + + + + + + 7.3,2.9 + + + + + + + + + + + + + + 4.9,2.5 + + + + + + + + + + + + + + 7.6,3.0 + + + + + + + + + + + + + + 6.5,3.0 + + + + + + + + + + + + + + 6.3,2.9 + + + + + + + + + + + + + + 7.1,3.0 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 6.3,3.3 + + + + + + + + + + + + + + 5.7,2.8 + + + + + + + + + + + + + + 5.1,2.5 + + + + + + + + + + + + + + 6.2,2.9 + + + + + + + + + + + + + + 5.7,2.9 + + + + + + + + + + + + + + 5.7,3.0 + + + + + + + + + + + + + + 5.6,2.7 + + + + + + + + + + + + + + 5.0,2.3 + + + + + + + + + + + + + + 5.8,2.6 + + + + + + + + + + + + + + 6.1,3.0 + + + + + + + + + + + + + + 5.5,2.6 + + + + + + + + + + + + + + 5.5,2.5 + + + + + + + + + + + + + + 5.6,3.0 + + + + + + + + + + + + + + 6.3,2.3 + + + + + + + + + + + + + + 6.7,3.1 + + + + + + + + + + + + + + 6.0,3.4 + + + + + + + + + + + + + + 5.4,3.0 + + + + + + + + + + + + + + 6.0,2.7 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 5.5,2.4 + + + + + + + + + + + + + + 5.5,2.4 + + + + + + + + + + + + + + 5.7,2.6 + + + + + + + + + + + + + + 6.0,2.9 + + + + + + + + + + + + + + 6.7,3.0 + + + + + + + + + + + + + + 6.8,2.8 + + + + + + + + + + + + + + 6.6,3.0 + + + + + + + + + + + + + + 6.4,2.9 + + + + + + + + + + + + + + 6.1,2.8 + + + + + + + + + + + + + + 6.3,2.5 + + + + + + + + + + + + + + 6.1,2.8 + + + + + + + + + + + + + + 5.9,3.2 + + + + + + + + + + + + + + 5.6,2.5 + + + + + + + + + + + + + + 6.2,2.2 + + + + + + + + + + + + + + 5.8,2.7 + + + + + + + + + + + + + + 5.6,3.0 + + + + + + + + + + + + + + 6.7,3.1 + + + + + + + + + + + + + + 5.6,2.9 + + + + + + + + + + + + + + 6.1,2.9 + + + + + + + + + + + + + + 6.0,2.2 + + + + + + + + + + + + + + 5.9,3.0 + + + + + + + + + + + + + + 5.0,2.0 + + + + + + + + + + + + + + 5.2,2.7 + + + + + + + + + + + + + + 6.6,2.9 + + + + + + + + + + + + + + 4.9,2.4 + + + + + + + + + + + + + + 6.3,3.3 + + + + + + + + + + + + + + 5.7,2.8 + + + + + + + + + + + + + + 6.5,2.8 + + + + + + + + + + + + + + 5.5,2.3 + + + + + + + + + + + + + + 6.9,3.1 + + + + + + + + + + + + + + 6.4,3.2 + + + + + + + + + + + + + + 7.0,3.2 + + + + + + + + + + + + + + 5.0,3.3 + + + + + + + + + + + + + + 5.3,3.7 + + + + + + + + + + + + + + 4.6,3.2 + + + + + + + + + + + + + + 5.1,3.8 + + + + + + + + + + + + + + 4.8,3.0 + + + + + + + + + + + + + + 5.1,3.8 + + + + + + + + + + + + + + 5.0,3.5 + + + + + + + + + + + + + + 4.4,3.2 + + + + + + + + + + + + + + 4.5,2.3 + + + + + + + + + + + + + + 5.0,3.5 + + + + + + + + + + + + + + 5.1,3.4 + + + + + + + + + + + + + + 4.4,3.0 + + + + + + + + + + + + + + 4.9,3.6 + + + + + + + + + + + + + + 5.5,3.5 + + + + + + + + + + + + + + 5.0,3.2 + + + + + + + + + + + + + + 4.9,3.1 + + + + + + + + + + + + + + 5.5,4.2 + + + + + + + + + + + + + + 5.2,4.1 + + + + + + + + + + + + + + 5.4,3.4 + + + + + + + + + + + + + + 4.8,3.1 + + + + + + + + + + + + + + 4.7,3.2 + + + + + + + + + + + + + + 5.2,3.4 + + + + + + + + + + + + + + 5.2,3.5 + + + + + + + + + + + + + + 5.0,3.4 + + + + + + + + + + + + + + 5.0,3.0 + + + + + + + + + + + + + + 4.8,3.4 + + + + + + + + + + + + + + 5.1,3.3 + + + + + + + + + + + + + + 4.6,3.6 + + + + + + + + + + + + + + 5.1,3.7 + + + + + + + + + + + + + + 5.4,3.4 + + + + + + + + + + + + + + 5.1,3.8 + + + + + + + + + + + + + + 5.7,3.8 + + + + + + + + + + + + + + 5.1,3.5 + + + + + + + + + + + + + + 5.4,3.9 + + + + + + + + + + + + + + 5.7,4.4 + + + + + + + + + + + + + + 5.8,4.0 + + + + + + + + + + + + + + 4.3,3.0 + + + + + + + + + + + + + + 4.8,3.0 + + + + + + + + + + + + + + 4.8,3.4 + + + + + + + + + + + + + + 5.4,3.7 + + + + + + + + + + + + + + 4.9,3.1 + + + + + + + + + + + + + + 4.4,2.9 + + + + + + + + + + + + + + 5.0,3.4 + + + + + + + + + + + + + + 4.6,3.4 + + + + + + + + + + + + + + 5.4,3.9 + + + + + + + + + + + + + + 5.0,3.6 + + + + + + + + + + + + + + 4.6,3.1 + + + + + + + + + + + + + + 4.7,3.2 + + + + + + + + + + + + + + 4.9,3.0 + + + + + + + + + + + + + + 5.1,3.5 + + + + + + + + + + + setosa + + + + + versicolor + + + + + virginica + + + + + + + + + + + + + + + + + + Iris + + + + + + + + + + 2.0 + + + + + 2.5 + + + + + 3.0 + + + + + 3.5 + + + + + 4.0 + + + + + 4.5 + + + + + + + SepalWidth + + + + + + + + + + diff --git a/text/presentation_01/mead/probasp.pdf b/text/presentation_01/mead/probasp.pdf new file mode 100644 index 0000000..183a629 Binary files /dev/null and b/text/presentation_01/mead/probasp.pdf differ diff --git a/text/presentation_01/mead/probasp.tex b/text/presentation_01/mead/probasp.tex new file mode 100644 index 0000000..f31208a --- /dev/null +++ b/text/presentation_01/mead/probasp.tex @@ -0,0 +1,1203 @@ +% !TeX program=xelatex +\documentclass[bigger]{beamer} + +\useinnertheme{circles} +\usefonttheme[onlymath]{serif} +\usefonttheme{structurebold} +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{footline}[frame number] +\usepackage{xcolor} +\setbeamercolor{highlight block}{bg=gray} + +\usepackage{tikz} +\usetikzlibrary{ +automata,% +positioning,% +calc,% +patterns, +decorations,% +decorations.pathmorphing,% +arrows.meta, +shapes.misc +} +\tikzset{ + vert/.style={draw, circle, inner sep=2pt}, + event/.style={}, + smodel/.style={fill=gray!25}, + tchoice/.style={draw, circle}, + indep/.style={},%{draw, dashed}, + proptc/.style = {-latex, dashed}, + propsm/.style = {-latex, thick}, + doubt/.style = {gray} +} + +\usepackage{tkz-graph} +\newcommand{\qlr}[2]{\ensuremath{\begin{matrix}#1\cr\begin{aligned}\hline #2\end{aligned}\end{matrix}}} + +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[normalem]{ulem} % To strikeout +\usepackage{commath} +\usepackage{amssymb} +\usepackage[normalem]{ulem} +\usepackage[nice]{nicefrac} +\usepackage{stmaryrd} +\usepackage{acronym} +\usepackage{multicol} +\usepackage{cleveref} + +\usepackage{listings} + +\newcommand{\at}[1]{\ensuremath{\!\del{#1}}} +\newcommand{\class}[1]{\ensuremath{[{#1}]_{\sim}}} +\newcommand{\co}[1]{\ensuremath{\overline{#1}}} +\newcommand{\condsymb}[2]{\ensuremath{p_{#1|#2}}} +\newcommand{\cset}[2]{\ensuremath{\set{#1,~#2}}} +\newcommand{\deft}[1]{\textbf{#1}} +\newcommand{\emptyevent}{\ensuremath{\vartriangle}} +\newcommand{\ent}{\ensuremath{\lhd}} +\newcommand{\err}[1]{\ensuremath{\mathrm{err}\at{#1}}} +\newcommand{\fml}[1]{\ensuremath{{\cal #1}}} +\newcommand{\given}{\ensuremath{~\middle|~}} +\newcommand{\inconsistent}{\bot} +\newcommand{\indepclass}{\ensuremath{\Diamond}} +\newcommand{\isep}{~,~} +\newcommand{\langof}[1]{\ensuremath{\fml{L}\at{#1}}} +\newcommand{\larr}{\ensuremath{\leftarrow}} +\newcommand{\lclass}[1]{\ensuremath{\intoc{#1}}} +\newcommand{\lfrac}[2]{\ensuremath{{#1}/{#2}}} +\newcommand{\lrep}[1]{\ensuremath{\rep{}{#1}}} +\newcommand{\lset}[1]{\ensuremath{#1_{\ast}}} +\newcommand{\naf}{\ensuremath{\sim\!}} +\newcommand{\pr}[1]{\ensuremath{\mathrm{P}\at{#1}}} +\newcommand{\probfact}[2]{\ensuremath{#2:#1}} +\newcommand{\probrule}[3]{\probfact{#2}{#1} \leftarrow #3} +\newcommand{\pset}[1]{\ensuremath{\mathbb{P}\at{#1}}} +\newcommand{\pw}[1]{\ensuremath{\mu\at{#1}}} +\newcommand{\pwc}[1]{\ensuremath{\pwcfname\at{#1}}} +\newcommand{\pwcfname}{\ensuremath{\mu_{\textrm{TC}}}} +\newcommand{\q}[1]{\mathbf{#1}} +\newcommand{\rep}[2]{\ensuremath{\left\langle #1 \middle| #2 \right\rangle}} +\newcommand{\smclass}[1]{\ensuremath{\intcc{#1}}} +\newcommand{\stablecore}[1]{\ensuremath{\left\llbracket #1 \right\rrbracket}} +\newcommand{\tcgen}[1]{\ensuremath{\left<#1\right>}} +\newcommand{\uclass}[1]{\ensuremath{\intco{#1}}} +\newcommand{\urep}[1]{\ensuremath{\rep{#1}{}}} +\newcommand{\uset}[1]{\ensuremath{#1^{\ast}}} +\newcommand{\yset}[1]{\ensuremath{\left\langle #1 \right\rangle}} +%\newcommand{\tcgen}[1]{\ensuremath{\widehat{#1}}} + +\title{Stochastic Answer Set Programming} +\subtitle{A Research Program} +\author{Francisco Coelho} +\date{November 15, 2023} +\institute[\texttt{fc@uevora.pt}]{ +NOVA LINCS\\ +High Performance Computing Chair\\ +Departamento de Informática, Universidade de Évora +} +% +%=============================================================== +% +\begin{document} +% +\lstset{language=Prolog} +% +%=============================================================== +% +\begin{frame}[plain] + \titlepage + + \begin{center} + \footnotesize This is a join work with \textbf{Salvador Abreu}@DInf and \textbf{Bruno Dinis}@DMat. + \end{center} +\end{frame} +% +%=============================================================== +% +\section*{Motivation} +% +%=============================================================== +% +\begin{frame} + \frametitle{In Short} + + + \begin{itemize} + \item About \textbf{Machine Learning}: + \begin{itemize} + \item Vector or matrix based models lack ``structure''. + \item Large models don't \emph{explain} data. + \end{itemize} + \item About \textbf{Logic Programs}: + \begin{itemize} + \item Logic programs formalize knowledge. + \item Logic doesn't \emph{capture} uncertainty and is \emph{fragile} to noise. + \end{itemize} + \item \textbf{Probabilistic Logic Programs} extend formal knowledge with probabilities. + \begin{itemize} + \item How to propagate probabilities through rules? + \end{itemize} + \end{itemize} + \vfill + \begin{center} + \alert{\bf Goal:} Combine Logic and Statistics. + \end{center} +\end{frame} +% +%=============================================================== +% \begin{frame} +% %------------------------------------------------------------- +% %[fragile] +% %------------------------------------------------------------- +% \frametitle{Statistics and Machine Learning} +% %------------------------------------------------------------- +% \vfill +% \begin{itemize} +% \item \textbf{Data Analysis:} understand and summarize. +% \item \textbf{Model Building:} tools and techniques. +% \item \textbf{Model Evaluation:} performance. +% \item [] +% \item To calculate the accuracy/precision/recall of a model. +% \item To choose the right model for a problem. +% \item To tune the hyperparameters of a model. +% \end{itemize} +% \vfill +% \begin{center}\footnotesize +% Highlights of \texttt{Bard}'s (Google's LLM) reply to ``Explain what is the role of statistics in machine learning''. +% \end{center} +% \end{frame} +% +%=============================================================== +% +\section{Machine Learning} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\bf Machine Learning} + \end{center} + \vfill + \begin{itemize} + \item Standard Example --- Iris Classification + \item Assumptions of Machine Learning + \item Where Machine Learning Fails + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{The Standard Example --- Iris Classification} + %------------------------------------------------------------- + \small + \begin{center} + Learning Functions: \href{https://en.wikipedia.org/wiki/Iris_flower_data_set}{The famous Iris database} + \end{center} + \begin{columns} + \column{0.4\textwidth} + \begin{itemize}\setlength{\itemsep}{-0.5em} + \item[$x_1$] sepal length. + \item[$x_2$] sepal width. + \item[$x_3$] petal length. + \item[$x_4$] petal width. + \item[$y$] species (one of \emph{setosa}, \emph{versicolor}, \emph{virginica}). + \end{itemize} + \column{0.6\textwidth} + \begin{center} + \includegraphics[width=\textwidth]{iris_plot.pdf} + \end{center} + \end{columns} + \vfill + \begin{itemize} + \item A \emph{setosa} model: $ - 0.40 -0.65x_1 + 1.00x_2 > 0.00$. + \item A general \textbf{model template}: + $$ + f_\theta(\vec{x}) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3 + \theta_4 x_4> 0 + $$ + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Assumptions of Machine Learning} + %------------------------------------------------------------- + \begin{itemize} + \item Each instance is described in a \textbf{single row} by a \textbf{fixed set of features} + $$ + \begin{array}{cccc|c} + \mathbf{x_1} & \mathbf{x_2} & \ldots & \mathbf{x_n} & \mathbf{y} \\ + \hline + x_{11} & x_{21} & \ldots & x_{n1} & y_1 \\ + & & \vdots \\ + x_{1m} & x_{2m} & \ldots & x_{nm} & y_m \\ + \end{array} + .$$ + \item Instances are \textbf{independent} of one another, \textbf{given the model} + $$ + y = f_\theta(\vec{x}). + $$ + \item Parameters \textbf{minimize estimation error} \emph{e.g.} + $$ + \hat{\theta} = \arg\min_\theta \sum_i \norm{y_i - f_\theta(\vec{x_{i}})}. + $$ + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Failing Assumptions\hfill~1/2} + %------------------------------------------------------------- + \vfill + \begin{columns}[c] + \column{0.5\textwidth} + $$ + \begin{array}{ccc} + \text{student} & \text{course} & \text{grade} \\ + \hline + s_1 & c_1 & a \\ + s_2 & c_1 & c \\ + s_1 & c_2 & b \\ + s_2 & c_3 & b \\ + s_3 & c_2 & b \\ + s_4 & c_3 & b \\ + s_3 & c_4 & X \\ + s_4 & c_4 & Y \\ + \end{array} + $$ + \column{0.5\textwidth} + \emph{Infer $X \succ_g Y$.} + + \bigskip + ``\emph{Proof.}'' + + \bigskip + $s_1 \succ_s s_2$ (rows 1 \& 2)\\ so $c_2 \succ_c c_3$ (3 \& 4). + + \bigskip + Then $s_3 \succ_s s_4$ (5 \& 6)\\ therefore $X \succ_g Y\qed$. + \end{columns} + \vfill + \begin{itemize} + \item Instances are not independent. + \item Small dataset, so \emph{no statistics}. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Failing Assumptions\hfill~2/2} + %------------------------------------------------------------- + \footnotesize + \begin{center} + \textbf{Prompt:} Given \texttt{f(machine) = e}, \texttt{f(learning) = g} and \texttt{f(algorithm) = m}, what is the value of \texttt{f(ksadbf)}? + \end{center} + + \vfill + \begin{columns}[t] + \scriptsize + \column{0.35\textwidth} + $$ + \begin{array}{r|l} + \textbf{input} & \textbf{output} \\ + \hline + machine & e \\ + learning & g \\ + algorithm & m \\ + ksadbf & ? + \end{array} + $$ + + \bigskip + \textbf{Bard:} \tt f(ksadbf) = 11. + + We can see that the value of f(x) is simply the first letter of x minus 96. + + \column{0.65\textwidth} + + \textbf{ChatGPT:} \tt The information provided seems to define a function $f$ where certain inputs are associated with specific outputs. Based on the given information: + \begin{itemize} + \item $f(\text{machine}) = e$ + \item $f(\text{learning}) = g$ + \item $f(\text{algorithm}) = m$ + \end{itemize} + However, there is no information given about \( f(\text{ksadbf}) \). Without additional information or a specific rule that determines the output for \( f(\text{ksadbf}) \), \emph{it is not possible to determine its value}. + % + If there is a pattern or rule for how the outputs are assigned based on the inputs, you would need to provide that information for me to help determine the value of \( f(\text{ksadbf}) \). + \end{columns} + + \vfill + \begin{center} + No help from state-of-the-art Natural Language Processing or LLMs. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Where Machine Learning Fails} + %------------------------------------------------------------- + \begin{itemize} + \item No \emph{interpretability}: large models ($\dim \theta \sim \text{millions}$) are \alert{not understandable by humans}. + \item Need for \emph{large number of training} examples. + \item Unfit for \emph{multiple relations}, \emph{intersample dependencies} and \emph{variable features}: The \textit{Students, Courses and Results} and \emph{Last Letter} examples. + \item Poor \emph{generalization}: A model trained in the iris dataset is useless in any other domain. + \item \alert{No use of background knowledge}. + \end{itemize} +\end{frame} +% +%=============================================================== +% +\section{Logic Programming} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\bf Logic Programming} + \end{center} + \vfill + \begin{itemize} + \item An Example of Logic Programming. + \item Inductive Logic Programming. + \item Where ILP Fails. + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + [fragile] + %------------------------------------------------------------- + \frametitle{An Example of Logic Programming} + %------------------------------------------------------------- + \begin{columns}[c] + \column{0.4\textwidth} + \begin{tikzpicture}[>=Latex] + \node[vert] (v6) {6}; + \node[vert, above left = of v6] (v3) {3}; + \node[vert, above right = of v6] (v5) {5}; + \node[vert, below left = of v6] (v1) {1}; + \node[vert, below right = of v6] (v2) {2}; + \node[vert, below right = of v1] (v4) {4}; + \draw[->] (v6) to (v3); + \draw[<->] (v6) to (v5); + \draw[<->] (v6) to (v2); + \draw[<->] (v3) to (v5); + \draw[<->] (v3) to (v1); + \draw[->] (v3) to[bend right, out=225, in =180,relative=false] (v4); + \draw[->] (v1) to (v2); + \draw[<->] (v1) to (v4); + \draw[->] (v2) to (v5); + \draw[<->] (v2) to (v4); + \draw[->] (v5) to[bend left, out=-45, in=0,relative=false] (v4); + \end{tikzpicture} + \column{0.6\textwidth} + \scriptsize + \begin{lstlisting} +node(1..6). + +edge(1,2). edge(2,4). edge(3,1). +edge(4,1). edge(5,3). edge(6,2). +edge(1,3). edge(2,5). edge(3,4). +edge(4,2). edge(5,4). edge(6,3). +edge(1,4). edge(2,6). edge(3,5). +edge(5,6). edge(6,5). + +col(r). col(b). col(g). + +1 { color(X,C) : col(C) } 1 :- node(X). +:- edge(X,Y), color(X,C), color(Y,C). + +#show color/2. + \end{lstlisting} + \end{columns} + \vfill + \scriptsize + \begin{lstlisting} +color(2,b) color(1,g) color(4,r) color(3,b) color(5,g) color(6,r) +color(1,r) color(2,b) color(4,g) color(3,b) color(5,r) color(6,g) +color(1,r) color(2,g) color(4,b) color(3,g) color(5,r) color(6,b) +color(1,b) color(2,g) color(4,r) color(3,g) color(5,b) color(6,r) +color(2,r) color(1,g) color(4,b) color(3,r) color(5,g) color(6,b) +color(2,r) color(1,b) color(4,g) color(3,r) color(5,b) color(6,g) + \end{lstlisting} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Inductive Logic Programming} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + Learning Logic Programs from Examples. + \end{center} + + \vfill + \alert{Generate rules} that\ldots + \begin{itemize} + \item use \textbf{background knowledge} + $$ + \begin{aligned} + & parent(john,mary), & & parent(david,steve), \\ + & parent(kathy,mary), & & female(kathy), \\ + & male(john), & & male(david). + \end{aligned} + $$ + \item to entail all the \textbf{positive examples}, $father(john,mary), father(david,steve)$, + \item but none of the \textbf{negative examples}. $father(kathy,mary), father(john,steve)$, + + \end{itemize} + + \vfill + A \textbf{solution} is $$father(X,Y) \leftarrow parent(X,Y) \wedge male(X).$$ + +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Where Logic Programming Fails} + %------------------------------------------------------------- + \begin{center} + Meanwhile, in the \textbf{real world}, samples are \emph{incomplete} and come with \emph{noise}. + \end{center} + \vfill + \textbf{Logic inference is \alert{fragile}}: a mistake in the transcription of a fact is dramatic to the consequences: + \begin{itemize} + \item $parent(david,mary)$. + \item $parent(jonh,mary)$. + \end{itemize} + \vfill + \begin{center} + The statistic essence of machine learning provides \alert{robustness}. + \end{center} +\end{frame} +% +%=============================================================== +% +\section{Probabilistic Logic Programming} +% +%=============================================================== +% +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \vfill + \begin{center} + {\huge\bf Probabilistic Logic Programming} + \end{center} + \vfill + \begin{itemize} + \item Define distributions from logic programs. + \item Stochastic ASP: Specifying distributions. + \end{itemize} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilistic Logic Programs (PLPs)} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + Logic programs \textbf{annotated} with probabilities. + \end{center} + + \vfill + \begin{columns}[c] + + \column{0.4\textwidth} + \begin{tikzpicture}[>=Latex] + \node[draw, rounded rectangle] (A) {$Alarm$}; + \node[draw, rounded rectangle, below = of A] (J) {$Johncalls$}; + \draw[->] (A) to (J); + \end{tikzpicture} + + \column{0.6\textwidth} + $ + \begin{aligned} + alarm:0.00251, & \\ + johncalls:0.9 & \leftarrow alarm, \\ + johncalls:0.05 & \leftarrow \neg alarm + \end{aligned} + $ + \end{columns} + + \vfill + \begin{itemize} + \item \alert{$alarm:0.00251$} is $alarm \vee \neg alarm$ plus $P(Alarm = true) = 0.00251$. + \item \alert{$johncalls:0.9 \leftarrow alarm$} is + $$P\del{Johncalls = true \middle| Alarm = true} = 0.9$$ + \end{itemize} + + \vfill + \begin{center} + Any bayesian network can be represented by a PLP. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Distributions from Logic Programs} + %------------------------------------------------------------- + \vfill + The program + $$ + \begin{aligned} + alarm:0.00251, & \\ + johncalls:0.9 & \leftarrow alarm, \\ + johncalls:0.05 & \leftarrow \neg alarm + \end{aligned} + $$ + entails four possible models (or worlds): + $$ + \begin{array}{r|r} + \text{model} & \text{probability} \\ + \hline + alarm, johncalls & 0.002259 \\ + alarm, \neg johncalls & 0.000251 \\ + \neg alarm, johncalls & 0.049874 \\ + \neg alarm, \neg johncalls & 0.947616 \\ + \end{array} + $$ + \begin{itemize} + \item \alert{\textbf{Models}} are special sets of \emph{literals} \textbf{entailed} from the program. + \item Probabilities \emph{propagate} from facts, through rules. + \end{itemize} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{There's a Problem\ldots} + %------------------------------------------------------------- + \vfill + The program + $$ + \begin{aligned} + alarm:0.00251, & \\ + johncalls \vee marycalls & \leftarrow alarm + \end{aligned} + $$ + entails three \alert{stable} (\emph{i.e.}\ minimal) models + $$ + \begin{array}{r|l} + \text{model} & \text{probability} \\ + \hline + alarm, johncalls & x \\ + alarm, marycalls & y \\ + \neg alarm & 0.99749 + \end{array} + $$ + but \textbf{no single way to set $x,y$}. + \vfill + \begin{center} + Some \emph{Probabilistic Logic Programs} define more than one joint distribution. + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{\ldots and an Oportunity} + %------------------------------------------------------------- + \begin{center} + Some \emph{PLP}s define more than one joint distribution. + \end{center} + \vfill + \begin{itemize} + \item There is \textbf{no single probability assignment} from the facts stable models: $x,y \in \intcc{0,1}$. + \item But any assignment is bound by Kolmogorov's axioms, and \textbf{forms equations} such as: + $$x + y = P\del{alarm}.$$ + \item Existing \textbf{data can be used to estimate the unknowns} in those equations. + \end{itemize} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Stable Models, Events and Probabilities} + %------------------------------------------------------------- + \vfill + \begin{center} + What are we talking about? + \end{center} + \vfill + \begin{itemize} + \item A logic program has \textbf{atoms} (and \textbf{literals}) and \textbf{rules}: + $$ + \begin{aligned} + &male(john), \neg parent(kathy,mary), \\ + &father(X, Y) \leftarrow parent(X, Y) \wedge male(X). + \end{aligned} + $$ + \item A \alert{\textbf{stable model}} is a \textbf{minimal} model that contains: + \begin{itemize} + \item program's \emph{facts}: $parent(john,mary),~male(john)$. + \item consequences, by the \emph{rules}: $father(john,mary)$. + \end{itemize} + \item Some programs have more than one model: + \begin{tabular}{c|c} + \textbf{Logic Program} & \textbf{Stable Models} \\ + \hline + $a \vee \neg a, b \vee c \leftarrow a$ + & + $\set{\neg a}, \set{a, b}, \set{a, c}$ + \end{tabular} + \end{itemize} + \vfill + \begin{center} + How to propagate probability from annotated facts to other \emph{events}? + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Logic Programs and Probabilities} + %------------------------------------------------------------- + % \vfill + % \begin{center} + % The \textbf{space of events}, $\Omega$, is the set of all sets of literals. + % \end{center} + \vfill + \begin{itemize} + \item Consider the literals of a logic program $$L = \set{a_1, \ldots a_n, \neg a_1, \ldots \neg a_n}.$$ + \item Any model of that program is a (consistent) subset of $L$. + \item Let $\Omega = \mathbf{P}\del{L}$, \emph{i.e.} an \alert{event} $e$ is a subset of $L$, $e \subseteq L$. + \begin{itemize} + \item Setting a probability for some events seems straightforward: $P\del{\neg alarm} = 0.997483558$. + \item For others, not so much: + \begin{itemize} + \item $P\del{alarm, johncalls}$, $P\del{johncalls, marycalls, alarm}$, $P\del{marycalls}$? + \item $P\del{alarm, \neg alarm}$, $P\del{\neg marycalls}$? + \end{itemize} + \end{itemize} + \end{itemize} + \vfill + \begin{center} + How to \alert{propagate} probability from \emph{facts} to \emph{consequences} or other \emph{events}? + \end{center} +\end{frame} +% +\newcommand{\diagram}{ + \resizebox{!}{24ex}{ + \begin{tikzpicture}%[scale=0.6, every node/.style={scale=0.6}] + \node[event] (E) {$\emptyevent$}; + \node[tchoice, above left = of E, pin={[red!50!black]175:$0.3$}] (a) {$a$}; + \node[smodel, above left = of a, pin={[red!50!black]175:$0.3\theta$}] (ab) {$ab$}; + \node[smodel, above right = of a, pin={[red!50!black]175:$0.3\co{\theta}$}] (ac) {$ac$}; + \node[event, below = of ab] (b) {$b$}; + \node[event, below = of ac] (c) {$c$}; + \node[event, above right = of ab] (abc) {$abc$}; + \node[event, above left = of ab] (abC) {$\co{c}ab$}; + \node[event, above right = of ac] (aBc) {$\co{b}ac$}; + \node[indep, right = of ac] (bc) {$bc$}; + \node[tchoice, smodel, below right = of bc, pin={[red!50!black]175:$0.7$}] (A) {$\co{a}$}; + \node[event, above = of A] (Ac) {$\co{a}c$}; + \node[event, above right = of Ac] (Abc) {$\co{a}bc$}; + % ---- + \path[draw, rounded corners, fill=cyan, opacity=0.1] + (ab.west) -- + (ab.north west) -- + % + (abC.south west) -- + (abC.north west) -- + (abC.north) -- + % + (abc.north east) -- + (abc.east) -- + (abc.south east) -- + % + (ab.north east) -- + (ab.east) -- + (ab.south east) -- + % + (a.north east) -- + % + (E.north east) -- + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (b.south west) -- + % + (ab.west) + ; + % ---- + \path[draw, rounded corners, fill=yellow, opacity=0.1] + (ac.south west) -- + (ac.west) -- + (ac.north west) -- + % + (abc.south west) -- + (abc.west) -- + (abc.north west) -- + % + (aBc.north east) -- + (aBc.east) -- + (aBc.south east) -- + % + (ac.north east) -- + % + (c.east) -- + % + (E.east) -- + (E.south east) -- + (E.south) -- + (E.south west) -- + % + (a.south west) -- + (a.west) -- + (a.north west) -- + (a.north) -- + % + (ac.south west) + ; + % ---- + \path[draw, rounded corners, fill=magenta, opacity=0.1] + % (A.north west) -- + % + (Ac.north west) -- + % + (Abc.north west) -- + (Abc.north) -- + (Abc.north east) -- + (Abc.south east) -- + % + % (Ac.north east) -- + % (Ac.east) -- + % + % (A.east) -- + (A.south east) -- + % + (E.south east) -- + (E.south) -- + (E.south west) -- + (E.west) -- + (E.north west) -- + % + (Ac.north west) + ; + \end{tikzpicture} + } +} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Classes of Events} + %------------------------------------------------------------- + \small + + \vfill + \begin{center} + \diagram + \end{center} + + \vfill + \begin{center} + \begin{tabular}{lr} + $\begin{aligned} + \probfact{0.3}{a} \\ + b \vee c & \leftarrow a + \end{aligned}$ + & + $\co{a} = \set{\neg a}, ab = \set{a, b}, ac = \set{a, c}$ + \end{tabular} + \end{center} + + \vfill + \begin{itemize} + \item Define \alert{equivalence classes} for all events, based on $\subseteq, \supseteq$ relations with the \textbf{stable models}. + \item This example shows $6$ out of $2^3 + 1$ classes. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilities for all Events} + %------------------------------------------------------------- + \vfill + \begin{center} + \diagram + \end{center} + \vfill + \footnotesize + \begin{enumerate} + \item Set \alert{weights} in the stable models (shaded nodes), using parameters when needed: $\mu\del{\co{a}} = 0.7; \mu\del{ab} = 0.3\theta; \mu\del{ac}=0.3\del{1 - \theta}$ + \item Assume that the stable models are \alert{disjoint events}. + \item Define \alert{weight of an event} as the sum of the weights of the related stable models. + \item Normalize weights to get a (probability) \alert{distribution}. + \end{enumerate} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Probabilities for all Events} + %------------------------------------------------------------- + \vfill + % \begin{center} + % \diagram + % \end{center} + % \vfill + % \scriptsize + + \begin{equation*} + \begin{array}{clr|cc|cc} + & \stablecore{e} + & \# \class{e} + & \pw{\class{e}} + & \pw{e} + & \pr{E = e} + & \pr{E \in \class{e}} + \\ + \hline + % + & \inconsistent + & 37 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + \square + & \indepclass + & 9 + & 0 + & 0 + & 0 + & 0 + \\[4pt] + % + {\color{magenta!20}\blacksquare } + & \co{a} + & 9 + & \frac{7}{10} + & \frac{7}{90} + & \frac{7}{207} + & \frac{7}{23} + \\[4pt] + % + {\color{cyan!20}\blacksquare } + & ab + & 3 + & \frac{3}{10}\theta + & \frac{1}{10}\theta + & \frac{1}{23}\alert{\theta} + & \frac{3}{23}\theta + \\[4pt] + % + {\color{yellow!20}\blacksquare } + & ac + & 3 + & \frac{3}{10}\co{\theta} + & \frac{1}{10}\co{\theta} + & \frac{1}{23}\alert{\co{\theta}} + & \frac{3}{23}\co{\theta} + \\[4pt] + % + & \co{a}, ab + & 0 + & \frac{7 + 3\theta}{10} + & 0 + & 0 + & 0 + \\[4pt] + % + & \co{a}, ac + & 0 + & \frac{7 + 3\co{\theta}}{10} + & 0 + & 0 + & 0 + % + \\[4pt] + % + {\color{green!20}\blacksquare } + & ab, ac + & 2 + & \frac{3}{10} + & \frac{3}{20} + & \frac{3}{46} + & \frac{3}{23} + \\[4pt] + % + {\color{gray!20}\blacksquare } + & \co{a}, ab, ac + & 1 + & 1 + & 1 + & \frac{10}{23} + & \frac{10}{23} + \\[4pt] + % + \hline + & + & 64 + & + & Z = \frac{23}{10} + & + %& \Sigma = 1 + \end{array} + \end{equation*} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Estimating the Parameters} + %------------------------------------------------------------- + A \alert{sample} can be used to estimate the parameters $\theta$, by minimizing + \begin{equation*} + \err{\theta} := \sum_{e\in\fml{E}} \del{\pr{E = e\given \Theta = \theta} - \pr{S = e}}^2.\label{eq:err.e.s} + \end{equation*} + where + \begin{itemize} + \item $\fml{E}$ is the set of all events, + \item $\pr{E\given \Theta}$ the \textbf{model+parameters} based distribution, + \item $\pr{S}$ is the \textbf{empiric} distribution from the given sample. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Behind Parameter Estimation} + %------------------------------------------------------------- + \vfill + So, we can derive a distribution $\pr{E\given \Theta = \hat{\theta}}$ from a program $P$ and a sample $S$. + \begin{itemize} + \item The sample defines an empiric distribution $\pr{S}$\ldots + \item \ldots that is used to estimate $\theta$ in $\pr{E\given \Theta}$\ldots + \item \ldots and \alert{score the program} $P$ w.r.t.\ that sample using, \emph{e.g.} the $\err{}$ function. + \end{itemize} + \vfill + +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Back to Inductive Logic Programming} + %------------------------------------------------------------- + \vfill + Recall the \emph{Learning Logic Programs from Examples} setting: + \begin{itemize} + \item Given \textbf{positive} and \textbf{negative} examples, and \textbf{background knowledge}\ldots + \item find a \textbf{program}\ldots + \begin{itemize} + \item \ldots using the facts and relations from the \textbf{BK}\ldots + \item \ldots such that \textbf{all the PE} and \textbf{none the NE} examples are entailed. + \end{itemize} + \end{itemize} + \vfill + \begin{quotation} + Given a sample of events, and a set of programs, \alert{the score} of those programs (w.r.t. the sample) \alert{can be used in evolutionary algorithms} while searching for better solutions. + \end{quotation} +\end{frame} +% +%=============================================================== +% +\section{In Conclusion} +% +%=============================================================== +% +\begin{frame} + %------------------------------------------------------------- %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \vfill + \begin{center} + {\huge\bf In Conclusion} + \end{center} + \vfill + %------------------------------------------------------------- +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + \begin{itemize} + \item \textbf{Machine Learning} has limitations. + \item As does \textbf{Inductive Logic Programming}. + \item But, distributions can be defined by \textbf{Stochastic Logic Programs}. + \end{itemize} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + Distributions can be defined by \textbf{Stochastic Logic Programs}. Here we: + \begin{enumerate} + \item Look at the program's \textbf{stable models} and + \item Use them to partition the \textbf{events} and then + \item Using annotated probabilities, define: + \begin{enumerate} + \item a finite \textbf{measure}\ldots + \item that, normalized, is a \textbf{distribution} on all events. + \end{enumerate} + \end{enumerate} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + % \frametitle{In Conclusion} + %------------------------------------------------------------- + Distributions can be defined by \textbf{Stochastic Logic Programs}. + \begin{itemize} + \item These distributions might have some \textbf{parameters}, due to indeterminism in the program. + \item A \textbf{sample} can be used to estimate those parameters\ldots + \item \ldots and \textbf{score} programs concurring to describe it. + \item This score a key ingredient in \textbf{evolutionary algorithms}. + \end{itemize} + \begin{quotation} + \ldots and a step towards the \alert{induction of stochastic logic programs} using \textbf{data} and \textbf{background knowledge}. + \end{quotation} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{Future Work} + %------------------------------------------------------------- + \vfill + \begin{center} + Induction of Stochastic Logic (ASP) Programs. + \end{center} + \vfill + \begin{enumerate} + \item \textbf{Meta-programming:} formal rules for rule generation. + \item \textbf{Generation}, \textbf{Combination} and \textbf{Mutation} operators. + \item \textbf{Complexity.} + \item \textbf{Applications.} + \item \textbf{Profit.} + \end{enumerate} + \vfill +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{} + %------------------------------------------------------------- + \begin{center} + \vfill + {\huge\alert{\bf Thank You!}} + \vfill + Questions? + \end{center} +\end{frame} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{References} + \begin{itemize} + \item \href{https://arxiv.org/abs/1801.00631}{Gary Marcus, \emph{Deep Learning: A Critical Appraisal}, 2018}. + \item \href{https://arxiv.org/abs/1911.01547}{François Chollet, \emph{On the Measure of Intelligence}, 2019}. + \item \href{https://arxiv.org/abs/1801.00631}{Bengio \emph{et al.}, \emph{A Meta-Transfer Objective for Learning to Disentangle Causal Mechanisms}, 2019}. + \item \href{https://arxiv.org/abs/1801.00631}{Cropper \emph{et al.}, \emph{Turning 30: New Ideas in Inductive Logic Programming}, 2020}. + \item \href{https://doi.org/10.1201/9781003427421}{Fabrizio Riguzzi, \emph{Foundations of Probabilistic Logic Programming }, 2023}. + \end{itemize} + %------------------------------------------------------------- +\end{frame} +% +\end{document} +% +%=============================================================== +\begin{frame} + %------------------------------------------------------------- + %[fragile] + %------------------------------------------------------------- + \frametitle{TITLE} + %------------------------------------------------------------- +\end{frame} +% + + diff --git a/text/summaries/00_ASP.md b/text/summaries/00_ASP.md new file mode 100644 index 0000000..029c631 --- /dev/null +++ b/text/summaries/00_ASP.md @@ -0,0 +1,239 @@ +# Answer Set Programming + +> **Answer set programming (ASP) is a form of declarative programming oriented towards difficult (primarily NP-hard) search problems.** +> +> It is **based on the stable model (answer set) semantics** of logic programming. In ASP, search problems are reduced to computing stable models, and answer set solvers ---programs for generating stable models--- are used to perform search. + +--- + +**ASP** "programs" generates "deduction-minimal" models _aka_ **stable models** or **answer sets**. +- Given an ASP program $P$, a model $X$ of $P$ is a set where each element $x \in X$ has a proof using $P$. +- In a "deduction-minimal" model $X$ each element $x \in X$ has a proof using $P$. Non-minimal models have elements without a proof. + +## Key Questions + +1. What is the relation between ASP and Prolog? + 1. **Prolog** performs **top-down query evaluation**. Solutions are extracted from the instantiation of variables of successful queries. + 2. **ASP** proceeds in two steps: first, **grounding** generates a (finite) _propositional representation of the program_; second, **solving** computes the _stable models_ of that representation. +2. What are the roles of **grounding** with `gringo` and **solving** with `clasp`? +3. Can ASP be used to **pLP**? + 1. What are the key probabilistic tasks/questions/problems? + 2. Where does distribution semantics enters? What about **pILP**? +4. Can the probabilistic task control the grounding (`gringo`) or solving (`clasp`) steps in ASP? +5. Can ASP replace kanren? + 1. As much as ASP can replace Prolog. + +## Formal Foundations + +### Common Concepts and Notation + + context | true, false | if | and | or | iff | default negation | classical negation +---------|------------|----|-----|----|-----|------|----- +source | | `:-` | `,` | `|` | | `not` | `-` +logic prog. | | ← | , | ; | | ̃ | ¬ +formula | ⊤, ⊥ | → | ∧ | ∨ | ↔ | ̃ | ¬ + +> - **default negation** or **negation as failure (naf)**, `not a` ($\sim a$), means "_no information about `a`_". +> - **classical negation** or **strong negation**, `-a` ($\neg a$), means "_positive information about `-a`_" ie "_negative information about `a`_". Likewise `a`: "_positive informations about `a`_". +> - The symbol `not` ($\sim$), is a new logical connective; `not a` ($\sim a$) is often read as "_it is not believed that `a` is true_" or "_there is no proof of `a`_". Note that this does not imply that `a` is believed to be false. + +- **Interpretation.** A _boolean_ interpretation is a function from ground atoms to **⊤** and **⊥**. It is represented by the atoms mapped to **⊤**. + - if u, v are two interpretations **u ≤ v** iff u ⊆ v under this representation. + - **partial interpretations** are represented by ( {true atoms}, {false atoms}) leaving the undefined atoms implicit. + - an **ordered boolean assignment** $a$ over $dom(a)$ in represented by a sequence $a = (V_ix_i | i \in 1:n)$ where $V_i$ is either $\top$ or $\bot$ and each $x_i\in dom(a)$. + - $a^\top \subseteq a$ such that $\top x \in a$; $a^\bot \subseteq a$ such that $\bot x \in a$. + - An ordered assignment $(a^\top, a^\bot)$ is a partial boolean interpretation. +- Subsets have a partial order for the $\subset$ relation; remember maximal and minimal elements. +- Directed graphs; Path; **Strongly connected** iff all vertex pairs (a,b) are connected; The **strongly connected components** are the strongly connected subgraphs. + +### Basic ASP syntax and semantics + +- A **definite clause** is, by definition, $a_0 \vee \neg a_1 \vee \cdots \vee \neg a_n$, a disjunction with exactly one positive atom. + - Also denoted $a_0 \leftarrow a_1 \wedge \cdots \wedge a_n$. + - **A set of definite clauses has exactly one smallest model.** +- A **horn clause** has at most one positive atom. + - A horn clause without positive atom is an _integrity_ constraint - _a conjunction that **can't** hold_. + - **A set of horn clauses has one or zero smallest models.** +- If $P$ is a **positive program**: + - A set $X$ is **closed** under $P$ if $head(r) \in X$ if $body^+(r) \subset X$. + - $Cn(P)$ is, by definition, the set of **consequences of $P$**. + - $Cn(P)$ is the smallest set closed under $P$. + - $Cn(P)$ is the $\subseteq$-smallest model of $P$. + - The **stable model** of $P$ is, by definition, $Cn(P)$. + - If $P$ is a positive program, $Cn(P)$ is the smallest model of the definite clauses of $P$. + +#### Example calculation of stable models + +Consider the program P: +```prolog +person(joey). +male(X); female(X) :- person(X). +bachelor(X) :- male(X), not married(X). +``` + +1. Any SM of P must have the **fact** `person(joey)`. +2. Therefore the **grounded rule** `male(joey) ; female(joey) :- person(joey).` entails that the SMs of P either have `male(joey)` or `female(joey)`. +3. Any **SM must contain** either A: `{person(joey), male(joey)}` or B: `{person(joey), female(joey)}`. +4. In **the reduct** of P in A we get the rule `bachelor(joey) :- male(joey).` and therefore `bachelor(joey)` must be in a SM that contains A. Let A1: `{person(joey), male(joey), bachelor(joey)}`. +5. No further conclusions result from P on A1. Therefore A1 is a SM. +6. Also no further conclusions result from P on B; It is also a SM. +7. The SMs of P are: + 1. `{person(joey), male(joey), bachelor(joey)}` + 2. `{person(joey), female(joey)}` + + +```prolog +-a. +not a. +% +% { -a } +% +-a. +a. +% +% UNSAT. +% +not a. +a. +% +% UNSAT +% +%---------------------------------------- +% +a. +%% Answer: 1 +%% a +%% SATISFIABLE +% +% There is (only) one (stable) model: {a} +% +%---------------------------------------- +% +-a. +%% Answer: 1 +%% -a +%% SATISFIABLE +% +% Same as above. +% +%---------------------------------------- +% +--a. +%% *** ERROR: (clingo): parsing failed +% +% WTF? +% +%---------------------------------------- +% +not a. +%% Answer: 1 +%% +%% SATISFIABLE +% +% ie there is (only) one (stable) model: {} +% +% This program states that there is no information. +% In particular, there is no information about a. +% Therefore there are no provable atoms. +% Hence the empty set is a stable model. +% +%---------------------------------------- +% +not not a. +%% UNSATISFIABLE +% +% ie no models. Because +% 1. No model can contain ~p. +% 2. Any model contains all the facts. +% 3. Suppose X is a model. +% 4. Since ~~a is a fact, by 2, ~~a ∈ X. +% 5. But, by 1, ~~a ∉ X. +% 6. Therefore there are no models. +% +%---------------------------------------- +% +not -a. +%% Answer: 1 +%% +%% SATISFIABLE +% +% Same as ~a. +% +%---------------------------------------- +% +b. +a;-a. +not a :- b. +% Answer: 1 +% b -a +% SATISFIABLE +% +% 1. Any model must contain b (fact b). +% 2. Any models entails ~a (rule not a :- b.). +% 3. Any model must contain one of a or ¬a (rule a;-a). +% 4. No model can contain both a and ~a. +% 5. Therefore any model must contain {b, ¬a}, which is stable. +% +% Q: Why ~a does not contradicts -a +% A: Not sure. Maybe because "~a" states that no model can contain a but says nothing about ¬a. +% +%---------------------------------------- +% +b. +a;c. +% Answer: 1 +% b c +% Answer: 2 +% b a +% SATISFIABLE +% +% 1. Any model must have b. +% 2. Any model must have one of a or c. +% 3. No model with both a and c is minimal because either one satisfies a;c +``` + +- Why is the double strong negation, `--a`, a syntax error but the double naf, `not not a` is not? + +#### Definitions and basic propositions +1. Let $\cal{A}$ be a **set of ground atoms**. +2. A **normal rule** $r$ has the form $a \leftarrow b_1, \ldots, b_m, \sim c_1, \ldots, \sim c_n$ with $0 \leq m \leq n$. + - _Intuitively,_ the head $a$ is true if **each one of the $b_i$ has a proof** and **none of the $c_j$ has a proof**. +3. A **program** is a finite set of rules. +4. The **head** of the rule is $\text{head}(r) = a$; The **body** is $\text{body}(r) = \left\lbrace b_1, \ldots, b_m, \sim c_1, \ldots, \sim c_n \right\rbrace$. +5. A **fact** is a rule with empty body and is simply denoted $a$. +6. A **literal** is an atom $a$ or the default negation $\sim a$ of an atom. +7. Let $X$ be a set of literals. $X^+ = X \cap \cal{A}$ and the $X^- = \left\lbrace p\middle| \sim p \in X\right\rbrace$. +9. The set of atoms that occur in program $P$ is denoted $\text{atom}(P)$. Also $\text{body}(P) = \left\lbrace \text{body}(r)~\middle|~r \in P\right\rbrace$. At last, $\text{body}_P(a) = \left\lbrace \text{body}(r)~\middle|~r \in P \wedge \text{head}(r) = a\right\rbrace$. +10. A **model** of the program $P$ is a set of ground atoms $X \subseteq \cal{A}$ such that, for each rule $r \in P$, $$\text{body}^+(r) \subseteq X \wedge \text{body}^-(r) \cap X = \emptyset \to \text{head}(r) \in X.$$ +8. A rule $r$ is **positive** if $\text{body}(r)^- = \emptyset$; A program is positive if all its rules are positive. +11. _A positive program has an unique $\subseteq$-minimal model._ **Is this the link to prolog?** +12. The **reduct** of a formula $f$ relative to $X$ is the formula $f^X$ that results from $f$ replacing each maximal sub-formula _not satisfied by $X$_ by $\bot$. +13. The **reduct** of program $P$ relative to $X$ is $$P^X = \left\lbrace \text{head}(r) \leftarrow \text{body}^+(r) \middle| r \in P \wedge \text{body}^-(r) \cap X = \emptyset \right\rbrace.$$ Thus $P^X$ results from + 1. Remove every rule with a naf literal $\sim a$ where $a \in X$. + 2. Remove the naf literals of the remaining rules. +14. Since $P^X$ is a positive program, it has a unique $\subseteq$-minimal model. +15. $X$ is a **stable model** of $P$ if $X$ is the $\subseteq$-minimal model of $P^X$. +16. **Alternatively,** let ${\cal C}$ be the **consequence operator**, that yields the smallest model of a positive program. A **stable model** $X$ is a solution of $${\cal C}\left(P^X\right) = X.$$ + - _negative literals must only be true, while positive ones must also be provable._ +17. _A stable model is $\subseteq$-minimal but not the converse._ +18. _A positive program has a unique stable model, its smallest model._ +19. _If $X,Y$ are stable models of a normal program then $X \not\subset Y$._ +20. _Also, $X \subseteq {\cal C}(P^X) \subseteq \text{head}(P^X)$._ + +## ASP Programming Strategies + +- **Elimination of unnecessary combinatorics.** The number of grounded instances has an huge impact on performance. Rules can be used as "pre-computation" steps. +- **Boolean Constraint Solving.** This is at the core of the **solving** step, e.g. `clasp`. + +## ASP vs. Prolog + +- The different number of stable models lies precisely at the core difference between Prolog and ASP. **In Prolog, the presence of programs with negation that do not have a unique stable model cause trouble and the SLDNF resolution does not terminate on them [17]**. However, ASP embraces the disparity of stable models and treats the stable models of the programs as solutions to a given search program (from [Prolog and Answer Set Programming: Languages in Logic Programming](https://silviacasacuberta.files.wordpress.com/2020/07/final_paper.pdf) ) +- Prolog programs may not terminate (`p :- \+ p.`); ASP "programs" always terminate (`p :- not p.` has zero solutions). +- ASP doesn't allow function symbols; Prolog does. + + +## References + +1. Martin Gebser, Roland Kaminski, Benjamin Kaufmann, Torsten Schaub - Answer Set Solving in Practice-Morgan & Claypool (2013) +2. [Potassco, clingo and gringo](https://potassco.org/): There are two major approaches to integrating probabilistic reasoning into logical representations: **distribution semantics** and **maximum entropy**. + +> - Is there a **sound interpretation of ASP**, in particular of **stable models**, to any of the two approaches above? +> - Under such interpretation, **what probabilistic problems can be addressed?** MARG? MLE? MAP? Decision? +> - **What is the relation to other logic and uncertainty approaches?** Independent Choice Logic? Abduction? Stochastic Logic Programs? etc. + + +## Maximum Entropy Summary + +> ME approaches annotate uncertainties only at the level of a logical theory. That is, they assume that the predicates in the BK are labelled as either true or false, but the label may be incorrect. + +These approaches are not based on logic programming, but rather on first-order logic. Consequently, the underlying semantics are different: rather than consider proofs, **these approaches consider models or groundings of a theory**. + +This difference primarily changes what uncertainties represent. For instance, Markov Logic Networks (MLN) represent programs as a set of weighted clauses. The weights in MLN do not correspond to probabilities of a formula being true but, intuitively, to a log odds between a possible world (an interpretation) where the clause is true and a world where the clause is false. + +## Distribution Semantics + +> DS approaches explicitly annotate uncertainties in BK. To allow such annotation, they extend Prolog with two primitives for stochastic execution: probabilistic facts and annotated disjunctions. + +Probabilistic facts are the most basic stochastic primitive and they take the form of logical facts labelled with a probability p. **Each probabilistic fact represents a Boolean random variable that is true with probability p and false with probability 1 − p.** _This is very close to facts in ASP. A "simple" syntax extension would be enough to capture probability annotations. **What about the semantics of such programs?**_ + +Whereas probabilistic facts introduce non-deterministic behaviour on the level of facts, annotated disjunctions introduce non-determinism on the level of clauses. Annotated disjunctions allow for multiple literals in the head, where only one of the head literals can be true at a time. + +### Core Distribution Semantics + +- Let $F$ be a set of **grounded probabilistic facts** and $P:F \to \left[0, 1 \right]$. + +> For example, `F` and `P` result from +> ```prolog +> 0.9::edge(a,c). +> 0.7::edge(c,b). +> 0.6::edge(d,c). +> 0.9::edge(d,b). +> ``` + +- **Facts are assumed marginally independent:** $$\forall a,b \in F, P(a \wedge b) = P(a)P(b).$$ + +- The **probability of $S \subseteq F$** is $$P_F(S) = \prod_{f \in S} P(f) \prod_{f \not\in S} \left(1 - P(f) \right).$$ + +- Let $R$ be a set of **definite clauses** defining further (new) predicates. + +> For example, `R` is +> ```prolog +> path(X,Y) :- edge(X,Y). +> path(X,Y) :- edge(X,Z), path(Z,Y). +> ``` + +- Any combination $S \cup R$ has an **unique least Herbrand model**, $$W = M(S \cup R).$$ + +- **That uniqueness fails for stable models.** Exactly why? - What is the relation of stable models and least Herbrand models? + +- The set of ground facts $S$ is an **explanation** of the world $W = M(S \cup R)$. A world might have multiple explanations. In ASP a explanation can entail 0, 1 or more worlds. + +- The **probability of a possible world** $W$ is +$$P(W) = \sum_{S \subseteq F :~W=M(S\cup R)} P_F(S).$$ + +- The **probability of a ground proposition** $p$ is (defined as) the probability that $p$ has a proof: $$P(p) = \sum_{S :~ S\cup R ~\vdash~ p} P_F(S) = \sum_{W :~ p\in W} P(W).$$ + +- A proposition may have many proofs in a single world $M(S\cup W)$. Without further guarantees, the probabilities of those proofs cannot be summed. The definition above avoids this problem. + + +> For example, a proof of `path(a,b)` employs (only) the facts `edge(a,c)` and `edge(c,b)` _i.e._ these facts are an explanation of `path(a,b)`. Since these facts are (marginally) independent, **the probability of the proof** is $$\begin{aligned}P(\text{path}(a, b)) & = P(\text{edge}(a,c) \wedge\text{edge}(c,b)) \\&= P(\text{edge}(a,c)) \times P(\text{edge}(c,b)) \\ &= 0.9 \times 0.7 \\ &= 0.63. \end{aligned}$$ +> This is the only proof of `path(a,b)` so $P(\text{path}(a,b)) = 0.63$. +> +> On the other hand, since `path(d,b)` has two explanations, `edge(d,b)` and `edge(d,c), edge(c,b)`: $$\begin{aligned} P(\text{path}(d,b)) & = P\left(\text{edge}(d,c) \vee \left(\text{edge}(d,c)\wedge\text{edge}(c,b)\right)\right) \\ &= 0.9 + 0.6 \times 0.7 - 0.9 \times 0.6 \times 0.7 \\ &= 0.942.\end{aligned}$$ + +- With this **semantics of the probability of a possible world**, the probability of an arbitrary proposition is still hard to compute, because of the _disjunct-sum_ problem: **An explanation can have many worlds.** Since the probability is computed via the explanation, if there are many models for a single explanation, **how to assign probability to specific worlds within the same explanation?** + +> Because computing the probability of a fact or goal under the distribution semantics is hard, systems such as Prism [4] and Probabilistic Horn Abduction (PHA) [8] impose additional restrictions that can be used to improve the efficiency of the inference procedure. +> +> **The key assumption is that the explanations for a goal are mutually exclusive, which overcomes the disjoint-sum problem.** If the different explanations of a fact do not overlap, then its probability is simply the sum of the probabilities of its explanations. This directly follows from the inclusion-exclusion formulae as under the exclusive-explanation assumption the conjunctions (or intersections) are empty (_Statistical Relational Learning_, Luc De Raedt and Kristian Kersting, 2010) +> +> **This assumption/restriction is quite _ad-hoc_ and overcoming it requires further inquiry.** + +- Reading Fabio Gagliardi Cozman, Denis Deratani Mauá, _The joy of Probabilistic Answer Set Programming: Semantics - complexity, expressivity, inference_ (2020) gave a big boost securing my initial intuition. + +- The problem can be illustrated with disjunctive clauses, such as the one in the following example. + +```prolog +a ; -a. % prob(a) = 0.7 +b ; c :- a. +``` + +- More specifically, in the example above, **the explanation `a` entails two possible worlds, `ab` and `ac`. How to assign probability of each one?** + +### Assigning Probabilities on "Multiple Worlds per Explanation" Scenarios + +#### Clause Annotations + +> Assign a probability to each case in the head of the clause. For example, annotate $P(b|a) = 0.8$. + +This case needs further study on the respective consequences, specially concerning the joint probability distribution. + +- In particular, $P(b|a) = 0.8$ entails $P(\neg b | a) = 0.2$. But $\neg b$ is not in any world. +- Also, unless assumed the contrary, the independence of $b$ and $c$ is unknown. + +#### Learn from Observations + +> Leave the probabilities uniformly distributed; update them from observation. + +Under this approach, how do observations affect the assigned probabilities? + +- In particular, how to update the probabilities of the worlds `a b` and `a c` given observations such as `a`, `b`, `ab`, `a-b`, `-ab` or `abc`? + 1. Define a criterium to decide if an observation $z$ is compatible world $w$. For example, $z \subseteq w$. + 2. Define the probability of a world from on the explanation probability and a count of **compatible observations**. + +#### Leave One World Out + +> Define a **compatibility criterium** for observations and worlds, add another world and update its probability on incompatible observations; The probability of this world measures the model+sensors limitations. diff --git a/text/summaries/00_DistSem.pdf b/text/summaries/00_DistSem.pdf new file mode 100644 index 0000000..b504547 Binary files /dev/null and b/text/summaries/00_DistSem.pdf differ diff --git a/text/summaries/00_ILP.md b/text/summaries/00_ILP.md new file mode 100644 index 0000000..0cbcb0a --- /dev/null +++ b/text/summaries/00_ILP.md @@ -0,0 +1,74 @@ +# Inductive Logic Programming + +> Inductive logic programming (ILP) is a form of machine learning (ML). As with +other forms of ML, the goal of ILP is to induce a hypothesis that generalises training examples. However, whereas most forms of ML use vectors/tensors to represent data (examples and hypotheses), ILP uses logic programs (sets of logical rules). Moreover, whereas most forms of ML learn functions, ILP learns relations. + +## Why ILP? + +- **Data efficiency.** Many forms of ML are notorious for their inability to generalise from small numbers of training examples, notably deep learning. By contrast, ILP can induce hypotheses from small numbers of examples, often from a single example. +- **Background knowledge.** ILP learns using BK represented as a logic program. Moreover, because hypotheses are symbolic, hypotheses can be added the to BK, and thus ILP systems naturally support lifelong and transfer learning. +- **Expressivity.** Because of the expressivity of logic programs, ILP can learn complex relational theories. Because of the symbolic nature of logic programs, ILP can reason about hypotheses, which allows it to learn optimal programs. +- **Explainability.** Because of logic’s similarity to natural language, logic programs can be easily read by humans, which is crucial for explainable AI. + +## Recent Advances + +- Search: Meta-level +- Recursion: Yes +- Predicate Invention: Limited +- Hypotheses: Higher-order; ASP +- Optimality: Yes +- Technology: Prolog; ASP; NNs + +### Review + +- **Search.** The fundamental ILP problem is to efficiently search a large hypothesis space. Most older ILP approaches search in either a top-down or bottom-up fashion. A third new search approach has recently emerged called meta-level ILP. + - **Top-down** approaches start with a general hypothesis and then specialise it. + - **Bottom-up** approaches start with the examples and generalise them. + - **Meta-level.** (Most) approaches encode the ILP problem as a program that reasons about programs. +- **Recursion.** Learning recursive programs has long been considered a difficult problem for ILP. The power of recursion is that an infinite number of computations can be described by a finite recursive program. + - Interest in recursion has resurged with the introduction of meta-interpretive learning (MIL) and the MIL system Metagol. The key idea of MIL is to use metarules, or program templates, to restrict the form of inducible programs, and thus the hypothesis space. A metarule is a higher-order clause. Following MIL, many meta-level ILP systems can learn recursive programs. With recursion, ILP systems can now generalise from small numbers of examples, often a single example. Moreover, the ability to learn recursive programs has opened up ILP to new application areas. +- **Predicate invention.** A key characteristic of ILP is the use of BK. BK is similar to features used in most forms of ML. However, whereas features are tables, BK contains facts and rules (extensional and intensional definitions) in the form of a logic program. + - Rather than expecting a user to provide all the necessary BK, the goal of predicate invention (PI) is for an ILP system to automatically invent new auxiliary predicate symbols. Whilst PI has attracted interest since the beginnings of ILP, and has subsequently been repeatedly stated as a major challenge, most ILP systems do not support it. + - Several PI approaches try to address this challenge: Placeholders, Metarules, Pre/post-processing, Lifelong Learning. + - The aforementioned techniques have improved the ability of ILP to invent high-level concepts. However, PI is still difficult and there are many challenges to overcome. The challenges are that (i) many systems struggle to perform PI at all, and (ii) those that do support PI mostly need much user-guidance, metarules to restrict the space of invented symbols or that a user specifies the arity and argument types of invented symbols. +- ILP systems have traditionally induced definite and normal logic programs, typically represented as Prolog programs. A recent development has been to use different **hypothesis representations**. + - **Datalog** is a syntactical subset of Prolog which disallows complex terms as arguments of predicates and imposes restrictions on the use of negation. The general motivation for reducing the expressivity of the representation language from Prolog to Datalog is to allow the problem to be encoded as a satisfiability problem, particularly to leverage recent developments in SAT and SMT. + - **Answer Set Programming** (ASP) is a logic programming paradigm based on the stable model semantics of normal logic programs that can be implemented using the latest advances in SAT solving technology. + - When learning Prolog programs, the procedural aspect of SLD-resolution must be taken into account. By contrast, as ASP is a truly declarative language, no such consideration need be taken into account when learning ASP programs. Compared to Datalog and Prolog, ASP supports additional language constructs, such as disjunction in the head of a clause, choice rules, and hard and weak constraints. + - **A key difference between ASP and Prolog is semantics.** A definite logic program has only one model (the least Herbrand model). By contrast, an ASP program can have one, many, or even no stable models (answer sets). Due to its non-monotonicity, ASP is particularly useful for expressing common-sense reasoning. + - Approaches to learning ASP programs can mostly be divided into two categories: **brave learners**, which aim to learn a program such that at least one answer set covers the examples, and **cautious learners**, which aim to find a program which covers the examples in all answer sets. + - **Higher-order programs** where predicate symbols can be used as terms. + - **Probabilistic logic programs.** A major limitation of logical representations, such as Prolog and its derivatives, is the implicit assumption that the BK is perfect. This assumption is problematic if data is noisy, which is often the case. + - **Integrating probabilistic reasoning into logical representations** is a principled way to handle such uncertainty in data. This integration is the focus of statistical relational artificial intelligence (StarAI). In essence, StarAI hypothesis representations extend BK with probabilities or weights indicating the degree of confidence in the correctness of parts of BK. Generally, StarAI techniques can be divided in two groups: _distribution representations_ and _maximum entropy_ approaches. + - **Distribution semantics** approaches explicitly annotate uncertainties in BK. To allow such annotation, they extend Prolog with two primitives for stochastic execution: probabilistic facts and annotated disjunctions. Probabilistic facts are the most basic stochastic primitive and they take the form of logical facts labelled with a probability p. Each probabilistic fact represents a Boolean random variable that is true with probability p and false with probability 1 − p. Whereas probabilistic facts introduce non-deterministic behaviour on the level of facts, annotated disjunctions introduce non-determinism on the level of clauses. Annotated disjunctions allow for multiple literals in the head, where only one of the head literals can be true at a time. + - **Maximum entropy** approaches annotate uncertainties only at the level of a logical theory. That is, they assume that the predicates in the BK are labelled as either true or false, but the label may be incorrect. These approaches are not based on logic programming, but rather on first-order logic. Consequently, the underlying semantics are different: rather than consider proofs, these approaches consider models or groundings of a theory. This difference primarily changes what uncertainties represent. For instance, Markov Logic Networks (MLN) represent programs as a set of weighted clauses. The weights in MLN do not correspond to probabilities of a formula being true but, intuitively, to a log odds between a possible world (an interpretation) where the clause is true and a world where the clause is false. + - The techniques from learning such probabilistic programs are typically direct extensions of ILP techniques. +- **Optimality.** There are often multiple (sometimes infinitely many) hypotheses that explain the data. Deciding which hypothesis to choose has long been a difficult problem. + - Older ILP systems were not guaranteed to induce optimal programs, where optimal typically means with respect to the size of the induced program or the coverage of examples. A key reason for this limitation was that most search techniques learned a single clause at a time, leading to the construction of sub-programs which were sub-optimal in terms of program size and coverage. + - Newer ILP systems try to address this limitation. As with the ability to learn recursive programs, the main development is to take a global view of the induction task by using meta-level search techniques. In other words, rather than induce a single clause at a time from a single example, the idea is to induce multiple clauses from multiple examples. + - The ability to learn optimal programs opens up ILP to new problems. For instance, learning efficient logic programs has long been considered a difficult problem in ILP, mainly because there is no declarative difference between an efficient program and an inefficient program. +- **Technologies.** Older ILP systems mostly use Prolog for reasoning. Recent work considers using different technologies. + - **Constraint satisfaction and satisfiability.** There have been tremendous recent advances in SAT. + - To leverage these advances, much recent work in ILP uses related techniques, notably ASP. The main motivations for using ASP are to leverage (i) the language benefits of ASP, and (ii) the efficiency and optimisation techniques of modern ASP solvers, which supports conflict propagation and learning. + - With similar motivations, other approaches encode the ILP problem as SAT or SMT problems. + - These approaches have been shown able to **reduce learning times** compared to standard Prolog-based approaches. However, some unresolved issues remain. A key issue is that most approaches **encode an ILP problem as a single (often very large) satisfiability problem**. These approaches therefore often struggle to scale to very large problems, although preliminary work attempts to tackle this issue. + - **Neural Networks.** With the rise of deep learning, several approaches have explored using gradient-based methods to learn logic programs. These approaches all **replace discrete logical reasoning with a relaxed version that yields continuous values** reflecting the confidence of the conclusion. +- **Applications.** + - **Scientific discovery.** Perhaps the most prominent application of ILP is in scientific discovery: identify and predict ligands (substructures responsible for medical activity) and infer missing pathways in protein signalling networks; ecology. + - **Program analysis.** learning SQL queries; programming language semantics, and code search. + - **Robotics.** Robotics applications often require incorporating domain knowledge or imposing certain requirements on the learnt programs. + - **Games.** Inducing game rules has a long history in ILP, where chess has often been the focus + - **Data curation and transformation.** Another successful application of ILP is in data curation and transformation, which is again largely because ILP can learn executable programs. There is much interest in this topic, largely due to success in synthesising programs for end-user problems, such as string transformations. Other transformation tasks include extracting values from semi-structured data (e.g. XML files or medical records), extracting relations from ecological papers, and spreadsheet manipulation. + - **Learning from trajectories.** Learning from interpretation transitions (LFIT) automatically constructs a model of the dynamics of a system from the observation of its state transitions. LFIT has been applied to learn biological models, like Boolean Networks, under several semantics: memory-less deterministic systems, and their multi-valued extensions. The Apperception Engine explain sequential data, such as cellular automata traces, rhythms and simple nursery tunes, image occlusion tasks, game dynamics, and sequence induction intelligence tests. Surprisingly, can achieve human-level performance on the sequence induction intelligence tests in the zero-shot setting (without having been trained on lots of other examples of such tests, and without hand-engineered knowledge of the particular setting). At a high level, these systems take the unique selling point of ILP systems (the ability to strongly generalise from a handful of data), and apply it to the self-supervised setting, producing an explicit human-readable theory that explains the observed state transitions. +- **Limitations and future research.** + - **Better systems.** A problem with ILP is the lack of well engineered tools. They state that whilst over 100 ILP systems have been built, less than a handful of systems can be meaningfully used by ILP researchers. By contrast, driven by industry, other forms of ML now have reliable and well-maintained implementations, which has helped drive research. A frustrating issue with ILP systems is that they use many different language biases or even different syntax for the same biases. _For ILP to be more widely adopted both inside and outside of academia, we must develop more standardised, user-friendly, and better-engineered tools._ + - **Language biases.** One major issue with ILP is choosing an appropriate language bias. Even for ILP experts, determining a suitable language bias is often a frustrating and time-consuming process. We think the need for an almost perfect language bias is severely holding back ILP from being widely adopted. _We think that an important direction for future work in ILP is to develop techniques for automatically identifying suitable language biases._ This area of research is largely under-researched. + - **Better datasets.** Interesting problems, alongside usable systems, drive research and attract interest in a research field. This relationship is most evident in the deep learning community which has, over a decade, grown into the largest AI community. This community growth has been supported by the constant introduction of new problems, datasets, and well-engineered tools. ILP has, unfortunately, failed to deliver on this front: most research is still evaluated on 20-year old datasets. Most new datasets that have been introduced often come from toy domains and are designed to test specific properties of the introduced technique. _We think that the ILP community should learn from the experiences of other AI communities and put significant efforts into developing datasets that identify limitations of existing methods as well as showcase potential applications of ILP._ + - **Relevance.** New methods for predicate invention have improved the abilities of ILP systems to learn large programs. Moreover, these techniques raise the potential for ILP to be used in lifelong learning settings. However, inventing and acquiring new BK could lead to a problem of too much BK, which can overwhelm an ILP system. On this issue, a key under-explored topic is that of relevancy. _Given a new induction problem with large amounts of BK, how does an ILP system decide which BK is relevant?_ One emerging technique is to train a neural network to score how relevant programs are in the BK and to then only use BK with the highest score to learn programs. Without efficient methods of relevance identification, it is unclear how efficient lifelong learning can be achieved. + - **Handling mislabelled and ambiguous data.** A major open question in ILP is how best to handle noisy and ambiguous data. Neural ILP systems are designed from the start to robustly handle mislabelled data. Although there has been work in recent years on designing ILP systems that can handle noisy mislabelled data, there is much less work on the even harder and more fundamental problem of designing ILP systems that can handle raw ambiguous data. ILP systems typically assume that the input has already been preprocessed into symbolic declarative form (typically, a set of ground atoms representing positive and negative examples). But real-world input does not arrive in symbolic form. _For ILP systems to be widely applicable in the real world, they need to be redesigned so they can handle raw ambiguous input from the outset._ + - **Probabilistic ILP.** Real-world data is often noisy and uncertain. Extending ILP to deal with such uncertainty substantially broadens its applicability. While StarAI is receiving growing attention, **learning probabilistic programs from data is still largely under-investigated due to the complexity of joint probabilistic and logical inference.** When working with probabilistic programs, we are interested in the probability that a program covers an example, not only whether the program covers the example. Consequently, probabilistic programs need to compute all possible derivations of an example, not just a single one. Despite added complexity, probabilistic ILP opens many new challenges. Most of the existing work on probabilistic ILP considers the minimal extension of ILP to the probabilistic setting, by assuming that either (i) BK facts are uncertain, or (ii) that learned clauses need to model uncertainty. **These assumptions make it possible to separate structure from uncertainty and simply reuse existing ILP techniques.** Following this minimal extension, the existing work focuses on discriminative learning in which the goal is to learn a program for a single target relation. However, a grand challenge in probabilistic programming is generative learning. That is, learning a program describing a generative process behind the data, not a single target relation. **Learning generative programs is a significantly more challenging problem, which has received very little attention in probabilistic ILP.** + - **Explainability.** Explainability is one of the claimed advantages of a symbolic representation. Recent work evaluates the comprehensibility of ILP hypotheses using Michie’s framework of ultra-strong machine learning, where a learned hypothesis is expected to not only be accurate but to also demonstrably improve the performance of a human being provided with the learned hypothesis. [Some work] empirically demonstrate improved human understanding directly through learned hypotheses. _However, more work is required to better understand the conditions under which this can be achieved, especially given the rise of PI._ + +## Bibliography + +1. Inductive logic programming at 30 \ No newline at end of file diff --git a/text/summaries/00_ILP.pdf b/text/summaries/00_ILP.pdf new file mode 100644 index 0000000..c9295eb Binary files /dev/null and b/text/summaries/00_ILP.pdf differ diff --git a/text/summaries/00_PASP.pdf b/text/summaries/00_PASP.pdf new file mode 100644 index 0000000..ab358a7 Binary files /dev/null and b/text/summaries/00_PASP.pdf differ diff --git a/text/summaries/00_PASP_credal.md b/text/summaries/00_PASP_credal.md new file mode 100644 index 0000000..1e56cbb --- /dev/null +++ b/text/summaries/00_PASP_credal.md @@ -0,0 +1,143 @@ +# Probabilistic Answer Set Programming + +## Non-stratified programs + +> Minimal example of **non-stratified program**. + +The following annotated LP, with clauses $c_1, c_2, c_3$ respectively, is non-stratified (because has a cycle with negated arcs) but no head is disjunctive: +```prolog +0.3::a. % c1 +s :- not w, not a. % c2 +w :- not s. % c3 +``` + +This program has three stable models: +$$ +\begin{aligned} +m_1 &= \set{ a, w } \cr +m_2 &= \set{ \neg a, s } \cr +m_3 &= \set{ \neg a, w } +\end{aligned} +$$ + +The probabilistic clause `0.3::a.` defines a **total choice** +$$ +\Theta = \set{ + \theta_1 = \set{ a }, + \theta_2 = \set{ \neg a } +} +$$ +such that +$$ +\begin{aligned} +P(\Theta = \set{ a }) &= 0.3\cr +P(\Theta = \set{ \neg a }) &= 0.7 \cr +\end{aligned} +$$ + +> While it is natural to extend $P( m_1 ) = 0.3$ from $P(\theta_1) = 0.3$ there is no clear way to assign $P(m_2), P(m_3)$ since both models result from the total choice $\theta_2$. + + + +Under the **CWA**, $\sim\!\!q \models \neg q$, so $c_2, c_3$ induce probabilities: + +$$ +\begin{aligned} +p_a &= P(a | \Theta) \cr +p_s &= P(s | \Theta) &= (1 - p_w)(1 - p_a) \cr +p_w &= P(w | \Theta) &= (1 - p_w) +\end{aligned} +$$ +from which results +$$ +\begin{equation} +p_s = p_s(1 - p_a). +\end{equation} +$$ + +So, if $\Theta = \theta_1 = \set{ a }$ (one stable model): + +- We have $p_a = P(a | \Theta = \set{ a }) = 1$. +- Equation (1) becomes $p_s = 0$. +- From $p_w = 1 - p_s$ we get $P(w | \Theta) = 1$. + +and if $\Theta = \theta_2 = \set{ \neg a }$ (two stable models): + +- We have $p_a = P(a | \Theta = \set{ \neg a }) = 0$. +- Equation (1) becomes $p_s = p_s$; Since we know nothing about $p_s$, we let $p_s = \alpha \in \left[0, 1\right]$. +- We still have the relation $p_w = 1 - p_s$ so $p_w = 1 - \alpha$. + +We can now define the **marginals** for $s, w$: +$$ +\begin{aligned} +P(s) &=\sum_\theta P(s|\theta)P(\theta)= 0.7\alpha \cr +P(w) &=\sum_\theta P(s|\theta)P(\theta)= 0.3 + 0.7(1 - \alpha) \cr +\alpha &\in\left[ 0, 1 \right] +\end{aligned} +$$ + +> The parameter $\alpha$ not only **expresses insufficient information** to sharply define $p_s$ but also **relates** $p_s$ and $p_w$. + +## Disjunctive heads + +> Minimal example of **disjunctive heads** program. + +Consider this LP + +```prolog +0.3::a. +b ; c :- a. +``` + +with three stable models: +$$ +\begin{aligned} +m_1 &= \set{ \neg a } \cr +m_2 &= \set{ a, b } \cr +m_3 &= \set{ a, c } +\end{aligned} +$$ + +Again, $P(m_1) = 0.3$ is quite natural but there are no clear assignments for $P(m_2), P(m_3)$. + +The total choices here are +$$ +\Theta = \set{ + \theta_1 = \set{ a } + \theta_2 = \set{ \neg a } +} +$$ +such that +$$ +\begin{aligned} +P(\Theta = \set{ a }) &= 0.3\cr +P(\Theta = \set{ \neg a }) &= 0.7 \cr +\end{aligned} +$$ +and the LP induces +$$ +P(b \vee c | \Theta) = P(a | \Theta). +$$ + +Since the disjunctive expands as +$$ +\begin{equation} +P(b \vee c | \Theta) = P(b | \Theta) + P( c | \Theta) - P(b \wedge c | \Theta) +\end{equation} +$$ +and we know that $P(b \vee c | \Theta) = P(a | \Theta)$ we need two independent parameters, for example +$$ +\begin{aligned} +P(b | \Theta) &= \beta \cr +P(c | \Theta) &= \gamma \cr +\end{aligned} +$$ +where +$$ +\begin{aligned} + \alpha & \in \left[0, 0.3\right] \cr + \beta & \in \left[0, \alpha\right] +\end{aligned} +$$ + +This example also calls for reconsidering the CWA since it entails that **we should assume that $b$ and $c$ are conditionally independent given $a$.** \ No newline at end of file diff --git a/text/summaries/00_POTASSCO.md b/text/summaries/00_POTASSCO.md new file mode 100644 index 0000000..a53ea17 --- /dev/null +++ b/text/summaries/00_POTASSCO.md @@ -0,0 +1,13 @@ +# Potassco + +> [Potassco](https://potassco.org/), the Potsdam Answer Set Solving Collection, bundles tools for Answer Set Programming developed at the University of Potsdam. + +- [The Potassco Guide](https://github.com/potassco/guide) + +## clingo + +> Current answer set solvers work on variable-free programs. Hence, a grounder is needed that, given an input program with first-order variables, computes an equivalent ground (variable-free) program. gringo is such a grounder. Its output can be processed further with clasp, claspfolio, or clingcon. +> +> [clingo](https://potassco.org/clingo/) combines both gringo and clasp into a monolithic system. This way it offers more control over the grounding and solving process than gringo and clasp can offer individually - e.g., incremental grounding and solving. + +- [Python module list](https://potassco.org/clingo/python-api/current/) \ No newline at end of file diff --git a/text/summaries/00_PROB.md b/text/summaries/00_PROB.md new file mode 100644 index 0000000..c3ac219 --- /dev/null +++ b/text/summaries/00_PROB.md @@ -0,0 +1,41 @@ +# Probability Problems + +>- What are the general tasks we expect to solve with probabilistic programs? +> - The **MAP** task is the one with best applications. It is also the hardest to compute. +> - **MLE** is the limit case of **MAP**. Has simpler computations but overfits the data. + +## Background + +- **Conditional Probability** $$P(A, B) = P(B | A) P(A).$$ +- **Bayes Theorem** $$P(B | A) = \frac{P(A | B) P(B)}{P(A)}.$$ +- **For maximization tasks** $$P(B | A) \propto P(A | B) P(B).$$ +- **Marginal** $$P(A) = \sum_b P(A,b).$$ +- In $P(B | A) \propto P(A | B) P(B)$, if the **posterior** $P(B | A)$ and the **prior** $P(B)$ follow distributions of the same family, $P(B)$ is a **conjugate prior** for the **likelihood** $P(A | B)$. +- **Density Estimation:** Estimate a joint probability distribution from a set of observations; Select a probability distribution function and the parameters that best explains the distributions of the observations. + +## MLE: Maximum Likelihood Estimation + +> Given a probability **distribution** $d$ and a set of **observations** $X$, find the distribution **parameters** $\theta$ that maximize the **likelihood** (_i.e._ the probability of those observations) for that distribution. +> +> **Overfits the data:** high variance of the parameter estimate; sensitive to random variations in the data. Regularization with $P(\theta)$ leads to **MAP**. + +Given $d, X$, find +$$ +\hat{\theta}_{\text{MLE}}(d,X) = \arg_{\theta} \max P_d(X | \theta). +$$ + +## MAP: Maximum A-Priori + +> Given a probability **distribution** $d$ and a set of **observations** $X$, find the distribution **parameters** $\theta$ that best explain those observations. + +Given $d, X$, find +$$ +\hat{\theta}_{\text{MAP}}(d, X) = \arg_{\theta}\max P(\theta | X). +$$ + +Using $P(A | B) \propto P(B | A) P(A)$, +$$\hat{\theta}_{\text{MAP}}(d, X) = \arg_{\theta} \max P_d(X | \theta) P(\theta)$$ + +Variants: +- **Viterbi algorithm:** Find the most likely sequence of hidden states (on HMMs) that results in a sequence of observed events. +- **MPE: Most Probable Explanation** and **Max-sum, Max-product algorithms:** Calculates the marginal distribution for each unobserved node, conditional on any observed nodes; Defines the most likely assignment to all the random variables that is consistent with the given evidence. diff --git a/text/summaries/00_Z3.md b/text/summaries/00_Z3.md new file mode 100644 index 0000000..c755c66 --- /dev/null +++ b/text/summaries/00_Z3.md @@ -0,0 +1,14 @@ +# Z3 - An SMT solver + +> `Z3` is a theorem prover from Microsoft Research. +> **However, `Potassco` seems more to the point.** + +## Introduction + +An Answer Set Program can be solved translating it into a SAP problem. + +## References + +1. [Programming Z3](https://theory.stanford.edu/~nikolaj/programmingz3.html): . +2. [Julia Package](https://www.juliapackages.com/p/z3): . +3. [Repository](https://github.com/Z3Prover): . \ No newline at end of file diff --git a/text/summaries/00_pasp.md b/text/summaries/00_pasp.md new file mode 100644 index 0000000..f64edbc --- /dev/null +++ b/text/summaries/00_pasp.md @@ -0,0 +1,18 @@ +# Probabilistic ASP + +## Weighted Approach + +1. **Total Choices.** $N(C = x) = \prod_{a \in x} w_a \prod_{\neg a \in x} (1 - w_a)$. +2. **Stable Models.** $N(S = x | C = c) = \alpha_{x,c}$, + where the set of parameters $\alpha_{x,c}$ is such that: + $$ + \begin{cases} + \alpha_{x,c} \geq 0, & \forall c, x\cr + \alpha_{x,c} = 0, & \forall x \not\supseteq c \cr + \sum_{x} \alpha_{x,c} = 1, & \forall c. + \end{cases} + $$ +3. **Worlds.** $N(W = x)$ + 1. If $x$ is a _total choice_: $ + N(W = x) = \prod_{a \in x} w_a \prod_{\neg a \in x} (1 - w_a). + $$ \ No newline at end of file diff --git a/zugzwang.code-workspace b/zugzwang.code-workspace new file mode 100644 index 0000000..89e2e1a --- /dev/null +++ b/zugzwang.code-workspace @@ -0,0 +1,29 @@ +{ + "folders": [ + { + "path": "." + }, + { + "path": "../../../projects/contrib/dsd" + }, + { + "path": "../../../prog/contrib/zugzwang" + } + ], + "settings": { + "cSpell.words": [ + "biblatex", + "CREDAL", + "interpretability", + "println", + "stablecore", + "testset", + "uminus" + ], + "cSpell.enableFiletypes": [ + "latex" + ], + "aspLanguage.setConfig": "config.json", + "julia.environmentPath": "/home/fc/sci/projetos/zugzwang" + } +} \ No newline at end of file -- libgit2 0.21.2