From fa6d545dfec46fe1e228786a72a7ef410ca15c06 Mon Sep 17 00:00:00 2001 From: Naveen J <83631045+naveen-egov@users.noreply.github.com> Date: Thu, 2 Nov 2023 18:57:14 +0530 Subject: [PATCH] Develop (#297) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Hlm 2650 resource card multiround proximity (#283) * [hlm-2825]: Fix project selection error (#162) * Hlm 2742 and HLM 931 (#163) * [hlm-2742]: Beneficiary progress bar * [hlm-2742]: Report selection * [hlm-2742]: Fix overflows * [hlm-2742]: Intermittent * [hlm-2742]: Update transaction search model * [hlm-2742]: Intermittent * [hlm-2742]: Intermittent * [hlm-2742]: Fix report * [hlm-2742]: Fix recon additional details * [hlm-2742]: Fix localization * [hlm-2742]: [Revert this commit] * [hlm-2742]: Intermittent * [hlm-2742]: Fix * [hlm-2742]: Update report_details.dart * Revert "[hlm-2742]: [Revert this commit]" This reverts commit 8fd72d0b351630334eb59dae20a64f00a0d7b698. * [hlm-2742]: Fix report selection i18n * [hlm-2742]: Fix dependencies * [hlm-2742]: Update report_details.dart (#164) * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * Hlm 2547 locality fixes (#167) * added help icon * added call support * added checklist plugin * added help icon fixes * removed images * removed un-used code * modified json * added localization keys * [hlm-2547]: Fix address locality model * [hlm-2547]: Add locality for delivery intervention * added applogo * bug fixe s * added enum for beneficiary * added individual delivery * resolved * resolved commits * help icon and progress bar fixes * added id check * added lcoality for updates * added address id * fixed navigation issue * added stock min and max validation * updated validation * fixed address id issue * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2547]: Lints + fix build * [hlm-2547]: Fix * [hlm-2547]: Fix beneficiary type * [hlm-2547]: Pluralize tasks * [hlm-2547]: Pluralize beneficiaries * [hlm-2547]: Update search_households.dart * [hlm-2547]: Fix locality model * [hlm-2547]: Typo * [hlm-2547]: Fix target * [hlm-2547]: Fix target count * [hlm-2547]: Fix values * [hlm-2547]: Add launcher icons * [hlm-2547]: Fix manifest --------- Co-authored-by: Ajil Oommen Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * [hlm-2478]: Fix is deleted (#170) [hlm-2478]: Update models * [hlm-000]: Add generated files (#173) * [hlm-931]: Fix progress bar for non-distributor (#174) * Hlm 2861 fix offline downsync (#172) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2861]: Fix double enum import in tables * [hlm-2861]: Fixed scripts * [hlm-2861]: Fix down sync problem * [hlm-2861]: Fix no facility dialog on stock recon * [hlm-2861]: Fix lints * [hlm-000]: Build fix * added delete check (#177) * Hlm 2878 handle downsync failure (#175) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * Hlm 2879 firebase crashlytics (#178) * [hlm-2879]: Add package base * [hlm-2879]: Add ios bundle identifier * [hlm-2879]: Fix auth * [hlm-2879]: Update back_navigation_help_header.dart * [hlm-2879]: Check for context * [hlm-2879]: Intermittent * [hlm-2879]: Add firebase config * [hlm-2879]: Add crash enforcer * [hlm-2879]: Fix config * [hlm-2879]: Fix config * [hlm-000]: Update README.md (#179) * [hlm-000]: Update README.md * [hlm-000]: Update sync docs * Hlm 2977 profile update (#181) * added profile page * added user * added bloc * added update profile api integration * added loader * added localization codes * added error fallback * removed logs * bug fixes * added filters (#183) * HLM-3161:: Split Age into years and Months across the application (#184) * HLM-3161:: Split Age into years and Months across the application * Updated Date Conversion functions * Code commenting and minor UI fixes (#185) * Code commenting and minor UI fixes * HLM-3161:: Age Split in Table and css fixes for member card * Update app_initialization.dart * Update app_initialization.dart * Digit Text Form Field suffix icon constraints css fixes * Update auth.dart * HLM-1361:: Date Conversion from months to date fixes * Added trailing commas * Error message changes for DOB field * Error message changes for DOB field * HLM-3161:: Updated age calculator logic and added Date utils to digit components (#186) * Digit Date Utils added, and handled years and age end cases * Remove commented lines * Added code commenting for Date Utils and DOB Picker * Hlm 2876 auto sync (#176) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * added auto sync * fixed melos build issue * added tost message * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * removed logs * added filter bandwidth logic * added background service logic * intermetent commit * auto sync fixed * added isdeleted default value * added error handling * age issue fixed * added error handling * removed un-used code * resloved conflicts * removed duplicate * handled bad state * added retry count and row-version * added code comments * fixed typo and file renamed * removed un-used code * removed hard-coded credentials * typo fixes * added debouncing + filter checklist entity for sync-down * Updated Age logic in DateExtensions --------- Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov * added filter for stock recon (#188) * added filter for stock recon * removed un-used code * Updated Ade and months validations for DOB Picker (#189) * HLM-3161:: Added Generic error message for the DOB Picker and handled negative years and months validation (#191) * HLM-3161:: Negative months and years use cases validations added * HLM-3161:: Added Generic error message for the DOB Picker * HLM-3161:: Years and months conversion in Delivery intervention page * HLM-3161:: input formatter added for text field * bug fix for filter (#193) * bug fix for filter * removed un-used code * [fix] added dropdown value population (#194) * Hlm 2981 row version (#195) * resolved conflicts * resolved conflicts * added row-version schema * remove duplicate isar open * removed un-used file * added app version (#197) * added app version * added version * HLM-3161:: Age and Date of Birth Fixes (#199) * HLM-3161:: Age and Date of Birth Fixes * HLM-3161:: Age and Date of Birth Fixes * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * HLM-2850:: Gender value Others not retaining on Edit Fixes (#202) Co-authored-by: Naveen * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * HLM-1890:: If Default identifier is ID, "ID Number" field should be hidden from the UI. (#208) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * Hlm 3091 proximity based search (#190) * added filter for stock recon * removed un-used code * added fallback code * added query * enabled proximity bases search * modified the query * modfied the query * added clearing the search bar when proximity search is triggered * added filters * Update dart.yml (#200) * Update dart.yml * Update dart.yml * Update dart.yml * Update dart.yml * HLM-3379: Fixed proximity based search * Revert "HLM-3379: Fixed proximity based search" This reverts commit a22ef1cddcdb14ae132da2e9689b96c01803f0bc. * HLM-3379: Fixed proximity based search (#205) * HLM-3379: Fixed proximity based search * HLM-3379: Code updated * HLM-3379: Updated code * Proximity Based search Code review changes * HLM-3379:Updated distance display info inside brackets --------- Co-authored-by: Ramkrishna-egov * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * removed TODO as it's been completed * Update auth_model.dart --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Nested Checklist Code Changes (#269) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments * Hlm 2650 resource card multiround proximity (#275) * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments --------- Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Naveen Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved conflicts * resolved conflicts * added dump-api * HLM-4325:: Boundary Selection fix (#279) * HLM-4325:: Boundary Selection fix * HLM-4325:: Reset children dropdown values on change of parent value * resolved conflicts * removed un necessary extended class --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> * V1.2.0 patch-1 (#284) * v1.2.0-beta-version upgrade * Validation fixes on Household Location non mandatory fields * Sync Up fixes for empty string in address * Sync Up fixes for empty string in address * Validation messages added to localization for non mandatory fields * HLM-3103:: Referral Management (#287) * HLM-3103:: Referral Management * HLM-3103:: View Beneficiary Card Status Text code refracting * HLM-3103:: Referral comment added to additional fields * HLM-3103:: Changes in validation messages and eligibility check nee… (#289) * HLM-3103:: Changes in validation messages and eligibility n=check need to be first * HLM-3103:: label style changes * HLM-3103:: Additional field value check * HLM-3103:: Code review changes * Handle single click on Refer Beneficiary button * Updated checkbox, toast and dropdown (#292) * updated fonts and font sizes to be synced with design system and dialog size * updated checkbox toast and dropdown * pr comment update --------- Co-authored-by: rachana-egov * Localization fixes and Current cycle fixes (#293) * Hlm 2985 2d voucher (#291) * Project Type added to local storage * added voucher scanner * added text trim * added tag * bug fixes * bug fixes * added scanner fixes * added button border * fixed border issue * position fixes * fixed de-linking of QR code --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * Delivery strategy need to be Direct delivery from Delivery Intervention page * Develop to master (#298) * Develop (#285) * Hlm 2650 resource card multiround proximity (#283) * [hlm-2825]: Fix project selection error (#162) * Hlm 2742 and HLM 931 (#163) * [hlm-2742]: Beneficiary progress bar * [hlm-2742]: Report selection * [hlm-2742]: Fix overflows * [hlm-2742]: Intermittent * [hlm-2742]: Update transaction search model * [hlm-2742]: Intermittent * [hlm-2742]: Intermittent * [hlm-2742]: Fix report * [hlm-2742]: Fix recon additional details * [hlm-2742]: Fix localization * [hlm-2742]: [Revert this commit] * [hlm-2742]: Intermittent * [hlm-2742]: Fix * [hlm-2742]: Update report_details.dart * Revert "[hlm-2742]: [Revert this commit]" This reverts commit 8fd72d0b351630334eb59dae20a64f00a0d7b698. * [hlm-2742]: Fix report selection i18n * [hlm-2742]: Fix dependencies * [hlm-2742]: Update report_details.dart (#164) * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * Hlm 2547 locality fixes (#167) * added help icon * added call support * added checklist plugin * added help icon fixes * removed images * removed un-used code * modified json * added localization keys * [hlm-2547]: Fix address locality model * [hlm-2547]: Add locality for delivery intervention * added applogo * bug fixe s * added enum for beneficiary * added individual delivery * resolved * resolved commits * help icon and progress bar fixes * added id check * added lcoality for updates * added address id * fixed navigation issue * added stock min and max validation * updated validation * fixed address id issue * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2547]: Lints + fix build * [hlm-2547]: Fix * [hlm-2547]: Fix beneficiary type * [hlm-2547]: Pluralize tasks * [hlm-2547]: Pluralize beneficiaries * [hlm-2547]: Update search_households.dart * [hlm-2547]: Fix locality model * [hlm-2547]: Typo * [hlm-2547]: Fix target * [hlm-2547]: Fix target count * [hlm-2547]: Fix values * [hlm-2547]: Add launcher icons * [hlm-2547]: Fix manifest --------- Co-authored-by: Ajil Oommen Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * [hlm-2478]: Fix is deleted (#170) [hlm-2478]: Update models * [hlm-000]: Add generated files (#173) * [hlm-931]: Fix progress bar for non-distributor (#174) * Hlm 2861 fix offline downsync (#172) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2861]: Fix double enum import in tables * [hlm-2861]: Fixed scripts * [hlm-2861]: Fix down sync problem * [hlm-2861]: Fix no facility dialog on stock recon * [hlm-2861]: Fix lints * [hlm-000]: Build fix * added delete check (#177) * Hlm 2878 handle downsync failure (#175) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * Hlm 2879 firebase crashlytics (#178) * [hlm-2879]: Add package base * [hlm-2879]: Add ios bundle identifier * [hlm-2879]: Fix auth * [hlm-2879]: Update back_navigation_help_header.dart * [hlm-2879]: Check for context * [hlm-2879]: Intermittent * [hlm-2879]: Add firebase config * [hlm-2879]: Add crash enforcer * [hlm-2879]: Fix config * [hlm-2879]: Fix config * [hlm-000]: Update README.md (#179) * [hlm-000]: Update README.md * [hlm-000]: Update sync docs * Hlm 2977 profile update (#181) * added profile page * added user * added bloc * added update profile api integration * added loader * added localization codes * added error fallback * removed logs * bug fixes * added filters (#183) * HLM-3161:: Split Age into years and Months across the application (#184) * HLM-3161:: Split Age into years and Months across the application * Updated Date Conversion functions * Code commenting and minor UI fixes (#185) * Code commenting and minor UI fixes * HLM-3161:: Age Split in Table and css fixes for member card * Update app_initialization.dart * Update app_initialization.dart * Digit Text Form Field suffix icon constraints css fixes * Update auth.dart * HLM-1361:: Date Conversion from months to date fixes * Added trailing commas * Error message changes for DOB field * Error message changes for DOB field * HLM-3161:: Updated age calculator logic and added Date utils to digit components (#186) * Digit Date Utils added, and handled years and age end cases * Remove commented lines * Added code commenting for Date Utils and DOB Picker * Hlm 2876 auto sync (#176) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * added auto sync * fixed melos build issue * added tost message * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * removed logs * added filter bandwidth logic * added background service logic * intermetent commit * auto sync fixed * added isdeleted default value * added error handling * age issue fixed * added error handling * removed un-used code * resloved conflicts * removed duplicate * handled bad state * added retry count and row-version * added code comments * fixed typo and file renamed * removed un-used code * removed hard-coded credentials * typo fixes * added debouncing + filter checklist entity for sync-down * Updated Age logic in DateExtensions --------- Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov * added filter for stock recon (#188) * added filter for stock recon * removed un-used code * Updated Ade and months validations for DOB Picker (#189) * HLM-3161:: Added Generic error message for the DOB Picker and handled negative years and months validation (#191) * HLM-3161:: Negative months and years use cases validations added * HLM-3161:: Added Generic error message for the DOB Picker * HLM-3161:: Years and months conversion in Delivery intervention page * HLM-3161:: input formatter added for text field * bug fix for filter (#193) * bug fix for filter * removed un-used code * [fix] added dropdown value population (#194) * Hlm 2981 row version (#195) * resolved conflicts * resolved conflicts * added row-version schema * remove duplicate isar open * removed un-used file * added app version (#197) * added app version * added version * HLM-3161:: Age and Date of Birth Fixes (#199) * HLM-3161:: Age and Date of Birth Fixes * HLM-3161:: Age and Date of Birth Fixes * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * HLM-2850:: Gender value Others not retaining on Edit Fixes (#202) Co-authored-by: Naveen * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * HLM-1890:: If Default identifier is ID, "ID Number" field should be hidden from the UI. (#208) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * Hlm 3091 proximity based search (#190) * added filter for stock recon * removed un-used code * added fallback code * added query * enabled proximity bases search * modified the query * modfied the query * added clearing the search bar when proximity search is triggered * added filters * Update dart.yml (#200) * Update dart.yml * Update dart.yml * Update dart.yml * Update dart.yml * HLM-3379: Fixed proximity based search * Revert "HLM-3379: Fixed proximity based search" This reverts commit a22ef1cddcdb14ae132da2e9689b96c01803f0bc. * HLM-3379: Fixed proximity based search (#205) * HLM-3379: Fixed proximity based search * HLM-3379: Code updated * HLM-3379: Updated code * Proximity Based search Code review changes * HLM-3379:Updated distance display info inside brackets --------- Co-authored-by: Ramkrishna-egov * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * removed TODO as it's been completed * Update auth_model.dart --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Nested Checklist Code Changes (#269) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments * Hlm 2650 resource card multiround proximity (#275) * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments --------- Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Naveen Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved conflicts * resolved conflicts * added dump-api * HLM-4325:: Boundary Selection fix (#279) * HLM-4325:: Boundary Selection fix * HLM-4325:: Reset children dropdown values on change of parent value * resolved conflicts * removed un necessary extended class --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> * V1.2.0 patch-1 (#284) * v1.2.0-beta-version upgrade * Validation fixes on Household Location non mandatory fields * Sync Up fixes for empty string in address * Sync Up fixes for empty string in address * Validation messages added to localization for non mandatory fields --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> * Multiround:: referral management (#295) * Hlm 2650 resource card multiround proximity (#283) * [hlm-2825]: Fix project selection error (#162) * Hlm 2742 and HLM 931 (#163) * [hlm-2742]: Beneficiary progress bar * [hlm-2742]: Report selection * [hlm-2742]: Fix overflows * [hlm-2742]: Intermittent * [hlm-2742]: Update transaction search model * [hlm-2742]: Intermittent * [hlm-2742]: Intermittent * [hlm-2742]: Fix report * [hlm-2742]: Fix recon additional details * [hlm-2742]: Fix localization * [hlm-2742]: [Revert this commit] * [hlm-2742]: Intermittent * [hlm-2742]: Fix * [hlm-2742]: Update report_details.dart * Revert "[hlm-2742]: [Revert this commit]" This reverts commit 8fd72d0b351630334eb59dae20a64f00a0d7b698. * [hlm-2742]: Fix report selection i18n * [hlm-2742]: Fix dependencies * [hlm-2742]: Update report_details.dart (#164) * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * Hlm 2547 locality fixes (#167) * added help icon * added call support * added checklist plugin * added help icon fixes * removed images * removed un-used code * modified json * added localization keys * [hlm-2547]: Fix address locality model * [hlm-2547]: Add locality for delivery intervention * added applogo * bug fixe s * added enum for beneficiary * added individual delivery * resolved * resolved commits * help icon and progress bar fixes * added id check * added lcoality for updates * added address id * fixed navigation issue * added stock min and max validation * updated validation * fixed address id issue * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2547]: Lints + fix build * [hlm-2547]: Fix * [hlm-2547]: Fix beneficiary type * [hlm-2547]: Pluralize tasks * [hlm-2547]: Pluralize beneficiaries * [hlm-2547]: Update search_households.dart * [hlm-2547]: Fix locality model * [hlm-2547]: Typo * [hlm-2547]: Fix target * [hlm-2547]: Fix target count * [hlm-2547]: Fix values * [hlm-2547]: Add launcher icons * [hlm-2547]: Fix manifest --------- Co-authored-by: Ajil Oommen Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * [hlm-2478]: Fix is deleted (#170) [hlm-2478]: Update models * [hlm-000]: Add generated files (#173) * [hlm-931]: Fix progress bar for non-distributor (#174) * Hlm 2861 fix offline downsync (#172) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2861]: Fix double enum import in tables * [hlm-2861]: Fixed scripts * [hlm-2861]: Fix down sync problem * [hlm-2861]: Fix no facility dialog on stock recon * [hlm-2861]: Fix lints * [hlm-000]: Build fix * added delete check (#177) * Hlm 2878 handle downsync failure (#175) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * Hlm 2879 firebase crashlytics (#178) * [hlm-2879]: Add package base * [hlm-2879]: Add ios bundle identifier * [hlm-2879]: Fix auth * [hlm-2879]: Update back_navigation_help_header.dart * [hlm-2879]: Check for context * [hlm-2879]: Intermittent * [hlm-2879]: Add firebase config * [hlm-2879]: Add crash enforcer * [hlm-2879]: Fix config * [hlm-2879]: Fix config * [hlm-000]: Update README.md (#179) * [hlm-000]: Update README.md * [hlm-000]: Update sync docs * Hlm 2977 profile update (#181) * added profile page * added user * added bloc * added update profile api integration * added loader * added localization codes * added error fallback * removed logs * bug fixes * added filters (#183) * HLM-3161:: Split Age into years and Months across the application (#184) * HLM-3161:: Split Age into years and Months across the application * Updated Date Conversion functions * Code commenting and minor UI fixes (#185) * Code commenting and minor UI fixes * HLM-3161:: Age Split in Table and css fixes for member card * Update app_initialization.dart * Update app_initialization.dart * Digit Text Form Field suffix icon constraints css fixes * Update auth.dart * HLM-1361:: Date Conversion from months to date fixes * Added trailing commas * Error message changes for DOB field * Error message changes for DOB field * HLM-3161:: Updated age calculator logic and added Date utils to digit components (#186) * Digit Date Utils added, and handled years and age end cases * Remove commented lines * Added code commenting for Date Utils and DOB Picker * Hlm 2876 auto sync (#176) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * added auto sync * fixed melos build issue * added tost message * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * removed logs * added filter bandwidth logic * added background service logic * intermetent commit * auto sync fixed * added isdeleted default value * added error handling * age issue fixed * added error handling * removed un-used code * resloved conflicts * removed duplicate * handled bad state * added retry count and row-version * added code comments * fixed typo and file renamed * removed un-used code * removed hard-coded credentials * typo fixes * added debouncing + filter checklist entity for sync-down * Updated Age logic in DateExtensions --------- Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov * added filter for stock recon (#188) * added filter for stock recon * removed un-used code * Updated Ade and months validations for DOB Picker (#189) * HLM-3161:: Added Generic error message for the DOB Picker and handled negative years and months validation (#191) * HLM-3161:: Negative months and years use cases validations added * HLM-3161:: Added Generic error message for the DOB Picker * HLM-3161:: Years and months conversion in Delivery intervention page * HLM-3161:: input formatter added for text field * bug fix for filter (#193) * bug fix for filter * removed un-used code * [fix] added dropdown value population (#194) * Hlm 2981 row version (#195) * resolved conflicts * resolved conflicts * added row-version schema * remove duplicate isar open * removed un-used file * added app version (#197) * added app version * added version * HLM-3161:: Age and Date of Birth Fixes (#199) * HLM-3161:: Age and Date of Birth Fixes * HLM-3161:: Age and Date of Birth Fixes * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * HLM-2850:: Gender value Others not retaining on Edit Fixes (#202) Co-authored-by: Naveen * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * HLM-1890:: If Default identifier is ID, "ID Number" field should be hidden from the UI. (#208) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * Hlm 3091 proximity based search (#190) * added filter for stock recon * removed un-used code * added fallback code * added query * enabled proximity bases search * modified the query * modfied the query * added clearing the search bar when proximity search is triggered * added filters * Update dart.yml (#200) * Update dart.yml * Update dart.yml * Update dart.yml * Update dart.yml * HLM-3379: Fixed proximity based search * Revert "HLM-3379: Fixed proximity based search" This reverts commit a22ef1cddcdb14ae132da2e9689b96c01803f0bc. * HLM-3379: Fixed proximity based search (#205) * HLM-3379: Fixed proximity based search * HLM-3379: Code updated * HLM-3379: Updated code * Proximity Based search Code review changes * HLM-3379:Updated distance display info inside brackets --------- Co-authored-by: Ramkrishna-egov * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * removed TODO as it's been completed * Update auth_model.dart --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Nested Checklist Code Changes (#269) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments * Hlm 2650 resource card multiround proximity (#275) * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments --------- Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Naveen Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved conflicts * resolved conflicts * added dump-api * HLM-4325:: Boundary Selection fix (#279) * HLM-4325:: Boundary Selection fix * HLM-4325:: Reset children dropdown values on change of parent value * resolved conflicts * removed un necessary extended class --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com>… * conflicts from master to develop (#300) * Develop (#285) * Hlm 2650 resource card multiround proximity (#283) * [hlm-2825]: Fix project selection error (#162) * Hlm 2742 and HLM 931 (#163) * [hlm-2742]: Beneficiary progress bar * [hlm-2742]: Report selection * [hlm-2742]: Fix overflows * [hlm-2742]: Intermittent * [hlm-2742]: Update transaction search model * [hlm-2742]: Intermittent * [hlm-2742]: Intermittent * [hlm-2742]: Fix report * [hlm-2742]: Fix recon additional details * [hlm-2742]: Fix localization * [hlm-2742]: [Revert this commit] * [hlm-2742]: Intermittent * [hlm-2742]: Fix * [hlm-2742]: Update report_details.dart * Revert "[hlm-2742]: [Revert this commit]" This reverts commit 8fd72d0b351630334eb59dae20a64f00a0d7b698. * [hlm-2742]: Fix report selection i18n * [hlm-2742]: Fix dependencies * [hlm-2742]: Update report_details.dart (#164) * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * Hlm 2547 locality fixes (#167) * added help icon * added call support * added checklist plugin * added help icon fixes * removed images * removed un-used code * modified json * added localization keys * [hlm-2547]: Fix address locality model * [hlm-2547]: Add locality for delivery intervention * added applogo * bug fixe s * added enum for beneficiary * added individual delivery * resolved * resolved commits * help icon and progress bar fixes * added id check * added lcoality for updates * added address id * fixed navigation issue * added stock min and max validation * updated validation * fixed address id issue * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2547]: Lints + fix build * [hlm-2547]: Fix * [hlm-2547]: Fix beneficiary type * [hlm-2547]: Pluralize tasks * [hlm-2547]: Pluralize beneficiaries * [hlm-2547]: Update search_households.dart * [hlm-2547]: Fix locality model * [hlm-2547]: Typo * [hlm-2547]: Fix target * [hlm-2547]: Fix target count * [hlm-2547]: Fix values * [hlm-2547]: Add launcher icons * [hlm-2547]: Fix manifest --------- Co-authored-by: Ajil Oommen Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * [hlm-2478]: Fix is deleted (#170) [hlm-2478]: Update models * [hlm-000]: Add generated files (#173) * [hlm-931]: Fix progress bar for non-distributor (#174) * Hlm 2861 fix offline downsync (#172) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2861]: Fix double enum import in tables * [hlm-2861]: Fixed scripts * [hlm-2861]: Fix down sync problem * [hlm-2861]: Fix no facility dialog on stock recon * [hlm-2861]: Fix lints * [hlm-000]: Build fix * added delete check (#177) * Hlm 2878 handle downsync failure (#175) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * Hlm 2879 firebase crashlytics (#178) * [hlm-2879]: Add package base * [hlm-2879]: Add ios bundle identifier * [hlm-2879]: Fix auth * [hlm-2879]: Update back_navigation_help_header.dart * [hlm-2879]: Check for context * [hlm-2879]: Intermittent * [hlm-2879]: Add firebase config * [hlm-2879]: Add crash enforcer * [hlm-2879]: Fix config * [hlm-2879]: Fix config * [hlm-000]: Update README.md (#179) * [hlm-000]: Update README.md * [hlm-000]: Update sync docs * Hlm 2977 profile update (#181) * added profile page * added user * added bloc * added update profile api integration * added loader * added localization codes * added error fallback * removed logs * bug fixes * added filters (#183) * HLM-3161:: Split Age into years and Months across the application (#184) * HLM-3161:: Split Age into years and Months across the application * Updated Date Conversion functions * Code commenting and minor UI fixes (#185) * Code commenting and minor UI fixes * HLM-3161:: Age Split in Table and css fixes for member card * Update app_initialization.dart * Update app_initialization.dart * Digit Text Form Field suffix icon constraints css fixes * Update auth.dart * HLM-1361:: Date Conversion from months to date fixes * Added trailing commas * Error message changes for DOB field * Error message changes for DOB field * HLM-3161:: Updated age calculator logic and added Date utils to digit components (#186) * Digit Date Utils added, and handled years and age end cases * Remove commented lines * Added code commenting for Date Utils and DOB Picker * Hlm 2876 auto sync (#176) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * added auto sync * fixed melos build issue * added tost message * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * removed logs * added filter bandwidth logic * added background service logic * intermetent commit * auto sync fixed * added isdeleted default value * added error handling * age issue fixed * added error handling * removed un-used code * resloved conflicts * removed duplicate * handled bad state * added retry count and row-version * added code comments * fixed typo and file renamed * removed un-used code * removed hard-coded credentials * typo fixes * added debouncing + filter checklist entity for sync-down * Updated Age logic in DateExtensions --------- Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov * added filter for stock recon (#188) * added filter for stock recon * removed un-used code * Updated Ade and months validations for DOB Picker (#189) * HLM-3161:: Added Generic error message for the DOB Picker and handled negative years and months validation (#191) * HLM-3161:: Negative months and years use cases validations added * HLM-3161:: Added Generic error message for the DOB Picker * HLM-3161:: Years and months conversion in Delivery intervention page * HLM-3161:: input formatter added for text field * bug fix for filter (#193) * bug fix for filter * removed un-used code * [fix] added dropdown value population (#194) * Hlm 2981 row version (#195) * resolved conflicts * resolved conflicts * added row-version schema * remove duplicate isar open * removed un-used file * added app version (#197) * added app version * added version * HLM-3161:: Age and Date of Birth Fixes (#199) * HLM-3161:: Age and Date of Birth Fixes * HLM-3161:: Age and Date of Birth Fixes * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * HLM-2850:: Gender value Others not retaining on Edit Fixes (#202) Co-authored-by: Naveen * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * HLM-1890:: If Default identifier is ID, "ID Number" field should be hidden from the UI. (#208) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * Hlm 3091 proximity based search (#190) * added filter for stock recon * removed un-used code * added fallback code * added query * enabled proximity bases search * modified the query * modfied the query * added clearing the search bar when proximity search is triggered * added filters * Update dart.yml (#200) * Update dart.yml * Update dart.yml * Update dart.yml * Update dart.yml * HLM-3379: Fixed proximity based search * Revert "HLM-3379: Fixed proximity based search" This reverts commit a22ef1cddcdb14ae132da2e9689b96c01803f0bc. * HLM-3379: Fixed proximity based search (#205) * HLM-3379: Fixed proximity based search * HLM-3379: Code updated * HLM-3379: Updated code * Proximity Based search Code review changes * HLM-3379:Updated distance display info inside brackets --------- Co-authored-by: Ramkrishna-egov * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * removed TODO as it's been completed * Update auth_model.dart --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Nested Checklist Code Changes (#269) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments * Hlm 2650 resource card multiround proximity (#275) * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments --------- Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Naveen Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved conflicts * resolved conflicts * added dump-api * HLM-4325:: Boundary Selection fix (#279) * HLM-4325:: Boundary Selection fix * HLM-4325:: Reset children dropdown values on change of parent value * resolved conflicts * removed un necessary extended class --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> * V1.2.0 patch-1 (#284) * v1.2.0-beta-version upgrade * Validation fixes on Household Location non mandatory fields * Sync Up fixes for empty string in address * Sync Up fixes for empty string in address * Validation messages added to localization for non mandatory fields --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> * Multiround:: referral management (#295) * Hlm 2650 resource card multiround proximity (#283) * [hlm-2825]: Fix project selection error (#162) * Hlm 2742 and HLM 931 (#163) * [hlm-2742]: Beneficiary progress bar * [hlm-2742]: Report selection * [hlm-2742]: Fix overflows * [hlm-2742]: Intermittent * [hlm-2742]: Update transaction search model * [hlm-2742]: Intermittent * [hlm-2742]: Intermittent * [hlm-2742]: Fix report * [hlm-2742]: Fix recon additional details * [hlm-2742]: Fix localization * [hlm-2742]: [Revert this commit] * [hlm-2742]: Intermittent * [hlm-2742]: Fix * [hlm-2742]: Update report_details.dart * Revert "[hlm-2742]: [Revert this commit]" This reverts commit 8fd72d0b351630334eb59dae20a64f00a0d7b698. * [hlm-2742]: Fix report selection i18n * [hlm-2742]: Fix dependencies * [hlm-2742]: Update report_details.dart (#164) * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * Hlm 2547 locality fixes (#167) * added help icon * added call support * added checklist plugin * added help icon fixes * removed images * removed un-used code * modified json * added localization keys * [hlm-2547]: Fix address locality model * [hlm-2547]: Add locality for delivery intervention * added applogo * bug fixe s * added enum for beneficiary * added individual delivery * resolved * resolved commits * help icon and progress bar fixes * added id check * added lcoality for updates * added address id * fixed navigation issue * added stock min and max validation * updated validation * fixed address id issue * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2547]: Lints + fix build * [hlm-2547]: Fix * [hlm-2547]: Fix beneficiary type * [hlm-2547]: Pluralize tasks * [hlm-2547]: Pluralize beneficiaries * [hlm-2547]: Update search_households.dart * [hlm-2547]: Fix locality model * [hlm-2547]: Typo * [hlm-2547]: Fix target * [hlm-2547]: Fix target count * [hlm-2547]: Fix values * [hlm-2547]: Add launcher icons * [hlm-2547]: Fix manifest --------- Co-authored-by: Ajil Oommen Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * [hlm-2478]: Fix is deleted (#170) [hlm-2478]: Update models * [hlm-000]: Add generated files (#173) * [hlm-931]: Fix progress bar for non-distributor (#174) * Hlm 2861 fix offline downsync (#172) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2861]: Fix double enum import in tables * [hlm-2861]: Fixed scripts * [hlm-2861]: Fix down sync problem * [hlm-2861]: Fix no facility dialog on stock recon * [hlm-2861]: Fix lints * [hlm-000]: Build fix * added delete check (#177) * Hlm 2878 handle downsync failure (#175) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * Hlm 2879 firebase crashlytics (#178) * [hlm-2879]: Add package base * [hlm-2879]: Add ios bundle identifier * [hlm-2879]: Fix auth * [hlm-2879]: Update back_navigation_help_header.dart * [hlm-2879]: Check for context * [hlm-2879]: Intermittent * [hlm-2879]: Add firebase config * [hlm-2879]: Add crash enforcer * [hlm-2879]: Fix config * [hlm-2879]: Fix config * [hlm-000]: Update README.md (#179) * [hlm-000]: Update README.md * [hlm-000]: Update sync docs * Hlm 2977 profile update (#181) * added profile page * added user * added bloc * added update profile api integration * added loader * added localization codes * added error fallback * removed logs * bug fixes * added filters (#183) * HLM-3161:: Split Age into years and Months across the application (#184) * HLM-3161:: Split Age into years and Months across the application * Updated Date Conversion functions * Code commenting and minor UI fixes (#185) * Code commenting and minor UI fixes * HLM-3161:: Age Split in Table and css fixes for member card * Update app_initialization.dart * Update app_initialization.dart * Digit Text Form Field suffix icon constraints css fixes * Update auth.dart * HLM-1361:: Date Conversion from months to date fixes * Added trailing commas * Error message changes for DOB field * Error message changes for DOB field * HLM-3161:: Updated age calculator logic and added Date utils to digit components (#186) * Digit Date Utils added, and handled years and age end cases * Remove commented lines * Added code commenting for Date Utils and DOB Picker * Hlm 2876 auto sync (#176) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * added auto sync * fixed melos build issue * added tost message * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * removed logs * added filter bandwidth logic * added background service logic * intermetent commit * auto sync fixed * added isdeleted default value * added error handling * age issue fixed * added error handling * removed un-used code * resloved conflicts * removed duplicate * handled bad state * added retry count and row-version * added code comments * fixed typo and file renamed * removed un-used code * removed hard-coded credentials * typo fixes * added debouncing + filter checklist entity for sync-down * Updated Age logic in DateExtensions --------- Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov * added filter for stock recon (#188) * added filter for stock recon * removed un-used code * Updated Ade and months validations for DOB Picker (#189) * HLM-3161:: Added Generic error message for the DOB Picker and handled negative years and months validation (#191) * HLM-3161:: Negative months and years use cases validations added * HLM-3161:: Added Generic error message for the DOB Picker * HLM-3161:: Years and months conversion in Delivery intervention page * HLM-3161:: input formatter added for text field * bug fix for filter (#193) * bug fix for filter * removed un-used code * [fix] added dropdown value population (#194) * Hlm 2981 row version (#195) * resolved conflicts * resolved conflicts * added row-version schema * remove duplicate isar open * removed un-used file * added app version (#197) * added app version * added version * HLM-3161:: Age and Date of Birth Fixes (#199) * HLM-3161:: Age and Date of Birth Fixes * HLM-3161:: Age and Date of Birth Fixes * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * HLM-2850:: Gender value Others not retaining on Edit Fixes (#202) Co-authored-by: Naveen * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * HLM-1890:: If Default identifier is ID, "ID Number" field should be hidden from the UI. (#208) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * Hlm 3091 proximity based search (#190) * added filter for stock recon * removed un-used code * added fallback code * added query * enabled proximity bases search * modified the query * modfied the query * added clearing the search bar when proximity search is triggered * added filters * Update dart.yml (#200) * Update dart.yml * Update dart.yml * Update dart.yml * Update dart.yml * HLM-3379: Fixed proximity based search * Revert "HLM-3379: Fixed proximity based search" This reverts commit a22ef1cddcdb14ae132da2e9689b96c01803f0bc. * HLM-3379: Fixed proximity based search (#205) * HLM-3379: Fixed proximity based search * HLM-3379: Code updated * HLM-3379: Updated code * Proximity Based search Code review changes * HLM-3379:Updated distance display info inside brackets --------- Co-authored-by: Ramkrishna-egov * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * removed TODO as it's been completed * Update auth_model.dart --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Nested Checklist Code Changes (#269) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments * Hlm 2650 resource card multiround proximity (#275) * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments --------- Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Naveen Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved conflicts * resolved conflicts * added dump-api * HLM-4325:: Boundary Selection fix (#279) * HLM-4325:: Boundary Selection fix * HLM-4325:: Reset children dropdown values on change of parent value * resolved conflicts * removed un necessary extended class --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.nore… * HLM-3103:: Referral Management (#287) * HLM-3103:: Referral Management * HLM-3103:: View Beneficiary Card Status Text code refracting * HLM-3103:: Referral comment added to additional fields * Hlm 2985 2d voucher (#291) * Project Type added to local storage * added voucher scanner * added text trim * added tag * bug fixes * bug fixes * added scanner fixes * added button border * fixed border issue * position fixes * fixed de-linking of QR code --------- Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * Develop to master (#298) * Develop (#285) * Hlm 2650 resource card multiround proximity (#283) * [hlm-2825]: Fix project selection error (#162) * Hlm 2742 and HLM 931 (#163) * [hlm-2742]: Beneficiary progress bar * [hlm-2742]: Report selection * [hlm-2742]: Fix overflows * [hlm-2742]: Intermittent * [hlm-2742]: Update transaction search model * [hlm-2742]: Intermittent * [hlm-2742]: Intermittent * [hlm-2742]: Fix report * [hlm-2742]: Fix recon additional details * [hlm-2742]: Fix localization * [hlm-2742]: [Revert this commit] * [hlm-2742]: Intermittent * [hlm-2742]: Fix * [hlm-2742]: Update report_details.dart * Revert "[hlm-2742]: [Revert this commit]" This reverts commit 8fd72d0b351630334eb59dae20a64f00a0d7b698. * [hlm-2742]: Fix report selection i18n * [hlm-2742]: Fix dependencies * [hlm-2742]: Update report_details.dart (#164) * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * Hlm 2547 locality fixes (#167) * added help icon * added call support * added checklist plugin * added help icon fixes * removed images * removed un-used code * modified json * added localization keys * [hlm-2547]: Fix address locality model * [hlm-2547]: Add locality for delivery intervention * added applogo * bug fixe s * added enum for beneficiary * added individual delivery * resolved * resolved commits * help icon and progress bar fixes * added id check * added lcoality for updates * added address id * fixed navigation issue * added stock min and max validation * updated validation * fixed address id issue * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2547]: Lints + fix build * [hlm-2547]: Fix * [hlm-2547]: Fix beneficiary type * [hlm-2547]: Pluralize tasks * [hlm-2547]: Pluralize beneficiaries * [hlm-2547]: Update search_households.dart * [hlm-2547]: Fix locality model * [hlm-2547]: Typo * [hlm-2547]: Fix target * [hlm-2547]: Fix target count * [hlm-2547]: Fix values * [hlm-2547]: Add launcher icons * [hlm-2547]: Fix manifest --------- Co-authored-by: Ajil Oommen Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * [hlm-2478]: Fix is deleted (#170) [hlm-2478]: Update models * [hlm-000]: Add generated files (#173) * [hlm-931]: Fix progress bar for non-distributor (#174) * Hlm 2861 fix offline downsync (#172) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2861]: Fix double enum import in tables * [hlm-2861]: Fixed scripts * [hlm-2861]: Fix down sync problem * [hlm-2861]: Fix no facility dialog on stock recon * [hlm-2861]: Fix lints * [hlm-000]: Build fix * added delete check (#177) * Hlm 2878 handle downsync failure (#175) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * Hlm 2879 firebase crashlytics (#178) * [hlm-2879]: Add package base * [hlm-2879]: Add ios bundle identifier * [hlm-2879]: Fix auth * [hlm-2879]: Update back_navigation_help_header.dart * [hlm-2879]: Check for context * [hlm-2879]: Intermittent * [hlm-2879]: Add firebase config * [hlm-2879]: Add crash enforcer * [hlm-2879]: Fix config * [hlm-2879]: Fix config * [hlm-000]: Update README.md (#179) * [hlm-000]: Update README.md * [hlm-000]: Update sync docs * Hlm 2977 profile update (#181) * added profile page * added user * added bloc * added update profile api integration * added loader * added localization codes * added error fallback * removed logs * bug fixes * added filters (#183) * HLM-3161:: Split Age into years and Months across the application (#184) * HLM-3161:: Split Age into years and Months across the application * Updated Date Conversion functions * Code commenting and minor UI fixes (#185) * Code commenting and minor UI fixes * HLM-3161:: Age Split in Table and css fixes for member card * Update app_initialization.dart * Update app_initialization.dart * Digit Text Form Field suffix icon constraints css fixes * Update auth.dart * HLM-1361:: Date Conversion from months to date fixes * Added trailing commas * Error message changes for DOB field * Error message changes for DOB field * HLM-3161:: Updated age calculator logic and added Date utils to digit components (#186) * Digit Date Utils added, and handled years and age end cases * Remove commented lines * Added code commenting for Date Utils and DOB Picker * Hlm 2876 auto sync (#176) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * added auto sync * fixed melos build issue * added tost message * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * removed logs * added filter bandwidth logic * added background service logic * intermetent commit * auto sync fixed * added isdeleted default value * added error handling * age issue fixed * added error handling * removed un-used code * resloved conflicts * removed duplicate * handled bad state * added retry count and row-version * added code comments * fixed typo and file renamed * removed un-used code * removed hard-coded credentials * typo fixes * added debouncing + filter checklist entity for sync-down * Updated Age logic in DateExtensions --------- Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov * added filter for stock recon (#188) * added filter for stock recon * removed un-used code * Updated Ade and months validations for DOB Picker (#189) * HLM-3161:: Added Generic error message for the DOB Picker and handled negative years and months validation (#191) * HLM-3161:: Negative months and years use cases validations added * HLM-3161:: Added Generic error message for the DOB Picker * HLM-3161:: Years and months conversion in Delivery intervention page * HLM-3161:: input formatter added for text field * bug fix for filter (#193) * bug fix for filter * removed un-used code * [fix] added dropdown value population (#194) * Hlm 2981 row version (#195) * resolved conflicts * resolved conflicts * added row-version schema * remove duplicate isar open * removed un-used file * added app version (#197) * added app version * added version * HLM-3161:: Age and Date of Birth Fixes (#199) * HLM-3161:: Age and Date of Birth Fixes * HLM-3161:: Age and Date of Birth Fixes * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * HLM-2850:: Gender value Others not retaining on Edit Fixes (#202) Co-authored-by: Naveen * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * HLM-1890:: If Default identifier is ID, "ID Number" field should be hidden from the UI. (#208) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * Hlm 3091 proximity based search (#190) * added filter for stock recon * removed un-used code * added fallback code * added query * enabled proximity bases search * modified the query * modfied the query * added clearing the search bar when proximity search is triggered * added filters * Update dart.yml (#200) * Update dart.yml * Update dart.yml * Update dart.yml * Update dart.yml * HLM-3379: Fixed proximity based search * Revert "HLM-3379: Fixed proximity based search" This reverts commit a22ef1cddcdb14ae132da2e9689b96c01803f0bc. * HLM-3379: Fixed proximity based search (#205) * HLM-3379: Fixed proximity based search * HLM-3379: Code updated * HLM-3379: Updated code * Proximity Based search Code review changes * HLM-3379:Updated distance display info inside brackets --------- Co-authored-by: Ramkrishna-egov * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * removed TODO as it's been completed * Update auth_model.dart --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Nested Checklist Code Changes (#269) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments * Hlm 2650 resource card multiround proximity (#275) * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments --------- Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Naveen Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved conflicts * resolved conflicts * added dump-api * HLM-4325:: Boundary Selection fix (#279) * HLM-4325:: Boundary Selection fix * HLM-4325:: Reset children dropdown values on change of parent value * resolved conflicts * removed un necessary extended class --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> * V1.2.0 patch-1 (#284) * v1.2.0-beta-version upgrade * Validation fixes on Household Location non mandatory fields * Sync Up fixes for empty string in address * Sync Up fixes for empty string in address * Validation messages added to localization for non mandatory fields --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> * Multiround:: referral management (#295) * Hlm 2650 resource card multiround proximity (#283) * [hlm-2825]: Fix project selection error (#162) * Hlm 2742 and HLM 931 (#163) * [hlm-2742]: Beneficiary progress bar * [hlm-2742]: Report selection * [hlm-2742]: Fix overflows * [hlm-2742]: Intermittent * [hlm-2742]: Update transaction search model * [hlm-2742]: Intermittent * [hlm-2742]: Intermittent * [hlm-2742]: Fix report * [hlm-2742]: Fix recon additional details * [hlm-2742]: Fix localization * [hlm-2742]: [Revert this commit] * [hlm-2742]: Intermittent * [hlm-2742]: Fix * [hlm-2742]: Update report_details.dart * Revert "[hlm-2742]: [Revert this commit]" This reverts commit 8fd72d0b351630334eb59dae20a64f00a0d7b698. * [hlm-2742]: Fix report selection i18n * [hlm-2742]: Fix dependencies * [hlm-2742]: Update report_details.dart (#164) * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * Hlm 2547 locality fixes (#167) * added help icon * added call support * added checklist plugin * added help icon fixes * removed images * removed un-used code * modified json * added localization keys * [hlm-2547]: Fix address locality model * [hlm-2547]: Add locality for delivery intervention * added applogo * bug fixe s * added enum for beneficiary * added individual delivery * resolved * resolved commits * help icon and progress bar fixes * added id check * added lcoality for updates * added address id * fixed navigation issue * added stock min and max validation * updated validation * fixed address id issue * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2547]: Lints + fix build * [hlm-2547]: Fix * [hlm-2547]: Fix beneficiary type * [hlm-2547]: Pluralize tasks * [hlm-2547]: Pluralize beneficiaries * [hlm-2547]: Update search_households.dart * [hlm-2547]: Fix locality model * [hlm-2547]: Typo * [hlm-2547]: Fix target * [hlm-2547]: Fix target count * [hlm-2547]: Fix values * [hlm-2547]: Add launcher icons * [hlm-2547]: Fix manifest --------- Co-authored-by: Ajil Oommen Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * [hlm-2478]: Fix is deleted (#170) [hlm-2478]: Update models * [hlm-000]: Add generated files (#173) * [hlm-931]: Fix progress bar for non-distributor (#174) * Hlm 2861 fix offline downsync (#172) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2861]: Fix double enum import in tables * [hlm-2861]: Fixed scripts * [hlm-2861]: Fix down sync problem * [hlm-2861]: Fix no facility dialog on stock recon * [hlm-2861]: Fix lints * [hlm-000]: Build fix * added delete check (#177) * Hlm 2878 handle downsync failure (#175) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * Hlm 2879 firebase crashlytics (#178) * [hlm-2879]: Add package base * [hlm-2879]: Add ios bundle identifier * [hlm-2879]: Fix auth * [hlm-2879]: Update back_navigation_help_header.dart * [hlm-2879]: Check for context * [hlm-2879]: Intermittent * [hlm-2879]: Add firebase config * [hlm-2879]: Add crash enforcer * [hlm-2879]: Fix config * [hlm-2879]: Fix config * [hlm-000]: Update README.md (#179) * [hlm-000]: Update README.md * [hlm-000]: Update sync docs * Hlm 2977 profile update (#181) * added profile page * added user * added bloc * added update profile api integration * added loader * added localization codes * added error fallback * removed logs * bug fixes * added filters (#183) * HLM-3161:: Split Age into years and Months across the application (#184) * HLM-3161:: Split Age into years and Months across the application * Updated Date Conversion functions * Code commenting and minor UI fixes (#185) * Code commenting and minor UI fixes * HLM-3161:: Age Split in Table and css fixes for member card * Update app_initialization.dart * Update app_initialization.dart * Digit Text Form Field suffix icon constraints css fixes * Update auth.dart * HLM-1361:: Date Conversion from months to date fixes * Added trailing commas * Error message changes for DOB field * Error message changes for DOB field * HLM-3161:: Updated age calculator logic and added Date utils to digit components (#186) * Digit Date Utils added, and handled years and age end cases * Remove commented lines * Added code commenting for Date Utils and DOB Picker * Hlm 2876 auto sync (#176) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * added auto sync * fixed melos build issue * added tost message * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * removed logs * added filter bandwidth logic * added background service logic * intermetent commit * auto sync fixed * added isdeleted default value * added error handling * age issue fixed * added error handling * removed un-used code * resloved conflicts * removed duplicate * handled bad state * added retry count and row-version * added code comments * fixed typo and file renamed * removed un-used code * removed hard-coded credentials * typo fixes * added debouncing + filter checklist entity for sync-down * Updated Age logic in DateExtensions --------- Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov * added filter for stock recon (#188) * added filter for stock recon * removed un-used code * Updated Ade and months validations for DOB Picker (#189) * HLM-3161:: Added Generic error message for the DOB Picker and handled negative years and months validation (#191) * HLM-3161:: Negative months and years use cases validations added * HLM-3161:: Added Generic error message for the DOB Picker * HLM-3161:: Years and months conversion in Delivery intervention page * HLM-3161:: input formatter added for text field * bug fix for filter (#193) * bug fix for filter * removed un-used code * [fix] added dropdown value population (#194) * Hlm 2981 row version (#195) * resolved conflicts * resolved conflicts * added row-version schema * remove duplicate isar open * removed un-used file * added app version (#197) * added app version * added version * HLM-3161:: Age and Date of Birth Fixes (#199) * HLM-3161:: Age and Date of Birth Fixes * HLM-3161:: Age and Date of Birth Fixes * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * HLM-2850:: Gender value Others not retaining on Edit Fixes (#202) Co-authored-by: Naveen * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * HLM-1890:: If Default identifier is ID, "ID Number" field should be hidden from the UI. (#208) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * Hlm 3091 proximity based search (#190) * added filter for stock recon * removed un-used code * added fallback code * added query * enabled proximity bases search * modified the query * modfied the query * added clearing the search bar when proximity search is triggered * added filters * Update dart.yml (#200) * Update dart.yml * Update dart.yml * Update dart.yml * Update dart.yml * HLM-3379: Fixed proximity based search * Revert "HLM-3379: Fixed proximity based search" This reverts commit a22ef1cddcdb14ae132da2e9689b96c01803f0bc. * HLM-3379: Fixed proximity based search (#205) * HLM-3379: Fixed proximity based search * HLM-3379: Code updated * HLM-3379: Updated code * Proximity Based search Code review changes * HLM-3379:Updated distance display info inside brackets --------- Co-authored-by: Ramkrishna-egov * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * removed TODO as it's been completed * Update auth_model.dart --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Nested Checklist Code Changes (#269) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments * Hlm 2650 resource card multiround proximity (#275) * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments --------- Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Naveen Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved conflicts * resolved conflicts * added dump-api * HLM-4325:: Boundary Selection fix (#279) * HLM-4325:: Boundary Selection fix * HLM-4325:: Reset children dropdown values on change of parent value * resolved conflicts * removed un necessary extended class --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com>… * conflicts from master to develop (#300) * Develop (#285) * Hlm 2650 resource card multiround proximity (#283) * [hlm-2825]: Fix project selection error (#162) * Hlm 2742 and HLM 931 (#163) * [hlm-2742]: Beneficiary progress bar * [hlm-2742]: Report selection * [hlm-2742]: Fix overflows * [hlm-2742]: Intermittent * [hlm-2742]: Update transaction search model * [hlm-2742]: Intermittent * [hlm-2742]: Intermittent * [hlm-2742]: Fix report * [hlm-2742]: Fix recon additional details * [hlm-2742]: Fix localization * [hlm-2742]: [Revert this commit] * [hlm-2742]: Intermittent * [hlm-2742]: Fix * [hlm-2742]: Update report_details.dart * Revert "[hlm-2742]: [Revert this commit]" This reverts commit 8fd72d0b351630334eb59dae20a64f00a0d7b698. * [hlm-2742]: Fix report selection i18n * [hlm-2742]: Fix dependencies * [hlm-2742]: Update report_details.dart (#164) * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * Hlm 2547 locality fixes (#167) * added help icon * added call support * added checklist plugin * added help icon fixes * removed images * removed un-used code * modified json * added localization keys * [hlm-2547]: Fix address locality model * [hlm-2547]: Add locality for delivery intervention * added applogo * bug fixe s * added enum for beneficiary * added individual delivery * resolved * resolved commits * help icon and progress bar fixes * added id check * added lcoality for updates * added address id * fixed navigation issue * added stock min and max validation * updated validation * fixed address id issue * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2547]: Lints + fix build * [hlm-2547]: Fix * [hlm-2547]: Fix beneficiary type * [hlm-2547]: Pluralize tasks * [hlm-2547]: Pluralize beneficiaries * [hlm-2547]: Update search_households.dart * [hlm-2547]: Fix locality model * [hlm-2547]: Typo * [hlm-2547]: Fix target * [hlm-2547]: Fix target count * [hlm-2547]: Fix values * [hlm-2547]: Add launcher icons * [hlm-2547]: Fix manifest --------- Co-authored-by: Ajil Oommen Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * [hlm-2478]: Fix is deleted (#170) [hlm-2478]: Update models * [hlm-000]: Add generated files (#173) * [hlm-931]: Fix progress bar for non-distributor (#174) * Hlm 2861 fix offline downsync (#172) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2861]: Fix double enum import in tables * [hlm-2861]: Fixed scripts * [hlm-2861]: Fix down sync problem * [hlm-2861]: Fix no facility dialog on stock recon * [hlm-2861]: Fix lints * [hlm-000]: Build fix * added delete check (#177) * Hlm 2878 handle downsync failure (#175) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * Hlm 2879 firebase crashlytics (#178) * [hlm-2879]: Add package base * [hlm-2879]: Add ios bundle identifier * [hlm-2879]: Fix auth * [hlm-2879]: Update back_navigation_help_header.dart * [hlm-2879]: Check for context * [hlm-2879]: Intermittent * [hlm-2879]: Add firebase config * [hlm-2879]: Add crash enforcer * [hlm-2879]: Fix config * [hlm-2879]: Fix config * [hlm-000]: Update README.md (#179) * [hlm-000]: Update README.md * [hlm-000]: Update sync docs * Hlm 2977 profile update (#181) * added profile page * added user * added bloc * added update profile api integration * added loader * added localization codes * added error fallback * removed logs * bug fixes * added filters (#183) * HLM-3161:: Split Age into years and Months across the application (#184) * HLM-3161:: Split Age into years and Months across the application * Updated Date Conversion functions * Code commenting and minor UI fixes (#185) * Code commenting and minor UI fixes * HLM-3161:: Age Split in Table and css fixes for member card * Update app_initialization.dart * Update app_initialization.dart * Digit Text Form Field suffix icon constraints css fixes * Update auth.dart * HLM-1361:: Date Conversion from months to date fixes * Added trailing commas * Error message changes for DOB field * Error message changes for DOB field * HLM-3161:: Updated age calculator logic and added Date utils to digit components (#186) * Digit Date Utils added, and handled years and age end cases * Remove commented lines * Added code commenting for Date Utils and DOB Picker * Hlm 2876 auto sync (#176) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * added auto sync * fixed melos build issue * added tost message * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * removed logs * added filter bandwidth logic * added background service logic * intermetent commit * auto sync fixed * added isdeleted default value * added error handling * age issue fixed * added error handling * removed un-used code * resloved conflicts * removed duplicate * handled bad state * added retry count and row-version * added code comments * fixed typo and file renamed * removed un-used code * removed hard-coded credentials * typo fixes * added debouncing + filter checklist entity for sync-down * Updated Age logic in DateExtensions --------- Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov * added filter for stock recon (#188) * added filter for stock recon * removed un-used code * Updated Ade and months validations for DOB Picker (#189) * HLM-3161:: Added Generic error message for the DOB Picker and handled negative years and months validation (#191) * HLM-3161:: Negative months and years use cases validations added * HLM-3161:: Added Generic error message for the DOB Picker * HLM-3161:: Years and months conversion in Delivery intervention page * HLM-3161:: input formatter added for text field * bug fix for filter (#193) * bug fix for filter * removed un-used code * [fix] added dropdown value population (#194) * Hlm 2981 row version (#195) * resolved conflicts * resolved conflicts * added row-version schema * remove duplicate isar open * removed un-used file * added app version (#197) * added app version * added version * HLM-3161:: Age and Date of Birth Fixes (#199) * HLM-3161:: Age and Date of Birth Fixes * HLM-3161:: Age and Date of Birth Fixes * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * HLM-2850:: Gender value Others not retaining on Edit Fixes (#202) Co-authored-by: Naveen * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * HLM-1890:: If Default identifier is ID, "ID Number" field should be hidden from the UI. (#208) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * Hlm 3091 proximity based search (#190) * added filter for stock recon * removed un-used code * added fallback code * added query * enabled proximity bases search * modified the query * modfied the query * added clearing the search bar when proximity search is triggered * added filters * Update dart.yml (#200) * Update dart.yml * Update dart.yml * Update dart.yml * Update dart.yml * HLM-3379: Fixed proximity based search * Revert "HLM-3379: Fixed proximity based search" This reverts commit a22ef1cddcdb14ae132da2e9689b96c01803f0bc. * HLM-3379: Fixed proximity based search (#205) * HLM-3379: Fixed proximity based search * HLM-3379: Code updated * HLM-3379: Updated code * Proximity Based search Code review changes * HLM-3379:Updated distance display info inside brackets --------- Co-authored-by: Ramkrishna-egov * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * removed TODO as it's been completed * Update auth_model.dart --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Nested Checklist Code Changes (#269) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments * Hlm 2650 resource card multiround proximity (#275) * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments --------- Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Naveen Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved conflicts * resolved conflicts * added dump-api * HLM-4325:: Boundary Selection fix (#279) * HLM-4325:: Boundary Selection fix * HLM-4325:: Reset children dropdown values on change of parent value * resolved conflicts * removed un necessary extended class --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> * V1.2.0 patch-1 (#284) * v1.2.0-beta-version upgrade * Validation fixes on Household Location non mandatory fields * Sync Up fixes for empty string in address * Sync Up fixes for empty string in address * Validation messages added to localization for non mandatory fields --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> * Multiround:: referral management (#295) * Hlm 2650 resource card multiround proximity (#283) * [hlm-2825]: Fix project selection error (#162) * Hlm 2742 and HLM 931 (#163) * [hlm-2742]: Beneficiary progress bar * [hlm-2742]: Report selection * [hlm-2742]: Fix overflows * [hlm-2742]: Intermittent * [hlm-2742]: Update transaction search model * [hlm-2742]: Intermittent * [hlm-2742]: Intermittent * [hlm-2742]: Fix report * [hlm-2742]: Fix recon additional details * [hlm-2742]: Fix localization * [hlm-2742]: [Revert this commit] * [hlm-2742]: Intermittent * [hlm-2742]: Fix * [hlm-2742]: Update report_details.dart * Revert "[hlm-2742]: [Revert this commit]" This reverts commit 8fd72d0b351630334eb59dae20a64f00a0d7b698. * [hlm-2742]: Fix report selection i18n * [hlm-2742]: Fix dependencies * [hlm-2742]: Update report_details.dart (#164) * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * Hlm 2547 locality fixes (#167) * added help icon * added call support * added checklist plugin * added help icon fixes * removed images * removed un-used code * modified json * added localization keys * [hlm-2547]: Fix address locality model * [hlm-2547]: Add locality for delivery intervention * added applogo * bug fixe s * added enum for beneficiary * added individual delivery * resolved * resolved commits * help icon and progress bar fixes * added id check * added lcoality for updates * added address id * fixed navigation issue * added stock min and max validation * updated validation * fixed address id issue * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2547]: Lints + fix build * [hlm-2547]: Fix * [hlm-2547]: Fix beneficiary type * [hlm-2547]: Pluralize tasks * [hlm-2547]: Pluralize beneficiaries * [hlm-2547]: Update search_households.dart * [hlm-2547]: Fix locality model * [hlm-2547]: Typo * [hlm-2547]: Fix target * [hlm-2547]: Fix target count * [hlm-2547]: Fix values * [hlm-2547]: Add launcher icons * [hlm-2547]: Fix manifest --------- Co-authored-by: Ajil Oommen Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * [hlm-2478]: Fix is deleted (#170) [hlm-2478]: Update models * [hlm-000]: Add generated files (#173) * [hlm-931]: Fix progress bar for non-distributor (#174) * Hlm 2861 fix offline downsync (#172) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2861]: Fix double enum import in tables * [hlm-2861]: Fixed scripts * [hlm-2861]: Fix down sync problem * [hlm-2861]: Fix no facility dialog on stock recon * [hlm-2861]: Fix lints * [hlm-000]: Build fix * added delete check (#177) * Hlm 2878 handle downsync failure (#175) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * Hlm 2879 firebase crashlytics (#178) * [hlm-2879]: Add package base * [hlm-2879]: Add ios bundle identifier * [hlm-2879]: Fix auth * [hlm-2879]: Update back_navigation_help_header.dart * [hlm-2879]: Check for context * [hlm-2879]: Intermittent * [hlm-2879]: Add firebase config * [hlm-2879]: Add crash enforcer * [hlm-2879]: Fix config * [hlm-2879]: Fix config * [hlm-000]: Update README.md (#179) * [hlm-000]: Update README.md * [hlm-000]: Update sync docs * Hlm 2977 profile update (#181) * added profile page * added user * added bloc * added update profile api integration * added loader * added localization codes * added error fallback * removed logs * bug fixes * added filters (#183) * HLM-3161:: Split Age into years and Months across the application (#184) * HLM-3161:: Split Age into years and Months across the application * Updated Date Conversion functions * Code commenting and minor UI fixes (#185) * Code commenting and minor UI fixes * HLM-3161:: Age Split in Table and css fixes for member card * Update app_initialization.dart * Update app_initialization.dart * Digit Text Form Field suffix icon constraints css fixes * Update auth.dart * HLM-1361:: Date Conversion from months to date fixes * Added trailing commas * Error message changes for DOB field * Error message changes for DOB field * HLM-3161:: Updated age calculator logic and added Date utils to digit components (#186) * Digit Date Utils added, and handled years and age end cases * Remove commented lines * Added code commenting for Date Utils and DOB Picker * Hlm 2876 auto sync (#176) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * added auto sync * fixed melos build issue * added tost message * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * removed logs * added filter bandwidth logic * added background service logic * intermetent commit * auto sync fixed * added isdeleted default value * added error handling * age issue fixed * added error handling * removed un-used code * resloved conflicts * removed duplicate * handled bad state * added retry count and row-version * added code comments * fixed typo and file renamed * removed un-used code * removed hard-coded credentials * typo fixes * added debouncing + filter checklist entity for sync-down * Updated Age logic in DateExtensions --------- Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov * added filter for stock recon (#188) * added filter for stock recon * removed un-used code * Updated Ade and months validations for DOB Picker (#189) * HLM-3161:: Added Generic error message for the DOB Picker and handled negative years and months validation (#191) * HLM-3161:: Negative months and years use cases validations added * HLM-3161:: Added Generic error message for the DOB Picker * HLM-3161:: Years and months conversion in Delivery intervention page * HLM-3161:: input formatter added for text field * bug fix for filter (#193) * bug fix for filter * removed un-used code * [fix] added dropdown value population (#194) * Hlm 2981 row version (#195) * resolved conflicts * resolved conflicts * added row-version schema * remove duplicate isar open * removed un-used file * added app version (#197) * added app version * added version * HLM-3161:: Age and Date of Birth Fixes (#199) * HLM-3161:: Age and Date of Birth Fixes * HLM-3161:: Age and Date of Birth Fixes * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * HLM-2850:: Gender value Others not retaining on Edit Fixes (#202) Co-authored-by: Naveen * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * HLM-1890:: If Default identifier is ID, "ID Number" field should be hidden from the UI. (#208) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * Hlm 3091 proximity based search (#190) * added filter for stock recon * removed un-used code * added fallback code * added query * enabled proximity bases search * modified the query * modfied the query * added clearing the search bar when proximity search is triggered * added filters * Update dart.yml (#200) * Update dart.yml * Update dart.yml * Update dart.yml * Update dart.yml * HLM-3379: Fixed proximity based search * Revert "HLM-3379: Fixed proximity based search" This reverts commit a22ef1cddcdb14ae132da2e9689b96c01803f0bc. * HLM-3379: Fixed proximity based search (#205) * HLM-3379: Fixed proximity based search * HLM-3379: Code updated * HLM-3379: Updated code * Proximity Based search Code review changes * HLM-3379:Updated distance display info inside brackets --------- Co-authored-by: Ramkrishna-egov * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * removed TODO as it's been completed * Update auth_model.dart --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Nested Checklist Code Changes (#269) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments * Hlm 2650 resource card multiround proximity (#275) * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments --------- Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Naveen Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved conflicts * resolved conflicts * added dump-api * HLM-4325:: Boundary Selection fix (#279) * HLM-4325:: Boundary Selection fix * HLM-4325:: Reset children dropdown values on change of parent value * resolved conflicts * removed un necessary extended class --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.nore… * Develop rebase with master (#302) * Develop (#285) * Hlm 2650 resource card multiround proximity (#283) * [hlm-2825]: Fix project selection error (#162) * Hlm 2742 and HLM 931 (#163) * [hlm-2742]: Beneficiary progress bar * [hlm-2742]: Report selection * [hlm-2742]: Fix overflows * [hlm-2742]: Intermittent * [hlm-2742]: Update transaction search model * [hlm-2742]: Intermittent * [hlm-2742]: Intermittent * [hlm-2742]: Fix report * [hlm-2742]: Fix recon additional details * [hlm-2742]: Fix localization * [hlm-2742]: [Revert this commit] * [hlm-2742]: Intermittent * [hlm-2742]: Fix * [hlm-2742]: Update report_details.dart * Revert "[hlm-2742]: [Revert this commit]" This reverts commit 8fd72d0b351630334eb59dae20a64f00a0d7b698. * [hlm-2742]: Fix report selection i18n * [hlm-2742]: Fix dependencies * [hlm-2742]: Update report_details.dart (#164) * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * Hlm 2547 locality fixes (#167) * added help icon * added call support * added checklist plugin * added help icon fixes * removed images * removed un-used code * modified json * added localization keys * [hlm-2547]: Fix address locality model * [hlm-2547]: Add locality for delivery intervention * added applogo * bug fixe s * added enum for beneficiary * added individual delivery * resolved * resolved commits * help icon and progress bar fixes * added id check * added lcoality for updates * added address id * fixed navigation issue * added stock min and max validation * updated validation * fixed address id issue * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2547]: Lints + fix build * [hlm-2547]: Fix * [hlm-2547]: Fix beneficiary type * [hlm-2547]: Pluralize tasks * [hlm-2547]: Pluralize beneficiaries * [hlm-2547]: Update search_households.dart * [hlm-2547]: Fix locality model * [hlm-2547]: Typo * [hlm-2547]: Fix target * [hlm-2547]: Fix target count * [hlm-2547]: Fix values * [hlm-2547]: Add launcher icons * [hlm-2547]: Fix manifest --------- Co-authored-by: Ajil Oommen Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * [hlm-2478]: Fix is deleted (#170) [hlm-2478]: Update models * [hlm-000]: Add generated files (#173) * [hlm-931]: Fix progress bar for non-distributor (#174) * Hlm 2861 fix offline downsync (#172) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2861]: Fix double enum import in tables * [hlm-2861]: Fixed scripts * [hlm-2861]: Fix down sync problem * [hlm-2861]: Fix no facility dialog on stock recon * [hlm-2861]: Fix lints * [hlm-000]: Build fix * added delete check (#177) * Hlm 2878 handle downsync failure (#175) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * Hlm 2879 firebase crashlytics (#178) * [hlm-2879]: Add package base * [hlm-2879]: Add ios bundle identifier * [hlm-2879]: Fix auth * [hlm-2879]: Update back_navigation_help_header.dart * [hlm-2879]: Check for context * [hlm-2879]: Intermittent * [hlm-2879]: Add firebase config * [hlm-2879]: Add crash enforcer * [hlm-2879]: Fix config * [hlm-2879]: Fix config * [hlm-000]: Update README.md (#179) * [hlm-000]: Update README.md * [hlm-000]: Update sync docs * Hlm 2977 profile update (#181) * added profile page * added user * added bloc * added update profile api integration * added loader * added localization codes * added error fallback * removed logs * bug fixes * added filters (#183) * HLM-3161:: Split Age into years and Months across the application (#184) * HLM-3161:: Split Age into years and Months across the application * Updated Date Conversion functions * Code commenting and minor UI fixes (#185) * Code commenting and minor UI fixes * HLM-3161:: Age Split in Table and css fixes for member card * Update app_initialization.dart * Update app_initialization.dart * Digit Text Form Field suffix icon constraints css fixes * Update auth.dart * HLM-1361:: Date Conversion from months to date fixes * Added trailing commas * Error message changes for DOB field * Error message changes for DOB field * HLM-3161:: Updated age calculator logic and added Date utils to digit components (#186) * Digit Date Utils added, and handled years and age end cases * Remove commented lines * Added code commenting for Date Utils and DOB Picker * Hlm 2876 auto sync (#176) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * added auto sync * fixed melos build issue * added tost message * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * removed logs * added filter bandwidth logic * added background service logic * intermetent commit * auto sync fixed * added isdeleted default value * added error handling * age issue fixed * added error handling * removed un-used code * resloved conflicts * removed duplicate * handled bad state * added retry count and row-version * added code comments * fixed typo and file renamed * removed un-used code * removed hard-coded credentials * typo fixes * added debouncing + filter checklist entity for sync-down * Updated Age logic in DateExtensions --------- Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov * added filter for stock recon (#188) * added filter for stock recon * removed un-used code * Updated Ade and months validations for DOB Picker (#189) * HLM-3161:: Added Generic error message for the DOB Picker and handled negative years and months validation (#191) * HLM-3161:: Negative months and years use cases validations added * HLM-3161:: Added Generic error message for the DOB Picker * HLM-3161:: Years and months conversion in Delivery intervention page * HLM-3161:: input formatter added for text field * bug fix for filter (#193) * bug fix for filter * removed un-used code * [fix] added dropdown value population (#194) * Hlm 2981 row version (#195) * resolved conflicts * resolved conflicts * added row-version schema * remove duplicate isar open * removed un-used file * added app version (#197) * added app version * added version * HLM-3161:: Age and Date of Birth Fixes (#199) * HLM-3161:: Age and Date of Birth Fixes * HLM-3161:: Age and Date of Birth Fixes * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * HLM-2850:: Gender value Others not retaining on Edit Fixes (#202) Co-authored-by: Naveen * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * HLM-1890:: If Default identifier is ID, "ID Number" field should be hidden from the UI. (#208) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * Hlm 3091 proximity based search (#190) * added filter for stock recon * removed un-used code * added fallback code * added query * enabled proximity bases search * modified the query * modfied the query * added clearing the search bar when proximity search is triggered * added filters * Update dart.yml (#200) * Update dart.yml * Update dart.yml * Update dart.yml * Update dart.yml * HLM-3379: Fixed proximity based search * Revert "HLM-3379: Fixed proximity based search" This reverts commit a22ef1cddcdb14ae132da2e9689b96c01803f0bc. * HLM-3379: Fixed proximity based search (#205) * HLM-3379: Fixed proximity based search * HLM-3379: Code updated * HLM-3379: Updated code * Proximity Based search Code review changes * HLM-3379:Updated distance display info inside brackets --------- Co-authored-by: Ramkrishna-egov * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * removed TODO as it's been completed * Update auth_model.dart --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Nested Checklist Code Changes (#269) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments * Hlm 2650 resource card multiround proximity (#275) * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments --------- Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Naveen Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved conflicts * resolved conflicts * added dump-api * HLM-4325:: Boundary Selection fix (#279) * HLM-4325:: Boundary Selection fix * HLM-4325:: Reset children dropdown values on change of parent value * resolved conflicts * removed un necessary extended class --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> * V1.2.0 patch-1 (#284) * v1.2.0-beta-version upgrade * Validation fixes on Household Location non mandatory fields * Sync Up fixes for empty string in address * Sync Up fixes for empty string in address * Validation messages added to localization for non mandatory fields --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> * Multiround:: referral management (#295) * Hlm 2650 resource card multiround proximity (#283) * [hlm-2825]: Fix project selection error (#162) * Hlm 2742 and HLM 931 (#163) * [hlm-2742]: Beneficiary progress bar * [hlm-2742]: Report selection * [hlm-2742]: Fix overflows * [hlm-2742]: Intermittent * [hlm-2742]: Update transaction search model * [hlm-2742]: Intermittent * [hlm-2742]: Intermittent * [hlm-2742]: Fix report * [hlm-2742]: Fix recon additional details * [hlm-2742]: Fix localization * [hlm-2742]: [Revert this commit] * [hlm-2742]: Intermittent * [hlm-2742]: Fix * [hlm-2742]: Update report_details.dart * Revert "[hlm-2742]: [Revert this commit]" This reverts commit 8fd72d0b351630334eb59dae20a64f00a0d7b698. * [hlm-2742]: Fix report selection i18n * [hlm-2742]: Fix dependencies * [hlm-2742]: Update report_details.dart (#164) * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * Hlm 2547 locality fixes (#167) * added help icon * added call support * added checklist plugin * added help icon fixes * removed images * removed un-used code * modified json * added localization keys * [hlm-2547]: Fix address locality model * [hlm-2547]: Add locality for delivery intervention * added applogo * bug fixe s * added enum for beneficiary * added individual delivery * resolved * resolved commits * help icon and progress bar fixes * added id check * added lcoality for updates * added address id * fixed navigation issue * added stock min and max validation * updated validation * fixed address id issue * Hlm 2742 fix localization (#165) * [hlm-2742]: Update report_details.dart * [hlm-2742]: Fix translation for tile * [hlm-2054]: Decrease debounce duration (#169) Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * Hlm 2765 fix project sync dialog (#168) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2547]: Lints + fix build * [hlm-2547]: Fix * [hlm-2547]: Fix beneficiary type * [hlm-2547]: Pluralize tasks * [hlm-2547]: Pluralize beneficiaries * [hlm-2547]: Update search_households.dart * [hlm-2547]: Fix locality model * [hlm-2547]: Typo * [hlm-2547]: Fix target * [hlm-2547]: Fix target count * [hlm-2547]: Fix values * [hlm-2547]: Add launcher icons * [hlm-2547]: Fix manifest --------- Co-authored-by: Ajil Oommen Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> * [hlm-2478]: Fix is deleted (#170) [hlm-2478]: Update models * [hlm-000]: Add generated files (#173) * [hlm-931]: Fix progress bar for non-distributor (#174) * Hlm 2861 fix offline downsync (#172) * [hlm-2765]: Update SDK constraints * [hlm-2765]: Fix * [hlm-2765]: Fix sync error type * [hlm-2765]: Fix localization * [hlm-2765]: Fix error after coming back online * [hlm-2765]: Update pods * [hlm-2861]: Fix double enum import in tables * [hlm-2861]: Fixed scripts * [hlm-2861]: Fix down sync problem * [hlm-2861]: Fix no facility dialog on stock recon * [hlm-2861]: Fix lints * [hlm-000]: Build fix * added delete check (#177) * Hlm 2878 handle downsync failure (#175) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * Hlm 2879 firebase crashlytics (#178) * [hlm-2879]: Add package base * [hlm-2879]: Add ios bundle identifier * [hlm-2879]: Fix auth * [hlm-2879]: Update back_navigation_help_header.dart * [hlm-2879]: Check for context * [hlm-2879]: Intermittent * [hlm-2879]: Add firebase config * [hlm-2879]: Add crash enforcer * [hlm-2879]: Fix config * [hlm-2879]: Fix config * [hlm-000]: Update README.md (#179) * [hlm-000]: Update README.md * [hlm-000]: Update sync docs * Hlm 2977 profile update (#181) * added profile page * added user * added bloc * added update profile api integration * added loader * added localization codes * added error fallback * removed logs * bug fixes * added filters (#183) * HLM-3161:: Split Age into years and Months across the application (#184) * HLM-3161:: Split Age into years and Months across the application * Updated Date Conversion functions * Code commenting and minor UI fixes (#185) * Code commenting and minor UI fixes * HLM-3161:: Age Split in Table and css fixes for member card * Update app_initialization.dart * Update app_initialization.dart * Digit Text Form Field suffix icon constraints css fixes * Update auth.dart * HLM-1361:: Date Conversion from months to date fixes * Added trailing commas * Error message changes for DOB field * Error message changes for DOB field * HLM-3161:: Updated age calculator logic and added Date utils to digit components (#186) * Digit Date Utils added, and handled years and age end cases * Remove commented lines * Added code commenting for Date Utils and DOB Picker * Hlm 2876 auto sync (#176) * [hlm-2878]: Handle down sync error * [hlm-2878]: Fix build * added auto sync * fixed melos build issue * added tost message * [hlm-2878]: Minor optimization * [hlm-2878]: Update network_manager.dart * removed logs * added filter bandwidth logic * added background service logic * intermetent commit * auto sync fixed * added isdeleted default value * added error handling * age issue fixed * added error handling * removed un-used code * resloved conflicts * removed duplicate * handled bad state * added retry count and row-version * added code comments * fixed typo and file renamed * removed un-used code * removed hard-coded credentials * typo fixes * added debouncing + filter checklist entity for sync-down * Updated Age logic in DateExtensions --------- Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov * added filter for stock recon (#188) * added filter for stock recon * removed un-used code * Updated Ade and months validations for DOB Picker (#189) * HLM-3161:: Added Generic error message for the DOB Picker and handled negative years and months validation (#191) * HLM-3161:: Negative months and years use cases validations added * HLM-3161:: Added Generic error message for the DOB Picker * HLM-3161:: Years and months conversion in Delivery intervention page * HLM-3161:: input formatter added for text field * bug fix for filter (#193) * bug fix for filter * removed un-used code * [fix] added dropdown value population (#194) * Hlm 2981 row version (#195) * resolved conflicts * resolved conflicts * added row-version schema * remove duplicate isar open * removed un-used file * added app version (#197) * added app version * added version * HLM-3161:: Age and Date of Birth Fixes (#199) * HLM-3161:: Age and Date of Birth Fixes * HLM-3161:: Age and Date of Birth Fixes * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * HLM-2850:: Gender value Others not retaining on Edit Fixes (#202) Co-authored-by: Naveen * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * HLM-1890:: If Default identifier is ID, "ID Number" field should be hidden from the UI. (#208) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * Hlm 3091 proximity based search (#190) * added filter for stock recon * removed un-used code * added fallback code * added query * enabled proximity bases search * modified the query * modfied the query * added clearing the search bar when proximity search is triggered * added filters * Update dart.yml (#200) * Update dart.yml * Update dart.yml * Update dart.yml * Update dart.yml * HLM-3379: Fixed proximity based search * Revert "HLM-3379: Fixed proximity based search" This reverts commit a22ef1cddcdb14ae132da2e9689b96c01803f0bc. * HLM-3379: Fixed proximity based search (#205) * HLM-3379: Fixed proximity based search * HLM-3379: Code updated * HLM-3379: Updated code * Proximity Based search Code review changes * HLM-3379:Updated distance display info inside brackets --------- Co-authored-by: Ramkrishna-egov * HLM-3950:: Digit Components changes pull out from CBO App (#210) * HLM-3560::Black Screen fixes on App launch (#211) * HLM-3560::Black Screen fixes on App launch * HLM-3560::Black Screen and Offline data fetch on App launch * HLM-3560:: added Code commenting for Blank screen fixes * Blank screen localizations changed to English * Hlm 2982 added seperate server client time (#209) * added client-audit-time * added roles actions * removed commented code * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * added client audit details * added null check * added null check * added missing routers * added fix for task client audit details * added time stamp and removed the print statements * removed TODO as it's been completed * Update auth_model.dart --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Nested Checklist Code Changes (#269) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments * Hlm 2650 resource card multiround proximity (#275) * added client-audit-time * HLM-2850:: Gender value Others not retaining on Edit Fixes * HLM-2650: Added static screen for resource benificiary & added localisation * HLM-2650: Updated dart.yaml (#204) * added roles actions * HLM-2650:Added Stepper for Doses * removed commented code * HLM-2650: Updated card for Resource * added client audit details * updated the mason scripts - added client audit details * added client audit details * added time log in audiit * added audit details * added client modified Time * added client audit details for member * added client audit details * added client audit details on household update * added client audit details for delete * added client aduit details for project beneficary * HLM-2650: Static screen in progress * HLM-2650: Added Cycle table * added client audit details * Past delivery changes * HLM-2650: Updated key for localisation * added null check * added null check * added missing routers * HLM-2650: Added project type model * HLM-2650,HLM-3117: Added Bloc, Schema,Model * added projectype mapping in beneficary Details page * added fix for task client audit details * added past delivery * added table color schema * added dynmaic resource card * added minor validation * removed print and un-used code * added active cycle * HLM-3117: Added localisation & fixed integer taking 0 value * HLM-3117: Added popup data and updated stpper to dynamic * HLM-3117: Added popup data and updated stpper to dynamic * code seperation * resolved conflicts * HLM-3117: rebasing * HLM-3117: future deliveries WIP * fixed the dialog height and past deliverytable * HLM-3117: Added futures deliveries * HLM-3117: Addde localisation * added past resources and active cycle and dose * HLM-4067: Added API integration for future delivery (#216) * HLM-4067: Added API integration for future deliveires * HLM-4067: clean up * HLM-4067: Added task resource api (#217) * HLM-3117: Added Static screen for past record (#215) * HLM-3117: Added static screen for past record * HLM-3117: Added static screen for past record * HLM-4067: Updated naming convention, handled dose administered, localisation (#218) * HLM-4067: Updated naming convetion, handled dose * HLM-4067: Added deliverystrategy in additionals fields & updated localisation for table * Hlm 3068 adv events merge to multi round (#213) * HLM-3068:: Adverse Events Static screen and Bloc, Models * HLM-3068:: Adverse events static screen routing changes * HLM-3068::Adverse Events API integration * HLM-3068::Adverse Events, Localization changes for reattempts field * HLM-3068::Adverse Events:: Search Response Fix * Print statements removed * Restrict Tracking of adverse events while updating Delivery, PendingSync Count fixes * HLM-3068:: Adverse event fixes * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Navigate to success page if no adverse events observed * HLM-3068:: Adverse events merging to Multi round campaign * HLM-3068:: Adverse events changes added to multi round * TODO comments added * Adverse events fixes merged to multi round and UI fixes * Comments and print statements removed * Age Eligibility check added, Beneficiary Refused status updated. * Beneficiary Refused check, Adverse events recorded check and Update Delivery removed * Current and future cycle and Doses Fixes * TODO comments added * HLM-4065::Search Households clear event on Open Pressed (#219) * added project type * added resources * added status * HLM-4065::Fetch-Active and past cycle for Beneficiary Table data (#221) * HLM-4065::Render Current and Past Cycles, Future delivery Bug fixes (#222) * HLM-4064: Record Past Delivery Details (#220) * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM:4064: Added bloc * HLM:4064: Added bloc * HLM-4064: clean up in progress * HLM-4064: Added dynamic form controlfor record past delivery, updated bloc to handled futureTask * HLM-4064: Merge conflic fixes from /HLM-2650-resource-card-multiround * HLM-4064: Added adverse event popup, updated localisation,updated bloc for futuretask (#223) * HLM-4064: Added adevrse event popup, updated localisation,updated bloc for futuretask * HLM-4064: Added enum for hardcoded values * HLM-4064: Added null check for advrese event, Removed all hardcoded values * HLM-4064,HLM-3565: Updated future Task back button, updated localisation for future task (#225) * HLM-3565: Added code comment (#224) * HLM-3565: Added code comment * HLM-3565: Added localisation,removed help button, * HLM-3565:Removed unwanted code * HLM-4065:: Beneficiary Details fixes (#226) * HLM-4065:: Beneficiary Details fixes * Merge conflicts fixes * Merge conflicts fixes * HLM-3565: Added min age and max age& removed hardcoded values (#227) * added status reset * HLM-3565: Added patches back to search not owrking, added null check for task data (#229) * HLM-4065::Date validation fixes, and null check added (#230) * HLM-4065::Date validation fixes, and null check added * HLM-4065::Past Cycles in reverse order * HLM-3565: Added dash on table (#232) * HLM-3565: Added dash on table * HLM-3565:Fixed conflict issue * HLM-3565:: Reverted PR, and UI fixes (#233) * Revert "HLM-3565: Added dash on table (#232)" This reverts commit 7796aed9bb8f00f5932645eb13b03d331e1dd814. * HLM-3565:: Reverted PR, and UI fixes * HLM-3074:: Multi Round fixes (#234) * HLM-3565: Added fixes for backward compatibility (#235) * HLM-3565: Fixed back button for splash (#236) * HLM-3565: Added validation for record past& fixed asterisk (#237) * HLM-3565: Added patches for future task shwoing for all other child card (#238) * HLM-3074:: Multi Round UI/UX Fixes and Validation fixes on Cycle reset (#239) * HLM-3565: Hide back and help button for doseadminstered screen & prevented physical back button click (#241) * HLM-3565: Hide back and help button for doseadminstered screen & prevnt physical back button click * HLM-3565: Removed print and added rethrow * HLM-3565: Fixed back button navigating to household instead of search (#242) * HLM-3565: Added default value as per the figma for future dose (#243) * added button color * added toggle button to view records * removed the shadow * HLM-3565: Fixed resource card delete option et to last element & fixed multiple card showing same value (#244) * added padding * HLM-3565:Added missing code for project bloc, fixed future task taking multiple data (#246) * HLM-3565: Fixed back to search not redirecting to search for member card after delete (#247) * HLM-3565: Added localisation , added static screen for vie whouseholkd (#250) * HLM-3565: Fixed yes no button for dialog (#253) * HLM-3565: Commented code for household button (#254) * HLM-3565: Added validation, Fixed button shrink issue on record dose, fixed reload issue (#255) * HLM-3565: Validtion in progress * HLM-3565:Added validation, Foxed button shrink issue, fixed reload issue * HLM-3565: Removed hardcoded start & end date value * HLM-3565: Removed print statement * HLM-3074:: Button validation fixes on completion of cycle and current… (#245) (#256) * HLM-3074:: Button validation fixes on completion of cycle and current cycle moved to context utility * HLM-3074:: Table height fix * HLM-3074:: Dose Criteria configuration for each delivery added (#257) * HLM-3565: Fixed modal issue, added reload event (#258) * HLM-3565: Added view household, fixed popup paddign issue * HLM-3565: Fixed dialog issue, updated reload event * HLM-3565 * HLM-3565: Fixed view to household not reloading future task * HLM-3074:: Age Validation Fixes (#259) * HLM-3074:: Age Validation Fixes * Removed print statements * Adverse events load on proximity search (#260) * Multi round fixes :: task reload, Location null check , deliveries config changes * Code commenting * Proximity fixes for individual search for INDIVIDUAL based campaign (#263) * Proximity fixes for individual search for INDIVIDUAL based campaign * Proximity Toggle Fixes and UI?UX Audit fixes * Demo fixes * Beneficiary Details mapping fixes,Task Local Repository Search Fixes, UI/UX Bug Fixes, * HLM-4320:: Status Updates * Build pipeline fixes (#267) * Hlm 2650 UI fixes (#268) * HLM-2650:Added ui fixes for table height and left column issue * UI/UX Audit Fixes * Beneficary Details updated based on Beneficiary Type * Nested Checklist Code Changes (#269) * UI/UX Fixes * Reverted script * Dialog padding fixes * resolved the sync issue * removed the un-necessary bloc call * Proximity fixes for Household Based --------- Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Naveen * added sync fixes * Adverse event entity name changed to Side Effect Entity (#271) * Adverse event entity name changed to Side Effect Entity * print logs removed * Symptoms values mapping * Side effect local and remote repository added to sync * Task Oplog creation when resources are null (#273) * Task Oplog creation when resources are null * Code Reformatting * Handle Pop of dialog on back button pressed * Handle Pop of dialog on back button pressed * Resolved review comments * Resolved review comments * Resolved review comments * Resolved review comments --------- Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Naveen Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> * resolved conflicts * resolved conflicts * added dump-api * HLM-4325:: Boundary Selection fix (#279) * HLM-4325:: Boundary Selection fix * HLM-4325:: Reset children dropdown values on change of parent value * resolved conflicts * removed un necessary extended class --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.gi… --------- Co-authored-by: ajilo-eGov <111035641+ajilo-eGov@users.noreply.github.com> Co-authored-by: roopeshegov <122782658+roopeshegov@users.noreply.github.com> Co-authored-by: Ajil Oommen Co-authored-by: Ramkrishna-egov <85437265+Ramkrishna-egov@users.noreply.github.com> Co-authored-by: Ramkrishna-egov Co-authored-by: Anil Singha <99383116+anilsingha-eGov@users.noreply.github.com> Co-authored-by: kavi_elrey@1993 <25226238+kavi-egov@users.noreply.github.com> Co-authored-by: rachana-egov <137176770+rachana-egov@users.noreply.github.com> Co-authored-by: rachana-egov --- .../assets/audio/add.wav | Bin 0 -> 230132 bytes .../assets/audio/buzzer.wav | Bin 0 -> 225358 bytes .../ios/Podfile.lock | 16 + .../ios/Runner/Info.plist | 4 + .../lib/app.dart | 10 + .../beneficiary_registration.dart | 37 + .../beneficiary_registration.freezed.dart | 744 ++++++++++++++---- .../lib/blocs/project/project.dart | 46 +- .../lib/blocs/scanner/scanner.dart | 66 ++ .../lib/blocs/scanner/scanner.freezed.dart | 462 +++++++++++ .../search_households/search_households.dart | 386 ++++----- .../search_households.freezed.dart | 404 +++++++--- .../secure_store/secure_store.dart | 22 + .../local_store/sql_store/sql_store.g.dart | 38 +- .../sql_store/tables/project_beneficiary.dart | 1 + .../local/project_beneficiary.dart | 6 + .../lib/data/repositories/oplog/oplog.dart | 6 + .../lib/data/repositories/remote/mdms.dart | 64 -- .../lib/models/data_model.mapper.g.dart | 30 +- .../models/entities/project_beneficiary.dart | 6 + .../lib/models/entities/scanner_type.dart | 10 + .../model_configs/enum_scannertype.json | 18 + .../model_configs/project_beneficiary.json | 9 + .../beneficiary/deliver_intervention.dart | 17 +- .../pages/beneficiary/household_overview.dart | 290 ++++--- .../household_details.dart | 1 + .../household_location.dart | 2 + .../individual_details.dart | 263 +++++-- .../lib/pages/qr_scanner.dart | 652 +++++++++++++++ .../lib/pages/search_beneficiary.dart | 95 ++- .../lib/router/app_router.dart | 2 + .../lib/router/app_router.gr.dart | 73 ++ .../lib/utils/i18_key_constants.dart | 67 ++ .../beneficiary/view_beneficiary_card.dart | 4 +- .../pubspec.lock | 80 ++ .../pubspec.yaml | 6 + .../lib/blocs/location/location.freezed.dart | 228 +++--- .../digit_row_card_model.freezed.dart | 42 +- .../digit_row_card_model.g.dart | 9 +- .../lib/theme/digit_theme.dart | 2 +- .../atoms/digit_outline_icon_button.dart | 31 +- 41 files changed, 3346 insertions(+), 903 deletions(-) create mode 100644 apps/health_campaign_field_worker_app/assets/audio/add.wav create mode 100644 apps/health_campaign_field_worker_app/assets/audio/buzzer.wav create mode 100644 apps/health_campaign_field_worker_app/lib/blocs/scanner/scanner.dart create mode 100644 apps/health_campaign_field_worker_app/lib/blocs/scanner/scanner.freezed.dart create mode 100644 apps/health_campaign_field_worker_app/lib/models/entities/scanner_type.dart create mode 100644 apps/health_campaign_field_worker_app/lib/models/model_configs/enum_scannertype.json create mode 100644 apps/health_campaign_field_worker_app/lib/pages/qr_scanner.dart diff --git a/apps/health_campaign_field_worker_app/assets/audio/add.wav b/apps/health_campaign_field_worker_app/assets/audio/add.wav new file mode 100644 index 0000000000000000000000000000000000000000..46c3308159430a0f606662a429ec8ac642c17882 GIT binary patch literal 230132 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℘reCL4EZ z$LQ{A3baCP8?8dm(En*t8{O8{*3*uUWpzER+#>>0{Lx^S;ML^#)K6+IN5i>XX{2mJ4wFR~ECiqO6IN;i>1n6u2EE!|E`S+?}jSwV`m{KKeL) z4A{`o^bv|8yHop#j+_s;6Llj0rTV6xSB5K}B4^R%hz2cYE`U12VMK-Y$2$|d$z_67 z!g9$fX)mQzxk2$B}Ao8=$R?VC9zy^VOVFhTU=UScg`F01gy82&7OzVnCEWf7Kk zF{q5~w7Ggh^HaM|BhxL>ZPRC))|j4IS6e?hB4z)2GTi?LUX|NIS;4NA&R9)uEzTh- zhiXI)Bul7WbcpCm@yQod1}DX>i>0wIG8aQ5;-3<7l#LC>r{I-P0pvu6!9MIG(u2t5 zRPci|ENLuq$cM{z%J0aA$p4aG%NdY6D05y`zIeCfHTgHqg0~|b;|CMnf=xpwfj_dr zhS`prrW$+ck7&nhN2&kNwoup8t<>Zgi}i(;Ip+8F^Y$Yyuj{Y!cK$2D2H|&6Z$&Yl z&6U%I{CyyU;0w*-w*~8AV~V6MarK;B9KmuRJ2O&wyW%bMmURWQq1#yqO9kD6N|9

v^IP-@wBpKXl3BH z`!ClZ+hh>aZ8o;hUDnmsoJ^L*(|Y`xd%#OkJ)p8pSJ=w zz;WQ?f91SpKjRIfr-<(e2gnCVOB7bwA(=$FI%`0tF1s)rkus(8fDQeEd_`9!t|Y&P zBoVX6@2yexUs-{rp~YudWzg#a+MBxGfLAEfem71sT(B%KFS5V3^>R@z$k);*4?>}5 zp=pr}s1I_Pqbou?y*&>P4R)JMQ2|H=MsqDQ_pZ$gjuFVCz!N z8Dz9P+TFLLyvQ-k`O>n(+RS*w_)%vAhzJI<#^&p$8y6eyS~i$_+nd|&xqdjK-cH_| z!A?O-$Q`Pl`k8t{RFZuO7pVo=II~HNW&-Rkz@0+Q$B(j=fCF|XJEy7u?z1+Yzy#=G z?GgF)@?S@Jsmz#IMA)?cLQf8 zs}WOH`6{*`;4SayUhV8?TW@ukIvMZkXXrZWCTTnBT-uxZO8rjL1hdN8%C^SQz?JK{ z=N%vL1}BFC;R%T!$wR~kQU>CSH{;P z(@-WtqFb1^SZaucR7d+_Mcf?(k3UYZT0BVN1o>eN0G~KYc~4P4FOkzL<8oTISS;*C zO1Lwi(aiOg=GeqQp8vD!jdNFNz?v|=GP-p6pzo{bDz!Iscl28g*=D!-V(DPpDJSe& z;ROs-@O!`SvW7!j;B>@|qS#sPKiv8J9R3Y4CVmAnGG@z<$)3q!`IQ`B_T7y9j0d8> zMfJ(L04_O?UPkmG#}X_u!k)n~p;=fit0(JF z<)_NSAp5E-wjEo-`oa1H^@r~vv(fA9tDFJ!F5V%bSM)^cmhF>WkVmEOWt{BZ*{;mP znLJ5-acw$6K12G0ZJsOQ&BG6a%e+zdxH7)Iou#qaYLFOy==$ld>Ne>1={5SlOo(}! zwQZ@R?6|}4Zsu9$ALuU(TSHZ2&!T5BHpZg+Q&q_E1Po&1m1K~x5nG7YoG+XrY#vqs z-GFvi{u4jOe9mftjm4L;WEb~<6 z)~u6R({&_p3Jq_JeS&tt{onlZJqPpw6hz()}>V^-IkR z)7a91)=`f8W&J%L-A(+?a!z<)_)O$fbQc^%)Z~1c3-YN-NQ4%Fcw`B2fEdFKaBP?d zeF;y7lJPB-8pg7e0*|0epwp~6&@EObl7m>V=Xe2#S^wpyghRz?vMtaDqL!P?J~V?vAz^`!o-u9kkdekNd< zMwnk(-j`mozjRc0zwmS_mjM2wUpO8)8hHghWDTZIku9lG?iKni(SsgB7|1%@hr}_? ze!LKyjJ$_OBsL{3CD*28*hYL9Bt$y0?9g^NiuAx%;XjD$q>tZ6fJt77TgivXdPy5d zJ_6LKTF$yGvHXU#E&ngxGJG<=Ak~ubGSVy7+t@ADh-2Z;X=pOEQf z_a&31gB6{W?Xp|stdZ|ltme-aJZ4YfI2c2iFJi9PR(}V-+l9Ke*=m-4F&CKH8CUBE z8@}mY8uscJnSL01T8CL@*>lS-xE{IRdzt0ag67co(7DKz#PHNCZdGyuafRGMWRNe& zL*zK(H1`NGfxDEQ!YHuQ=NhAW>T6&J!l?h zd1u&Qtgf$aXsGXNIBs}sJZ3&<(UxAct#rDat-KM>g5bk|9r(*t62s##0dt>$RX!bf zOVj8B)Kn57X_6!_v3Z;oXdP?~V<&S`<*hgj4+jj>G_(t|h}9M3UiJrjLfmYGbCKRf zdxTenEoAqk^<@{NLir}yjci`_iS+dJK_Z2S2K>|tz?prioE>KbUjz@ii#)$=we0iF z%gq-JLkztDpYTeb(9JR~1eom&bGAL#_T8m+&hh=@6@;1xPenRLZd6(-t?a2Bgwjxh ziKgUhawlcx9wqj1TMz>F26i5ZFSjv|Gj~<)ubd8zhivE_^a^VNt1Fxi*GAi-A@*`k zH@YdWfe^6s(sr`h(krqLlAyFjCMRoQdNe&(R8_PO?1ecFKZb@RTE>y^yWk7&08bsq zS^GgNY1wM3X*>vWF6SCB!${)_W5% zy^LI=MpHkDV?;yXH#-R#>EQlB^aeKcE-Jt#LU$p5Wvh5R)r>)5nV1}U#ri*r&N|46 ztc&998c)UtcXxM}#TIvWcV`EOK^B(<2DgEQ!QI_;kwM4fo^;YlcjvobP4UMTTScbR z@4frZJ?D2v;?J<1q?b6sG-k?b1a+3-reSG(X8e}KZ;3nNv4k$g_7;0nLS6FD_}THj zv_rMasU_4hWu($LR4lZ@Q`>{sr`gD&VTE7v>gIid?C<%UQ8{aJ*XP>u2NpaiI%b}4 zyKbNDy6h%=@&3v}i_qH8zu|Y_0qUTBrAAdUKUV!l#i--KiJ8m&&6nb;F{i0Ck|wmu zZ|P~wtNaJLO;e%(FN+J9NTiT;>AQ3b6|FYw?&uGjdd4kFh$h^KON^hFvM^;%$+(g! zi9-^q>bvVG_D|*uG6FdXnZ~8Q!@l*7Zw{$wmbqpA-TVVN6?1>WGwqS%$QhTHl0UgH zsmNfxVcqS_cMkT}^EMac;D4d(q3!5a^q%^Lx`sMc{Z)NN{Y!mI-9uGbwF)w^d+6)* zeehtcm*2>&+)(}w-m6piGMvQrqmzjMZlTstWmFcv4`f^##MOyAmv|>JIiXVmno=pH zR;f;<#w4XBt=FH_Ph_E9KpaRv@rIZTxy>Pv=U1DJ=FRyt^9SeZbARS+&N-R8F84}) zF#kbOFLR15Y8&qw;Qrg&*GCF(gt{SJ_^dKGwjE3yANgziJ-!k@Q4nK&mAm5Qq=}+_uezdBiuBQIDv8RayZ}q9T!*NLB zmV~(_ju#)3G$V1jew}U}cbN^NYtRPKI?-l<^uRG!8TX&o1l#z+Aw_%gvhurtA9z;o zen>Hh`I`zi7R|K`vz~Xfa(dl`pp7&OTomdEAEkcMBd!dG!&5x3`ot${nt%`IDL)r< z{8f;#`HyNwwL~u=kEPy{j=Tpa?K-kLwi~s9H~a`$j(pFqW(}bC|1!KWT#bJbKRW(& z{Mv+^gwrLMl0#CwDKDVr5A(-VCa4vZ=q~Aapjz;VOK?@RwzS3yiVB+KF?snpH*;F# zcFMhz$K>BC>{)cza>t4}o4Wq=EcLz(go15C8^b%JW~m$7lf%G!^_2g_|EWHyy2UT! z_Vac~f7hbNQSAv2S`eEeWkeMGD5g*p^&9JpH76Po+2lBCI(v}&TcgsoG`ur<B#@N_!OSO?tB%WZ!WoJ|`lnm-T=jKsva5^@rw^=f!eB0R~1(s<6LT^ zYOU%zm!eANNbW!810|9^YzEdwDlciUvDjIvH9Z6iVD<4^cnCDP_RLFWvs$A$sV58@ z;#S1vgV*JK+`72Gij^$36gU&}Odey3=3jMBvIY4@uC8ns>V?{QoStvC$@UgSkBe&M ze}s3G%3GORChwoTF8M7BjYVZFCTlH+)`@#|dhkFuIOFp|_e4H|P`#*h^+)vs{t@3u zT>y!tzaa;b!F^;&b_cbeT#j$Rwn^urM}XF%rPHXg_yMdZZpWIF2w9v-V%n%Dst4(_ z^n$5XoHt&b&^xY8oI3S<3R`?xvGQ>Sge~ z+xe>Md~k#}SKSBi-9xS&*OLBBO(#kbt>rkGim|bo)DDWq!`L5~8tVeNvzOE&Dwkiy zPuKCfrl#}8vd~XH9(Ts{XG*)|Q6(l8S0yCJPuI=Rj%5C&I{;Iryx3Um>YL}g<@oM6 zX})W2TQI%gXKsVMA-S)?y?iEbZ9$d76XxEQzINWR!(G`^$G_J9DkO)hh%3Z-(A)2z zj;PzH3RF*2RiUHyLUkT=&M#~&t}e9~G%%j9NQ32UX}sKnWT-#!w|IH10d|y_Oq7D( zqmJq|pRC`Zdub|e@+FW7)#Gc&g_FFA9ZGa5zBpk+d}UpI?PTUW%^){orNpLUU*8!Y z;~eU2YMEe3D6C%S$}{CJ%iEVXHGg*g!NOC8M=d8Tzw9}7ultpo22Wet&}*ShxLkNw z>_coKJj=Gc1O7aKpEjzl+%v8mw}CUzGw3hixI$t*Vin{m@(=K_Rwvt%*`RR|NCzhKT;yZL}Kk z95<7X$p~APvuP%1M;jW#IsYMkLR_WztMTm;>K0Ecel+Py(qa7weFA@mJB#(lilPsq z)_^(C4*b?7ZED+yqNYWkfZcHzcFz*|)AAn|R4BY;u54LrYiK{<>h6B%ZRCptn+t|; z>+m4p4U}SMvy`ff>N|IvD-Ao-WX=r_qX&@ zG72Mw`JVTlwf2+t>*g)y=7rIM@A*gbQwo0PcQ0fL?dA;gVp|(qYnQ>*#Y;oH`BmU> zXklnUp9fTxo>@&L1(Sps*f%KBgWTc(Y1r{WgJUokC+Go|iG-I?+|g*8&fBsHiS#1NvE zvPfPXdM4cWe(_vz?6S|WbTl6&D$FNuy z)t>qf$MF65KI}62kf_XzqFunGCHokd$d($w}qNEi`JHZp)(^SL6YwoI- zQ?;m8F(g(HJ{kT3yooS)KX+JvS#B4VD7sxRykJ~Grvg)9vqHpt+&s&=-nPQ=!Kt`A zdELImz-_@Fx*gJpzY#6w=PZ0#$o@6rJNT1tHl`+XTk-2x@-a`Us2`gmi)i`Fl|_S&``se2AY%27&KN&yq3_Z*rL?viaLOe|41 zNt`@Fv>^6lZLpifIwFg@NtNKc@|jw#&TE)yOojURtjS|)n@|;M=4Yvn_=@p2wKp_B znMZU!QWzT*xhOvN&-CwhEp>UVIo4N2)}jjqWePO~KMQVxPQS1yWNu;g+iE(#I`y6z zUcp!3j}ILQ^$TZ(t1D#{BYe||u+r~w*Vy&^D9*z^X5O&(nbP!F$^+Sy|I_u}NU8FB zViI|gY)g6JMpsA>IR!xVk9xPGRVrUu3(aZOAeQyt0E5_-kI)AHI; zkRcn6UO?rD7@ZX0gywGEyWdvH(ZjsMQnj#2(WruCaNzbVTvoKFsEW0+HDZ5Y&v#FE zfAux-6$;&i{o(OpUQU&JvisSW{6f_S(3IW$1yyf2lS*=DxVv;IrZYK~RHHwUVUiG? z3Fl@$S&UqXO+(8Q82*j?Ow3>pGfA4G>ORn`yJPxlItlEa_olE3OSPmRN%s>a-F%&m zE6csdLTD!`Et(k=0)Kc`xHsDO+Z<-noLOiu*jZ2tlHIX_&P6|pzF73ON%k_%@@}=a zw9nyp1{Z}&giniHbe?3Va3;XrgSzt?`;FVejbsa$itH?AK7E0TCkGSn(Z1+BsjsvR z%f=kkP&yrV;`fO1H5qc=LGT$?&>z&dH_b4eFs(2hF_tneNgkUtGRc`xOTSUO zn9pZ#;tQ~Wa)wko^hB^gW@3=Dp7V%xtF^PakNJCHxKM=r+}9$&a#&|u+uC2)w*&uc zllNb*74ie?Lgvr{v0NmZ*hs$TGWqdr84lt9;Z@vW?jl>6n+RT;gQSsqh&8~kNsMek zbm$nWJM|754XM;^SQz*PM`#Dt5HdMewa2x*F~PXV^pB~UvAyw3(!!+7e8 zy-_uv6o}`_P-Q{5csLt0x$3Ur&T2q)*k~SG^s?|t!QH~Vg1tqt!Z()lmd5rB`w~|x zcb50O?^}Qr;=+H6eZ}PHdb|c{;^(N2va2`?*N(5qRpsD0F zv^~{7nHY5jm14J|lOq>{Zv%c$ch3rk-qFw6$BLNOn2klec~Vi9xyU@p+R+xVI~;$x zc6dH`C;J-)riL7$v*D8B6~(0#K-MgaJHoApv%MTIbBEcbP?3#hcTou40P?&|WA%_K zQd9W^eu8L9ydy54pV7SWMoiG+}5?WC>L=Tgc(u5q<-c&8}zqvMZ^t)Iy>+)J=)V zNhv#e9lwc*WEPQ)O-B0@JbsnDN_=5jGes(g>ZZ1)F4s`sxYO{~z#2n_?@5D_zQn8J zZ)g{3x^oYhRD1zCRL+jh4b>C&`Br!nT@{?`Y(^VqscZSGXuNq&5pNl8UIM#-5frf{ zuHNpS-sZl}f%3uW4d(wbeCkA;)WZHg9}kD5nXy4$YWLXJe| zCeK9A1%Cs7{ZP8_k2pmf8!e1lpwID$tFPkOeOx?un}5J8=V~%{*>6-bGlXbBzCdeZ zbENK)8)=U;q9nqAcS3LC8R$^53I2f=NJ4dvGiWDhXv1ZFzz{QR)PK?MPI#OUNH8Y$ z*R|1=;LThq!iqOgZ1Smah45#;*_Y)W>@qqsZMUrxEU6Zy$YyS9o^DxSsb)*GmvP*4 z8r_JO_sRasK@_T{QjtC4uIMwoGg-jd`8>81H;?zgJ}R<{IE+2OI_Vcw3R!`8h52NI zoClfY4NylJutV55bR_lxs^(mxAJvdO%jK&&Y6j@4>N5?QhV%O0y0nCsafalV32sAY z-FCHw+e-aOe1p5^e$gC$?0@dhb1il+w_UTJG|#ZUD$FxqDEwhQR&>?kwEVVRws&_n zaaZ&t_>1`u2@iu~Bc;S0(e9D1L=@|;YQcZzG+ZD<7 z^^_v{l~RmcL3W4w?ke^M%_kP(arAhyJAaD(1o^vz`u)0dMyuh1eyo0W+@!d7iE&B$ z^$iUB`Nb*^p{9B(TVgN65i!F*ERf~C34FxQtI!45@BE6*tkyXO5;4`n{Y3cMhL~B3Wc5}LAS5cznanTJ+f@Pv@gzdMZ zf^(=l?AhR}7H|e;h7SVPDqHM=T!`7Z0GrMa;fC>vaEfl{BsPVe!hUBKQ3EMI-jWC_ z8)C`8OEBPt_!QiRS3v(ntKe?TK+Y!&Y%^wvdWCAXZi9BKafIQhVUB)~sjLxC{+4Jl zX-pCIdi5RpKY9S-K_*1zMwbU(2PJn!Z_J+K7-U6kFU=(_>&=_Z3oP9&&26a7?Ktnq za*uGg^XK`#2FC{*iIi9+k``&BXOmOZA`iUR^2uT7575(}W5M z%S~CvcaSCA$z;+mfD1WLGDvp?pU~KM+E>eO|O{V&%zDPIRut?w1&_}-?dJIKy zA2|Si=&IbG+;40>{z4MvM?%~1eQyK*c;`Wv%9dmgo9|h0^Dy&a^FQW9>ody(`zZTT zm&(=Hx7#}-xH^D|Xt-7McBC1cicRU+^eA57Guh@`7f$AmgI_h9-o|vLtkhe)0Z|s6 zfEuN8(sZN?G86jTSFoq(dVCsIkJJ(upa#6hqx?lkhVKBsZbO4b|4nyDH!40UUK{U^ z+oIW{Y0s`<$6*odgtS#|6B-@9=ey^p-M8F+`yxlOZGtV%nrdBU?Q7j?YiB#;80UE4 z+UvUFUFA&+7z1NN?}azw3DFm69PLcJBARhD?_v(I9MpE*+0X0`rV8ZKnlm5BW8`tX zAMAf`uQ+rA`Lq7!E#&-fMm2B^PF@O!!bu<8@oGfYXQ5YD9Pqz$^9 zgJhR1$lsI^;BlLZ6~}L)4Y6sku6lybJcj+vx}e8r*4Ecy29sfeZnAEyse@@`LWhLY zy0yAud};m|VIsRIm15t*s>ln!6nNo&?P=nObH>{)*`8ZSYYcprNw($IQjTu+4A)NQ zTyI^^oj`s6^w6Q;wg@5eQ8e-y*f@1L7dw~zgFVmgf;aO3bOJUo7_j$FkRM1J&JhW* zy0KBpY^4oZhHOGSgB!94@8=|Z3|T}xXO1$gYMg3|ri#|ATdkj`t)*LRC~1tw?@kz| zx9bb|392&GH|l%r8*(7>D>^lJNa*XW<6Gv8a~0Y;+2gJ4t*0%wExoM`tajUVTL)*% z5q7V3Px0UPwGnCu1LA*SLo_8~K#j<0?gAU)zOui#{VdHpp=w&o$V@$EFm;10Ph7+2 z$6CkSk|>S9Gl1T;9dClRLtkJHtTNXVnr6ECesEK#4Z>4jtOAj^t3hQ2LU8~1pu#L6eus^UhaOs>c zJTu*O1BZN80f-}!iQ)dyY;jj?lG2`C#Eb$K)^Xs8QCtDL2Dq=SnSo3qXbdD#i)exj zL+(oX(r*mMXAmQZyXa=rfahX8iAqFox(|)Q?fSI3z2+a_I91af*RlFZ`seZ05~dly z8>>S0o`oFqWVAY#AeEMH3Av#(UvK{zm%;tbPCJ5D(OT201sBnHYZbWXZF0IDvb&vo zw10)KnGguP7W;)qL>onRDOvJD<~Loy&E?*+UD(N-miq!e&_9?COb2QKRe)C|HX$J- z5%P46fgxFoxI_#=FQIFJy&HzVdqipJgIr5~n!15zrjFOI)D_dW*S*$7<7UMR#=lIB z)Nj>^jGO6&reR;AgXN_{@o*R4a{p!5FgNY!;FxHu1!OF(b&YMX)o!0*>*PA`*zNJS z?)W+1bYWv)op?OdC2AF0$pfW-sRqp$nS;P|}2d#q9 za(7uknxb{cCeW8JgWbSRVqQFir%-=VkJ#bd64hk&C|FAsb!OcF$Pfykjomgih%2Vq zqUp)n*aGYjK1=SQGz?b|U-+j7SWg{~+i}McwN0@(tSW0aTRrP2dnwyiXM4wYce=~s z+v|NF92v+7j|tU-=eZU5R7*hjKLnax65E^o|DAIUQw%i5*35jW8tugo5LeMo*g2`J z+$we|c7ymu3Mr^%>gXx@jf_KB+POgrcB|PP|pbXj*r^!+OFBgSZmt%TRS__ZG&Cg9UDELT=o2C z!5=t3FeR)B{fgj`HPMREUU)tH9Q%Ro$t-04V_3E>c)zF7!|5FAG4(g_j~)T<%q3r! zLvYTb&`TPJ7V7J>6oi`nI+>+~+_it}e zU_jt>=#20>@>$#+eH>Yh9Y$MmgW0w0MCJi|g6Rq0yoMP2sifv`MpwC zo~bOrpAciPIk*P$+W%s!@n!@~exTPfEg_FrSu;g*7rffXfC2W}5Y}Ice;rp5dY*-R zYrZ0-qAaoH$l=J_=;5GMc;NluYvf9Cd+b{rf7#9gdAlm4Q;yndI_o>uyC=Eo`QCe$ z2jBZkhU*J0qc_D@(MY5m`UM#VI!=UH#qNT-WD+xh4O02^YHB3iknjZP7Q zfAzx!I zsg?X1n+VB@uf%?IJ@ykLp%QIDUZPA44_&?GDnip(+fA3H=?kvrXIf3%CDSe7ju}-0 z_|Ehlsy>RLeWl&fw2(Hu+utrw((}%<+u7S?wXb({wtujHx0iRQoMoJ9x9BSAz2~VG z=;_ZCY6V}4CBy3IL9wOck!I69sdcb(K4I?AtJo|cFYcgeW;xxTLa83mQ)&#^hzfEa z8OO?jzrF|YH`)Xpj;X-qR2Q_de6kb!oc+O{P~FvR)D~#IYb$F@=-!&{#(4}rBUsKg zlbH;*E_M(vDW6l~!fQpBKOATcy8UeDHs>*WTl)vNgZ8p_vMqJ=u^)A9cYgK+-Dse? z|Fw`46vSTQwdj?oTduAApjy&EG~_ZN6JMRJ&)%i~qKnfTs3YVPVjA8Q`-NXACdRlnSI1f18_RDO$W`bVd_B4XNXL%|7cqxg1YYred@of?%~H)iU{u}I+)y7i)-&ug)ih>k zdZ-(7{n&O;cYjiL$L@-KqV0nHLp!{m{WD#6JWCy`UBm4b$9a1?+>ow2j=Eyb=bkk8 zKmHTmox)H5D6y;XDOy21A^jCeCRSnR*l$b=Mg>$!6`MvMVbUlY@K-y~o$#;39P~Bz zU2@1gWdB}+KO+e;OE=Li$XHxLtC8>Uv&;i}7jUF%LB{Q+cD8P@W)bw5_JZq$k6)o_ zuk*1d_+Era7AVt^;*pWjC&3BAKwk~e#@4zPI8z;69qVli94l?ToTKet*L>%9kK5hc zf7_=OE(HGyw+kmlr$!G)M@y+dSB)?SpziF#%mIxlo|#A+=?J-*>P$8!JlJH=Ld^0^ z=+do`8{qeF1ao3nkkVL9Oo2~*kt|QQfScetRW)@`vt4^mcTt0D3Bx@7>bUu)embjW zGtYCSDU56n6GQ4mH%5C14MPik=lxpuM$d1@9M=ka$g$ae&aum(b53&&asB5h@7d^A z`F;sQ1M9_F!bT}sOn?C@4Y19zzuEP)gPB7QXU+hrLB}+vO!PVup{wH>ax9vTZ;&6y zN=rIr1a<&ia3%2Gs1_}bcfl?Zv+w}DjjGCPfjfIe^+MZ9yB_kwf9h`PTAG^0r9q~w z9oJpeoV-PEh;_gsk+bq%;X`=1|6E{^=bPt%OYNHDL>*I{UG0Ckj@!?;6~}IGl6!~0 zo438tDey=5w(u#^Fwzh_OQm8Zk;?RL=%AKkJ45F8G`)k_102j%R1NAK;lrEa5%fpw zA4M(aMCW3C(V6%h3`Z9rCU~MO{tn+os^}|>k1NZ+fe9S5bZP3(+JNSiu9T@>T)cj@ zo>lqz-E>FViLO99$#!XdxJ~$GU`C*+m-k+B9dtz{mLAiBJ!j?U3C56DpK4R57TLJg6SeQPv>U zqBUfH%!aN6C3G}08@-P%!Mfl_aRXJHIt&_mbJYZu3^5xUxS%=6bbm1Nrr!FPek8wL zb%{!2?js?LkY*_JLeE9N|7y_Zp?n`)dUuA?>=^3&Y;Wh1?K|8*96PQKd+foQ>bbhM=vGIkHJ= zgdU7tAo8GUnvHD3!0U?#u;Jw2Ldig_Y zKm7+g3!9Dql9wwp#H-?s;F{ocUy=8|8%$oVGR_2NH^*4#8%I@_$NAZ9^jz~c_N@w# z!K$HQA-BlDi5mwe%_O-d$&#($d{1Ho>R+Y_eSm&X`Y0RmkbHsvg`Y!vppMub$rg1h z$CWyGJKTcwN7bl+PR35-(}~|C!JK6CxeV1?b!Ba`R@RQ!T+-0Si-rxxZ-$%d|5St6 zP0Su#kIz=xDu=~y;^d$===9$4Y20NzeVn6Q3mh|?M(2BHC&+UT_MG+{_HFX53OWKK z!p2ZA(n^d-3!@w5R#FG>&6^ny-5O5zMzn|GsYEJBv?3|u6p@FX!v-K7&{0x<(86yj z8}S^xH&zlGh!vq~VhWx^rjX6pbS9Ty$XC&L)NQnlv`2uC?AP_yH-T9tqg12SPP!U< z05cJ{<<_y)q8#}Wq(V4oW2Zen&m=brG4zs^@5xaTy=r?jN7nn*f#Wn@>1TQJe1AA zKs$rQV^iTCxB@$aZN)1Q6RG8NB6yis^7VlxrD)Q?+nS}FtNUhXV{D|UpeYSKwISp; zVkq)H#!K6ypF)#E<6)RjW3S5-@3sI5nUo%{-@$(G$VJkP2$ebD{=r#m1mn=tlW3B}tkk??z3a zglh4g$W;`_YU79Tsl;!nTy)$h?i9Fq5bd8DN~5R{-8oIVv5P^{pc);wnk_-LCNpDm zk@C^~(p%wNc$0r#@V;lc&*UEODd`Hh`n!&}#<@wi-xKcveuuYyaHL-j-3)3YJ3@=3 zv60(S-{=S=JvNE1MvtdYg3>X7K2B|>N0PmP)Ki=qiFY8h*d8o3Ha38azc=U(76yG+iN?rYASo@DnRUpH@S;B;Z3G@+sRIQ%&J zHabU2mIuV@BW~&yoxq#}$MQV7Ki!=ss5Rsk(nh&G0jqS91y?!>XU{th9SBPZ4JH&7o(D?4Ag^k zkOLASD&gb7i@}4wufDm!z^LP%;Qj_Zxef05?o*zro=v`*zJ-DB0RJj2G#9f&d!h{@ z%cXhIj>>9zJ^0fW)063X;I3OsNz^D(Bvs^l(gJmSFYpU=L{#W~X|lW!`GB0q_u@-n z#aF`8;Mq>XDw1P~5>OX*=DKs+RS#5mRLSZYs-G%F_csjm`l|cRede`vVZ#}c8kAOjF5oC@|1BjMAL3y}mV zOPVIPRx*JI8l^uoKntVW0$;fotoq0B+3yfv@h{jx)Qwz;d8LAAm)KmTD!vv&(1S=# zv<5m8dyI7_yhIwDV?pJs>Vt3TvS+HdvAeowsq2PYnL3D!(SHdfSckv!F44o(MQZhkzEr|`n2f^<(0d0?I@FVyh zI1kp-_37@=DV?Eez*p7uQMpuSxGYUY)!+J>+7zJWZe$F!fVaVov5K+Os5d%1lodV@ zh!dJajhF2~eT3%|5PCB_mAnDZbYFqDH0X9h@F3JohasoZGn^Z>M?BHT(TOn6?LKLs zZ;+el9^?*s9vPx95ET80$fp+J^~ecWCVn@z5^>96`8QSqJB~Mm4oE2W0{ehKwTFHt z2NDCBgLGT264ykvO0|qnQGHeIP(Rb%*B@0s(2Qg!aEr*1)O%zC%FFfS*5c=IC!ut3 zmH)MOr+28krRS^jqx-D0wP%^DjyKiw-8a{FG2jlg1K-_1aYE!#bcQ@lI;`}L?L|9K zLzrfe>DUDO_A@G%x=1oWV{1gbgI;%2Y%}t2td{acIuYg3#>gvdKK2PwquVwJ$OwJveb?R((8dF5hCfvxWSdoNC4w&8WF?cAL z;BV}&=H1~%JSRQ3+=o0%JUzX8ykmXi{JKE*;NL-4XlaOuxWdgOG>XYW^b@4dwvlg% zZuA~-_M9gNQBC3990_iV;p8biji`y0#+xF8(c*F?IDqT>;d{2D)t?n7%pk|7Z)(O=M8szyGB zR9!C9kFUTlP+R#2z@GkFbw&F^o2^aJ*5Z${H|Ue39>0#zv45oas5g8dWC`vIZ1k7$ z{r0AN81G)U=*f1Qy<0rB{H1+ZkPYk>_6TX=c+nV{0{7#3vMkk8`p6RrJ64scM!Bdg zB0^b+C|QNjlCOXZeFXo7&cVtd=h3OsL*eMstC2mJ0h2L%b{aIuedvOEt(-VmaWl&a*i|rIt9CcAu@=3N_8U> z=*Pr*syMNqyaRc;=AhNqhir8c%;(#rc;$|GEo=xTAs5g-$XDzf8p12%lYuF{j;Y7a z<`#o9%BkAI6~^L1r`|8x$xDu;mab^_LXZD~R@7Je3*BzzB0f!W|{6+L6U z9Xu1fSuncjh!^$u_Rk443ic9uhjxHxWOSr|bU4&OZ=^f&Oc)&Mf~T2A-2?JP6S5t3 zf*3*W#x2BPJOR%EHCaZ=C{y9Cgeo&pKZc=R>}`z4jF7V!hK(Z1kX|YWCRuglesaB4 zxlomirszcUdozX0O7KT$*$Vo7}s2X@B9`jkM zdt4&8-}|c_nrpgDeunxGU6(Dw+mQ!jyO6HH>Z>Gv3%?Z(2Tuon`+E5??_wY3S>UVS zDd|^vsla;Q2zYzn0)Osxc#zmW(hJBe_vJwnIO~)uXc;mJ^k5G)0;=R2WIQPo^Y9{~ z5W9$vfs;}TZn0uYx?E8jfUZT(fE(gq!azQpQc^?}@$MZKYpu(`}Kp67A(Z%(Va z!Uy@2TD^9Ux|M1rdx#dvFun*q9J?nEk&Kb*VujE#;jh5@z+T9C4DfdKxjdu5{Sfb8 z?$ZUT1{MZG!H>d>@VW53NLV~3J&4YhM@YkB24w|gJ$^!-_b1tm@RBQum&9(oA^b68 z7EnU0Xy4cdWVxisxv@^@bkMXPBe&2Dv>WynPNrPq4v|4mr_Zu&*@rNv<0PNOjo@c; zUp4hKf2bMtb><6Wf}YPjitHMVE!C)zWp1+@OmanProtO7xK7HVb z?{rY~HxEq+b`#S=?noDLjkF6Kw_7eBu8mcUGivMDtu-o~n9H+X)j)Pvq zOHDs@e@%7Zp%$YCQz#~*%at}t>*&qM-f%{!g`fof2o(4j|8_5EI^J`>=iWj7d%g>S z;em=micm4!H>`_vjpRgoOQqyO`Kx?d>4O_V-3n4;$fe|Aas-fzI}vS(&2aDhjakut z=q%`WR+T5n^Ax*M3Y5^Z$Z0eK`GEe1s-e@k3etbQ=#t<$Xbm2z%HTJf!42fjs7t6v zX|}49IhuV<-63~i_tB?HD`jA`RCGG%4g_#yqkb;%pYO4+71YRAeXD&d{Pn0E6xA0@S#}q`7z++DGLmR`D(ppEPtH;L7$)>z}$nM$U5Y< zJXXF1dfbrku24l`aBx%Lx_^xS4(w2;e8>FF{b}%w^Mi%K5uxp&<>DE!PP9o>1Kxp5 z`M10XdRig)x8kY$F!^Xbu?ljhYlzCAa(}_TfX{9&^hnmm7RQ`YNBL=NK5`Sift7%a z=_jNemWPhQ&*5FjI#ezYjF*5n{~K2Wym1|%Gr1TT-hRFmABNn{9U_G9hPj?iLrLIbI z*%+Iqgz*RXY*_D|VD?l$VjD3AvfOs4jO$?>UJCV~me>zuw%l3Ci%mkFV`_XH3aT^u z2)&N&#aO~f)S$M)ExQvl7TEUF!58_H>B9cx7pOY(v}zVjGW&@}O~L>-cpX&A^})4x3{M0f(|_nOP`wWzci~;8W5r{2v98#6xHG>-YNL0- z=jO(q;g!iz6hZf5J~Bn@Otvfcn)#E>;=OzVWb*nmER#m+!E-hpU8Xcqwnv9V6UC1( zuJ^q#I#?W54i^adFZeeF$_6F`a|2mIeL)vK7WycT6Vs!*s7=}>F-j0f<=vFkkUzN$ ze8cO+FqlME4|1IA@!7Zsld;3tb#xJ$37k?zp0A`SXeIJeJeTHs=cViol zkiW=$>IS`+DakHpud|n!Ele`3rEXB0+-6M7H<)kO4erQp#i^)amO+}BFHQ+LLzjb< zg^R#6tQP1J$P6qB%nb$urvyYu4R;KE5_7|sqDLb-xwte~xggH~|GW<7CVd9CRfM=t zTqfoa4S>Md0~jb@u=m(ss0{O8PF;#4`)Je(}GsN7`%1|ZYEKGcu z5jY$8=}!ul1IENV(8AP0zwnMw0c3@)MU$f*X|q&E>8+Gg_9_VaH`;={M!p7r|0rNb zm4*9kM_k4f>KY|~~P6xk4H*yUAH&iuKVuNK){uDVM`4avb=0deYIl(|MDOeMx z(3TIr0zLPTFi`M93U!+JGCU|cJ91gN9<8R#l7}g|@-?J2GKO>$D@ld0!;Gg-#GkN- zZo;R-PkU?tj9cl0`jw5b(y&7`LyjP&VXyx;Rvo&SVWb-R7PVn7U>|KjeFERbV&)I% zrQ8GZXgBzr$tu9BvuCKq)O-9k-U;c4ERc7}za#%e-i7yv-NL`Zy(;^LKP>8M^lCC!FemRa!5)j$p-Pl){lcmX%K4|t14HQeK3#w3JPv^;D+ZS%g`fmwyN-I223^_6~Ll<^)d#{}H+hIia1Q z{$fG+kLccrMM{<0gMXTf-B)(N6!s_hb9_JCHvj)TD-jils*vy*i=D>)MNw=VoIf>V zuGn{Jm)uo(t#m^#qLYy)$Yq2J&W<<}q9Xjw{9(nXz1Nt}9oa z%c6Qv0(f|KBV&-8@=;w{3mmWAH+&{FL&cT@v8V0xG8poZ$1voMC+j+k$cEq z<*8CFHZax{TaNWZZ=w0fNOUi#jYDCkK{62`;J2jW=_<m`xc^pP}Zk=b1F_1Us9a zMVY`6RT4Xn4vN)?g{2hvbEIsP7uSm`LwI{!>xCllB@`j-ETx1$mMV*4JLZQw*+`#SVx;dZ|IHs(W*#!^u6p*R>*yo z14uixJMtQN5lcb7AW`HCieaztdc;k#8a19iPtRoTFt6wcy#=`U1mA$?!5KM(oJe-T zc4C!df5(o2-*8c6Zsa*=Btt`&g@1$>soNx)`Ppeut?_ZIzguCf7yZ zAWPAS=wYM)nF~r@9n6Hk#If(jIos=AhF)gf+Am@-yeK=Gb5?8TR@PP;(wfz9}7JbL1SkA#xr;(G#dO zmIbSR0Xh@y0FIY1+^6m2OsX>dnr_5QrB~6lnGijbYr@TkGwBRjmE_^%u*V#+xlkjv zjt-A*5_f{5k`9xh55jDrrf>}2)xM!eLap$=(0tJw{uJpD*)B=Z+c1Cnr}9t{l!~!G zkZnk5m^nI`SVnBc$KV5i{ofx;!EEpz)`B;&9g>RVD#ln_d4~Kj7K(L;wbTXH7Y;kq zM>GSgg4ZN8WEmh%b)|364VnJ*B6=>c3a-H1=~~P|l2M^X|{l zCncUV{aEVb^Xw_vqb-v8A6s|Z*6c~yI~FCb>l8Yhep3x7h20XKHIAVY$l+)OU(8q6#k*I<#vo^? zEc!j+COzyI?mANkJjMC!Tj=xMg*P0H{uNniyJmf5u4TSw+hnWxv(wK$AJachDcVx> zJm?E9k~T?_CakGiqGE}#^Gw0TV&f<~^tt&*DJZ#eV&v!j`46Qbl zAN*v{^lk&X9qsU?!~WWx>e!f6Zcfop^TH?DPiLHYdG=t&z5T~`Z~I4e@Xf&kncmFI z2e}Vc!0gk#FdIUZ7?*gYN#7>J`WE%sJxCeYxc`EFYdgR16s}jfUX6so@fbc6n`@7= zpL;(3dHYNBrBz4!9qoH?b$NsX(!jAy-xw<{upqM~DafQ~fW! z)4hvfw!(j*F`-jvM>Gunk0UTsenM1?IK%hCBZO%}FPNP^JPZPxP+v z&h=JuBF=w=hJqKAh#bh+ozs`pKTfWcoL!<@iAafMB|eqgTdqu{0hI=(lu50kX{!B< zd`6S}hCnlODa-dCCx0ILIyL**hngSlAM_uO=j7-7vT5v#+_T+F&=gdiG$s)*TeHl? zDkmzBuRgEZhpKXwPG#4Wu@~D?3^?uy^^o;QdB|2(&30#_FPN9^`^JZ-?q=LGJw5VN zcw>K4|NG%@lY&bE6(L~}F=iP4E8DNk#fI}6ylxt6Vrw+0QQ3OBdOs?Ss2q-`67R9? z_#EUJ7Iw69&-nTHcZ2`f&qv;VdspYfy${v1(d@oOCkoqo^V}t*-jUzhwwivaNXoy- znMqRdF2x&G%&Tyr^s~~LNoaCE9j5OEd2Dy+czCb3r>|?k6If|4vJU{}Pzt1#8x-8g zA8L7Nj)0%EFi~IuAG*tW zPC9Bk_xZH`Ipkfkjdr@WM_j|WektWswiIszw2E0Uv3No1-IBdZ0)NsZ!YQ&N@FDQJ zU`FBc>}}sJzYDxy_vXdhb8oWVmUwsiU5%U}ITL(ceAOZk#9~YjI=>`*%hhjJTUGm7 ztpW8j>ouS zoUPBEo=fJe3B>t-GmGeQx+j_=iG321s@N)RsdcU9r)ur1ov$#jLMRn0mZ9CQ4WcsY zgC0g>?+kA|%<~q%e);<8L)M22A5VN7@wNBYt$9=OZb6p$c%Vk0B;0Px9+agU8&u=3w3uFh)yQ1SO^dx zArK(n`4<0YF`1+9yZ5sNnW8ZnzgcIfRWw7oocK2moiH*s6m=du1$QteL8-#$!#UN5 zt9_v3GCTOTGQNry{8D4B=GJx%52=||y{#^-t`uE?4mGxHdR~u>&H!Duz95hFCg4Zl z0Hau!Zch6zt$pgTlt@yHyaOal>j~JnATGD@PeWF9VHM54+u!8D`{p{eu4Rs}bC1Pn zt#gq*-zvUTUZ`GBLypXi+g%d5BECbFGHuG z%k}DEs>_+v)gr|t`6EFK!9~g(%KY?m>1%OCIHY`1#UQ{m)vh21oaCQ?%;mb2t0`3p znuJxr%cKB&g0-}1v@v8n`A6D_v=GRXY=*5xZvp)mPW&hQ2e3~hgbJ(6%SGk6r5j4W z77r+?D5@+zQd;W|6)!K<`9}xlN0RGjHPD)r^~a;j@Jr%olv2tj8je1l`7g5_Cxf#M zWOct}>|(TIDOq^-BK8&Fq5J|`X|uwcYHNW;Z5?286oDM4A@*+e^A>}7wq0!N8qoU( zg-_LtkBkp*kME6Nz{+B>gz@}mQo9%h-IpGb+!F8Q#MlMQN+y$*PdkJ;iOmWASM|*O z%X8Ft6CPa9LgW22@$V7sIqhwu(74>O(Y~!_XY~hc6J|`}--Q1dGa0qYC92A-^yV|N z3YzUyFUXoBeGPqJ$XR|uJ8~G1bUM{hqtOzzf1Bf_BinQoPJ(wDLMEN@jdQNOzHqV^ zUvaqXD7r9)2CUa%Y1p(^v_v{eqLEaHlcg{}Ai%ST>{`+#G9D*QDfk2HO18fFWD4asdLE{E zC>+{U+_%KzxaOQ{hRyd(QBxGyX|`GjmU6HU=GU@ouQXi;{YW~d1FeLDk>rV%%T&?; zWR}%Q`bd`Zs<~;@AVo$#P9B;>O70VGQ+vNSuO!<#(iYGYi~?KMJZ+tT?au0nL)rB}vlf>;ld!!cXF!w1erP_-I1A zu&TDN|BJt;oA2Ic^H{CcJiyXEXk+%nDk<1>nx<>Uio2XIM!NctyfLPC5(CE#h)m7B`D6z(p}buM?kvR6AC_TJ8x zo@?IK-dDcC{zYZCqHjUZb|6*(ZuE4ZP4#oCIRklUUMv1K-WtA!m&94mW>K$FW>TAh zkw1vi4%dX6ADL8#FZY(;^=$-sUb(InAgi+vVA$3;u#OtS)qE@*)%w^E|k?x|6T85VHKS4l-VW zdHO2-Z#dnw!b~)Ob`?A0LJieN&__^txUX0fiAlOBnJRfKH_H1d?kbMS=O~tnw@4N+ zw`HuQoTY9dUL);^T}GX&921=DTkpGWRa$o-b4~fC0q{zj!@_V4cDx5HMh~dV5aTxD zIY77L1mUJ=(Jav)NmuDjak6A0$T3T24Q2f%d?K7lKA5acdYwdwhU>Efs=z(ZQxD!c z#+qurWyY9I=2SNz^bYB0ur{s1y0GoTj&R>VRe<5s_}s3Q?nXyH=Xm!cb`m>6ok87BJV2aA#!yfo`|K(pa_0Fv z2GU%w+ksib0fZSD{66UbKGE! zKG`s6s-&Nk!Rg9fLi<3s(MB*nB#cZt4EA`l|3=w;XUN&sQezgH`odMnQ&V@_dCNg( zk-f1(S6&sP#3a~ln5&=;)sNeSTPdZQ{)d4~HY4C1s6vn$;<-2UM4s#e$(90ue75K@1p&gMz^F4=x) zm-M&vvE;ktgy6j30m$qv0xpV&gj)nVUKTeh^fPqG@9_6^A9PQ)Ke3lt6*iJ%oI~yD z>6zi{>!Vg>R22YSWJ}yP?27omapxF$^diAWem_Bgr{y2yHL#7We`w99_tPw?PYCk} z%7hUK`)fIo9sx;tsaxnhX^VH*%-Po6mIqdX!GIIe;!qMfBh=u6X7gsTm!n#94YRbPD8!diQ-qn)J- zpy;zO}g+o59+B>w`9lhdU-X*}-|Z!+a4r7!sbc|wXk98b)3tBg{N=wf(()fs5yw=U?f6-(G$^1aag1juM_2g zRVoK$86t$u=^{cf?M?Etr24vEb=dODftj8eoC|?VU6f3sh4?M@6V7S_(K?TQkhSm+v52FM**#aHqF1J9}! zuNUtW$we{lPHqzI5VeW?fxLk@hd3*?BGxQ8EGY9W^?kPtw!VhDnf@9&8wH?#bJ()k zLh-zIw*u#iZ|JFLCT=HIMcPaJARa3|2=Sr5^1o0Qhy@8mT}8JTF~&>E45}FHqj9Lg z=r+MQRZo2v3(r`4*xDk~5DWYt44!6L0}{`h`=)#E)i#AcU}G38egv+FFohr&{Sy9? z?vh@WE|T^WcNAaa9_HSl9HbBk?Fdys6Ga3yyYUsLDzh;@09A>ly1h z^*D7HZ4>QRe2;{@aHrZtFb=(dRr}YRWbwd1;V}pe8E5@uu{)YM%oQUl9>)@58$ma% zSJKwRN!;BWKG@?g$}UQ~%a%(WLay-NjBCsS(qvK}ax3y-(09L4ol>JKT3vj=y4`jj zzGLcUkQ>{>L3o)3w(N48b6l^uSy71cpw8kp;--R3lPa#CI}_>;$)ReQK~^YxBqEA2 ztZl55q<-Y7$oAFDcDa@1+#gU9RgK zUc3@%&*_Ce2E5P*0`aOB-B2FPa!Qa1`-zABj=zB4N}EHoO72OrWoGGlnOL?(Tp{Yf9m*LzOPo%b|&XL@g z43tflJ(U&9CQ2-lRlG*t8fpfu6NN@?NRJZ6Hco4TDlx&E-XXr5Rc?6Qo9jj-JC#t?y5nRu2SmQSubE~MseO|PNcKra66Ooj87!uPe3-JGq@-*>PsUye?yYWB=qs9I{bVaQ zy+9g_qu}+(YUF^GYOQx|bfwoEtF8h}tqIs~n8T^q)RBU}{J}DtG*{L`c3j#;+9dc# zP{GJzJS6kTbjm?;ChjiwZ}re>Y4N?HBQ~XN0OB#-HD((Zn}YBh%Lg;tIoI(pNDbaV zwMD(g%)<~;g2_Gk%lWTlVOe+RIAoG7hjK(M#78oEvi_m;rJ|`MniY_y?$^8zxr=|5 z=xitK-H=nr8RH3KHT(^3G9NbA+MnCMSA4BNVh>__F#Rxa(vhSkJUOow-0!-Q}lO>ta_!gj$HXWC;D8!j388*dl`ND&gV-L#zp zSzDUe(%1xSA?8a`>!hx{0&a%<9<)}DlXsCP$#vqNVi~&|I|XpWjFg+yZ$O_vIkYr< zxMWSK+8(h>kkiN`V}Wryd;-p}RGBw`)Q6IQA#fo!JT@E~#7GjqCP+As*nZg>Sr_P& ztT&{U^$_0{O=DkUHIYw~ds7)ycVd2GbI=uO=3nfe0;udq5uy2mkq0NjGWe)@s(G%B zYJ1?H?DseBZd{5fM(+eUB^_A#8Ixoz84+X*Zh|gCW#Vkf0ZxdMN7+FA0I&@ElN(d! zMI3cq%hm__Ifu9+Ah)l^mMuTc|PfL4KAi66{(<|Ua) z>VrhkT{%y_LRu<0&MV=Lr8Q7d^hEm4RC=1GZc_a>@XR(&vWtMg$S1>SV^}}ju-LTH zlnQDt#-i0lH=~m1ZqQZQ9B05UWR@^SLQ&aA`7Ze=#cqW`x=@zKo6gS#6pRhjeA@EV zNZQ!CqWYF)s{@S=oAa+pf`knD2ARR2H<;w6!6d`Azv4DO(ogx%iL3n_r+b zr(I5OMdUW*H0~(hQL)pV;hAS%Vx9%V#;*pt;gcx@6D-Zm2fR_whDcRy66P>ki@lCL zPd-NeCV3)3prepmzDI75&6af&?h}j$*|2YD>u6P^pQJglF|i+&rpjjCXWY zV+-Rvc=t1;)nqx~{{O8ARQ3Vf^lQjdGu`;r7}U+y=NexaXCoA3j*H9R<^5@EXifVa#`4sUB5jNu+Q$jmN3z3Z!8!8d=x{_E$^se<85tgOF zP-VQX8>R1QTxwj3L`+YeZpVe1z10GY870E~#r!4YrPqtwi@PZf%ReZVD`2RXTqLRx z85ju}49Xj74e1Sd=042!N^fwZcb;#q`K`IcxYhVmkI^&X6ypH1*L27^*`cleRn-#H z3Ec$rf-TaU(!PqmidYJU;+o>UVzT_Fysh|3qp7>8f3dxAkE*&<4=W58 zPPYUtTzDb8SbtuxGIlo(MnuRD`xg6#pdtuVS12{e%o>&YETxn1uHY}2>kAdPz$g{S zH;a3UeHj?mIZ7Yu4~m|;8sx411oWakh2=#fEt{+*#v^by{T2OP!%qVR$u%X}N7~v| z_NaJ(>JwW56q37Az9;Dfc>Xhm7aF8|E&ru3$y1~`k~i!E_AQWYq@ul{KacyIK(5IN z|64>Yy>7{{-!UFA`E)b`#jx4%%+$%$#+GLNR?Z0YLuEC6!Y)SNOrD_3iVN4j%g|Eu^{FV{^O;hrZF@G?N6O0Kp z><^q3^1+Ipige`?#Y*KsX*XF*ZaPm+jZj}W0W4v72 zJla6|aymElOzMfqiaM2lZCO`)r9%dnm@0H93`2B(^bw=PS9NeGFkz{i*1LGH@DmJaOj2Ii~gc1j7W-GsVLB#!tvNWPvZ$msRhq z`-3@+xr9H6SJD9q6be9V6ILov=$GwGkx*~Hn=!40DV*8@MC zr=0suMtGB9v_4t?M*A;pH(<^Gm^OO_o}P8VS_|O$((yBKkEm^_Tn(eu2r8B+@hXhmEB_#TCL%KiFmtK3v@WDo6V41B!Hh)%(gOAgsWa)j^sH2%Y@tMy zy;P<09SXYmuy_ZvMMei2pB^T^p)5c(qIy^6RWA3u@pM6kA!7|)4dvRm+Fgd`hGC{6 z*aGe#gKK)$Y)3yt&jSAK{|Ix4BP64wj}=#yi7OeM9vF8v8{c(_n&Vs%VbVs#v1Bt$eIRE6+={k{fI?`w(p# zZ3XQ!EgioVpAVd6g@Ehd)2uOHHvBc@Ykz1*>r?d?;h#po6~rG@R+K+NwTvAGbAC|j z_2g!v8v>l_iXum~TWM3ySHjYVQYvQ!M@bt*&!G_*eBjtF`F#C4FimG zwRY_*U9PSpywey1HLY3Y%77(ytci~eqE`dvltf_Q^OUWXd%-tqRBQnfqJZowyO_(M z=F-z>^B4nw%ePxiuh8$J>Y|XPm8HQ583ya$XjF#Q+RLVyh8@;R$d^DLza#dsaV(aM z>6oNXJj+A#zbQT`2P!|Q`Y9>upfm?+!M(#1(vHyA(AP7Pl9ng+4z~^uEh#L9t<{#W z@si=AZjctG&(Y3?lZ<(0H{vS&R{E(iyQw)wiX8y*pEh$w@#qSy3Raj^^$Ml>h4ef$ zfLq9$Lj6WNPuopDlT?_rD%>i3v8155gUxMe2hTKg*H6`U&@a=PV2ZKId;%E@I6~s4 zu8l*$d3g}vsWh^2oUe*Mio43&%5;@VC50rAfKTV&qg8?#FJ!$_0AQy}NE2@qH*;{5a-yX1)A~qE2~J)u4K-4$BWHU|}=S69$7>#puWUO>h!sN83dc z0$0nnJ8JDJc&2f_?u7P>hOD6&=IS?r&Q+o3yQeka&Amhq$1w3#_;>U$;n00t5#8W&vwh?;F2ZR~%HLk)*@`5KXSRlyAdUEj%+ z20!;Cdq#j7a|Bb0xrdM9rSyArz5Jr$fNHq9pSnW5Ls6_aEP5`w#y~)qc`?15s3&TG zhV@lobl?!k9^VH)GG^+jxP zRew_cRI}vmlv9L9#mnjMnER-E=?z4PtO1O)r{%T)&OOJOZ`y9$Yj~Y_w*+$uw*R*0Rx4{jHZIUqUcx35Dv4_( zGi5C0b5&Q>Lv@2fraCC;B~`OdvvNUZs|=i)w_t{$7X^bARPP*jy{Q?zN&i_pOT#Z% zq}!`)Fsw4*Y$RJzuw&H#lpb{z_(jV=PFM@+TParETrJ5gR<~5=seZ~BveulN?7oaB zJ(d2Nb_w`hw*&_T5l@kaXBuppqdTk1DY#egQ~N;6Hoi0zSQlG21bYXC=rr_8KrY{q zz9apegd`QIpQ{(D_hmLIbJcPw6>Wlh`lA~TB)yQVD zKXF3TLG&H8HS{NVd|Yz%>#E*`<9++h0n<0b9i35oxS)+bqFDj2G<32)HuEc*mA6C{ z$4WrIW?S;Tl-q(eqCLtdYP)iM=6Yq<%l_hrx zjS9agA{Qg(u4cEsldeK@E5E;XXZ}zlUKc?=8IP6TDEiUVx*>v-;>_o)|Uk>uIR!Tblpi?oi+TzWaPGI@HcHaxzzLrHycwpC`iYxt&nq-7VJ(jLoS zW*n`X4$h4mi{BT<13#J@sO-nbuTFqjDDF2!p8An;Ko(Y2okfBEC{g@>MQWOiIf*`* znU~rj?RCUc+rrV}l9Dg9u-ZM|h&s|TU3 znxmRvKFV-YHvs<6*vdP`d!=q>{R4Cn$f!6Q#|7EkEU?zER`tjnt(Il=P<&Img+s;J zj5|yjqX*MRm_TeDB}QkJ1^jM%$hOMJFeKrHhb2&SJs`5Xfa~o zI~a&J(DUeaMOd+0U9N7OS(3R(nWP#g_K9bM^Tr4kS6)j<8|A zVU%`_W>dki{FrW?_Oy{~xaV5#{9aobo(dH9PFykW6Llx;wY*v(R%fM>hqatnZvVIsdVZ=(nm5S>m&OGtt;bS>UG*d z^aRYiimb{x?v?INaGtS7E7dM47?rQmUDPZxBKm!{&epG0ML`GXEffI-t~EWIFi}d9 zEmv>N+^=q*B~(?adrK3cwXD&cQ8WyLMw?0RiN)erL0M4f-R04lX2RR_hqX^NXY-%w zW@vO^|17t%EZc)gm3x3w<2DwHm8Wsj9O90WG3tQ&jygB9QdO-!DLV?a;LPD>(zh`7 z(!VfP;7`VJssz=iyaRpHOk+*+bXx6zg5~)-&4q#n{Y70Lb22isd|bdA3pa%@gE2=_ zHl^GZ;lz*BOEVRjC$fI24`rQ)_9~WgPw`jMmonQhJ~2nd4@j6-{kGcWJL&6*&`cnx zNdp(0`y16<%O7Uwpld)jndD_r1fg-}c~9i)Ai&&pq25X-0Qt-4vJE2gH>TmIcm zb7NS*;Tw_kDLKMlDtx0hWzNZ*nYAlZmGw@JQDpEJ@ul<)^f*RK#;?S?iGONl)^Lj6 z6egIDA#U9g-RXiu1(gMCPr&(|PO{Y<^-a(ZZ|ZeN|5aBh;ae zW_s286m8@~1Oxf^>6!GkjOmPv$*+?6Amb#f_+{}+P_M7lozUMdSfII8&_;7f59PEbNiVBDme7`Z7M zQ)R$oGOA=r3D>HzbTrJ=_tm!6gfu4#$_%aacw{L|F8)}$AuF59MBQqUc6KU=#_vkT1n z9tMRz1oPlL-(Vj*iiw`bcrkd;_wK?xm+@91Qr%Q_%IpHx<^)A=)lhDW+7@EhY(Pm*_3ovgkb-2?j=bT4aiys!^64l*p!(zK%r{w=tyGw8+}(QvA(vwL9e(#Q?K zz-xn-#tozPqZP^5D5}*l^~KEYnIlwFl*1)TaZ(1Ad5r#_8?Nf0=!^1dM@8X_e^_F-5vq)d}qL z+{}k6oO-BiqRhc|vD-3&^sV%-vbCmBz}|sQ*yIuotjrL3S)8c_q28W@iq`e3zN0HmgTMouLAbmt&)|K!@P~-HM~) z%K(F4x+CP0szW2ytlSV&AN7Eh$-@Qab zgXbCO)`+_Y z{Y!jdd|%Kj?OKE@$_F~35r(JwIokW0g}OP~uf}JF3Ufa*Hc(K;jVWU&knK1k$(>Zs zd&ozWw^R#NC)LYTPu1UK<NqSovo>7s6Nm(BL93EdHFZpe4u&f5> zkw3a5Z6o+!iKZ@wk(TGCU8Vfun@u?lCvZaS_XJgfl--@JRGw3!RCqN?wOZ|y<;WND z_6p8Wo9NAHs~PiCxM_cCt0HSlh5qNZd$wD~WaBU01?>vm70oD^VBnjp;ke?#h4UIZ zMmu63W4wU1yNfw9!z3T59HZQ)eyALn*%o@Qn8HViX3`27dfHRQ{j}xjr22<-%gb8% z&pLM6YT%v*hrUEps=HRO0;cO>L<#RHeCQn?W!Gnctm-~-1#v{iH0CM!bmcc?R6Rs> zCv%W|gwi2+EZRx$%oNZUFe=gy5wKBI^h;UqvKx+L_7U)R16w~yTd73~E*t0R`yj_) zfiKgWRbNoo3Of(mgxAMCrX@2n<)0KLrCpt*8lM?~;*=W&%SA6~=NPA{7_>4^_XRJo$IQQK5hy&lmw}LluNaL`y?h%0aC(xJPtpaJemASs*;^jTvKjSv|z}NTG zZZu}=t4#(Y(RtJ^sOeSR2^~iL-xa+veKujd_=n`C;-!kIdM@CG`%bImRE%sch}*;OSv@z)gn#bi;KN%|t_c9n*Boc)=d9U8!0N>SA*MS7R#9 zmZnK>DQ+wIu6(H)qDodDP~K4{OMgh7f`0!nS|^aj)}Oi-n}RJ1jtz2sx4gHIrAQaU z1W?1O*9P=aeGAhJQ&0O_drfd_)i%K412r^Uc3S7OOc71ASa}Sr@=oP)MS&t;JXo?W zV?1j#Wh!+D(2v-#cW@)CbX7eHR~I(7BwKLs72_wcHlHwVG}I$MOj(XbnWroAX_Q&C21*C|XZ+82UG?-(QIWTJ zoz)IBF2~^JhVl9-#v=VuqyX01Sk^%mmVhC4y(tX~VMIwU5_7m8xY_bHisRtkbyz-A znJTH3LTn~iMXjJM0Kcg#p(bH>cy(w&>9*pvcCR~K45Oo8L^K@g7-^OQFhJ_PY zQMS72MAJG zp-Mf)6K$3)kyh5Tb1-8 z<#N~%5tWk4cT43iA!k$0v->sSlMFD{weG^b%VZXHGe2woxPO2!u` z85%GDDzAe&Dbm56M##zG-6AigwWXxf8{&4#Qk`C0g~;X{3U>?90=&xkus`$&H%y$TJ5Y7|ePb4t795v1on6P%z9X2j95 z8746VW3#9hF5p+MA9=>^$fMTw$HF--Xu^eX8>k`Tk_ zz?e!ap(%(OBBSwB)_>ZbD$h+?fvX|775gL100lR zz~yfxZzA21-j)niRDzDpMukf@3sMNALKxh=PEh*Mnh2Xo!A4ipT0mSo>AC9Bn1`6% zu-(|xcwOHWVZpC0$B_Qs*=|Z?M%WFQIxB(h6i-AE@!~7ukR>Mu$slzMx6y zDZuaRPMe*+KzK$}Bg>Z$gtjW$$hydj1W!d17&S~PbvP}JvVw97=;FHp9?OxUOy5@9 zZ}W7d(0JH5Qa{Gj$9TdVhiIH>&a2gDtA_wpn-Fj{zNNfKYvfZzi4Z~YAGAS{4h@yd zL?xnM%vl+GsTi7v5~4iCW@EFfmsXLB(hGZ8r&#>(Y_Qw;^tGUux*Iu<40V_tErC~V zD{2Nh8)V+MNxhx=Mo=d3%aavd6q6J?asOh(Qbb{S{Dzu+W`(HsT3 z&Nsnpm5<`0NlcL^UE`TKGv&3i6nS5W1fe06=$OdJ#Ik&(o0MJTS=7(??(w5* zc8B6i3QC6A57>9`s-4BRA?c$FlTw~T} zi~#4^e<7kAhRUD?5|rdKrwykK)lB(7-9%lVOibP$!ADw^UGp=YKY=F0fSfgE!TpSW zqX%g4wALlIH>Kl_W`BE>*) zP%bB5P97JT5kdSxf7HQsPDZXHCyW(Fw6TjZ5BY^0w7$3ImY7SvHy9dD1Mh$;9v@F+ zT&Ld$dcL9ZL(pXTIY=xWAt~T0xI?LQY9f_LZIjv>pv}?stpno&eO)_T9H7G*2($xp zjhS!^^!{_L^K2`Mcb7bm<~581JpW06b1b9{ryY~-2QHP}&>v_lR4$=Q5_opbW@<}{ zkFuM*Ce52NH~PJ9O*uYr(|y#1w>&hL!&6Kfj1yr4Vls~c<4X+2+0^<-^aS8L#&ApH z{N!tt$>4p5K_6sWp?xx}^sV?j562bIPEe{T2J-E6RQg3wvu9T9uW02-@UkrvtSwD< zk#okurjN*6OCReMTUKFq(bKw=`es-wW(oc_t}VHY*j=(i>^fEU~XZTiLnu2PHNxP7=k z)vTKA;$y|LZA~^7@(%f6Yzg-@9W&)vE?bs3XFIP= z-7S}$c@9BvPUUS>CsY)R$8}2joOF?WjboS2gvzCFp+(Y8kV%j$%4Wv1hLch#J`&hn z<05gLLfu21O6Qeqaxm=}ODa-kI$<;*M_{$Bg#~sFbd0E+STP4>0=iQwu1{hxk;59z zo-L(A*Q6_<$x^2*8~BtuXZSKINdw8n6 z4doblbW*Ftk&)H47t5GsI9Hl0V7_A^nkFH?;6(_>^1+&5KjP5(+Xr$0>7zfmD>>r_ z#&=-W(mTm^NOGYo(pS(4DNTYEP2zlH9i!xtPlJ3}3dmkN8*xOol?@MEb28j2bGmgS zJQc};pPDS@m<0ivJhZ>PzgMHV;XUA$y@@{(r)GSoIi)Kl;~=_h5G0Tlh`l0+lgN2T zenC-^^C=gS&ZiI~(t2E(3)HPM-B|NX%QN`4X$P!@w*fupdHZLZuQX7yv9V9XA3#ZA zC)|zuht8+vNez;z5D|*WP|zvyZ}A|`H;$Wpo{|mp1v65nrnIit)QJEuU+?C+eU`qK zg~%V%E}%Uuw_LOQYd>YrF3B%h5bf1ah+*PZ&UyHT? z&);ZDJ$VC}KyFI?Clw3W%R4Kaj`A2xwEMyGTO4tde2s3-vctZu=Tj; zeN10$U%*7OlSYt|#c0tXppACOB9gC?DWYRMC8r;)GbNwmAx$GJPn*@GZ%_hG=~AD{ zS8aV{yMgd6I(Q*+&)g4yoW9sizB5IN$osmh=oD-wt{FZ==s2gA za$+Ifx7T*hdK~PTDagMjhh>l@*S^qx-^VLFQ@bN_8Sv##;sB36Z2{p3pDHYo%#fXy zn4~e$W$^~?8*W?bI_eeT2Vyn>MG&Jt$9Pp|gR6@4g`4ac`xeV^%VWfa)L9l-kJ!6A z_IR)O+#ycw1Hd(W2l8s1DN|FcxI|vAWVvLIL@GHdzAv)yws8B?pHUZ)&k&Qzg@i)v zOZ3Fh?CSNUjm3AJX2*N$c`MyK+dRX9vYxUXu&;H$^N0aC>|(4G6+jcPQ<4&r3)xXN z8R)G~NUFqRC6mQ`ft3H2(U(z4P6SHUR7wu+BEGCj z9bqfkJEc8l1f-yip(1|2Re`Bl2k(a9;We77Vb z>ye&7hxpNU%XZ6kz(oy~R!&1vPz;cp^$O%H5m}ou@+8eA?<9jIEhTrvDS{1rG&6@m zB^@DtC;cF9j~B)bsx1ti1L+QN?klc#w)r-Xd4gq}CCR$NKEbixb=tiic${5LY}99r z1A8=HmavU6fzeldNaPe>6gk8~(Q?5S9w%c9^X-Q(EkoLDxa zjM_N8VI$BD4UT((%cLnN$zqIfoaCZtvZPitS2$a+m^F%pCMQrLq(_ubNrfqk>b^t? zG=%zMn&Z1-(d zj%vrn(le!hqi>?SFjp~c@Z<2E$xWm;La~r487O8*Wa2#GMZrS$Vb(j41soy0AORp$ z>eZ+_`o4l+Y4EQ1X>9p+nPsEZj_kB}tU306z*W_~WKrp#`fK1UmWgcvboOgWKZ&n} z>jZBlUBx#fbn!&dM?pu<7uF~Wg`7;zC$>rBrIH$lH+-zzUHQ@1t}x5q(lOrh*jj;% zvs7A#+h;kpJ2w|YB`l!te+=BlX@IdeirAch5-#HBO01%Bk`tl~(Fs8urw#izIY>T4 zTt+&Ynwb6&@J$7k_^K7YO-0{q#g1{7zBZBhrKPv6r=8~P?c4z})idie>W*OBV22KP;baT_FSdXgpRZT^-;#6nM zvBoB_HCj4b4%u^UIG4r|U;MnVF!HhXB+wfR0HsowT9B?TB3h^r!z?W3~$WI_Gs@ z%)DB?y{0AV4(b!=D|GGibn?ylNa)fH78Yl*dB_5sgr3F9AzPPkI|On68bCyWZRxanLCEsqu?JSO;vZHe*m z^&0;9bfK!Dv)#|@j*MzULMc4xr(%~S8`89W+P#_X}Km@U{pam<7-v~v18 z!DnG7p<751P89y&!rXFtE&Ud80Wp`PBi=~Z9T8ph%6o9=eJtYpCeUR-t*o%d> zTt_#j-zE3#FYi*>uCYUm4N_lP;gx#NW>Cl`)QC1K)>CentEQa#1JNRag6O$m3O|hpWpJ3g zNiT?xNlxOsT?;LRl#@#$b0YIx zZr9YJgT-_6`GUjWn&!XGUs3q7a7OV%M50ir|J%BQQ(~HkIaj#ay@blD^eH#mA|AQ<$HR5`+^~btBV#F zKXGhuK4klIYr(5&6}}svp%zppvY4#;rRPG|u#|T!?@+ELE0$5qTm#1Z5xO2Rodj&z zLBJN8@7d|$itSckLGvOqe^tTrg5QheqD|I@j!n*e@dIo=vIo5j8lO|Zhqq^l>C;P< z%Ij8YRqo`x#W`iNW@Pj;cQ)OMotB9tLPHSH(Gfz>fR^DLfbzPLzI;(2R&nY>E zzJ}_CxrRkRbS}kCW!L#4zFj3Io4TlP(Zl?g`S%J=7KDpV7TvPdw&|j?BfEh0_a1yQ zqco~`otl+aDeoL~kN=nVB6o3Ko2=CAwkcIDC-h_CroYNi9(isy9wVItFm*_9|xID$Ju8ICSaqIj=$L_zr?cm74_2zpXH z+FHLv7w8huCbN?$$|FaKOu}hQGfFw7b1LSQgE2egKFu~||C@R!wXR_`5WvS9qs%`_ zM`DgZL9cIZ$2bR3tS!D;u%+Oqf)MzRbS}DUWsA@H&-vOVyNPk&=4F7^d^3z$C$~%P z_`E<~?>u*2YR-(Dk!gF<)&na`hH;yyrYcJV69K&bgZ-Ty9oLF&MYRjzJt$Raybw3&VW{=KooBKMiS8lhwN!hQnE2OchjSbWE%M2zx zsm@WBPkv04j+_Wib@g*BwYuP@tS@|6aHRk*ep5WadatCj*Wj-q{G7BQjquWVDN>_b zq_2`)G3Peuj>X*ex!ZFJv)-i-Om!QRI;(LxP=AV)E#&IrwrI2P0{39o5$hA{N|^0i z@?Sv=nQ47lMA!;lm3=WTSKKGB!ze6`Sf*K}U6%D{mL^Y~J1TEePUYOftXUZ~((+6{ z8d8m`^pYl_eh9wen<6_SD_kAi%i+v?rQl3a;(OP^7KJN{HN{2N*RIl@<$QKxHrgNc z;3|9(kX_Dar(`WJbv1W*so!$BTz7Vb%%9UIm4Q=&9wGA|Lr6b2aH~6M%vs&DM&?b)!}H>~8=-I7 zm2S?cZ(M6+b>;LoHTyKn- z`tZxqk=QW28sSh4Raebim)SmVNnRw^n(NK!lk+m;cKSlo4@RH9hHi&$8DIl!a!R~= zbc1(`XD_&Itb~}?w_r3lC-g727xycnorhfK<5Rdg2!~d~w&79cw6c5p#`LMVKji+B zJ0)jcPS5O}8KcsB00Ug1@2RV(JF3ls-sNw=PO#0%qE_w5EQ}UYTj?Z0{b29T$#wzno(@VWuw*q)X zdZG{h3;QZw!l{Lgi!K&Tus*c52l90d@NyBr6aPo-E-)zeDRNVf zq&~}O2lGhIQRfWE*_x4`am-{g_tag{t8N22THDTo<%x^?sz#S+W3)F!#r@&>>!&CQ*hi)OvaT%A&6cIi*) zW*Uy@?o)?}&ioJT*T7HyP4?He$;DlYnZkjE(+cYqT`#_9{loUmJ_7Q0JEeBugWd$c zL0zMVrw|r7r$ugy-0WOq?&=(6R^QC=DaGdhbi;L`?x~I^tz>O3#uoaY`fu9G+m973 zC_VzcD~$^q7G+q^TMhOG_H#g$crDkEC*#Yp$Mhf6gOr`-kGX-INN%ItF}ZJYnq@uD zJesm5Wtwig?x8NM`$SPR3l5Ms1M$EPdpk$p;%e3ng_a^CG*9SD4qNxxui09MTZN{} zH>K+M4eTM+hT_3zVQbC>$TYOiMRSz7>dfD=zMJP+rfSplAGHJZ7P_&bH@}l#97KaR z9B%t?>xkk_MMJ?|uXo|_k__tvdo!CM)Hb+WY9;*v{S|A;8dR>ap=n`ux!jsLeC~(r zA-T&lw`V0&=336_ChB_YYwDgcQTl-}h94F-2X(F?j+fTQ#f#wt7B0*vT48NiQp485 zUgBRByeWF5T__Dcn`|AF_I+u1S5WJFefX z4eM$u9jbET-sFhz(#Rp#6}QcLr^HY^tGHKD^P+ks6Re%=Pf9BJyL%6c)Y8?*~j%t z{Ee&zAMj?x3RNHVj~VAOw7I#ts@z^VjdKoWHO)|`l{RhFpU{8RoYqq6T+}aZh^0hL z-bbF+B~T40GF$r;JS)m6B1@`Uv+X|TRnKxZJ#h^w!W!d~i4ov=-6*4Xx;3|H&i>qy z+3RxBvYKbGske-u^zC%tAcFp@-U#`b=h3UtOP+<^w32^pD~tZJ<`j+tH=|}HdrR8d zKf4%DTh7B}U=6UDL@_=|^`r7+`mbq=ax3S2%ITl|Bs(wbNP1pcBcs+ZOgmSzLW60h z!9IH}_By8Y-S|=HcdK8_2cgNc^M-_FU z)2BGQX?BzB9a-J7o@DMyo04|ZAQ;{NGpMG}o#Qd?JkfBIxY&kX*ShSXu6)AsbEy-S<)h)Y2*1fEL>8sPBRmsF@ z_h`rKUTRyCqX;8!XNLsG1iX%sj&>!YwQ_O1=uYv;;{1}wCD$A;9VL-j(SIdb9*cg( zW>SmjG3H-WYGrG4egRLI)a-59eKK}tv@mxu57QZSr*&a1Nl-;^Re&ipLcfm(aH34x{sIWJYwFd==RWBqEBgp%`aglk!jYhnyGLn{y^+@5x?~ zQ8uHad4cJrc8I2wuC}Hfl}S|O?eU($%l`8Y%JIy4$C?h~Z7ObSZDDI-KjSdFlHnK8 zW^!NjGIkM|9{1=>Q^1tS8Uvn;DcS3@a~?l`5fLmpQa*!x!geR` z7HS+WP7aq}peOJqKtr0Wvlt#{)X4H>Dzf)yF3#GM-XvqO`L%hbwuzS2R?#kCw2FOV z|AaESAhgxVew@q=(aA3hV!4mM~`5oN{O5Sv8ik2`8%K(%` zR=1otnG3UUWr&LL4q6=uo=rT0>l*j4*Njy;|njRY9QM)3xT99QwTKp0A&|0=F zwnO&IjuZZaK~Xp=^+9_PyYaTv7mZ3kDMC? zrd*}Ckz|Br(Ll)P{lUG#KGZg^q;ko8@I!lNyKV2__`|u;KPVUx%1SrUET9COA@8gA zYA2^BGuTWiYi4FJ(~|Kv{angF=4{<2%_wab^%ND(T$U<{4Pz}M*S&W=&+KFD$KdH_ zK(1l0ZK|DcsGTExPXD&VD)B241QJ1gqCV)YN2Jl|Z!%-hq1r8TMh22G!}2J_r&H)I zK`fl3&QlqXuF{D3&ZyCU!TZti#=hG2sw8MVW&P9kz-F}%ajf&s@V(|u!YiaNwh&Vh z1C^vW?J(Y{?v-`Ex3n zI$D25_pfH7dY$^Y@&z(T`YnDr($4SpYh0lc#d{OG z(7iZN=*WZ23e`r-wzR#Oi?d&6)Xwsx&&X&CUIBaI9{ac2sA{dQtZa#Xk$?^z_517i zv`&TNEYw1pmP{>qVLM}g;UHXhJfnQwxv>c~Is(6reJ7eKY)tc%C6?)#maIsIoY5}h zYdUMGW!bFXscWsl)Z;bxRgG{IUC1S4n}WOjU0k)CyX+P1wi2_g(6-fn&2h*nx$Akg z>_x6S(iYs;vxu(rXGO00SPGrlE$d#!+{{rK(=x`TIxWo%E%j40A=OpQE0qJkfv)E! z#U}-0{^w4{dB--)CR%l{Zw|2WFh5yWn&(w)ARCmgq9ZUCH`3{f*QRaeJ(;?!F`2V6 zb(t68RKFq>H`X%zt{J6%pc$dQ0)6mJ`6uyFAv*BZg*tEB7uu@Yrk6Nv=WP|7t(@oF ztv!V?Gus=<1uBGx*aeKV1;#Jt-!pt!DtMo3({-8eEQeF$`X3E7)aO+;_;V9ld@P^A z-V2=!G<9EbB94%4vh7QW!}iKn(>cr8$z9fSJ=!`xQeKC$XltS-$KBU#d{N@Si+iK-s-9CliP}PCZfE2|Fzor))zK#-I94CJv(zjdhLwGsWVdt8{ZqUG_uO3X{z2w zuP65i?f3(cKSM`6Bi+*+K2S)V02RE$w%#$=neOWD&IV@M;bd8)0qVtVcnWn;+f#2& z?~}n~Jk7ACXJw?MJx(oU8f9FdX{2VfWz;8udT~db%72Ld9>RQ8+!vf{?JoO#TTlC4 z+a%{A=M~osHx=Fxd7IQgmUR^Dp2Mg|n%er+Y40;0q%X=`ls-12AoXi%RZ|z^Z<@oZ zr<%s9s!TP?oOJVVqd$b-dP{pKXIF>C-p=0GHWE&y*{(%Shr431Zls}jRlbQdB0gZ# z$%$%2OQfAolhQw=e}c}*EopH}Lvxz3o%Xq^rFM&IiSi`91Slt1d}~DXZS$5mr#e}C zE2z@@><=AvUHQ)0?k9mAA(I$RHbp(q0ab-isb|9ajHW8#EB%+=E`3efrPR9S)~1jq zr0$^Uu1-_7WYVR6$u2QE*3b9QCpca>%h=Tpum!gda#VMIaSnEM4Y&gTK|XF1S`M3q z&&GGCeo?JTZI${|nCH9s{!(M;ApQa92pR4!I>z*MOjuNd3u-{ouV zs^C2D_{ILf-pBTjbEL!KE_R*?i2k_nSHP@1wwkdr@=A*Pn8Anp< zr{6JMGS3F$XqI}5YJ+kB(_3DV>=JJqeeKuyD!H~e204;- zEU59HbQd|dJ9j#A92&e8V&X-Q73-?;Ro7lQsMPxA$+G#8Y$fRXVH;j|hRq5r@ zucy6B>z^ipk42{b8T`^U>O1PY>aKW8{3~bWT8BP_I=X9m_B*CKjrQ+$%CXadxYAs9 zPr}3epHYC!Kzd%jO8N1sPNHhGBek`p+x+X1<);x8$WtO?N;e&R7npWObFHr6v z+vD34tGK$6Qen}f@Lq(wO%;dL2`)3P|6KW=E1t)`ma)F+ z=IR@un=ceJ;>~D-*nhqw{?=}@C+S@5dh4WJm}j}Wzjvf(P;^AZELW3;Vu!%nU_0Ir zazEEBIJj4oPAjnpsnt>jTXyO18|pz`eZT6G`X~A$-CrCerpMyZZ2uQuefI{}3+Frd z`kftD-L+sYEq8Z{j1Je4z9yrn4*MJT;Xi}#cyCL!)OD#3(?XWDX%kW+mNY|i<7`zs z^&Zs+l|c8PwaGt)EwS&Bz5cLwuKS%+>DuX-=p5_V;=bkj>>2Jk9Tvl$WKe2{eZiCX zDNBw2ODdEY((38_VmIDQTNh7pCsAu%L~+WLTzO zq?!XPwo^moxi91fxCvw?t184?<(in?z!YG^bQQ~3cmyHWO=*} zK9#6MIKaogdrI4st`B&RjpQ+R(@0NW~MS_k$kBY*D9U}9Sx-TX2GhrI=8xcht9jimEtRQzYgvX%on-} zW6+2g+an%%U!ohRVA?w=oA&({zKA?xuEXq<>s2bikH-^_JVV`*0`a_Y~P z+m_*`&&E5Nq3YJEhD^F@gyJK*S-Q&2j(rQY3WPn`Zja0AJmOsL47mom4|&FVSvW7- z`76Q(bT!@qHv+@27IO@=2dcDzX=Q>HRRoSPEK=zsKq#UqTaoBfNV&yFp3u(RIa>@80Y??EMhv z6j;M=;CG`M><8eMRiO$fr%rDuW!aEAHzjTtbM(!SQ*Qrc;3PbvReU&CNtT+e@#4`UB8E76c_M&)ToYFk+X zDLpK!Q`V+THxD!U43o6))H4{4_Awh34~gIK*U+ys8aQj6{1^PoJfpmu+;Ptn_atv! z-|zm<{x5+$@xR!WNE37-eipArej%!9PO4X>+&6zu`P-~dIczF#T4mU*mDGEfj*2v8 z9p(;Mo_r=O650ZjT^TS33p^IzD|c1zS+~af#(Tpj`R@3`(Pyzc(p1@pmco|f2wqz? zQ(4Wt$Ye;_3u^7o<~) z>b~mj={@di*C^)g|R@ z)m7l8t)A4smfrVnwda{@r+bX2t9O9+cVBk+TBN7gOge;2z(ztg zd=;Zp?lZkGMN^)DLu+GD1V1zVX1Jnjp>Co4q`JoRVYGB#*(qAtWGpZAV{ivBAtLTB zo)0e0J;U?NyT@ztli`n%<>D-9I9drO;pROVn0RYVw7IpVtmQ&V`INuRi%s#A(U@&`hi% zz5{!rxJvIf&Ncj>c1h{LVDW^vNjce%CEi_EdIYmM|?9OBJ={>aacqmJ9U{pMtvD z2JaE?ZCIycfdBE>|Je5}ToigI8buX&mc_6w*j{=QUDa^FFxA{DWr69o`M5D?I;(rA zU#(oFYQSVGgNh~07-RzC<}Pzm_(Av=|3AJ0Z>smDC(TpJSI67K-^F({^h4+up_gDo zMxs_A?bf1rir1M8)xjNmuPI?JZE9*>rOz|$P~BGfnJtV)8CDdbA7w@2JS#@n&?mpb zm*U&#x!`%_KH$ypI(!FwAA_wzD-)XqFER>ih<(IsP(IqHyJ`3WZ*-WsbBf25ZXRJc ztM98$0f+SI3X`(4g200EIsPfTKGHv2*}vS^-`m7n)$`s{!CT*V#wYp*25W}hJS{#& zN+8<5$8P|Oxv{QT_lNnmIcR!k>T9}de6K&RdkOWa4CWwxiV^9t7`SjJhH&MgeIt)y zEwSEFzKILspOODFy$0YT;XE=|o3HI{Zf=g5rkU26wi){X z=YG3dquR(+RO`L6jwo^Rd--qAjb|F!=`;9al_aGAf# zI&=pRg8LIEh|Ze1ny;pa>7uE`)ZaAAG{#WP;7~7C?_koHxxinWK&0XO1xsRcY)#!;VTvRCoqg%z%7CE-393N?M<8_b2Njs!^|zg#XMmiZZ?~@ z8rK=hY4@vtQO;GoP<~hN!~^Vtu!bKS3q|?_miP~OTX{!#P5>RFop*?Dv_Ils6imb& z+*$bm+5*lFn~8(uGxZ)#7xP#1T+lq&O(Jv)Z#4|i{HMm5Ulq%l?TS4_b$qVi<9o&y zM<)aZ1Ri)(ea}6Myh%?nC>%cecLi1iP3%t`E0;!3W5@7?z<4FqOVzJU`KFrY$EKO4 zi^lVYiTcHwsH!xxm)^&8Q;Z}th&E!b&?0^{wk9|$_|}*2i^Df}cnA9)`YQ*X!rtFG z-hfR7p8a#^*C~(B!X;+Dk}=*gJ~W;(H8$2Z@%j^nUoO%l5DG zcZ{5f&JepuHIO>kX>=2ARN%_ShIE*lNJ=%+Li0i+xH9PK>;6(!S8iACVLB-`QT1h; zIDs1#uNE#0X8Ak%&VkQ$G29Ur`HuRQ`N_c1$c1R*fjim8lJF_W%A&6m0)FR~TbuOW39_iqGMj_5n+{o-2%eu%Gt zAU`_#d+cHIx>OlF;M#!SYh#6z_UpIm^GqJ2&RE81*E5Fgn%A0hK(UqS8H&oFNlulY zO2@eMT<^%f$f>}Wz&HO3e+NJ6F9;|CpMuW<3!@hz{gSuDQ;^?oiN(?G!1pfD&eGii z-}<;d)!0+t%U^gBJqF0k50;dkLQIH&(3w?)?i4|X-Nh+3=pqML2-n_3u-nkpH>MvD&DM}S-`Fddls$~lT# zm_yzo4B?){tl_W0p8lv`?HdZwg!e7*!qVO#Msa zIP*2*5YsVu1IzW#v^w=6rmAuPT~sWFcu~pMSecnhI zazF{Z$go$}ST{g(RoRX~6gW5SKmYL#k(A)&8s&>LPrpDM4duk$IVsoE$M%s{4)Ng=-A z%YmWSipALmVIkB!_&T5p?DJO)toC;aE)7f!nM0?!TiinVxok#PqNVT;_#N1JVFxj` zHIz3tHEc9|*DcnSR}WKFVj97Uc%yI;Rq$6LB9sR`>xoc)uwlRtPELdTH+)z9hCrKO zRp7`sWOwnWr4;llQh*upKZrxh@2bs)!A7I83n-d?GyDl!j2G$xWk047tx?{k$B=I@ zQ}S)1DO)9eJajCS6DSFId}{*_d|v}S0>eY=gZIO;*-iWuIUPl?1cnf~1O?~!(#D{E zzwx}jvhl2Lt^PmF8ns$EU2%r`TXBZ|jmXDMVwyM&2#whxHhjtdH5l_X36}EX!HU6h zp$#ECY~paP5;9u8fi*=d6Xmc$%8800hF7|)hJW;L^sDtM-4I=-s;XK`zfkOsPB9*RByjzbR&*Tt4fCN}=|0p&-B>MQysz&MIpA^nzPfgr)#~GlKNKZ&cf~Hs zOgp94@>^~%ep0yQbuZ0hc$W{ULyC0j2K`DB<>%Z7J`o8=w*_-Ui2xSd9w-lLek52u z>g4RQ~|+t~&LYysOF4?$U2D+}EWWXkA*q{!^>Jj`kFgcVL91*S&N<@c8KZvKq1wa|?18cbxd4qhdUZH8I z59?RzjC!LkM`u%mV<|9Zd(q{A=UA66MCL*q8Iw2!JkiskP2sJPfi4%hyD)z z7sjGhVlRY)VjQUl1onlfOuWW-0Fip9zPFCjf7Wi%wbzb-oNaApJ#@ePLVu#e^mX7c zmlX#ZTNHKW^iHH78n(}8Jro4g^+MOaxJo4c#3O!cw2R(^-fj+{`LgQrD_$!VGPmZ1lo(#JKy`jsoREP|p z2tAFUkzC;(FCZ5ASB#Zs5@oO%s;A7)`VpYOIHaor-u|`0)3_FMO?iVlqnJmxVMbuf z@Y6zH(ZU{LABXvHkB~FCKDaTE6B-=Y815B>D{9!9_<_$y2FZDtA9)Blf=RXN$WG)DIvef_2k;zb1Jg*? zT{jnMrwSdd-KZ(2P5=S>IQ5$BOkbyt;Rbw~SVKI<*5FbjeWK+;U&8ByE5i@qTg?pL zj;x5hh_>WMC8{I0kS@T;K7=pE8Zt%nY+bhYU)@BlL3dhnP}4wNM_Ge;Ky{@?(T(YW zL^YyCvUhST*Oo6GZ5PvqJ4A+sc7?lzGQ!`(EZn^IN8->g;FH_RDVPdn;gl1g-&4c1 zV>N=-sBH@W2Gs4drOf2FNk#2}+PBqks znhV;2x*Y91Z3|$^EmjUx7Et*VN;C9kvO4)l5|VHDvV4E=AwL&h7gmHDhc|{);jiJI zk%d5JtOI>Dy`<~FT3v$?m<;{sHtM?iyJjiOc&nzLwgTk;4=Cdd4Llo(V#%`9Vq&Yj zJGnd&;L63bV$EPaO%MMZ&JRf;U8H*C-$?zap2fKO(l7E7bQ)G2dxGsDjnq2zL-ix= zGHsr=gJzTlRTnGUGbZ{ibd}sBBV;N$U;a~SkSOB6#u~<7g^xyZ!=oa5LscS0;rh{s z5p(QzJcIiRec+2w0f_HqKy$1i+pEK>4_Z*)Xg5Iz)giT{Y^Q8Uf1~EWS@{<#PL@Uv z%hwV&6C>klwqk^j3=B7j+z)LC=ZAA3Qs0jJ79S8_mh6&T0RH2Ruy-0o=tHLVgFDATYANK+`9wM4db}Y!EK(3z5!OUrgrZN>-5A*#nI66rUKgqZC!43?vM^>cni;<;B*j_CPV@j|!~OUuV!1M^+zRuk zruG)lcK%a~s@=+Qic<6ec%KAaoqB-2MxF=_g*og2_GzSR^mce-L>2xiay9%o;)}eE z?uc!O=ZW`43t9`Uj{SvVL^C{1xqxY-y{P$5Q(E(*X12PI>ZbA|y#jVkj$BQhq^#(3 zR1#{44)zk)Fj_yB7DNE>7yYC*O58tkKDlVZH4 zrX~%l#(UI#AWI)pKBp@vE`V3r9?(~8#Yp^?s7?OMwct}?qhdDrb=4!)B10qU$fW44 z$e`FiQ7O?c(FmC-k4Kjxe`74#L}664(yZ2W)I0-4^9IcusDXb{3}Oya6@fH(fldXj z9Gg@nkMlZyHso)QMY3U*HV=;qQ{iC|U)UVYjP~X~^Q?4R-iC}oDd1Ra1Lj9dO;~eV zBWt#5hJ&JqRh?pZ1xil`^=yPHL#Xf*$vt8@{tEXYS`u}H+eg9>pPq&a!^%i{v?$U% zX5m*P>dAeP)@U($5&Miq=_LI{a}=sw?==}(TEnaN!jAHn0;4_TV!9W#gdlNJ0-73M zm#+kR!Lkugq*HimBt6_OGCHz4S}VFCmW2AxPx5H!?#F=Ry&h{u2dJ8wX=*Fv$A)Mg zK#hB)vKQl|f1tXOGbouvh-vtp%#|)mtrNEs zBjVP0pXl7^Wr&+YBi``E=q30@W20sHNn9&=k2D{Bk7%$p=pOPcIbWq#|EV6T38+4( zVGXF~D=slz$WPQB5~arwD0xy^DQ!&DO%%p^#6L&fkwMX4BS`d3xJv9zN@Ib>b0r?%6)LEzfIkv1_1r@5~)TLas_d} z5M(QGZ=)SzUqK_361fH0#dgu-Q85~g&t_{R*Crn!cabaT&uClXI^IWFz^FBI)l=0^ zRE4VQs<+H&rVF);szIu$C~<{6B9}qlB&G@J!13)LO^JPq42>?1ypNoV&WIMrdd6yV zE7;l6_+)D=f-v}TG(n)m5@ji61x;;DHT5oaLsdehWpb2TNQxdr*vNC>Bcep=A|r&+ zf`>)8CNUOfe(mU`=--k5VqK%3;!|QvxWCxC(#2#Ux()4(wZJam2I7_CEOSP6L;auf zn~GGDs-G0484GEmit*3HUxYv$1`(IOVfC6><6||yd(FH zU6pK;tdC}(CxHQe57cd!=m!d;swY(B&Zvw^t?Hp-6Jwx0QXXOvjQpCMf(=FwC3lDh zU@Cl#&xpT|jfkmZN22Xx7o%cqW$fR$BYsz?E`E_a01X{M3(+o^NFAp0fQ_qy8d{OE zK>3XMn=#PM=ssi-S%#WKEd|0z?OW3p9Qn8%HmuKdLBDUp!T@%2d^I z<{`6~szwt;1@bJhp7cXL_O19<9K>Ja+sAjsr^Wikdc;tmtEI%Mv-RRK+lU<{o)DU% zeUZu7L=>nX*k9m3PpCSpij^%@*~+y_pJEs@gc7Mzgo{Wge$WLfp;Ius_Hj*cqVal4y{mMedq^!nt zW|VY)x`3Df&#s{=5GV0ed9pN5=p!&(18!V=Rs2@$EBxB_v6^vrYUR~bDy5pQT&Da@@uxy2XHq+Wb54_oiKBA1yir&w++w}# zh1lts7xI{kqgl~;u-=PdPin}g^82NE(lcZ=as*-tP5wj zI)WaDM;np@$c{?4auCG4?aJz^2TXP4S(>N4L{rjC8p-y=e0;cELpmosO-$nQ*{yLT zUIp&2-{74V#?Qq&u&3D9{MCdgDUph38E_}<09oc+#COF-rknB%WK_2@7Ur;`7Mzn8 z5?!GWx)<>)jClrh_7Ui-y2$ytv+-(dt2n}z#7@K?$9u9B*%xd-p5@m=4Ar7Hk@fI* z29ILb6?GIllpb&huF0Hat}2v}Ynei}A-j-c$ws7}Jc3L|c8R8B4d{9O8uzk4$7{2H z!`GP;-yiqK;ng^np|kb9_YgomWbeWZXykawb6+{}CUEVewmCf+1&h%bws zjem|cX7|UJauc~8$;HX>$O$BYl!X=l61WQ`^gp2CZ_VT>ZHlAJHoB!El`H{zo01d> zn(TsJMd}0hp>!gjKg#~fDq);8@p5sJ9UtGprm=r=xqc0Xe`^3JbFx*lCT(eiTNGCT+w!(uG#U zt|Z?kuO}2j1+Er1fz1P=#prlhwobg5y%XQU?P6a6TW2-WMIMSOpeLXWYNS%AO-#CS zC}U6>nO96HMX{ood``_KrjQfJ=j6W_)So0V*-9uQ%;)NH>sXL*!I%1x&4|0%@9`m! zi)krZL<7RYt?mXmhOa`E|t6d>M#xH&I&uxg=&evCR!2=$Xu)uCMKUG zD+sB=QLYd7g>44WBtL$fy%*oktzj|#7jCCWi|Y})JQsZet{w|e6*-aoq*%v%RIFk8 zDU{4Ax}0J;SsnI|?L>&kChOrRF;X5RnZ%dE2);BwmmNUd<;&O=h zGq|-J#aTETdxX8f>A9C&BkrUiB(BOgBnNUzu83NYLVO9XQ~aPfpm+see3Rk{_;{zl znW-MkB`vvyjNT zYrD?B6XnxHk;T6j)@-?&*{Guv%$yu z9NafA6Zgng_zZzkD;HFY_ghgPKa>7@pZV9oP!E*ILN6D0;q zm7k!ah6K@JH zJ%Sv z3Vf@XaBJ2jZt|-Wyf8zI%6H}4=vyFE-$Zu9c?6@MlDFt-6c~$;S=16Ze=QX+)7|$O9SD#AYurngDUYMWgl6)$Jk(bg8EG&1zcwi;( zMpLOD$wyQJxM!A-waEX-S9pl|cBeHXc7OPepnpn@eki=Hju$y~L%&c=#*e z`wJvguqq~&ioJ!a@)u1Q;2cDi2vHH6hxbNZ*lRQe-ymN^{9-Gql>l1Z#Fs>?#LC3HM9V}+VR}M@=RPmq zfj#LD=>WO`nTOs+#(@9+8N4NAXLG3wQ2Vb(3@1n6w~06Cczibc3_F48@G7VSDUsGl z{gVkXTO1|46*R)1!hebP!aoTX_PCg^Rp={Oq$Y?7sfM&hen8$r$JR0Y6LFt>L5w7e z;ry|em`+T^%i)>$1gswM6ew8*$UpKZ>3H&i_)4fQgc5~`c8QCLAAvpEECD)z#CG9< zsF!NX4Uk(fN6H}gkhfTSd>^@j%qM>#gJd4Ll{`<>ApQWyjS@`4M}s2c9$H!MEW5;e zNhy&j)=q2{-tlb&ktc-Z@YVf^=E9w1r{oD_wmcJcf{vgcQV#U5@2Qrs=4+8-A&TrL z9}_R}Tli?`HM|F|ZW{C{#JdXeaba>2Nt_YZ@e1Jxe>qVlF*c!v+Q)uDC-jjjCVxTK z$ReslVrVDiGQJ5*f$=_)eaQ-BC$c_aA^T&wgcqrYZ$&ra=a5EN1!*6gal*;oLM5?` z&>xgH$;3-xYhttbA@M+D6Ys!>st4Ll{tKm%rsyza1GWRR6GO;v#4+g3UPijWm3=Fg zL;Q})SRbq@{s!)|-Q>yg`sC%LMob7(g^EHCc;W%V#l%gaCeWr=3H6fQl8@v!@&x2} zq%pD_ISCc|Da2=>-Yek7coY7cL>$3q;0v(9SWA2_RtPhy9x_SJk-W(c;t;W^a71{W z*dQEBG!qEuTXZFs3X8=rVmF92gAiU`gBX$W*jcmz%t{q?gYc7!h#O>IVkz+_PT>2n zj<^pyj!nc4$=OKl!9Z(r}N>h*rq9D~14kc$L-iSLBd!ajB z7Cb_}&{8}o+)j=Zk04v6_vmo>I_$~gu@%T&q88qm^9vhAD$RufqOeMMG4`Q*H6xNF+P-Ckj9u~61 zX~JjGD~y*Z={%AlA3`e2wbAmxvUrMt|0h0+@ZfEU(!>PtxtHKK#=tMD8hm?)+!8&L z90ljwBB(C?C2ED7P<(ZiC)7O$c5-+@VBcfE|7i~vXgs+T`;Q(g-7CKp?R{NppXU% zTjA~Ku`|*)G$!3azshs)Y1kw}M;yb;5eED>LWi{{)*`F%e&9-z1uDh8@_O`ja;5xA z3?*BOi^RnuF200#(kuCcuqN41uq9UrT4Z^0Ad1LZw60tXIih`#PjcY@CrN7IYjq+H zV>OAzpmm)M+SFO#2U{J@!|KUDBi`gQ$t#XX?iWMi6mdAXR{DfhaPB!M{w-XG$khvZ zBaKE3@=|1vJO?XATM(z2Kt*Ckp-|uE%;bs7QO;MjekeG z;sK-_%%%Id0(pSlP10y*@sd1Ls4oo{)+HYb9&w&n@Bg!1_?%oSltr$Kb+LNVBy5#b z9t%o6@hEbVkTC%wTm}3hUJmo(^N~OBKjcPuedI1aMt+2CPd-DA!3wM`K2829rX<@Z z*Fw}x3U?%rAWJvkyvT_Iu+>sy?7g%QRmi2W>qvLVkKMvzm=0@%_lNG%Qiu^>CLhPP zAZ77^$RzBGbR7|r>*Wc_*3#nSmE?zH&ty&MzBpexDt424iF@Qe$=Ya0s)DwYw}R%O zC;A;J#QwuhV@kXkRtGBUz2I$N_;6$!P_MLjD!K^kBfmsyN=N14$x%{WxZCzg&H<%@ zB)&+7#S4%-5Tv2W=g4Cz6OBku;op;JTpkTkZ4#b|>0#8f;AwRforOI>>S3eMe5kfx zz#2e=_>^pbyb=G$(K$fdnI%!U&bdj)wr#Ux+qP}nwr$(CZQFLzG4DAwUuMmE)3bV# z|NZx%YS-So>PFC>)Hkz(Z{59MCRfQ_2)1_r1~2&a!50$C_cA?vX4A(%HM_ug7tG>7 zU$WYBJA{b`wdr9iF7X4~WNx6ZG!Crv8%<-^MCJrTXrEv#|2#OsHFsx%(fj}$T@iy* zb#QR8`R%gV4*rPg>Lb|M+AXlvv<$Sf>+L}s(Pj-ilFWhKdd()49DxF4?e*Ne@vfSD z;+ZemoyKmmd*)6Chxz8g#s2%BIocpN!u)b!?GE45yz|50xo_Ff_8xjjY?~r5+l&L# z^a>o*UzTs(3QUrJ0_n7ciQ{9)D0h!<-T33)yQQwIkK}gx`@xNVYOuE64Tdo_d|wmv zPvj%GWT9raO>lO`w)go~i!o*f8F;=;OegR@8DeXg4K}W{G@pG9De7zJZ#TiG_62=0 zKijqOxm*f=H8{dQ3?`-a+|Bb!$a`OgTJZ!tdrKS3CZcOE3MXK)*=Em4Rhtq0dY{>A zd&@`@UE4`Y-$iG+rGBcb=jXU9oPhCelPm4w_@eFv-}OCDVrvUfMt{kpKg?O#X&0F$ zb}#cI654qtzdcUP^;_cGfo6m)Eo00_KT^{8?Yi52_t)JvAHpZ~rTigR+IMl=eOcE^ zTKm$}NgpJFu9f0`-L{{f^k(fnaDwFN~tMv+`;_UbGXPcE6v zoYf=p+}zQyR2I!7wJy^-T33haX+KRf_&U1DrPpjOoxF8xWr~k1-Fy#t$pZ2R$7pPG zN9u8_Zo;gkvqkZxPGn7|ny)qvih)QO(^z}T2R~IG_*8laYM;JSIZ}MO{nEl z&}(`@tNT{0ZB;o5pB2%RFkMU@<4gq8(9V%Y_69$=B|kZMMGJtNGWy!m%Ae7LzNN&HTBf&2X&##oI16TTmj2Tj_MVQmJLHS) zBTZ~yve$QCN4ELi`ohQ1{JPM0)F_;UhpwvjcbSPYKjfgFA^ZG&o|#T|>N|NNvn8D= zD#MJU=V+L|GE4NWIVwHuPswJBOF{Eir^*gJrT4Uj#+R=?j+F8b^|kAzZJm*$ZmtaW z3Hd3az4?80wU|t$68kEVq%5r7JabStnFp}YU)cBTCOz)pLgt&UM)?-9!&cp+4Rx^| zXOFtE|6f_p_&&89_5bN=Ut62`l`6ViQpz5gEW6~VoRwO;dg_>Q~ddYNY(cDYSMpUAZJjU|`Q zEF1k1IjbY2mV}VwtZrGd>U!?@HO^@r)^dqGt;UYfzO3_2{{LFA(;u~$B-2qc+82}i zuBXg*kxVLoN^xl z2?Jpx%0*4cJq*j)+01u^p47gsk%aOEB?%|^ook?Fd^~BY)g^|cl9^!rJm!OLG}lpE zCoo|*xmjxGNn9IRhT}B4#{|xTGFLC?It{Ih*pIe)*e%x{aMrQ>IPOtA>Ec7l6Y@xS z3BcuTMQa%<+f8&-){TsX3dg>;$E$WsPnswi*$0DY)u{dTyUdy*WzcfTKKa`T*Y8c&L8aq*g2#>qUrz&S~29{M_Ffv;;4YHQB= zYI93VnhAOq2DP1h*CeoC$*6{|=p|{Rvn0IsmQDV?gynCS)Tr{!x6o65yq4s%9MXdN zi3vc(<+Gp8iX4>wM8vju{D%@liiwx9@TaZ$UhQ>KlX2D$^crtInX}%C{`cdu#9xt6 ze3JkC0)6Q(X%AI?!y0WO!}X9<(`Y7+mNTt5KXEzxF}Yj2nZmb)PkT!nNd_r}EA110 zfv!4ILi01(f0IK#mWiaJiJv$1yg#WGag4qq>SU3CPLZwtmo%qSWGkq8n6Bimjy2OX z37Pwtgpw*UoEjsdna^((en$9W^q5XI>HI9S!he+A?EPu>uBx8aFPc|N$PK@eNbrv- zf+9YSovfkLQA_%n-WrAXJWX5}%*|*jl}#+_;f31Fl+vQ+s_$ZM`3~@R2gUibc%B<- z6fLF`^)Tn8p3lgwogm-cJ*f{6uc%GU4IO3fX=&CVycxxshB0f1U^Qelzh#)o&bu!3 zHOye2&s^tkUIqzm^o8`b&!$cFBzdf}k08Z;dr6Cnaww}*Pm7orTGxEmcvJvRX31@d zOQxDel-Xj8j5V`3aWS=~dF+du$hw4m->KVtVfH>dk><7^rQ`ftZQ~nC9e+ml_#m;Z zrpb*Trj&Fvt)&>bB_e9^L*BC&|MrMBB09u2E4`B@{;|yT)j0Emw2O~Q+>1(2%1vt4 zdEUqf-$MEk5zez$V~KHzrM<}_SxiaZbGqC`VY)00&0;ctaFTpNS z+wGHl{=4L2&u?i}Q=gcX!X!0cOmwr+K9NX)67tb5)J--F-1k)f%*^!3%^KqTNH03T z;~(>vToP^RrfV+hth}z1ta6*AkH02useWQeEHj$3lmTpU&IC*)`yW|gqGYzI&=QV- z{%Y$FsYu;jUHfZ#UB?a;&SmF$oh83clQ8VdIQHiVcRoJP8wv_| z#XsZQW%9yglBMP(r?|GpHTgO7If>ez{W#t1bCR=vpoNm1bdayg+22G~b^6NZB>Jq7 z4eZf=;!|XHdot`~Tyww-G0l1YL+N3vQ@^j)#-;#n>vv?Wu70B?@(DG9UypAutDo&} zyBO@#R$c9?Nl5Jh&_^IG4I)@Np-7Ba^`R;!tS*hQBSNmBZ*y3@_j zer~n4aryOyg*$ICscTh(8bexnS zV5Ws;wX8M6%xqJ_b~g`gMB{A(Ic0ZfZyOFiY^g6}Cit>M$uydl310d9Iyc*=hf{eO zJfn|-t=XfuG@hn1Uwu1r-8^tqHPH{+(Y3g5s!!c*UCuq9>kh~U7sY&V1?iei21X8R;>&-av?ZXwcA&JdN_1gpcdWSppjSldzAl2VGK$##aX<*Ni z!g6MnQl>Fg#CWRG(IE6v63a%WqPVI(IBfw?W;3wQ0-pKK*VEP@O5;1}UN=o=xI>)# zpBezYuJ%QxmJXL|x{7>!72W+OdmI7x)*q?B8I2A)ze^mQ40n}`xYUuHJXqKI9e$Y4 z>F4`v?zLawYU@n)=s4%TA?#5uK2;2gXns-k%ygx-gIlG&dG-^~>Ri8GT9U=WaVw`tVN=Z1Hfm~_Wj2lZVwZ5{ z|L8EzX&n2LGkVwW1bZLVT0AYckM2AAQSQD^E@$;HXfU=ZsNKvj9Z6qP zZ=TuFd^1(4oD=Ze=~PwE^d0-%8_e)Rj`@7xyjI%DkMY&1N(T7F?xpYH`oj4J30Xhz-Yb88ddgsOLjM&q~r>tBI>{*j_uT8?W=Zc+!C_jkUxStU=* zdh&30Iz~gI^(}_0tf=Q$gCeGw_K+|-T%Y>m{y(4BC(#|Q6BX(qP2<8yc~?@dx!y9# zAC=-%k*7FUO(lj&XyU`*M=<5=6)K6A64ic(_a9Al(oB!g5AX{=QY=-XT`2wRvg=Ye zNGH1|x{)rf2z>tiei5JKD&I(QN7hqGWFpI*F%6}XO(OH`e(h!pXmb0^UpDJ~C375v zZK!i1X_hQ|c)PfM!4a^@MSG`*Mj7!jv(GcWTohGN{UG%GefKm$_QJ6d|cDK zuu;q;yN!6-RK}D0ZllqKk%ORy0$Sd`^%vcFKi-}7oyj3%iTf8^6)@f`jmyorO`X?9 zmdSN;XeE=^>@dwRH#OlW0(&-&-xZy8-i9CfZGI-pd8rCkz6-uBX%9;$@OLr0MZ?*Wy4l2lIZDkbiLbZx1L*s= zZ$J!rj&{(Gd|bpO#3xcw`ncBej~_;DGe_ESnnfBDm8wfqGL%x0HiM1oZ0Bi13+qH| z9!TYP6vpC)PS7VX56S#KILYst$z_ws#Q2=9n{0HwsBQXynfekxs!B3bK;E0Gveh<| zVu6M-Fp!deKG6Gi7d=mVsKMTmo3#|a z`Fwg8JWU{Mefl<&P*7X&DeBDt4!l8b+nO~k3Ao6Lmf?TD(iU3 z!Ja;+QaIte`$s+k&)wp>>p*vmTpw1px$=_5kES}^A>DO5v1ucn8;2z=mEv~tawK}Z z;@dOixVGfvqS}QRdWk<72F@Tc-|bu5SAm6^OWypW`CJ_->}JXgw?#@YgDjO^fiYaq zSsEx)z_3khWgHsGrF-C(b_jIRv^ccp+Z?*hjD$TorAu|M_Vl~Szc0{>l1cqwEy*41 zEG@u{?}9~PW+K6Xz0z>(=TGTP#n3}%*i2`>}32rkd zHG4uZXIeQG%rCowRpm>tnRMk{)5Auk*7U^rlu`ti@COW3FY@Ix8(m@qQb^c9Y*~&D zAC5Cxh50Eh!F8kb2aMi%{pglxBR5+!5cLHo|PrB2!j zUVcE1{{zPoBo9Rg;rDY>B({4XFM@H52Gg24E~*I&+x4HH%4tqV<~&WEzCc5Sgs^E1e42=0>m!5Q)|xaqx%EBF09 zeW-JF3oJ=ZIE4s&-lgQ>5P@nMB~S|GrG&QS_pCLSx$l{&ee%mIp9!|Llr#k=MRH5f zVopgMcSU-+W0JyefSsBKZfYp+Bq5&PaCkp|>PmZA-+@8y*)lr88ck)t`nD!BkztI^ z(3Rx(wR+m!(uyvQ#NvG|xhMlQ$RyS^4?IR39SY}MTOM$x8k-1m4@ReyU9S^uZ=GsW z!oWWBq3vtmideUjh@(2@{~Xg0e*^_Miktz@t_Oebasl(qMKk4n6!XUamc>-)1)1l8 z%SAGqfNX%#h)A5vW%JR^{>;a>SNvuZUSq;OcY>u|tk3nBj}F^fp89B*lyhq&iQ6dY z+yoiyYD-d|NZ$F!x|4HPkDj4e-0Q2R0_VSy-n51Ez0JxQsHm;%Tv%DBAE|#-Gx2wd zz=KsIuXT~6)Wlzd^Cg@c!dYl0MK}`$G$qL9i+<(oZ{a=L*bw5ZA$~s6EP)-w&~0F+ zyPDR-kz8Pw?A)icBh=4_@?2$9nm(Q93|p6Jy1il!;XCNA7jPB?0zdsT8%aCa@-XM! zS@WJ6Q6|GOp3|Z}F?ClT3FWqA>Ifv-#E7D@Bq5&80GzuZE(PY|pxH-o9bke@V? zZiMR^&UqQ6iEL;6ZM*5XKs((YsG>6hO*LjpJl67oi5i1k(jA}eek$LWGE$G>=bgz}THz+cU+mT@)N=`gZ!~Z4 zl^zZLEj4=+pE8w0lA>DtH^KL!PFB#h7y{8|g~*esG=b_6PL15x&6C+9wsUCU(S zE9f@wb)TL@Wn79Pwi-q30D0-QMgxcDgm3tZo0D_L{`mL$1avhHobd;rMGs=rOB9xbf`Y8NC4#Xejq}JJI4X(r7~&$-7Ke^eN?wOC=p#3`yyp z!ntkI@@^7Xr;A?prKnSKQv)>xyN}X`oSljG1@Ru#8F-};$<2LiV|u1X3Ew;nzD*!^ zsbRf)3>Wx7Uj!fN7S{D3`<2KYM18ypKmL%t`~fqTPpZRzC$@9h_cidgefcRy&tyUI zFp#-TBQ%Ue+>ZU)A2$4$YpP{k9sL<>sGow3sXbfhS~mtx^az#I8>+c*@=D5qwTF^J z7RzkAQLcmUZrWJT22j`1;%X|ey~60rKYeblQs<=&fI7gO+Z-9G$}h!T6^jOe^BH3sIr8d zS=SAaVs4PM;+c<$O{+Y-tTJLzzM}VBCr@tD)^>sZv8}X9AdS`zWFznO*5dZ4P6Ln5 zC5km?u3{7K;c0V|=R0ucd&}lv1MYnp8RH5_Z=VDt_)E)hR??cE#7q=C`#j%en< z2>oG)Ygx{GGx+<_5*H2cmsa-gv_7%^I9(hqgDIpsXMP%IKRz+Qxu}vzqm$>t5jzv2 zgyxhjV5aMl0? zP(g70Kxs^@&nEjowSPOXZlk3f1A{G=BDM?|{JdH_K>M4{toRuAa)53{OZvq5`>UiI z^8H@tbuMeLgcx#(JXaje;?`~*Vts*j5~S{oK_8=+zKfwtF;EPVz7wc1g5;$>0CNrCu-}wFqvFAvTSSh8L=5zv^o+ zdS-CLX!?I%=tA;lZO&6UeNR1enAow$ozr{n1ggMUaN0*AYG+X^G`H7ov%A_kaczA!H*MgsP!gRb%VEU z&poODT22Ok^#@MntR6BOHH)1>-C2$pp921>xK5&``6>HQM33rtV)Hux4F#m6EORTQ zxx3B1JRq}qwqae?``kS92YUHoT?5i9XZq_CuyHk87tHvtPUfdDGjJChuc1s8rpGoX zKC}cg_mBke6{~S+)N>1Q=G7yXMvxouIOC{u>+39yfL~`8*)BUc{5a<+yL|`&4Jb^>eKM^y@IS|Vf)nA@IsmfjQF z2T&iBAs&@=Wn~diZ-D&ED zhg3D(0Z$Epb7s0*241))!hK5XHc-#bfx{UF3tbI&K@4>B2XKiS!80?!3DcPW(@yvE zJiP7H-8*5Ve(+5&e{`EZ=G#c$Xc`YLpx&I#8Jg|t!!;$BM8wtI{xvMmac=uO)^iMd zJ6yY(33`lL^E*7?Z$9q{c)Mcw;&$QQt;9J#t%-1nhLABn67Gz&@{<^M+hs*hiH6=8 zk$jwl`9db0x4AdTiFf&JOpOi)KEou?Us8oX z)qzjdSs!v{;_w~aYvAeI;drX;Udm|qMLxNYve3VlexSwj@NA!{!bXAJqoeb6pzfMu z1MK;BU)k>To6JAd9-Xuz7;v$^hs8)CQQ6x=?w2fZ^$jjvbJGI)W%WV^$5}c^gRL}$Vw(IJ>h;QGM8L&bJV4z z_Bt)uxtm9QT5LySLO+3Q|kRVSh8g~08A#}VhpOFhk*JchfV zH_ieF2RT#f5N%R}9{zs*yYN7t;2BV=Irp#O8N-2l+M-oi@aJMU#+dx+9^|BN{IfSs zf(Kx+`1Tl_<#K(@I(I@>O2|3g54QaWg`+5S&3S(cjF*bfTo;VoNaFkEocYe^U)^DP z8j)!WNj#o68^$dTyzd~hp0i#7r&cETn-;i?c4&~eu#mg)O)ug``0Jc1CdK@6c|py+ z%k9CXHJx|ugY&JHWFXpY(W{yPM*Jje+sJev<~8OlWd`4;Cy#c3b2zS*@xnir*i_T8 zKsg2FgddBS`m&_<52MM5c1kCAL-M%=#QM_UoA{E6@1Sw; zZHHj?+sZKRU_-rY%4-W-pSWBaoRbS|(t&k2O}vXvwVxHnDII)LM$Te2o-q@gd=7lG zTZ*G2E~UPyz@DYnlCT)D$?-3UzeI9;LY44#%(PwcA{5Xz@L3nlV0ty_TeD(t-12xwlAH|;YZ_Il< zVx@6dErSnz$-0M?y6`ExaP~D~f8zRpd4Zq&uDiuPZNcq2Q9@{SfqiB-&!UyhW`FzY zXz;^l?qqRWOslZAp1VGo{Fei*2|p)#UUpb^axU>QDSNe-vosETKgH!hvx+E9i7`L? z5~4yc(0Btq&Retx9~*SUw$vY^IrkOp2Xx8;xN>Wu2NWYOCMG(@Mp4em=dUU~+`m$S z`m-)Rhhy+%?b)OF;Gl!-R3|Fiyyl61L__Ke*LsJV;W=*H(KZ?`!W?K~nPm-*h>iM` zF5=H<@)>13++}LlT*C8?S;$Wt!S@~i=0J7&mOnS2XEtUpqQc#bBgbFGDSqA-C6-JA zpWQ{H3;}!Q_(X4Yg12aLmEge^pebyS0_^(`*M@znCs)zcrm;u4U?}dho}fUoYU-~5JzINIvLO)+knN+b4HVz`7W7R#5uhSFI15;_Ql7P8G453 z++XML#%WCm?ve8W`@?6pPkmB)5l?{gOPR#@@dl%eE|op#Ccoh*hr_4l@nOvu_mkRt zJ~dKFsYz^k1Ws!Qu6jiDu85ENwuHsYlY-~u2iN4|om=Ql;#~)m1n*BpIRJWy4t}W1 zzTaW;XCX=afA~qo)SIBv;8^TX5X2(B^2y zVo$?0F5te8*Li4^x$O_$Hx@ch6gtrZ{Hd7o#@Cd3#OI4lP-q9|P|@XuXG|#HTnL#+ zd`d@jz5sJR22HmN@%^Q#tF>%Fc-xBF1a9a9`E#f#CsFt*O_y2~O(qk3aS2JxoZ`Am zWjMhq@a!|)HTs>7;>lYHY8eeLHUwYg6neN%lH-4{?_W7ff6)H&pn>+6%{Wvuo3>>6 z?4S&=lFupyz>R0XIbGn^nxd!9bQ5qr&(ckP5!&by^3p1tQ=6%mF5ztc$eg>k+6Vr! zvQ00KaVWLMPx1~dl#!V)1^KSz0dN(+TsZ2($Wql^Li?Md+ue9PLksYJuhKz0FPZE@ zH@eE*{-p_V@^=G!&$1p&8XMiFs4O5ZC*wY~M+q5A*13yQvYl^AobLmE%E$iv(g*IP z7DiL~>!7R&i}YNl;9c#3`;y-PzKvujQp3-HBYH>xnBe8LaCYGXzcd_d^~D#11Gpq}{+ z*O-&u+v(Kx4(%!{GlpW~(K|>dKrOfm&J$c%U*0bVd`?j(cyVyF`H;L_YTbnLRtMGJ znhW5LR8k1<#7JE2GjMg+wfp57ZvO)KN%m2FCV)RGqe1G#pLm4ga~@Hv(N~`QzxF(& zt? zhRA){$?bfJ7ciUI=tr5{ex*4AX6{LC(}p~^6~48gpNq#cE9~}lZt5KW0d%&)9PpVe z->FBeTa7N?9B%Zhxgz~c0&^N=@C-=k6nHy||0EN@$tmGQm?DP$mqoXtRX4SXbH(Vt?MM38av3wwny46XmH%i~l8;>5pfl53JN+JSX?4k2|`_x5+KPHVi`2k#&`ejbj(MnM#>4$?=6=qGw@-l!eJFhHbCmmk!A*6z z$wP^04$fg4`KT{^aDQsg)6}7r{W@5m(S`be zZjQ3(cW0%76sBGnsLj!yhp}!K@EwIWhp9vM5SQPBN2-F!AHh5KhPjLm2K}or6~|k6 z2v5U5HauEVBJOEp>hS0M`_?@35E1z;jMH~I0j$Y{Tl5W>X{UP%H&mPa@kopK3EcMr zxUk>AurEdR9)lBam0u5L2v5yf&i2&myssrT4MDRFjZQxjFVH2BP#BQJ2p`qt!VCSK z7<$(wMhji7`SIm!_i43={siG(XCBujTv?xdCzB7pYApF}m&QX2dyY?`C-a)3urp_JTFYi zBb>;6&3ykFe^fSf$r|WYsqB5aI|lNp6}(oA%Bc=LD9ued-v_)jggFC6OkMJPclgDt zZYH%-8cm3|(M_-rb?_)ov~xHS zuNvnLnw74u=}XtibaxqlTLJLRWgkZS_#K*_s!?!xMe|!s3m?Zm^p$J{ZOpyQVLRa? ziepNdi7;b3%wwHHr&c3V%I7urU2NWSue9cj4s}EHqD#*i{rrC)E(jBZKhB3SyZjP- z-;vR3Dx#yc!QWHLW|T*q`KEXQZipq@|KQ|3;MP5$)_lW$pXYqiw*eOOZi9A2Ushj{ zC?5~T{-ZyDC%+Q+^O#9XolqR?-GaS8Mmu$xWxgWz@EgII^<%q9!$-t7<+sy^VwH z4L<~In;f6hOmh+6OkU7vM^h6A(I~&rc(>O~cFRq1m(Em#3ttWA{I4H@2P6)T{+;x( zb;d_rA3k6(eUcaaP#XuXts0#87I0}EIwf|)uNtcQ_^=wuOglOsL;L*Ztczooxq0NK z0JYsb>gKxIhqa8$=ibJ5oBnGS(`SFuzc7*DR4br+^e2yAqfV$RA9YQCvlxx<96aE4or1gRJ%Bb?QVelpref6WTA8-m(=6D2bjm~jcc z#sTtBQR>g`>3yFKKk0F*pOWU4Uu#MdiuCZmGEI@fL)JH>q z{_RxsEJU%jWuKWZ)tEVPS2ly1hJ!E z#D-VQL%fS+PPxTsG-)KSzeQY{tcCE>o#4zjMiKbIs&_VYCqh!9hO%36oW-m~Gt3Sf;dOr;19#Z&O+6-%%$$rj}m`7EQ|Uh<;r}hM}d7 z=v>VwocM#`wJ9-o1m^yIG z1^swYs-rRNeoOyc8Vh%|oxPg#MWgEi|!?^bzrV zhJxuy%-pcby3b6;JFpL)?UIHKe8%6ESNhut_*?hj@IN4NaV#Z+IWNP#T!gL?pIYHn z@IJjI6VZQKvkoP}BXRYL{s*dj=Np??^eFtTR{T1iRg@>uiNh0M1}Nmdlh z5T-xfkKjYRO-Iobn#wHV9e5Oe8Igd-O>VGjHjwDV`o=86NF z>jhGLMpR0|6vfn36JfY*Pq}%Qs698sFISLg{s8Y+madENM7l@xSRU~Eb+J!Po*zmE zzlPf>I=o9UMv44v1dB(@pKyI$}SOg0eA zN_fjM)SuPdI&`|~oYNS3#NYR=dC$yX<+t>&kD*^M1e{QDIP2EL(3-ZX{Ab>RaY|6l zH^B)|kIu)^Cao`Iworf6b2sTt%O%6za&*xAdX##*4;VBnT_(S%a@LvwK7+jp{>q^% zY@fg1a0cH}03Z7mJgG%s9lFy2)!jUypS7khY<{}u94KTm%tAm-tsG~*csH9 z3F6Tty2DTZ2G37(^|TLu>+SS!B;mR9@wKPKLwi%h^CxSOllE}#6QZfKkvevTbg-W! zlPzUdn)c=!Q?1i+KdXV8#&AkLz*+VHBd2nUHMh&7OI$e3>3`vp{{VXY;0Mq*P@D7q z4>i{)^wS&ohCaaEoUsGw-?%B`=;YZ#W;%(Z?in2>Nx)yz;3{*t)Of|#P;+O-`|z2r zpu60pGcbeu{Z%ouD6f@#iWW{^8V`gL%2 z{qRbqMC+cd>*%K|?Qar6_QE#p0EZnwZF#|rieg}e1Ng1dNMYNWzQjp*=1%_YS~nqy zA@$(~{yL`O>u8w;ADG*R;f@}mmZ_>w+y`IUA0y(O_NBQ?bnw8KrG>v5sJYEkbd{of z8`C)O!frWeo^#)0(It?Q%H|WS?QF0}e*8T_a?ndn0H%H5`srhrQ?s%&i#en5n6xkp z79*F;z<%G!eYueBxa(dUIodM4Z3K`D_6T8ya3dT@hrN(0%nwo2e-f}hYvnPRXh=%Vj zfzqL_3#2BvZVue+bG~CW4c}W^UCI!XlG*m?zmw>p-h(E%9~N>Fx^yLYs<`;`Bf%|2 zz!!O6yHRgnWKi`$2Qck7u;NE>$ZB#(CiwLO;HJh@ACX{&4&m153&YjI z_ckN_b#oKGr3kh0dc4QU`Obpva2SP{*)RpS%6yZUYGN#%r13xn*YQ^`qvoEE*Wr^Z zO3r*mC&y}BvAz;=JRph&Fe4}6XL;K0XdT)aKIeH$jR z)?_Ndzi{A*@wen4#y6uboJF2H#C`feuTFlnq zSj}B}&zTxXA4dX^?OKos`U}}LEZHVKSh+n|el`1Z8NE;OV^yGsWfLshFIaW@4T()5 zbTepuFgU(8nr}EJu}r2rISshsr;iW1oeOS=%BPuu`Vt#0r8E5_%X!vbQy$O$P-4_k zxRwwg##p8--ve_%SHWL3B{t`isp!VFeF!x4BQQ%d@UKoKE-j&lYa6Q5QD)sdq_V(Y zjIXVpDI%TVnLAN`wPw%q;vc&yA?alK0cL#!!oIA63bTSWtqyM=5nVAPI)4Rzwh{*; z!!5Um3w}?fJQ(%&2bx7SIQwPPOLysu@Zj-J<}LU>3;ItDI_+AcstmNo+t z{~5^E@xczlv=CTVJoX9jo%!GrEk~cyHTMe~dcsGh6X+KB;UIWy7%W;;p4Ab)ejc%8 z5&U{PzE9?*$xY>%7&Y;#Ow@jIAMT<6`Qtd#>w39{+S5fPj{NP}i%CUO6s4j+NOdo{ zBQkvuotPA|89aLs-hLT)X*Bq52-%3ap;X5k^$F`WMn^HpB_=iI3D-eqyY~1}`r^r2 zO$>dG)}4TOQyAAo872=@$0yjFj@KsC#HD40p$`PjW+Jm%3gOQ+#0U%gNY(JoH1U!(DU zM4+drKRfhQqp(Lg*rV>8rPaiw1>~g`cn>pxb^hQoAOh3dd>V)z5!>9)EcC7{9g{Dp#=37!DH$pU?JzX(>fGmmA?P3OV8;+&}@B z3k@I}J&=W|IxFJRtB==VAl2_dIE=7NV=2cTb(bo33f{}@@)9p*WwU{3-<7Vnl;|5D z(0m_hAvnb+c=~p*N00H_R`i|q68EVh-tJqR`(g4K??h_wQAKKvs`P&4m2lJwK{&A; zoTBWYky-4$!(rc+mAZrXxx5dF*6I1y`};bP*n9^qs1WCVGk7A0?%=j<=DBC^UB1vU zc&FUZUyvQA54$Yo~P#)rQtV_)Ds6nfIrvqy!fy|YSYJT867xEJs9ojlc4|d&@n)poUs5s%xcP*{1-pegnStM%r34F-I~CXMHVq zCO$c?iETl@;{-gNJEWw&PfzI+Scly>2fEX9nNP06eiUQQ#2I{?ecV9$QOm#$<-to+ z1~#lc_icjq;Wn3sw|K~u%DlD%eVIe?9*(7_ZUOjVH-4vmc&4YwWi1VF`47`4p5SG? zqRr7g5;1Ez4bL0n(8qmMSYR|C?T2G(Jl(_l;6FpjXX1PgaAHk6jGtNbPOk#r&ZCE| z16`CUxgAgRE9kWoeJMZa@ms-rE~dx(8#+~QKazf{?YLXeZMgM@85>g#{x00sJ~hO5Tf|mDPpisof~=f-Ll(KgXS)FAe2ixNlotzo=yss9YR9028S{8o63J-sR;i<>Z@kO2V}@*N>c1Iuh|lS!S1% zkesY#efGa9JrRlQE_|%l@XGChV;n@Z$%7X#B-60o(l2{bYtWCH&6T1rA{+hAx$upa z1&cP}cJ^Tc!y3-L!5>;3Tr*tSf}4igEz+Gi8A6V!2LEzGSe#nm#yL1A&TBg+Z^gxLJcns6hJNXS^m|t1UgpPh{=}?hioztm zVWSH5LSz{D2gKhCXq>0;#4geFZjhE{?>BR&^1+E+BbE%sO<4m^V^R~4{U#f@t~9;A zh3PTDlWt2=C)R);DoQVKR5Hi|W{w;srd`3S{gCxMh919w{><^jQ|6EO4PdA9aF_Sk z_qWut5yhLsB2LsO_Wn2Z zM+@%#OZqmZxmmn#8@=zUX$|h@1N6kM%t}fj9l&_Am@{!huM?jVq4^Z!bC+VjV%k%z z^Ltd(=hSouana6T@B8CPs3UXG`--?d^bYr>kG48>V-c#^e|chRx@FVqSh{scYp z(ZC_anKMJ*4R^kYJwhFNS{}fwTWLh^I-YaX?8n66`fj+!MeoZ_kNXDq5BWF|+%5GM zJ!ea(Jv;D@hI?7Z(l=~-5t~M`U+buAF7eG8cTka!qW6x2SFZ}UnoCZ&6x7|n=vUaS zqrjr!(5SX@zFO)C)aya`SO?=ZS_QxQj6T#D#E*;;8?NQ8sfoX%i$q4Vs7(*_X8Ox> zqeNVVTWrfuOeUJWMw1V^A-rQR;=owYH+`ibr!4r)j}pl<;fd;H;(_JkF>@vX9*2Ly zQcbv4=hN%l%A?34gFtH(fe<6k5=NHn2fGI0p4W>+QL+v3lo_Iyao@` zbNKIstRb^G(Bm%mC?2!y#L<47O>qtA_sgSMS=WP1-fPP< z({YBwa+VD-`6|j@OZbMPwy)eG-tXjDZHOZmVOc+MLM;dgO$hKwvs-zIQZfZJ9_HD%@3J1mC;{D zuTl0tDyS(V{`Go%A5AZ2IP~DIx0VL*fi1xfsmSwFU>L6vN223@t46=;7D-FK<75GzqtoDqGjfugc?$k&2KYW2y%vSht?F}@ zC*lge!_18=u-*%qWl$cTsjN#!{%pY53YeC>YjR{5tqs{FJgsId zO2-Cp{WkjBCsT)2XLdq-V$%z1nl)Mlb#5sqFE$x>C3&(0n!cefctf0zj>bO_Y+^x* z!?Xk1_)w5rZ&>s0^iFqY@?$+Fccq~Y`^C(r7sRWV%pQ1*j(1Z}>0v61ohT6}U{;=i zx#_H<4vWpXtb%`ey^jqek`(M82fuGX+Hq!{;oK^U-ZdGG`vmpED^r-6Kt<74a!~Ij z!;KP}b$YIc^tNU};hM*tOinC%@47Jsvps&ce%zz^`p^H7=pk~*Jv~o7Uy5gK1bclm z&8WNj!;MWN&(DH;7>tv%1o!?AXyZ7_(E`@63%p1XFnA{VGIKKtvo5n;=5Y4!!4$-# zUTuMXbQC-i#-z2$OfwtPw6Q_@HmQT*Z06rbD1gDgx`@HjV=Ig*hBVci5Dt0Rpnp( zAeGYpMbA%JFm7M^SD45MSMr%2!pfiqI+~;;yMKg=AUT>x2QwS|(U3JrL5=hU9DR)M z{aFChGyv}OuU6QUdY~_??;M;QTX^0T^j=Sn&xX&u6>Q5eDGIVbg`QP`&wmI`DLs2K zir9Yw4DpqHe-B4I3mxuiTnB%jNn&dD&kbnJ?Kk#=2 zsm?=z+|!_%ROjBbr!TENc%&(_|7tNS1oxFmkE$fhr8%STcxF!gU_<->_NBQ_0@n|7 zJ@h0wDwn?vcKGY+$_2)%PSw(%x^+H0!#oKM22D=Aoy^viFT|8CCaD}}>PZYb96F(p zpY{WZNkf@}N-q|7X`frmJh(I5hd-=%CfSCAw;DL(8#~*X*mR7%_Jh2x)0t6Et+;KINgWXat}A6~5_C z{7Js?fIbhtD+`yvJnGMP_;%CSnAG!e@NdWG^T)uK@`t{n7u?W?-0vII2K$*avk;6o zm6~Z5Jw_|ZeMfQkz}3TeWu_8%L)9{o*cJ^u)))*m8t!2@+_PC|K4ymO2isqvUzMCpy}M775lza&1N22tm;`1TP5sqLa`CLF^s3D_ zk>m}GLpE87*QOhBy(MR+J+rDhqAm1dUfC?B=bwgM4UfuQiM-U67~T!XK@Um9oPdt> z`phRj&!F$TKMs@z<`8|#n^De}us*}US)J*q8l=ytwMP0=T8UU+6>e|}T;3~sD|0bt zXNYzK;dFp;YC}%$3QO6ZNn=&ul{3Q+My1EM#ujNcI0wBE#w`oz$p^u1;VXFP13^%>`VD!lDD^87Khn|Syq$AbM*knjG+e7a`-Kj-rm9-+c;LLJB- zz0p<*!4+)cu72Y*7lg@}4Eynbnkcug!i=SAI^1<8?k#5DA2HV`1A1FK{7OUMQpUqi zF5qr11V4-d*Egr8Eeak>iFzJ}JN61r>JU3VooqZrmvWclb3gZkYZr2s&Qa55;B3vO z){72zwv7I`VpIaRxlg62vuA?G_M?9s0qbl-1LzCi5|T4IKt8ZfJ9UMQ!w1QCyy6oY z;foTJ%5#QV=^W~r=hWj_P-`YKdqFuVt-(zPL5C4dKlZ2{UW7(ylohxG|ANmF$anb< zeQ+aLXAH=3Flu2x>cU=VvctgjGpM__fOB3lT{RIZe?BzA8g%Xt1eGk~j;=?WT0o5d z8%r8cGo}Ia{MK>AyO3rQc%TiHdR?+;O>GK?d4qkLK|Qyacz4$sw6+3xHtI1GshMPx zR$!ghGK=?%Z7WdIGCLWLU^@3RyH#ql$Ke0Hc+ywn1Y1t-T)|py)^yyVXw>tS;9qvR zH(-xP(@`v!LE0=)HJtqVTB z48J(S&11IOZ0^)r{7qNEQs8uAazZ*r&VbBnp_U#3i~j&Oh5Y|#War3sYqKV1&6T#vM$#Kt#A8+~G3Ajsb;qq_MchVN@6oL0# z!yD(Me`qEBQ*Wr7;#tdNa#}>WOa0(u?tw{iu~L)3CAa)>^uELJt2>wjwF16rwq7EK zlRUq;yd6xZKUSO1g1PpEmDJSvHPeeWlah8zN+jdCm%9xIQPw{M@o}lQgbW5 z!XGkE1#Eu}zP|;yIX;|CNdB3EbK0KwJ5OI~Au#Sq5Ke9W#y$GFN;2c$G^S^Z%G`uzBzDyOgG^k4P>7du%4Hhr5T3&QIf$zCl5ujH<&R+#}8+{4&Jnt^q&0f#;(k1S?foEMgR6x9HtNAA^hzR;#5>z z1DWBY^21AIBZp-K$N%-k<_bHe#7yEAiFxf48NQQC2AFQR(j7g z40i|a>goUYy*60M=l@CJ01e#T>~$kCJ$}l&Ud30`wYKY1^jn} zs9Xlt>z1gRgjhEIWmmN&gC`a!Rlbq?xt-w6R-1M{OX5xDd^q=AIz{iP$(d0EcUNLgWb~+5Q zqrz_CCow+gzqRKY^rd^mr1$1C-e`7`UckTehGI$!9RRCxo4qdV@&0p0H#2AFqI=Gs zg~v0Rjp^3~K^pm`7AVhgqehu>JSQ*wSZX-IXp#|M$_a8)3NZOV&hay_ZBZ(b#bBCv z)LzHogm*Y*1G?YTWzoSD>FA)$fEOr<9OI`7d2=^d@f&wB6nvAA>(BG=DpNBpr|%1& zIoabP_vi%Yb1Q4PnB30%7&i(oV-j4(Ds-x|Apa+H;{QgcOo9eq5m!S;*0C4+)fIlV z31_z4|GD+<+zTeh;IG>VavBdu+a2#sdoV;#a@%A*==V@Zeg{wHB7ZcXtE&YSZAaM$ z2lAbK$M@KPBdYP<*{L1FQ$zfnIJjGTk{KfN$=30_Jg{_!{Vd|%F7EzyYTQro1aV~n zvkyO_3Dt)gd&;hMBtCtSyyVc>?9n&$|10>BcHu|d3U{=b312Hv6IXLu4)V;~IvYF_ zi@uM0=xT52iAaYQJlr>i)33pA&w~CM1%4rj-{B4V=Y6!#+vxO9@S6Xfmk^G47axb@ z-wAYyaq4BpXP+M}F}Ezo>oJVHu?=rRQr>wf_%Q?7@EEta166ZWG@wb$(s~G2@*SSx z9p9R94s6>K-suzgycS*77s(5CH3T{0865pd>e&tSJWVA|jUXRSVNTeV|L@~T`0&DD z%a-m8qPNFrpGm1KvXkv&2}W>#c9 z&;NaY|F2$8--!FU@9R3}b3W&D&be+DkPHv0370yA`{BBQRx&Bn+@8e?H^ISk^N$mZ8lkXRGLVg|frP1QX9=I1@&tx@y*W;aUycvJm4s}+@*JjYBySbiO zK-hGPevv=cX0^4Y@M)p?*jLeComdc@yg7+oosA?jLtH#W6IQ2gXdb_LD66w^MnpbV zovR?b$}A!!)*JOaI$aO^74z3g?RhSJBnkDTEmHrBW4)Wn7j{NBszvV6!F1BunHT8w zCw-2{!;Z`6Z+QNvdLACgY_6JK{wG?99{#1?)kEQ64j_od&KJ;Q-`vmLV)h$y`nl1> zdNUqdzjNwcJ7MW}e0`deYQHp}=42^IGXr<>j#2*Cfp$GtFWY9di!ExO%i-NPT(>b> z%HWNW|D$^JlPi^^Hf7Yul~TTx0mmtBJ)6Lk>GwSph zOpx1eqG9b*6PpkYX0j*J4(sdrErpG}hd;Ei-^1bPifD*0y++Hg&5xEv`sm>Of;P4| z^p0%(B-Z?aJbNkK?hM?2!QSJ>I<1EF1AaRhF0_rl@4WON+P#V6PPgwtJ>|MSkDK)7 z4CZw@xX)vFQzIvg{Tr>LPX0bk^*zsDiGP-Mj!|AQKCPT7toHer?tvZAjF{^byeTAO z?-jxKUGuD%d`C`G5Z9lIk0j%7bIlNYms;qENKz~OtyEhhD6D{z#5ehzj0BwQy`q?p=aDHZlA^v1zw` zU#dRa*_!4JRaVEFrz1S9leaHxdTf7s>#=-QUjL_ll)EpxiA|fLUqn(n*Q=F`<;OT<1$p;(IA|6gyi6szs!I9=)>KRX%~ZDez3XlYx6#v@->;vTr~5^& zG?<6HkA17qQpXm0<3ee5q@}nVc)9b*&=r?kmUJA&z9DYY(rp)wfB z3e%FY!l}aLt?Q8RV)toQ9zJ~?o)#?^F6_*qKXiqzr39>|H15_R_b5``{U(hJ^SLgL zG*=(_MOWV=b9}Gr9>^uiWePtxN76BTIHngqN30U!@+AewDKPI{9Zq4)?Yh3w8YnS9}>I?zn|dTnP>hs>s~ zp}V!E%;dpv60pw~-jEavU&=%Wu0bCh@4wHh0TtB`@VP$kZ~6O<&`}jrU8OkUL0a`j z+-bbCxa-m&QqxCInroR1=WB|`Z`k+j?ECd-jYw(!(@3p<5Ug4+pL?kaQXXUd48NNv z|KDjfPwRsY-Zin-T){|oP=$sYb)MOF9p-~&YGpBl3{DbCDX&Yf!?Fba*jgO@N-X({ z##%g-#@TPxqibbpztILyhl;YO0aWiFFt5Kx57*Z^hF4jL{sjOGO z{4MdQsS`U+Ku}&J-^{@0E7C~%dyj+K2Q9pHq_?i%b!MlJ$>%RPXX;P)_JL=S?VmWtCcB45gu6erHg4JB{`H?`0#oSCD`HEbmUHPpMs~jXiowxtwb% zrAYXu`}>1$Zih?bLeJpx1NHUg_+m!WRK3lh+;Fl%cS?AKc0W9lm!CIv-5Kup48Bvq z#6oaB%o+;+4tnDb5qXCzJAariSdCWF1&&Ul;SSI{nn|bi3>-8aY}$<5HlPh&Qcvj< zStvGb#U1{Dsp)kJHP$IMB4jFwdN&4&40jIq05guQ=s88@i(%_|P+#{FdgE|4$JV^L z31;7k);gLmE_X)C0eSLW{RHVlk6t>9n5Qj^4D&?&Wa;f7eG_(CM;B9Ne55FRPEX5z z=Df>GW^Q&xe-OPgxr0RzuPFAo17B`T!_0=~y$Scto2c9Wqhl&H?ecB8Ky4WMiSF;7 za-~6ZhXJAgsiPjjL%$ZEgL6B-#+S2Vnd?+Ts?jr!(=u9!OBv_`S>#?H(!-a+(U*}% zp_WelKdu+5rV7G(Rs9gXv5+;btG?7vEu;^P=uKF^8fPq}r}Dgf;d33P$*sXcx?p3u zNL@MJU@`tTdT=&97Q=O+J)_~8#F2wcVCR%2Yq~`af5Ee#md}kaZ}MF1>@K@_%8LfE zsN1g9Tuv7ke|YfnAF=)o=X`vk);c{@L6_)3Uh*;DxoWbnqG#^Uhi1#0R^lg%%o$Y; zFE!6IS~pGyN=_T7+!GHQLlc{a-+nLFZ`D(AQC^ZRR0FHuLC1PmoZE}t6^HSI^>fX0 z-9>V+h2ng0W^yjRG?&(t-c0a1w)Bx6;1~K#=fe1=@S};foJw!I#g-~iji<|0?_o_1 zXxBfu?hV(EqxO;3S{6|UFNg0YLTg!ccXb0vS`?>F_z zU<#^BjAL>`NEB|?KEJ)Ai-S(KgX%$?yfu)g&0?qX02XYQ9(s}0UwI-zd8)C}=Z zJrONsEsgcnc8%s@_Ye2W|L0I6;s7( ztUg^pKgCNL`)_p2d175~F6k$*w}m=o`)D(Gd`(Zvuk@CGaM3z?zV<~bdWv@Ty|;bu z=UqLY!{ZTjT5sFbkGIr5%?!s=S31OxW{dG{=^mBYU}1WAK6za+I8w{KcB751&?6cS z6{atK=i9TgqJ?%QbvQ$~g&y#sV$%c|HH{riV5hZdmuKyJ16>I>M2{IV>@wz~4@Xj{ ztG!3h8UvfH5q%&LMXoN4*99C(Et?x@*N;*kV)LUn zH>&S7Tu6*hNDGfpC|{M=l!5qN;OGzLQG>an3iNhbmHCjD`Z8O%i!&y5n#ewN*6T8D zi{s|w>v!~|eJ4lkL}xB#H&Z#iCn3(5n=bl39O(^1zfz-et{q>WAE_LAF2=XgL2y_v zZ9Qt*@z7~H-F~+D4ehcs8^|VCcE)4a*=)S7tM2uyrusgowwbyTL+X3(F?#uS@~4EM zMKCF>gSVMk;PvJaoIb^a4v3k{+~+8Ltqu8VN_)Oj@91ZGstT#vu-#n~zx%`q-SzTGjrv&WIo5y4OPc#g93rDVpM>N!+i#D7w%a`sIJ1 zMhAVr2R(Zy=<9@hJv703UWNIY^~-(~nirX3B6F1}vsNvCvCQUkr)D<|y~2me(HC3O zMFzX(0J%p2eZwn4wI~!-qWfj6-QaR^dGJbp)Q$$+LJmGF;ykTLN2st^-uVk|yIWoD zS4?b!*fE#h)>ECP4FCKuy4ZE=;LCgQ+IMw<{^kU{R?z+~U8o=ZG9PTp5L5Rp5Srm! zpnJ|^dCvspD%x1V&{x#4;ra#$Jk zP!Fe_wq{55VMzsgb2b{m6WYe%X!-CeENHsOFo5dQGdhkkRvw!ozG`acqc zRz)hYxIuPu7H&I}b~{Q$`i$kbfb&)8MA_xWf2nDT@>l$%;dSU-tWYZFL0b*_}vF$eBn?T^|PipSP#!U zfX&y%!)}GDM%()QtCH$OYdgOVBRg(}@By1j;{2h)^y*eHbeiguvmR)z)mhTdqEbpc zq%3Wu4tr`wziMOVqEd|3G{vcl!3nP2T(dteJ^_j@hD|@lX!W(>$S8W?u}FK!ForHV zTE)As_}Sid8_F6gxNcT;syjHt59(lpoHSC;Ik$!EQ_kq4XbE0aACmME>*vb5cB^$i z=S#sf>Q@->C5$~x1&d1!dJgrk;>p6o3m{?yVrbj&u1de6@BFQBcJKC zdl9J&k4LMc{!Vksqy90*Th>mgB_|HQZ7%j}3RWRqOdDeMX_#xi>za4Xy-s)PLIv}c zuVBvqqK06xlJ^N0$WX*qf1w3VP! z8+rB&8r}glhD7wny55EJW#}XCY})E9i87w-PdhtFFL@T+b|kI(5N$DbtRwpQr_mli z=1*lshrGHu^Wu1A)F>PA$-ZXW=a~gKM$5>g|GYbHzuAcfH!$HRu<4e3@Hnk$jd$P- zl6w?(&haT{Bn@@$R0XdRvO9c{=X_$2)^v{i~{V zk0yFT^jv2xCy4KjX-*m0{SoK8jOCw=JxK{H_)VOoFr}@g)$AcI&Bc*-S_5Zo^3N;g zpVML1wXEYLr^Ec?*&EA2SF8X2O)W_w@|U%q?O8?_{`s~!<>TJD@EPRI41Kn!g_Md; z(Koam*Lm)I_j2Z#2GN^VsR94SuJ*`QR>|vT%00(n55XI01HJJj{c4N3Dv$jhW=+?(5@B~IKpfiwOi5BbOSE_-&pSn%mIT{Us6 z`0DfP&6af)n@W32SQ@!!5pP3bPpLC)P1and%ns)5d12mR7&-!1Zchsvi{qRVlPbH` zA}3Bf)p^;1AMI16O^P$+=kJB|brrBj`At2UA@yF2%=q0a(T9P~f;X5TgQMS5Nbb?C ziif_CbN))NeGqvlpGy+1VGe$QF0PdJXn@$X3!=VI<16Uwgf@J01b=Vsw2@e0Z#2Ul z-hri;quv2XXTKo6_cISw2Y$92Sj+&7&;u_Bt* znS$wKRneFEwkgWDu*{0|fwtH~psDVaZ$F@oq&HVqCA9J7XJ!PxGEe_Q=&{o$=HvBk zaFN$={Tk5=!5qL>E*wjd8VN-t8)1Hs_4#A~n9ru_gyR3gI?97#- z&TiDVg**MsHmk|GozTM87qX!-=2e>8BWFOX3G~s6^9CH9kFlqsdM%+5d?406hotjh zQ)_IuvA&T3&~U36kuc8q4lkMJWU6?s*^4T=8_SP`as~Q>`K>SPdn5kz7GzA1JE=;u z`{bDR8aYT&`u%=-bzBFyloAAZ|UM3D5efgF%2|iW_n1YXf zkBe;xoix|g7rRZSj?|w{`vcu-J6zs^H!TRyb-hva8AXYz{HUvOrJ5N*=es9`#YvEFY>!84Xr8 z96sxen6sKHl`L&T>ypC8dm_jOu88-NB7RdDPu0ElyI(B?rkUr->)tU*_jK&04Jz zxfWon^YnM=JCiYVj$Sc8_0q&>YCJ3-{HSJPx+8u!R7GQ$Xa5uum8A})w?{8Uy<7I@ zxZ3%e=zI7`6>%x0&r1E{?^32z@-Xnn*kcOnurqgQ4FQIJC$G8dx@A=8hC=X*=EQWI zigo`$)eFvN-G?hWlZNG{ zggddV+rLgGyQfC`7k+dZ3n*IYZcy?SV$ zZp!*E(wR@WyE7_~=SAaFBFRB-6a3W--5zF?LhAch$r`&Z66ZJje|3i`{UqW%E6ZKrID_i(|yiz%`{lnGQMP*2Iou@ zeCK;xaPF|BuKX696OCtIAbNRdqNle_$~~5_&4H0?aOA1p zo-`Dxl4jZJ;GvE6?o`)3P+VLth>zuE=gDy$rw`ks^lCMKtD{c9*5A~FcbRp5hts!J zy$IgJcNLCawgw@dSU~pEOthIqQP`)lmsTupp{_gLx-R0Y>*d-1^Mrqy%sVa?&lcnB zQu)(_zIEM)I7CH!dz7Am4c7I%>psS)AHn6{V98M5{-!gJjzj$EY^F8tQ92r&<5e}B zNdBRAh+P#`uR5jox}WZyOlq3n+tK_ydPii3J=!kTt#LwKaPC+ON>_Hww@>m+=3$s=osGPr-q!J7TPd6h}zjxPDi&2Rgf5;0(*EN!$dEBT?gG(MC-4ssdZ zuVd>Y@$k;h!)#|ZuCM!@rE2nPG$Gp@)$S?5h7#bt^+b&nOs>pIh}M*11(1O4c%)xtmNJ3Rz(F5A&ZGVVC~^fP+S zlHM~=S$=ZD_e%rakSZ4bC(Uum6pHn@T@#M^*ekMDI2b|FV53 z#b>(ujOXhM;OJa<+JdfggT;Ro`Y?1h+TY(94TC4T&RAzdbvLv4p?3toD<;1#O9|0( z4%^FlP+$PA-3`YX%7^B%`S0j0tMHtie*Ze}j%&6jt1i4EP8}^qPcG@4=#us)hq_l1 zIcF^2^FkJ-SCMBrt(f<3H}|<;Kg$&}W{+^Pe_`D{vEx2%Ai^V)>XJKGgHB&_Son~4F6hakJ{-vxT#N*oj-y(XGX zb?31Am}%b|z{>b6cE9y>o&{gs2&cZ6p^w9?8w8e#X_(E$T~A@WiD(zW2~Z!%yIRAg z5A0do@DA0dWTAWz{Gh+rk>>l%X=ii1C!hm->Sm69E`8{@o~d-M*IP#Ul!Z89mqz_6 zp8P6}F*6P4Eq?T|o|HxW^On5kZAj8pO=1oV-o%#niN{;zA#R!^F zxcpGM%fB+Sn)nz`d>Lc`{@4zuUCefW#|Yxs^-^%IEB~Ajy5e(KhP%RE4^nYz zt={Vm)>v>cI2v}Zm-zi|@pu-yY3BbFr70HlDeF_$x3{5m4PzVYVAFrTyDTo+J@kXw zy)~50Wo%1t7#vB2lb*)^7w9->7pfG>O+P&<@^#Z|mjRc%MPoh-m(HlA-w^wgIxVA) zxV>5iloTsysbhE%Ru#ANx1zVqT6|_D{uA3~ zMbg4!@9BW2-{EA};qqI)&s($I!5x@(7B@WQ-7p8`@Eg4o`)hIeYu~Y!E_7JN@<7x` zY-RJ{;kCu}_IOSgXY>Z|F8P#Z?>$V>s(KwVLEO96a<@HM?LNPkV=s?B3(d!szHt4o z@DVeK@US|pPw2Ui<8N~)xecLp2G@>{b*0t`QQW7g^&JiyR=MUa9aeAh60Dd0wHSw( zLXjA$N;E~CZiUm|j_X=_ZpYKgfeY)0s|gL7i)qc|a&_>!n)=f!!IHOGOS%9t*vK&& z&1T;Gt8Co+h}?I4`C$RiU06(dVQsv*jpbz*u?u>(il!iI+NUb&XyqxpRjoxGzFAeR zuCOK4VKGth4uE!>t^yb}<@}gL)r|=f5C+t`(1d zq_rIvN5i=7yY6?AHN6AJ8rg@9u+%Bea`-tgbQo?jh(<6CkJ9nP;7mloA_a) z=m2{^#JfyBV^iJnvCeu&KBOAvu}^wSp-CM+vshK^jQP2z(Bf6G{Y|_nFME1IHJpvB z1n-$SPY1vNaF6Bodzv`XR<2N%U8TgCy;BcYX{GYIUw3Qi&T~>2CK%H2F0e!(%#^ayg z=)d@%_YJchdB{g%NyBgm-lf*1m(P8^We4-vb7z+MER`n(@2mMF5;FH68-IF*+9QX- zRd34C+nPc=30bm=@ipX1P3?CZw%-JY$bjRo;}2!&66a|cBXy*`DSJ2?`2@!IfcZnj zk}=}(C|xF#1p&b>fE^R(qW>+`_dh+N)yrr@FW_l<)3?N{OLg4SqBRPuOI? z5A*ZG`0da5i8C^3Sw*4zI5U#>=&-G1Is18r^RfB&>$pu(_xORmA18jCQ?DunX+IZ9 zH?p?FV%=$R>5zA!t-?o!^U?b16&Yy{msIZ;M30C`@5vz6d!mr*yk*bpv8RrD+B(=L zI-}Zk2RZ)~Nb(hK@CC(roU;YH%R8%hPjFfqvz*wzAD|ECm-&68T98j%T1%_R1mhZq z|8V~4ZSm=zTF6t{brRL=ywKfjG% zHN%Pa^QDw@mXh|TI^V1Xmn!IwO~gjO4qc!l#PTPyvfy_-V>3A1$NmhbHx0+@d(nhj zc-nICItlOI&)dd3kD;xVY6X{C@yixCS#uh0_n3;#B|67&Z2fJK=9y@)iK^8`HvTGv zxT^kfl{OLLzU?y&&`Ky(mOVgR#1_C^s4;tKdd*A4vh*hbfnzKJ6_rREaxc9 zS7&RdZXG8ayrcV9$g~36naHCKbiy zO3_C?(Kj_neEux_5pBGuO4cZ~jbS)@C%)7WZkp?H&4zra7QLkx{;)|8eiGC89Yybp z6t6b&i*t50@b?zsU-8E6-tV|mFTrtfs+`w3%mI!Y`L@a|cC@8|hV@NUlF^vufaw5E8M$vW(W$W2*(9Q{D6)i)bNH{*0G z#LIE`PBV7@hHE}jAKEIf8^lH{i6l9(iMM%3V_4Up-uM-}-;3kMRN9nTC;%hb)Wb8wb>+ zFUn~y&>c>zrC-MLUs#Lua=t>LGBEEbEublEx<~rq1`M!A z6-?Yd6p@_wLB+kM4)?AzyxNAd;I~;|NIsaa9v%Kh-_TP}THSMx6~{KS&kHc`4(vQH z_u4?a8ZM^P;)TgY#Z9i+(x16FuB662!zjJw3TG@2_XfbsZ*-O%;-eutaVfne zJn_=(8ziVUJL`k>KNg|tVNr8MvJ>to z6+TuyeAWIZ&{t8AwpUx1MGO7$9r))UPoe`j(qB&3LN9+Moct|$a~68W6P?b#&}L@Z z&5>+-B3zy&r=1i%pjP!l{{2KAwvtAemu@r{zfWeWaik}DCO;e)nJ-ruWp8p}H(h(v)jARRsiWCmN z8Oi8;`>WpH{xyx{LpfPo9B%~-sS6R}s-0bqln6hH^tJbs!?pBB4v;f$5|fjw4SYsF z*iDIkWY=O-4*s)~=V=VfVtSi?5{s{y;dw(Hr-S=js~0Ga$k&3x`@N3LbMX0J{uG8E z$@peU7!{lqGR4_DZ^O^)qUmCKRTHc)G1NVP*DjB|&`Wc|T-iFh<_xC+4B$(hqG#2% z%F74mo144J60_kBAJW_UsxNj?3oRx;`P2N_7oU@L+zV-~!CNunt3i~K*|rrCCqePm&Nlhc zS^i7BPi~@mYA<QX84th#;a1!R*#B*0-Kh>;d9q0Mi=kKl6Qm4YyOYXf4&3F`6 zvVk|8;D<7b$dgcSHQCPkW@bb_7VEO(k|*{34dY91VS&#hTkL2!oJt>KIrZa?Vv<^q z+~I}#!%`fqy7heFT3fAnU*49_&fbcQkRunuL;up7w@hCRJCBxAfy#&v$z`$gk#PA( zeC9kKkAvIg)!$l7pJS5nS0d84G4|*PziTTt#ij+U z#KA}Cb(jJ_ceAVH*nCS&Y+H1_7(WOTY9Z%n33WQc%^ucrsOx`&OI@}zZ?d3vG@mc! zb3bCizhPO2t>+r|IzT^4CEau>;lM@xZ%aI}K0ABf3L9D_OFauE@6mPQ>b-m|#_r3g z+4nQqvDogfRNYtz#mDO=Y73Y0>&5v;ztax0Y74C82>a9lg4Tvo<>?=dRE1{JF^{{q zr+9M`^Tb){&E-rCd@RoQ(VN^2+iAc%%Cq@=G^QlD=zX()m(>{mQoFd$Gq0JOxP&vG zjdq|DTv8P%0)yJh=ZEq2sp8R4@wkLu>0i{{%6XsM5#HR3ik%im+D5w=97(MvkjZ>z zUR*Rk>&Zj~e#u5p*z?Uid82Cm7X0A{*O`Uujc2d3_}31q%_FLi*%+GBK=)ce480T? z16bgb;Otydu2AG&Ln$)o%7`4%Eoce(r=+S(c#;d*s2=ef|@ zYpV$*2v;=M^l3P3c5rVEUJ{>;c4b$$ zOH}r@U zi>U!;l1)$Gnciq4XWuV|{2t>+V{!bIc=&qS?HK*MdF}st5viP7)=?hSTz(VuLp!Th zpJY{fYX$YH;DqPo>H*H{#T#$qPd#N%7qE#Ow960STpxQijGoof8YG7K3q<5XxYJ&0 zLQ7HhfjBoZG7=wYh>PaZOAs{^aS|$hhldXl=evlqpUbybz`0}2^7_lUmygA{WO}*Z zQg3OjXQN|GPyXNXg^{v{%<_V*{OI$@5xuQJ55QJu3T%_tY=%tht?GIfauh1+gvFN& z>9McsyqMbhG|Kq(GaPKPPj>(8QiE&nlbEjZlm5eiFAm4;m)rZ>k(4ki1!fnIYW|4b z|EKFCLFhj^NJe{KEPO^Sb%#3LZ&=M0y5N1Qc-QLxi@PS4FM1CzZD<=!D0p|*K6dq3 zy{ZUQ8cK6IqZ_Ck4R--AxEz{Fw;N(zyW)C1Xc=FKrAM&j#4@ll;-_dikJQMo>pt@On>mZ~M~7x!o(*5e{O-!4Dw zqfaTD2y#K+<_h=Pi{}M7ar|g(%C8oJ$ma+HnE%^we!hgj{68zr?Y)Z;^#q_x6zp@i{Fv9waeqVBZ_E z#~Ny$g>f72lQ3Jfn?<_csehUr}d!Zc^kwNc_xwK8!BZxpM-4O2dBYv!9W0ZJldf zq#lI$eWGwubHs0$xGE;n6`&F2$F>N1lMAPw@N#Y-&zMTgbYN`+Y>yZ>0<$6M;Yr|}f3G7qjm7j3AQpcOr%3Eog0Cv*OjYai94lg<5( zVgF&4JVdSZ4n|xyOxyAqOVbz!Q`?G3N#V&f*Ggptz8{Zmp_6te=Fh*r_K!Go0Dml3u83fn))$HI1d%DCpr-^4_!h@3T9 z{CgrpO*pEbg`b{<`K$T;YR`Yr^WU?s*`r5wDSo9teVEGDaPe+}`x-0vayCGCG^}65 z{*S_z2#n2&F~1WEQA&c-NYe7=RT1YKMq1MGD&l3?aJ(n%evjJ4Y@Rv@>h$M}&MT0| zZWQM)h8H^<@CZ%Z1dQ`B*WpjO0|v$7GRdrFMRt34(Q@Zf_wx?w8fuIg)m;8?MoBP( z6-;~=p!O7^tyQ91);C|#&N<4H=<5eyb9#MM&Bc$gR_ALr|D(F`4*RlNpV%<<I#d`j%YiS7${VN>+%k1?kII=wYxfnl( z);38@sxD_b4@+8`Li-DNY4`JkF=(C64#JUy$^rw;EwB6if(Yj`@cSP#W$a{)n3IWOCfg_mD8tGQ7x z%tX<(H$F04zWoiH+o9%pQXlIbb+wdqtcrRbyU6ATL;rq!vm3>ytDcch;b%>A207I% zU+QcALmhlKybt11pg8vNB%j0guk?BSV}u=9Un@=2WW0l$4so}3SY6bStfXBsUB zDFsLV7L(V=x0l+Z{qn@vSY0Jidy@EZMIFe@vnM*BxBjF_o)d87H(byAOXVba*!(#* z-&?Mz0|$R-MU5XOu1|x_YLocw09?mxF?@<;|90ZyV}j~06{&&jqK-VFj%zi*!8_{_ zUnsA2&bWTh;5^x&GvpjQZ9|E<9a#tGXL$Bcf6zBRul24&_XMb{%eE3H;>Wp-LREdsLjxL(kxeYbwwR>qyafn>MEk!*Cv>U^jL zpRWAm1mrTJs+QB2|GU-j3ELU6``HGg+AAf2@ z8+#AGsq1Na>FEDj4A~2luBt1>^~SpbdeWMjxzj!3-CExKE9>b*6KgGI)P*7HU9h8% zJzv0%{-C=Qv`-`O@T+>B>(UuF;}7vXb3y!}nm(rn;oSDUuHKi=VBSDIG(B;g4zRf; ze(RJKHGo~>@TSNyI?hk#FTSRQkAWiHaFVvxbAa{q1~WV-omyqd@OeJ^!XD*T2dZO_ z+Q`7X8574}VDEz-jB9XdHon{&&IkFze07Tx_9~McWGLm~DNF4LKM(NJ)NHd3t#yFf z>`1wCYuKFDT*F$3SJ9PExn4&&8lev?v9mLJbn!xPRXZ_xi@IMIak(Z8{Rq#Sf|s1aqYAS61#nMS zXLPdlyah}0z@>V8v%Pz5Lu)P;&PXSC3*r^UdW&Hgm7#4dDqThOzt{B*Cd6_6H5+yl z*9|6{4v6&Yu*<;fcG&y9Fz;8qWCsrM8%^skxDpqC&OmL=qGpjz49U+%ONq(l;l{i2 z*iXy+?gG=AWJNkb^RTvvl_J;`~Y6@hIQF8q;5pMoxP`KUNQ!T^h0E zNB3FZ=Y{9~1s_?5+wSB053Oq+9e|(7zfV$ID^Q5%v%qVz)=cJ7tHF}y{Io9n%8Z-- z7Rsd>Py)xTxT5GTlw<5<)*9SGLsd(dLitJ>VKc1#O!96Y# zpAV@C#FyKZHZ{_WhxW4qbMU8?Dx2T1{qbT^3(sGWJ{||IoYqURIA*5H34C&!_vKm5 z^)YsXc_aDg5(t6rm_czt^ z&Wo&}x6Ppuj5FCYSY|s4t6nY#JB};=qfYt4-n+xA6ptiCtBoQgIeud>}j^VArU0&MI+i5!x^u#r;F;8f8or*8H4fVAt`Cs zX=GtRw`@szP9?Tqna)^JEGZZhM-S79;)zV18?5);6@X_t|elPF%nNsnEdT%{=65qA=J5S(C_|yu|E6AVH z;qczBWs=fu@>TeC*FMpafZv4Td+}QitzJ(k-apC zRc7s`icP&KcwHzDL&T-vo$kkItoLD4BD2qV%vRQPCS+T47(L`SZ84|%nErcscyYOB zT0I{3oExw|>K$|D@|QWMV4?ouFCpo4d$dTD-EJ+$#jF6hDhlfB=A zQ3=_60UFi^@{pE#^V`JiW-~k|oxI^P4!RG9p23$B*y}3%-033rr-gpSrt+oEF+CoC z;bf2WjXV$i;gg(RUjwi2Wi3bQ2$~SOhhcB<>BaU-*rNo|9C-N?c&DQdA4$vJ-%$(d zEfd)mpuXFTuO8;}`7w%V6oM-N2n0{fEg2>0Fuj?}Myzw;}vsN0NWp|4YQ_T%E+tbArH?!1_>IYwjtg?7D! zAC1NuyQ+e9U{8Hzf3r;RtXKQqqgH#7#u&%-3YZ0M2%B1CjICuht;En)cC#65u8Mo- zg~!S0E>Fx!T+)LtrepVwq3BBgByz2081Xlun{wM1;(c0u{3Xnie`G$ey}6cFaI`K? zR)wNa7=KE^=Wpn9_?3p|Y>CJ$I>}@c`y*9Dg7Y_*%9r=p_ltT-9>AmcW@>ZO#jBW$ zYp$l;8rNye+iS`iDzo77^7^;&G3VD>&ziVMZ8fW2&U5-H;vIu_X@&}0R=(s-uzIGR zTF=DhsWaRAl6=0defr3}WgSSbHfdGoy2pH!x`4}%Wa~ZM6H4- zQ8uqmqr$MsPGx~h{b|=*%}Cs$y`)rQ$cHx-5<64jPG_y-xKLS9S^dtQ2U%-X`e#CV z<==e%4$U(tprf#c+JhQH8%!8KXr!`HWeE^r=hoQC9 ztZLH4%j-SN4@VM<$G6OsAJ;GaGybp;TOMWShg14y%PN8%>;1Hni)sRoamLIsXZPg@ zceL+4-Df9H-$DfYKqgpJev?3b`fPM>WUcd8=6Ur`S(POY>r*r3P-Q#af|1~ zhukr9b~$jxjClQH{SeH*v&U<)MP@}F2>#EvG=gg`^z7O*gUO%18f@C+X?&yd}h=cJigA?)I*A^>!h(>YXs}JY6`d{__UT;9N*3w^sxi zZzkbA`yQ8C@{2X?qrOx`tuIPzxEWaupO-jUVlLmD2ASrF$?Kz;*pd!K_LQ6soZH@% zXYb8nT|f3YfNyqSQ4Otj1$yHfx=s?)$nMIK4#AHtuxTsZK{p}2c_RBfE#4Jmo1fDg zH^b&To;w*%pT)DMhWU5d{05fPR$l)K_Mn?gWj8TS^VGgycJ9t^a=IFJpLzOLw7do~RK6-g#?dcx5Qc1)*Bx}; z!(%oTOv6u<*W45D>$1FM>Yw*qGm}`Xe+;j!CMI{J;|&zydRmRl}tA=i2S#ji=$<+a} zv8CeTdu`ADAud)^o#1Wt+AQ`dF?)LG1cBha1UuN%8YjN|;QHI`{T^8|omTzxl$vE; zN=<*)+D`HRj~1FeT+FjqfO{3$e+{>q`Z9T zvC6@Z&~d09+gf%vHw7@2xRz10EaUSjz3ofc*I|2;OTo@P2;6%?vGTIO(@Gq~vg~MO)&V_?~=oh}f%S_P! zFiYdd>^*Gf-@y^?fVqLZJs^o7S;9S4$e5+ z=QmmAM)|=v;_)Jy==ZSiXR}An__3}Fto3auS{y!lW0}ql{mFRz6PTPJ+)a;vC%>+3 z|K6}`ae2~po!STFL_hGQxwNYpd~>l_w}~Ab#KSMLsTZ!E*`1d0{O{`qZs=Z{y5`5$ zvZZ^i7rM3a*OZL;o(nOt8gwd#~yjt32eRz|AG_gTB+J> zllP|a?Csp+4?cIq;Y{JmIQ=^@d^ABgDVx240|#9s>sjMc9AUnGuG!J+5!eos_gc@t zah(k8sD(ZH32vvf4^2eK`99~YZagtQGvCY%pCjzyfU4?f-yHN){A<0wwF@6n05jQ> zCp3qLVu^Q&`<_4j{vY;9JrdRw;!B;`;$pUc%AUNm9tp!bnQ^dPejU6cvI0B3E3^Jm zoU6cYqOkLnbv$gJF8ajb^A*IV8T{cEyDP^}Cd0jx{4jC2oM*33Z*6BzzoYf|NZ&)y zo0J~XhH&wlG4-jqPNF^sLyx+4ptHwg_hsdaQy}v_F`*LuXS`=Wz`H}@TxNKmnTGeA zzi-u_(b02f5o3P$Y=ivWe0J+TTs|$IJr@(})KT%;PJDESbx7sgo7&ac)^)$NyTz|! z^Y>s~@7VM8Vsaa}oq>g3g5!(X^(Xp8-nOQxeO_aih1_2w>p8-I+cCTUfX@f>zfbh% zJTw0oOCMTNXR~DD@A~%q_XOWt%_p`sU5_)j=G7V1{BB2X%e}6cl{xKA@dt6o-Ks&q zvADA=>be<*n`TRIn%GiT^np9HXLC9MCzoxF_Pq^+MepMMy4 zJZR7M;yHV*=V9x432Xg_^6>~JztlUEKuk{UoPq-I#F@d?(}{$xmV%WA@BU1tE*V!p z-gEuI_vn|m<+Rt-fB%qu;iv8~yLW4lzq9(^osjA7dg;OKfdybD(EV7IIF zk~yUW|92KLh3Kj0+GdY}lYq;z)hs?~{cbLkLlu0w@S`Qr;fhS;4QSHAHI|FJf7*}4 z;duNs4j%DD9K5D4;-c=Mpz42?$Df6H=bW&58IImFQyWh{np(e3X0@*Ss{c?@q%D8|2LuOfVMkGS$VKPzMpZ?V0NYiSE{0J@wWX-D*{Ai3b$F5 zTC;0Rf^3a(?jZljEf&9NjZ49U;M|6(te#?T1uBRl<(+*{1)fy*?3MN4z9rtJk&8Uj z8*o_`61<)2D4TM|n`_>d8}EUkyCc8ZuQT@T2BkF?Wh}Fu)^EhW*ZCR69}2ViO5yx^ z+tZ09kJZRdz-H%9^Uj~ekPeVEJ1yW2ZQu-z`MR22V!K$$y-oDZsvj!Q9cVS5;&>mz zk$3HPes-@`%E#C7vrd>uE*aP*_cv2*|NR&qa#Y+5KIib;Tm0SosoDK97Wcqv7K0a^ zo9}0w{ve#XNNKvQLj6qq zOe|B%3CGI1T2;~RJ$qjj9=#u<+undk7wrE={xAZ=sm|`>Sp5y+WGn1A9d>dzGGBi4 zy)zWH^VhRD$#a>*>*B%(p7>KbNJq8acI=a?j)#}QZ?lBc^L_6~!t5*4VuK#8$rxP` zwVB}T&Ol>62%oM;V1-KhN7NP?rl*}}MZckbe#!0!(r`ZXPNzchr3Co>d3(N|x6NTK z6X4k>I^Y!ic!}$6mCK*CPZ4XHLnW~c7FwN$H1dSaDc*I(kJ7q~GtwTSbhrC-(rfw) zPN<^)tS4j@L|&_Yum#@lX6GkN0XXm2z7$~*HK0seIZALQ!#+MAOWY^~NgCRh-hA{+ zUbEWo{){he5QV4X3~gzUrTKkAc(M;R4d$oi-1)24FdDfSjqCT)$R&!i&ragpI;!wX zY^yq}nj%h~qOGQ2PesFT$j6eysH-%tEjonfQtc=BTVt@MvG#hZ>n+0>kKj2ktwAnz zryAzhdbr=o?&M3JGm*ddF#G*JULTzOn%r3;*Xh|m=~bE`?;XZcMzZ#4^4Dd!=w4dz zE%|3kI$25ewnk?2JE$gp#zyx>G&k0VuT8TIH z$M4>ipGL%qpX^pocwQ8uB&7t!vQLSuNN)f4eH>_nU+=NC*k$h@!lxAB zBJQ~u{*codX9=y$J$G@MxBQBct)X3f>y)RZwDmRC^jCcB7|r=Qjvj~Kzs~b2U}5zr z79TkQ`a}G_7H(fouB;zP?sO2&kCOis*RysSSMFs6GF#I#_{|o6zc=!LPo*0V;VvS7$}~%WB2d7zmoPTr?cNfe*L?7sc-daj`r;XSkMq1DC7C}H?Y(Dp`kzq ziclfZi?o)?$?V*h8M!X_&;$r?10 ztEcuiOmwP*KltfWzZYLc&HIN`FJ6_yeC)Fnr#Z!9pZOU#oP*DL zM;KceX^)D94nenHT#vWN;qOIO;v+k7$1C>hnQOkLgP?@x|Im)NQHM8o>Sr8v`NH83 zXqYASi>IwTiG4(_*eM9hA)iaZ6CUB9)2J3%)hhGZ(Z|q2>l7h(+aY*mz(vp zZ$s^y({`z1dF}E$SaDU%wwkL~mXB4&KP%|VC?fYvEnoOo)%&8l!3mzUhfQt7<*Lj%JGVEG@m*Yum@Yz5U`-z6PQ%-Y%Ux^%Sb1oiwjn@^#Y1-TGIaYJC zYajCSu0Rs-zA?7rx>-f-dSKBSxt+R$-$w5cC_UH2333$j7`JQvU*}=d3tE7K= z%4!$to6s4?cV^K@zLYnN6zc;m>ka;JPc-|<-xvd%&8_qL66VO#QiM`NmfUu&k{-Vv z_*$T$-4}K8t9Z1KeNSakKfB&3)&2{Z-$8h{fEBl(N1LD(>jpxRUjBX$`F3|&>u~n& zT^wRx6<9iyZn)QOrlzd4jHz->a9>0DWfw8D35=>lE6HUIp3-~t0_bDVneO?<+NWS% zV+uc?%l5x_%{^@2d*)&2Y*^*=Nr+TaWc~opsc**ML-*H^)>a$mDZ{=pS%FyoeH$vB zhj#~Y!*#gLZ2VT$!L{F!$+ls)v)u1V-<-~R)$z|rQDi-aeB26Lv15OUe8>Fyd%iZ1 z1($~-31puK;OH3L#&uZyn|3FSt7XK%i?fQRzH>60I*4f{^vv%<&+a;f=VG+mFy@0a z*8Tix1+LuNpDNB${!vbcQkJ^j3eRzl z2$Ub;IfHk<9<$$P@aALoXS;Yhji1-UZ<0ary{hFS*-dR2mCLif>aKJ8-D>uyKbzkI zpJHM3)ve`FD8G_Ab`W>CjOX33W0%Cf?e=Ig&R-7)Pl7WavKL>l^)}YP`3dalb8%^s zHCU-D;dh$Tb6%TOB!342HB;{hbbm9)6w)m`>t|P5gO^VeqdpZg^1_jStlf`LZHT+7 z4M&Q_TzjVL?eIMhXb!;)K~)(|XIGqz*DlAoSL4fz@bB?-q0iX<`}Qb}y`$G!(;Kew zwLNMM?Q>9AqLEJceNd;{#7~2F=_bNjis8$_EZzu+G|N9T?bLABZOupDrQu{{RS)H! z+eOIf(D!rC-k)s`v?rr+hd>8k!H!PYv3ORzkmyxMCe+hEQ+VcV>p6qYJc508l5^Mc z{BQW3e_eActQ#+@>*fkwMWtSL|8vhijX$ktSAY7R#365xHwjaZzjwiCM%k(Hyi^a1 zct1}ZSs*6OWEDgBWpmG6*l7eW+~WcFIGb;_xBpedkW#Rt68_NIH3M$5*?L}uAv*Nz z{{UC)CdRk0uJ3#9V&=Uw$Z^dn;3R`_X59s%!#LhDNlq}wihgJRx3l|8?DYkoPi=y> zpw5~1K^}3r%qBFzpcYlI>EfYkf}HOZ_P$)@cBZX+q>1^(KoKwkJnYSVzKSj z9(Xj?eKzD*MOk@%c~~hc(vWr(ya6O&f;0!u*Hf zOz-oh)aoX`!?kJh*_KwJoa^OgOWE1{+xSC6{yB+F9kNn>g_AU~OCP|dGVmm?`^<=+ zykbuEk$hGspo}FkyE=m9Ov0UYDrA>!187n1f3Nz4MBUmHh2S@abdRqq#M$ z&+aShNhpo$2YfjWB>YRhu)`fJ5yyhc%si3lTYJ4)O!~!|(u8Q2@4>u*>SRBQwy`~T zWtcR`^_Eif_TxC0*ywqA(+)9iI>`VU2h7T-)J39@}sMw|2ZqNO>~*UrkYx%tZ?rSF=!SnYVKz-5h{xqoq@mS z_v{Tl`()34)U&5@9jCyE6T#`a73dhR+n*Hh?irgur)Ou4YkEh5ySQqHf@kk5R|slU zg~X`5xNRA$-2`VI$L9BVs#tKd7z}L*L&x%^4fyy;xO|nuagGIVp|nko=`)$?`KQ{a zMNniTJl-#FxD4xKsfFfp{#1F|Lql1g{&{uMY_8ZUMo)i>|D>SVKQKXiR&8jHzU-Cs zvAMit7EcUL=w9Q#wx|aj#F;MOVt2ib$J+w%&{ndl?P|GBNuv$57SCJKM?Ns8`Hoz^ zpr6^~N(sc3o4$Fc9a!#a`oFE`tM(~4zwm_KlxvYYe*KEx+}C9mRv+;YSa!5EBn_?osY>j(u6>I@`th(`+*W0rO(j4eVy%>to#G z6!->hD;Pid$ak@;$|0&x1Wq}90vTY zuHz%}|U3PYkTqKtN5*xZX-F>*UIR9s!u2WRK2+~X3(DZe9SgKkjv+z3D64lP!$ayH2?gQ zn(zYaI+8XtkRtC?PAn#w9Q;&d1D$aX{qiy!h$FAdg@;wa+`JzK)-QIS7jcJ#;g04E z8qq>4I-@_YxR=ELy(0TtCnil-tr#Iz40V3vc)mFo#;;}bC;56*4wBmwRp!kt<(<7) z`fz^qIlOD*`74N-S+LQk^0*U}gq6O1w6*LGecOBXK2UzTh_{lD2f1SK#;nZvO*MPf zMGPIMm;OsC;w=0&n85BJ>Qxrov%<&J~o4Z4|$q;IjxPF~o zrJ`e$F&o(0nFT}i!c6feW&b&f_FeOgFE7rMf!JJBdsEdF3#O zKTMYJnOvkfE>eM3mRo!Z^WDR&d7d2@082ViUb@+>sOX z3}%57v8@@_bd(is?cb&3OiAJWb^6uMdWgLznR+u@rryLEYOmUb-6CjTYg;-de%zEJ zrZXE@p4~U+ZJqdOcWc^J#0;+YK1>euo6IzlxcXCW>is#Q=JF$a4&FVqgwnPVh8`A= z|77nEfnYI;e39%S9*Gb3O^tHkIr;ZKI;T#c(U0} z|A^!L#4b1S&mZm4dc5&xJ%hiCbwT|v#P(li0K==j!|v# zJwyGevSLXT9&hIJLEXHZ^-RN`V#C#>zUOrrd2P5q2|fpBh@}uaYU4M<@thT|Z~&%U zaP6~LWe!Lfzf^3CML#XW%z=*k(q|>_y}feef~A zO5n_~lx#FhOz%!IT%oZzJkx&fXI1~m5yIgRT__el`dmN6ZRq$XEV+Uu++j)o!K1L) z_ChW3Iej2F(~?v`a)UNrO*pkGm#KI_^=p?v{ zlU&6{Ps39ubc#){%RzGZ?-KO<4)*FhPjf@vDyt~^q11>E@? z*ZWuvB(*0C>eRh>X+encEV7vHw3eM7q>ta1i>S@>{Y`Z7w^{*6JV4A-V< z6sNbRljl5CZ`_X!ERnfPfg)qv<50LfiZ(Wj?y^>$;iT)u7MBb0jyiDUQ`hSw4;d_{ z>&4!i@}Uaqe>tsbi2t9mli#zvDOl$)h(DTN&a#dh)YFf<&wuSxdcIi-KG(IQZTzin zP^qJR|4>XWgEMB7-^6la!~=D~OZ33Qc$1jUN3XK`#jvg`rc=xMl~+f67YbIT$h5I% z)7kwV`xT*56cIB%@tGt#FSoi|dF*aKgZ)~Ii%u48KBguV;w6tMc3N(8+#a2g zhhFyy=5~|Ak!;vdaZgvnnl`XIAFzHs%k=hh_RQNp{7m8bAF}&XR_a%)w#6=Oz;9RJ z-pie3q_;TY)B<*vJ?5H)sD1D0B57ck8;fuC#y$hSl&cV1$EU z$tX7ZC9boA=CWIC{u>`lY&N2Rp6u%8j2o+Rcvma-)EM5)g?C5gA5SQxarx47@#!oE zyv!8X$1LPkYr2be-P>-Jgm)?Mo`GL2`{x29=u{4=gK8|%4+TF`er7q@7K>)NMpMsQm<^@& zP08R!7TI(a`NuG}bVzQSnr$}bRWsc6ZWwe!^m|FO{ns8H$90y9BOTdjE{J=Vx?j_wc_*{fHhi-RoGWgpodjgR&QJ>P%f^FB?py9eoe6vRgx`;HM_=>(Ro3+z zI5MkO97X(jU;%Z;;&l#+Lo;b2f&a@9VxdE$_(8Tj#z?EdGjqJw95Wgv#sYcZ( z;Qo@Z|GPNTQS%ZT)V~(s;*%*AvmnK4_H>x4^N$#s%Gn$xowL})`3IfkOTF}`_M#@V zwVJg(U2(ZXO8$NYr`x4hTr3Z7!=Lu)Rr_5|?=4o8^OJ052-GhT#BAiNQElQe&2*r*`aABSea5kUTnSh zx8dkXd6OI<@(Yf#OW(?ISG>ta;#x~M#Z!M3i_i0czpca>9C{q$*OT(> z#d72BI9?srUs-&vN!w^_cY4|LMeg;a?|g+Xmas?7@=hlgRbNJB! z8gp&R*K2CEr{p$s`BEzpzYt$du5K69L6TyCg~X#ztm$_mgm+s~>>5$uiqLZ6duF|g zd?*gc!o7vIB6iMY=qxgC=Ucl;y z_URVHy3O0}IAP_sICRro)I(>z#F5{o#&L4s6FKo|XWdu_9Uz!qY)tndet%Z2dY`_= zpZWgJd?}bOGh+ewp2|tzhG)&}@knd9RMxmz4!R94trtTU*_#0}^lGpIb;(0?Qt|5ZJX1F=yi90ME}7>z?2Lj-5%COXtVS1|WxfCLRPW-4_E+nlUL`L5fU*BVSvrr6 zJeM)Q7Sn%}5c7HAn(=5jd3jnJKUb-LK7~%IUi9YI#JPw*hx=mOeZ1k0nc%<8#Q(|a z0u^mPOZ*>3e+Gu0gCpm}j*Ix>-#*^w4hx&{iMcTPg36|80QHkxvX7kNT@Lo1O+3yl zj->P7NhsSdJ=I;-@~2%sfsY?z{Ri==7hp}tdDBo)tpxvkiaY%tN#xwcJkF1)Nq=dtm!zB3 z@&+i_R8O>D;@)n-lyq<;kA2D(UTL-=IJ-dazx+EVO>ei|?_?!%Ti0iiLe3?rWu`;d zQba!}Uz!+`Vbtc8Md%?Z-J=?w{OHv%ttvbZC!4{ZCQ&DXCt5|lIHvliPY08F4L2~LFf|6{ia@bAiOeXP8Dm%n$%YCPkUkJ!MU;@l>y z-k<#!hRuJ#wow%4QqVGthhK_3q35OI_iy1P)%6rKh7ir&K||60J@tTsIMb_obN*wa zmuXoC;PhJaZ1ZV5v!TZ#-uMGONS`abyeD=ZWBb3;UhX^RDZgxGFuOltj|$i!=WMFg zCDU_zQxA#$CD%$D{z?o{^Q5~pqi4Ou73YeRm0@};UT`MzrnCGim zqrc_#rCo1`2>A=VzmGG-3-5(XyUmE~v!1{GA4~TE|8w>I0X(wz-h|AI2&p7RA!THi z5g8?tLbk|AR5r;>LS;mfqFpkRm6hx*TSgiG=lT49j~?&7!}oLE=brOAuXFBs-}k+8 z(nc$nc3_=glGOOVkat!~dXK5JH7TXVQCa)0l@`Utux@S`DR4@1x)&hp88)4* z+kakVR7G`b*8zTig1o!f^)_?HE&7cggEN-Tqc( z?VHkCJ{{`amMLZ{AE-0NlhV)Zvza_s!aU?Z`-klIF7*#M??XMEan?MI;?2oWxya0T zgI>-lcuFsCl;EES)nxV5&Q_v$p8S?M<5oPC4?DM)$LFx=9%#6M2~#9l?%mKu@}1L1 zT~?i>p;ys&8k&{Xx0D zkjQMI8XM#J-?u8do%&gS;;DEJw#;}Zinw+(h_^V-B%X#$(|=ehmuxd1xsF!~c^AXk z6rTM~HKJctuc!6La`RDDvO1`vMwr9B?|s|pYVRrPy0=ssU38JF`91|?Z&TOL#__M= zjK=W(h*4DKpT}i}4mfla4Zik7>L?o&z#-52ZUQtcgUfZ|YAcIxROfsl9-QXlFVl#+ zJpQ#1o$~3i<>v1k-sQ?>U6%J9*t9cFobH}+&PQ(5NgEyQ*gXNEj=B`Wh?6$~n7d>Cfp(kpOJb&>5Th7F`d-X7LsqL!C z%+KPxevmK<2Tu@}?~0v)<}{rX`6Jf5{0>k5%Em>^RBF0gdrvSu-<1W&s@BIPWH#ZS z5;Da#7}1XwH%0twO_=Fu&!53~^F4e#O@%d{pZcqN8nI15|33+bOK@g?`LZ5fFVE7& zjlHtI*)x3eI(eUAob#&o%22EOg!g_m_9JrgZPq;H&@U|tyZ7L)2h4IRt4vBmY<@Lu zN_%0R(<3}&JlMDWPLap5B+20Ul9M`;WVYTXrC$CeNIsxa z+^!F>+p32n`2K|F7ALLux#(Tp)N*rSczS@D0)ujT1j&0W2GVY3M}o@ z!}N4k)mF_jz_WTcv-KI<8ee(c*Bo+lCOYT0hN2qw?k>+Q)BX5Y9d#cpy+}VRNW5eC zopnebx<>0n+|!(IeU^}*ZOC##G3V`sgbXZ2pHsuXf! z&5JV1W_MZaiNkcVW{9IDV#r$mM6Ul&tlEnngO?GM0$mBWmf5a64Ot(Oyo>&QIU_%U8s6dHSSegR?i! z>E#{eBWtO7=RIHdM;#3zuh3vAzB~#y*U9=%zu_eG{3^!dB;#gq;4MuEPHu;#8`g+l z&?h)8CeP@%T~tT^r>0EG`YFvB(&49d^}TGS}3jm+en<3IG2iLT+M+WYCcYSEh%})QL5-x9FHu%-_idZ7|12 z?s?q(N{yeZYVuPv zHE%E1Z1Vq5nI~D6W+cy{^QswkH2o{^YJdoQoQk-ue)7a$z4Xjq44{p+?2un*Tc&gSG;3T z3AXZyfjcm5Rrn^w(>__w%80O@2V97 z_oewLo_%McZxNi_04m>d*)>ayWLD+fP$SxLmR=hZ_S~SK@jXsiL1wJh{SGf~C+V_& zRz`Z>p%+-ru3eAF%Z-e^9bWDz&YHviqcWzwBjwwN%on?;be`7fQ2-x_ne!{aN0;wutwca=@!SCHcIEJhB3Z-^O-z zpkS1~#VYZBOpN{mtEbiF8_Au{-mSz_9=6}bC-3ptbG}xFp+Y#NgsY~XV-5KtBQ~pm z`^zkHUc8^xV?3dMwV&*rcskw@*si{f40i^@CB@p=_@W@0MfF|F!e|v7 zrn<6UCvrA%rm(*M& zxjD`4dYL!P?Jk?&9#f<3S7jdIk(2IzT1WVtwb57Q_oU`wnOt}1Ka^Cbl*6y~MQ7V= zx=+o;;S5^r5JT74;+8qc1$Nj0w;%iZJX_>p`z>r1&ypIzWMSNKJ6^hR^Cf4VI4|7y z19TF9;L#hr{|Gs6d2;`QOm=`5PMh@~#wlANd_F$uj!#ROT^)pynLgWIl-%vqjda$8 zr!vW{VkbM!j_PwVC6DXbZ5Lo%6Ltq~oA z$*b;8Ik3<5o0av3bL){_^i0Uke2~9J<(5gE{0wW%5MkTI(m5ReubSZuAFVehA8&qM zS1;*?T5hrWu(N8SG#lKy35_?;TRVEtv->U9Rs5)a_(~UL1%&-r)P{s%%_W(SCxd~l4_9x`VJYac}Qwrd&8N)H_Yv?o1a|uOE znZkVgaU#bZv5&?HdY*)-vv}$fTgRy>sd*^}dltkW#c*9I<1Vi6Qk0*H!)hVino*Xx zp~mq(f*xRBzFr3Vv4?ufB&$5H+^k2wkMGZ@rIMPl{-kV=n%}zR%Ld^tTpgc zDZEq=6W%R`ny4&>>%0G;XYOeLhMg+!eq=4m68k)D;HOjSoizGJ#XM_#z;oBfJt=L% zvdvlODR_BMe8+BR-d{J)vb=Jiny#5=jBm-XUzq_OGi%F_Rho*K$jzUMs}=Iaw|H|2 z&%7r#UnH@tOn1hp78`G0wtZ6NQ$~KfLmlB{B=hB~>ao*C?j3%8v`S*78-uM@!Q2 z6>=9D`*u8kTrNH!zSfdI&4`;}<=7*@ss#P4O6+;Rx~?K#Du?UKh@;}>wK+X!h{)Uz z!5j6cf90c}^|F4_Yh0%u*#oa9Za?%? zV*Qrh?!V&b0uLP$^V=c9zJPe?c{UiOe)^O*R+9N6-uoN|VlL8!-zv-Y|HwznFx3FM zJ&CJ|sXTJwk9ZDTOWgNTH7=Gv|2DHOBaggD?o3xax7{Vr?Sj*vt*M%#c4&i7va9gd z${%mBXMMFz^apd|`}{IS6*XkMw>iVia-V)*A#B=~U#9uQdiFi2@;GMvyZL5?2$}%@ zt&BZi^iPd_F8_3c`FiFHRmJ4JbbZX&I~(^@bA{jF|Ax+2N!hfqx+(Syi@m_d@z2}F z+|P`vt$y@_=D+slr2W&p`IOjyh)s*KWhOSg?)e}e@XcHnU8_fN!n`ppUa!Ejt>mRQ zcw-t&&NtrA>G!d2-x&2>XR_~8mnBJHAQQP)^i2NNd-_|?@Na#yW1bQ2m1AJt*F*lx zo2bXnTLpAQU3=61M9HmnPGt>4I#2Mk>U|WzD0f0zA(+aeHP0q;Jx^9A{Bw?vF0*f}LI02Lw^TPNWx;Gll*bd7EO;-aT$DsFCkY>6 zZLv9qZa@eI;=UvCj9(|`Ql${#UrkZY@5{c>Kyv!Wud7C%QP`(dRCqH3_sUa zH&=A!_kBwD@eVy%+t~C5n-;+iv75=OB58O}~n#iO}+*IqS@9Db74HCbRns+L%X(tI5uCnk-XCxFt~F=4$g%~DyFR&t z%rZVC_j7pqLcA{|?>%;XiNs2Dy^iBn$#Y|P_BlNAi0a%@eYN#+;ip$!_5;ufPq=~X*|3SV$TkAeZ<(~eaZcD^5O0C?fp-sTOI1n}*Z#^TeF~tekh#oFSccnmP3P z3dx`4{PYlf#(RYKnj(dZ(PL_oZ7lnnyE$>vHICoEk(+)ecOy)F z&j!JLoiS)R{y%AsV8yI{Ks8)kK`j!e^<^<{OeOa1eF^)&8vkwVc`qw)RxC5@X$tFn#MT28KEBi6MyXGqrdc>4y*NaZgKtuk=|N9iBmatku#3G zCQx09C$hLQ(6<;KXuxN~>AhC%myVBXk~IjP7Snf~ED>uKeqrlR{B9^o4fTm~K+_JN zol1jOjJ>g|x~F81nA68SdW(Zk#p*toif4R}h|8{iGm$;R|8w1K7FnYpy(`|Yhwtvh z`SIS@m$V+?dcpS%^{pRQmp@Lww(@D5-T5_p##-2%koPc|aklUjIxb?1Wo-JH+F`m{ zbO3qYU?#bt>eqXcFf>sFzRaF=`TP+)QcoTBvgmwI?eL515;iT0=UN!!Nb~mvxO1gg z|5{zMfZxaY+DU#YFG~MbY0PKWp0NHT-OBP!tb>U6ZW_UTtTkDUp_1@ZRWZ~XTISL5 z2lCg#(|1t$F?$ceAdTTaxBp^A)g1Buy7+7ZpHIkpHTkL~TfYVSR#20EN*CrYOtyvX z*0W*MP@Al@*zNmciKm*a<@pE1Xma^!v$4;D(ZQJf6>-&`)!NH_y;*RY82wp2a@_w@ zsjf@l(I-@yFZx6u9k4#Qr5itWRztSJPj)a?k<=5hZRpw>pFD-hqnln-KFI`Q7tBDM zxhNmo4OA4&;Qv`hvlyGj9-#;HFm8~kmxSkDBJpXRf=ZY#Ek->+o?SV}D#F^e@@ zn|xaJ8TZr(fb7(dci!_(x@6shY%R&py zf?i8JXLu5KR#h+Ck3k$Yr1P6R^t0N;?8rzK$?@~lOLOqZLVc3&5_~!rdWOM$GtYzy ziTM*`#j^|V*UEKG#Zxu)b1`$zl)3p^40Y&d za&vH%^?T~5b~17$m0nVBscbS^ovW)bM8@rcE!y)$JB-kqw`Z~CZ?wItGATya`Vi66 ztZWiJKbG%5rsq_%j$tasw)|gSJ$8+p@8~zu466-v)WX#d7-bcF^%P7EkVBWU=TY@Y zRye9A>f%kL$z(2q*;vm#3v%8e_hoas8e%kq^{RhiswHeWTBoYF9%Jm|`;wZZkFie{ zL#tpaPM^z5W=%3*H0F`y%`$hG3tO{cYXWcg;HNq`Ah&t5U1ik|OwUFaI;ZB|z6+y|A7RX9!<6rod9r*A@SoGCC`zMKY63*_T9YLb(QTIWqNTjJ0n zs;EPlditsFKI5N5{-2GEnsn>sIqFO?wVWMe9l?D3F%B=k zX4G}mB3Wd-?Q-!)R+kKxAv(d)v*skt%|ltH;gUTkCRgUS3X z@kDTvIGyS4i`aBEJROpcJ=eoYAB&+;7_YszNMfh{BmDlcxa@^PYw<*3+?11!#i6r~ zxEyS4#1At5O|c&<)rK1TH|)7v)Es5OL-=EZ`sPCwNvzxR_ArDs6iarDtZBUQg#3py)&j#|+Yx3PF9QvMmWCAR`C60Q*Kuc(ky{}S3 z)GpsGC3h;89D$?l`hctKrv_J(plCV0_gHIiU7W@~g-&S0QOj8DE3($|*LMCtg^kjx z^NN{?#GXyD8o#-bHHFp3%{%XhE2j~{XRIyQWHVSl{uQ{%|^LmU3F-e5aT%Z`^SPbai8`YA#<+&#{PStJZVy zba}dV<+Ek<{TK2p@=HgN@;=|kGmuq$wE|9O@>5?vss&pa_-HHLrjplPPp6gmY(Q3B zG1`hf-%u@mg-gz}W)YGD?>)u-6nSn5o#Wa1LSCL^{5|ngQ!!e`)7n_a^&<`$FHZZ5 zrRWd0NW@b?oR@*myrUzgc9QGF5|yM=H)V+Da7iB;4U#+i;m>#%>3Q<%sl|)4>2;pm zN%JqsdY_I1<<2g+sT)bdVSb)Y)^FB&UlFJAM5Y0m{o!?nC|so0`;0B;iOR8fz7x)? zh)ZIX&QBt5oUuO-Ef3SL45Z&{o>*UnW2a2ayh_Bb5%a&PUbcwQ-T3&BIQ48?+{bcIL#>XO(etY>1byobEsjbM$tTeqNoUSv+Y!PqyD zyHd^gkysrhRvU=;EO50!wKs+x+vE9Kd{v%@%aUJ%>>fDkGqHaJPIJn^wGtc}?^Avu z&wVS;#d~|_`6#XVd_kzckGC57ZS?P(%HH-|7k%By>mtv;&VsYV`)@cePEgE^>+Y53 z;)LHW=1K$9Ps7B~U{TZE*qihE!=&nhnw7+=zk0H5H8EbA4f4`2gZv!lIvo;0yVYac z;eN9&#~;{cx7pwxmC<3c^dr^DJ&n0DY(7hF4RfY~?0ONG1p9o3=O?Pc`r^^9wCke| zAJ3M{6Wy$DVgEZaf8~MSOm$j_1`*smyB&+qvaFGGoWfdYG)C zIITlQ^fgM7nZsP?vN`=W%(Q~U1uQ&|o}Z{RKa=af_P)EFf{k)4&%7g!`k9L~_w1%D zj9$fx>)18kAs-^{+ltZHm!q}JIT$m~QH!j>BWK`0ShWg7KSy5dFaHK69>A78^hVmk zyjiT#H^cx>@_$vaR8;)O{u!}`;+Xuo-O8yI(}n|HkiNA2lZm!{=>O{sR?CvU|0pbOY=5)2Jv!8gbli=7r2_eSGB%dQ#BgshZi z(;K)iqjy^h;rH??rH90OZI-MnlAbj7hasah?B`Y$-46Hv=!-eqTAq7J42{9f%UNJw zqMxW6de82f?#ZpWJ+to{5# z|9&y4UyJ*-ti21`&Z-Ji>WAgEez>f@-~-l*SGPv-VR*XVs4MeaDOSo0pDFRE+{!<- z$bD4Yw2FyQz#_q>(sZKRVnk~mq!AQf&dCAwuj6RckVy|(3;S&># zySFUaMy=e6UAytl6zg(+l8;Z4nidb0H|J`ioBSGF4)f`e#{Y)g8S(ifS!LiL9S%4o z|9JC2Y-SVdS@BdhwSES5*-i0zj;D@d)BPCmun`^R`$K$xP`sZILl+b4C5O_xSAtJU z;O0u$ssc=v#F7QDPd4+eG%$5D(H9-a1~b_92iX4;UT;D{8M)K0=lCh&C?$L5(HD(( z@G8J+6=oT$u>#^Vjk(Of_CPpoJ=!5_{C0RRVUu-!ztM9u^zNo(?2>s& z4Ba9xwVF{i%}LSDW*Wv=xNuR6_0Zcm2mli{ai`1v+|yJ${( zTpS&Rj$@eNtg6+1nHVkPPNDNeUx)j-Gv2R>_aZaxr{glwJSM^Oci=knQx#3jL0jX! zQRXAx!r2iRNJHj5eBYLz-jwquLHBzs7yFOBMZ3=GGAm~I$XZGq@{Jk$`|SEU*_~+B z0r&UNbDd`Fn{erMHZ3d{)giB!-1)w*3!wW`_nEF*coSxyhk*+Gb4A3(?iyopeJ9!M z2~mBYczpm?8?)`}#=ek${=zM(a9w$Fp62_3>^qsfSz>=OUk#Uyx?|A#V)hR6(6cI| zALurYZC_=_HZ0g0#yjJ@cliBFak`(bv2$`&@zjMT6Ukc0%ZrWkQx$FCw6E(4SF9J_ zWZp3aFLi;X$FOB_$SK5z_po7ekvWQwR{MIJyH_zM?#@p$+3s8MvsyI%n2=jQycUr| z3j2QnsLO{xv%+U;J=WxUW7Z>(`?UBU0;|ha;_=k3kiTq9&q4e>o9yNET@L#n$(?VB zspr_VJUm?ykKaPy7}knsHVw$DDPro7*&3FH)9-6`I7!!R>bVESWE<7i>j@4`i$n9s zAw_ZYU3^r^*h`6kyZluN`7<|N*_)ifwCd`5g@4}UpID{+o47n9J7tHGsxa9aKXr%2 zHxkb*a+=e{ZcTaQru?!~tRzaOmz7MWy(|{(9}SHyj5+o+>ncV^^7=wQ@1|>JV}FD_ zyOKH1=jMu>dHg+-Zj-=?z0F^5Bj$p z>{u(&yGcQ}^l+2`FJ;kl%3Y^JK)&w~W(TFxP1ECiBl1 zV#um>Qg@4|qyEx-$N1}$9dEI}%-=8K{I;%VTye^7Ue{UjR?}n-6b^K?_35T6r51F4 z1xHQbp>N#hDEww4s|I_%Ovf>J<3r>AFp--ItD6gWQ$Efv&dMt3ut8GXd_nA-l#5S! zck>LHf6G(H6P&lkzg@!ig~_Ss6TR7PJljq8+4te|ZMNtRXLXDri|=>R>r;A+B&VxS zKFtR8abQdO4-l1~vU%JyHO?$Y&!_N4SM!-6a4?+ZUWfFT*r5g7)~0_^_e{d72gTBQ z2waYvX47Uo-ka>_h4^kQpB?dEZX-YV$(vqg)YtH{-FZdg zXnuZ&zXy@`GVXiaS1Z(IoE-3(g$>ilO)1n3@WPe@_-hJWt#Y4p^v=ankC4?F?&I0Q zbn++5c_WO!H=DM0&q{um#J^j$$X_gENhiEuhU0vH z0N=-2-mUr>ai+>ac`5dbOD3MOsC8l|i_(5mPAz_q{%CnU4fQI&ccpu8`cCAdZ*kLM zcTUSM6q(jM^%Dc1RX%cy_vtoPls^L7Ru|UN==1Ud$xs?7`F13A9bMT9>dcgXO zt>$9Z-l@ux%QO|Ct2sUU(Rmzg+s=;!Y3v|c3(c} z%6fJ8`&4kBL=60++j1P@t&_yncbIcMZZ;5a484K-<6QYS#cLn6&a>oJAvcG3 zI;kfXvw<;kT~9igJyH<)xzH|0;}c~mSBsxhd;Leh zG;&iOTpD}em$PE9qWU5BUo6w!0d>ghq`rZb*@#d~7wt$q1M?sG<~cVm8r{>zYB zTxNU*Hs4^o89u$(=a*v756!?vVr{G2_`V{ zkyrD5tSirpORD)y8~%=d@j1?G47%;RZ4y;?j8liel}gLG-SpT?(?|)5F74F%*`02%${9FFB1|4k^eUIq|)H z*2UWmc>j|gvHQ(b*BkWhPDX#I9P9Tn*Iy&%jU0{JieE$?*4W`#jKP}*+W#oRz zZ?nYitN#4~c1nh~xA^=_KI#HXb&U2Q<9-ZgpY!`+{IgiBo|3Z_2y#VEjwh za&kW*_f7gXOEBI)G&vzphD`&X8}0kCK|Q{S-?t}lHA@!R#zv`(?E(1g$`_Mie1SVG zHusq8iaBFHdOqcE@<7u8dVCH`?~3crY+5%l4?Sc2f2$wQ!)UBXOwUpUc)X-edMWjj zr+9vzLbq6t7d8H?uvQ1-<-;?l$@>+KK6DN8eJ64|vSD}nj}VvhS#l#LyDB>sg6TT! z*_BVmxIW~Ok1+B?j5vTzoBR207`~1}qKb(+v>Uw|(l6G|)ir__`D=`^uf(&*`9Ht0 z*EhOe{69$sp64zfyQZ*bKX`A-F2%{bq+VW4+vz?#kX_>}mUjHrnZMrh{g><->+w?I z(9%5Gh_2m@cPJSn#piHR`j8p(#aeVPgtOzc9lJQP=^i!6A8MN&@E&LC92B!h`23t` zNDia9Ai6jW%ZbDaYK5}K8vWqd11Pgxm(m!nnFF2H>ptcadyQ^$qE3i2ZR}{Ehv%HZ z1nw`n-)*{$X;cmAATP7gcE;pLX+awqaYIqbNOf}+dKs&`LX_SpO1CC1KIK! z(m$#l8ja)9+2=jr{>?uzXh4!%=bL z%?F=dZ;Tt&B0KfjV-EH=Je<)bi}yy;LUc}+wAVU3+CkDgP1bh!xi`;srDF#_Kh0kc zx<^jdydwAh>9b$C-dB4LgxB7DG|1Q|lDL?)*ZJKc%$EXJ#45@9WON{_Zvs;#9IT$v$as4#aS?Su}G{2zJc!!^6_eO8~tBiu44At1QPnQ$;WK4myhz$t1+Jp@$CEq zGw#nI{WI(m{NJD6-d>>Namd*q`>ud-y=hlF-?t>EBMgjy(|`7c-H&8 zT+|!-`|(;|zUpbLF*kimol{O$wi~`rZqfbRj@$RKXY3z$+T8gnzE7&2PHFCw$zSFd zDa8{}U6K5{GMJ}FC74qqp7Xq?M)hZXbbS@aqN?GcYZlJmLuHs@RO^Rep_ zod2a9;F%Ks+GakH!+2vI>pObti}>XS+I^3eKIfkaqPC5D7FLlShLrg#lfGm;g^8>9 z=|TQ!h+TV&ulcH+V{%;)9MXckcV)_DeDpJ~d@u4Bi>XOG7^hfNHCMS!R*v;dQ(1GM zPro3lo|d0m8}I+G(@5?KNPc*`--zq;a$}rShy5NRqqMJ?>GrRu0Egx5%_8F`BU)+P z--ws*X&Sq)dUuNLWrv zV&9guY;ZeV#R}K6BIZJHf zn?Lp0W3R~7@HLZ<+Q}e!&C|ExlJTUr7MJ&uo5ycrU*!AbsSYsup_=um{$Vk;Y^@?4 z4@1jUA3wp=O1jR2%^_H>A?C1iqO7r6?)+Y!|3wVh6N7&m82@v!z+m;l0yf=i4w;QD ztK*^P*>f;Ej!_+t#aQpK+dzL2>+);6?r`@@#>(L!_c z_2T^`tEVHU6kpWggVsLZm8|Z*@8WkIV5up6qXsS{7v5lj-Ln2l^4=$FAUt;Cm#$)T zFumu&{aP4{ljXAc%WCAbPt3tmnlt1!cD)PiI)V3ku}7VR)U0N0H(=>FpZ{h2o4v!c zO0BaZQR@%lw?+8yh_U47=X&C)4+fsareCtiBG~@`%7!Q6HknKi{Ip3Fek<0$;HPEs z#|nArNAfl%a`QaVv77!G=<=92>JISJ=m zTGzrvy>L!Gx`LDRrPV+0!~7Dww-GCyhtWKIQO)OD(kc46(RYaTVJ3Ms1bP z6}`6~`F1)vugfRx)FDs1TO0Q6hyOls&yDimH5e&LuV;KddJf}RZyN2VvB4;O-HraW z#6%{z+butSO4b0MYbvg)^6>+FQ(px2;IDZ&b+3QRsm`beD}&(mV{E#T9lpiV%SeiS z_It8zHGFWpv8?uq31X-#+cv^cwQy)-Na%`Prjxmayrjlhk*xN7HJFU?Vrn9;8mK%XSnk;%_pW5iFY(+;-0>58#%T+?McG+@k&KVxEwaiYyf)6OCAU|D zsr$|6E4fb@9G}y_+|(gC&XRxd@@lNHN}l*d9{p9$SZDsU#eMb~_ep5D1r2fXMtPpD z2-$Z*R8jGNr@V9rF3paU(x~&2LhN-t^s~lw0IGMAxLs}cr+L>=`kr=OkV7xaEjQdH zp0M2^tCfKEQgZ#>@Kjd6;I71cWI8*?v%C&`Sk4^%KR8;?FEiPouTQrU2l0&QDSCDl zL9vgB-FMP*)d-C)yde>9MBZe}qx9R9$WRBM z=&YLjHhtIVAEdBm&wc@VFZ*%WRpZYM)0Od0?Bd?e_dP_|>yRGriS`y>E%09j)=vQg zeiJ?H)G8uP{j`emN|u)#0l^BgWL0EbV}uaB>jU9qlv7F{RueP82$!kyFM z!_E9O+jx7^wGsQ)a)&3Np@keWkl#P&_jCMS9G05H_}lOq`yKt@TCP5u&88!azdb9( zGtIL!SSp6%G_sC3sj=KuCNKS>R$V4*EQXe)V(>fifA`%9@pQXBvGp-(hKcxdE|&X=+9_@#Y+=(~a{Qn6Nj$24 zI4?h6hgatnt4C5o(u4fujb3@=LB6U?R!N*^eYJmmMV_v#OLv9mzr{x*;l3UG$Jy7F zVW1kl+o*lUu+Fb=6wGs^gRB!M+J9T{H!EzgzI_V zKPC3-;Q0nD@`4=jE*!0taZc)t=Hc_2YQ`6Ea(`Sm5;wgoU%ZYHUi26B`RX1$ik-o`vF%9uO~FaAzs5MW9K>JG z$sTvhcUMXM3C^b&Z(nw7Mf*q9Io0XeMx>2k&m~Y2JHJL3=pp*Oh&x8X`aGVS@0!X_ zgXkOkVwB~lf5}-x-ZWo(@mNdft;^DlWw);WbqZ$Kphmex=Xk5AB~E!WF$XQHW-guB zkM9#W7~?NG>d@Q|S9bQ5)m9nz&*q>%vE^^(w0m7=@!w4~Kz6HM${T+TQU199>?_6Z z5ld5XNjz(ELXqbUhty9S#OT+edMQhOMbA~{Tyf6LN%Okfj5{NnT8Ba2FDmz|@P8L9 zJq1hMMON$?I9LAoM2?RAD96KoH!>f=X363HccY6_#CzeRX7sB;X1r%vpRZnndnf66 zie8M>it%`y51Uc!r@%|j&y+Lg;`vzn)DQOSx_dr${X4-ZXA=3MKdiS`Q9kWzi}Rxo z_mSWI2LJ!^TM-OUkKE|BOvP9qDl%7o{c$sF0qPa z9`Ag~PaD;FC(P$=_ikKP>+|#%MaOHn=>trz(}6keH4`iRzkXJ{8+h7!$Ai|??NFO< zgQxA{eg|z18tK`@%ELi2e>=62H%7+mGlw zB{A2@W{#VdHJlmDPk+eipW=_9{NGOItLKXSv|6+20A8F+Ud-J7GZ!mH*SdJ*Wf~84 zMSVBg-G=aAM~w3rJ}Ic%d|m$dLuOut_uplQ9-`|-eA1oINAdSUF~5OLMFJLW%|p#` zetmwj>y>DjO}9xRV<3FC6eXoF`hT+BMl$E%y#91+i3u7Qf9!eFi5*9XW?clckLUnC z3jHO-eLM@gY~9-dnE%}~qMz{oGSA>brgK@;44df{ec-pnP!BQGRbL?X&~btoblk=7 z_RLk8MCNPEV!hSQqu6Z%xnsrByRg*T^`tr{7vCLLCw~Qt6L4o=c<2}5pXa>tj4pe=s!HHe#k2RkHBP{B=o*WeVxWH%2Ut# zU7WNrirlZU&3-YO0^^r4_Sn^P06rP-nj!~G!c`;iQ&)OF39E&zFT5nruVK&WD$)TY zbe8|y)2x&Fd|0ARFJ<0PTSPZB`i2<4HhbPrzd~Ztigz=L5wIC+isOv4B4(La<@+t< z#opIr<+|SP@`8HldH>oI?kD4>*je$ARkP`M-A-+ZK32S|I)%?az{N9h(|EDj%k1Mx zSc>(lQ9-W6`{T(AtT*=C#(WiW-{7B*Wrl6OI*Al}=D^R%@%vRiig&EzB-SI=k{*=r z4qBmei1iN}=>dK^!cV99<`V2*lS`6VtCZX`!PK5TJ6{v-)5D{a-_4oxnl^5ZviR@Jgi)HhKF}nV-!e_p$9`l9h3l73qBj9M7zgP~*+p*&nHjN(4 zBYfTg4*Egtn{YJ(M-Mmt9-_E0{FjCQ+kI*~4s~j?+~#>S{W{5SFJr^O>atjg`=glJ zk4Iyd`ATrv0++ld0}Q0!F!k&kiFy8ZzK?fQ&{q}8Tdgp{vI{iUbX2y zHN+kmwJ#LEt%Qfzw<{$b%ffj*xg*wd_rm_Yp&_2-#Iv{B@KAzXQ+jfBSXbjGk@x`{ z43kTHiml!_B~DD9L+3SmC8w=?$b##uh^988bf5@`y(q`AYpkCgCf=RKsou2@vYK=k z7X89C9;$l5YkPKRgQH(&op&(fQmZj`d#apD_N>fLv8J^zON?ZPkz@^p;La>mn}3Q} zvwIDDZZNtzbbE_kUsKn0!FSzd*HLh^#H{-dGqzhi8mpROJ`>N9-Vgobk!qakqq zBJO*_xQoC*?B2B*cAQQDkM`GLyY4XFo&84m`bnY+E)2;<;l2=i=E3)w^wl#adU>6F z-@yo;#)#D+t|%+TspUuHk99n?&^5_iafF|Tv&ba=T9BCeCe=~O?UTjHED!gU;QT=t zjrn*Pv6|o9$sS?i^?ta@2>T~+Qp`x^^3!O3dYv8msLzJUE;AFgV`ccPF9KU&`d0kg z$Xv!5Gh}vyg)aW3y}LG&Ln>K8m0527TVFKZTv-73@$7amZtf5F!;F2l8TBt>GfpW@ zA&N?oQ%}z9BJ01Qz8Qw=-@ph_H*~~ekGl%^#6_I^J1$yAXdhS`s8f+V)&$HPPM~2Ib@A~ z72kVXGOzJStT8>$6Ul3edvG1H4I|k zmZ?YZ|Lb_519=Z)+Z;IHq`a{fnm*;L*q0$^VTiKbmc)^3gPMNAPzC99R(^lJeaawwwt^uNd!BuE)hyQ~GvS zSx;flH5lS1-S5S5G2YQ^xWKhcep<}hvFkEiSNPf5HI@2Tv9_pfp2G}1?sKNMpP zfv>2UKUE3-#_H$cG_ANS#y>U5Zi(ySd2%Nl(8c&Wx$85k*6QN3C|kx8nq&OEj?4uK zj+Y5x-Cc^_HCUGA?Pa7Vk*rAU24-H{;EVcxry9-2MbKy(AwEmygC_fjHZ+ zKbh_5R~<*?XUl)|9XFC0Gx5n}4q<~>@734cV(-vdZ2Fywa4(s5!NQ}l$71ZuP*|3V zc~VO8euXVhnf>gQN1}e(ggIiZRP>+ri2bAT(|O!{J;5szAZ{UcSVPz2{FM$$E6Sry zMbs;>H58YQ6%C_V`*nG~bz;uAfkyEpbgj5wr+>ZKxObZ~A2oNn%wOs08|S2!soKUn=(O%cyU z(yG0xz-edKShDB%`D3V^A!gsfcP|-#H8#zp9{WpHnlIvqxVqw~=V;wRJaskx34H%8 zn;!7jsYG9SR}=ZUJGpPN>znH4{q<5ksjLzRa){8Yo@!q@l=h(A{J9WW^y~&O@w!gvm`w}&2KC$F% zW7U2icpqx)Z{w1oJQ#b{$3C}(aNpmFzT-}FhTU{Lq(5>2FUg7UGyvwOi=|cWe375* zUZZv_A{}(*pkbCT=>M=sf-oqx;kh&V_-`A$&9r zhkQiVavA)07(D|m8ObdrE+6Ih=I-($UhdBCu^;%W@_h>!t?J6p23K(B78r_kXcOe* zp>on-d3iXwp+^+O}*VkouD&B#}Nw3HF`UN>@kUNZbO?Aa{k$!S^GgoP-yH4sRR#<=m zM)O*%$Lqxo@pTLih;{$l@Kh3fS%$A0i=poPGX$3m5&wO0U>84!E$$;NrE$bMjjy3; zrq~~0emB515C_CMpgC&iAH?Y%*1yf?V;_zOL})z`)kgIlYas#$FT++VW2lb7@8qjw z=6XlS`Q0r1YxA2qWKE^x6uQl3gD=JBX8y5DnNdBSh|wpEur)t*QuDkFLtS{WEna$D zG+VJJ1IHUSzmT?#yr{<_7Z-4q@ebns>gMXWG~R@b?q3no($G|oil6%7p+WQ-h`qYY zAJ6hr>~kDXx~`BD?+AV>|Ga}U2a^{*pD0G-xlrs(w3i=~LzEMi`ROlxyWRBLEr#OU zYQ10a{}|tu5CgGB=CGJq<5~nSli++98F5v*M#F2sFH?x*;oFUMDBM+ zd>T^n8ec8BtqYqD!@;A?Ip0=)_aUW?ur&?!&obt1I$!bqgHe$+n%O=*{ zr{THStLiQsbuSw{0$VlAN$zL;l6XId2#R-c4yl#n-Ii76AS>B5P6S&4uj^#*J&+yi z?lPFi6o-4gItXs2EBUmqufWelcKsed9hbqKs;+mlPAvVbm-92OTg&IMFUC>2UUZ)n z_$Ds~D+Md%Jk6;~ zQ+_JX*12(>9ng&@m%C-9OIi$&QXWob{I?Qw#qarTE4v;e`(Lq?j(rNTUpX;Zfi@43 zSI1SCT_1N<7o!zjMg3bYh)Jb7j`ij{dG1%&H_-MKzHecIGE6 zRm1B~xkpR5Yz|-b{CpqX3%h3uG7m#btn;6n=w%h+qqvHwOYT(b$~Rv4;Cw@@BB*JN!G8-`;kg8FXDvR&*%;<)=bE zTZhG>7yJ?(yTD}hTw9SV zT=Uh*qbiAH@<~b@kdmy_I53rYpEC}~D#-icpR@FcwTC~G7aZ_D9K6Rjv&mcH>-XgC zbkFD)WirO-UDQ!Gbie_<;h{Ghyh`sE{6#(TN|B$=eb3P0H@=9qUXy$sL-u?0o&yhG zyEfDLOafDvMA}8!B~GidFR}4=;pf=#q_HvFOXuut5Z#D%tn~@a-*)x$b00Px%AS+x zAAQNq`1K!XjrW7^jTzaA%pB-hs(y2*SH?}pIKJ$!y zvFlrQSj!%N$<>kVveBswyFKdjO?~z`anyk=+CoM{caGh3@+VMqkfkD5-c&Qh8K?QY z-<4mjmrs2bYxJ_QcY2?`o%OGY`Ex#h4DOG~_s8XvV|r0euIBsDx3qhvFpfQ9X&Dd1 zGx{Oow3nO``?ilGXR&J&4E)Egcar%ipS1F|2h9htT{re<%Zd&CMes{1TylUs*b=`uEtn_hu6+2wRQSm<7IbF%K?ss0MJdYdB z`$VjsPJ(??!c;0;8vR1+5!himKh0x{?_upv_r6N+9Q<2V97V6WA3hmD##nOShPZC- z*MLQxL@&bf$=n6?TjE{w*heap=a%W!5Y}PRdof;!H_$TkM^&=g$xVZB-e@vM({(Vt z+8f3F#-5gqV?B82F@uhSUERoe#n;%cW~$$>%p{0`)h|@SXR`AJs&`V`S9fkJ$C% zQD4i8f&4s_#`ovxvx`60C-hC0;G<8BcY!P36Zn?Qm{}g6tJ8yMa0cg};*$$7aFrcm zZ^x^2|5pz97Y>rB144eh36xHaoRN<*$i?>8^Yb8IN3g{dwpi*OJ76w6RRoS6^ZE9! zzCJn3*yG*4=x@bNB_+tbMaQlDJ(tY>{M|N5VpP-iA+ZxqEcX8t_%jL3;DgV4sft0bXL82J%uF_DGH$cajt54!%uB^ax&I z%h%ZXUG-SJx4%(VaB>RVdnZx!b%4{}d@`6_-%$DX(2r>?%Rj2py+fus&s*ygGBc3*h7At0g_8nF3O%x`Jz`Dob+yuYv2@&ZP)>DDq7mQE@`dG* zl;j^}tyMlBxp@*6j(uL=Q-gn~24BJ}8?d93lM;EP6yMbJ`R1af9ZRr#vwuy-bPP0xjIk>8sLx`Lh#%PaFZw5A&*GS+h79}KGbOlsp>eNtzo@H@vga-L&6^lw z@Y8iz{g1q>?0L@DQ|9)k@L@c2xJrw7|1JsJrD4N#e3M4M+1}i&_#?glaGj!itPc&$ zJm#mS?9h=m-Eh^*e%F$&57V^(o8F|uKDY_Le=4>oy58}9aOsDx6?kbUTwEs8DJEj+ z44Eerdv`PuPxa|qlkSzpWC3%LR5I*8#(EI`)H@=*x+`67M?Y|(e`-Sh!GMeY0{xr>cD zdJqT5i;6H8nH5;;DX8s8lU_I=PJirzPa2b38K!c;)D`yJPQPVvK9wEb_4O@3Pa=0| z0uxDiA!?mV@N!B`bCjQBkE(s-?o;a>X4g|9Cf*gfmGEZtDOb_;b5-^n^Z6Mnm}%l_ zj-OZfs~tRk5jN8KoYR|)d#hS}gE6nwckxaL%ZJ`o*rFJjndx~=gdFnu&E)+|-V*XY z_47i=_zKdUE=#M6{);yx_wlNCeEs$jnlw-)G!gId9zxjmA^tCgZ?a(1tI%**glurP zFMR!wccXv(Aq+%^>Sz4-r@p~e(VBxNE6J#J#eFN9bmooj@YR{G8j}`lt8=T$V@9%@ zpT2>qSv(PQvB;F>MY@_2AoV1&~*njv0yIz9X+jV== z!)VAXXcTwSvw#|^AS@N4Ykpjn+s_$vDUv|sRhpklSpQyjt?i2EU!iYvS0hM&7>|?| zpV|F)mAt=<|7R?)fGwxk0oI%&!-CpzQIL|ibdFyb>1*6G>M;;bS z&q7L9a$kd|?(~a#C+eGW@RSzs9jD70d2WHa+ozqyjjOWA zj>W`wWgJ(N&h_c}l&dbColtL%@(1fh_J|I^OV~{u<>WV!igHxYi&62R2jLg`tWFZYkvT1KuPx=nzr?Fyc zKD+!5opIV*agv`f-cEiqjGiO;EA|TR3FXn(s_d^asc}xQ{`cZ@CM&;Vtb^$}l+3a4 zG#AFcXU~J~9B+@uNe2%Zdp&wKC%cueO^mWO8{g~Si-@VTEOgmt4v^~vd-d_1Y+6`c z<`q|2%x}GCK;Aa_=@j0(h4XUD(y>E(Ex(PmgHO9p>?PQY|7y8&X)&KoeR|6nkGo6k zPXC!PPa|_C&ie$?Kj*_=c=9id{|}DN;xF%JgE&DWYKRtOJuS)`!Fx>@EuY}0%&eN* zog>HR7xUIg`gtTB-@|eX$c%j=j**vvoC<8$$e26%+6Q|3vEFNZ-BBDpj-R52xIors z-+c-Hu^;@K^n8O2h9`JBAKb=syO__%9Pqk4c^)<+7Wc@ZI})5%56T~4!GiQoimOh* z$RF?>c|LZ+UBE{RjqZyCuNH%td`25HuD;9d%U2R5vF^UMQP%b8dTj8p zv6mq)pPD4O=W%}<)i$!e6V>zGG1gIiLchiG$4^+~PgTiPte+jLlova-U9GU>OK{MY z&!V5%jE}1FdVV?dKO@@ZFTW=1BRWrDnbABv8K-^%LD7f&T^>2BCd-c7DzW3^uGmZJ z8Qj#2b?S@rhcQEOBTtX<01=_5A%gulLG#ZAV3lJ8UTO<{jo$!{Jv z?xw8LQcOKVqxv}iL9tr|Ml-3%q9%#c=~k2TIelk~^O-&!J(p#2z_0MM8$Qp$eF}2( z^GE1f!>1mnW2~==eEfj8yobah=BMdAgNSFcQRn^QT1dax0YCP;Twv^9s;XlztwT_H zJ8u;-W+#o~p}+JB4#Vmx*G2Jq!+lbCHjj!H(%kcWltfXl*sUIgzI!ln7eeO3re zL!;~be#YGn^5ibLZX3Cq>1Mrze{JeMwb-DX9G6QqdV`F^e6-1LzGZ_i$cp*MQhI(V zude3t{rQ1_raHl(sF;;?sh*LbdbK@4OU{gr4D&qCT8Z}hHT#T-#b#7T5j+%F5=&luTe z*j|h;$79x5_cVk?Z~NC-zDAF5zmZ2bu{8ajB&#i7_wxDJ`>8)ab>XMD&)xnieIhRx zT|Z^lAL+PX9HmGg&K@>A+7NPE;E$*u!%tD`Jt`aDlkihM z(o6GG?BrFEJ-e}G@ zPsI_C&ww zWs%sM1$($U_`X469)3%nzs^rLVJ3-~j5Bmnc+WhoT%T4h$;_@Xm&z&9bC8xv{hGvc zkblgR&fvRv1|Ie8pKKeucE`yl`yuEAO|D?bWbBz4HuJ+&ad97KBbQ^-!cZPNCZ;o* z8-9BVhwjGpTgdrcE?FawtYP0RxFF^fu`^d%F<(&K80#mhkok}~O%*!d=li?GQ#@mh zy(OaC__w?6;>GnCJXX^GB#*B5btgQ;+J`IjjQ!3E8~yz}7?J!4kH%l$E$hS_A}gFF z5#7N}2U&ExajjR!{OB)#k~cQc&weS8(~Qq* z`9D2<zvic{^6U`tt@`~8fw2qEZRfw*{ z1{H8$8Qh#7SKAMi54Y0wwAfEeW>kFDp`@9sJ^3#hd(`%=#Z;WjTn?Y4GIKh{8s1>U zah24JQRf!r_X6^L^q=FTuQM?Er}1xrm3S%~Z+C4XcPB30XMS^5%qG*@$!fisbG0#a zN|uP~WexpeP8-i@<6N1E>^WODUSUqV3q!@5O~v@TCVA~}-)pclz}R2MCB0?M=$FRx z@SJ9ir$uXI+auq4_AkW2Rux%1F^+u;?h$#lSSwDFXo5=`lUbLy zs~U9)p3gwji+uAZJ=gmBH4d0>>$dOVudJN26 zgHXB~kM4BmKXCqLz1%oCWgk9?9%%e1lXSTCETnA09bdXW z@cl$`qxUpjZi;6vF?ZO_wpZabYTXL-d;*qQ8hGXL^(^doO!;W&e}RDz#= z7xOFJWe%C+$&C4TJYQeJp-U48iMO+59X_+Mw_m*lY6*C#ln8x+1tlhGLS zZTW2=dp<{YtPRLO-`IQkJAXYDMhDU2HQ&F6M_-4p32eFoiyV-bQuA*_$P@h1Qq33V z7re}8oyl&+4v(sHqHc~#_XNLe5OtC7X1mi=Hk~J)ma@aQ#=i+VPqJ&uge^Dwt1a@- zE*x?|EqYuW#WTGB-Qc(6iRbR+j6cpjyXr4@!D{5snQSo1&tup)_99K?>m#-gAJli34MQO zgLosO6fUW2RGs9}A?)xLI}aqUD-LLgO9D$t{6F^JU5Q8IUF~5wWq^CcbF0bx{T2P3 zUQ5%131+B8zZdxDHU94n*}-|;jJ*{}RmjXk$IHgJ6_USV(>O)reY(Y%M`Mkta2j*) zRpRL|X1*P7=A%JH{(hKEYsz(X_1Wr^`6NHZ+^Hg-DuAQXV3bS7yPq95xV{qa^ZDvy z@gDX5m-JnS`wo&EZ?xuO&q{J>UC|fo&tGznI1@eIbBcG7tI)O}nYVayH(Y(i2Jf@Q z5W4rLb6;^9&&WO?FV@4Jz^WO{E-NK!h&bDLuV-y%|BtBqfZFsd4?91-SB*w9Bh5&o zUXhRl64i9m3^riL-r(2=lNcw*n8QvKWdV9R-$EMsw zb&S6fFa3vM=Wj>xpA7<=qtXkLvagAcs5SY`*7*CuR4)K^hriKC@1AmDb-BB<6TBmM zTHnTM_*PbbQa`xpQSV57V7@zfh#zgH$HMO?;vZXET}hAEP7?IuC~0j_zOd6<6&GI~?JNkkXUk7L+}?MUW3;Kco^GWq z(oLQH&d#YGi^(K$OS!K9b29n;!StQ!crOd@*LGe+8-wZlg2S&zL;rhH;~xhDeOBJoSXadJXY>kMUujn#4i5iz z;>icfd)?7mH^oby>GYp$jZdasJQIHNHy@1GjXagV-*~?mUg{5hTM%894zVxjd@pG$ zF7T1||NHT}{}^t5s8K!{e7_crJ{dNh=*)CPxv_P=BEIzIaEZ?Ru2%IE;rr_w`_}j! zjg+2yxE-HEQmkRxN7VUN0;Za85gu~z0@wr z#=AOu{HD0`EzNRMkaq*u>PZLxPmTL;!qMMu%-?I3pGwx<)41w0=R}X!b)qWqe!kQF zVEp6P!=--^KmLW*_mJFVz9awXpqH8uuOXkefTD3mWf0XZ~PV^7(f5$HDRsgXJHDpPrA0qjz;) z>aowZX4wF@x7HtT74MvQ)0to@zhqhZ)5Y!n>Sl1)!mXV>9rwD<|I#TIpr_>*JD+d2 z;|Ck@h1Phg)vk&+>yLhWGV?X@xi=@>)V033HQw1OQR&*KYF;os5T-a;)k9xum!E39 zPd3u0vcEr{#JeXc@?lZT{30ET#+PL z8U4>mMjy_Xu_b-^>7GY|=fmkb?#qSu&j+RbNt;=nv3#-%%Nf5UePm-lv+XygIb9Ye zT+*x;1S$Ottx;X*;b^Eko#IcQ?fk#f>r>I{vEEzNu0+vZ6)wH46aJ}S`O`h`3I?xl z-8YB-LpHBVYOe}Mmv#R0I`m=^XSgr+Ep9zCT3-}Q zm&NNZ3Z@&|!Buet__RKn(kFaTczSlCqff>6{xTZOLPe12Z$L((H^e+smXWH}DV0nM1D>wV2@uoivhIrn`TcN(p zVr~0-74f+tEVOs=Fg*!B*m{4Z{r_yEy(XAm-W=zWnfgV2Et>jxyZaBp_usWw$B=ti zKNCH%?GJ>d>^c_P+tMNaR;&2s#^uX=f2(?T{Qi~g{nAcK1k-H~-w*RX8~%Tyb^cjn zeli*Qm%-yZ?R`_YDZZ*71#i`>J0mwy;ZJX$_}$8AX-zx6GAP{G%C88Q);9Cx|qUwtPDOw}(%!Yppl;h-AzR zvo^Ipz0f}y%PzR`N0ji=0LzZ=7SzC!*HJ#wAV|Jv9e2(RAR?r(0z zD|+1#Ourp({zNqO?;7);HRk`;N&i+W{75JC&G?>Pd-KE3n}g-gw1R&S4!9RXFWZ0G zx_-6wy{rA-*gr7UbMXt|{_k}X|Gf47)40*UOcMWx_Ws`*3nx7nMqQZ>q0gZ^k$*WU z`Rl>;H{yAJyEVSGwcQfWTiJL=qGFs(hk*amdez|kf34_uTkFR<@vpYRM?0q@@jV?| zZ<%zH=c3Ks$#_1q)9ESQecq0{eK1P8I4q@?ZitJondttmWW9Wn4+p)EgqQy{T>nzz z-k;3d8&pTm#-4P@BjMGlbm-IRs52(N?$5T~w?s?$iQ9k-dQ}kH6}S==r(>=(+fgPT_w^j{d7?)m+#r%&tE4?gU6+|y+O#M*Fx(~O; z|1*5jui}H@{Xc50za97dOt>WHN|yVLozYMBs9pRg?f?I3@Bh59e?9s9-o|@*=RfQa z-iqbPkENZ{(qyv!VRO?@PR5`21s z!SThDrl)S;g4Q}W{fV7$e9Ha${l5Qut?$F}q(6_Q*vy+dt8<;1O5r==q3o|;?%TiC zDgUGP{||dU5O&HVmt(NFpSL#dH#_r>1xNY0zxm&v|F_@e?EbL%js%Of7d1HCF|m&R|SDulNf@oSyGAcgGozCzocFm#07Q>U;&=xff3UV)*&?e!s2P3&Jh8P(9H4{<{5s zJh=Tq(EE?Qey9`w^XB<(@Z1z!RT``h{&$A!Z*9!K+3N?wr}qcj_XNu~^!tl@R<)1g zjrVw;|8nsBcyj7Py~8-nTUd;OW{>6a$h?g?-A=R0w)mRsLe z#6{Oeb)u5u!FbAL6R&b+A8$N(3Z}>7RjcDAFKPvE>iPLj_XA<$`#YM?(UJ_`JX14*PRbZ4|h;}p>zLH{B&RNU6THIL!W+KeE;3y(fit~TG3yL zmfjm=Ue_7XcxE=HF5L1!KHoThG@aG9;Q3s9kKOQO8pKnrc5{?=Ff2J2?k`UlS=(7{ zXsk=a1HGp&p4NG7b1d&O2Re@jTghLCkAFIy`Lm6!PqMqJ_U0o!*$gv-*rG;qzH5>h zdON#!V{Lhw7j^b4)29|k`wMz!ZX8D?zZ*wSwBKXldwrrB=ig8JKV7ec6JhF^-kICC zXJ;GHolbW~Cz8!a^FbZyjPQd~`DxCzYt>aV;^ybV@pJKG{R$S9w=!bvpK7GL!>^}% zRO+nj%i&9LSJJ%2ae^4_rMO|4sJ4_3*!bY`6zzZYNmeCLhMKNbZ4EMD># z(ZF3jkG4`inB|?(wc-COTi=_f^IjSpF6`Xbgrk=<=B52x8&sFYb?0V}s*yO-S?`ao zb~Wa<*1av5?uti=Ht8BWEBsrOR9hB}>#gO!n&t5n{hjATU$Z+uaq)vm<(-|zj{FU5 z&qK*icTXJe^>ng%ZgjRN-f&@9zP>TnrE$9zdTC?KO(yfb>3ORI3D|6H$6H&)_W0WN zbWpLY`f)Uldy9Uz=hNYtI-GsIClBVfFz_9%=Y75YYOlWr=r)#f+MP8~(dK{`SU0>vVE==)ESoyrrKn4L0+e zXK!b&Lj0aqO#l2$IQ|#W&le`0{ZjOb)<3!)mJ@)SC`!9NB4gx_~E|!?;As%kDi2l&-e7YCt097 z{}p}b6|LiE``+Jc4E3h;vY!bK?hzzIS2X9LaPr~y{FPSo>1YN&`J-_5z;p*mH7Ou)ZekO>1r?X+x{c&shXlMPg z{-O)&cZ22D_M!%m4tqo6ysb6;?bh_c*89O``{iK$bJ5XjgNN#LRb9`9gLk#xkA_$3 zV#(3p4jz9HJitW#SwsSy-%r_y0P!MpXKi~&Tlm4KaTc)t=GR7PW?Bg2#{=Ki zo<-NM?O7g7k9Yby4%`#X|5fMm$#C}Ljr*xylyE^VCadtTkS zysg)t?%dwh7<7kMw$7LIsmqcHGt$|fiq82SKi})0w*UVUmZ`;4hpH##Gwu6mFj&^v zUeovG=jhk;-ic1n#7EDir--?Yzb}s7$cHCe3%&HyefQ(ZCp9nsEtt>&zT5LmbE#=u z7EG^=pZ-|0h+Dm<-`^Qbe!THs6aMoQvKmkH*{6H%>ARn6<$uo%55rToxIOIY^Xde?)ZY0AKiawdQ4gQYH(KlC&9gUn z&JBh-OTD=7zOL``ZQygS=`VK%2e-bhi;o&{dpQ1s#&D;I`|JO*F}@HkeKiXDVYI1k z;8c8Y*+lghBrle>riJm3dF|P~>nEf46O)a0ZR4%Yu9}$)l@;;ObXKS0@h9`?sN&$jAL!>_XuazcB4q?d1inW>u%ZJdOgUOXAau!%0=`Gh6$a>~y^OaM0H& z?D)hhpYHsB&>0!mZPs7yRcF-)g7X-cRp1Vx<=OGeJ9jj?Bp$jveWH8dTl=fSg=-s^ z|I0tR?pLC9d0KzexqUP~@L!wbuEu;YnYyDD%!%jeL9XKdO~K>c&GGJN|DBzaE|Y5W z*lfpx=Mz0-6TVN^{lg&rC*iGpbNo=e|7R(#Oy=(}3u z*05zu_~|b6UE$?{*2OnGGre?9Jam5YdSTpVaVybze_8Nbk*r)Y(UQI(KOXGx`Wt%C z(VXyeXZssBtE)4e(OJ)LZA+7JE8Fnr8J-qx@{6kbpUJYJ%@R44)H>I1vpWGi4+Lb*t(@poJ=Pt;@{Z=X zEzG#G^I6@_-00cP_wu#GR)48| z|Lw+kU-bCy#(G7cx@^+kb|vc$gp0?+qgm19^86az582xOxaZ5k_37ZMhJNFOgY{Vp zcFz2R?f2JO-`{V~;!d{)pB2Gkf9rZEUgWNkk91D%|NGtG_|evkUhfP4cl6%uPG3I4 ztwHszt@Us8ytlohd$#_oI-Bd_B`olxox-#I`)2g{$-d2p`=KEGM^P=G_IDc1eML@H zAOG8<%y*=dy)PZ&m!qop_wIY6*Pm>iFAopgS)?nY-XdQ~i}++G_4}RIzm4brhxpT< zwCArj*5lc{>Qz?9>2GP&H-)J`8&`RM>mGS}^_I?_x+5!T!(?UL-3k4mn72N}dfA_t zdh-2lJVTEAXW|S$%tk*F*I5;9-rPC8aoV$dg+1xbY7w`jL$GZQ#uX2C!h758k??ZV zgUU<%a8UVZ&!0y_?o@stI$+-{4gNf~FNtU9g!PUvL7pa>e?x1&Em*q;*NtvRI+G_m z53>F8fDbedytsyT8tK zKF=j3zmZqq({VSwDgPkJ?hd^_Z~U*eP8n*4i#EycxvhV1Orv>M(EVGD`3v!CHOz15 z6E6xsS7wEw`bRn=HqyuArXOk?`8pqoB0k+%_e{QNm83Vc_p6e@>)Y?D#+uVP=>@SP zoUd1V6nA}(T%kja^=Rk)&3^i95dP!N`Xil>dda&QbL5a;78R<4TAqF|H#u^uG1Rkd zjV7Ouw``3rcZW*{+tu+PsawsWWQ86&>*7zImH7>q5cpk$AXfIEw$^nc3$)n zIdpRI`SD&G9o*IlZ3r(^^&JWO*_wKZd_A0X|KWcN4xj505B^aztLi!vJlq9-b#T0+ zQx*?-N0=)%_J+p1qp{>huAelx$C4bPDo=J+o6;NT(EA&ER(xb-Yt`>?V=KBLNZ!&( z=^}YWXMIt0I=|<5c)v4Wk8G;P+m8yP2U_Qk!u?I*{-KHX|8sx&Xk&dQoWDEVe=cqL zXxx{lV10DzUhvnq@^=KspX#q~joZ8;t@gUssPfQ#r}XA~qsK3$`Fy%@JYVXJ?v6U1 z=-hY|7Ipf=Pjspn4xMp(dg!KX#TOcPQ~J}MFisbanf)}Y)#~W4Hk93|{*s&{>t`0% zI~%0W_S30OP#x&Z$&Pz-yyGW=;ahs|4gF2MwKG&Lbu=pB2f4cy|8?i_xuEg+Xz9y6 z-|lzy%R3u!emHq~r~1;M`ugPP+k4&>7kp=Q^@h&s_T-AcFOBb=NUn=}e77_IN|61l zUik~?QD1NTdt1Lcog+yceXTDG0yoAnUlO*yGT6FP=XKHktD~itMoVJm%hSS-MV~5< zAMF3%3ch61*IJ|eRP{2l^L7W@*{w?y9nW}eYkF(%{6y;-y3>ht#*xpY7we4Ry)BG- zEF9twy(|8%$G}&E?>#+_#-}z%7Y91kxvfi$)iv>_+d8+G2VZs3uj^{9823I+$U+VSC?SQSmxxKOUEO>j6eoI*Krttn%K}T<_^u}NlSDY8ctY|fEK$CyHy7kdXmqedBA@WPO5mFC| z{q1OHCnG|&ebS-686JHtPHnf`to+FZs3OY zd_@>?QR|%7nCd^}4n5jgeYY{)CF^cmeOmaX_%aW~@6Ux-ZnbmMkRI%}H?Dq7_O2V? zOM;Gg>H5Z9n7neY+KyKHSSNCKPpQqF5g*tb_TL*!#TMP0`6r$C#~Y8{_r3Pd^Eaz?t?7hr>U7@}Ub!pv z7sH*u)!N=2-s_5YQ)8;Ylg<245cpEM-lv-36YcZQIurRTUx)NS1LYGCS z^zPH~kAvaoo^lTCLO&Z(78V$L*}dVjvtt&;Q&#k>ntTtB_w$a{dAw&%_^z+fWu5W$ zLH9+Cc}sh~v9SrVpMFHDIn*vb94znacQ(YMJ6_&hHD#dLwtXE{8et(jz)Z}*Y7p@SNiP>!Q|`H*bCzjYdQrQ z#4U|?`^5R*&{^?m{X}E_cz?Mw8oIjuugJ4>Dy`(%o^L0i^?LnGzv&t84(e~Un@5Az zjv_)c!|n}Xjz0N!2G!R$=8p$ob@wli+u-+W!j#!Tk7xM7#`{{>_{H$@uJ-?}p#8(f zQyr&MxoDS2|MiV?XFvT|@5s-6^<>lSY*yazXXENm2Q3*>^0C|oh3?@b8$@QiTh~^{ z!B~Npg)wV8tCjr|O>th}M{b^u-?8ge-OUQh_`Z%YtkFe{wIDvnzi}d(KbAgvIGi{f zG>%1Ox?!9SyYxQL`(tkWUZ0J%@zk}!;KCrXJS?6w@u%IL2OIRut@l%n@bT9EC(+lZ z+rd|o_YcJLwom7NMbvXsXM9U^bX$Dn)^w+9vmf|$WzXtUy{}bmp7{Oug6Wrn?4S24 z#`edZ(`VYjcUu3m?f*oyxuS7yY#e#wVlBVWJ7R-k8sa)HYPV}Tcip012%7gcmOSyV zPWr=<N>NMm>(>af|%G2?Y zv+<`H>0@;9h0(nFyE#!Jk24EgA1?I_%i?$QqW@VFe!jZB%l^40c*_Dg9+tk)xDU18 z?}S}njIZL)^2hJ${d=2>KTi&hP7+syQ+I?}Z))A|44&@^4nG}6yd~apTW7w$^|IP= ze0cvC!QvA=e>&;B&jsVXVchH}o!@0a>p(NJJEJq%$VZE_?JthAKU-{n`G5!Gd-`o1 zZFc^G!*RRALH1Dm`OqXkz8=ofA@1*0Zppsr;beQ7(SGMQKF`tI=o3}SnLQQ!k9SJ4 z1NTIwDxYWc&eDEc7cN{8wqF^~zABz5lgT}TOB-Q!*movgeJI@8)$6ukBAUOgRqg3a z4u#3|F+QzXt$TLsp4+&y8~t3LRY7}nl3ps9-37Iw+1AB%F6>#-&nmFb1o^{3Xh-AO z>E<3Dvco;crd_#}cyT9jMeDhJk~b@o4~xRbS>g7a@EmUQSI_BuN%aJ%B-;IcSK z%x{0{k=^gAPHlCcTh~t4^;wmJ;`sY|cWa;E7ki@Tkw$!?x$Je{bW+D#)v;*|T`I2Y z=bI)i_;|d;9poyRRkqG-taDM4$jkorv%6<&T>6C|^+HhE+&en^98Q;%6)-Q}>ZUtg zBCcx<*Y^EuTAdul4RICS$`?i(XR=og=ab!9Jm%RRHEWx~yIoNytXJbSD{PoM={`Sb z$KUBJ)jEGW3etD$@!q3rZfhr^4rh8m4d&=najKu?37iUI`lY}I*d#)tntx4mtnYU< zzL)g3i+c5~xjiSF9abLnA+%@6(GwoBC+QXgh%w}P;Uf9U0ZD?k4yjH{omV_bfL&fO)cHlmGnd!ZeMf4-8o^!tX8fs0k6*NJ~yWw&TZ6L!9-Wd5d%6C zt)C8Nr-J9H-aFi0b~HYEexyDBs8zW~?EbjdWAUCH(LBmfzi?%E_p;9Gt>O85Tjl$D z-Wv>mrsplq^wQwCVVYU@j5*QgtmyPydIDa|@6g>l8=;s&WkTTi!1xI)#A7FN?SM$HQ%8iaAM*zVmTu|>6YNRQQE?IlO7L?!^lMw9?|ppHW!5Te3G-9 z?PTjd)*enKB~DIy$YWvZ^Kn8MhzHx(j6SL7re0{5w+lXHKCm~nv)A`}XX9Pl$o$UB znrUWp9E!qrc6RvmbItQqJ9?p0+tyll^t!9L$P4kz-Tl6^)$f{U@kZFXmVws+Nb zA8P0Pt#TLToE!*d$Knx3`uS8`X6{6L^P`fJNsit9_4zoNK0eQd|N70jLFRCCo^HmO zQO5jM2bwE_xxbPwxX0Oc>(P<A%oFFkAh<0~X3WnIbT%LA;hx=74a?gb@0C6B)0VbB+~B!jrM~;# z9mP$eO+U`BrzjTwDD$xtV7yxk4{x2IRnp^4`m2@X6K;tfZltpgJ_Ulp9t*`>X| zwmtK>@=fEs2V3Q~R{3<4@pvnHy7ApHsrF_^GpX`&$$NN<$wc{n)o(x}N=IK@iD@E>a)6)MjqV|GunOOLJv zVf@T=CH+42X+NA_a!<7uyC$F49TN>7jxzM3JRHXAhDmCmTJKm}fN9PCQ0teGENTq$j;b5bk>U;Cz4-0!2*Id=gE{Zx-l+SDLCmUH8r)Qe+ z(Z+wE@#Ud>FD}5+({po6@ZHnjXEfTX#u7JsNiZUJU)4%}toQYsy=KA#@}9PY=FWu0 zN19=O7$z3FBUw+{dlhlq*H18Ck0!Y<90@)0(pxcOhXK4Dz!+_n< z(=(0vNHaXzgPxx0!LR7Lhk8BNgLkiLWFF5Ay}EgE=t}dOXWq0|xl8mV zb95vwIxav?v*%>E=;paSSPuP`9ksi4Y>AGa3nKdW(RdC_ zl4pKnp6NS>f*1R5OY7JaN1;KAbdt38!l&Wp=PQzfHzf~m>1R2+m-eX(I$_yAIyfAP zcIc>E;t)?2&v>Ng@$?1#dbT$+?>t)ohnyJ{dEns#c|R{G%xM>MCXT_je>h3-z3B66 z?d%(^(yfUPOb8R@J&w!iP+%kMF96ug^J>0V|fBe2+xi3uJ)!e)KHp#Xp=5u|Dp<=FlesVwWk|8`Rh92 zt2^r}dUSvw{Z>zS$S+P)qW#iNH@A-$8tsMfYI~Hdqv`47?~GP6r;}LRK32Ae6|HPZ zkl}?Iw&to}cX1D&Iefo7s9qk%=?S7<@S^OR3!9&nwW9aQHs4v%T4f$BZvV?W5imU+ z&K&DG6fNv&B{J4Gx9?5OCFY@`7NxT?o%o_2uwUG({9ZcYtX9UGu)V)->Yb;8_fvi1 zx!&8-F1PoI-Mt=YoEe?B@9EgIu5sLHAxf(z=*q^qx>s`evewGhyu8nB=vm!-D}#bA zzI4;W{oB!+o@kx&X736jUv8u?hUZ`H-0zui;qvBXsfbjoep`?(bS9p6B){d}9(C%>})&+UEHNygvP-gX5ARq5OMUB^9sfA>Al?_E(^ zb!MxAnf{~fUVZ-LPsmtMr;Q`+=nS?7VX-(7V7lJ&=9BYxS+AG&(`DhFr~|y0vFHr( zI}vjf%F_ZeyTU5G>R2+2zXaaT4~FtURz%0c7M8amGoL?V$#nku5VHMPyP|d{!-2WM zd`Wy}MKrHga9yuri|g7OPD{sL7!}AU;=?!^ZXFI5M<@7P(s*JvtAoj!)-Z#0*_pL&davFB^OCr6fF+2`i;ol6?y=El_vN$x4;=s};ukW*y0Gzz9=U`!O!T!N5A>p*1^Hm~q||%SM_h_`1EhvwS+Vnw6L$QOr@Z^DOoLGb5mqoeTj9FKMm_0FC?v9odLb2K7e zk5lnFd12>*kK9Q2pqz;>otXH;jnik~;>qU2_1JxCPuR4J)9)?_|JF=6`2Bd?qdh$Q z`@>?|FVDuseGgyNdG4~-t{e76?L!{gqMikfx}>$?$%~p7Z)c%h+~?$ktPMYx_kDiX zy?sI#2z6xl^?a{2e7EPpMj`+APOCiG?C$o^S5&T+$i&IyEq*k!vyvk{yHAMI)9KVx zcvNxkjnl~XK0L`HRvZr_t@A{4)81xw!ZRoB_3EhPs!scgaQyPH;L0;L0I{Z-&B-%2FX<~vy*v!PB&?JNe0BSl=M8UE%kifSS-&+|zcam7{>Pzk zUR~F`aEH7cCvu|Kx&0G;yr9vCSBlMOX8O$H<|dikPqMI`Ep3GZAKBL82K>Ta!J3bV zy*E1b9}7#Yiyp+r;AfLVt;@ur*370l5eDJACmTTy9hoK%U|BdoH(eDj^53kUC~H^m z^AMSvh3t-vS?!lCIWPDv=;86^H<{7cEGY4hg~4!XFykZe$k$oj?(k~7k6(?YxTj}y z$8(2>D%Dx7g(ShT$@mRH<)ThNcgmPn50oR@S1k?vQCUXNFK|X zkY)5jW69Bwhb#gAK@Zh1a;mM@n^GRENX8t6$743FjupqtWHqxwiH9Km?`_zG4 z(6grZ<;lvR65r(OQ?r2Ay6c1%f^+Y0)XmY;;}g%-PyKWc{fV8wyVnLGo2_u%cB0T8i4O=L$kn;OM}V!Uisl+i#WpBP9H4!F8N^G&_IXS+d0ZEv?gmi zJkiGOt@RaAwtRc}*KX9jzMb&~F74q}cTYJB=l*c*+dbcGuDg4We?`sU3!Tr-UP;K) zL5*$BF9m-7xgUjB{AmAlF+LkME$kb7nrowRaaJ9m+)r>@r_Oh3XR?LS%ki)f7C#wo zxQpcBem3uxem@-VnA6Fu?76f#uZb%8&)0{4Yl7JYL2hxM5F=te?(4f-gEV^*H^6Cj z_wXC4#8M5!`=E-*$>Bo!p^{#_Tr(#6XJcN}>90y==*6(G*y)^bZ^0B>lhb;A>k#jn z)2w9K3!R79^N7jLNKZMJpMG|*B>I0K??K#|IJU~Z4W|8Pj3pWi-bH<$nTXb$x3YF-u=t4_~fwv608whG$4EUeN= z?$)3yXYCbz>c#P=D>@-rX)Ih(+Hqd8FD^>P%f7p;F)!=WycY6eE(mk*hcnYTZtK*< zthV$|e}?Vta(BBw)c-}dc>PfeKk4=DKyB4a+s#Yb<&C|1pHC3AiLmkQ?PxVRDL&K6 zH}&w=!A_MF^ZPU{Z$%ifI%x3i(jDO~TkGV6VOx6zZTHS^3mditZy3F;k!e{@c~N7I zd!g9O&nK<<9{4M9g9FoP&WR>b{=wk3EqZ;S*xKf)H_Yo=75$PwL`>SvGzw{`BX zXrHg>6R&FJKh}BjpI$zlFWP6fig~GBS&+`6-!$%jDjjcT^vlBzw&IDWd)NJ8D3llQ zTq~H<|L1iIVr{%;yjSdQae(o-!wP1y1z9Oann#RPXM#ssKbm@Gg7(4oMT+Rvp)cF^ z$?kk<`1jJ*epBPf8(bSLi$SUL8`g--C!QT#S*?j4*W!IAJ3qcR77+fVgPeE~Up_uH zzx{cI|L4L08UQ^{403xsYD*rWt?A`EvI};H_lJ5<1comSx8gsh>8|T9m-em8qn}GA z{J;f7h-Go0yYq2(`2?bExE9|o%+oJ^SZXudA)SdnxwlbA@1teWA%7YjnZMro%N~2G zb9o|Ysjc9zqIn%}eh|92wOt+F-y9~sG(5PacdraDWKr?r&T1Vj40$;6M#LRonE1|- zBrIRw;Ylv>lkMuHw*@nI<~t!ucqKYf759cSCVTWGvh@)FAFPQ+3&AzCbd`W zd3HVferY%_s(7mJ(_C2*P6lTm(G9?f3MKe)RWF_`aa?A2A|bvT3VV1@oKR8QX&Y zSB!N-?~$}aMv45$Cns8eGMW9_#F%4BNy-xAq)t zpL7q}>6+%yf#yZcb8}3l`tVTAv~ z2)=T$v@>ab0RrJdLwIV%YdAcnh@Y(E|qiNWr&4G5z*RUz5iqGuq{Mlqjd*o8; zQ^9Y!x|OVMSF&?t?8vBMjpE9<-RR-1t{%ScXs6G0g6_I~B6@qQ&*8a`v@$lO*tt#_ z;;Q`I>wEayZt479(x@+KZ?`u84ef*9er>bM8l016BQNA+7~`e}GI7WvtDv2s*;5m* z;>D6*wX@&F=XVEN)(tCRP9rVqS=qBHJe9LSVyjPfv!UBJb!((Yimlz-H{?3qH_`2! zB&*tJ8j;iC6Ft#dPqu!&2u}C&j7e7z*}5o*$%R4}gImm+e7OUXAnb!TetPRy61Jx_1fU|%Fb-)>FNk&Dv9jLz+n^5 zYZdl)COnrH#-iVojNjW?(fjlRIuxHE|9QXFq4V@FYiEm^cX4B_Y*ZG`ym-XSMh;!JW}KEdo_`|?j_2RnWQw+^`-Tla_koju>pp78fzW9UbrgDQX9qUMnY z#4~(BbS5&sw%NtUL@C?@=Qc9_a+WkZl;(6Sd~*+*yN-@$za7nQAiq!NcDjswDBf_{ z^5Qf)1<5^~JJ~hYgkM)C?JuAHuZ#P&VZ2VPSN2>I1;|ViB|8^1SkrVj&{N;|d^EK! zKk@F#C;Y=;sNUh}V8|90S(rU>>RG{$@0Fz{AL&5UbfCYgk3JD!P#}HAdvhe2k@4)j%n(whzHuC()9Ju9%NnX)|jdiL=&L98PqGqK*cFH#_Us$Y$bc0E97-S9VhU}i}ZJiw& zWeccyx+okp`p8MK(#7G`+UB7n@d4ZrPQe550yfY3R!+|1>mf z#NR;b9gNo40V=eyUUMvpWey-Chh?T zXr}JhJk#0pi_eH(%!|*ek<(L2tZVo(_IGOP`TaNidN_zopHq!BBU-hW;T`3(xV(47 zM|BBTi>s!Q&wz}kt+EDXHf#yo9u0!33cl73zt+CL(a!k3pPD$kTL4Gi-i3{;p9-0A zdGOlMUferD{}UIN$xr@?Z_2mZ(|-60A zdD+Nc*iBB!?!uM*^UBWWj~)@u;rSJT1-qU7dpg{Iv`1fPF%I`6%im$+>~8*Jt%E+V z7lV$dFO4Gah~93Ec3#xOC$=>B$>u|mvJ~V|x$E=(PU^v4pKd>J*xz}J_-aS~HEC{5 z;wSWP9zypV@^9$&wJKl7+VF0DkB(v+IyW7ZSGTLB6V%}{fA6D{d_6Md(toQH)aUrV z-g{)?dBbNWYsbAI@)USVQKEku)m+_9jripYOy80m<9cRNk6aXmG#DNq$8GlHm~Zv z>!vvu^z*s+yX;Jvpr@OQ#5fX+jwEOG?$j&lOf^=ss*BOP`)n|s6&>)a@a2xUihK$- z#>&Q7*;?>yeBqKH!Vi3TtGF@<-Ox&IZB?FIdjF=@V!!NiIdQV6Hg{%^hU53P>%05; zTR~sn8E5xG^T|5p;a2lO{=jLzSe1nGri~>|Ekknn^xR4hLh`rdnzHWP(1*XlK)S6s zB@fu}o$%bSa##;6FB$2ub#0%c6J8U}UfT%cyy#4BN@Kgzw&{`=#cS5)t7lg)%^s9T zH7DEl?6e0mj17k`&rkA?JRhFcgFWJO_Q;1hvhzr0{U+D+Pvt!xa(!^)YZv)p`;d2H zIJ}&Xb&?NtmhR2GuMzp{H@618bYLEyfKK_m)bPpe<#Qc67g)&oqm9sLL;_{g&y6C+ z7{_~+JHg76p)j%(*iGm9q`Y)=45#3OJcA?YfTyyhW`%q6Tl>Nu+8?@E**hu+#GB+5 z%uY9%lfQIUwzPUt=YKRhIub9JTdD?OS1S{{Cwa{!3rc?5@Qm{lUDK#Hgb6Qho;$;R zH8-#7JvqTQ2Lt&VmjyGoq05lxt$C{Pzu!FH>1TKDs?*i)K@J|i!7s+E%*%#%@Ys+d zbV#~5Spv3p#GkXgebLn}oc_PAnTOS-{|>EPyoNlMdn|uey|k>xeNh4JW^UM|i=7Ov z>w=%V%x`NHJ$6*Pkr>7#IYqSPTs+;F?8+w_LHAX9694k$#~|x($YqBM8t!y zYVbQUK#l|bMO7AGfnH#G;ew_5{%hLT@YgQs)5|)y#o@Pmb>*GUj^Bx|%}QRneTu#T zKj;p}TkX*#!RXmUe)FuZXcuY{Nk3=FzoIK23ujc}T+oT}9?%qIVc~zX`}T;hi0{dt zCILh-$)$D8sAiR(2j|qj+}x|$Z9X^oh-!iKwR5wL8sdjLhaXP(rjN?#jVd-z9?DPK z9xm{k%0)QPcV%>_f==aB`{lRjytGbA4;4nKy)Q&c6{M5*HH>6ZzFK0v_;D=x29F z^SrhlzCBpIqxoJR*1xpVyS7($BtJdh=X1@8Z|HS;U!yz{{XW-NI~o_SB{}d`nja~x zOXAFS(4tz~sn&?=$+bAz&uGMZGMz~d{yu)I1>uW+S4PmgKqjorB+_r-rB8|r&}G?e z8=Lc*PWieXIlp`oWXb# zL}&Qj$wB##>(c4ufvEYvJX+mY{oEzR;#UQ;Me&Vu`Jj0@d56WLw+8bUn&*XN?(^aP zrsT%H@Ip<=%yf6&m!*ADM%ajn(DHeQ*t1JJ6A?J^&<#Q6vQ{LYn=D~R%G(%G2{M?6 zLOmwl#CLG8`E>Ev(cD`)E1dvGL=3L5zxfYzgub-dWHw#iOfu{)?GYiD{Ry*W+#E^+ z5`p1g7JU)raQYtE6T71z&)yzBdzL-DiocT2g}fbI6U24(ev_lCPIG=VJ2#zWc5tPy z@K3OIWv9u0XQj&|;;$6Tki+8kA-qX;Dc(!366@x>b&9-mdM?u{;n?st&kv%Dg6pF8 z=hj4VC{j&q?O3=y{H?q?d#00P>8KSny4ja^u5=W#T|V}Ud!=Jt(YT_dG*og6=E?2{ z1GcS7o99}Gj>U9;u_2KxnXR-E@m+B^Hz;muzib}SJUKD6ZZc3Mf%vUDFMSr?(7NB$ z^V(*8Nf4u}yFH!9oz@5@WYiB^$9IFv4?3rZ!t|#m2`CF>)RnQTXg6n?_hh_-ufOv<~(MU-QtPMApID$-{Ql^grm)+v|s|;zzwN9xtPoL{t~Y|HMB) z#@*OlH^sZJZ@w#=MMttl%|wf`bDAh_B33P{hsHR374o~pIP}!FS23bP(X|?JYf(ci z>N|R4U7mz=tDU&+E1N+M%^Ta>8(YntLHC+gw4vG6j`F(jG0HRA)4KIsRj>3^`*}K? z7_a-APri$rEM{gms2h;cMavwPJsV$S@%kw9MXj7pL{Agz;s4|r;LoJ{(MF!?dk^-P z`{Q7b#1~$O=G0p2AH1~htZzIuWb%$S21mNGSTTQ*+zAnV_)fP(r=p%TO?k$mU9gPX~`xhaJ%t15A5 zgW|>Vf3It2Vp4LE#CBiT^P1LwN2hmFxIgOWcyQPC7n+s2K3)!YQOZH0cg{+V4H@=u z^E}jia!hsD-V$!^3ie`ia(%=m=_ zbDeGH@Wm(A_U^@v$JS68tqP3qPXtXa3mCCYSh*u>z|Y?E4-8q`vSUWvRlWzyOisTn z5jB&drg)(oIT<(lHaX|@oi}^q#^9y)Q0*&T=r#*E67Zkqz?URjK?Iy039t2D*H;VP zi2=}Ko^K8{^275$AF< zC@`OQ4DPA&7dc_I>iIeHa@=aOA%3$aDYB-M*OSg|7pubqkuDjS@{UG?mQIP5`Df*u z%$)Su$AY|iFMiTTf*agW&3UAmby84yxh|~H&*8>adTZ2mXY;?TamChN(rnkYhAWd^ zyko25CaR0%f6Ba2djp08zjsDOo5S(V@${|v4tAx_?wj;?Io*14Yz^k@Sozy(_h}7u z7P|4q&gasei#sn|T^w(A|A$2^3ANhdLOX-Jd`lgsy*Kjx#CPQN^1%#ka6n(qy4pgu zA}50}tz8|_uxRw373&+2)CFQxaiXWuyFzXTZzh{Vyp=cNRB)y%@a?MQp?C4uixJKZ zRyrr(zhYmaw^pf!LtW^u>4Zk4LN%?9y}N@FUU4+ckax0R@{i(1&rIu(*Cj)W2c36c z99K1=JL$xY=}HSb8?htNLOUb}MS$EqOTRc3{Pkv%e@Xk%r*%)H$KFh zzB`_`yLZu&9B=aObhfR&;d%gGket0Ryt^>HiN3<0&a20hMqaY>#B@&tFEk5Y>?L(` z?A*EG`<(pSVzTpkoj2+8d{(=Ig=|n1sm5Ys*reOVjqUyB_I_PwC;}!nM)#xFusw_+La5+=)fklE!Q``SO<%H^5p zG0$$31El73(Zq-3W0QyCRPuojwhj@Xktro!w`AgfdJWP2#i{jW5hG=pxvPSIi`SFS zfj^VqQWlEbx+mgdPsG9W*m^W+s-F>GJ0C3@8_tiKDRD4aLAx6NU@(;9D`rAg;6|cf ztD4D;%lut9+sH+9pSq0mJz=?OWgQ041KJSB5?Rn?Td&zmI|&>|RQj5@pDbe>htmSD@<+{^OS9>pBtk z#f{_{G5F&?!AYnxBCh8i|``Y)QE<>@a=!~F%(03R`( zjQ+$cB4_J(G^H=Q9w7WxYL@u?)Wd+`iq1}NJ9sL4ln+VOwc9ZEg$sM4-5u%6@~QOh zk(Ec!Ls{~#*7xv`_*uprn&w|*Yw}9U>CxqdRgL<1WJj%{ZWgLRhCg;za1`H{(K4@n zs(U-teEh^C&Lj`yd^{PAJ`^nFVm#jS%mi0@JKJ8iv}}~~+19coaK8Z?x8Ggd1GjbH zyCSTW8GU&=&gK2Ao7C$5#%sib#8;@YSGDEiee;p_`=jZ(c=DaGt@rfEpc%Q^vNJ|4 z9<3XW^EJbN{c=afi<%7?g2tA+$*b%Cy3Ob!fRf~f@UM{@ykMgmR<|m324brCjQ%Wo z$I)BqN9@B3dlm;b78hQyvqzq&JgP^U^MOYHQ5g1gvu>Im_z&lK5_qcEb!e9d7f!2V zThTl#<3Y=k^^23Yi{p8G2=YwXr0Q_=5T?V>_D396SG)(piEjtLFHXsy+i4|8KX^Ig}vxYd+clc3{S_}2Vfgh>hzr63OEyQzqVCd0{+9wae>~NoF zTt+F}+uu+8YeQF|U(iNI( zpd)VyE7(xt94|!8{Ny^f?~Jn_n4~f<6RsgENE|`+q+XNk>Gk2=CCPZNYvO_IHg|%Y zoM7mVAvJ(x8lR4HVBh|N(7)}$XiIo5a(Qp{Hbh^Lp^)rPkZ7Udpbk8Un2Xu-RO^{Ba)c1dm%5$zES7R zR)douM(f}`(7#3$W=o$Q^_t`b{etI6j_;~4U*uKhfynRSF!V^{p)y`LeT`@fZvNif zE4z^IP+S(xu@9`tfA|9_g6CZx_R1yDWk=7JD<*s#b}x%VR@(5V;4w>DsU8XJ%uyNX z?jSZCPJ(Cf#p12>kh*L>im=Ek!px)p1Yiz1(ee8g4oowY%PZE;Eb zc1`r^zFM_8^Mls>$aWya=xxH$>`O@jo>M6uJXy|%JT++GYHCOkZn(K=jQGXvb!mI?{VtBUp zH?vGu@&kXB-Gkfc3@Tq4cR_sq|eGZ<1<%z3Ws?K`3YEkIOwwY2YE7d!$Zx$4pE__i=;Ye>*f36XSpz{ zVbja9b2Fj%#@S}zDb?4RPN(z8p|DOr?*CCg4C{YYSknmnhN?K+{WLpy ztB0t5H#_5bTjGH)^tx@5lcR2uPeSIQ*pprodU)!0Og9=m?jH`zpKf;fLMoW`P$Q|y z0UkMC8z<&oBF~bZ(U}#F4<8_Va?tVkuG~@mG+vm_#O<fR#JChA!`W!+)p; zs@ep8e>@N`YXPFY_Ocg#G|T;c(GJ3k)`)r9c` zl2@`FM;|pA7`zQ&H7aBH)Wwb2@|Sd07e|r21bT9i?gNr)d}ZXg&tq+SrSHj4LGd(3 z@jtO5bv>$FblfG82XCjH;(2^UB0$cQXIZBc*&QMlqo#}|j>po`byDFc(D_c*9`0#m z^sl3cI5p3jTtT$8(Rpr1J`9sLZ*>d{MdbZ;d8j`bYL-=|uBe_WnTP2%#N zIzJu-HHo58bEA3LSoW$;msdg-kRGOTLudix{tS`hVde1+%1+QzkZv(Anq3fd(X05I zn53wa9txnkJK4H5xwkD@N57;qt5X^pu0A1tI}qIIdHgH;f(4l^>JO>|hR$4W#G!U2 zDyEJ{pRXkozZ%hG`8MpsMPU?w@7ZWo{nx%8clsWT=do{8!P5um1*5AT?0B}hADte& z4nLO*G&|fL{Zw{Muw$?C@bUHGZ1&62kI(TG?Fn{nT;_=%_sGjF8y;t#sKtF! zX3^-{aH4tTCBZBnb8-fc)B%``y|5YO9I2mR8^Ly+9C@(VXQTE`t(f(ZIv|8nSphsQ zdX}*eRe*>`$<%Vw@l}2I>PEe)F|UjV=mdRfSRjK>#{P^nF#gMJJ-Wo{yu3Bc9T_ul z8kUoVe7$@re6VVzh82HqS_yffUUb;{qDnGWMAm6rPE8buZxkP7ufajFSp5`4eq{rV z&JgB8W8~|wd2#wdS)|Cy;LWFYQM+m&|~f?_1IPqf3^YAeEmmk9S|B zTptmqDx-iW1&@$dqOMY|BpEgC;M>*=JDNe<5(SNX$iaogiTKII_4x*_Xr8sLLoA9# zIH-<)N3ND!K)eB8pjVD(oY|3J$1W7>lO0V*lKV7jCPlo@cPx;>qB9J9$DergXu&ci z{Kp=XTcnSxeh~D2-R^Yck$ncbYBqe2PC!SIr!2=n97ql&8%_^nK3aM%t%&wM{u9j| z(cO`gipz-q%W+WyA+Nyw2eT$S;MwNi6-A?Wd8~9}Y-PP*;6@FbjhrTC=OAVO*I_LYy zir33p-{Q5zJ!lTdXrHA`{bQ;$)j9w`d ze{e^fip|X;@z4TvX{QOR0w-(b@bN|HUZiKm@_4$Mq7CU5x~6XE6ZA|zT$$Hw82rxt zR{RkMlE%6?(36g|CbpE->tx#zwQtp1qbDj}E64kM{V@5er|Z0FHP7}fw&A!BVnkiV z2jr-z&f`%c1>F;%&i0DtQg;h~#8A{lvjNol>13-Oiw;I7qes9#x%B9h&z-$2w^Bx+ z8;#hXexl{`e9a23@{ndm?RG)tvcbrVk!b=87X(GV7QF@4jj3g#$(#ufLo%|7Iw=!$v%o)6kT-zd+=;7mH2s8!IrV&qJqKHfzmh$NEaIFLt1 zJ8KSBkrHIPiXPrq5h2=yj>2Onv`ypi7SSLN_D`m*tP=Nq@DQjzRSUW+d}sIi98Up^ zm7C?vXpa0v^iv#`)vm%-&DZMbXS$|(Ju*eEA-fc>7e^d>wFzLZ*xQq(@u3`*ii> zy}ubAYnRSZULkHHDxnvkoC0?S@L`irav0XNdv*`5?~W=y4cvo&gNH%Z?yyykG!B`` zdZD?{Z(ts)U$rEB<(XeQVV9F1bPKvT=e9;=DapEdqQ5@X_xV=Xm%8Q2Bh@QGpGCb< zL=|L4qZB-kjjQH_UIZ8PT>wifHnY21)W7mz`J5;}-4=i0t2)qU_BS^yrVXnEk+&*m zbbhN@8r&}GSr;CM^! zG3a2zVh1ghiN4RnOs0e#$afsRdvK*;t92HIlP$-~HZsCS6hSm=OWzHQZ z8J7Ba8%e!5?52D1_o}NOneD7z4{xmq0S`W!S|3bVdiazaFWy90#b(0S*}3j`_(408 zEBjzOe7ITkq7lc2Im;VEJp6{%eM9s&dbZ18(an$?;4`9y>3ycJ3rmb8OkdIGV)P?M zKd_PIJ$y}k5F|N!l<(WUMmP?=hvdZp3ok4Jb=N&cEf|m3bJ$dM= zeqK8L%qONd2WgG-`#-&u&x?fOZ9}`d_oxBH`}D-pJB7biA5dDH&M7NbVGU>&JW!R}kmx-f)fm{>%4P8@Q7BAE3PwYp}rK6LtNT!h+ zqC|(#@$eMTtIfj8fOmO#E=1M%jAVm|j*m{Sqsm5ZyL<*RgblPmD2&_|eFjvK(JJIK zs7sPJ!^Rl?zL86_x!Kr_a^Z*WMe5?@qbJCv!Oy)q`~<^uKkR9i!|*)mh@h%U9tav{ z8OoTqW6>_LUjBKODoett;4~-(%=ij)wwco&*!21t$Vb!PL*+g%6n}t>h12mnH>Zg2 z>Y76n=cyj2EDw+Nh>AS=aCwJjY4tq+^iBLuZLj(CFSxEzUKIA;5H(%fqyO)P&CQ2S zKaer-Z0|f0R37NB_XXt#CV6{d-{Sv886+c(i?55;hfA^H<>rX5(*szJyz_L8(Xp7_ zG%E}q-A!feJlA^Zw>)k7BXf0v(bsxOSg$LGxRJXB^8aE==I4EzBMCMsyTKD7wrgkN;Hu8|PV=vtFw3cq zoEY8}d2Uu{WusFT3sNUU+6jCcegzS$;qf8oNqJbv_GE<(-~Z?fJ#O95PvV-WPv0kf z);F~NmHq5?CU=bRi>U%pAMi}`&?`q5Qao4mTg;k8z^^v&9_I5@v0to*mMi`yq9uBY zC+PdYN~6!YJ7Z<=BN0fT^P1!6?x2nhy}}6D7CiDiU;3<%I0j3D7RZMs{>j#`d%dY( zpge`qm7WEM>xw_ppYdAOg$-ek3M&`fT1~CjdNODco0kY$U4Y$A3 zl?^Ksf~KdANbE$e3>!`CMlFIIR=G2{zEA1*PS2J>%b!6`SiK57d{KoT&xm>hF)uYn zax+9KL{HD_?8C00HIMvTHXUnAY>ZqMJthx%!BLi2h~PrLppv=`gdsM>k8d-YucJ72Ch_ zL7VbyFYGUugm;$(!}WdQ;;3VF-#pLrNl!5fJZwY}Rq{H+k^9N}rXM2hl5I+s@yW7> zjy3}=LNo)d(Z*=BqF!V#OB&;O<3K~ zmgs~sO~#!}xPp#OZiJTgLcfI(s#3>D&XM(`l4JBJ{ecsS9&~& zAirDH7Egp5-PkyTx_FA|cQ`3K7}WW=SSlO(Ed6qAbE{g=9edmj#j<2&s;{y_{BHe( zDQ-%zCV7`)1L%D478;exT#|b9iQprJ$zaD9Zq@P!=z8iv*->QfRXt>_C={I)^l?7% z3%xwSanu#^|H}uKQ3i8pO6W;cTR)%Crvcs#u1D*&M!u!tSEqyWfT?F9LF{{E^2#UD z?{MS;(ZQYj-k{@tjQvr^>9~scg^VCRHPkOQ#OH-Gh-iQXNhbeFJk2`k$s_ZD?B{i5 z)9jhfTt`tLsqw40vs``k70th~ec{AxBUU8*7ZFug zO}5IxL``%rmK!O?4jH&Y>Wd!Isy#R}@9nq&kS9+UAGWQC1j)s}w5+-1LW!Ttss~%1 z0KARwYG|8cUZ|I)%Nk}G)0*Y_>huDl;%vNvypbcX2At$yuz2J2zFz|Eg zG(GS}oxDEmZ2Wc9+mj~e^D>-}EH3@t^y?Gba4+cQaBp++c1v81w^%OO=p3Rt!u=4B zrQbc)U*!Zn*Ejj3HU$UwlByF@rKO9aT4Z*m%rB6WJ?q2=Y?gFN<8~#sk9;(l%vOaD z$w?N^9-df`Ba6stnZ3OI;}%!C%Ak2#t8C2?gQ6L!nuPtsdKtCKtQh_aoCKV3P-ozk zmOi4E_$1Ac4^!`o5hJJZ%4yN9Mb}d{HNF9UtojZ8MV~J{{)dN+lxC00`gcph@SZwL zCp9z-e}h?g6rC2%>qAGQmuYV;I5#Uz#|?QoqAR)*u%=jzv``Y*sB}|yors#~n!WNg zku~fTGH%4|L5m$VyfbthI~~>mi@>@?XZT0t9E`}3URN|6xqib(EhohJiCc_pUS3Hz z5YV<%0F25p{0J6^nX&xDeqqM&;qn!OfV_NiLT&;{Cm);CgIl<`lfr}0pxS0~-YL+D ztcpid-Wi=z{0x=K6SD_7Vbz~x5#0d3G`XqWDC&GJd;aro!37I+Tfvgi~41)Q~>k>jQFD~(^wVAy(O3hqopr3=AIcrofy zPyvo}x}CARX`Qqn-YvHmsGT320T=QN4M-(`+&#F<>n!_+KBYs<==8~MqhrJOQTZcF z57mp%lD-2o%s65?q9Ag)<-(&k+>Hh;w}K8!Qy6?*9FA`W)*9U$avoR=at_5v^hFh8 zmK!4vU(6YY@zA?v0FCS;ngIy~PV_TTF%&hlc;0I3;a8p;9Q8vRw8To(`4Vl7?p-+1 z>2OuvGXCw9tWiW>rkMV=aF%U7Vma(=ad)v~ep;F>I+w3W$HEcmF(a>m*PWMu9mUF^ z+tZryBefm05cNxPB-KQo&zu^0w)0yrzBlp;&UacQGsSy&;&6XD8oh+{f&(CsaOe3pETpgEp<-BkBJ_4+ zjMHJY;GJwFS&Y14?z0|#O=qpXl|G}FuskF+N7hP)(elOTang}_YtN)93yQrlI*-Ew zT;CdSQFu7|8`5?}o4_7NA62cS?XaTwU_?|#CS{W}KH3>;vJ?DLO{{n{E1TUbXBrdGt@WBBQg(M}|6DWgXD0#3@)? zL$>2fG7g8YQ~u4!gHT_O*0;7k_x$l+k4!H68!=tBK9339!UuWWcv$TKEvW^^Lsh7d z?c}`PTP%^mBSy@~+J_E=2RVIbNj?qDl6Fr6#3R*_)5O?VgLitLbwGnfKf|J;zo11h zr#FF#+1Q>Ve~j#=Uy(3kZUde}C!xL3Kgju!n?et!8;yz{ULw8;Jf6oCjSo#+z9e2n z55bejBI{tswu7mHUT3(D}d|G}*+knRUe)W;MVWcA9UBK+7fcc`K$3 z;8JK8Mynh{-?+}O-bXzPIWK<;PN4ZwjRL0lnsNP1qOb|s<<1@aMusdt>X9=qDkV>q z&5fUeGk>FfsIeYrfCAtJ4cU6+R*iUo_@4NL4yCmA0JV#D1Zzp*1J)wP`N0y{>rrQmkMfU4lL31X*$bLGktYA{wDLPYYVawr>^kNYk zm1xdi-|6}3c;|V%^XJv!L#4;i6X=O_FZ@OnjL(pzE5BjnwdkI3Wv4^8*YiT$Nbf_s zvRnpuK!3syMqC7k1NTvH1v|u*@P2ZC)JU--$j{I&qKc5LZ6Zah+GuR9U&d@Ay zlBGir(!GP0f;Zx(^!W4r!esM}&Y>bu!y+bit!(5zlE844X6xJr&qM1Ymx{K5dyft# zty@D zKIh51Xgxeeql=mPT>e@)NF&x=%6d3jeh2&3oi@bDc&R-T^`rSjT`xWx-7aw zXy_y(cWqZtWapzNb_||juY6P^V_q)<_^Ka{${iW(@$|i7T96kLbDH60CLnOB|5QV81#mHLJs>1i3-$bS1K$ zbeB=6(hJlF&ES@>60g7k;SAj4W1#oKEV9r)T?D{X>{%3e&^^9C>O9Fv-{6;o7qmsZ z9|uG`G^H^gyWCH>%vd!#p%3#-vFGrD(aldC&B*W5X+uZ55!r?_B2jV~P!TTem49z^ zd&J{a7rSGA==NmR=vGMw;awDEV58{OD@Rv%HGOqakX&Or3?5BJvHI9XenR=UjNgZT zD*v8lMUQ6VjeA%}ejKRMlgJ{}NDf*DON1P!nSkra=tbM|t@(7Goz}&-14ntQRQk%| zLG{D84*N;A5%uBg5JO`hs~6(uWuv=eRqtJ|e1P6l`J}pB&OZJC?r;On4<3a={RbXm z{%}(E9eys3O{-IfGitf%RCqg?AmYfrCiRAfJ3LJ|4{X%wQqAMY(sWaU+D93w^2F78 z)9=~u^g4V14GmdDhNEoxr~EGBS~92Dy?BotM0XeIUL=!Bu7@@0H9}Wn`qbmOX zK@+^%>cM1{^WlkRjk+Yf3&x1hf{0n|MlP9l`|CnvV+}4!ucMv1lWkiT^>) zKD(1{GID5W5v2Xlaq%Q_9v$IID1Y#G>k~ z=M8JrckuNNJBhCa4B(~e1!K~+X~WK*F7N!sZq%Z>|8PXp^$(F7%vRywWABe_F!~4F zq#@CB2aNG?nlt-|E(ES>oSd^9H17}INj8z~^eMWOGa0rVYnknNULV8notjKfwacS2 zo6fvs;`iu!Q|lVOTz>qa=i_l~c(RmFhd-6x<2T+pdYN~wB+uE89%KA>*2X{K|00(5B0qv0;{WFflR3pJ zgZq*7G;rta4C%-8%i-SxU%cHbe;CcdD0r#vO=2P=M~8h6jwC7hP1{4qaF8EQ9voh! zW8&zbEhmm`!sk5lM|L!_xClNgCc!pv{sX7bJWe29fP?B$f1aM4HGOp4IH#W^+j(@9 z$47l@M5mk$+UFf52XU8C_d0w`&e}QCo!D=DPw>D#$bDx`571+0bpAx$W5mJ#)W^~F z@PZLzl3ORwc4OZl^G80j+fdc=jQme>Y~c3r*wAIH4PT~z;?c6(@o%vj6>i{7clSEz zM{JB=9PIh*;0Vd)Jv^BW%f_IavGj*bf&nyNvXfmoVy5B@&K}=lTk)Oy9j(h9gOdZ( zhG$ufQ(g#diJq#ebkqXVN%2ejpwC&8z46(g7#ai1omA$fqS2%F5q05#Wg(B;7G4}U z%I;v_p(FnML1SbnPu=j38cie)rpp`Qb;UPfr-x2#ZR%KLlZcMfrRCP|?tL|h^gMZ| zPlo;SJJj&g{f8V~+2|wkHR5$FHE^V%z)y6p|CwImY!A7^$FoILwU2wp=_Z$UvV1>u zYg~l3%Zgxu;GW|iR=iss1^kqE;@(p-N&boYN&2UFC)-FyFpZln&w3!8X(Mv$`Rd(I zq;?VxiXq9)l%+`z89fx}cYG0afdN}SJK85%k25bt+ z!8-OcuC6aCSz{kQF}kskv2;IU*f*%6Cz9QoX(N0FAS6qM1|;j69U`ZgZ8Yw05To<^ z`A(z*?qVhUQ!*%JZH#_XG+Z=>uaNG;(&I;FkLoJH2GRG6{2c!LOZvv(2jnMxaQKi% zbdBaf4)J^NhJmI0XZEOCy}9Kv4quagFVD1NJ}7-j*vY|5}?cyPLCV2xN#=QmnUt%8O z$NV{TQaf_L1gn17GXqzhl{J!ycp~}%8~s|?82G!|9&x1$n;TY$*|Lv^jHg}Uy=*zw z=CJH}zn%Z+wuFz;;M@Ww&uqkq_0Xkb_zRtC=%7{y(~U~MCxzIZgGg8hf%-Ju4CQt)4TbFtkgq~ zJkYCKj_tr~_7$(}@QIW6yhLV|^+0#BHh8G!pG;Cwz{fF?~_w> z_;Fh#UP>RZcYX{xKttylJ%sefr@wZ4cEusudCzj&dXK)Mru$e96pI1?rTB&w)NB{|w#WGv?>NTi>VY#`5A+1hL_k zw<>x)J_U!#C_3NR=l@^S-Skx1#ZVYNMg@b86vcr?x~7?sPft^R_-mZ^HL*YjvA`hJE*w>>N+%v=sELpCDZU!qTDm4h~Y)iJ!@X z%i}_2+@2p%LRnoA6AQJs{KAPrJQE+`I}jHa5O?@{XF{A_Yq|!n_FL>OPoUPqbXJ-I z!dm%x6K;2AIu2!aI&LQ-=*^KwpC6nQcFN`HO;!Vb%Hb$v-SBQ5?Q^GH`9JM}o$7Vt zQ?xy71?Q(lx}&-&j?kYb06)b~{$G7V+@XVrn{3hD&+>Y8C7+Ww>3fkkVcoOD^Xfzr z>Xn$ThQS}?@G!}J2l_VMr4=v6lbt!&%lUpjRvx{587YF8lc&TWn=C5w;J@|Tv~Fkf zTy$D@60lo*UhGeE_N@4T`aJx^w_qMVuU^Sxot&W|;i9;lb<+>lECs!T`Zk=;!Rbuu z>s%UZwTAFcY|l@vq}+^$STA-8`|EOM9jZqxMckp;rl_(c^*!vJy;5QLg1VgE1-2K* zOl#=$3yq%7I02-mg&rzDQqQHGdlsB9o~RcbX5;7l2oEZ+SKE}?>0@KDcs#z;?ZV#b z1sAitHhz~Hkp3ffT2pZ^o!;v5Cm34yaJ?_EQ;npa68VV}6<(j%t{)=ygxz@k*4qlH zftB{NE zHMt%fhY9KQK2QImH$X*a%SC6Z9gh(2tQ^nxo7gGDq-uBOMrGJj1<07ybI%loCflh-(>kX9!JgO$uyY-uUc6?=dmi_U1y%xOL|8r01c4e3l)e*0G0Z26OqHQz=~P_2>r2-C0}*#acBn)Sq6Ls>>PS=W4bVd%keUWL8N zqhtc&6HWp{SxIaZ5AP%dw5cK-^Mk7_f!*p375zm7%8$1(1l-9hwg1+zOiU#7q*SGP zk6Euc?{785ELINXsj82QyLg@G3sm9;Z?Y}sI>CyFQCVr1h1Tz(7>?>@f(W@0+&DYSu)xOO%D1NDz@Wkp7zBffcWRWj< zUihL<-0w0wo}NHoraMxk(1=7JLy<<4AQWCwHy8`X7hP#3=Q~?9dDg+)q3%)B1PPH_^RSDuk&gl znJC!Wrsz7gctK$2ZxT-G{U)2ZW zWDQJbBbbb@Wvwj9lR4kYmng4Zw^gtfaFM;rD?Ph4i?w<#o+6KzXL?^+g1 zyp;^g{eG*%HdWmo#!4ZT92765LCQ<@I^E1$c?a8NkJQREUHD~X+bORG_rRms09~(n zE_C}&NkUlnpNOAd=G8iv?Jg+z$!6IoucE@qokXef9(4uCkIU0U{9FGWyTqH-64H6< z-=I60nn+i-a&}7mw8wrA{D$xD@M5cCK7Q}5+(_LK_FHfD4+vyOaGSVPJ(I;67sMqR15WDmcwiZleZ`#g1yOJL0$tQP>aCaGdrtN3e}m_E$MREk zu<*U;<@I^3b@Q=Sx}X)s=b@=OE1YH(e4QOQ59ob$_IM$OmY5N=(*3YWwUAIH41QZ^PE)0*wQ$c?A6(e86LJs=I)ET8gW)-JL+V`WMl z47CEz)WSK4hu!#{=18(dIfgjtEnk9D#Z^A9z6hV}yS|s^vtq7#_xXd>&?Y3RzE!)8KLuxiJmY^ENAK)IHjg^ark`m zPH1K7jO-Lf;8HkN^?m#AC#Jvnjp7sRbjCuDoxUvkjyPYPb}pU+44izVj;VS)}6IG`H44)GpukJh+@Q0P;6l zn7eMC9BcM#5UXa$R}4PvMR;Ke$IdmhQ=fbEey=Ej#m9-?%(V+@t~dgKe>> zrs`W$zEDjN_u%_}zmHLC)Dy&>YEAfwtP1bPMDYW-5A)b3)Wk~IF#o`SVLc3QZbx+v zX94B=dK>sYZta;pW4sG*4u>fv@Y-9LskW{+L*Ip(3|-`UKIb+lJtSuMswp}f;?7R7 z)0rEmELpf{3-zom)+0wU>&iOGlbefd_OiZVcl=hr`!Fk~CSq2&n2%ej*HVHp8#pDV z*d=z?yj=TE2Y)utX{Lc0F6x}khY;)KQf3-CMeh6Q#8Ii{nlNL`kG3op&$ql?Px;W`|poo#;`ou66-)8G=$ zZT20UVpsMFkH9L^Ncg|npcs!6sTbp<))1C?w(ODO=zH-3^?E-AV|6YLy5MIl*@Rj% zg!V>MF^k40`p{CH>vq0Um7gY3$5GiadsiXB0P4e2iK26;&#(nEyWOt}`}GVtjr?NP zy>l4+O${$XCHd=DN#1nM&@m9@$Q%p-C8h`D=e-}b*c(z|&A zn(gKMZcpG2^EdNMp7Hg3#?!f(hyvxQJ$c{<^AFg*y)OgT>jY8Cjpb0V2T#HSbZA&ToFC7p0F)h ztKUg&srxB9JFTxk9Z$?k2MC$$1imD`s1JrqdPaUvY*&lLJD(3mxo7h<^N{2tTg$PM zIILY4mBdj$tsE2@Vf*-!xM&~68EeUJ%&LRwO=YLsQzT&~4Kf6VM|Ba%PUte__0IXo z&+A+3>>*wUBQX}<0d3f<_pP4S3Ol{>tcO;B@z^gY2QTedIV4QP1gQHs8>?d_-eQ~f z6*tl$?GJuW4Nno2(O3zH=lhDKeWg{Aq59)3wDeWJ!w%!QEXGfw0F>?XcXa?AMdfHJ zQ><0bKfXfK5fxaV7)jZyUk@gUN-@$VqtSV-wyawAAd5CVVmn^T@HX~9AHH1&3^Zb` zdA_$SRDTrx7i+;3WO?d?nAx7MtOj1*EPoRFWu~427K!&|bDehLN%3%NFTdgE*bhyN zzNnw6`&FDvEl)C&R_+`ZmCuC$?36Y5IaZu!%0!*%*Fn}ily1w6BjL^BkjP`^nED(~ zhe`7J>PqQO`T<}j&7Q5YSQwrHuG0!Sy*fU&@xC}jy%pWdu;eIwh&7Zc^xK*fZpY-k zDfo7pPxBb-SY98F>cpctie;?dKEPmh%}?1LPtcoTHL7Ivm9&NKUzE4Q*?LCg`#6ED zIwc)?EVutLpJlf)J#mTp*V)Jzg_&9OarvlRn&yNn!6vVS#$5No{<|qFcqmmv^}6aylH3o}-T3oph$xnu{w}x}0@W6E`JQKZzdqi+N%y zT5%rh!@N^W#d!Ii+hV#WzO(c0X_SLh&1-fz1n@V@U?KF7FrOYH&!s=xtBeI;df2L` z$7oFscCNx(_NYI-83gh-(MSc1W$M<1O)RwY_YeS27N=5Up`Ph^;%Q7xZQJZ#oW3(G zawFP^xDHS8B-vG!{iYXI57xiVf3R_yH*JU36kcL%at}{KfArTA+4;T_&MH z!RxR(x(>cCpA!GY(;~Kb4D~VIZj+|dV#8^Q^cqjci#)5`gU-yqL?Rr;E2IEfN37e5 z#!=Fp@eb7uYw9=CokSn{qgq}05gRR1h!_-f3>gCz6LA4b7ZnP}b8ZeE)jK3ot0U7K z*`$5PwydZ1%}!wwYYpXDKAV)!>#sEF@#pZnbOomqo9SZGb(~MWOnb7bn4Z`vuZNv{ ziA~D?Fb2^|OcEXI4DY6OJq3EO)Wb}RraZd^3etC@@_f^LhK1*WEDFnUmd_a^cmAj= zd1f_k`8@kHbF#S}Ivwd!)Ox3dbmw8E)MjY0bFiFI!SQG}`8eG}p6N^geWW#2Z@`S= zrQ%VYM(mWD+N}KU+qH9aWU=19`pxlZcH25St7M|LemqR+<-Au%4iDo|qQ4Be2xm1R zDozHm?W~=oBg@$AJFS8D$C-Vs+?c&mC0V#kA0F#`pbpUr?49@IOY(PmjlMkjQk)JR z#OIrvkVXPw?KW%;@jGV(GwmL|EBy|ibH|%{r@Lm%<~_|{cV?Ifh)>n;?hdf3%W*0w zV&AJ{o8cj5KFt0*H%ZUYzwZ8NI?mb5rFOUb)A_f!Woo*ad07El#X~$X4ho-~lTtI( zPpzLG&vY*N_V6D!mzaTO2D!}7G;N(5{2nv3dVC+Q;Q!^o_D}vsZ;}_eXNxxaX}(@Q zXL7fv5?e)C+C5alo6EXHWBRt3)-@fRO_=7-m*7-0=;)%jlqcn5tO^gcLvWOZiJM!K*Uw6GGE=gid;P-B zF6q^&x1=*G>US~`Y#wuvtLbE*cU{bXbOcdcpCI4SAFQS*w>NK!E~>uB4(z&&MYaXk zQLcCMRwqMJ*#!2*3l`{o;|DTi0`w)b|)?-&sS^1{lq1i z3Z9{cCvM_>vJJfuEYsKUqp;H&ivgl8q>_uUb}U%5@cT`V*SjWy%SG6t^C4;A-ljpp zCNWAJ@EX`DCgMFjgxBgUG6xjDR2Pl+r<) zY433kdiU9(f66~Tj^$m=^SqrW!tqQ=?*7c`_ucy_ZiS@w9a}Ur>ibwzJ)zFd_KX;Z zS;=yF)0pLX?l>3!y$*daVkO1IbWcp%y0Lsph8{*3>TIX=!Y|ds)WWQ%w{g_6c)6xs zuhX8rP#48*mPON4`@}uVbIUJiVCiGlZtF}qy|u?lWq`4M%Ceup>fs2zma-wc!6Knc z>*IarK#Tc!i4G@7PqVA*vF-HAtj0)jE|+yg7AglHl}k4X$?CLR!v{XRw-X^N&m>`}qK z?>j^Vu~!g^?fN})|GBTd*rk4eHAi^noTItMHO8E4-S_jn?@RrGFMR&N;rD(1_kZD= zKL5>Md#%6mTmIO${_b!1`rq~Szw;Zu;oZAG{4L-1E$=RrXFMHvI`DMh>A=&0rvpz1 zo(?=6cslTO;OW5Afu{pc2c8Z*9e6tMbl~a0(}AZ0PY0e3JRNvC@O0qmz|(=J15XE@ z4m=%rI`DMh>A=&0rvpz1o(?=6cslTO;OW5Afu{pc2c8Z*9e6tMbl~a0(}AZ0PY0e3 zJRNvC@O0qmz|(=J15XE@4m=%rI`DMh>A=&0rvpz1o(?=6cslTO;OW5Afu{pc2c8Z* z9e6tMbl~a0(}AZ0PY0e3JRNvC@O0qmz|(=J15XE@4m=%rI`DMh>A=&0rvp0h{{8vC zS2x~&7-^1&pJ#mL`ri-QVgG5}dVRc>g63nS<8#O2^(%ERyhHc3xB5`RFLVBQFYC!n z|8eAN_oF#s*X0}gpD{sE}nbQ?-zUNFw|EX9yPTh2N@80nfW5E8YOMd+QPrU#B_g{SfU6*{{C11Ma zhc5Y^OTOb0`tQBui*NFMZ|m=V|K0EZ)Foyy-+zhurT?Bc@AQ1X>-~4WMZkhm9G`N1 z`}=SIC?DI&`^7hZF?=`o55E7wH@-jc{s-Q;WfQ9w!Y3}`;n4laC8FunX)dSzpS846@D}mHQHOfJ^AdfM7cOBVIF;Z2cz(wRyn|Rib>j5Hm*C|L#DwcqV156GI^|{; z^QSNQGna_1PI&UOo68d>&bW7m{Q1Z$KTLSV{_vIi&wh}&)kitR@@2EGf97gqg9$sS zRx$9*e17y2vsf5$tuDE&)kEsLe$_KRxXG(`cKitJKlef6P#x^c87Ft3URCG%i=mh2 zOBc4AiwExb#e)xDSTN-w;alU&pC5ho;ZaTHX5aptr|aBJHW=mWu6Fk9adu1i$wj9> z^`*1H83qa4tj>DF7t3N`;tGpYf1KhXZ+%b?T>FFfdJoXmgRuC@4}*Wb?%bVze5#Gj zDHnU<&+{KHj{MwJr+WB&@onvl+4PCsT#h)#-Ao71`rMH(z3uf5Z@Qid^N(K7vu8lh z>^^c6+m;A*`?D2wEE;Bt$^Wk%zM|gDVZSGl>+uiuy ztE({N5i5W7%Vn((a)x2%S6%R5a(Yl6@y>0}N3Or{K~Ar9>xbX++xPBj?b)Z3_wYIO zvzG@KIXo3{ibuSfBgXZwQ(U$MlxyS#bTrMmjsof5-Oro;Q3 zD;)Y0C-Pw91moPD^RB@me0F?28~SaJv%27&&YXI7jSn2LFFEg)ecq}U137%&{)tOo zpSkY%`D_u_vw}yxk*hr&On&a6881G>y8LF`=){2V~d z-{*N?Cw%#N7oP7xM~9azV#MYb@7<@%UyOKq64v3aUYd`;b2#^{uX`i6I?EAOybjX2 zyD&)S!{%(oyX$}c68AJbe*Ecr9;($Wh7XMWTwv2{v3TfTdH63LKmNGLOY~tmzWR3V z5Ffa3;=reP^Ky^_UYzidEs?F{Ny3k!*=(VmtL$K-eLMCMt$Zuo8=PIJ%sQ1 z6$_g`AJV=W>S6E1@QQ%}Z}p3Tm-F_nwdT(k9^PW<2s=OiY;@{Tt9FR;K+=N{Yw)nA!_havW z?EPQ5guR->3Qv4G7~8jc#nxkq4vtv% z`pZv^YAv=|4!#6_XC{VE^}>o*SibMXbGgG3OBZLp`NJaY;=^cNe0j{phl>l0dZ-8X zVO3W((8GXLtzz*zY(Duod~q?`Zw!87v+>gpdK~bfgGK5QpKM}RFE<^2M4TMulK&?z;j?{U zm+Nm_qGtFw@T1cM>wAwn*G?(k^+^m|ad?>7h;@QXwbtAG?EmH^ID}Q5)nkT*2M%Jl zM!NdO#{YEa$KU+m@=ssCJC9=Js1E*N@V95H7xGj~y{glo}KPJpL!LRdFxyreA(mMv*j7Wy}0aR-6wTgi^Ze-)_n2s&WF=ox51W(FZu217~*{M_lA0eDV{Ek9c_2X1R$t@o>}&v$|mLrz7qHJa#jk zIL}efS3YLA;^S?d9R|TA-t1!FTC51!=Weq;L*W= zic(WDf`QpPa58TekT(8*K_$2iPR`)8utw&weDmNS9E7nZp!WAF6i`!WK z+1ycQ4vS7~JoJPPuDWqH^Q|{(_m1ORZ|aL#%svNr#1mKRQ_1VQub97c$=|vJCZFn% zSI^l0-X*ZviMaYHZqHqOyz{r;n)vGl%xba5gPw0W@KE#it7n#tAACJfXS}^%VA)r{ zy!+mXtN8kbb3L$zYY)c^%UPN2#S->nw_`vVkg;N|(#dc2O%L9{r{n_@s;p6MB}1r`46j)KRfwm3s0;XaTEi4Ymn3E$kEpsz;$ zY@IV(HJj@j?)-32vu9P^_VI@ar|+ZI<-}2Zx!_vE@C?D>(|M?Y&^hn)@K)Ff4lvko z?GE6eCU$sovUl(J)A5mmjab(c`20E#IPi+WuUhGfYhHf!NRIT2MK2Dg(}CCfB5ZN& zu;R{EU#v;I^+k^fOtrxE}I$nIL2c|tAQoK1^{iTCL57+u{U*a>mc(`$~_Py8Vx3!qCtm(wU(*t!o z1F}7^7T3AlxrwENhljd1zMAE+h7Su*B9=~HVO96)isM6XPxvRD1rG4(&Gz-oTu$+8 zwD=h;y>C1Z`FE!5 zu=L6tmVBqm!<(&IVH2_L4e|VRzxXZ(dcH8jD7Np6_Jr@^lsCTav3z{!?En4;v8Kz{ zEFZ3NFFxOTt!8}nfM3}32|YY9|L_tyVema~>GQiBfBEp%KXG(s`g&@vhxM*=Wh=%S zH}hiM@%ZDTH+U`wHaanIZg|-1yd+}yA z5*J+m!6n`w?6?rv{MhrChwwX9o}cce_YfTKqTWa1PBrKAo{v0ckvI_Xap*agqgX!j zs@cq6j(>ECICymO5g6%;HPgqhyTzX`EMhJ9sr1xZoLqQUKdgUzNwMsBWRC|-zW?MB z{?_q^7w6T}sozLhr;GCMc*vcqHF+UeuSzy9>> z)r)w+6CW3T|LhXFeBltd&eOT_%T902w&zn^GrrcHOF6}=Lr>}(Uwi(owX|9uiEqP9*D_q-MP_;g;(DAq=V)24Hlak30{1< zJJ$8Znt$IFVJz?Jmph@We!S$Up7Oxq&&CHILRVd3r|%s3Uw| zC2>R?Jow#H{HjL|!Y3?o)_lxytqyuV@)7IBvsRbqfxZ5i`QjVr&I&f&_7pGqi>Vg) zd|}sXKJ5Hq*_-LCv)ha7`7OpAhd9Yo@94z!tjI5>xN39<=*nN6_VDnlH{KZpZd}=% z6NyJT*!U9me{spbzT{tBV%trlkPoTT*X;04*Q-Be4O#(UvI?JH@0~2 zsa`Yu?nq}qN1O*;cDdV|*g1BNrQ~KieC4{Ho8IFMU0R zYwd3I`Gz0gYPVO9yVE;MOm)DsCiKoAe72;XkrNZKl<)sad3-^3tKhTOMK+!PnU>+yPWCR;fU$H!;}x_@Ng1SPuXE6Z1Ltp zzxmnLt_SXKpFwwDdpTg4;k)a^I-6RzKjL5~eD^ttFFPA4Hyt}2UY=F4a_NhH@QHWN zp1Q32-eF%J*!g?@VRb(I{r>_W-kC7s%GP_74kx(Q^gnqCpWcu3bZm6;%j0~__Vs3K z>~leUH8;me&D~$I@c->4|KSodZtAMm_|mH>UiFKgTJRUoo=uE=&izy8DnC06VlDSQ zf1EuN&aR&07C$lF)q1;Uhf_U}w?5(+4u3fMY^LvA;%F96^p0JR)0^R#@m}Fy|Khg( z)_icSE_r%xV1;XrHy^$6+~ZzNu*B5=IENh`zkKxtM!gghN4WaZ^OFyqxb7AG3OgM6 z)Ge3Uo{eOSTQPj~w-__&Zkg-1HD5h8+sjMf;e@BT+RdvMgM%DwV%1Nq`NlVUSnTlG z#p6J_Bb_-vG5qqc4nEbxrq|Ac|J~+&?%dhraKHJ$B{_!zO=yl7p^V`ED*8!+~wh2S+hx@o;bo$1D#$JoiJq zz4&T1C-m&)w1zF`sqB?sOnIA~X@4JsA*SyjFbI7d#PPw64PSys{(R+959w^GAs(=- z-C56?b6#J#;@yFy-pK_oJsf)?KRaE|Fr39}UraU}#Nbq2eB_lYez2_Nd;44krxtlQ_X*i=Tbx z9N&5di>_SeICjqA#Yvw0_|n5L-z97_PRnb3>FWV*cr9;sx#X=@@#*2?MdR1~*dE{U-vlDyq>FR-;^a=giHX}IPuQYS$p5A8-IQ59#v2NF!r3C9UoZrPAs4JoB6qe^nA_s z^kK{2o(_&XXvSGxadxli<413uz=y|2o`jCC{`~AEdW$!yZ*2O813We{?EKmGtk~$& zz;>s)hy28dEj~PPi?jEsym$~XbTB#_ zxYfi59>Gcd-8nXX`O3p5OnUx$V6NYHyliSr_=d+Hmc88k>ksaPPj)kZbr5_K`mLM3 zI;vZap5ORX7k~Nx+Xvw*o~$oE<)-ia;~ft+c%=B%I7EK$Iz8q?XRQbN(zC#Z zlet{=P7Iy7Udu)3#PD@TtmPzex8_%m>FL5;eca?B;&4qi7dwpZ58pVYXVY6fs1I!L zV95=~dinB!)tU2$Z{PD&F1G4{5$E#aAcr{l_`}b)+%UxOw`m$WrS^f36y2NLXyO|C@e)-C8Ew>zTs~%X^^qng{xDz%Q@JU#o z!s`s=35&lRBphp4^~M}ty^!0wy%|S-J;&ni^|0Z=uUKn>OLfFiJUuB#b*B%jJ0G|9 z;s|~C_W$(~&$C>(RyUh>@Bg@j-Chnp@qi7lo_0R$?ioE?IsW@4@WjCBoWv7;$>!lN z4h9b5;<)ST?@VFQE%vT)6wjygfzOAIz<}p7ir%@&y`0$jh0Ug4^l-)2V>W)BS-lj` z#+QiWhfg}|IEyPbKk<74d9hI}6zI zlk%9|1NrHz(>hLY>RG(23CFnBV>)ZN)y$_DYdCVmnQxr%#Y0ZhGy4iX zzxrU^J7zh^L8>Ke@nOSAsKIwAX9kPTtVVcZ`HB+{hpjW#hvL}m zJA3}(&Gg=VeJ8Vr(RVm|`CwENZhYi}qsOq|_xmOr9p1!RJh2vM4ad96yg9^^dM8Gn z`okuMbjRWuPPy&#wT?3^J%<~|&Vk+<$K^oBmrh=I#ngv*q`yC>)!!MwSjlcyr!!#Z z50l=$JUFu9ESL4^-cP=96;rQaiKkNseFBpXPTwc2@?GKIxz%UB zafmaU{CXN*b<$feZfpARV8Aoe?U_64zH{IdFTSvF4=cQKWD^5J{q^Ia70bwxm9qi9G5MW5)aEKS-ZXaMmaeY%doK z_ew5tV)Tel_%Qjinaj;C20voGeXBnD)8$v6=?E+~eJ1wtGu!i%7q9Z9mm`~dZ4Hkd z-~V-qo~d>D$c1Y)T9Y`yVAGfGG|c*k8=o-j<*TRkeCrw9y&L=qAN7^b3EWl>ANx4OlYMRVgFPQLSi>guhi`uLxUb#XJ=7;Qe4VwN z>QImPaQKA5C%%06I|paPhYc3YxWTDjYr?m4jcd8h@zoc7;Dhu3yhJQLOly4k!_@=2 z;@fv$*fyVBuyA&N>ZzP+kRyMy`1n;zG368+=bm}_%gxW4F8$)dBmCs5zpzO6o;^-s z@u!QMHNO=${M5!Dru_8wo*kb}`fV>ZPW;Lbn_iqA5;`%Yn)nkqa+aGfANsJ;@t2r!BJ=N)g6&grtIN2=YQu51GZfC zp))dXKh>|#aTZ&DTFav!i-lMD`4M))7e_vD?H7{|e)R=TJgn;*{^E&v`=mT^lV2V= zNj>V0>0$SiExvKhzgW2PitqWsvAXgr4nH-K(}mY}>#aS^IN(tY;_Oew=NXo#{9<77 z$3;D!FLr+7yTkn8gl$jMOAm`}&w-5&2l}x1%R#K;EGPeP#aBE0`mKkg{+XSJ_;^|K zCw%Q!;K7%hh?BcMghz*?*v_2Kari++F>F zx%`TOmEO71)A5%}9`9`LZkW!9&AHIA<3++@gN27WaA2qN-AP>a@)0NJ3LR`>P2d(! zk89sq;l%@H{LEr;CTft!oPTFiKKgn_2OH-4v+ITW;Ah`6t2VQo`rv-U>D>4)PW8r9 zjpdKGm}+4sbnwmPwT4r##Q01jY~tAHtG61H$rx-qB%C|hKU5w|DSj&??%$`xPYzZ4~ z1Sc^t<3Yz)93J@Kg&!aK6+Y^~VQaI73oGn6@U8Fi@mt^W=mC9Ps@YtBV9FJay%=_J zu-Lk<&W;ZoJ>kpFc9^{W7MBiAoW-YyW1qn3eE_@OSnGAqi#^_OJPT|vaG|s2vv&LH zk+(X{yI@%zxrdY zCU*E@@gw0B1BK?Lh3>-QG=!^$V#S{`CgtmR@0J0G+Bo)7m;4l(OT$1iMqQr_*8dgS_)Kbt)6 zy&lw~;>CqspZF~%-)dqba_KW+SC1YMYdpoUSrd8K#5ebj(1(QGn$0>aIkSn6BV2W` zk@`dzX8pk_-tg*8yo+UnUmkk8xHzk=kBx7f^M?_KGZFC%)>hM*4E##%87ud*|}P z-kQtJUOnQ%*|^SBuFk15uK(iHpk~;(ugK2_2N>eu%31x^^`PF-;iBK+!=bBZdPKz1 z6YJzQch&Kcob&GZD8 zoWxoTKQZ+|3_V?#Yy?LAwAZuvv4y8k;_>AJ)85><6$?ikTwHJ`#eezzk#J5Wug_un z?jekQhT~iKx90?pa?;1kxo$sU(DnUFO!aj(^@EKL7XR|F*KPX>^&3KY{Z%`o0`;3k3;q5yK^yk@pE=&IQ5JTj(^XUV5L&P<*5 z@~Gb|_vV42uk$7Rp28tV;=bTIgnIKhkqyEwdX zAZ&Em#EIWCD+ga9o{sP4q4S;`?sHRvbJ%BXI3uSHBsC z+P8if)oILB2uTxOW09C76b ztM`Mv1crA3y|{aC=;A1+eVFEQZ!h_?(YcTAob$s8k2uruvB!gm<)?3n9M*BO7NZ^# z9z9>V>CAFC&%VpD!#5{zarDkOPtJLEaEA#;-TXHPu6kmwFJX$Ik7Isj5@+@E?HtUo zoUb4lDy)%tN_iFE0dHKWz4$R^=7fxdM5^Fj>Fkr{QJ{{lg3mt!X;*zeK!{o!J zH+t7IUOb-N8SBo_n!meX=8r2Zm}=`@(Z`#OFC6Rk+YdG|Y}RoW2OpN1K5p{yr5DSW zj@-GGUmx8ay%Se1Fw*!qL-_9#7F^}vIpmN>)V%O+18=&a@Bs}E-W-C=pd!|Tqs zv#2&Re=~eI#9AJAL>_T+%f+|+^!9{ZT=z)s_Tu2>Z%@S3$GFkgKXZN9n6SjM^NaKL zh2D8~=jB)qV#LE%16%@^@Kq~G&yP)S`fO)|6<=}e{OUou;&EcP<13GuPgs25-R!} z_k=E9^5TFqta$T*C5K%6#H7E+RS!KZyvxr9L!WW4hvj4!S3PpzD?Z#}a9zIa^=)h7 zuNF8xTlEQU{jAU7@L{iC_SFQhJ7~SW?x<(W%m)`@P58@Eo@PGs!NOTCHhUtD;K@d+ zmp(tUIKAP+1{eN8cwy)>KRA5KPw#o?c?p|eTuxO76W{Xj$rcxU2ph4+O&*dBPR|az zJ%Iz$+Wj%u@pY!oNNr)7<)Jg%uMSSbnjd_4?wnbinv%Ho%x!=0=V!3XMF(5l>f!r- z;N5J^AJ+Dv9@Ur5O%Bh_K0k360|S=9x4!Ygi5?fY>Sd?ri)%H1?%n6!{pw4;>JpgZ zyBqk@|Ef#ys5bg=?!4i`Cu{^Jy#ed1FOf^0o*Q-?tI=9)IPCUjLa&|#A9itsUJkx; z=s!C@w&FLAolOjGxWK5#*{j{GFM6alv2^v`o^$kl=!GqNu=}ckM z_3T=c@|o@P$J_ny4&)1457_zcI{`*Lm8W+(-_D}`Ijhc8j93z$SzLX#Cw%GEBfq(v zW_j58_B|*c{&JXGv&Bg)yLV;Z7wzFD`dshTCkJ1mN7V}7o>;?f@PR9LwY1+jG2IV# zJ&g}rT;RloPxYD!Ut*1q-oPRCRG;<19+nvwqV{-puJmE@C;V_S!KFrVOOWfihclK(CCq2K;v>19m@fWvyYxS7b!q2)q&G@<>>@d_q_^Okg9#(Z! zW8BQ?%Bx1tL(ee&^(oA1DOSF6nwKx%t;anT2NU*k+t_-C3me9Z2s2t`Gv7D*7{8N-tWkAU?*Yo^<1r}p;~+{`K)yoaWV7H#vdNx z$Dcj_%>`FZwqmS_AJ@$mZTB?(;&keD9sxDmUjE$?ma+vbaPADf7y_41 z+^pqS4?7$~J$hik@BXmyCDyoYJ#g!1XJlV~YdOrYH@7^norGTEnj| z_V|`7duLgUeO&n%VOxhUzyA16Uyty0R$-U@Jv(x+!+~$GcShE4 z%IgPQHRxgIQrx}g_Rh$xH}dHde?v~#WP8Lej}dk{emm&9!{%`L$m@&gbz?^J58uj1T0vGT^t zS}wlog>@L5{;ItmgvDMx{L2FeE-`Rt$A4>q6KBr@!Ji(MK?kQknB}Bb$Hv6Dy55ps zKjOHtd~i`~?-TjN@LR6-*}~MnUw?^vhy$N`;4IWYM_|>n#p#^zs2BX@SY7q%11!C% zZ*=SiY<2=CeKF#)_5qH#o)vgu#w}bpun8QT+%r-wa^P*q z?e`2b41F=jqZ(kv3pe=uNV(#S8(;W66MX6qd-3JrZ-_D2!^6P{OMLHGemJX#k3B3t z@|lVH^qUSYftw$@wE+u;p80*$dGl3k9PT-)t-F)Id)T?ji61fG;ckeRCxHWluX*{= z;VaQ zjPU8~HJGadrWjZ_WfQ+x{MA|y`0^2d=N}GV zgI!$sMm&L~&;;s#%ya`8*}TJzBhdwG0L_TG|@jUT(cJJh-2j`JN$ z43U>_()}~5F+aG5TFm9OF1MO`PT<1eCkBrD>vtrdPwaHz$wgp5oU3x{4!1{^az z;RBbx`)XaDe8l9(PU!d%e&zp~cVF{X?{biz4~)*!yf|!eu!d{2hEXlB3CzTv53v@n zr}Drx_|nVUnOoBrn@_pJh;Mc3wYzA<8y5V-?%Wf3+&MmM1ea>(3$xm?n{i4n4=%(y z8@})iG5On9JN>;s#l^WezQ)F|snv7QGYr3R?~!;mHRHf89~^><{nk)ke5x_d=Ec)f zxJGew-edhPg@XaF^WmS)bJOw)E-JrAQ?Y(yUYs!n?YzJWU%AN%fg zah)9-oqgxi8Ye;@241+(sS#(wPtH3(e)MrOho65v&xVg2=V?5j4{-StHodc!SB*xs z)QjpeZ?AD8^kQHe@NnCBI%9pr8hDuP`E}ObLG*a(5h+F7B57d~>=S2j9Buk7LSt-fO1A9ne1!-bzXnB@^i4~LGx zAl8N%KUmcj-ibIps6X(GINH~TuvfQvww}&CZgCJBPByvZTpu<Lxt5=}wOfn9 zbz}LZgX5h^jPl`9O#by#UV}a)W<)AlkF_*_oCqI4howxTT-p0nr-~Fks_F{;Ac-HCrypx02`%dh4G3$mH&-Uru z>-X%{@%P>$)_k3(J-_moqu-}s8)`P&7mt%6zWY%R*y0rrb+NO-W0$AjXUes4>GV-9 z7-HbSpx;5SCbM&J7mPU2!#JHde(dTe^_iWY{OpGO?6BDM!H63@;bY{>51t;e!xF=e z&%JlmR6HL%+HY<(@@G%@%V{5PIvn&)K6`k}Gw$))JaE`Md+~(M=>Et_Uo5O_e5*As z`0x#@9PIA8yYaOj#J!I@e_X-~gFck#|qc>SQaH{gn`Cvk^S z{rsJed+4nAs9A0N;sP&hxYn?%%if5`)+B!%y9?srXA|4KDv!B!eX)m)t9PRJuK|yg zNACz`i0jvwq|i?f$2-r}rrs(v}kYwnE1g%=mI z_=H`J?ufW@m7gEXu;}$hy=>uI^9jcuSN+MCuKZ>=)gKRB;*i~E92^5ieE4l2*yXAR z)g#w(S)SsnzvopBIPx2~mCKq9p4t9W9K=;Goc|jZ-{lOiJo=+{Se+|h_9VXiNWAik zFAidQ|G=|nmxmbDDxT<%-iV8vI5vAY#2S|83Rbz;V5}cs0;9p7sK<%K$p_kTEvyz=xrgIsz9lg|4K z4j&kD6kFbE!pH9n`+GyYI|K37JM8JJDIav8;BR(;8p%oAdRf z{PmcgFFn5D!IX3L#hCfRH9Jqd>BYzIRCYc;;q(sCb2hp8%0-H&m)o$GgTI*%UvWk` z;%#;=exL1cANFDm{?+uRxPD}N1H69Zr#`U+XEXdhhnLsl#;X{6aq`l259=R0EcVT5 z-QH}}Bl)sh!|xod;hFVmg^qvR!cZH%fsX-$KECV2PpmW5Yj|Sd8|?K*95HZFgOOd` z#NL1lue##Fr||~x0b}tOTO5I7Hq5a1`Ni4&)jxK4ILKFj#MV3g-~*Sy>p9D>KEONG zozE?K`gut$S|tBCc@k*~IGyojQu6gQEuLhr6-cslr|*rh z^UGKLa+7+%-<2$e3 z1&6`O$FKa(lTZBg84xtPTme0vtk#fCF1bMgG`>p}kYM;zT-!1Y6( z>Y^7*;PBNu5*N13)tbG!aoW2B7e;?~6ttOSO^KkhJ`OLgGuxls?BJLoyhE)Sb{ z`ra*c*_z8ICx5>C?xi>4!^gfJn3w0)t0pNEPF%HGlD|U5PdwJFI8!!0{mx$$O@RO$=$yYycWaE=> zxYftr;4dB)k%zy#;7-QftUht#`N1RBa11flI1}rz_&QVi&Q>hho{8a$54}B3E9zzQ zo!E?1T;Xj!;t5^f$Ke;R&(?JOs#QL?>8%ML{^DS=^VOetvEjjXDm-iY-*m}uxda#f ze0m1r$cOlM3HZgE9Y+4#c4&@KO81*bi_-x|gRUaI8J+aRZ z2E8E;2VCXkW3Zby#$K$L`o*u$EjD^~YeNomoWonLY~qL>bgtHHhG(?TE%}O($G*?T zH|Og|cKPBgXWZBcn;PJYr88j4$3};ncyk!x(pkd@$KDX%u!ki+UTk6vF>*Nb&O#69 z%U`Uy9>SCdU%bWe@9wa_CAfaz0IzefzSmEef4Sj_fz>RJ!54--Ubqwd%<*807abgN zIO_py{=F~km#e)T^2sZ{9>C^n#JN7Qg~dkfagmSRz-0%WeC5Q^-Awqy5|4{@LyTcA z7av28?Dp1T+4+*z_x@B%F=lvh#8eB8Vqw9y@Anvfoo6xm^c>lXHQ*%nY{bwLf(I=6 za>-}Sj~-8V)bF(P@bw=TLk@E_*&FF#h^gQF;Bvdr7(OJu{D%6)nZvP$VJ7VHz@@y|JR8>V z_WbzL8De@q)U9W@ln2N95l=d}o?)LW)kU8V96gnnEl{tJmYQiVUHu>kNf@EW5cbxqh`9si9Y>+QJ?R9;D@t;lN!xL9c*Gqwb6%< zvwcHN*%!C_Q$P7{{e0Q7;}d2a&9LJZhCM8TKQT6cKH^Cuyy_0e%qAyJ>et8o*>RME zzFcsextY%S=zVcw^2dRmZ||(~@sR@-TU^-V4l9gsyZdIG&3xQbdEn%`_a0Xwrtbha zgfEWhBP?Pa7GHyp5gwhrTEzIfB*8^3`0-_jXN1E?OuYH$+xuS(U3bUKj~DfxSV%hZ^raa=z^f2M^6GQm%#~XixKVhe17b}iG zo!Op<35%`oHEi{Uj~Kkev~Mg2SVlTAaBwmfgI{MEmpJm{FP5+yV%`?l54q&&Gec~( zm|?IHqg>?>TODEY6Kh}2)^{HKNHJl>nVv4e$Edf>c)7oN#LiC)9CyGSvSur%S-d#$ zaXY8~`pgb*`?+;h8w{VB^0CV=Mvv-~9QClZJ^%W!`fRY=QSTu4C*HX8$64OqqjX~A zg$t+t;HxIHxSp@DV3TZp4=9g)-w*lF8}X;B#<2Lrq4Tg$*BQXUO&lFx68CWA?{6=? zyTUWm;c1PRUceR)+o110#Up!pQHQ$0xq( zVV561-uAHgI9GER;=4O+;yV-T_IMFCeg;fj@sfuf9=$jm^?=|S2R42<_IguI@f61oE`0f&cXg@@US}t+&n53swt5FA9^sa|_d6a0SN`P*M~{29aJpmi zR}-6=Kfc78P91lBdGMDTFMi$?zx5JpoYfMBnEFB|hE9)&HGXWwT0D_MO=cKGd>CQl ztzLG%IKZkFeq!+M9N6)#H`(fI9L&ovzI5de3m%;q`O=${^6}vx2YdY6mv=6qlhw&K&N^a2cxL{Fczd<*39ngg z^}@Ousy{B(11p=nIIzj99ya~4riWMl@ab@|XA_H`+BzqkV8J1Ls@+}=XPIAl_e|xN zBY!sdbg<%FetIz^F7b-1J%2)157fjKS9QU04%u)f#p(ecICN?-hXczxUY)6)*H;)g zbk=y$mJ}{S-tuD-0nOV%UTRseZ4lb!B$fP)^gZx;$fIt1eUVQL zEN9+xOveWf|N6Fic<}k*yjW^tqjwL@>J`IAVA1!to^tWAhFg!);oRR4#K%Vte^d4M z2tIP-&2GRl-Zs|{T;arvf4+RI(^=!&I~=Zfe)Y{cbXNQczjP=2`CDFntH$1O@`b}+ z4)Jubc64^I*zvRG=d3!fX4vwXVe&Wgr%S(g0A85<7Yi47F#0U9ro)>U`I&L7arEky?HH9w*FM6EyK}3QN&V%E-`eTq;1e%x#7nFpw|IGc&J%08YL%C+ zd&dTkU4FAY%*ChA<{l7(&WNL#WUEJJxnas}%?HlD6VyfI$IXyKeElmYA3B)u=!tdr z(3&4%+g{kq?QfxaYrlTw$5U@ts*{iW@>LVR&WFvqu{q$vk$cY^CV@k5oUXjyt#rl0 zmV0xlLvKj=t5qDG7-#^!3lTR#MK4v%s zj=TmuVwlUrW(|k1sfC|-YkA=m%ZDwWu=pA{;6^V_-^^n0>e=DjKkI?TpM=kD*jL}t zygtid61nxp|6YR`9uA$6=fr0%E^J0;BUTRBbV<(^U%U+Q^!e1^IIt6#ba3O}xonLv zVGwJ!?t=JixUq-XtS`inSB<#Ass3uiDG?tZcKSHji%-g74y*d*h2!qXmyg)+>G$(S zjQshQTTJ(m&0fCz;dxK^-GpE9e5~opWA>Ru0Ws^^={CcL}W_Irc!bd&)-hi$j@L`3=r#x)%h!{hhnLqr_)Lt$l zAMr%&$?*EU!XB=f9k1@9b+P%;5&QD+S#ENN)t#a1Zt=xe9`?n<87}-4F?=^p4wBxy zyx?T--dAgNnCa9|Uj3xUW#4)1{N(X`iR*nqUmezjznb~DgPkXi_d4niUw(MQC;Z{z z1INgpuRJ&rarUGkwqDYU7e@>_K8s184?A1}r+cklgKsu-x# z=ud^`=kkq*oaM%y&>5YXefJa+y}4Sm@gvm$cX5^*KlWtfV80c2{it_lSZfoDgV`v? z%&!`)#fQQFFg@>;>P&C0uP{zm&QEd6!MZpxa(M4{-qpp2Z#=ETE)Eat_Rg5Uy?Fla zqd8n__VAnqUp+9pgXCU=7#QL4?|r}q$1~ygx9+hVYy>uek=R$GnZCT%blE!(dvS*R z^hS2MU=(lezP&kKKiEB^Wb20k_b`1uBk?d-i* zy1x7Jm){u@vF!4zQyjasb25u*@Fn8J7h@)IQAeLiop(KlW$ldlz^NzV*woPbhQGbM z{0Ln<_{)7NdVPmblfh5C!B;$<2Aw|ZkHKC~#2IG3;^bKj_U@3lY=`B?Kl#c<;OUDV z;BCaCy6MCi*73#%U%xZBANliRgVXO!IKjuu(1&}T;_9*eoAdR<8a{yy50Co9UYr^{HvMrQ*y-5AQ@0xX`>7n|D}S8D>j5nJj5wQHcYfyOfCoNs zx@Xq-$c0PiKxfEd#(|BWLC?n=R{7{!hht9+SnBQnhagTpFR;U<@673|4~9J)e9Uxs zz^OlKgF&x$?-8?oJ>V+`VJFsccSN- zE*!b*zk0>6k#dTSA0PYP&wSKFPg?WG5stMSV(j_o3+{CKVCGjn=HkS}p|i2)lgJ%+ zKJk)^FD~@3k}%c|&$&6L@bIuEeC-o?dnUxdc5cu&ni^`y(ITuyALu z&h10k>|)HV59`AlH*xaGEzjm+uTSyD{f-&FnVnd}{; z)rALMu&UEccmC4z@xRLm2Z!R!@rR+lo-1pDE1i4j-(B$UnfPa4^~#)G&f@yMX@)^> z?cYW5@2kLqN!Oi#RlFMTHPnPB9l@JUZ`k?Ki4P;*)k6=XJ1?()uYq5BSO#qUfC*b3 zBOWlEff*lI1XkSG;uTIcs4*Q(!hd7<8lAT_J72hQ&Q4eT*7@>N3lWQVca9B@u;k#w zS6ya94pI-we^6ido1XCPzekaepFHM#%;m2aZwam+Z1IvG2C)GmnSA2}7Z#miT^~A&&Ymyf=kwS106Ey< zndRPE=t#KLTc6@u410BolS`d(a);e_+zk26c+qu!@nM5Q&ko0)KODJm!=qec=wO5? z&i-`Z+^6jOth1Lx9_zTlvWAVfoN<9g|3>2aVcmYuQJ?UG%bqPPb=Cv+`fDwBHhB$p z7{uTg?>MzmI|V1-)5+JnSYAB%z;W*TPQ^!!=J=TD#HPoQUhe$mOvktHwR}3a z&JGSAws@F}Kh>V|pwjVB9`o4p3c==PP1CPE1dWCp?I>9DUCfjIZ?H0>Q?s9OBeWhui)hLeCHH`yDM#ZvEpU7LGW4<8R&j zO0DUwKXne`ow0htp(~f!9*%({G4iwDUcxI^9K^z~m#hB8Pj0q2(65dyyMC~hM=rL- zVsq!rVT$8NS5MWz9w%$M>cqQTVvD=;yT^!w(OH@G$PkNzoUrNmim5hwVxLaTiuZ@_ zr@mi$FYs?v7tTqT<*sIZg5`T1oSsz};S^)WM=kE4y42$g2wU}t?M#~K3^QN)`eeot zFL~Ht$wk=3;K#?B&VXn3?BGSOZa8e>aqW4;Ax?ZfkDg;b@iW704~G~%!+jr#x0#PP z12%uT@MXgVPq_^C<;Mq(7(PA+N$(4o^5aX7gFT#b^9lQo&v*03tD5AbbDsJPlZ_tF z^3aoN=NoT6Zv?I%e7b}5aC(2mk&m3k<6jMY#tef_?p!xhD}_(>A4DTdxSF_gI%9I1D#Jjt45fHxpgs~ zadGr=)KjtRj~n~;w7S%pe|~(4-k9SFlfMx^YyH;Gy$9@u`1E*hZ%&qv{~a4SV3r4l zHNO0}26)846$dllL=2t#;Qyy_e=8Lu4?md8O$>j$<#s0f9*a-0_AulTBi@iBeZ1)P z24>v(5dNJ7Kf3CWgT4N+(b>ZhXJ5VM?Bc>Q8^z&4IxoKQizEE}#K9nOV)s0l>9$sQ z^6{^hV)+sSF3F$nZFBvg$7y-k^EpgD?gjrluH4-ZabdyX8)tiGP5AIN;==dNpN_q} zdM_WHzV*(CGaC$hISe{+^!9AkDpxiV9_pg0CVeo@bSIo}zVyb)jEN2+-`#VFNVTqwG|*#LvU%$pO2aFwa2~szVVVzY-b^-y?FjTkL>i~%y81->uy)OI5=u1eANLf zTfFnJj{~39{WmS~;#Xh%K1KMK!?|=nvv*eV!wWNg+~Nn%n%zvqnB|e5)B}G08AAU} zt9`NR(93$iM9U%a+|*7at6!qp2ggwFongX-lY7s+4Dr?5H$ z=fEC!Gko@Z_Ab(SMhvm`-9bI7r(txaOEyIu6u(6!Hvi*XZM0X9V|KXsmJ%b5guO{q&QgONOHh#_$Ha$-JF0!Y`Lwxodd%pR@fM31x@G--P zpS2hq)yap@6FRnV-LbxNrrS7n-}`(=pjRt_1(!}7DQ~YHs>cFB0ek@I`_eBFNYqK$DV&ZTMm5cmz?^Ho0-ssBL|&*zWJ3upT)4| zzdY>m?OyTGZ+*gN`JNMgz5kXMoO%F{O?=-Sk}DW0Qm6Adaot!!olIwz%-ex%0vU9|F@J9v>Llt-a@a*T)A=pU-qS zyCeAHN=K}_d-%|GX0WaK)Ejy6F<{wOhn_U}S7W{HUYY5{5$n^r^L<+!9bSB4+2cX1 zw=daX)!*>q5N~rB;>6g?Mbz8<(F=AMe9Z9atzm^{53haaT5PuZvhTj~dk*vu_w{El zuiRptH{JiC>nxzU%D#B-kM2g0?h*u~u~5Xs7R8Pc6|pFtag0&NZn3Zj8x<50B$RGx zkP@Urx*Oj9I&;=z{oi``v)0^uPwc(VKKsPIzl+24vG_q6tIP6GhqVd$%rf+4u*_ow54&n-Dq%ob40~xRxdGG`B znT@!HT{ts)PkUme1x&oSA=67J6_%FO$jI2{~h7`LG4@Ase6!+5tIZ`x$bO zhkD3Iy8yG1`38BcpHK(30A>f%2U#cwn;{4F{%!HU>m6)?T}Z<*HXmusewP2M(0~6y zS!OTtAs@&8%3ywiEwGE}WOgH+^%2X5&zW72jda8YOJ_b}brDy{gKX$ywxJ%{03YDM zHOc~}6KObLJIjY0Tr+<%+sDQN@{!KcSRLqRzC#-Fp%2&4IToZL4|YNq&a6CZBg(Th zl*Kh*Z9_RG2W4>&8vtxX8qCg{w4cTM;hW^HyjH@?Jp7C%%|5!gmH_EUB*C+!yD35epvvlM^7xHkxR@ltyFk2xPjO|C* z2{{0H=o{F=%Ho>cLk>G|jWW#Fs0V$J1O2$h88Ds9PNolSzyVpX19mZexMzMtI{K5v z*1r+-|Na-{nB7blWI#SZ9N->h5F5}1`;fLLy0pquT<|Mk$n&x`+C4sw|P@C-4YzZ0wCgLGyG@=%BQ8rNg% zFyFvV#3AZIKFXudSl=_9(1U(JJ%DSZ0mz0vfOg;>>5#>q_m~f0Bk~!nK5T<6$cKE? zMIQ8{E(7;WKJr;?Fq@Fa$|4_e3LB8m`~y3YhqSTvAe*H_F3MxP;b68ge;^NO$cOFF z$=by9z^8!8z`la{8tJIVbfP})QJ1v|wy^dfkBxoiYotLA?wK4`9&#WP=dstY8G9(~ z!O3C22cmKK@Y$+(pWyqLOyFF(+?Y1U1l5ZncdLG$|4>2 zD93Du51e2iT-evpp#FyEjK^o*^8 zd%)x|8_*8O!~DYff!T#TW;3o~6Kgm0!B&>ebm2TU4gEIu85McZjW(h_bm1E5sEalr zcG)uk>O&Vm|05k`Pw6XlJKbcQahuMiU>aaXk z2kE#*S)8E*j7>us0Q=A;fk^c^y7>)$iSJU!_UZPdQb;t zARl@lkJV>oaAtO}cA+fd8X$%dD>&mG>0maXJPybm+eXyEJHG2cQS z9~h1lm-9WCfqZhqAcuYZNVA$?7%hiH)KLSixFHSAF@yeb(tNg zk88+h`OJsRE~LX2)^67CkcD)}LmBi9KsxSG9-ut@33<$Jmd?sT4s2w$usW!RxWO59 zSi4XjWdL+R?*Gr9NJlvqx6B5d|F!Vn|3VIH6KrAmtUS}nVi4`YHDp5q%ApKojBOY6 z1LQFs%x2U}ZJeQf)fJuDw*wCR7JO;Bg7e$<10oKXilpl_`0(1&^eW!by~ zKa8~-<^FBWzp=~inZKZefqJ+e+jf*6D-YMKPf?Ef0yg3v2V}$UvF#cw2kE%SfpLl$ zf?NO@s1F_Nz%_%}jdG|5kcTrnPzL!7+~a_ca1EPbFWQQ^f_)PL8AxMx;2!e>OGh5A znXg$MvkCQ>F62Qc%Y!XA&|c`nK5OiL0&-Cneu3}C+6H~d$ANnI?iqHoI*`r$&1__{ za1a0Beym)`L4D|Bb#M<^Xa`G&PBzaX4`pzV`T%V}8Rj$CihO1hWJ5PVU6v33;6PpE zK_6tWzWg`$-+X2hYa{v(b)X-6Na*`l!@uwBU=y9Ly%1aSuC@2YUdn zVGm@Y4CKHj2GhaPQ6FVtAFff3wH@`D9<-Uwzo-ix(2s-FWBq`8mInJF6MB&bd1Lzs zHnTFg{&$x6zxyrdK^^EEI~I`6a1Fbe ze3W6Zw!&tl;hw?dvc6_=P?pW_Ob_a!&FqZ1lg-miF6>3SaE5Hug{^F!MY*wdpbW|a z*pGXhaiF~b2hy0$WBrD7CJ%a02C`5GXO@R_*n+w&54NBV$|0`c1L$XZaE5$l2kN7} zsKabzcHgJU|ZW!XBi<29#mt;UA1q_O}`+gR+o| zGsXz!L)I6lk2;V6J5d*Z=iF&WGTCJ$#;9(gDSy*O~jJ%Db&Y-06TJTRM?ES!;sgZT#aVJH4Z74e1GK#bxV zF^2>4;X~#()ImDZ7?8naqC9KsSUXV%GEfdOPzL#s!S(`79&AKD<{><5u^2&IusIDf z0P^siG0LHROa}acJnS=ZhJNV50om{qWT6i1LVIC5$|4PZz~5QHUdV*4$b(JjL)KrY z3%R(*7=RrtzL~$_A9kQTKpSB{WaB`6lt*3YVYVS1c0mU8pgc>13|zx6EUwTtCI@Q* zfbC<;GT%ckbi)qR0g#9C0Bvt0@HdvI&&og_z`^LXBXy zu`}wi{$*#_3SICA{0;x0{m>1W(1Y~Lga#2Z5;C%rSVsItcoDx7Cy49B4dN=g6PG${!gyGU7q(Cvb+Wqr?@$mw>FZ1j@S;-o!=X3GsrsPv9Q9Q747a zAJredL=+P69s3Ow*N9gf7&q{V9-&LXU+6FR1pYvq$mkwIhqQ*he5f?h%N|2L$5tJaLY|eL69Ibo{6%kxRe_i~hrWocXV|!hVcj=+!1B5r`iZ z0=`2Z!pG=8^abVw^aK2XIDqfrAM^`genJ1EJ;-D82z-tC3Ud|aG|Y*Z8!-<;K757v zKpn^i=)1|pG-3*2NFXjSKVl4HE`Wf`VI1D z5zfRmViU2Lm`cD7#1`TTK0tp%4s3?4h`s5=Lc*RvS;R>4X!7V^#6%)*ByZ#bv5uHS z%p*1vCkgbUKk<(E^dGoKA7k$LhX^L>iJ7A_N1qdDC;YOSm`xyl5j*Kb8i8y01@i*> zANgp1Igv=j5h$BYAV%^C*!zxv{6Hd#C??RKh!Kn<%p2&>p9J~=b3fvF4zYrOO(+i? zZwU1DmT_CgnQ}}ys$8mEHN-;hh1?dzORkq(37iB@*0`)+F%&c!H2Rdle1g7)teJ!s z0o$Py>nFx0>_I-_18qcqVE(BhF#jVKFy=8gw2Zcl`Vwjc{JMs)A?yjv#m|Y)#7p8B zfqro&Fpq~4%A?AoR|vG#Zk*k?RfGdEkwBbcUVsm*35>HP1Y!yImj7Wk&g|FdM{Ho6 z!Iy{|*oeBO#9U$-0bgPsLwv!<*bAU-h*$I@bOQ7*<`;~qZv^IJl*b&0x@?WcHT(fz zV4SZcJc&OEFXA@>y5Up!9lk_A!#>!LxJDoDCAJew3HSk^p5uSOZVLkA1Y-na3wj|F z^99B^_BmKP5EocG5GRoYV(uDofw)7wC%zJB8~P8RP8fmt@jBs0d?DZ;_yIcES_gfY z1AY+jOFn@!%3=&49kLNmh-b_Xm|HL}VJt)w0R+Ya?0_uHZ8+l|_MRs8{l~@8i=#0F z#wF$pC&HCDK)}y9!+*Po9mGZg{jh+*++ji>&Jhc2%|d@cA8dI@Aco-=*p9wu^CS8Q zK8Js?*F;;ykd8SKF$CXZ9HH&ZFKj->oPjbJKkz5w0P7a|c|Ea**iB&0L3|?} z@ru|0NJo2Y2#iUz1#QAOL2R*j#X3+*z|I^3aS%@g6ZZ&r!h|RtDIGaOOeI7J9zva1 zPGH`|xcx|Aj7AeEFEJ`Hx{`QCpl`7^!n$ikz%J%z%=u^^{DByJL115ao_IvSmd^xy zkMk?yCh>s4J^YJ#4&xO4hj|EVE82<}L>yqvLrh^jqAb=)_yO|*`~-h(CEN(a3g#7C z0)E39h4G8=gLuHWLLTN3tU)!SHNRpX@rf~km_Q^sUeN#lB4VV*l5IRJ`NWriDxyy*l$U?%3P$HU# zn}?qhPJ|*MOE?lQ3GNZ@U-SK{kyRs82suKHa3uLW5g_ z+kwy`UU9wRD&drHI>vSU+Aks2v2XfF=yG&9yNN@@Z-g~5Fm7PnI|BZ}7(@JEoyR^0 zV|5wPG1BpCuY_kgEkb}O7%mugCmMzthTI7oVkvQ(NGFns(}XIKIG8vXPVfxz4DBI4 z5!pmE@q&mXB!?x3{~%(BA4EA(Omq^nMrMt?A%+O`QT1PYKEqMNQ5#|x@sYrO6k`T^ zD(rKP{KxIl+oKy+q$JLGtCms@r1s?)_t|Z2D#&evA8$=9IL=+H#gcspR%pz72*9jpmA=1FmfmJqs>@l#v zLkyyC5TBt$3W2&Pe}}++6Z=Dq^(b0z@LaTqz?{CGa3e6s;~4;B1?vy?IoPXU4aIta zc?kW8^%`p!<|gcW5IdM-F}I@M@yv$x5_Vy)_BUZo^pEsY&;J~e9+e(lN8lL;;}LTT z_BVeKupjf72LXAo7jx#Hgc(seQu%A&f#(LSA?JqA4Hpa*3~3VA2d@vR63+&n4NN8q z`wRO|5e~#$;s_B=2n+}exDWwEAK@|RG1yBu4>=Eo6K2C^zhbdrxM3J;+clz%a2$2~ z)fViN;VbM8lPUoA>cY(+ul=zkSZHY;Q z0wF{Q65>QNUo)Q%p-MdBeZ(t3Z0Fg|lf|9IJ(oz}O5mDKyym>-C=%#jtXXRa>}j!H zVXk>XoFeuU@aqGD%}p8{4UP>lpO{UE5@F-Qe#I4@Yw#?C`4K+fPdp~DUqpW+4iI;U z3#`%D^WZ%L=1KG=o)fT_!Thn4SV))?*iX(Nmi`C&Qi>2F#0dcc*V=?Vf%t%a?DMfd z#(Ix=81DqIx8Fb@?yxRmPlV?U?DMc^!Mm_f0(fE)OK|jx>%KCf1Cu`Q;Cc zTg*f79eYoMXNnU9<`eh{`(*SP*1iw|?-~$?FNrtAa{~5boxqxleKKrj>+`hHX`_5Z z{z(3>_cQND-jDns@J+zgacv~F5Ljb=5_a5nzt$ojZXfQC1oi-Dh(xYLt|U$p$BbA_gb+sv z#3U`BzxMCz=$#ner*9%0i0=kqCcz=z zaJ}Jj;kaEzi_^AFt6cREqXY581Hy7-@9`D1@E2D((gjYhmQ{@5m!gAj=FKVaV_Ru%xlhX z&VQG<%6FA7fhU1yEBDr4`{}E^S9v1^A_YQ)Lxop~t`b!zo(Vq_mKKs0S|Yea@C$KJ z_@Ho&XpLx@c$v7bgs+4GktmiZrY5Q;dR+Lp@QC1uV1ht`z##u1zXM^xXTgUyZQiNYb#U-;VXIGZhm(@45Hnm#zTK3|1i!$Ca-Z+sskua$+DKR-Q zxoG)ld0RPKxmQxJq~;6H7hc9$#`)6yrQ7JI(NBqTiSosTiwn7PxpN<7KFa)%{vq9& z@Xhee$jHjbD#|I!QOi@yGs-v0w<@qIm|Zfvq^zQ>!oJbIaZm4_-j}>Dd97uvWn$D~ z)J*kF^%of~G88osHMppGQBzkzS3y8rKzt+jMsC4A!M@|o$D7lu)2mUuNQC?kM zy`yDEi&?)}e=1ih*HxjbLKYGh5_lc) z!uW;p@yW+08(0`v#978!CJ@!;)#kfQcbP6XT5j~G{-64iI+8l)HO^}Ys0gU6l3yji zS!%P?I?;8a7D5(6VS-_TDk3T(aT0M7zTalJ;WuVoyY#hzJtA|FK7SkMN&@e+t&{*6{jq{5Ug4W{jK|Ix%EVNDWI3W6nLu zImo%qdz)8LSW)t_mTx-A9?%L+sHoIkZi+`hkqwr7RpY4QxtA1-vcTTt8kl)ZT&M}TFw=4G{ zu0vdS4}y0EEBaUTyY#yB{@(L@&)?mDce`}Dblz;e*(&!_?&tNY>s8LB&ZT<`_ZD{M zb>{i!_~&fR-kM#MRg~31lxLS`kIx&Qr(LLB=v3xZ)>6|_v!QuI^KYHMb$;vp)@wd! zKG-(gHjMYETy%sIX`D0;e(O=|SL=V&{-`~zA+156N}wvEG^2D!@s48kBK4v?LifAw zce!%8@|!g`YdB4urtbFc_D9{1Xykn9KG<=vL!w!tc}v}vI*BTYs<85~autHVg1^G9 z%C2g4?dn>UpDI5KTMApwb)D>|3petcM=mQzfcy#%6`GN@@Vh7I-o@<pk0b zwyUnAt|PoXyuGQdsjZWk-!Z>Kyj#56xZk*c^~maxC)`iCsY(2Mg!Txz2)hW269Iw& zg3bKR{15pa@{RJ2@;)Y-d761(57tDiA@*GMTsAy5Jd*s9{L6)w3*8aDBYI5Yn8aCzE05i%3UPaJCmmQRSk_ z8>Kf&g^GoWT1r|5QsG6&rtN*3> zmu9ARrnaiCs;)3GU1z$^BJD-mleH#m(Q68gD)lOLUE;XfakUba5)~~)EyZBjVA&q= z9&sgMCE*7ChF{NvrUIq{dcu0btzxZW2c!;2smrR%wvTTgpDULu_mp@${_Xf>vdd(n zrK6>Fq;#abB)lY!iyaq>7l{|)BkmEtV!mS4lGTzQWk1UDPT-v|L2-iOX5!3*GZThn zhh$}>WTcLY9~D<393&hhPD!4U>>#caEfOsfPQ(H61LB>couVbeCBkNcW`ga!?Y#TA z_HmhxnvU)q+Bu{&pfs?fZ%5y;-ebL|h-%_AA=e|{#ZRYF6fFyULmw@3Mp@(sQje3LGeF3c#- zC^jiGDYL1xsWhoGsiRjyP3t<=btH8sb=&mV^i1!Z-g%|@O0z|sMV)!2dF8tw?|yU; z>nqn+meiEgY-rffu&8lSqxw(vpSx>!*9uh$RryrA&qm6FM|@%EqXKZkq>`SAJW=a=Umo_k2) zdwaRhavz$OuJ_;Qzv1TV=KJ%}&qu3Xta?!!P#f?r22vEIU+fd z#D|Oz8A&NgDIM`0@vbqhF?msWQL@pp(c5FT$DE5j7i&foMioZ2M6^WQ3B41#J9u~S zi4P|}oC!V?d@AHrh*6kP*t^Jgk=8NRG2%($Nk=k{WSlQJU%+3e(2CNE`aR~Y|W&af<+Uo_ugt;544Z<5-wzzC5bt!c@ zwDZu;+8wn!Zf(1@t$I`Sriir>Yq?i(uTo#GzT9WA&tf4*AxCdw_tM=bowv4ZecAfZjiDR26PoKZ*U37`I=yjx<7hw2epb0< zxuuh#li?PvEn2E-s%o_C(u~rma+sK|JYD(ogwGQcr4*$u@?GS++<&?Mx0c^poa>zH z&QzbN&L)EEg6rg)<(pl)T)OZMeJ}4`-hagY5yL(&KqEk7w*GAWOoB^`OKbUrCDpGMYoGS6?`gC`KI!1ect-K_?-A04PsyJzFg}9>w=o^ zHQ$3OgDS7rUa#F5d zWAVr0cSP-oa*uG2DEn0QNuAglwl(Zk#H$FrWRQ%OjQ$q$EhaZEHx4n}p4OfQo%MzF zg_UKMWpR~pl{>3273~!}%XXG6D_&L{m>-ybDC9Ogt_DS|h0_g(jG==BlrO>C+Po>V~&a`UFmB)OK`F^6{M8UkAc{wr}G8rAI9jP-? zW~3Y@_|y2)_I%y*RViI5y_mS1c{vktj|W(>VzJ^SWlPHTRPL#~Uvs}ks!pm-hnPg% ztG`!&zv+I{8$pQ|4*F<@d5F``e8wDe-EShZNyLf%6Dmc%WI zJ3@DawD`67Pw<`KyCHBxph=`jq*|(4YX5}&6XaCoRF7*M*O1Ya(Ojm!Og&sBT*Xhx zPwBAYVZ{W(NySO!islu~41)}VWs{dp9<>^^nm=X!6p?8n(+&_~Q^lqhS{GWEo0Xe6 z895nE)0w8@tm>@lChsO+Dp@K?TX@mi!ncJFi5?PFky4Q|kvEZlr1D6`T+3WbP*+e_ zR7X@tP(x7Tfzkt|J#u^Gu1Q~$Hjp%soFp+x!k-A043)H%vXyfBkH01VmUI<&75_`* zFA>ZIF1#+h*sJUv+B>wSZ%toiS7ldbduIED)(NfWo6a{qXn4?Yp!Ps*Q&m&dg31Mz zugYJQe<=M>DqJL73QysSYU)DJ#-er156)X8rZ;uWvibc9f~ts@I-w zJl*Kn;@Gmeb#tpF(cawNyrXePBRx*kjjI?}ffr@YInFr_sSc^CajJ2CU;Mu4eAfB= zC*l9a|BGmhXpC)wZ9;!)e`;!WYWB9GZAC9DURFH)`SjT6rpir~e-!*t5SAX6UXW0bz#GjQ{UG8&#E+04A#>l&eW&nJ;br-w@<%ka-?8wq z@X5KFbG6K;%xCt4*$+0o-t_ug__y$fNe`3WWW34f$?VB|kp3Y3ddl?_(*)Cmb1~;) zBELj_Ssl4La(wvs@Ef5wLYDc&3AMYN|JD%5A+*o{`)I6!fVu!`>OnSBFYENrTYYkrk zU%}J#r|IHp;%VD5wq2Q-szev9$wptvAMh$H09@6BI8zjxqW z(@DaD$Aagg;6=eAi6V)1`F8nKwNy1jrWfz<-IMHK(bN0II zbssl=+}N|FXUj>KlP)iJzTA1p?U38Oz4!J`bD!qE)?=+lF>%oIpl1MahfwxV_6Tqb zaGSV!;$|5q8K>)uuP@&3xZkmGQQ@NaW%0{YSE;UQThq4Y)P_?VR&HLoIbur$UKeed zM(o+NXOq|lu?@G^-d>yMoacOS&A~N}8yq(bZXMiudFSPw$95mvJ!j9HJ!!6KuC`lk zx5loHT^+M9W+DF!{uw(=cbKMVq-boF*(#IHpU!VMVmN{yBX0HI>c{V8bA{&$Pgj_( zu)|=70iO+@&869wX16bFUzoW#bMa)NdqMYt!P$eeQ>La&ooY7KY^&Z@y+EZvr6GwS ziK)C(c^~yZ>NjsSZ~eXY_u4l<-uyUPaoZF;OZVpP%?(TmOqm)p zH6}YeJN!w=laNEfhk^$`41PEed?0wy$3-9gL;OP`K1FCw-mROO-Y-Q_Q&s!SBg=JiKL@6v^4ae5C42P`tImEwLrB%%XgOV6h0_? z@DA|~IT>~`j9#}yDt=M?(j3(s{o*(`Zo+PXCVO#jT2c_;HG z6-_E?``-4wwyd^n5An9-ZAo`QcY#^HS^o39=XnRe9sKrN@o&X>Kk|Ous<~CO|L6Xn z@y+qg_+aI0$JdTsy}NqjhvJ9u`x}0b#cy%DhIb7|_eb}a_mubOck6e@b;WfBbq96p z^y>7k=v&d}*6-GzHIOxc->UH&hB=ox*9zVhyb}Z_2p9?(3YiO=3$G=n5YGt@Q4i60 ziFk=5nIxG6`2_jzO5c?psXtObrF%+Of0F*BwdQNhXWGoP37;B1^~UrY)87;4rk$Ji zb;{Q%(`~2QzP5R7qiw5gD?UYh%1>h3)NNBI5{6R@r~Gd7yN!>Pk5!9hi{(!1oz|yp zPuc2E(VyaG>t=h;=AO+{>!;RlEZqJ9cL*4Zn>oxW(?^jNl zkTT(v{3-b>6Ru47OX)8qBXuM7LY+b#bwhPSdi*oqHF?+MbLQvFZLMsrdTn}bwoTba zmWWS@wTZPcur{z>YPr<%sQFRz^JeGGq6uwtZF37V3$s?^R^!tKrwxA7`c11_rCTLH zAwU7^W1MUpy^UEcdy-g0^h@_k|CIbGsVbo=FO1tAJs$EL;nu@JFF(6CW5wBpLY=_znuJ%6q6LAkfe~bE`444)!eJO$%V;< zD@sv+!qSfn|X;p*5j$k#dpCJ}>+Hji~)n`z0beBHA&| zF^-eSNxYkMHz_wUH<8>DC-zzFvt5W?NI+mfVA89kSBsx5e#Z5L>xmy7yia(aMEXVg zB|lDneC@%t2Z!z+x~qCe_0FzayKc=PjD3xL#U6=0GI(zAoE{V3e*W`g8P^s4G!hVz$JrO-Rt|((xs(yD&|z^H0U(A zb-8unH?jb+0I|KwdzGDyoQ=Y!hD{ZpFFv2PUrRPG-MlnyVcJ4Fdpr9Us}`$F!%V{o z+7q-5Gz>KG9O0+urx#-sW3oF| z*b}xtZ2xKZ)9xRLxgK*p_&xbOj}u=Ae6;bq=kK0I`;GQDyEeO4Y^~UOV*QEr_z`E- z@>R=ME?T*$Y);u6GdnZ8-)w)g#e5+-NpjM1{pI>mI#IL(6V+L-yIvP#&D_}Bc(TQ0 z3)?BSQ@m$*&zL%M>daufV7sDeMbqM~s?nZk=mWwy}5UDFIPWTztMovKsoW8c-Qx??_1Zm zu9K}NTW2-QYB*MTta7Ayr1(P4g`9b*^HRUYeT~Djtj`ypFGr$|L>-Jd7*i5g61OOE zQDSFOXHr;lSaNAfX^PNSp|8&~o@eA_gRcjR5%TAhSoASAGBz?hAv=LyJ7p;qD-{=36jnU0d0Z1nXjExbd6#*YjV~NuSe8|mbtmOc zigTQE-1aEq%l0pKqwhv%C1fR_eQUGUX8C6OW}nVFoh6$gn=v_Ua+-LGcuGKWK=P;5 zPpKO+H)MXx|CaCj-S_+3%D0ur>yOvRw8XRsbPIHc4ulTicWxyfB_6zM!+S0R0RsW- zpU(=P72Y7RLBe0oUrt0#M9oFdMemI98ROGtr_GKM#U{ljaYk`Q6DCfWcvbJJp1zL0 z&Ka#UT3MP|n%@awZDH-xx~FyH4B`yZCZ$b^GK(_XXT8t*#grFQe5UzKyF2~v^fp3v zhAbY}XKW{y+AXz9o0&Fq$*d)_)Mu*C{5t*Xbl)kyQ}$Txv2vK~Fj>n`%P>MaLOV?@ zO^u_#5dLZ%w~7oyU%cBrdi4KI8k0;OW8B zMW>2R-Db7TD&HjEq*t$3Z@l_=^%Dvw6vAc0WizERrS41Kmpn;~ml`i+A#EWoAtNDk zU;4hZos^x_Uy^@Gz9(>2lTeee5VH_lBeF*1gwP2gn*Idr`0e=VH307qt{+_Y>FBq5MO+Z;@}&$E=T8bxCze&N0q0X`j*e{95ewzJs(ThbdFz=svd*ayGv^l0 zEqq=2x^&u)X+N?`vq~QpKP+zf*77YOHzBt#t1s(C`iu1bcKN{w`{j;yhgl+pMjr&fuVt6oNkiadQ>&6!J{rox&?i zZ06g{mnoPjm@l3$j(5|(n!cI~O%|GzPb;6sw~%k4!YYMT0UH7~+}Lts%lfVBx1Qc~ zdea8y4bHiXau)^744NrqDP+0EXpK>)UZa=YE|_pT(}4?=s)T zey{!B=Kan4|91b|{ierF4{J|r&rQTr;t{crctJ>dNqU(PHJ&w|Cy57yAaQ!%>3tVm zFSy!mv)h)sC3VY^txLAfa+&24;Tqv;wbyEI$^Mf4v)yOAFC$iXtnj$!dC$|^%i9aj zLW}k;+Iw%?y=@oPURe8i`RC;!jvWmbO6^yxviIXNyT4T7zaGu^gy@l!v)j!F7l1mXu5lQAGbMPAz-dlQCdslBN+f;V9 z=x$MBUSeK!Ms&tt(qK|yED>E8y*6fT%-p!Salr|}3GX-u_&@Mp@_fnjn@?{(o$!3Z^YyRSzn&R9GkAW~{3zK}+0?q6x}565 z>ca4n@RA4ud&Bbl^8B>yv}~RXo(#Mnn3FOmWiWX#`HvJL^^eqRY1h&o5JyvwrtVGI zn<7Ej6RN4IsWoXeX$F}FnV0h}=PfB&QW9GcTXDMXblsNbEzK`GUv|d!$M)lI(G*7& zNB1ZyCR3wC1(u{ZaNuSxbFOJ^eJ= z@ulxeU&vs{AP<4>C69C-={(kQtmU7Ee;Vp*>T6`GWvVw4k+qSvLXAR=&)c52;n`n! zNO%a}7q)U*Irz>YX((yPuGg+tx?Q?GzA?Trsy?cIeZ%^Otd^{njJ}M%8@xAo{iXe- z->AP)*D}&F3O5Tk`)dBxT+>w3)ZM_{fKQW8GhQiP$w}Txo?dgyE+ky#T;(j3ER<|C zZ8SwDicGw2dfoJe#S05RD?clKLVL3Ij*L zig)Gi%5_U~OY@KOkHfn0`qS%AK_NjQF2uTz>pm_FS{QWs?d7)>FDhQ7`=$F?Kem2+ zlqmHp^^15O@qEtfIj=7VUJlItko&`Bt@~Pct@>K^nTj(N^oU=2 zukc=BNOnjz-U;7`xe>E7VrPU+h)sxgkake%yV7@)KTQ5$`N{GVekX}fj89yYwJ2+8 z$~rjM({uBKjRy(Zx=K9U$UBkOZ)>YQk!o$KN)-%@g z8Byw0>Xqr8>1}zy^1yRq8*$hBuD2awLzoiggcfn!>$uk%_ciYOT=%(3ZaxnR%2yPxDEcV-C@;`hpn-j*rHQ49zqP-$ zmz|eg-<-ZV8yz<~@-O9I%Ds$xS?l7~#c}iF=I71Kn^|d9X%%W1YDk|Fs0qmm$<_(h z38s!q9rx$Jp93d)PxJ=%1@^rjem&gF-OKGK;3sfJ@QPp)Zxb)RQ8eu_?a^q`XsW5G zsYoqKE&4m}?>w(;uWX|%qb!R|i_F2VgJ1EC`!Mlg;^COXF=`QN5g+NW3bG2~e$V~h zCCDWR_qW1th4aVo$6z0Y`P2BT@z=hTzLb>sl=!&Mai8%~-A4b7{%McW9vR#=xE**k z@T$rsl}isVKD_9B$@!AP6@@F-KGr@Rw>xfE-mSd5<-wK*VUNQen?Essa+7fObM`BG zRP-qOe)j#tcMsp4={wWcgZOsu+dY%VCXc5-oBnKr{|5gnfmZ?-1TP4l5;`UHPa^1J z(8tc8&LE3Gi@@9dxBYKDzxDjU(*sX85VN1pey-!MT<+kN8!%Rk&S8T}MNQLWf=tydFsDPwD3#t}A7xe0q2 ze0=Dz%VF2fy*u~P6z_h6*t2iXzLUF7?xM%w-xjZ1ye@xb{>sx!PcMyL6us!i!W#>1 z=G)A-nqxIb$X>{vdnWhHS%lPVsoDJV`R5BP5m<6*<)xLYomV@5Tk~y=0Wo9sjMdwn zwmXeqIez86<@c74EE!pny)b(r>^eX5{7jMQBGa9wI!&didP*yCm$+(s)%K;3w@TZ6|6cdW`QF-$Jg1T(>y4I77q+t_@uB-16MliNA;;t|2b0 zX{(1<5AW*V)o<5r*L}bBerr*EQN2^8Q|0CFm%ob^h!$jKWo8{qIhK+YlNIwk?0J~| zJNtJlpRar#dq4Jmq)(&||0VuQchBF&PvGbA@$uFxTdz3Wa<~=oFyi5s7h7IzvDT6aQvY2R_E=y7wcZM{nPf(-TQa%zrX$d z_PHD9ZcHKW+`4ls>~7dy#m9<|C7w$>M=VFYj(9EQFXgZPQvGGxi?kOUe~$m+z{PCNdHSsL_G?PL@PzP$Q?aLFpF}>1yc~QvxZ1zk zAM4)f+ox|kUU$5ncrEc-)6J%v*labuXnK+KA?brgj7E%ihId9&QBzTFWp3rnhM5ho znqM_vZ@bnU+_vG${y$gG5`)m90H&9O8PTXIGzY3Sjm&?bO`jE)!yP86JIMm(JKaFU3Hh=uMn-Dx%sHVz9M7dReVad3s~2H6exqoN)A zcI^A;{?UD<$4ZaIo{K%32p%sUuT0NO&%cSQM3Z}y`#QIEZYQ^#+~TpuV@>_a`jzyP z^YRsRd|mllrVmzL`)vQQ{^!@b=UryI%rZ?fO)eN;ptsfi z#-XO6rbT8&W|u53S=_R`W%-pzvPiOMp4>e7jL{jRO6^K*di+%u8!tA#QM6Iigx7>u zcUX5gyC=JcUL|*YZvWi=ofvEzY&+a?xCI|*_tf^(-l)7$d8zbLDZaOG%XZ5S{2KVx zAk`rC1fiaxo{^KAle?s7Nzsea7o}G!u2jsfnOzf77gC3P-nqJSb&|D`wSQOrU3Ikl zX!)$NS!ILY2ftq@@LS9F^6lkYn00@BQ4%wo2MZVPpJ=kjhw zz>EOd_pWN!pXN*BP%fu4Y}$I+}en`xeoV)sS^M<8+2p zid0H=bapiNC+<(a?|t9XQWlu@KJ9&9NMFd}FN=SDpVF1ll_8QZlCM>yRdluFYKcdw zN9n2ZQ{{fue%0x9>2>oP<~N)t4C)Q)xofyS{Ah}YBTLL?ab@W>(=bm{Pj(cSFcwuFOk-h*5lgi+KWGM(jL?v{4w-n2;Z5% zB|Z~xhu#k1JBR08&%5MWMM^R^+_BQQ9 zdWZCkCmBy#X};2YpUpm-yHoE@eKPIIG{n^_n^!iyX1!*4hIxihwV!GqQaPkjJHB@O zT=BWT{%9qRH}2Qp_V^0=3gUa#>*KGFf2jIURYOlhkACi+pm5V{PxM?p578x^{Hk@4nyN+}qr1-EZB0r0+-{eR9@Q-BI0P(Pq*1 zy5)7t_vY`-Q;4pnt|s4R-)4hWgVx(^x7)rE$*sw)md%#UbL!{R4^FPf0 z5E>jB3|$XCJ@|Af@>1l^*qyPqDYhy7nf;j=`5F0k#dgJeO81mT{fPP@TOnKFU+!P7 zT&7&+R_sBW199fZCbiCM3qF9@Xd}4zYPE1Lw^tHcj$Ly*Jan8EIV1&{;mC6YF28NNt#KT zV}fJC-l)A%LE%B+-l5*1`5*H?I)pfcT={h6Q&VJ9d0xeQs*#ZRmZ;^O6U9yjiNVRF4@Q zGor`5sVf$(SoG({KQ|7$4ZFQ{f9t;6W4FhA&-tE~UY1@8#5B)op62_^_u-Eb@2tJE z_WY9bOC0PS?AMsDF&EPk)6$dGlXVet5jw(qg!d=^PyX{#=cS4@i#2&{d2HoZ$giMB zik%(q9qzpzy&l0t2T@6!@I2vp&Fh-iFwsYxCg?LqdUNINwU99JF!9*AZ|6Sk-P*ei zcNp&I+}yeO*_vl-J}&*Zls>VT`_GJjW?ZqlVug27okpETGmK{#RQ#43MUmBVK=>RJf_IHnBF5Ka@WdAIii$j(L3Y{>l3%9-Md( z=ojcG^jhdOJvx5OjLM8MO*KuWpGI=T3&jf+iWQ3Y7ws>?can><7iX({Rrz`#=|Iwz z_$%=|gja%B!ja@7$;Z-;r4196DU~S(i3W-G(e}~pq3xlbZ$00>fBgROlN(QN3|<<% zwB_QKi=xD}3)e2JA?9D2f2saP{S7HUDZi?~s=&z+lOyiL-HD^0(2}`RxKnl|?MiZp zcZgSxR*qJUP>qNVjt;&Ya5;c}Vt#Wi@LHh3CxcJhT*F#Z;$ zmA{pr9^J(?Wi@3>R#mLcDen3NIL7VD7UVSOG!z0clXd;f^?T4 zsDOluw2kd+iwKAUDo83I(m6293@|jq07DMl-R=4I_IrN+cwHy-%we9r_FDISuPY3J z41p;DDFLtjU;E2lmb*N1VdMfBZ+aX#A31k9bU8e*dtldM(_-_-`j52*;08bzz--BE zsb!{R_R9E`@q5Gfpc>LLybK^2kPOQ7%k;Sb?*aY>{svWm_kbh7xY4-Lq{*a7EnwPk z+7N04GSxHH;ddcPAxVKvo=rXlV5?-S^c?XVVWVcFhEzqW&MMC;(<;y^G|4o{=t}8I zRf<=NGm0{bf|0yX178E*ckb`psT`>sFIZo&ZZT~!DKaYl^S3ZDFfm*JygKvhOaWa1 z9V;y>Edvb$jWD$^brDq&l{1Ai1@tr4AJ-qh+JCiQv|Y6Axaqjby3V>Txh%PyG@CSg zckJ$%XTN7ZXr;DwpgK@XWlLqj`N8>?S(aHcX)^A%Y^`jq_j~X6ei-^Nv^TsrtTm`L=t6KIM7Kq^ff4~zRZ~^tTJBm- zQA|;+QJ_(P%f@Bt#4^P)!8@v(lAF@9*0NT$ zeziUxa6#vS4vlQna)cCrR_sX_EX^rL*Ed|e7%3Y#`S0sNl)p0?m&Fkvup(sI)3Rq9njN+YFbMQ25C z2;LCv=j-Pa04xL21k(fq#RJ7R6*d*XxLZfmLe!$%z1)2wU?Kp{_a8(&h3l{Dc?ojvp(D9)og$sp?iHC_t)P<-EGZ$wrYWZsUI{7*I z-3DCtz3eM_QSu_{JnB4~Gn;dob(-~v>4@ox-ih9V=7J`x8mn5qa=tR1BAp`aiGi=G z{G{9@lw8Q&lD{P{pdg^22!QVnm*7i)#!PsAtmU5Y40L{Fk8&##0LWa(TqvF^ zo>Q4onHicIngW)z~95u!{Y-O1|;w%@MiO6^P&0C{1yTh0@nQ2{4?A$+*@p0 zY(Y#xOat@-^l%ty1IVY(r-vR$XAWnM2HpnVLcu~o_>SQe*TJt^eDv)UR}|X08TmR$5wHTJyW|yDs!x=z*FtBA$qc zHA!kqYD*3_2fKmVK#}T5b&LQH0Q7JC#{9-aU`9x+NIjn2_Df7(T=OF zS6e?deQKgZ)1hez|M8%MjoO znC+hJ{@(k&7kXq0hYN>C0E~l-gSEZ2z1%(AJ!Sy-^RCdV(EE-d+TXRoIISwtl;8yA1go`TOjzv%mUt`*ZVt<^9_Kz5lzXw5Qa(#=Pcs z!|etjqid$_qV8fHU>yMM!>M~4_cox98dyIV;Jkocid||)c}ICedqX?kDBei;tngV^ zGgq_QrngP6>tEL=B8UhUF%~hX{{zSEvH!CF^8d#EH|9umBrX${2^M`8eF-B8BU$rV z^VfH;?+Q~1Q<<`xvKNaKi@=%&);Y=g$@-~gsbZ!A5IrZ7g-MQjPi_n z1%UJW`vCZBc*ntq;zNI3{dLvd*WK60!^h*g-E}+rv-W2n=seJYp98$Jz}bu2`;EvtY9z2PX%o3Y`ia^s2vJdc7n%EIJJJC=B%s z^+FXw6&s}+rS+Bdl{Xr0G~~7Cwci=IGY~WxH2G!j%bfna{yg0r-Q524{&f6A`~)Zm zMxzI!2b%ku`%V#05i^G}ho(lSMwiBx#v;Ze#+k;L#^8AZ`%=X%#Vz_Z`ZZR0R(UEZ zDk)cDuf*EEv3=7F5Pd89_ADSdHaYh0m%Cqnf``ABzm}?lszZKAekf@oX(DDSW(u_Y zCL2c^M_c+@`o6b+Z#Ql77%;?ML zE5sM#lRJ_-zO{U7k!_T1e1Lj@GOsnS-K^ZKq^Y2(=qm3j&#cU>lt;=V*D>pu+_v1d zQNk#pY`ARr_r&iB*;(1y-;2K&oz|SzWVdCv!L|Lcl&qBOC+$yKHx@S*Z!T{x(Dvo^ z;rHPe;uGTQ=ji8n#_)^*YVl1^Oiu=P2X~b>lsCW#Z28pusrlKN*%=o=Ghk|NYVODK zk7f03_3e(6j*}PEFQ`M9LYUxO&6>xWr;Wdj|Dn)Bp>>gUktB&Ei43_6xhB;n)k}Jp z^m0sdOn+JYvM9AKwFXC;?X3N*J;8zC@EuSC$aKtfRCiK`C76>BAQ)f@r~~|V{_Ttd zSU6cY&D+h}eX;yvxoxs-@}KU1x}Y_s0W6P*hsqC?n*oi8Mg-I&nroPAyjFj$&Zo+! z3eO!MIUl*}($}RaB`GC8ihmRb@@9!dsYEFQSp(S(xed8Cz-`&vvXL^8GKtcO((v73 zAz>i_bvS24&xqCw*9+efx+8Q;@RndF;EwPe;oG9OMUBOc#g_rlcm6^6gRl_45dT+> zuN;Dmf{cmOiPX@;2=nXO584k{c35@-HUc)>*WLelUVAorHlT+YYU2X|I{;t-+;-n_ z-+{A7u05_j;a%Zf{!RW(=_ToI$BtK`=Yi60UT z;|$|EVmo51K2&{(2hUj2Sd!CMr>`~{HW|`C0fo|qL1jT@z;;{RUDsWghDw9u7E}~q zuYRxIq0XUBt5&NP-e1X z8}26hCR(mRu3->8h(6bNu94J4YT5_1|;(`gR+CN&jI%Vu5zw&iSmi^844K+oQj-^=?duz=jG1JL4C+QfqMcfY$|N- zH10Hn6T(UCcI-BYU0R8pi=302mYasPEA)h}EUYX9ZUkqJnGge)+&z`A1i{_ko<_;h@67Ff_#`#n9>=IGa9!HZy6G-2v$f}q^p&Wl~3!H z)+=TqW+74$QW5I_OTaw!VI^lJ2m70X!h*s}d`o1FR_f6x4$8TJXB>741H zhrE}nm+B+sM@n))EJZ8@CpjlM%oN2QU=LtldTD-XUS~vSM88YFO9QKc6+#Lj6KfJ{ zgzAOrfsC;c>YY-Fsl?Y~ugC6B-=Ef>)t_Yq7|$5bP)}1&Uz)r$`EmT?_$ksUlID=+ zP(Xh`e+VIj09t6>i=B&|S%Au}$}So_4PFl5+3DFSgOkCTpiEGOm4%h;CF~{8Q^i`$ zTAW;-Tpo-JMpj@euwAWPtzlhZU2X(7f-q5-*f!KQbaV9Ps0GP_WIt*@3h%zazSTdE zpU1m&xOC9B(ziZodC~&LUhQIdG5pQ`oBcE+G$ZhWCqFGeeID>(5-|2*jCYuKSfEd! z58mG$S{zy&n;e_!8|xd*n$4QewVi7-=`ras9X1^vj((2bmdTb$gH?kSNIKZkSkhRoF#$q$p&@YsRa|rOEY(^ARWXC_dqP!bdAaE7T*> zBhn_;CiX%6gSd&9iP)mhqEG@~0^b4W0q1+x_pAm?225!TX$&C%e@1^sSnmb02C~AQ zVFG&sdlW|$haaaOCkb#LfMQ3nk1&rg!=CyZ@;BsahiZovn-!a%Rz9tO(q)Nvg?FW6 ztz+%s=EF^qZISIL0A>rb<*@0nIk!FsRAj{U-HqLicbo4v*#KZ9u<>m3*(UE6@0QJ` z&1U>s{Mz8+;3EAr{j}$>=P>jf!uM?eIsna8$5l62Gg$KmP*_`7>s{wv=ZEt9=Ofu^ z+G#3oEpBz~bnS$>825Va^-Oe6bSrcybok-?a21#eOb#js#RZ6Kh-(Al#0v0s;{OU&ud>4&w|A3#EXLO+g(Bklsk`o;QndUSe3+eO%mDTlS)FXS&I3m~F8qS~UuqGF+Rp_B+HsVu1!X%J~xYF}!H{jav^wrM!0 zf^!wW9lss+J@!30K=w}dj^U=^X4!Jta>z``3}J*YVn#3{thKDQKtGy3QXhG>`fBxT zkkKz>(sSa(=w(QMKD0sjH7H>x+Pw5YTQ&tLv+<-wlo%f=ate z`w(sj2R}DjJS{$DC}jvSi zUWgz>kaL)G7;6M;1aCNRcr;)afCs2Vs6+&W281H~5PnIvNwzoDZmN9{_#klg%+)jc z6#5i2lr)r=nJzP>il&OP>9FZEIW;*M1sVl5g*Sz_Mz;RDo7hI#Mr8wD0}KEUBOgXO zL^wp8gq?)30yqFy0m=XbfFhhCd?a)vG$$x0$kfZ!tKPca8pt&DCzU3ZVEqOS+oi&# z!a0&Tl9|ex%Kz#8r&nlMXesL|>-xg`h4=N#*I^{VWw%RimuN1~TmV-;SG+CW_Kx`- z^RtF$4L@pq)QU&MBj6eSN&b`kGlgdg7K#>%K*pf3B)cU0P4b(hsEDXYJzqT^9Ty!} zI9oWIA*&%P^pBB&khXU`?|2^ZJ>sJjpcI(kpWuJO^MogwHJX)!hJ$AGaP%;5DQ{_f zczl?-gSi8SScg`HRtZ!HRPa^tRcX~})xog0iOz}6guaBnz=6O4D?n0TQlDJ6T(?21 zL2G_fe$zqYK_j7=&$_Coej@lr9=L0)gY-rCXI z(VH=nF+w>(IS~Ya`uDZ|wSLu3)lQa1mPTSNvG%z9xSXMkq0F$tumVwws1-+xqgk3+ znt{!<Kh%7v@vio+29ZfMe~^EWmEcq`dfU3?uI29gqxVNJ15K4el_HZe zld=h*1n8saqY$GM`*)rr$Pwg(zl6Wbhs%dg_nz))?r82PY%72Xrq?#~j#2GX?K>Pf z9Kj4(2MPxY=xZ;dE2I0$@RebnX`V@xRg@KKc)_cV3yd!XfTURbK=wekR=HN$Q{7V? z#9nDZJqVD{8H5;z7+0UIK1*v!YdK{zWwUCxYKO7M*atZTIYc`~JDNC~I77einERN! zpr@cGh!629yij-{$t%f=&4bP3m(wq&0h<9E%X60JpuRF#FIdl0%Tw!y#tj&cp`oCq zp!H4rn|7y8rw-JiFak8RHMHR!M+KpRfV2K$g<^$c`D1ww1rCKk#X!Yan>)iqxN{%ZWyuu`{D|AhF2=uzxZyd!%@wpp@S68`tWzMD57Oe{<+L_9>? z0x%#tASxv+CCtIk!GE3eI;T66JJV|I7JbPRY-bpPneOQ|(pl^%?LP7#|!Tv?tmVBk_@V$yUi$Adkfe)CtsqDC=sb8m5|isC%gJ zw(vHIA&DXAGYLEnJkDXrVR$6?Nbs@3V}(M^Ld{m4Rviuv4h{G|Bk~jZNsJ`MH1afZ z5SM$9x0AOcvn{ht11Q`o++x^Z*zj2PSk9fzojo^pZVbKy0=fgbzqNk@Q(wXMu;}j|9t;hmsyt^ z<~Pjm=-koyqx?s?Tee$vS9(|a8{j>_M#e@4A&ZcW2XxAH$|-{9it-g@f+|5(Nk>V? z1UwIIAKJ3|u=>!1(1ch=SVzzRYJ2gQZPg-S$7M7#}s8|oM67f9trD|qw9=8e#>(6C=Oe%(k2P6+;R@x#SFhdze^!vVu2 zr6i>XVh_ZA3H}o766q2tku8y>*Pz$9X?)WdNGz>I9Yh_j*cR?h{xaw?=wJpUoQv%* z?JvEZd^;IN3L`-+*U9Y3EcDp}+s`iHkZ}0=r*2M7PE1b3jl_*K z^)>Y+cP4j|_yDkhbb}bRwz;OcCR3~__ATZuW*57Qg*79rBfs>0 z>AOw3O?oo-WbW(w*LB#}R|6Trd=z{zYLFs`EQsvu$=4IAL#jhy_1p8<@z}B6w%)$8 zb!Q8=iQA0ch~D_T`gwJFae5K7zGgWmIVU?tJN|iyNu#7u&vDOjU^$u+o)w;5T3A}3 zSf^M|*iYE!qTr&)V#;EY5|9#jE%RCi9G$A!I@vlddMlp--z=>%t@3L?BOnz3+7?QF3VsStq@PIBi_(jl@tN_Bv5&F8V0yu{Lcc;!q$AQP zF(@(IXT8q~jzu1{5L)PkCw-2ZaYyWK(2wG;=i98Ll%dF)lG4pE*ABp5{G`5`_|l#finqxxI6H zuA8o#z$&pOxGK1sy_UV!veB}kw5hZ?wLZ1Zw#v5peE#{o$+*e*gZ>BoP=}a+NG*^HgXieu=!4$I7k~r8 z0Rd)QJ!^T^vVdMdch+^*f%3E-i@{{Hgq&BEF7&Z_#FxNlVf7o-_^Se6XWMAo7>kZY!#=WVooZb^G9Ou1Usj)m$--h&OA1Rs^kQK~K}G>KADd79oBa2cqANwX za$Gs=3&Ol3_ip#@puwQQ>r>aKB-SL>l8=**VMYR)8_lgPp)IkXw4k)6xu$tl@2Z}! zzOTN!uDfopMz4mFvXZinl#bLc-!7jplQ0tp83!55Cd=mV)bLctK*xYuk6MoeUII_( zBlKyJv`8WIA@eX}YKLrx4CZDI2@eSuDHkbs>UZiVSR`27b-L?x4Tyf<`n~nLef9R$ zg^-01%Nv$A1VRNu!N(QGAHg31J&b|TfzfH9X`$;r>poiMTITDr>$0Y-rmQfN@!1~W z;Msu|l@^s1w-t9dA{@c#!0FI?rT2U9!*+lTInqQEdKi(_c@AK zi&!Z*C^&#DkuOd%PVzwQK#kFi(F|&pk-kXZf@=lW5^f~i09S=j+i=_P@1fsAqk^J> zroE@V_Z;^e`_1~zQgl*uRFzeg-6h>6V+3LZp!SIW4F8!B@(^;uK4Cv-J!t)C@o4ef z!np;QW%+0M&+`7p{>I|r;vw{2z`M(B$=j0f9o44arvKdJxe1W^8bb3G%sy1&RN`Eq zSfH@jwAj2ld3Dmh*S;6gf@tYNccG!a#S38DVA}xmBQ9buVofoo7>#<3dai1&YM9UB z41flsXQ*c=zBazLmHw4})d|%JrFo_KpG!Z%$+f?fIG;E_Ha<3v@5A>2dlwGs5-aj6 z@(a@n(_E5VlJ3UcjidQM^I;t1Tij2)pLj0iT#8ACNyb3lK;CxAcFEW3uhsAC-q-1( zbU_z84aHN>Q_oh*R(n)+1QIu%RSf|IY6NP!YP)L3k>kj>^>6ESF}fJ;hI1rHE3lQLcGW{-QjgB%$OqAgDB`^jgKW z3YY;<-dNrU#Va+VHKP=Z6pJo9E;~?Lf9~|T(_Zvm^qdTw42JZE^slL3Q*b# zw%~q=J7jmr8tEG8)Hu{QfCNqmL^w-FDMu*-TeEtlR;5;yc9iy_)}q#~=B_4)zSH0b zJOd194`^2!RvNCEt(j$7XIg)B{OI_?{e^qXg_sLK4tVk4(!nK07_C-sA-2j6rvtc@2~M+W8QPT=cuiztut*h zZJ>?}wDHeznQ)oZ>eTA+s`9GpDd;J*%e2b~N()MNNp(rV+>AV#JQ+B1Apt-nj66~S zsi2^wpj4+^ryPZdLgcIFt2(JUsj;ZDsPk#?X~=8JYx-&VX#qRD_JPiU&PCmey0JR3 zI)j>nnhS^p1k5mt5RDL}{B8UHftmv%hmT8x1Z=b$>`sb;ir@kJ1JqX+k+$>uxTYNk5cEW;a zL44Bwq#c98pdw2nOJDwc`O`1mFI_TKGS%;k-x$MlKmQ%rKqzs9RVra~t4 zy2KU76-U%W)PU#+G)EIhQ&nSCBPWIvqgAg}|EcCv&GoA5Rj(>vRmKB?s)DL=0KFBx z6<12Hl#&;b7x5PI7LEfFOA<>OD;p~nk%~x|r{@bOLKY!;Yj|tKs>G@;0njz*n(6xK zdgz~A>00TUCQcJ!7EURtl=Nfl#~8yn!?@jq-NetypOd%=+ywU+_gKnE%81~Q;E)PY zh4{4ZY2Q-+QorRM#KzRdl+%FI;Iisv)l1@+#NFB4+2H;P+zxI>a!GQ@aoTa3ZIW%$ zc-nYcZ%J?Ic=vc0&Ntt(yk&u*@9E;{;>q&K@?a&3I%xUp510>_zjb))aNhI0C#xT; z-?yvZt~!J{gu%JFN2Et&e?)(TSg2Sih;a!J@D%VwS|hD5>Rr@JQ%qA778e#b6EG7f z;V_;#V^M$ZlXTl%+HZ?oP$bL-5ln&_J7iO7k_;E3ReTj96D zbHj4O&I3RsSlC|ZUg#d58+bP;qB_apB|;=*y^vsY)Y%KFOsZh38aX`k0Ve*rM= zHSTp0Jc+)EzOn(b0fko!uX^6_ykQt>7z(86At~2VuB8Q~1%W6kzYVVqFA&A&xMsd) zo@kV41lAtt-vf{tk{M>1WSIz@6F3LfHd-TXkTzacURJVaWzVMQrRZg}4S?>a;9t-OoraMgH^y2g|&w%GI&)-{n zxAv$usWwkmPgbGlNpnMULjpj%O1lbm?R%4ZlTdF9wT)a|TwTOAKr6AeuC1gDQ1^dtHSfQG(?K1G5e;a=ChuBWX}TSu@XSP-j;GOII#F}ro3 zw5#7jZ=o|9Ga93sqMD|$)7VASA`0q8qRXPoT>rTK+0Wb0dzkw$mob|$yEL;ja}{ti z=VnfLet5o6iBO4rwS2WJ$`zG{O~X<(Q8j@mAqif|7p;M|^su^96uK!i}t5T&{rFgnv zx*!(-^I$}(MXJ5A-q_>L<4)E=)SvkkgUx=sCU{q4TJ zzCFz&%_IB?{siv7dr9_^%nXqFU+RA_=Nh?(+#6pXU;jS;eSUascx;8ZLY%-);8QzO zJ7Hc23z3CrJ83(4b?xe!;)&wP5bY2x>}UG%`|*Q#f3ZfHMj3Jia)m(vNsc5JDHSPI zAX*^WCfFu8!8ZY|27EaJIRd4krJ}sjywb1bU(0`0`ldH?LPY_$GTdEam6>5Cyd|+b9qwb&vq?rgG#B-(RN*?ka@@vv- z(!mnJ60bp?IZ7BMoFa;SqS(l@l`?`JPM); zqHtbFCqyUY09XZF1Awoqz)#+vyr2x?Dq=5Ue-5&T?=#?{nSfQWa1Yh!l+! zjh2XpD>x*yMYKf}_!RgA*#+6*3^C<&%4xXA2JSt8`PHL)qkDS0db=Q^X~zVzYqDFr zU%MZ76nE5q(tZMW*umK%+?$Yjka_TS@9iFJAW3aVZE&t|u2{`m%{xsxP2L{4J+epK zBgXW`^s3?2@NYZbcGLlr?NrlLlVYP{;}y&m4AeNaq1sTX4XF*V#)8>h6)hDl#qGuI zzdL?|1XS-1CBOoJtc$E`qjRHkx_!DG>Q~M;oo|BY0j>^L2Y>G2dmZMJ!E->pR=su* zHHZQdE$m0!N1SViYX{Vv^@8VV|5KpQTJC?@_pFO*5&-?ilm(OpL4Sh&%{8Hq>_Op!!bm`U zQGL-y`9?W^J%2rr+~Wv%0{-g2)qz_hw?;Nd8zkrP|HpXDc#N0COJW>l9KAVwa~S?m z!deo3r=a&O7$1!H>GbKGZ<}ueHsF@n=GbO%EMecF-=X1Ww*_#)x?q!VNjUiVY!SDJ z$CJmCx7Tj3-95Q`Ld8JEU?pHB@Lm49{DjtoR<}{N5$Y`JEU=WA`J4Eg+||3Qr>>^1 zwk)$OLjndL*n@$KOW1eWcMBH_7h&$e$?(arFu<5(Op=(En7+Aub9r=kbQk*cEtoBs zJA^ufCY2|Z@0#8+AFT^6$(4 z0|@yD`M?FcV$NdD-)+C!npv7z%9zQR0h_hau5*ndMCLmTkDrq`p_la5Wt!WkdTuV$)Xs<>Etu~rSMhE;D@ZwGM*Jyd;E zeZL9634UFEU8}fNTsNv46;l~gSyWt9EDUh0aIAQNdVv~j8*F<+kK z-dYr$6PL|bAEA%*~RBs8&_Sh5OWQJ>= zYu;(aX(etuZaefi^mvkdk{sSQv(IFo>0s?()#uUY*$~D3}G6ZnL>V_4oEvs#@L$O1tbE)&T%eIRK0N6Mj|JePp1F}4;U*^Be zLF~_2_`L$wHIsd#eWRy_PyfyPVb*nuS&A8mJhJ?3^VufdF5ND~KE$5Jj>hhli+x$-xSZyIBIV|qR&J|@2AzUEvOTo#Gu ziRLZFEygoCGdiZKrm9ZzPVy5{6H>1wUrWMsQdd@2HbXH((N5J)RaaA26U0~QfVDlk zx3z9-Rj5{|g0YmswB)p8yYvX=hN{GD-}bexPGj~%}>c4=&2bYK)_`almyHa;5< zbEY}!IO?j4s*5&rHgkH@d(*#u`}z%P!Fp1AQU?I)-_*ZRq*J7)XQpR{=Z5E=&pV$7 z^LxJ+d@nd%c)D=w&(ra++ zigXJ2N+nptTg3Av@g;44-Tvy9<(8F`pOddts#FSAJJcAXj8V;)W{g3TK@$&-2Zw4w zwLEQm+6J?~(z?^S4SEfFEe9+I&W)TK(HPShGafe{7aJ2BI}7&9TxTdOGW>J=bJ{c7Gt$%2(}$CX zlU)F)2?G}D1)6o5_1xXu-4pP@nE+Vd#A+jABVvp&Ml7CPJWFyTxh?rG`DXO!rQ_{{6+ldxzBU=v-h)KX1&b%nfWs_3nL5TIPEwsXy;Hk z9yuO?GIR~*cR@W2yz6o{a5j|Im)663gcw!~n}|!q!R$V8baean`u6q_`-sUy$wTZT z>?0z*_*+$v}VOQ|wc$CCU=@tM*sz zT-99Ft%_R}Kn`C10MK9AU-_c;MeR4#H&ie-82hgIUGv$NvmkXyp+yiUh+Ax0Y=Rm! zI2%>Ps$##Pzo9RoE}`J}AI|ByYPf3ls`siVY9?xqkVi;~28jk3)V|oV*a9;kt9z?^ zrv|15Jcm4oN(V{@9`!xytH4*_iS5L8Tr;luC-x_{3)6+Ug}sH%YRYP|X|-u}?{e?L z_GA0iC)6kItlU|FndB^#ER@&juhWM!hBMZlsXgOD?LrNAIf6BCd-m)0>(ICIcJ}Qo z)DjN@y5_p({sW61udQBNomrn*hgzh2fY0ln*VR_kR<18zU!+=~S}2$=nBQ2~Snyl% zTM69?-4Z_mfcXR^HzhaxWr0$G(w_RB`aR8in)lW3tHXN+Ntz@L_qQNLkRmZ+F=DTz zUP*B&a4Fyscm$9KXqxMp>scFG8}=CW7`+DM>gVc9X-R2`tB9*`$#Tiw6u&9nBitiQ zB}65(1&9)l5~q@*lFLxZP?^x2&~(yw(#IR&jgZDjW1Jz*Fh(avhZVt!fIY4$fhhqH z?ZWvC#!Sp7<;JrpW=UTU+62!SCsFl-ch9jI4C(N`N{anKAwC$0dcbj{@ecBwCl9%S5~jA zMgZbg;#Oe(1Q=7yUKqbHzT3asU)5ICc2Iv%53^7le>whA{Gs^cOX`7`NwD2 zAk0h8OTUzNDUYIpqGAp`hsL&J+rbJMf=a(ie-Z#hG4=9w^L2B#bGNg!u(Vuiy43Uy z^9^I%VBGMr{$o8)9Zy|KZAvX4K&4KlZX7+19%vqDE^IA?a+KB?+zigY(ZBIc!!M(a9UDCkpz$~!qtqg7qZs_dl?1Gm25!|^eO(RY7i|!X4)PKX;v~#m_ zvu&zvO1@9NFQyfMiNVO%$=5xveqQZe2`Kk2Z!T>vJq83+1XO_6UF{-f5o6wA-f@$7 zlL&Jz!PRa9YA#ziTR3xMb7VnGw}Fg$&W?oH?2~YTawytJ$sDoek*i>+OS{O8EVPy=kbmVWwrKwPUtp ze#-fj6ZU+DM2AEx6e<*ea9tXQmAkZedc=nYdAR~Da8oKXCv^GOH#oM~-oZC^OOaO!dG zaV>T$h7wjcO&3iUNk>V?7~2@zua;jeWzA&G42=wpD0C@wqt&C;kCcv->}Bm`HN`Z= zR(V!=ycoS0?a1uNEO#t-rory4z4^WQ7Yi>IJXbwexp%pD!AJYomD-gW?p1?356S_+ zme1@*=SK$@8y;;PZQY%@JF`#RCxUBY$C;)xO{Qp5bQP)!1vP|~&6Uj$J0Er`_bT_o zMN*#zKMg)2J|Y4+PY=v{EJ7EdVb*bOeQrH`KVNUV-eyWLC6o=74Y^LZPMFM^%)ba;y~2a%i(@vo|s}GC=%i zHtfA=mT8t1))&?7?kS*yY*f4HOL&zbbrH0HqXM?Xd8e>$yCV{l$7VVY`AO$90VK$T?Acjy5DrCJ5P7M$fL+Z!Ck?9 z-DTZH*GbpuqWwjC5Y=Q;YEf#jV76fP`0V4enWmYh2or<}{CPVtI4}TTE5l0TN@E=} z9Wxh87t3m!YMcLT|Fhk(*|B+V`QGx#>U}*n5NsH+kkt8 z)`)9F=w<&__pPqGsJkdNJ2jjBEB#lYM4`lwA3lDVik*s0{*e4(D0V0|>0J{1$KOGZ z%d@0sNmk#jzQbkmZGYPSkX4dZhSi1DDK#oJjNT!PPF}K`!OvpE$$isJ{LY-_*fNR72o!$?bDCcAF1(~@tGj1 zrC`2%zFeh~ac5IFE0c$#jSZY#VM9^RMkfE_U1gWZGZ zA@qJ1myG7|#>6G%4@)C%t-+`HLH<)fPLG6dPoVOf7lc3pW z)MxbZ?8mb&O1ye&D6J^Lek*~Uz`jSlM-4raAGSVhIj=acK<{zXT-2P^tktXx z0PbrFm7Yr_Z_513F z2tWkH_{aE1UW&X_?p5yf*zK{KlY^7Pw#Bx^dE@iOhdPHkH5xS5=1pdMMg(P8vsNB z#Zkpk(AV-h{B<~pmbnf}AAhrpW*5c0#k?y3otHZ=4+RYcftZ{ddf|HED*&iZP7Y5F ze;x8VMB|Fal^CxWuWILNXOb<+7WONO%!U;f#V%#jS8G@UdB0K`YjCMqT>3aAOFv1+qw`|A1Xo!39F z&!)?!3*RrT@~!fJMgNLIZ_5$W5fh1;L=E?L13AbcZWp%;;v2Vy)`!;TR_0d37sVHu zW|(HONLeIuA~|uVbLXGW1m>qeKZ#VURBHqwf{;i`BmuemLjGp{Cd}fgI;c8O0Cewm z?~ZSdZ^9mq!>q$B-5A}N?||tzxsdmdk%UI9t<4}!J6>X&?m6% zuX9LkRBcpfQfSg)!C?VJ5p3K&ynDz-&PI-=MpO6E_0heie@(ASr%DF}03afd%GTLon~NRU{M!P7l@IGk!e!}v1=eBuhyW};JMLrBQ(GaU|?uqs1F`T z9Y>usjWmr&L?psM$v{b0QCG1706n{7ierj`3W5r7w-Gp+B}t+rQJ7;a03PVAPY_HH z^bz$DRg_Yc0;^)=QOYP~e>H!#AoU=1FI6v9b|rSD8kriIZLw{!w*qekU5kJG)EU&Bw4Jo%4CD--nLaZyvoN!`vAVIEvzfE$0g$Xn))>GD z0A?E>gT0T#oWq=Vx$bhoiwTfA@T_yKbA_^ovRD5@GSswl z0u+`NmSN_{!1};C`!@Ub?X(jh7lln8K_gISkZ*VB%t9rmsEt#AhDkMc*It2tK#_X#13k;QF=ZH3{#!+*nU zQ<(KtUQ=EJ;$ktTt){K_yY6>E?Un~%t#hsOOWT*Wm(4Gmx6#|^%DT$BFEw9kTB};C z+yMO5{MGF>?KKT`4Rx&zN9LXu>xEXN@oZIsmLg!cX)} z^xW^e-xog^KiEQQAt9%c(~lM(Et;*Gt%d-A)ok(o^!sVWQN>a9e)ax~_=|XfZh`Ks zo~#~^0gr));}6H%z|L9SP2Ek0eTRL$BfTT}L;1s`|1}l-12;&1Fy+hCcS*_TI+s#_sQI-r2yunT4E%+!ogsm&s|9 z(`kEYdtj`vWH@d(?%VI%@7C$oY29Mo;)Zj>!99Fc_$oZ*Fy*kyoXQ-`RI;G9poUpN zFjpIl#x0p% z**nBLM4n)tpdy1JgFo0&etP%x?$6Dio29#@yC`xLxj%|=7BH<$8@qkHyOoU9t4ZwH60U$0iE|N2fGfENA5ZMq3WGWFxAx0tE{@VVP z=PS>@b9m=qYhi2g!tjM5)cE_$`^&eAwTkHo=m^;G*zjBcbPIM1f>)Wemb#WYjR}p( zbKB>(U);X9$#~0nPhFb2bnf!G%Q`+fK6l;kx^vlb+1eV}8U-VQ5%0y{i$CCgz#YgG z$aFw+K$At8Md?KDL~aLI2fNi}Xk}<)&j1)=8OY9%ohhIxpoyf4q#{v};PsjULy4gT z(dg7LV@ZNhf-#&qoEaP~OeA^|eFRkm73T@(3G^;A&NI$~Hu)Ir9bN3b*!#2RXHN&A zgV025BF>J^jvh@NO}&_VF;@gAoGzS(J6J(vOFvT=Qx|UwZwq-NdE*)M8T4HJT>ZPc zcXjK?b)-w3OC1l22ekr3q(2*fHZnIeH@h^sG%;WpFqe^+kuaYeRfsCg|CRp>*uZic z09Qe{fm@+lA^dCR_2%{IxO5ylo*hp;Ks^A~3Xax})sAHWK*>Dvx$kpdbw_mvtl^** zzpkmSiNBq{orAzZ$R5fbx;A-jQer`30p_%rteUI>yVcUmsh3kK11bX)Z4_;qb((cD zr81?qziod5$!Y$Z-*0{s!Lkn9O4~~HdiDBPTr6&tuu1?Djq!+;h?Ta3wgb3}oRW@` z4)(`XnN^vknWUMT&orOOqRXPAqNSphqn4wFnRwFV(&VD2L{BB2B%Y)nq#yj={=I#9 z?ed!UqW9wW+3&O2)7jI$05}7Hx%k^F+bdwT%@*9J2K{3|T0u+3LdG%*vd9hv4h0fK z6GUYtWF>|Hu7Ei4IPnTVnq-`#_3xYBHw7(M%M!a1J3A*kClFiV z49YR5W4mL!+m^R2?M&=U^mO!ecn~}YZ8>eZ|KsSa!=g;rI81kUcMjdsjUb4E0wM}3 zsEA72wYKh2R1{r<5R=ZKyM`E=fdOWQp-Z~^Jg?vV$JukPvwQ6>Gkov+Jiqv^^j!(< z-VNmq<)sv)6nvC@l+)DH)GKu>b>a1Igx*{CfPSNXqe`7hom(omR6Ha-B#~AmlqHnq z740ipkdf_v+5=z@g6?Z*w>cv{BTZBwDj6 z*DPTkaUSs==^kkxMIXf!wG_25oiLpu{UZG`phc%e2i6K|P{}BJpZ`9;4V?{L*L>GJ zL7A5D$2^r&dN?;C9t9{)Op%@+UTw5 zt^Y0kZ|VE=_i3$Btn-gqRmoP#9{w@>~j{?aANB`PL5CR*gP$miQXZ~wfKb0r7mJDhAf*>tz_Zf8_)R4)yg zhD;C4_RjXA9G15&Z(F7trW+=4lQ`RY+xmfqfd-WMP=GJMUvIkJ#8Ssn2NmokuX0}H zKwMeswWMoF*2&h%326yw7TFfrJ^4NPUrWE1qIrT{on77k8vobm(CW~-(7DhFBi^3a z-q_wJ#3#hsuG%hzR)toO`_;dxcvIn3n-6R|%`c`p<2j+w_Qf#A-@4 z<@)gTVW&~2(MKbXMxa7Ky4D37ZU?L;+eOD zHZwLeRdZEycbD!iMXX1x&+g9dk{C&UeZ{B?`!oM%ew2xEPvV}$Z-w6qdZ4R)V*bSZ z`+@HVAgavsAK!m`AtL8AL|FO3s>&NAAa2u6(@vo_p*A>EoN0<-ilM)rzaB(pXqRaM z8f6-BT5(!f1FQkw5^rhZV&XF7J>-pcEB}T57y2~fDI~!d{Cy`~j=YSj3?drLHE($L6FZ56JO!RDaX?Dr5&#>QTwa+TWBE@3KddYgjal`S%krPL* z`(5|zz0iB%Vd%q9B(P|UY>Rw-<@FU;U^8qpOy-izrT(-1XTANr{h+@67%HN;?|9$w zi}e@l5z`SWuP)i2qIND zq!^?acDHu7l9rQ}Z_eDDxi)%jl%K>;>S*t1-^1vh-brpl+vVRcowo3ooUnmL-upT(br{`h>s z`GS|FFH85T_NpZ7CF`M51mEA%-@@0%*G6rnw!*KI7Rx5fCgfjyT=}>%vM91>A$uX) zJJmZi{&)QEz@)$={dE0wh_%NGl?eUyM>Bb_6meD64F9CZmO z7$_LPlksE^k_QRXkLh3RUF?M#JRIsl;l7nXjOe$=bsN%kbC179g$DIg=D zR*h7R+?u>KSvFHPb7bMjLe5go65}%C@{h$Ii(m_z```5crXjjxOmSFo*m1~lNOeSY z#B#!N!f(cJ=Jn$1#q`zm)f4L{)?b02FJL8LWnyt+@yWuIg|CZW7u{CfR$*nhy#@wl z7!Pr*^RM#*ni*7={?y?z7!zZDeg!s8^_WRO_hL zqS~U`N6bfzt(vXcZH?O+AGAMc2kHgtflNq0OfO9DzSe!M!go z2|QONSLMZ`i$yR7%Jt9k&td{*a%XaNN_0x@Ro|;d{YN1UAq`!@xNH%bEu=x^xX>fP!^x_+frrPexJ z9qxG5@hVIurZT)XyjHhGx8-%u>z=#hyW~6!$nZ=ot08u7UCKh@Ydel{f{9CVQUe7>O1XaC5y~D2Bu6j6c zI8Pu$AcG~9C3QY!KILWF%QTfNm8@oL^ItD%TtQrc1dv#mSU6icTl&8CeQk4lb9?eo z@{rJ~&??%0d>8#L`b+tja*SS#-U0Ii=6CGw*hxD{J5?U2JOFEGCwF^ydz61Fswb+q zEw?R~!jr;tX7|i)@l5dyIv3pQy4QugNnh)})_DRq8*erabPRN)Q_?BuohP>?w>8f; z&&DavDSln;x>}2Ai)q(^t^*3*3f|1;na@8BeHsdKlE2w2|3>_atRxYXFiO~A;3QxY zY!V#hALWnyD#%B8NA`}a9H$&7#KmmEm32-Rg69t}9bWp6_CH!CAtoWJI#pfAPRDM? zd&fKWLhOaP(79022+@cjKmtI2{22HN1OliN25H0w0f#d@0q-~8 zZ@RC!uO%-gFUriw%uJ0^$&beYQ$mCwFUq`;7L*ng7ZDe^D1K3#RfbjO ziQ*H*XiPN5Nz+L)N;^vXw$5#x4DAfOifJ93*&_Wd88_=j8!C*B$SMy zqwJydLusgh5<{L#CpIUx7ql;E@$2~Yq=lq~xtY0{DB#N6mASFSvBlqOz|QX-l!p+_ z8qJ!^k;}0T++(}PrpBbk^p@r=P2@)8#`ygB{Lk^9FJCQRjV;6$ zqB+>=&()vb6TT<>i2V_J<;#^X-#&js>-f(wrjJG4LWdI%Cw6}C{BHEy=yyh1M%r@j zaxSI>Q<6}XPzAQxdK8Lg+-BUi*|Pb!Cr+kTrdF_AupDKeUdz3fE0Q6S@g?O;%A4dj z$=(3^;n@DP{aO9B`s<(AKe6~P_%Eq(sd4t-?7xL1ha_v}Xy!B*Hy6iN#a8Lo>DC1R zNZZ?4)mfEOkyBA#R$e9t2$Tzy!$`BDzP!HNq|~I;z0kcd37dpf$x+Dx>q^#XU>XR_ z4$S5PPO2C+umoCXB4P37)YU{P~=E*r1jqQ z-cDjCs;4HRe&QHn4Do2+(Y}0AK8b_MLERbN8GbSTVw^HXnL>Jf<#}cJ^oz`=&85x7 z&&SWlF2ydnY`APZrhQDy$j->lF32vpBef${uT-z}4)YH49MDtNQ%2cw=<`&}QOuD_ zn@YR5y0|(tGc=<(p*VrEk{qTTraKoq7vFEa--1dEdJH>;J%Tra7tL#riXRmZmI;>G zR@zp2tNB**v*BmMV2faj7`qs|K*vDGZwI~|IPQGhIq5(WxI26fKqaE{%z>E$mX4N= z`)&8zo-;dV#%91~a7pWuR=Rq+dWS}bhKjz5zOkjT<-3FL4&FI==cGrFN6>J{aLC)x zx1lUyEMW$KbExy*oRx{cQb`ypz0R zJYqZ!A31zv-hJL3Y<@=}Cg9lpllMV2q@r?A0gnE$h z_rdRjMFT|xf4s)KlM6zg4qU^DO2pCPgVlDL_6z-c80$ z1_d|6S4<3@@!;4X`d#e17^ftsYcSaYZWUM zD+-GWix3Al(*qr&H-~Nxp&ZIZ!Xjb0ZMki&X{`xm1)Z)wU46Oya(R4Fd{GKE1&hnV zW&Ozbk%1oLY~yULe64&^DXCPjRS*`6SAnNSaNWO_)!ZUte5be7o{?rGBk`?aIcL zjn|v6H#33ujrNTe&^tW^I5s#omI2Kz%`N;kemi(Kc-LglWbgj&{oSVRrtRXb;;n$~ zfbII-`rSIZI=Ut1C1!}m=Zxoz=L-`K6GnHKXsKwa&$6Foixi3!t|(tomQj^ay$w7D zJTab_Y_)8)w;FFXR<&2P0}KKT=#A-(K`vmzYRYO#+DF>wY~XCbsl%z`rsk%`s=%u7 zOX8OVw-C1wNI7}@xcs;VfI;3t-d{q$g!YT?7e_gD{{sR5sF9Hx0Z4#^q=e+2=$@#& zu)J`wV6os6;H1z=At_NQQLwN|I?FlBA%FE@rNc_7*DPNyUydwEmPGgSNsdVlS$bLe z(5=udl+iY~Jh#jSC@v{3c>?cN-mPeFXm2F%B=4XO;(RE8*kapa6X6iyfa=n}`FNZ3 zoAiTwgL|wytUFh?uWo+;&<@LE-DCaQ^0nog^EcO7Rc=LYMNU{JELb3O=?dryAU?emqLu&d!Ii6&tIk!Ps~oKut?;e%t<0;=tM0+| z;7sr)`0uUXTNm3G+c`TqJ1aUWI<(uh+mUA774M2i9Y?6c6sqUz9dHgf`WpHgqz_Oo zR4zn)^~U+e`AE~4520G@^IEe_t4%9JZ*`9zsoMR}D9_+Xq1vCXT zsOJvLf#rD2^O(ns*Nhip2)Iz6Hp?E%p7y-ICAuv-$AK^ zQnxU-Fh7ib7~QhFWe2j^LytTjd6;^ddbYc@yEX4`-k)ofYlM}@${*)C&K0~7yn(*6 zXL`@{I<`8tVjHoItxc^>3#|*St=+BNI)gfcgg=BoNQ3^9{wKXOw=@)k5XDfgH>Uxo z0n#PU9-BQD8x$K<5nd546DbpU61W7Y0sayG5fG^fX~lA35D9VV{K@kt3vCN+l~t8h z8+jXf(|6K$R_0dbx~99P2NnhvlxdY|QGPheW#zHvv6k?V@IYDps9RY3iuM&vKnH-Y z>=lhjjmVb~FC#Jmq*soLjEWop8Ud(*ibOp!$Il%e++%HuJakZ|%)o%v{jH@{-3T4>+oNKk<3u zgFS&gvFfwxqv);Z{lnvjN0(cdTZBu5%evjVoujFv=`pQiT5fV~a_0ok35u|auzueC zylb&$v36zY3QQsIE?r-}zIt)<;%5AA{4R-(M29>TN=!;j`x*8#=+NlUbZvHRYOH9i zfP`c=XFO;8#^8;?Vp1__taq$;2H+rZkRm7%l>brxM@92&h<6`)Gx%mOmKsaVB4?51 ziSoq0w!Sv>{;{aEs6@V!$oxoj#m?6%(JCQTk*ZJ@KJt$tjZ6?e2w#LN!f{k`RGut6 zS(uiYmihMA+h5!X+zBr}z4)Z{UhBQ#JHvO%@0H(&e-8f~_$~0;eCmAa9qb+KX7Oe* zxq@7wRjpOMShZLsP%Th>vG!uELW4pBZ!>Q*(i);H$q$_$I*-0#cafEByJ{db_2Jz zZf&98qd_!5G_ba!yTN#aQIl1Zm4l0eD?lJX0HO}WxfQq-_%-=8U5#ChL7r%<U!$Jy4c_!lYdN7ECKrz`=c&LUBukQ z+|@nQJzgJuee~Ypdxt^p>ZEC{X$@8f!zT46_5F(b6$NAkWWA)lq%DDOGT&s><<;e( zB3IEv*+coA$~zTJj3$OzomqWIV@Ttb)+;U4PgJK_r-}TTunJS1Ql3(Nt@K(+3#b85 zjPa4sG|nTezo(n|71@&@v?^wRdy zA|W)qKB38lk9Ch>kHKQcVh3ehMvO&_MfOJaiZ_clPgG4**%sRtzrw!4VzMw<9%&wF z2}ub_fjaNJKa0oiNr)A(p0&&xVHSP`dJm17ncWX#nklg>EGq!8dvSMjd~Uk|?akMWN=_W9W7&k3Ise1G`W>E_eT`Yrk`5G#U*6#}laytCXr-#y{&xkhMx>W zz3u4d$jTzLk32nc1|C?wUi1p~3jTQEhzi`l zbpH~{HOql6<^1sc@cR+>|N1F?LVZGS2Hgxo2Rj;H8sFbuzrEl{=%(+i@BG@~wF6XP z*?zS7Xj2Rb+6mgpI>!L5-V4*D_Fa9 zyL5dmdVR@_j< z^?#oFb?O&Xm8YPd<=Mj7!snIGEAw&rxT{T9n{1nHn_(2xihQ0GgbD)0&JsiVL;AN# z+axEl6FN5kosWO(`_@NwznQE3<2}Yj=0= z?t-+5If);TNs@tzNe#49VYFbhxM_XUx(PU9dBjrNRNM5F;VDB?9aEh$FchF&%nyKG zlU}n{zgFMb+}Rv{Ja%eMYEI1nRLt6+vp8oVU?5;1sV1p5Av+;^Q~aj*Q<0}4E&%dX zSx8w(U6;QuKczCIf;yQ_=$!c5Z5pN@rZ1=~sEbS$SVgR&xum(|Re`Gl&p4lP3a|;V z^|SV~!fTM@H_vY#)bsF6`k6FXjTDiuvPHQ?SwKNRVM1y`N<&OT%w5P`2&#zq?r`4W z)MM3SU1eNlyhVSDK8`ky7S`W1V9THlV+dogWVU36$X}LCKoYQGvSLDW#%Fua_Ug9k zwi?$P*V)$C)~r{pSF=~LS1Ok)mnD}Zm(b@pZYFL9X(rIj_x{lRA-JxQRytQYKQ?}B zJXLwB(z(#Na4dT)`)T^q^mnQ6Qk~PB(=;+QG6^|^9C98xPp(j|u(Y_e_)+h<-}ygAbVL>2!MQxnt*DC zYKBCb1ghmr)5_G!L|v#B6&4l#4gL+!+n%>Y5uymch`)&Jee8Xy!1Mm+{qv-G68aoH z7@Jsk5>uKxhHv?}5n7f#}Dw`^s)auphF91o6NsZ_Xmf4Zn zQP5M+Bi}FIFGdn05&8-JCxAPBclsiFBYIVV8UP|*`#$!6?0*4({IxHKm_tnJN$S}T z#UbZA&v&BT57N{9uKis*Uo~HazE^Vfa`h-PCbB=W|JKy4DX}fFts?d!cGRtvh)Kje zG<;|{YdLFKx4&+G%E6R_7H$@9sP_taGQ6C{VD>H0+C>EjR*tifvE7PaQM{`0+E;J&U>Br3bzlpC+HG%_oViu(Ao0z z&gq?;m7JCA)$CP>TBJoDuVT$&O?aIhczovZ8M;uqP^1Hk2ATo;2>Xa`z&Fx2QVKW` zaUx3B{&Rf^j0EOinSW)bMW;nK zg*Sx@L<>Z_q`IVBR9sYg^n3KRY_x3VT<2Wx9lLjoe1d$!?4;Srh~p8*VcdBHV*d|l zS!-EC#Oc0ZonV~|wG1^eWie%lwvi8(4VFDGb6y7ZO@b9ml*&)#ALbn9Jj!yE1xJUY zySj6AM`BZA(+EHrmF@KH^os0??8vN{Es`yQvU7h*{gkQ@uMoH7x8yfxG-r%jidyQT zc2VP7<69RXusFIPxU;Co%MccW)bA8LyWh!-uI`o|S zocgT)S^o>d3&Ou`|F)r>VGi)9{ZTv0_s;Fh?Mo&llhFU?9Pu0x;v+gC0=*e!_hC!1 zrII<4Ijg@`e~HJ6$7;RPdI#0WuYBJ4yea)q`T^>o5^FPRGwzq)FIQ<(X=9)=Q0@QN z{}EaeT3TFQTwYjQSd5s7n1MCKXkLF_KhkZ!X@1jutLau#S#w$QrLId||4{y+fV^|^ z-O{@ykk)NLoY^{>4Q@OSVkd|SN_bOjQw(WZO2kUUwuQHap9ww_R0i~f^@LR* zbmh1BZ}C@Ruf(niUlShV8{>n&JclWxDI@A>4_OIW@t*abJurD-5-QZkIL0}~(SD4) zKwjY6=G(4ksb?`0G7~y3cU;a@-Btae-b1}3Mn{Yw-gMuz(X^3)p@Ct6UV+}O_OA9> z&9j=W8m<~fT1Hw_J*wV_$%x5aySsL_hinhc9Gf|Y0-@fVeRFmvU?(8ZH_&(N$k-9w ze%yX9GcU6Sy#~Dy%@9o;H61muwPQ}Hol*l2 z>OT~JD7uTgi#zZ*@MyDWvxqT@F_r^0%r(qzY;J7AT*6!!ehfdi2)D>L@o(b1QoK^? z((2NCl6#WbqS>N>yn(zRDP^EvrC;Tr;GeJ{Tac;U)NTm?)_idu_Wd+U1Z zl#7*%jna(L;5rcJ@Xq1gz^j2*xF}py7y!R+qCgV&$}ie4y7p7;C)8!{o8_AoR}xop zyY6OR$*rM2Sruj^Bazk>%{+j(Y+U45is6*HgYlw}?j><+JlZ%-bGa&{YT>MNK z&(oi$gGDy&QOctfv~%hG(fi|U;@QNmgsueLMBPNNO8$hH;0%;yR9;tJccT47J6sWZ zj}IIlP@}3*VN^hB?P={n+Q?fiw^|zDIaGV779^LI7t1e}zbbo$>h;P_RGfgr7NJ_U zUbddxL~ep;@|ODc`gWuRz0q}}3lH4rzR`{PSTre`6x5-IGQWuwA_b!J`cOB_QrA*f zb4PQBB7i(D+k|a`M4v?8t$|wuOCw7o5Y0FFV&=t6z+Awb3_w3iKdU*T32KU`GsriL z^eb=Z-q1PlI`G=d*~@k6cIsZYx^DHv>4_5x+4|}D(^1`0-SUpk9i2YNlq}#X;4<1V z+Hsz9o=Y5098VZa7)zc?o_e_WaB+NRd?$`Qjy+f;SVU4*QdUG!MDe)NaV4nUReq@Q zQ00Nz12qpF4;_%=n-)73JGy(hdqFIm|Mtc0i_xLcp~B(9;d!BXq5PNlFFgx*7I59? zy3Z@OS8k}cwcDiI1mXp?pJ1L~4gmSu`P%Jf?Pd`NBMvV5E&A~U^91`u_(bf5?}gt4 zt^kk29)~>$eGnQB3jy(GC?VCp_NxzVVGa7k6&r(!{0w(EQK{p#Eb0#YF!^e<5!n z@2>~H9{gAPNSwoz?oW0lDueGB&Gx9_U;skNoRoPXtWwK>yMQKHQ1$zY= zMH)rs<>uw>xOUuh$8-nER^^-GoAO)mTez@tVFhB9f`$Mh2DWawm2rB$VM-ErMPda1(A!cFaM?QN754{>HpFec|gI$s%# z3}#S&P`}Zv(d@hRcWa2ru!ZBN^(l)}7Hr0B#x!~~dP~rkjWSnYor!s&_Cl>yt5xfQ z;RVA0^8oV?HXm&4?CtE;0Mtv2awU<@jEo^;hUACjWu#@KQ5Knxw2w4i9xsn(QyE$r zTFH9JdPsjMXDDZQ(%__luAZ*msOG39L@B8v-51Ifn--fE8x$J++phv~w1Une&LZwo z?oz0C17+oRYjkUr09+U@4AM5gl6WP-CBP+cpW{A9KT|&w#N*O!>}~9w+&#IQ2)S$X zoAaBu0JJx$*sj<{?}v{xA8GKkcv=TK2Rc3g?eSxP({!ilj?*8f7iADdl5hr7I#W9D zUGLr5_1X1ri{BQJmr{9DdGsgcCuNd2Nu=wd>xyoTZmnvnYC^dWAos?-29Or9rnaWm zyV|=N&x6}girShe$6|5DL)sxl8ON@FZ%kX7*y=J{;6}$>wyivRn z?Mlwno~cE98GI$aGP^9hOtx6IcoF*MBnl-8?-k!G#+T#Et!k}mQ7`xkeg#=o@ScsH zjZf>I)>%|rRGUn*ploY^^Z__eK2QEa z`9e`2P#++}gYCuks&%S$-fX(rg!(K|e=FKYngTb9ZWNW3l$8jT36<5A)RjyYP8Pn% zf06$_?|oinL1jT;MPP+_vw1W6YeVJK%;)XT+bJw5EDw1f@;()QD!eVaEjlPNC~{5k znxG_)Bo8+WH;d$sGL&ek;%nh0iNW@F*2;j0fAA29Os@$;e2#d)RkN>{b6YKmw{9ELLJxVh!pI>d5mSaVX-@<Uktt& z3>L=lC&0dleW)%p0(I4cwG~weMWU=P?J(^ys2B?HcJX#;(`(a1v)TQe`#Gg)rD-qk zT;36&6`+Ni*V-EWm^f8F<6yK@SM@}D6bx?I+FlI2W zQ?FBJlxLKum!y|87dIELm8_L4kuQ-ys&-UuN_R>($T-OOpv6H8xXxSC+tb^#>}T1p z0A$){+Uwfs+P$@XYkLKNZ3?04wy z&{b|#Ze^@ytRn3g%GC{-37NtC!Tc$iE}8ZO$|uVwH%B)|X{of-^S$SLe|7%qOle7J z*=^iy`~Y+}cQ-S3GImxFD~N&=L5k0i&(Q4X>}dBy_XK7NGu1QMGwC|7qvicA8A7F1w_!ajHMZUznPI#Rl_+9Y3ak6nT#HD466^RwiSIk%Zsr^%Xt^QiQ za)WY1Q+-qYZ`^O(qq;|s%6GSJ6Ss*&JG_vVke0yCz)m!mWgTQ4O zZI7}?2_Fd`;h*B4Iz4}S9;C{v)7#VA=5*$CT1;9@$Ugy2w=at?3pzI>@g(v5$M+u}R3z{_ z@j3CGd#6CE^uA=>q~kq@LB-%hToFAB?qekjGUgFUYTi`Daea#)1A_t z9vysiQ2&trp$yjyS1%VY7l@j7l(m<&htaiFty!&^p0S>Bm0^`3@>oslP3xV|J)w)d z&#*>ON8T$=Wlm)Vz*WUn#Z%2w&0X7F8{)1FN#-Q;r*=>6UO2sQ3UUc@$pMm`lAU~@ ztmuI00aKD5N$;5EG0khL*Hk~qe~?dx9@HrrGwJJ-NfBwT4P!RSKczqBFiFd9yafO?)_Zr9P6Cx+1Im6 zvP!aKfO`N`GG+_r3g*IE6q}Tvl>epZOHpKLWGT{R-LJY|Wm#ic15(CXt2(PX^q!EY zl&D0xUVMdoh4@^2E<~bd*`(W~SEN>?z6P=ZTi{U2p_FUM*OIBgt+ZQdY}sttwgt8Y zMHNLAC=&)^k2)_AFa6cZqwX#Aemqrusv6ywmI{^%KIDJMN1kHjU);#q$RT7AvV1dr zGg1C4MA>Ge`83K22kUAnR6LcVOpDW1r>nB7v#XnHnrnJ$dup%ZuHsN98A#EZ54Ig_ zD{e1tN4+zaz(D&zyD!ND`Zx72hF=UVtSqeh9Qz!%4{jgSbk%gVI$(9c%+|~nbq;CkYwM#9 z$pU$|Or9OCV42JLPxEzJ|Vr4vr3vP{(+D`26sB zsNoG}4`mNk1OmbW!cYz+CK3~=bVcdPWgq}32UsInBNZGSC5qob!?PrI5qn>h~vsfSVz zfh^5K69Ov|d=q>x06&iZIG%GP=g74K*A6_feqtS98ej@hN&8TCd6Zt19>lZhpkB3R z&1TJZU>-ncMyOZPk<^vc?bhzreyjdgy-l%Au|uju3gvDd7C9_321JWTi(i$#D%~pA zDu=uZ@8#aheUw zMt)I#5&8D>H}W^+fZ3(lrE^o~rch4=@~Sk!(^=nH@7dtlz>H_cBkxIdXLaX4-T!oR z5IKmf5ZHT`c!=?JBgiikZ_QI`tzPwJ+BHa4lO=bc&xCpq_PBcazAc< z+zcOmLQP*yUtE7&Kl6k!wMS}>{MA^ZoG|pm@+hV@z0f+D>DMK0<%psO*5Q-IRCtxcsF4)Vl(oM`i+Y2J8i&I>QgFi7&m-w;@pJ8 zjKj>0`5P!!bN;KaHOLL0(6tfhE6h|p%Dd#8lPwab)dyG(fw41t-xNCAff>AtkS09rs50;?`4Sf57UE_SW)f1;Qqpwt zbn>FgqRP6^dxYi)Ux7T}i~1LJG(YCk;nTSR&}q?WnL?(drM#v5X|dB{3%m=w2RROM zKx7W9AK=gK&mPDf$Xy~(BJfGcrER6{c=Pe**G;dRP5``kUi_)%Q_U#E0o~m%wOnec zYpiSBtl6x&RCcK>p&+54A-5qnHzzko7AuQg%U{dCP<)}7rktkStIDg2P)n$N*7&Ru zbrd0OBxQgyz&yr0wmY#qaSaF@4IG`KPEnDLOT1US_crl15#{6Ul6T2gLsmmiN1u)s zjunpa0{2JmkK_&I4MEN9AnGpqMfycr=vn9qY7c6UYK&^+sO6|-sA8y^t(>hy`ep7$ z?nX4zj_Ho+HiiIHG)qR`fnS5a1~&oR5N@b`q<%zrTo_5V$1}$=$53~x&7jSoI7OV| z*5}rzNzf!Dv?R1l;3jbB?gf>;r9lNj1y6FG& zD5oo3F?`amzyei^dJB68dIyph zk{52%-==>g@JK*YQB$$Vpva)uzS#cd(U(Wj%OyA{I0%09A*fdp?crgq65bZp7WO3c zNhm%99})pP3VIaOeWLqByJNc}#J=nPBk_*}CkrP_{6_pn_)_@N+ts(LVXz|*rbey;R{+Nd$B1j; z*Wea)DZCm$J0H}0iL?i0K4m`dps%>nxYBq+Z9)y@pjAj!NL>IzWJ6?8hArxC0z0`e zy$!vMz9Rtp{sZuM+k4w9nJby2Rg=DkzJ`gaiK>u_kP07$55um-uH|CjVqgN#CDTi$ zLq9+@=xXSmGG5J)J@c>cB^*l zKxTsDn&TQoC;rW1n_{10?_=y^G}toOLVjEUssNRti=oQ{?}5*3%xuhS$!mE`cuaWG z|D<1LKxW`K^*7Z50BboJ&2r@>0FWDBEPv}xnh6C{EF#&+xIs8L;44? z1hE8a3N=NuP_yty?T=a*?X*UBMR)Oc^LK|4!U!+BUUumND3jF}cnm8sIWB~l(`@_f2$uE4ZX~xY_bvD6!_kNH z4&)txSOS|bre93qM`w_zlc>X`$))*7?UCAj%zX@v8jTw2K}Nd~8VwqaJL-4T_p9w! zgKM~Ij#7?NhJ1#+myDN;fTV!r6R{^^uS8#oqInp+nxx8Q%Vp;j<`iHYqAY+Bz#wfi z)JtHPl$n&J58QarV64xOFBn72lDKu(4^3KZh3B9Si7*sw8FFkv8>R-=DfTIWUOSY zGyxv~)>YQkV{6COxHq^r(77sgCv``RMvMktjdbtn-_vsgZ};BrWo=|_AZ-~~S0{YQ zzGVJ3{x-cTy{ggN(Om8%?j(?X$D4jI{Q&V+(Mhk9Ub95AL?^~1#zcLJ`V<=<8?X6Y z^Lxkdj^A(7-=>@7ndBk=l~1EjqdnX!7JWAai!{v7YoFJi zY&h9~_SNf6>rH5<15*8V)QbY+gMR)2{sA(TOr0K_9y~pCdZ-DY8KD_r8eazNsv%BrcbX=uWYw$ zH(Li=$1;8ypHi1n_rCmn`JaM61>U*dxn4P5Io}{3=UUmdGSoW`@k@R1w=?a%<-G;t zZ6+E{8qR*Mey#-IG3R5>74{YOqkto)Bj-BrI`0XQ6C%iG8?F$pfN~!nC_PX*CwEQ` zWx%X)uW=(SAdHvSkoP-#Bzt6=yiGMQKF~Wea8JH0LzUEX*v%UB+GBc)#&J9&kJ$=2Fb1 zs?e&?k6|DG=DE~|*N5MVxD}BP^Z>0u77z>^2|p5E9$Fsy5IT@hUoGJsKtQOK*n zSAnPCdFb`f>#XZpSA7S42dov=YQ|#5qS&g~s?)C1PT5J>>50n|7oI~rhe8gA9KLbr z#vx7@PM6^Q!TX18hHVa79<;PDw=hR}&L_=Jnxjm>E~_pph)J~mV)exeXO1)fVf@1w zj{o{ZEuxkZMhW95??%Yt z%^OS_Og0WT4oeS84>|zkVe;^oi7ylAfWN)Gy==K@x!JMXvFlFnP7fnJW>Gd#HXML* zlHqE?9LW&L(6iUGcXspa=7Z%2%Mghb6W**x6 z|C900U+-0Xc6@d*wit`L=Zs2?O3zoGuS7E~Y9qA~B$RE$Zeq7G9zUK%npkuG4jZMW@F$D8;Om-0f#1sCT=`8 z{uHp2zK(qzOg&6J_Wkz#@5%4UUci~YGkw+sYeHaaU@KiCUE@;i zQf*UBQ_VTtIa~w20S^^4oyGmd{UXC6!%CA%lgN{Ieg69V|K|QThvtfrW07O%{CJsk znS^p=rGP$oUJtw;AdQj6kXh==+Lblk9o?PXz1_Wa;N8xY3&1J;hA<;ACNw65 z_T0#CA|@jylc$)cXb#zxXZ6nN{WSh*e9!!zIqEm{F!eBvG>kO-sr^$Mennx76pa*j zWp-ttURE+sJWo6vSd&cF-xA$Ex_wS2P9~_23uA;a^3(Ivi`RPqU4&jr9!l3}AXOy%2fW>D}Vpf-gGz(d)N1O1fdd09WES#h-)JAyk@cc}$nzcNJG5K0TNs)cn!uV^uZ7dXfvl+x zMplqW_N~?!XsT|imZ_Af^e^=H$Qxudr&AnN97XqQXJB-AbXbHeLgpdx5YX)URnx1c{rLTOFX(He>89yM z*~T0c4oU(!fs8ybkGdaqV>_@Nuo7r919UocIzU3y1u-3j#ID4y;*R1DklD961E_m= zr(>r>vQx6NueGmrseY;68!|5M7u+u>%PGrA1e^+-3d}0aDkGXBnwk2T`Z9+zhpi{A zC)uajr^_bGCQpr>8p{~W7}OwXkm{lE42&K`OLi5F7{x3ea|@51lme$f4(va7P| z#=(t)=)WI!JnR@}8)tjl;w4=3YXoa>sd1_Csq?9`YqM*|>&NS(PC;f9 zW|LIF)7aBk)lk(?QAbfn8KaD`m9v#2h!MoN1-J!dxMaBG*yPyQSlL+X*y`9$a-HOQ z%=egYS8!MGrSMB(aUpS`J)S)tV-{l;#vR6;iwhSQkY46i|E>P1_Nn&0#=XX|y0N~V}^dflBou#{_yX6Mq2H`XDGtm)1cN3pZpU&pC<~H^g_Le_Q zf0{ah>E`KX_jdR81@Km5d$2v$z1F>jKp1oupXfT#h4RMG`z^RExa@Vo>jH?D%SGQE zu!LbzCM{DXQzhC5iFAr|qWp5C(RQ10n_*pIU2=W&SK+gJNcfO2j8H_;SzL`*jhDniVtKdsZtu(LmsPttySb&wrAho4e(VI0 zFp)5!HlsGfw9K^pWBbQ8NQ)V5IBYoBdD(fb`K|d;j-x4$DG!mI$Ue_B&(urbOaGbS zGea3`87um^K9GDM$*;<?g9iwTQ~wwbn>nz@=etnJKD*Zr&kpgXIJ_NlRIv1*T0 z0HsGt0g3^N=(zwS0t8?RumP^gUz11QF_fF1FOo09E5s`Vv6ceueC^PEX5P$d% z{+<0BYE6Ds1Gc|ye@_7TBz)3r@@(>E%4W)$)HA75DN`woKzVX`vRA5C>gmkWnegh) z6D$!dIZ=6{@^0vKM9XmGPA!wIQ{}jmC{*tz)gjgkb{mL(fuYssE1rI|A3azj_yR zFUlUs9(YT7OM2e>yf?Kc^>0>E31opnb@#}3DD;zFmtHrgHK+Z-`h)c_&tV>@lMzr7 zRuZ-su@|WltrA5)_m?s+Wgz}T!3)Z{P!4LmO1z4rf}=vRc(Qm3cMA6~-7wwpwc~60 zv--2dapE}R2;<11;X}iy2MT$b3bqTjO*u?CTqIm1oYkDw{?F1`#znP$eV^{`8oIl? zK}r#&1O)++P!I_V3$fed-@-&JN|2Hq8U|*FfuXy5=r^Ri;%2&0eE1(U>sdFkwLeFNznflCP3q&|A>saNuwNiJliv2v0~`cw0Es zbVVSoS!h%!Z2a+2=>W=$iHMAdWCTtFCIHw%BBOwp;V;9T&p4m)^YQc1Jf?Zf_^9#G z#6yXPt~gwA*a03NdVHwevEA|c;pd0ffB~lgr>jS=9tDZ0%OSTzZpI$Q9*HLsPw@Hh z`5ZWP;8f-5%F}6qX@O^g&jh=iaXAwi92tBn;8Z}OPofWu7>=bMNX2;v z+xE92ts*TWDI@6$(Db|M_uK5Z+4M#9MNtswnNXcjomG=nlMNuh2%5#hk+9ScGAf6Q zhKnv2UM?KUA42sA`JsiOh5RM_B`7zDAT^$)C)h z-2Jorr{yopU$;|kr+m!(nE9pfOQAruKy^MbpBUB|)`@!Pi37xe$Ni7{b-Q)D>9Oj(4thuZsxkqv(izSPZcI9)^=O%O(krgfUFU&*SIOd<=PAP!86Ots7epw;zIvqI|nKdxKRqX|EYB;qk8do$Xfkd@Lwf9Qzl{{rVWxd3_#2EP*`B8^U z0Am279K9TU2tx=%1WN=9y02UiydY>HW+9d#nITy&RW2m}tVpa#gaB88DS#wNl8ls! zlsY4MM)IZDOED36VFWRPJi)y1oe&nKTx zHuN?0f$fL{5yAK}C@yv?b1EAt87W~eWiNeP_PETc(y0>ZzK|&aWkQ7YhV@2_MvNv* zCrqO}Es#FU4o(eDNsUU4KJR<}&rj^p>d`9JEY^Ix;daAD?MCf-#d-zm7DoE0!rz6z zhZBbrvwvm(@=EqfPEJowm;EdI_ju9qB9=0iGUrO?N`4$a4(&C&>$>Yu?_N47omA3V z((2#l-}bomaVvpDAbkcr+CADo^nK_-J*2`=2YxAgEy5m zx={zLd5d`q4T*+ys_9gdXT4`V(ilXRM3yM#E9Q4)cV)+C#%JEhxRGJ<$K+3HT51~d zfyMwJsrW;YOOdNyp`t5hp%D{K3c`;(~O zal2u=;ZVh)3h4srf~Q$evqIBD(@WDz(`qtmGQx7ha+8XaicvR)8Ds>ad)=j$OD)I` z1M7&s%(2X|^9$z}z;3#`z`DRHC?+U|_Rgq-&d=J<`mpU`+nT62P0Ag}7+ z>R{9rhVsKurlrdT7Zfve!RVsV#cu#Sx?j8rps#)Y|Gd8N`hoy}{56>oKxk&@!0Cb0 z==&GC6}oL4-Z&g$A7X#+z`X+~r-{*m(L&T*)Lg+#!K~V(+QiY=(b(3=)(B;AAl-Ez z&|}hLqHUpVf$q7%Ho-QYfVQ=^HQAhO-eS^Xg0fwl^qln2`G!xKPZ@Pay~Mo42=NK= zU1Pt-uFb5?j2`}v0)apakinF}l){|C?8@TGatYuD(3z%=zK&jqT8R4O?#bPIYxmYL zbC@}_|5NK$>vkqO6BVl!t1F5tidhO-P+dnM>fg?+&8+Qh?QK0bbZ!V`ob)dDE~~Gr zuMeyZtfB5DyG6T2v=bMa5}MK+(HyDkt?Pw#S33iAJMh=>*KOc7a7d$wI$^GtTrYWE z_`I++r!}V_y&!!ZqMuBDnEbeya4`YKLSHk!XM6`+Op51U&%eT8!~qKi9+k_5w}iJ$ z0ch4mL8KtwC)_7^ReM#-mC2PE6d4p9$vcvln46e;rwFLNQ!PjmB+(Ag4meLcPhVWT zxQJiEFMXQ(G>7KTR^3+J3-t^2U8P;6OF2t9^y&2J*i>w4Sz1}zPWDbVtQ1Qq>nQ7b zJ9|5^W7sjIHT$*lYbA3vbG2cqVd>WFt=Y1vvZ?FS*QYV_nE7XG&(^9bswu{q$C+Ur z!Lz`(z=tv>k(clRriXxblXjCAfI6^gylIT)XJ1Uen8upLqUs|v z9aA0C1)~L{G5s-ptTt9#LQO)=Rl!x^n#?sB7ikyiNx)3jOcv^YsV{zL7!?YNEZGpK*TXuxRTe#iX|sB$Bsd`b6G_foJ$=apoXWQeDVrylrq z;1|a?j&Jbz^5y)e^Pk2)jDN5MVn4=ygppyq#!ro(RcTdeVB5;isLH5%LwrL-oycvy zZM{(8){o8>i5-a@98DZe8Z{aVIoMr?+4rgbJyHcvMFU;4i)xhlCI z|9TaqepIYVmvAd))WN?~PGyQEl2i+C3=qZ);?0&#IqQ3lIbdsAJNx)3GzMKeE3aOhnTI(*xCg)qRG&hP^dCH9c0qovu4wydAt9 zU?psmZfoxwro$#gs%`OY^KHKX==bRN!l=Wj zcbImVQ11fDwt&^FxD>oRBs?V0JamC;foqk1mA+%UV;jxAkpI=K%dIP^HL3MJfHVzV zLtX#6`;@kowxb!N8R_}x`A~oMclqz~X#el8?XR7tpQeA&{7OJvlw=o$8%*Ep;tXS0$_-q!RfP`4c!3IJE(g z+wnoHx#U}ow;BT00@e_b;^A<{;S8*cBKxBHq9B?%>iC7@7uvxe$qOt+E=B$XP#$tR za0Y;Q?}$g?kHS$`F;qF7g&GZimJ=)|Fs>NaXO7Pt`)vDcQ>;>~49yMA{Z0H$ei{EV z7BLesL)zgHhY^P$=OE`;&sfj6lW`}ze7k%-fb-txz5jar^*}iTijInoi?)llC{ysZ zwz_-8O{*D!l708sylu6^H zapU-LJghhB%0K{F3qa*~-2#3A4=bh`LM5Tnz0AFA3%iBATX45PG*2{72Y6TTu0W?) zr*CGv9?G!!&IVG&DOjn?993RXAQaetqov*bKll$uuc8BQ}HX zJ*X$c9Y7tETr*rV)>GC~tN_yBjgiO5mliH9h^~sRqCEZcl;BH%DS#()o9m(+@ z_kY~#eCm9D{C@oXeEodEyurL@dCu~@22l4HSi}Ubh+GlTlG2jeQ`%E<)N$0|H{mzA zXnE1{?18ff-U8^kX3k{J#8=-}e?fCWQ&Uw_)m70|QCUt|jv!5tc9wFMN`eey0x%^t zCAB59B?C59d2MBFtrn~vte&Wv zsQO&#xstKGu{`RJKpB=PLMcL%Jd-@v*{`$DGtD!-qJKpX_1Uz;fE2wH{TGHW4E~J% zjQI@t3=m69hn}HP-WtTPQhuTOLe)gmMAJ*(OONtyJy<!Tw6~ zVfVxCos~N)_0#p!xNhy?9+2T^V49Nr&6*A3`P}(<;v@?`7%BQd5E{ z;Y<6McH2?g(SW6ZC9i$2{i}>u89mrN*eN+EIi4{;W1gd$qf%K{Sx3D{r}|Fyky=PC zZ4GS=%yrCl&j`;5Vs&D5KLH)U3GakY#wFt*GQSGt(;!{vMB_x`SqMCF8+IFhJ^y;X za<6i4k!_I;WmXoe6sw?}Gtr!APO>0bJTQJ>Jg70K@mlJ&ln9Rq4+|X&UE)^aR`+7} z;@g?GGdmMI6Qkp!<581Qlc*zZYH4aoaZ_=Vd!KtB`FUHIT9{sQzUGV-j1~MK`9U&D zB}(Ot;Tc02I~hA0HygM2e((JVA%qYZWksYy@30y$88I1g1qcoc4g(u&KsZUlv*xN)=8O4i*X)D&Q~RZ{}|1Ze(j@YhY+#fH*#?3%eI~ch-0Q z_3)OAm5f1McxMNpgAiOCTmz}6PQODNK z*8Xtd;lQPdOA`Wf0&~BXe=Q$gKfIm~++Df5^1r$N&7oQE_Q3W)LRUgpL~BHA1F?aK zJnqM;j#c><`xYZTO?P^CdTe5BqHcn2!m-cCK05$llTU#7$7JNYYQ?s~f%HN(x(Dfy zbVwK5F19TLe_H;u%n)aY19by+7i%uo#8kvo(3jAcBo!qU{lWghHkLP*za_jS#J0t@ zbq{tAE=?~@D=#T8Ev_!E2CN0F2`>vTZ_aGaTpqqWe7N&)=Z(f2jURCzanCBARg?p_ zakp{EoJ`wF+bY{F+a1#%(~okczYTvIb{=sa`8)b|v}vMg;urZB8F?ufw-~ols8Xnu zSd>`UdD(d{311Rkz${?Uj+)3v_QncM*u<> zp$m1Z;n(nM0So~QuLNERY)NlPpH(`mWDd~C(#V2rUo@UKo|nW%VxwcGW4_OHpGg(E zi9pK7bxr7+P@q(xl)tjSvWvEh_A$d_h9f2;CNP#aeP;5^1f7q4^nLUxbSQLmG<7t! zHMBLzz-6t=T68*eIs*XeNk)BiD32KBdIc&6D#t6vD_&5zpkNO~Dn=^4P=2Azt;VhP zKaKxsT-Um;bwvA!cCl8mR-i_phMS6;3d-BRFLhsvLYzVzVvogg#B;>;rSzp9$~=^* zm#defSEN_`uJj$r<&=UHgA|)&n`B`&cMqfo&MOQ&pK}Fah>;$d_uDzXqJMTH^IVm?JH?-Wf+=XUP zd3AYp4Al(P(IwF(sPBX&nWe1EC*7KZ4vp0oEhQ z>DlSoJjFc4p;e((5AYB01@#5>yp6n#LJdLuqFWN5o)Y%tUl6sq_MEQu${f1 zy?<_GZe#*pq$$$W8elYOG$}MHG>YbZR_#{pER8IU_p9$$qghmGUTGfEzV-a=`I}pq zTUb(2QsG+fT95RV9bFw=9^D?@M>~#o43maQ_lWn1w15N2ft1vh)HMPxxQ)!kuEwsu z+o{4k7QT)_~Rk@;?8X`!yH48M}Fd z`UdqL(;ky6hbzZA&pHo`cZ42^KN5#^q(YWH2Z` zbNPFm@;HTd8Q(m=d9EB?Ir`Q1tL?nuydmnUz)D~x9EBW(;Ib!xx+FkuAP@hVuBMHq z&5Y}e>jS?BevToIAr0XT;YXk+@;^W?N-rt_K!$p-nM9Ew(?ta+gKlKhBk2I3T(SJ~ z`RAQNoIXFr&-I`s~;ikj7 zuDY&q$KsCN1W=B0(ZQmFS(aIr;fCRcRoYeB=spvm6QF}Pz#H5)y=@9>1WVlmx(9GT zmUWi(D~neaaJ(>*(~;A;p?X6VY6j$T#d5`b1bhTOaedZ%c9 zAnTA$X0B%LUuTma!H?tfEhl-E>`$S?ku;w=TrtmFs0 z_r3QgwkEbBS0h*V=J)0y9*K-P*$v1BWTiQ!IatRpTwc1o1d*w$5HGZuxt+O*)T`eF|C%+S|;xnT@!NxKspG1ipxT5it-m5X%D2 zik=ni7wH!<0ImbCFt0G^>kxw_*&y2>i?Sc@Xx`DhuXkVXjo}+ZT4P#cFMuBSV)(@n zBpSN6)o-h#9HQG|x5ZEfm17o^L}Ezd1<4!OT@f1!S^ey)7JeE!Gsk7bZsZQ4@WQo1m> zFfg(*vU0I;u_Z7kFrTG6ONa7X^Pp4#U6*hJxB;YVpQ)dz&#B6(I#zP51Y$vo4qy*p zF=d#t@v8AEOS~n%p{}9s9w3efz~pCHX<4~cwp5l;no(K}fQ7F7LDhpQutC+p%8FoL zXAeod#5!C(uHLTEu926>OH^%CZCtEdtP{bD;E&;s;f_}wuhN9Dz*`l!DqaC_bf`qT zf6-deTIA74CMFZ5Tclf%f4#iDyd8PLh%LkxFOnB&xOuo4RHMe z${9|8caC??f7t)9=v;P~beMFc??@k-H7+eIEuaiMTF`e)9bh{Ue$ol_3Rj2{NAm2WbcCN6>5BCe|kA z47ouNS<7>Tf9e3w9p!8uJ1>+9~k>@qh^+Auu5@HaIr;Tj;k?i5v+p%26Y`aU`JXr za!7JmJGgc*(>~MQ+}hmwt;t)HecgTCNR3DhcU5=QZIx{m0W|?N5p@xDsKirCP)$%3 z0iYsN4fUakYKUr}c{s`>gxD@Aq$@qeeTsXEd5SrnE}qVt#+#-aFr_!8KgV?L-+Tba zj$>!yV&Y2TPU4mV=Gf-g=-}nF;k1D~SL38{l4Pl5sa?8VdgZsuZ`jY+&o|<4#6L)U zkhqe)lHFI{SN^;4cjHXwOefkAAdOk{O!Um@h0_ZsR!*!S{UAu!S34Iw7tyRJdn$WM zdrW%_={Wm(`+BoFvpS!Wo|2I6vah7CWFl)K3)UCEQa+`8YJAi9rtMYRE30=_?^?gK zez8rmP14HJ%33a3E_ze-rt05kl}IGcG|x0A1LeeWBGkjyU#q=VOI=A_*@kVyR_9jd zif4&uArCU@qu|Wr%p;Z%OCo9`YA=#5lJtA@dqjpshA|VEiL+B@r)DN*CSW8uJlQkZ z6VMvan%|J$fb#ics$;4Xs}ie1a3Q!s{2-nV3alnb6QuW@?>o2pxB5~3csIG5oW7X8 zi1tj#kAn2~NULqIXRwE|;1}r@>53SO7}J^3nM4>x7?08(rPZgT)p8MVRyFd1Q>_gp$|1JEt@NM_oF2unzzTtkuJuEmZ7>WtSSczGQod)7C zahQ0acp(FR1AZ(wmRpEZi1Qf7F^(?IE>3qocfKd0Pef}JY80;NUelGalCeVm7F$X+i0c$|Duj ze;lA5pzf{Vt$~&_UCLd`ALT#FUzWZsZ6j_Yep=+Th=P!U&;#Hu-_*MKUODi!jn;c4--+(0X3 zD`vpo%NmlIQMaGYJO_|=;Bcn#lBcP zUp!wpRX7EaCj(oMGp|*vRa;eDRh;oR<8O9GcE;!Q&!AlVo6eoVo$)C1Q6@wsWmV=> z=1}HS=9d+f75yyzS(;y&UujxnTJsG549``^RTo_!UEkl(-vDvg#6AF`zKAA`CXMO@ zbpm>Z@-Ff&O3F^khFFxe!sNnaSQ92PBrzn-r_84yEx%NbRL=4Ig`nGSmM~);M(BDo{K&3 z2-iAN4^)j*36}_$d@lH0Ad@eXkFw2B$4ggrSM}xk%k`ekp3NX5XhGfK4_Y3y>;eKE z0v!;A-PbhQH2QSr=}gvq)_mAP*h1-S>FmeJkCXPp_QRDul|3j=>`3#GW}60^1~l`o zfmb)K8+WYcSWPw|n}GV1TDx1jDMu+scc*u!AI&|Q6P*{G_nz~fdjj|_`7W7kn`}?g zPtv#Yw(?>mF_PxcyZuJxjY_9-r?RcQt^7&xlj6ubroy7aqED$$d1>v^+9-LH{NLDr zW5UD2!|=x&Ay1K~9xpv!y0Lv@Taj9kx|pGu;V{c#7Fu>%_H3?fE~p0;C>AdkKdX3F zab0^|d*5u|Y|&xS0r}s3PxziV<#WnM!cW2v?Jt^7G@qz&u5j)=(0PDUk5jKpzDqs{ zlZ1K4|BnALa29hGgS2Bv|6*WkV4LEa;+pJ}?Bg5k8=M@L9L5>R8QBRG0}N3NQ8WO` z8@m9YtYqYAxe7p4Zq#i60~CZ8gvSKO1Sg+JJ~8Sv>f~nYX1iv-W`4@#6pDp4p)sQ| zE43`Obg^@>dv^HQVf1rndS-ea^*ZWRc)akqpPQc>R5%@mY6IIv%SB5$b2)Q}+%tUw z`~Y$QG$W5QiZcq+57ST8N!97l?9e2ul2z#x=@gZum86+5%$P5{UwF}6+Kt(b*`CoJ zCJ45S=nN>vCdP*2#Bs{-$nYR<8q_^=>@e;yqFw=$b(3|JA=fq5H3rtpVbu}U5j3lf zpN*eAw|s7ybDeV?y|mY~*YJz@Mc*0Und*`15hS<`g&uBvExs1*{2GcIies^{*rAf4 zlIW`FDx_;sY*B0(=^W`a?=|lo0`j}_yHOU`f6f0jqYQI&Ha=W?xb`USD9#A7HBjds znnM@iif~D_Nwr7uNAY5{VzqCo-~7{(o`^NV5YVe1eJw~OBA%~Z`)8I&26FectrUR7R2J-Nq+j}P~D_jXUT zPrwADu-&%HwhQ^4ea3yph3AFm;h4TIwkNiSGO$o?V<%%LVm7rz%jr6{E+>i9t!^c{eqw4t<|xSTlh;gbc(0(yLUeCWK2 zJcl`gIfBvR(cy^=T7Zm2QnGw4Hvm?_2rV}W*z=p4|+H>;x^)*=b7i(=iTS!;N##^;8oy#!2N(bjx&yvm7SIS4D%UgE_yC{ zTPjYeHxy>-3you!?n-G$wS;>F@cu+FTaoDsEswf%XTd72f*6~_B4_gP|?W0>vf z?CH?&?8@Sm#hlTcQPhtOtCxEFD*Gyj5{HtUqMRb{V(((}3iAr-TIpJc28RY1J2WW* z$Zv&qD!#kxhhMY4c&v2^i;vI}K@D*sf<;pA|r0~_oub+9TRo^C!3 zTMypmn#P(&kPy}p@kIQc+B;}nRSRPZd~#iK9l4R*xYoSZe7@y;3+lN??^ALUx#=o! zjd+cy)u`2oJUF?)eIh`*PcmvZYLD-Z?^YU68Za3)fyBVfVbn#5I$e;?bGBu+1^qWn zh$ckkM&-t?`mXvzkjW>86T>x?HI=y*xfY@Mn*wxsa{wsA*$%S#ge!$Be-M5UP>!)* zpI=|>MC^pdqQ>I!t>arBR321j3}y@mm=7=`t;G!e3_bF?+w9rw$#2MSAU~1Zl-yMG zVDw;WM{0*B(UXWwN+?r2u`IDnt6ZzxxXQQ+zAav}S+hB>E3XUX2cX4+^}6*snvH#C z{mkmf=g4O#Vkg2Z&Mb~Htv*V9lme@_47)75Y^-#wbdP9{=xyHHyoHQ~j0(F7yK#$g zizqi^Wq4)yE^ul5()bJV3$pLB?=r|7ww_Qwq0VH@WK|Ya7R1TmWbSF*)3UU%v_QE< zhg}Z4NV!Y78v`Kgb~|_M+_7!1Z7MExJN>fr((n-om3TkC#&>r@Z{3ZFna)0Gg zrBkJEh}{qq5fBkz=3wR!ViIBsr4OawpxdC!rO&0;Vbo#FVaj28!2E!@3kU)R83q~d zP~V|`wf$;4Yawevby#({qp725qhzCmoK8-^`R(R6?T^|Yk9|1y0Y(pBV^d;N-16M= zepmgjy4`%cxuvhA599z-p(~*)r?*dUZ|rXDq8?hyb<1_3d7*jlaqn^VLH5C?eNVyN zqTBah?|;20581H8utT<4w%N1Rv$nLjwD@+`?JO7rC&6+48yrCsEWcZR2ibNaa~g9R zToQ9oMv^gfSS}Hlh-l6w*e}?BWAMh{^MU6BIz2i)U}VQ#^9;yXcNK9D}1KK^y?>s<0`@+!(NLZ3C1LCL(vyq3C}x{ACn zG+Q)V6MGYTw$PJLAZeU_~Vi@&{ zq1~h0uG}tIJ?WroiM^4(k>3mBg^?GR7ykvUiLQy>6TT;WkpCcmJ6AgwGL|EK`8&3E zY%bg`-2Ni|BF*y6^2iUiX|ZXs%{AXJB&Mg`{3<^F$ZD}95*>`0*?*aD2EPy z6|$=ms}jnPGu$HDBC0N-F2O3pDpM|BF3+pXs|;@oRULI5^)j_GwG!wIH&ZlIl$4c} zt&^;id?Nlt9G#^y0e4AvNpV?m*&hl&6kx5T{8|08IvhE*UTDA2UejFDOjS!&L%Sng zIbFF1sRk)32`Y(V(PB{zj0OhnruYT;1(djzxP{n+*a(aS#v61u=z?g1XjrLPsr@Pa zDSh{S_p5iSchB#f-{INj**?E@e(N1@9UyIzHnTReHg2rlSVO%g9%Yr`R57etYiUMsv-cq;o;_U+W$sS`gYei$Se zB(#5R|2qF|{@dMOcYi@_atg>H{sdO27rKg~L(5lU_qC zMOo)4AMMckq4nR3zZZ|p9GT%A;~ksnpXrzHl<$mhif{Ugy2)T~53;R1_YC(8rc|a> zi)4%BwbZrL!mPq9i1I0_uc)se*OF_w8o3%@kzSF+I>b8I`q=uE$CSs$=f>yIEPZTu zY*%qlaS!6dHzk)Pmm!9G#%;uHB%(K>7k>2iFU?8P2g8KjxKJ%4-NW7T67^-rT+`$4{geEVYiVy|Rh z$to%+DxmBaF-b8=ej$FLAWncGhym=#d#Dc_WKfI9Gp4Yhu)w>_yX?B|x_)uz;?85r z$CTe_ztLW0xXLigIQ#GVN6SjfigpJOvmxvy?kR81+rLO*s)s5y^0|a50huNy1sdSplL{v=uEB zEvODt9ftS^k9FU5-_(HAfT`fAU>FmeYlvuw2!^g=dH|hYP!48QL{&s8fIKhkQSASG zFsR>UH*z=fa2Vi!*q_&(*PV2Tbm)QI13Q!>@WcLxy@Qj3Q;vI%`;PaH_j~{M{!qyq z7#0*31gpA$8@@Muk9!>VV0U77dT8^|24!*-85J3s8vy#|`sV>SRvE|{${9KU$_B~? z9l9O5sN-BvO;GKU;w43_3|59qf=j{!P2#8UQ!7BwWYDC* zn7|msg$+UtWN&*{d)Kp$XB|B)JuMKy-H?UL!p)V=mEJGBUs#q`mKU8Lo&OyB9E&=$ zF?EF{*;N5n@&&JNBFlz%oqGCyKAZZBy9R(P(+!;C@(pe zFP9JACR|yZS)8a}3F&{&$eocZ)+p9Mos)K!c9xAcjW+hS_O?7$JXZIN?ip2RR%o79 zJgxX$>bul0v0q{-fQ7V$^s>^j5=I-NEoLNU#A423o?ww+@yzU**@WSQ;REdl+O^8H z%J$Os(hr0m2s?8-bE8~XT_#jB-G>d@fR<3-Ze4#9d=x@ zmsIap=vQc!YL!CyVv8b+BCmyC3qJ+WOl(4ULKtQ5qKqPx`QM;Z$o_22J+;ijDV>t#;8a0G$QD0d&-K)Gqrj`@CDcTd0d|advSw zZ6a;LWXNPFwmY^P>6%cl{U&}Bf2QV44a)Q)R1rX3Xj^3pfNZG}L& z*d}aVVP4^#{5$!Jxr@0w07N3^D;FsjHDjBxF2yczN0Kbwz;0kuic^Xomp(34tWc~_ zu2!!0sP(8tpOMM>$$D7zHn`Wj*Q1yj3tbd_@p?-mW!SDRv`7{MI1*j7f z^;6oG*p{FN9!n-tA`NF~c##C_ez5lck!ZnjpFi zKUOtX)l=S6j(Q{@lBaYPyNZ2S@UUR_@9y8stjw&XKTChM(znu4@nKRNve72KW5JC!;WIu$m+`O5Q^Wz}WXnfOdRtc{2gof4gB4=+d- zB(toutaDItP}MWnGsCfqn@gBWm>@xr_$2p94r4L#+!{Jb4TXT{{zerX6W0%w*mDb^`SSTZ$|s3`lc=|URpf0eQF!(4e3q! zO!?6B_+8Drn(}7yX6X8T_VC%mf1Lj~$GgS5?Ht=Vrr@pMJs2<;pdF?i)*RU!nG%%} z#R5OMI264BMv%q@*9+l36jWzhJ?^)kVUYER>yqUZ=d^UXC1Kb0~LdHVk z!sEiLBC8?=qXeUZ!-K=Og13Uzyw$uvIDK$JJ5P)u#?V^FTE`AJVQ|90&&_GVIVZ2(gMXXB5vUHmfzO z{m}ZMbqzqCHmJ*y?GWw|2AeNuJYzg#5Oomsi~Se-ul8Q;?E*jdf9|VLs!#?{2T&`} zD$s(&h;Eu@nx<#JXFqr?cx`racCrRaT2Y4ajhq`f&56y4l3yji{_o5GzFhcz;rpYs zM`>||afRrtA=)O|);-WYFfcJN0qa8Y%ej|xXuf-S>hhG_sN6qo3JHpfa4oo&_2%_v zv~x^rO=~5$liNpuXMmu`v6z7yPKhFFR{Vw_);%mJv|HO4i%6WxgnjSP*db*gnfH9j?H_y4r`X)zW|#iT4! z*8Pn889y_BW-8<=75@FcudtyL{l-Q(}n-Ki5NiW8SxmRokacDp_eei~dIUmXu8hm+qfyj@^h zW&?Lm@A3$s0(r(-n_8RF`_lW)w9d4nOruP2bZ39g`JD3r*8#2ujs^}*7EKlrS`k{N zU8dc(m9~`<&`KCi8BP^W6i%S7i|zUCdA&`&Orx(wl@L0GIfX$Uvi|@n z0EfY0Q1(`wV4R>8@D<1q$`CpxdQ21~-ZFvef$B-dNyZQfVjJNU;Uw%L>>>#yI3+k) z+gsb?E$|jlA7hlJlcsZ4&Mr`@ zRjO62R;&icW#uc1R}`NBNlHmdH&kw@w5qkL&1lSMz<5K`0f1Uxbul$Dwc9GURs59v zltko3*<`1uyN7r3PXh(qCe z&-tE{f`fwN2ip&}B-SKIq@rMb%kmb|)7~*N;X;H?0!%o8v5`}CpZ7(g% zEzC)fCCK~J`_thw0Q|l{!b^Sx90sHTv^R*Jj-Jk#%$Phpc6e-fV0d7qbEWe@^MPhp zyer~7IlNhWvv!U!M=)zJYxuA6KWJX{YE-OOtp8B+p$0uOfgClToI%de z|E>SqC&ee_5upBC{kLJdVfynw&;KlBEM&lAVa{g3X2GY*Pn8#&E;bqT8}vVzelU%? zWkc6P*Ynr%*G!j9m(g`~dUARad0J4W&71Bw-G5vDwn*1W*PSUpQ!bJ(l24UMl^K&3 zllDISeY#AJOb+tkTjQ*8Hydv@cDHo5%(l@(vtb7SSk z%Fy=Eb~a>BtZlDt`>*=1(#+D#s*b9TKIwVV^M&+M(=>45}%6XhR)U5pZ4dp_@c-dWvR-D25g*+m|g4=f*8(BN=DWI*Jl_)Bq1 zz!)-Ae?TDmE!JDC=pJ%(8(2EJL^Vw{9Xt{|QU^lOgM$YLdB%9gke_*Yb$AtZF$B^D z(!FGP$?}!+D<_(*A+IFLvjdBT!UxR{ns8h(hD(o){}KNq@gDIWcYW^qd^r8#^pl_` zL9)TJ!4sz^PCxc~>~-(Ry(3aqQdTI_620$_NFR|t2p~Q0Gp%P@?B?v|5{?p%`=0xr z{Q>;}7s3G8rJy_)h_(FZmHZ!cwuAtv<31WdI%9r70N9V*N7BPcbgp?4`6O~FbSaeU z6xS&vY#(zRb3{R1lNOT}VP;`w-%P)m=9uM}ty-=A>zO_1a?pkDINk9B-UqzBy}Z2+ zcpUJ6h;V1lgPaFHSbwmtHmf!R`@ZpSgWm?~dg^-N+Tq$o8bumT>Q3r(8gv?lT83J> zPypoxOlnSQN~lVxqK;=cvWms?$Mb`Hogz0Hi*ReC>SgXa|5YNSJ4tXZ;ra7AKY_ zmO!q%i1fwR#;=Y0_W1VbHR?5h^4Bes`RV% zt3|ncFB)Dn)WZvDNc3^~IN=K6iW?<2O1>6-ExKB8wcus`%Y3j|7A#?xu&5iutH!Ga z?Qu{S(rV{wXFy*-AIRYP+k4x4Pj{T|0INe2@*)gW4pc&PYK1_RKoyMr@k7KR;z0XA zyL+#DFPg6{4lWM10CEFz12=ka^fGlbbrYe)n5&Dc3uX3w>;Kk23a?~xG8t)EO14Y3 z|4{v*LT3wq27d-d8b+G!t?ezAd6xOmkTt+h~tKO+`)R&g9NS;vw<8 z6MH8XDIY1XpsJwSrQW5ktD&m_5mst7$~DT~^4{|4lIfB`B0(aa{GR;LywSYp`Ooun zVmL9f@Uqje)5tT*GxD|awQ99(wRN<2v{$lIvdgp1vmP@YGd-nuO3z!}TfI`LQYl>_ zUEu=&k6B7HsxzwITHacM`hxll#tg<(rc|a`CRrwiMutY!y4AXq>XYg)5>P}lGMo@j z=pOey?)Pl(*}!hg0u}PC8JroM?gH)tQW8=UlM0gx6>1e~P>-cPr#z>eD4QrdBR(U} zgki#fWL78!I4OKmm{o*T1lF>`;sDwep?$t8pDJGuPY=&5*DRL;hXO}2OEJrDhTjY* z{|5Puu2Nj3CtJ8a)- z-?~`6SRGanRshnr3>amk()_0R{W9Za#_QbIx%OCl>}1(wnMsvN)kEAv9HtgitAyDyt4yn` z5!;CUTJW_1^?t|Z#^#m-vw5?5R|>8a{3`rah;}wl0r=6dP#Ib3S>;(}i?_u?Bz?nh z<8UML*TC(V7!9CZ40}6!yLhj7@5s=|5LjKuu%p;fh#nklgPiBSroJZB4UD`fG^MsJL8yxtt2HEwe2XFBLDPD4{5^D7Gk8Em18&I?gwQHw5N( z=63y2{ZTY?irfGP zj==uFey>TdNxK!hl>~|eiWTM+W?x=kUWi{7k(UI(tLv%Ysj#8Eq3o^ct(j|(Yw*DG zfn|_mkRz-|j~@>{9*hLHutJQQikONB0e*)648L;b${B4>ZO{K5_}_sT==t?i^ivF% z4*&PepQ@Uws%flg+~L^aDB~yN*B90ohVCV(PcjLBw?q^zFc>))$q~g7^)>Qq!q#O4%-87x+j_c0E+Qb^zfY;Y{*LKma zWsqZ#19fDWi<^swNQFQPAm_>10yGOX3)w2zD%9%K>ik;$T2U6=^`YxS#UsTdgki#P%s|Y*%bu4#S30kB z>U8LIICVO8M)pMZz@>b^eAIl@ZQ}pP8_65l>)q?EXsKxVRr{;95L<{vQ3g=Sm=u=~ zmyq=(>&sC5Q2fIm4}W}4{hZpB)0NX(+FL4ACsg;e^=a#^?pxhRPlfjG6U`INv$eCe z`K9@#+4c@YuRhrs6Si~D~Oe-lBhztVbq<}oqL0OgO4X3PXv$y$R6_^^C#y{ z&Q(uVPdW}d4(7M#w|}euR*yQ;Zx!7t3ds-2N1YvXWprgHYERV4l4MEzz5KnWM^BHU zJU+C)N6*8=X<(8#Svg)g&I6#&iok-vLeN&w)?3=Qv?lB(>|c1k@JIny*{-r-Xfd=Q zn<1NURGmed8j3E8F0iPOiXdA#hnPbITVPvxe|i5M@*OgHhrBb)I?P%tQY*3{yCDm< zZAAuo2Kij^TybrFZT|mQ|6`q|ou)+{J!~{=G&77djG^42+|gpuVv96=89?f4NZpC89V8;Mt!CJ`ch_bl@lmnDeo(9Tzh}VhNfky|ubHI14 z?^<_N?y8{fI!*~r33RQO6p$2f;C0}w=dS1e$n%j0c{Z~!Sr~N4Xi;cU2v!MJ(N@(~ zeWLtC8LZjzSm-A@4Lx@)f-Qo~{LK8Ve64&)n`{TYcMX^Z4APLIY(KPj!H8qT(brJN zu_T`)pBk4Mmm`}aTMSbSQx9~8?NIMf_fz##q5a@0%__|kx+iq!=+Ds$(h1U`d-Uek z=9bQq&Jw!LBn~DH#`MJWtaq(<)%Vu-z8iTrVoWwBi>!*QBEM@jO*Ks_( zwH|f;R{oaMywp6(_dz+8T$NmvocWyj=)H-wlHO_F;IywwqyIzy=V8V}6nT?=K5|8+#2BM=ja!QLPn5Qww)%OCIvPJHnX*`wa|9ZcA)In zEC5E29ULSMl2N@;Jspk?_o(bqSqruW%U#5cB#cGq^8%5a#c03oQsYu%-DKUg(Y?_P zHm7my0(Rl#=E=>9y^6i`{q+4KJ4bfB*1XoV=C$T4Cn_g$hH{2Z_n+?n)Ay$jR)YgD zZW<063mU^rVkT#&W~VMpUzk>!Qkr@>{&M`s$d3`ES;Ih~VL^XEztN!4;ET~0qiy6i zve>5BCP=6l%mmE@YvgO>&uX33g7vBHqUNGzfkJ@-RBmHX&Z#|>Jr&APLc6mEiw_o& z-Wg&(Hahn@_fT&s>X=jKQs*+^GvPyf%BOr!`3!grcw)I@xhHrhc)ditLZ25Q7kB5g=d*{XRZ}4yAssb%1*in5 zD5xu_`{?=T30MkP>O1K>C3`1(N1u&8TN65VX<#pMFR}vg0_cF% zh}8(kNXLJ<`Qwq}kxWrcQMV#*Mcxg&8}=gbMWE+N&y(*x-g{tOv98Q6%r5M1>~7k} zwU77v_WRNX(*~bCclO+?uvcN^5ON49kQ7*Wvhd`6m-{Y;wuZLo*-=+hSJOw?N4Zt8 zRS{OG$`h&+s^VJWTHgBJ`XIeF2{8*XOE*n7T{m1eL_1eI6+4w5(m$jVL=r?^^1tL~ z0s@5sg*3!8#L#YkL}oIBoftx%O1NG2 z?6&Q;4K@unovA-lFIy{HD^e*^NmEQy+>+apJDNF~xskq+?hjnbxRjBXlb3V3;Bo;- z1B;K89w`kd3n&`}D9b6!50)MLm+|zW?c*bbY^Tc-P?5* zsiN~`_C>3F<`nuAdN1%TSFBX5V5hKCeFJ?1Z#&<1%C*V0p|c^T2h#&l4I^5!TC;E0 z->##)#RA3xMsId+_CK6|IN^xN&IB(vN;k?U8&5W9mS~nj=R@a_UYTZ_W?Pm~mN8c_ zSMa&~bNO=3a!oOPG5r>U76Y`WgBTd?RFzbf711w=tXkyMQ1@#wMj*d2&1D&5@;LwDEE-95ki z=J$HN&-J|j!aJYqa&TtvJv-J~d+oLE`}+kyhXBI>!$($+tiIWQvsZRhc0?f`TXS3U zT21>6PO+R~(csbG!TiT0#Uw=tBiA}(c*fAs%+Rc5XUk3j zQvp*MeHr~ywNkYcGACrxiRr`u&H&CUY&0bhack zbVAib)r}O46f#9KMKN#~byK?u-30U=zCgG@n5Ubk>tyLw15$l z5z`pe7!_)XDNZO(c=dVpakO%@!t_Y3bER`-cWHO2Nr?&CCX}QA{iXe-ugYGPC6p$V zb{BOQ4dxBziDiprdu4cK)Th;_Jq1KFL^JMZ-_Hh_zykX+`!WcRuZBm4Eq_Sp7Ik<6 z5iJodg|&sXU8P;6zjJ=)tfs7{bjEkao5q^Prp2Vi?1|eGH=H<}cqQ#h+LNp&S$?^G zxo`5{v`96gM5RGeRP~N zb?I~I`_THK6*Y(N7T+x<=a6&MGu1PF(tXk+(jw9%(8hOh4r+Zw4LWh&W)5Tl`K`#SJHFyar4Q`$jf+Xcxl`>xNi_>5@@1ttZ)3U-oJW$ zYJ6&JQfyMOys^B=jLD3go1B~X7w<0~o;f^&?Hg*m-5$O@e0u0K%%(*R%@5BH$B)L3 z)=kuH>5fEgMs2#XxUx74I|~b`3aP#}eQgTis(Ue~1m`@^$cxpV)nCU?$B*+A=c%VY zPkr=G>YX(8HuWCx9Pm7FJ~61 zYW4#-XK`*zr}m-kLtD??p1a95WSd0GL`!uObrZ1V*0tVlz5O4Be-wU7{gh%7V-kbV zFX1?$I3a#fe$hbiQHzs{lPgdzP~KGAR9gg`l%15FWt?S}g_ec*x%j!j+Kg$IdY0Ob zVn@MPiZ@hms6^;R=)W+3VP57~=0MHA4q%dFlH(fVHAd7`Y#(hO{nYfS>0#c(Jjocz zm?NK$e1_ELu*cz#!xthJB3M#bQm9I(N|>6MnlOeOz31T+jN6Rbj1H5B$tJxfz4aaS z9jh&?EjVWTx%qSRo3=M?SGulrnf00VagaI4QNUk)fAyiiA6UIr{hRY|4#upYSligE zu~*NZK7aZc@O0#F;|e%t*v({9u5 z-Q?Y5uQ9K&@agdBd3edM$gf}=O%`<)^?UmF^khadBWe}@4Tv*}Gol71#woY2wXYQ~ z6fd+*wN0Tuul}(9u)~nUkpGDP2Y0>_q>Cg!kRz2Nbwlok+%c77Drg=fY9wmpXzpnK&FY(# zt+lQ7L(7MjnP!=0I0h@IBd9Z`Hl`M$7^2uF(c6z)jfk%Gq*5%h4u7y~&zIX=wC9|TAOBmpKO6U_Rj z60Zwh7aZdq;{^+P4vf7Hr3Hsm$a9z&R?DPne&&!vm_l zs=eXu;q43!3=Me|c@F7 z*@QGgnn{vL(%po+5Dn&&z>>(4SeHw78 zSLG(;CNO^o=g9b7_Racn<_M}|jE4W1e_?=$a9??~^s(RibAvvRXixlp;#Khr<+ ze9HM0?AN_af0+(8LwQprQzd&zdr4+BW+*FD6ILBo{f+dEgkE}8@OstossZcuKJq@Y z@wo9g^$hh)^IY@XmH8|4&a=+5pC>*~_zd|BUFx~iW7ulgI$b+mt5u;@5m_8rd<)2^ z$f&@aNsm5{zNo3Fsa`M``;YoR>R0ry=IS2naCt7NNTzz;YB@b2Q> z^>X*i-On7JIi&4P+Z*Z_>PWOB+MzkvBg03A7d0+wY**Z_cv|+fEY2S)t0}9w?{MD{ zW*ue?;j;%WAHRIO|4jdx_~7{95P0GJ!xSI~k%M*x?+R`J(g7>L6F_~Jy=V8HRR!*Z z+zAl{vI4ULVaUk$gU1Jt>I2mWKG}V;Gl!Rofr^1AJ)t#H4lb`e2wrks7P+m}EXJu!<415`wZkcYu+>N6ZN8!q6RNSt;UHhQ@LHqfk z^Fz00Z_PTaI;`H^xVuraR26XNV47~4 z{$JjIc^}F?lwq#>eEocVdSg1cf!%CuscWeNi5Jpi@F2gFcP9^0Ff$=dJS{0DDFwIT zneCZvQDjl1RjE~ZtM*pybp3SwK;1x{0r(u~GX+qt)MtbMHAtHrBDy+OTUu4b+VzN$W3d$tyJXK~(y)Jy7( z8;Kk7pYflmU#eevzW#i@iPA&?n;M4?2X0r3HG)IfrCSqXDdb5UwxYGIga5;7Mt7jYGH6$_OJ zl_-=flzaqqOLR+s%)F$Rte5O-rPoU0>f-7H+5_4l`XTx)27qCUAuUj-U#M@QYofcV zwW@VW$5`yduU~xdG^by##P)b7zC?Uv5KwL;et$$DuA{Bq@@#w{~xBdtG}S1}xxQB5G(o z0ewn*emIqKDy2KAJLx&_I{9_-=hV-so*4kt3&lLeJd6pzcudsa8Y~|ye_Qdk!m84$ zGL#fb!dMv0)xXesp_QeNr4Qu!M>%FVW(wvC=2B);X1`2+nS@87VMr_LJJo)w{X^r2 z#+;g*n(T_~in5}zBBorX+^Ec`%%=c<4u6hzfp)=6?7HEPk$;dpZI$-RqCi%vd=d=3d86F&Cg^oP@JL2W^(*^+Z6=S;wH zV1K}VY71(MU)sO4G2zKq+E-cwXj5!cG}1NFt+lST)^OEu{o?z@H$Nyp=s?JU5R3_H z0`R_ramK_DV#w2grvVWD>vQ|q?PKf!q;Ys%^}XsF?;r246s#1C`j!}cn z*GSi}y>CTk{Z7=N*gY8RCzqb4JIueS=e3eri^Nn*Ts zgiM4C*yM<9$HUp0wV+sQb1N5Eroe*Z!0ygW-s4cA0qtb)A{r2Pb z<1Z#(OgfD_jSmeB4Ya_Evz)V>H-k5$FRCvJq+Gwe4tpKO|BnCN9PsGlqmNuaxqjYC zyp>p!SCc1HBUJOP^IPZS(BzQagx!P~@MP%8kVTh8*J%A{{r&R$<(37O1zI^;IaC0I z(dI*uDuGn|>fV;#mVLeZdcjs^uwl4iSPl4x{15ql&;1_MqivW(80&YY|KtNd}qIO2Z-{|SU~hH<`Rc*y`(-Rq~PPfs@wG!MLL zf7R~MQKOSlM`9 zcV4$wy;uFI@>Atr`CfTWIZinkrj*r^*OD((DpZQy9=qLA+fqAJFI2Bnzf*r!Z&uGs z+e`bL+BvmMxlB3q>Pq5E;=93qgZ;_2C);q&q8@Nzc421YVB>J(bK}G35uDc}$P?t_ z6yg*>(otSaR!p`_qDunvSk4g7fC`g6QC~#h$j4K86$WcytET*Z9FR=giPiZ5gP5w;MvusO3i zQ#MgHaewswXu@#9FlsJX4qFa~kA#ox9@{-eJwZLeIK?=HxqT;RPj1DkpdNPgQ1lQC zQ+3wY*4H{0ITy{R&8JDnNykA-&hP3U)jwLkw|qxk{3E}P{Q4I4Eeg`~W7Fc(;^z|P z5@bOizb3gR8T}V&GH5b{vV^iwCkFkxQTwtJM7`+h>FOhzBAP-0oGY{`w<-Ua_c5xY6k_<_ZzT1*IkUD@GP#D_6nE$x{c>ZMmSXq-8@83PLdjz_hvtS**L0}>N0Oqh%12~U^K40^|o{&9Tb1_UIOd+YkslmlT z#X&d@$9j_Wq?m`8N3V0QGtFL_y`8q5wx6s%S+QBNS&D&XbF6)=J?3*xADup`ds6qL zv9GbO?Md5{DV`~wMu&_J-Ez3)U}t4#b;J0E@msyOdY`mDX=Q0-X&ll#q}ik0qy0kf zg`U$6ryYp^*6j;g7qoO$bXB~iyrnV(G6ars9OJNKv4cpxw=7v4Ssd>C?)#ex`Vch>2$q`+m<-^Umt>V>6>9}+g$hZ9v{t`X zFViX0DLN=R=riFnabxDjOaX9b>duttxaj!Kp`AnhJ^ejXty8VW^~UvfBsLu!b^dV9aL#|= zIV74RnuGmB%)|Gs0IGefuhdNk<7KhmvEJW|fBe`yvS<38?EQ zn=YH~nCF9#t<=W!fg5KT+fOv~|%O;p;>XY_ufn%3r7uZI2_yDn;v7Pxn`8{vR zZ^>QbUE??o0ZkvJm9CWzy%n<=vl$Q49;EFAgH`1@&cc3?;UdE|nrk$?w7j&=OwLTGD*dvrh?j*9)PThtctg+w=8&&t^&I$yD5XKgR5n8 zWplctx}!I{Z+7Dxn0KXjrE#%wv0#B<0Udx|k&v=j_JZ_+6j2jVlU|ozhx#YYKuTRo z-Fo$U_0x){6%f8uERZLV7nc>6g_>i(0FfM#oTmj(3&2jkG>4Q!GOjhQMUA2Sn*5rA z%7V(`lH#p+`SR@Y?8uDBjONtlRMcwKPSQ?dNMT5Mm+>xRPyU|#6Xhq$f7Sh}yWe`h zHM}#tb63}{E}Zv}1XJ`IEjL=O03d(Sw!eFSw<=kc+&|hsDn2PbiN4*N!<)nV`}g-_ z&LeudHq|!O?yuTkb)(`&MN(-}DL?qaNEJ#I-ps$5ACMc6%bv}ieLnL%sKGX5Ue3Lo zD_1I4T2xn57uprt)iKgBLOV}8|6~2f`U1@Y4UX+TVtK?e3=A+0FbUBJ(O}Ho_o?qw z1LOfROf7Z>wgk37F=}+LcduWrTdt$8r?0vHrW^QC| ztnIAryf|`kBxx~e@hR<7+CI)cPSg#$BzH*;1&GO-WKE(LQS0pXv)h>zm=t!2?h^gN z`GvETwv_g-mA_VOW^86|jNcd^866qjIlgoJ&D5KzyK{Hv0+#}p)YsJ4>No2*Q>as@ zRT)$nUa-7i8RH(~hEM{LafNXO7hM-!uuQOwa*A?l_h|Rf^40P+4KNL03uX&$1&l(B zwsKio0$KuGd|Z4|-BR6{_c8Cww#v5JYqZyhTbEncK+8ZY3An0vRqv(oOXEA1cP#7e z>g}HFf3ly)jmPcqiNh!M`|tP1F)=cL@y7TZV+nwDLvV6na-g@Lw_n-GvXeI6Hs0P| z-d=J51wbvc#FL39eE}tJCGR&!-yA*WddwB9keyuYTB!C_JE_5sxdjlj5VNqi zvbUlDQI=7bQahz~${WcW_3HKN-O{6R-MS^;I=gHEG-GP2{73<*>o6}dP zuR7m#zBm7B{`E8NXB_tF7{FJ;tIVqm^(vC;lIqm!)$5mQmTN%9ndDLGQTnjpVF7A| zy-I(TKAAF^0z*uxZ!_LzWaMY$zpZ>*`K0+tGx|E9SHQs3z!Zd=&KOJ?OkEnjG>q{I z_v`Q1kC%;?^%nGQX$685SrJ$^RQ}cQS3^WcM8|{v2mP+YuEVFtPLD-TL{B(OIZQE3 zGfXoAW#9`o1{|0>&TGd5#ZVpgQ*q~~PEWyhBW zmIlzr<3;O>)-6q%j*}fU12h9yCa+AQt|IDDVvN}w-yB~rv6tv2O+`(`Z!+Ixh!RAJJtBKVJ`g_;odul*F9J7+ zH;5Pqjb34>Ee2^6GF@_Aav%jFpAIO=DakoVJ4l0!lDMC+pYSn(V*<(C$=oe$Eo^?w ze$1FND#R?rjGkggS&xFV`c2l)ET36UY&)?Hy211qA9rx$;KtXbuS>sXe$8Zpzclv{ z_t10lb29HR?{Mx!?!?;s+PucP#=1SVJ@p;>JM^;*vkY|fboBeF_EW(W`Rd~A;%vrf z#%NPtQ{S)lU+v+I;f<3ulQlS3@^9I{WranBMRj>~d0FtnST2w)PmGCeVf8Uz#$SGLZt2 zf(g)HeU$nrbv$`I`B}=d6x8%8$tuax&C}h|3`W0)(A?16^z8I(Z1XYykhz+f{HU4~qS3;?k~u|XUQn`@hE8?GI$r75K;g*2+{E2&pf z!TLJ+L+XcA%%9v@va{q`)wQY+Fwe!~$GMp^4QCo)I;Os)p`-zIn^L+{x;ck9hrW$} z8^_#80s!egX6T8>&O*(liv?H1bo z8+d8^(pJG*!8*V!U@NBbjQSb%oeDb@0;K|_Y$R+X_Dk=Vo>7@mfv`hE^bQ_#A9I)X zllH3)t`5d|dYm&U2`&lN1>OX`fe2#nAbub$Ff8yLKodk0^c1iQwgc76h~Q@c>c2bz zZUo*4WbtM3bvWv9wBDuO<=DPs`##%!wi~k^v;J=J-GT}LIW=n&dlP%ujs2poqOSkA z{o{u6BTt>5I$w0S=-_PSY=xR(AZMuGqt~N1qd%h$-G75Lqco#OCXYU5imjNqx7*gvo$AFBvkn1`{cW4x@ShDN2I^adb_2YM<5YM zn+=-{kVf8a-EH0dtM^xLJiyw`+Worqbt@*Up$7$6BId7UtYyHhKQ$46w79Ixg_jF) z{l@yndXr|8W<>yf;vgly5;c-dGfgwm%MxUw<56z|rYqyOCvQ*Qm%c9@=T3PGcni*# zo-f6GYVCUM`lHQ9o6okLZF|@8t^+k@q}rw0g`0(&p&LP+d@sx=aCe0d)fn z0}YRxA2)k~v1w~dYYWE9iPwqOc~p5+p)WGVn3<8xNH`Dsy!CnOc<*>G&nVAm>`d%T z&T`K31IhymSk=+-Fz_(^r1?q1yUx45IHJeWLqpyNOX>Xl!py-@2^=Tzs}Chl&R&1SxQ9a%+|tlo)_j^3KB+hb<^(6tg{sdkhP;3$;;G@}$B^g<7dv zsWakd#E%2GeLV#|1%EYvH8X89ZSNi4J5YZt%p}a@hS3cpe16%A=ZA4-)GW{B%;YR) zE@t**^kftTJ~Dq~w&k+r@+bNeJtaLQE9EQYIaD}Qq}8O=+*I9EITbk-?@Qg6k`s{= zF%vKoc**;c_bG6Y{~$m5YG9rlw+Oe$E8wQ^P2tOemj#1)f_XsVmKDOo>A!+5d-zKD z%BO`-3+PGgw&1ovTqZ7~_RzxS!sboto7B7LcF|$n(Ez|p$4e(bB|w$5nzVXo=Fkkz zO`mEx)#6_1Ug?zYl#iO)m;(>ecc~zOlKwpFc^2jY?kL<**ih6^k7l8YW>K@v8Ky zEGQ``L65!gl<*XvSf5zu-_F19{=ECM{CD~9mvJxSFh}!s!RrD@DXv7#aQkli?wH}2 zVbs55Sz%eZvUz3mE#WNz&6{xSHf%9$ad~Qa3h!_7gYtu@s~+AF-hui2f7kw98wR@Q zv0xbRtl$}@WEAuj^%a5Te7RtaU=2RcFLf_jCru^u8Rv92SBW zf?!=F5hxcZhjWDvDh?_>%09}+<&VoNODIb~$R%G1QwdYoTGtxh^Qg#F}_>v zbvf>K+)ekW?$L-1EEVx7&NS zcfyf`BgIa|POG-7whI;u77(UxE@vfYs-U|qhmd?)(2fF!c6 zg{FmO|Mvdvb!v4u#jiG{I;GmF)~R-1>6D|`j{60xENffL}#Wln<#89*R z9P2q&ko8*^9uXcveaE((wj7mcmFORzetb%QpZ?xA+&A3+hyM?Qc!PMFY?^G0<^A0F zxltWVdHx#yYuI4YU=qDh;^yP9ip}4jxj#c1CyoCz^3TZ2;g`d>-2os1&>Yen`llCY z{-^mu*@ZGRuLrq>-x}c>;d@^1c^&mC>Xq($-S?NiUivy3JsQ27x}0j9XPoC<>RtLz z)jw4j6M*si_{{UI;afvibyjs-XX_#|o%&5X^ASqxYVG_*Ff8dn=v>y+q}ps$#1 zzAdOKRp#>-@fVGjjh3m^sMX-_E_5t(?CRgu?>_8496T00mOY-08Ne`toHu@N;@$*t znmCPvsog8xEBq9G%6aPZ)N4R7p_s6|w!B6&Pc!c_;xh8E>tWZmrfW@Zb#5^0Xi?|Z z|i0}6m;nq?Z0RAkRJ&e zVONW;7JV=NUhH4uUxGR6{FVHbIKKO^=3xzEEn}@>wPH0`uazImKbDVrE?KczvHrjP ze_Q>s`ehes7m2#|s!6IzZ`0nUy~%o$^)>%%ep6Xf8R}L-*QBd=q<5rgrfKH??^Q*zi~*dPW7L{CLe!8FYBEX^!UC2J)sYLWU8{fGu41|s-8 zdxifBe>Ydd?k4Oba1;<#|SXW4gJ7(Zx;6pr3 z#PF}v7f)V1Y3gq3p6rn9AZ{XVf_n2y5=#<01$PRH@r&`Z2(t)-^oZOyy>EIKZ74GLQp67XqBW7K2lQQi4$1 zh4C2UF(Vfv7mQCkYen@)3*a!=~@x`5&G7~*2dwc;ieE~Zz66e zZYZrIt;3?qqADUSBAp|cBRIu5#hJjCz-G;E&2GnK$2G+_#TP6TEHof8Ad(8C5L1Y+ zd0z8?oh-`^>K)X_7LP4rE(XZ@w9C}W)LN8Vl%rRxZJBKu##H$>`Zf-A4Rys1#SW=~ zZcE=}-=zJ7{lt~wE5n$>|Ecj)3TN>kT32q5AnKYTG#bQxy zQT@B&cSCqnc#|}Mb9#-{jn!rqW?Qj{=K1FNHrY1W5*ZR1#%adjP=7fsBr_z_BF`dE z5AyDN%X-T+Dl{s>%EHQI!9yE!dXFa^PqL4;kN)}V=P%S9U;MTB3#5Kx9KqB6->iSL z4iy|K_*(L{SyBEt`I;Ax%l5Izg3PO`AiTBZxDIQ;1E7Z9n~fdc!rtH5?<{7}yx#>g4KNZC-80 zd>D;ZjaHd%neO$$^}&FtfT_-<&ZR0!6-Ag{nBJGk7u;7bGMO-#FtpON(wrxpC;Yeh z-{#+xzbVGF#{YR=Vo^d-Lbm|ahp~{ekek~+w;e3+c2Mo4+IiLbsTT69nJ^jD;6&3KD{d=p%z0Y{_;~qvLj^(w@Oed7Tvr^X<|J*TY@`?^ z7$ppZ4TLj!GkLAptk{<5m*}@sZKt}iabsg(ZD8%y`m6O!N+v~xR)v<6k(2S#woBV~ zGVf%@{;eFH9Nqqn{TnzIhCZtxZ_ZR23JjSg;`8_IxZ81iV)w*K#7M+gMO#HX1FvFU#W=+~ z#U~{vC5LB(XN2X1<($humyaG}0Yw2Qp;-hnO2s$IZj{kg(N!haCD+|>lKqr8D0D38UDMblI2_U5%YaC@9^)m8hq*9Dh%tGQq zBHX&O9u+?-&IXUo4{aaXX8LFPQAd)0fqwz#uh2L87tJq-T=b#wBlr23*a2yHl7bFwC@GOH50_+_O`N};zi;&j&B?yj3SJOsSZTZZ2vpXe@l4|2jVg#4N-tK$TuZ&&lD9 z;SGLze)?~m-#8=1BE=lk9MqUhnM^M_UUXz|XK+Vvl>=uEoM{eh4r~o--I|9-jmho7 z+k@W%sLg`@!y~>UzPj$Z?!kM5_cB;9Sgjka8zt;W*a2N|0~1pdQ>I-^yU@#P`0(&y z-V?khc>H<%!-K+uG=nwa&J!Dqd6k%>xdT9LF_a@Z=y%Ys@nqvk2X6;&NYVE4IN@>P zrSD5$$1{#+E(Kf)c<=w-|K6#4rv$tNygnTHa0JpA5A1;#4AI%VuzF$T1lU>IS)&hT zHQ;IOX>Dw2Z0Tn1W`5l4xEY5Dhe@Jgq9Okd{vDM%l{$Qye41a?zN#^(FsRrm*(otA zGAqJuUE!qsN%=!^hvYG9dyRLVbDk6DI^CGvm~ld&i@u8< zy<2`#|D?uo7s++Wb+`pDfi1^0!w|#Jt&UqAjkS%nr%Fzhpm%Uld{MmXFV|oE-}t`` zeIELJ^UKXI@;~H%L`FqMK`~Bt$#==Gtg5VHZewm+>09Yr8eSTPuIU)&2%aIIA;a`g zH_kJjs6SDUdXV3%zE@e0EJ#9?LX{E~5*3(Jb+q_sF;6Z}?)#MYDa06J%(;kj5f8pT z_!{^n@Jr!W01Q*SetZ4)j`5B`J>xwYd$#mh^ULzfZdcu|x?X*~`e)_O%Eu7bjB_z3 zvQA`qr+cTRwq{{zX33W zIVMGxB5&{9-YMTG-#A+}TZR4rjFpU)QB_e@HFY(0FPmRBgCuH)bgy)8Gr5_3aP;7) z$E3&P@tNZ@$+O9`zks`d^_=yb)PmH4>9XlEjuYU(D0=ULJsK0{sLZg=u(q(Yuq-hy zF^bWM(J*c>ZfGxSFBdEnEIeI&x`=tkibBD{h&TEYhausRf-mYSB*P}Wc$(jL;LGodpvwKBDm+AX#Fo&7ueWgx{a z#V*Sx%O=4h!2wP>)VhQF1F*zd^b|njk}v!I&}hZkSh@-_pMf)DG0Xrgu$` ztWVZ=0DN=-EgvoS?e5$6DDP3esBlriRo+!T4oFf+QUEDN#ZjeEC3O{b6?s*8)vv%g zfLn!IC08+5@vQt=c@tR^*{f1lr8vM-5W*;g==kaQ!QzigiCu}kl(m$#3iyldFE-4< zMjbH?Ac8%Dy@aiV4fUi@Lk!1FmIzCPptYd2TZ^|A@j94Kn@=ZBB~Il`=S&OC3e1K9 zu0YL9%?uwvGfgucIvF~7Z~Wf)h0zP6%)`vXsJ{c@Gd*~p`O@&Ep@Gyu!n_R3C48Oo zIt63F?0(z*&ij$~eV_-K4>B>(|3LbIbkh{ml=JcDqFjHv{v7x*@B@Q*`6BrupT#_j zag2A2N1gkFNe7dRl8uttQ`u8(Gi@{P72GSBshp`i(sZN=bydhcjdWZM&`8xtjg60u2kW&+&u^aJ`osIfH^Vl=#y^gK%>0r0<4Ww6 zSV-YW`=0wfm$8_!c%y8ijFZGkvaPYL+0(eE@!yVrJ1}SD``Gs}&S}o+zX0^)kQ|X5 zaUO6U_}%@x+o|2D{ja9Kn)GY*YmSs1DFgeK0`WZYyb$1F;lo0ua;0+ArMcXCx%GF? z?;h(x>%j*j4@N-pY|B3fQnM$n&s?7|S~gmSkY4Is)?C)T0(%9f#iqqXr9`D7B_btW z2)_`X04pG? zgFxcW#GRIgmWF$^_G+O{N3K+^)LY@V!Vdfn{Ea+~JSn^>yz+wbf_x%;B5%arh%tlL zfrqGvXrW-CU^PcI$8MV4G#+yvbNdGN4P0uu)RI(_RO3c+BmJ)WU1i*0+%VZO*+Cj4 z4TesIPQmcqLh(}Z5{{!9&KSAcf-X1Vj7Un=dOnsOdn--gvoSB@N z3ooT2r6Rs^zH)&Yfts48nx=Cd=Q?(G@9tjcTIj<0j@vD_TTq_{^9nG}@?G7#y6?^3 zn>o8UyIclb1~7J!Wt?SvVQgW{dc=CffNVg{>dERk33Ka8txByJ18@}(YZYt7ID{v? zPkK#;O@@C@|DJxl@_40#&_VE{^P|h4&!9&=-um_W^@h2IxkqD<#vm1z+|%3BE8i#I z7e|gGqX$y|bpQ01#V?DW);_I~DP#&f^3kA%ycmNR1IUZfVdA(FwGuV<4da0qv@dAA zw|Q^V;MU+qP2(`xFxgO*P!*72P^Z_R-_nAtSE*OornpVfL)JrfQ*u+%OWaHRvFKw_ zbI5hUaW0Tx66cfRllmb0K~`T$U&%?$NsXXM&_tgWAzdNeWzA*HHMKRhb)|KsH*#;} z0;B_^QTyIh##9Evh2&5VSxQ+-c^~jb=?zYKDmf`SDSngtCO0HKB#pkV#X`kGPkEm5 z>|xu(mc^LG$V$&j57W7fV7<)l!SBHzCmtsbDc17iO5;j*li4>kFI#C2u6$Smd z{ki|-{F4JVg<0e@a@w=hXQ@Ac9ceq#K%P8vEq5)qqqw8^9qAn@t2V3l0l-zmRijJN zB@s)AC7*LY=R%lC24^y7vUIF;EaqM^Ml(h~hd~W z{`UUrzUscX?zryz9rru1OfS|h)?)tg#j1-{+W|lGOl8AZ=8*BRHD zJ%IR>_*C+6@^C_bLO*{Ge-CdvZ~H;;g!$g|z3EQForWuoR~p0X!|Q#ke5)|`@^3(; zM5P4BF1(k#muBf^=@K>)Hg;|9+Jr}CYLiWqO=e()utK;&xk0f7bP2kI+0EI_-<02! zNx~$di_%3gA((8%NzPJcDMtuL2xe4fRQRlP7)Sw>fX9F~l{Qs4A)FuttWs7fC}w&U zumt|4{7cyd+yfj5j)WV4GsT%A3P87oFish#OaKXl1j0T5|2{=HMNkHCTXqCHLL;S- zQUQ1pJPGBLa*6|hpA7(_1X02}poh|fp;?q60QVcFs3`^jgu`#*{;*N8QGwkQVHCJP zb%6@w7!-gON(<#WFb!}KxCr(XdrCSGL5LvG0;&{M80}?6`yvdPr5F>82_U^n*+tkz z=mRj181*9YUixnH-KGV_f`Xsz0i*%wE)rf-UQ=X%lYk+?kibsGPK6%17>ITZAixXK z1-8zY1VLi!96TjF-8%PpzQO*Sa2mk#g?h(H0KOp9hk(y3@qiXV>;KNb!CYK3;6?Bv z7y<4S_pNh+>k9z*UIyUxMLpj;Kmza-peN81?gP(&9l!_52T(UTLU{gu zKguh@E5dEyCFLchYqM*UnnF#%Yu^Om`ET58+{E{Gs&=XjV2QGXA$MELz_1JznJFc)WOygMc$Y3}8jD zBD?`IC>fNs&9%)FloOP*06m}y;J%sye-r*D1OQhzuWlv+V}vmR9TgqbRmxQgSRZea zfi3?Em?y<+hw)~3p7B~g1hA~PQd%j`0F3p+W5PIFkY1o1B^-qk+e#n<)WBuRWy(4r zMUWzh0a&&%u6c5Eaua<}8VQYr4*(zV5ikIzH>Wo>C>j*>lf~m<2C!a50x7^0FazK< z!g-`Z05w2x|8Z^?|Hk$K_wN@#L!cqx`85P20IU~yt+6aY3Oz*+{5P8^&GDIBO@Z(icjL+riIqn`r>U~cf6MPyWYSK z06)XLSzQ2^!#bT!$%ZI{uM|!K=T=?9dJI!r1T4F#lkph11>iDxPEq$C{i=%qTo>Cz z{0@%=+brDAIRM);yyo~Fkw7Gz0PuWc9m8dofq#Gy0I!7y!2?>{aDpsQNGXI;)4Ek= z7a-07+gCg$tiR?2bHWUOZ6uz5tfxA_0l*g62H-WpcE%aNw#EU#|K9|#++o{@?IbRT z%j5ud;BSEKK9&=hjv@2|crU>Eird6>aR0H4;l5&>{0cy5&sN#OI{qet^$4#44jACQ0Lz0LfWL{?8?P(wV;&`M>za}%q^&j!HB)g}UI5$5U;yh4 zw)c3i!Sj#h7=IhDJAQ|HN67$QYiy_T0jxucV48uyi7za_*iMB3JOm!NTRIZ@DgB@v z8csx}0B+acUO-skc9Vwu1fUJtxhxR1CEyiZ`g!@7+3 zD!i9rJA?N}jLpJ!3CkL`;dnfFO|V?yJy#znp_FX3Wms?VZ@fP<5E!&pY8HTH8_zSAZ7kz>jj(ONZD5;@f8({q`w5l>>=WR;5*{D+ zBk|sb-!%ZZO+04&U0hcU!22Bb9kCt6eZuweZ|pB(xyNI{{sJC5-e<6n_X@y!%|QVB zLHHf^v9Lbjxx@Nw2H?5G{l#*NZQxGe7=Yy!>+hfT5q}?l2agwz70VgkBk_1}o&5l| zk9e$D=COQWJA`c^wrltsSWd89;j*}GJP!OEj}hRUrhn*yJA_!do=c+aak}?P2-D^M=QZ=Mb+AE{}B!uQML6AVF}ej{j*da9!-*;PI>gc+T*+v2Omk zrg*J!8(4R-&BE8r8dsz0c+~fTT!DVoN@p~+9cs;SK;ySn;EW20+@N--Sm&g6Y?IL(@ z!q0F&@q2v7?cs0W=XiYh!r#T?$8FhTKJGLAA7A(x{{IiS9o*;t zd*uJ`zkjxm>)>zW`=4*|@BjJw-{1dP7eD`>FI)$|`?H-t?|-)S=ez&C{-5vvZ0pbe o@g0}_v;6=5|NmV6e=hUqbA11w+xqkO|6KOZXaE2E|Mv|1ABMoAfdBvi literal 0 HcmV?d00001 diff --git a/apps/health_campaign_field_worker_app/ios/Podfile.lock b/apps/health_campaign_field_worker_app/ios/Podfile.lock index 6fc19ede0..81ae2f287 100644 --- a/apps/health_campaign_field_worker_app/ios/Podfile.lock +++ b/apps/health_campaign_field_worker_app/ios/Podfile.lock @@ -1,4 +1,6 @@ PODS: + - audioplayers_darwin (0.0.1): + - Flutter - battery_plus (1.0.0): - Flutter - connectivity_plus (0.0.1): @@ -74,6 +76,7 @@ PODS: - Flutter - location (0.0.1): - Flutter + - MTBBarcodeScanner (5.0.11) - nanopb (2.30909.0): - nanopb/decode (= 2.30909.0) - nanopb/encode (= 2.30909.0) @@ -87,6 +90,9 @@ PODS: - PromisesObjC (2.2.0) - PromisesSwift (2.2.0): - PromisesObjC (= 2.2.0) + - qr_code_scanner (0.2.0): + - Flutter + - MTBBarcodeScanner - ReachabilitySwift (5.0.0) - shared_preferences_foundation (0.0.1): - Flutter @@ -117,6 +123,7 @@ PODS: - Flutter DEPENDENCIES: + - audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`) - battery_plus (from `.symlinks/plugins/battery_plus/ios`) - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) @@ -132,6 +139,7 @@ DEPENDENCIES: - location (from `.symlinks/plugins/location/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - qr_code_scanner (from `.symlinks/plugins/qr_code_scanner/ios`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - speech_to_text (from `.symlinks/plugins/speech_to_text/ios`) - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`) @@ -149,6 +157,7 @@ SPEC REPOS: - FirebaseSessions - GoogleDataTransport - GoogleUtilities + - MTBBarcodeScanner - nanopb - PromisesObjC - PromisesSwift @@ -158,6 +167,8 @@ SPEC REPOS: - Try EXTERNAL SOURCES: + audioplayers_darwin: + :path: ".symlinks/plugins/audioplayers_darwin/ios" battery_plus: :path: ".symlinks/plugins/battery_plus/ios" connectivity_plus: @@ -188,6 +199,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/package_info_plus/ios" path_provider_foundation: :path: ".symlinks/plugins/path_provider_foundation/darwin" + qr_code_scanner: + :path: ".symlinks/plugins/qr_code_scanner/ios" shared_preferences_foundation: :path: ".symlinks/plugins/shared_preferences_foundation/darwin" speech_to_text: @@ -200,6 +213,7 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/workmanager/ios" SPEC CHECKSUMS: + audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40 battery_plus: 9bff772a7e5e4d5381ca3ca92a97373a3d8b2738 connectivity_plus: 07c49e96d7fc92bc9920617b83238c4d178b446a device_info_plus: 7545d84d8d1b896cb16a4ff98c19f07ec4b298ea @@ -222,11 +236,13 @@ SPEC CHECKSUMS: GoogleUtilities: 9aa0ad5a7bc171f8bae016300bfcfa3fb8425749 isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073 location: 3a2eed4dd2fab25e7b7baf2a9efefe82b512d740 + MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431 package_info_plus: fd030dabf36271f146f1f3beacd48f564b0f17f7 path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852 PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef PromisesSwift: cf9eb58666a43bbe007302226e510b16c1e10959 + qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472 speech_to_text: b43a7d99aef037bd758ed8e45d79bbac035d2dfe diff --git a/apps/health_campaign_field_worker_app/ios/Runner/Info.plist b/apps/health_campaign_field_worker_app/ios/Runner/Info.plist index 780254aa6..f67b82e69 100644 --- a/apps/health_campaign_field_worker_app/ios/Runner/Info.plist +++ b/apps/health_campaign_field_worker_app/ios/Runner/Info.plist @@ -13,6 +13,10 @@ CADisableMinimumFrameDurationOnPhone + io.flutter.embedded_views_preview + +NSCameraUsageDescription +This app needs camera access to scan QR codes CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index ec6a14f94..c16f13a63 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -12,6 +12,7 @@ import 'blocs/boundary/boundary.dart'; import 'blocs/localization/app_localization.dart'; import 'blocs/localization/localization.dart'; import 'blocs/project/project.dart'; +import 'blocs/scanner/scanner.dart'; import 'blocs/user/user.dart'; import 'data/data_repository.dart'; import 'data/local_store/sql_store/sql_store.dart'; @@ -94,6 +95,15 @@ class MainApplicationState extends State ), ), ), + BlocProvider( + create: (ctx) => ScannerBloc( + const ScannerState(), + projectBeneficiaryRepository: ctx + .read() + .repository(ctx), + ), + ), BlocProvider( create: (ctx) => BoundaryBloc( const BoundaryState(), diff --git a/apps/health_campaign_field_worker_app/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/apps/health_campaign_field_worker_app/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 78fb6171b..5245c10ca 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -178,6 +178,7 @@ class BeneficiaryRegistrationBloc await projectBeneficiaryRepository.create( ProjectBeneficiaryModel( + tag: event.tag, rowVersion: 1, tenantId: envConfig.variables.tenantId, clientReferenceId: IdGen.i.identifier, @@ -263,6 +264,19 @@ class BeneficiaryRegistrationBloc ), ), ); + final projectBeneficiary = await projectBeneficiaryRepository.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: [event.household.clientReferenceId], + ), + ); + + if (projectBeneficiary.isNotEmpty) { + if (projectBeneficiary.first.tag != event.tag) { + await projectBeneficiaryRepository + .update(projectBeneficiary.first.copyWith(tag: event.tag)); + } + } + for (var element in value.individualModel) { await individualRepository.update( element.copyWith( @@ -310,7 +324,19 @@ class BeneficiaryRegistrationBloc ), ], ); + + final projectBeneficiary = await projectBeneficiaryRepository.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: [event.model.clientReferenceId], + ), + ); await individualRepository.update(individual); + if (projectBeneficiary.isNotEmpty) { + if (projectBeneficiary.first.tag != event.tag) { + await projectBeneficiaryRepository + .update(projectBeneficiary.first.copyWith(tag: event.tag)); + } + } } catch (error) { rethrow; } finally { @@ -351,6 +377,7 @@ class BeneficiaryRegistrationBloc if (event.beneficiaryType == BeneficiaryType.individual) { await projectBeneficiaryRepository.create( ProjectBeneficiaryModel( + tag: event.tag, rowVersion: 1, tenantId: envConfig.variables.tenantId, clientReferenceId: IdGen.i.identifier, @@ -429,16 +456,19 @@ class BeneficiaryRegistrationEvent with _$BeneficiaryRegistrationEvent { required AddressModel addressModel, required String userUuid, required String projectId, + String? tag, required BeneficiaryType beneficiaryType, }) = BeneficiaryRegistrationAddMemberEvent; const factory BeneficiaryRegistrationEvent.updateHouseholdDetails({ required HouseholdModel household, AddressModel? addressModel, + String? tag, }) = BeneficiaryRegistrationUpdateHouseholdDetailsEvent; const factory BeneficiaryRegistrationEvent.updateIndividualDetails({ required IndividualModel model, + String? tag, required AddressModel addressModel, }) = BeneficiaryRegistrationUpdateIndividualDetailsEvent; @@ -446,7 +476,12 @@ class BeneficiaryRegistrationEvent with _$BeneficiaryRegistrationEvent { required String userUuid, required String projectId, required BoundaryModel boundary, + String? tag, }) = BeneficiaryRegistrationCreateEvent; + + const factory BeneficiaryRegistrationEvent.validate({ + required String tag, + }) = BeneficiaryRegistrationTagEvent; } @freezed @@ -466,6 +501,7 @@ class BeneficiaryRegistrationState with _$BeneficiaryRegistrationState { required HouseholdModel householdModel, required List individualModel, required DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, @Default(false) bool loading, }) = BeneficiaryRegistrationEditHouseholdState; @@ -473,6 +509,7 @@ class BeneficiaryRegistrationState with _$BeneficiaryRegistrationState { required HouseholdModel householdModel, required IndividualModel individualModel, required AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, @Default(false) bool loading, }) = BeneficiaryRegistrationEditIndividualState; diff --git a/apps/health_campaign_field_worker_app/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart b/apps/health_campaign_field_worker_app/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart index 93cde3ec8..ba06f29c3 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart @@ -30,16 +30,19 @@ mixin _$BeneficiaryRegistrationEvent { AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType) addMember, required TResult Function( - HouseholdModel household, AddressModel? addressModel) + HouseholdModel household, AddressModel? addressModel, String? tag) updateHouseholdDetails, - required TResult Function(IndividualModel model, AddressModel addressModel) - updateIndividualDetails, required TResult Function( - String userUuid, String projectId, BoundaryModel boundary) + IndividualModel model, String? tag, AddressModel addressModel) + updateIndividualDetails, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag) create, + required TResult Function(String tag) validate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -55,15 +58,19 @@ mixin _$BeneficiaryRegistrationEvent { AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult? Function(HouseholdModel household, AddressModel? addressModel)? + TResult? Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult? Function(IndividualModel model, AddressModel addressModel)? - updateIndividualDetails, TResult? Function( - String userUuid, String projectId, BoundaryModel boundary)? + IndividualModel model, String? tag, AddressModel addressModel)? + updateIndividualDetails, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult? Function(String tag)? validate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -79,14 +86,19 @@ mixin _$BeneficiaryRegistrationEvent { AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult Function(HouseholdModel household, AddressModel? addressModel)? + TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult Function(IndividualModel model, AddressModel addressModel)? + TResult Function( + IndividualModel model, String? tag, AddressModel addressModel)? updateIndividualDetails, - TResult Function(String userUuid, String projectId, BoundaryModel boundary)? + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult Function(String tag)? validate, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -109,6 +121,7 @@ mixin _$BeneficiaryRegistrationEvent { BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -126,6 +139,7 @@ mixin _$BeneficiaryRegistrationEvent { BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -142,6 +156,7 @@ mixin _$BeneficiaryRegistrationEvent { TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -250,16 +265,19 @@ class _$BeneficiaryRegistrationSaveAddressEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType) addMember, required TResult Function( - HouseholdModel household, AddressModel? addressModel) + HouseholdModel household, AddressModel? addressModel, String? tag) updateHouseholdDetails, - required TResult Function(IndividualModel model, AddressModel addressModel) - updateIndividualDetails, required TResult Function( - String userUuid, String projectId, BoundaryModel boundary) + IndividualModel model, String? tag, AddressModel addressModel) + updateIndividualDetails, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag) create, + required TResult Function(String tag) validate, }) { return saveAddress(model); } @@ -278,15 +296,19 @@ class _$BeneficiaryRegistrationSaveAddressEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult? Function(HouseholdModel household, AddressModel? addressModel)? + TResult? Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult? Function(IndividualModel model, AddressModel addressModel)? - updateIndividualDetails, TResult? Function( - String userUuid, String projectId, BoundaryModel boundary)? + IndividualModel model, String? tag, AddressModel addressModel)? + updateIndividualDetails, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult? Function(String tag)? validate, }) { return saveAddress?.call(model); } @@ -305,14 +327,19 @@ class _$BeneficiaryRegistrationSaveAddressEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult Function(HouseholdModel household, AddressModel? addressModel)? + TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult Function(IndividualModel model, AddressModel addressModel)? + TResult Function( + IndividualModel model, String? tag, AddressModel addressModel)? updateIndividualDetails, - TResult Function(String userUuid, String projectId, BoundaryModel boundary)? + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult Function(String tag)? validate, required TResult orElse(), }) { if (saveAddress != null) { @@ -341,6 +368,7 @@ class _$BeneficiaryRegistrationSaveAddressEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return saveAddress(this); } @@ -361,6 +389,7 @@ class _$BeneficiaryRegistrationSaveAddressEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return saveAddress?.call(this); } @@ -380,6 +409,7 @@ class _$BeneficiaryRegistrationSaveAddressEvent TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { if (saveAddress != null) { @@ -499,16 +529,19 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType) addMember, required TResult Function( - HouseholdModel household, AddressModel? addressModel) + HouseholdModel household, AddressModel? addressModel, String? tag) updateHouseholdDetails, - required TResult Function(IndividualModel model, AddressModel addressModel) - updateIndividualDetails, required TResult Function( - String userUuid, String projectId, BoundaryModel boundary) + IndividualModel model, String? tag, AddressModel addressModel) + updateIndividualDetails, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag) create, + required TResult Function(String tag) validate, }) { return saveHouseholdDetails(household, registrationDate); } @@ -527,15 +560,19 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult? Function(HouseholdModel household, AddressModel? addressModel)? + TResult? Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult? Function(IndividualModel model, AddressModel addressModel)? - updateIndividualDetails, TResult? Function( - String userUuid, String projectId, BoundaryModel boundary)? + IndividualModel model, String? tag, AddressModel addressModel)? + updateIndividualDetails, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult? Function(String tag)? validate, }) { return saveHouseholdDetails?.call(household, registrationDate); } @@ -554,14 +591,19 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult Function(HouseholdModel household, AddressModel? addressModel)? + TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult Function(IndividualModel model, AddressModel addressModel)? + TResult Function( + IndividualModel model, String? tag, AddressModel addressModel)? updateIndividualDetails, - TResult Function(String userUuid, String projectId, BoundaryModel boundary)? + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult Function(String tag)? validate, required TResult orElse(), }) { if (saveHouseholdDetails != null) { @@ -590,6 +632,7 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return saveHouseholdDetails(this); } @@ -610,6 +653,7 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return saveHouseholdDetails?.call(this); } @@ -629,6 +673,7 @@ class _$BeneficiaryRegistrationSaveHouseholdDetailsEvent TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { if (saveHouseholdDetails != null) { @@ -751,16 +796,19 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType) addMember, required TResult Function( - HouseholdModel household, AddressModel? addressModel) + HouseholdModel household, AddressModel? addressModel, String? tag) updateHouseholdDetails, - required TResult Function(IndividualModel model, AddressModel addressModel) - updateIndividualDetails, required TResult Function( - String userUuid, String projectId, BoundaryModel boundary) + IndividualModel model, String? tag, AddressModel addressModel) + updateIndividualDetails, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag) create, + required TResult Function(String tag) validate, }) { return saveIndividualDetails(model, isHeadOfHousehold); } @@ -779,15 +827,19 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult? Function(HouseholdModel household, AddressModel? addressModel)? + TResult? Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult? Function(IndividualModel model, AddressModel addressModel)? - updateIndividualDetails, TResult? Function( - String userUuid, String projectId, BoundaryModel boundary)? + IndividualModel model, String? tag, AddressModel addressModel)? + updateIndividualDetails, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult? Function(String tag)? validate, }) { return saveIndividualDetails?.call(model, isHeadOfHousehold); } @@ -806,14 +858,19 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult Function(HouseholdModel household, AddressModel? addressModel)? + TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult Function(IndividualModel model, AddressModel addressModel)? + TResult Function( + IndividualModel model, String? tag, AddressModel addressModel)? updateIndividualDetails, - TResult Function(String userUuid, String projectId, BoundaryModel boundary)? + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult Function(String tag)? validate, required TResult orElse(), }) { if (saveIndividualDetails != null) { @@ -842,6 +899,7 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return saveIndividualDetails(this); } @@ -862,6 +920,7 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return saveIndividualDetails?.call(this); } @@ -881,6 +940,7 @@ class _$BeneficiaryRegistrationSaveIndividualDetailsEvent TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { if (saveIndividualDetails != null) { @@ -918,6 +978,7 @@ abstract class _$$BeneficiaryRegistrationAddMemberEventCopyWith<$Res> { AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType}); } @@ -939,6 +1000,7 @@ class __$$BeneficiaryRegistrationAddMemberEventCopyWithImpl<$Res> Object? addressModel = null, Object? userUuid = null, Object? projectId = null, + Object? tag = freezed, Object? beneficiaryType = null, }) { return _then(_$BeneficiaryRegistrationAddMemberEvent( @@ -962,6 +1024,10 @@ class __$$BeneficiaryRegistrationAddMemberEventCopyWithImpl<$Res> ? _value.projectId : projectId // ignore: cast_nullable_to_non_nullable as String, + tag: freezed == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String?, beneficiaryType: null == beneficiaryType ? _value.beneficiaryType : beneficiaryType // ignore: cast_nullable_to_non_nullable @@ -980,6 +1046,7 @@ class _$BeneficiaryRegistrationAddMemberEvent required this.addressModel, required this.userUuid, required this.projectId, + this.tag, required this.beneficiaryType}); @override @@ -993,11 +1060,13 @@ class _$BeneficiaryRegistrationAddMemberEvent @override final String projectId; @override + final String? tag; + @override final BeneficiaryType beneficiaryType; @override String toString() { - return 'BeneficiaryRegistrationEvent.addMember(householdModel: $householdModel, individualModel: $individualModel, addressModel: $addressModel, userUuid: $userUuid, projectId: $projectId, beneficiaryType: $beneficiaryType)'; + return 'BeneficiaryRegistrationEvent.addMember(householdModel: $householdModel, individualModel: $individualModel, addressModel: $addressModel, userUuid: $userUuid, projectId: $projectId, tag: $tag, beneficiaryType: $beneficiaryType)'; } @override @@ -1015,13 +1084,14 @@ class _$BeneficiaryRegistrationAddMemberEvent other.userUuid == userUuid) && (identical(other.projectId, projectId) || other.projectId == projectId) && + (identical(other.tag, tag) || other.tag == tag) && (identical(other.beneficiaryType, beneficiaryType) || other.beneficiaryType == beneficiaryType)); } @override int get hashCode => Object.hash(runtimeType, householdModel, individualModel, - addressModel, userUuid, projectId, beneficiaryType); + addressModel, userUuid, projectId, tag, beneficiaryType); @JsonKey(ignore: true) @override @@ -1046,19 +1116,22 @@ class _$BeneficiaryRegistrationAddMemberEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType) addMember, required TResult Function( - HouseholdModel household, AddressModel? addressModel) + HouseholdModel household, AddressModel? addressModel, String? tag) updateHouseholdDetails, - required TResult Function(IndividualModel model, AddressModel addressModel) - updateIndividualDetails, required TResult Function( - String userUuid, String projectId, BoundaryModel boundary) + IndividualModel model, String? tag, AddressModel addressModel) + updateIndividualDetails, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag) create, + required TResult Function(String tag) validate, }) { return addMember(householdModel, individualModel, addressModel, userUuid, - projectId, beneficiaryType); + projectId, tag, beneficiaryType); } @override @@ -1075,18 +1148,22 @@ class _$BeneficiaryRegistrationAddMemberEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult? Function(HouseholdModel household, AddressModel? addressModel)? + TResult? Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult? Function(IndividualModel model, AddressModel addressModel)? - updateIndividualDetails, TResult? Function( - String userUuid, String projectId, BoundaryModel boundary)? + IndividualModel model, String? tag, AddressModel addressModel)? + updateIndividualDetails, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult? Function(String tag)? validate, }) { return addMember?.call(householdModel, individualModel, addressModel, - userUuid, projectId, beneficiaryType); + userUuid, projectId, tag, beneficiaryType); } @override @@ -1103,19 +1180,24 @@ class _$BeneficiaryRegistrationAddMemberEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult Function(HouseholdModel household, AddressModel? addressModel)? + TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult Function(IndividualModel model, AddressModel addressModel)? + TResult Function( + IndividualModel model, String? tag, AddressModel addressModel)? updateIndividualDetails, - TResult Function(String userUuid, String projectId, BoundaryModel boundary)? + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult Function(String tag)? validate, required TResult orElse(), }) { if (addMember != null) { return addMember(householdModel, individualModel, addressModel, userUuid, - projectId, beneficiaryType); + projectId, tag, beneficiaryType); } return orElse(); } @@ -1140,6 +1222,7 @@ class _$BeneficiaryRegistrationAddMemberEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return addMember(this); } @@ -1160,6 +1243,7 @@ class _$BeneficiaryRegistrationAddMemberEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return addMember?.call(this); } @@ -1179,6 +1263,7 @@ class _$BeneficiaryRegistrationAddMemberEvent TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { if (addMember != null) { @@ -1196,6 +1281,7 @@ abstract class BeneficiaryRegistrationAddMemberEvent required final AddressModel addressModel, required final String userUuid, required final String projectId, + final String? tag, required final BeneficiaryType beneficiaryType}) = _$BeneficiaryRegistrationAddMemberEvent; @@ -1204,6 +1290,7 @@ abstract class BeneficiaryRegistrationAddMemberEvent AddressModel get addressModel; String get userUuid; String get projectId; + String? get tag; BeneficiaryType get beneficiaryType; @JsonKey(ignore: true) _$$BeneficiaryRegistrationAddMemberEventCopyWith< @@ -1220,7 +1307,8 @@ abstract class _$$BeneficiaryRegistrationUpdateHouseholdDetailsEventCopyWith< then) = __$$BeneficiaryRegistrationUpdateHouseholdDetailsEventCopyWithImpl<$Res>; @useResult - $Res call({HouseholdModel household, AddressModel? addressModel}); + $Res call( + {HouseholdModel household, AddressModel? addressModel, String? tag}); } /// @nodoc @@ -1239,6 +1327,7 @@ class __$$BeneficiaryRegistrationUpdateHouseholdDetailsEventCopyWithImpl<$Res> $Res call({ Object? household = null, Object? addressModel = freezed, + Object? tag = freezed, }) { return _then(_$BeneficiaryRegistrationUpdateHouseholdDetailsEvent( household: null == household @@ -1249,6 +1338,10 @@ class __$$BeneficiaryRegistrationUpdateHouseholdDetailsEventCopyWithImpl<$Res> ? _value.addressModel : addressModel // ignore: cast_nullable_to_non_nullable as AddressModel?, + tag: freezed == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String?, )); } } @@ -1258,16 +1351,18 @@ class __$$BeneficiaryRegistrationUpdateHouseholdDetailsEventCopyWithImpl<$Res> class _$BeneficiaryRegistrationUpdateHouseholdDetailsEvent implements BeneficiaryRegistrationUpdateHouseholdDetailsEvent { const _$BeneficiaryRegistrationUpdateHouseholdDetailsEvent( - {required this.household, this.addressModel}); + {required this.household, this.addressModel, this.tag}); @override final HouseholdModel household; @override final AddressModel? addressModel; + @override + final String? tag; @override String toString() { - return 'BeneficiaryRegistrationEvent.updateHouseholdDetails(household: $household, addressModel: $addressModel)'; + return 'BeneficiaryRegistrationEvent.updateHouseholdDetails(household: $household, addressModel: $addressModel, tag: $tag)'; } @override @@ -1278,11 +1373,12 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEvent (identical(other.household, household) || other.household == household) && (identical(other.addressModel, addressModel) || - other.addressModel == addressModel)); + other.addressModel == addressModel) && + (identical(other.tag, tag) || other.tag == tag)); } @override - int get hashCode => Object.hash(runtimeType, household, addressModel); + int get hashCode => Object.hash(runtimeType, household, addressModel, tag); @JsonKey(ignore: true) @override @@ -1309,18 +1405,21 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType) addMember, required TResult Function( - HouseholdModel household, AddressModel? addressModel) + HouseholdModel household, AddressModel? addressModel, String? tag) updateHouseholdDetails, - required TResult Function(IndividualModel model, AddressModel addressModel) - updateIndividualDetails, required TResult Function( - String userUuid, String projectId, BoundaryModel boundary) + IndividualModel model, String? tag, AddressModel addressModel) + updateIndividualDetails, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag) create, + required TResult Function(String tag) validate, }) { - return updateHouseholdDetails(household, addressModel); + return updateHouseholdDetails(household, addressModel, tag); } @override @@ -1337,17 +1436,21 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult? Function(HouseholdModel household, AddressModel? addressModel)? + TResult? Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult? Function(IndividualModel model, AddressModel addressModel)? - updateIndividualDetails, TResult? Function( - String userUuid, String projectId, BoundaryModel boundary)? + IndividualModel model, String? tag, AddressModel addressModel)? + updateIndividualDetails, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult? Function(String tag)? validate, }) { - return updateHouseholdDetails?.call(household, addressModel); + return updateHouseholdDetails?.call(household, addressModel, tag); } @override @@ -1364,18 +1467,23 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult Function(HouseholdModel household, AddressModel? addressModel)? + TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult Function(IndividualModel model, AddressModel addressModel)? + TResult Function( + IndividualModel model, String? tag, AddressModel addressModel)? updateIndividualDetails, - TResult Function(String userUuid, String projectId, BoundaryModel boundary)? + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult Function(String tag)? validate, required TResult orElse(), }) { if (updateHouseholdDetails != null) { - return updateHouseholdDetails(household, addressModel); + return updateHouseholdDetails(household, addressModel, tag); } return orElse(); } @@ -1400,6 +1508,7 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return updateHouseholdDetails(this); } @@ -1420,6 +1529,7 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return updateHouseholdDetails?.call(this); } @@ -1439,6 +1549,7 @@ class _$BeneficiaryRegistrationUpdateHouseholdDetailsEvent TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { if (updateHouseholdDetails != null) { @@ -1452,11 +1563,13 @@ abstract class BeneficiaryRegistrationUpdateHouseholdDetailsEvent implements BeneficiaryRegistrationEvent { const factory BeneficiaryRegistrationUpdateHouseholdDetailsEvent( {required final HouseholdModel household, - final AddressModel? addressModel}) = + final AddressModel? addressModel, + final String? tag}) = _$BeneficiaryRegistrationUpdateHouseholdDetailsEvent; HouseholdModel get household; AddressModel? get addressModel; + String? get tag; @JsonKey(ignore: true) _$$BeneficiaryRegistrationUpdateHouseholdDetailsEventCopyWith< _$BeneficiaryRegistrationUpdateHouseholdDetailsEvent> @@ -1472,7 +1585,7 @@ abstract class _$$BeneficiaryRegistrationUpdateIndividualDetailsEventCopyWith< then) = __$$BeneficiaryRegistrationUpdateIndividualDetailsEventCopyWithImpl<$Res>; @useResult - $Res call({IndividualModel model, AddressModel addressModel}); + $Res call({IndividualModel model, String? tag, AddressModel addressModel}); } /// @nodoc @@ -1491,6 +1604,7 @@ class __$$BeneficiaryRegistrationUpdateIndividualDetailsEventCopyWithImpl<$Res> @override $Res call({ Object? model = null, + Object? tag = freezed, Object? addressModel = null, }) { return _then(_$BeneficiaryRegistrationUpdateIndividualDetailsEvent( @@ -1498,6 +1612,10 @@ class __$$BeneficiaryRegistrationUpdateIndividualDetailsEventCopyWithImpl<$Res> ? _value.model : model // ignore: cast_nullable_to_non_nullable as IndividualModel, + tag: freezed == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String?, addressModel: null == addressModel ? _value.addressModel : addressModel // ignore: cast_nullable_to_non_nullable @@ -1511,16 +1629,18 @@ class __$$BeneficiaryRegistrationUpdateIndividualDetailsEventCopyWithImpl<$Res> class _$BeneficiaryRegistrationUpdateIndividualDetailsEvent implements BeneficiaryRegistrationUpdateIndividualDetailsEvent { const _$BeneficiaryRegistrationUpdateIndividualDetailsEvent( - {required this.model, required this.addressModel}); + {required this.model, this.tag, required this.addressModel}); @override final IndividualModel model; @override + final String? tag; + @override final AddressModel addressModel; @override String toString() { - return 'BeneficiaryRegistrationEvent.updateIndividualDetails(model: $model, addressModel: $addressModel)'; + return 'BeneficiaryRegistrationEvent.updateIndividualDetails(model: $model, tag: $tag, addressModel: $addressModel)'; } @override @@ -1529,12 +1649,13 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEvent (other.runtimeType == runtimeType && other is _$BeneficiaryRegistrationUpdateIndividualDetailsEvent && (identical(other.model, model) || other.model == model) && + (identical(other.tag, tag) || other.tag == tag) && (identical(other.addressModel, addressModel) || other.addressModel == addressModel)); } @override - int get hashCode => Object.hash(runtimeType, model, addressModel); + int get hashCode => Object.hash(runtimeType, model, tag, addressModel); @JsonKey(ignore: true) @override @@ -1561,18 +1682,21 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType) addMember, required TResult Function( - HouseholdModel household, AddressModel? addressModel) + HouseholdModel household, AddressModel? addressModel, String? tag) updateHouseholdDetails, - required TResult Function(IndividualModel model, AddressModel addressModel) - updateIndividualDetails, required TResult Function( - String userUuid, String projectId, BoundaryModel boundary) + IndividualModel model, String? tag, AddressModel addressModel) + updateIndividualDetails, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag) create, + required TResult Function(String tag) validate, }) { - return updateIndividualDetails(model, addressModel); + return updateIndividualDetails(model, tag, addressModel); } @override @@ -1589,17 +1713,21 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult? Function(HouseholdModel household, AddressModel? addressModel)? + TResult? Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult? Function(IndividualModel model, AddressModel addressModel)? - updateIndividualDetails, TResult? Function( - String userUuid, String projectId, BoundaryModel boundary)? + IndividualModel model, String? tag, AddressModel addressModel)? + updateIndividualDetails, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult? Function(String tag)? validate, }) { - return updateIndividualDetails?.call(model, addressModel); + return updateIndividualDetails?.call(model, tag, addressModel); } @override @@ -1616,18 +1744,23 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult Function(HouseholdModel household, AddressModel? addressModel)? + TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult Function(IndividualModel model, AddressModel addressModel)? + TResult Function( + IndividualModel model, String? tag, AddressModel addressModel)? updateIndividualDetails, - TResult Function(String userUuid, String projectId, BoundaryModel boundary)? + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult Function(String tag)? validate, required TResult orElse(), }) { if (updateIndividualDetails != null) { - return updateIndividualDetails(model, addressModel); + return updateIndividualDetails(model, tag, addressModel); } return orElse(); } @@ -1652,6 +1785,7 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return updateIndividualDetails(this); } @@ -1672,6 +1806,7 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return updateIndividualDetails?.call(this); } @@ -1691,6 +1826,7 @@ class _$BeneficiaryRegistrationUpdateIndividualDetailsEvent TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { if (updateIndividualDetails != null) { @@ -1704,10 +1840,12 @@ abstract class BeneficiaryRegistrationUpdateIndividualDetailsEvent implements BeneficiaryRegistrationEvent { const factory BeneficiaryRegistrationUpdateIndividualDetailsEvent( {required final IndividualModel model, + final String? tag, required final AddressModel addressModel}) = _$BeneficiaryRegistrationUpdateIndividualDetailsEvent; IndividualModel get model; + String? get tag; AddressModel get addressModel; @JsonKey(ignore: true) _$$BeneficiaryRegistrationUpdateIndividualDetailsEventCopyWith< @@ -1722,7 +1860,8 @@ abstract class _$$BeneficiaryRegistrationCreateEventCopyWith<$Res> { $Res Function(_$BeneficiaryRegistrationCreateEvent) then) = __$$BeneficiaryRegistrationCreateEventCopyWithImpl<$Res>; @useResult - $Res call({String userUuid, String projectId, BoundaryModel boundary}); + $Res call( + {String userUuid, String projectId, BoundaryModel boundary, String? tag}); } /// @nodoc @@ -1741,6 +1880,7 @@ class __$$BeneficiaryRegistrationCreateEventCopyWithImpl<$Res> Object? userUuid = null, Object? projectId = null, Object? boundary = null, + Object? tag = freezed, }) { return _then(_$BeneficiaryRegistrationCreateEvent( userUuid: null == userUuid @@ -1755,6 +1895,10 @@ class __$$BeneficiaryRegistrationCreateEventCopyWithImpl<$Res> ? _value.boundary : boundary // ignore: cast_nullable_to_non_nullable as BoundaryModel, + tag: freezed == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String?, )); } } @@ -1766,7 +1910,8 @@ class _$BeneficiaryRegistrationCreateEvent const _$BeneficiaryRegistrationCreateEvent( {required this.userUuid, required this.projectId, - required this.boundary}); + required this.boundary, + this.tag}); @override final String userUuid; @@ -1774,10 +1919,12 @@ class _$BeneficiaryRegistrationCreateEvent final String projectId; @override final BoundaryModel boundary; + @override + final String? tag; @override String toString() { - return 'BeneficiaryRegistrationEvent.create(userUuid: $userUuid, projectId: $projectId, boundary: $boundary)'; + return 'BeneficiaryRegistrationEvent.create(userUuid: $userUuid, projectId: $projectId, boundary: $boundary, tag: $tag)'; } @override @@ -1790,11 +1937,13 @@ class _$BeneficiaryRegistrationCreateEvent (identical(other.projectId, projectId) || other.projectId == projectId) && (identical(other.boundary, boundary) || - other.boundary == boundary)); + other.boundary == boundary) && + (identical(other.tag, tag) || other.tag == tag)); } @override - int get hashCode => Object.hash(runtimeType, userUuid, projectId, boundary); + int get hashCode => + Object.hash(runtimeType, userUuid, projectId, boundary, tag); @JsonKey(ignore: true) @override @@ -1819,18 +1968,21 @@ class _$BeneficiaryRegistrationCreateEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType) addMember, required TResult Function( - HouseholdModel household, AddressModel? addressModel) + HouseholdModel household, AddressModel? addressModel, String? tag) updateHouseholdDetails, - required TResult Function(IndividualModel model, AddressModel addressModel) - updateIndividualDetails, required TResult Function( - String userUuid, String projectId, BoundaryModel boundary) + IndividualModel model, String? tag, AddressModel addressModel) + updateIndividualDetails, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag) create, + required TResult Function(String tag) validate, }) { - return create(userUuid, projectId, boundary); + return create(userUuid, projectId, boundary, tag); } @override @@ -1847,17 +1999,21 @@ class _$BeneficiaryRegistrationCreateEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult? Function(HouseholdModel household, AddressModel? addressModel)? + TResult? Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult? Function(IndividualModel model, AddressModel addressModel)? - updateIndividualDetails, TResult? Function( - String userUuid, String projectId, BoundaryModel boundary)? + IndividualModel model, String? tag, AddressModel addressModel)? + updateIndividualDetails, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult? Function(String tag)? validate, }) { - return create?.call(userUuid, projectId, boundary); + return create?.call(userUuid, projectId, boundary, tag); } @override @@ -1874,18 +2030,23 @@ class _$BeneficiaryRegistrationCreateEvent AddressModel addressModel, String userUuid, String projectId, + String? tag, BeneficiaryType beneficiaryType)? addMember, - TResult Function(HouseholdModel household, AddressModel? addressModel)? + TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? updateHouseholdDetails, - TResult Function(IndividualModel model, AddressModel addressModel)? + TResult Function( + IndividualModel model, String? tag, AddressModel addressModel)? updateIndividualDetails, - TResult Function(String userUuid, String projectId, BoundaryModel boundary)? + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? create, + TResult Function(String tag)? validate, required TResult orElse(), }) { if (create != null) { - return create(userUuid, projectId, boundary); + return create(userUuid, projectId, boundary, tag); } return orElse(); } @@ -1910,6 +2071,7 @@ class _$BeneficiaryRegistrationCreateEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value) updateIndividualDetails, required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationTagEvent value) validate, }) { return create(this); } @@ -1930,6 +2092,7 @@ class _$BeneficiaryRegistrationCreateEvent BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, }) { return create?.call(this); } @@ -1949,6 +2112,7 @@ class _$BeneficiaryRegistrationCreateEvent TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? updateIndividualDetails, TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationTagEvent value)? validate, required TResult orElse(), }) { if (create != null) { @@ -1961,20 +2125,267 @@ class _$BeneficiaryRegistrationCreateEvent abstract class BeneficiaryRegistrationCreateEvent implements BeneficiaryRegistrationEvent { const factory BeneficiaryRegistrationCreateEvent( - {required final String userUuid, - required final String projectId, - required final BoundaryModel boundary}) = - _$BeneficiaryRegistrationCreateEvent; + {required final String userUuid, + required final String projectId, + required final BoundaryModel boundary, + final String? tag}) = _$BeneficiaryRegistrationCreateEvent; String get userUuid; String get projectId; BoundaryModel get boundary; + String? get tag; @JsonKey(ignore: true) _$$BeneficiaryRegistrationCreateEventCopyWith< _$BeneficiaryRegistrationCreateEvent> get copyWith => throw _privateConstructorUsedError; } +/// @nodoc +abstract class _$$BeneficiaryRegistrationTagEventCopyWith<$Res> { + factory _$$BeneficiaryRegistrationTagEventCopyWith( + _$BeneficiaryRegistrationTagEvent value, + $Res Function(_$BeneficiaryRegistrationTagEvent) then) = + __$$BeneficiaryRegistrationTagEventCopyWithImpl<$Res>; + @useResult + $Res call({String tag}); +} + +/// @nodoc +class __$$BeneficiaryRegistrationTagEventCopyWithImpl<$Res> + extends _$BeneficiaryRegistrationEventCopyWithImpl<$Res, + _$BeneficiaryRegistrationTagEvent> + implements _$$BeneficiaryRegistrationTagEventCopyWith<$Res> { + __$$BeneficiaryRegistrationTagEventCopyWithImpl( + _$BeneficiaryRegistrationTagEvent _value, + $Res Function(_$BeneficiaryRegistrationTagEvent) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? tag = null, + }) { + return _then(_$BeneficiaryRegistrationTagEvent( + tag: null == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String, + )); + } +} + +/// @nodoc + +class _$BeneficiaryRegistrationTagEvent + implements BeneficiaryRegistrationTagEvent { + const _$BeneficiaryRegistrationTagEvent({required this.tag}); + + @override + final String tag; + + @override + String toString() { + return 'BeneficiaryRegistrationEvent.validate(tag: $tag)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$BeneficiaryRegistrationTagEvent && + (identical(other.tag, tag) || other.tag == tag)); + } + + @override + int get hashCode => Object.hash(runtimeType, tag); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$BeneficiaryRegistrationTagEventCopyWith<_$BeneficiaryRegistrationTagEvent> + get copyWith => __$$BeneficiaryRegistrationTagEventCopyWithImpl< + _$BeneficiaryRegistrationTagEvent>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function(AddressModel model) saveAddress, + required TResult Function( + HouseholdModel household, DateTime registrationDate) + saveHouseholdDetails, + required TResult Function(IndividualModel model, bool isHeadOfHousehold) + saveIndividualDetails, + required TResult Function( + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + String userUuid, + String projectId, + String? tag, + BeneficiaryType beneficiaryType) + addMember, + required TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag) + updateHouseholdDetails, + required TResult Function( + IndividualModel model, String? tag, AddressModel addressModel) + updateIndividualDetails, + required TResult Function(String userUuid, String projectId, + BoundaryModel boundary, String? tag) + create, + required TResult Function(String tag) validate, + }) { + return validate(tag); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function(AddressModel model)? saveAddress, + TResult? Function(HouseholdModel household, DateTime registrationDate)? + saveHouseholdDetails, + TResult? Function(IndividualModel model, bool isHeadOfHousehold)? + saveIndividualDetails, + TResult? Function( + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + String userUuid, + String projectId, + String? tag, + BeneficiaryType beneficiaryType)? + addMember, + TResult? Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? + updateHouseholdDetails, + TResult? Function( + IndividualModel model, String? tag, AddressModel addressModel)? + updateIndividualDetails, + TResult? Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? + create, + TResult? Function(String tag)? validate, + }) { + return validate?.call(tag); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(AddressModel model)? saveAddress, + TResult Function(HouseholdModel household, DateTime registrationDate)? + saveHouseholdDetails, + TResult Function(IndividualModel model, bool isHeadOfHousehold)? + saveIndividualDetails, + TResult Function( + HouseholdModel householdModel, + IndividualModel individualModel, + AddressModel addressModel, + String userUuid, + String projectId, + String? tag, + BeneficiaryType beneficiaryType)? + addMember, + TResult Function( + HouseholdModel household, AddressModel? addressModel, String? tag)? + updateHouseholdDetails, + TResult Function( + IndividualModel model, String? tag, AddressModel addressModel)? + updateIndividualDetails, + TResult Function(String userUuid, String projectId, BoundaryModel boundary, + String? tag)? + create, + TResult Function(String tag)? validate, + required TResult orElse(), + }) { + if (validate != null) { + return validate(tag); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(BeneficiaryRegistrationSaveAddressEvent value) + saveAddress, + required TResult Function( + BeneficiaryRegistrationSaveHouseholdDetailsEvent value) + saveHouseholdDetails, + required TResult Function( + BeneficiaryRegistrationSaveIndividualDetailsEvent value) + saveIndividualDetails, + required TResult Function(BeneficiaryRegistrationAddMemberEvent value) + addMember, + required TResult Function( + BeneficiaryRegistrationUpdateHouseholdDetailsEvent value) + updateHouseholdDetails, + required TResult Function( + BeneficiaryRegistrationUpdateIndividualDetailsEvent value) + updateIndividualDetails, + required TResult Function(BeneficiaryRegistrationCreateEvent value) create, + required TResult Function(BeneficiaryRegistrationTagEvent value) validate, + }) { + return validate(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(BeneficiaryRegistrationSaveAddressEvent value)? + saveAddress, + TResult? Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? + saveHouseholdDetails, + TResult? Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? + saveIndividualDetails, + TResult? Function(BeneficiaryRegistrationAddMemberEvent value)? addMember, + TResult? Function(BeneficiaryRegistrationUpdateHouseholdDetailsEvent value)? + updateHouseholdDetails, + TResult? Function( + BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? + updateIndividualDetails, + TResult? Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult? Function(BeneficiaryRegistrationTagEvent value)? validate, + }) { + return validate?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(BeneficiaryRegistrationSaveAddressEvent value)? + saveAddress, + TResult Function(BeneficiaryRegistrationSaveHouseholdDetailsEvent value)? + saveHouseholdDetails, + TResult Function(BeneficiaryRegistrationSaveIndividualDetailsEvent value)? + saveIndividualDetails, + TResult Function(BeneficiaryRegistrationAddMemberEvent value)? addMember, + TResult Function(BeneficiaryRegistrationUpdateHouseholdDetailsEvent value)? + updateHouseholdDetails, + TResult Function(BeneficiaryRegistrationUpdateIndividualDetailsEvent value)? + updateIndividualDetails, + TResult Function(BeneficiaryRegistrationCreateEvent value)? create, + TResult Function(BeneficiaryRegistrationTagEvent value)? validate, + required TResult orElse(), + }) { + if (validate != null) { + return validate(this); + } + return orElse(); + } +} + +abstract class BeneficiaryRegistrationTagEvent + implements BeneficiaryRegistrationEvent { + const factory BeneficiaryRegistrationTagEvent({required final String tag}) = + _$BeneficiaryRegistrationTagEvent; + + String get tag; + @JsonKey(ignore: true) + _$$BeneficiaryRegistrationTagEventCopyWith<_$BeneficiaryRegistrationTagEvent> + get copyWith => throw _privateConstructorUsedError; +} + /// @nodoc mixin _$BeneficiaryRegistrationState { @optionalTypeArgs @@ -1993,12 +2404,14 @@ mixin _$BeneficiaryRegistrationState { HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editHousehold, required TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editIndividual, required TResult Function(AddressModel addressModel, @@ -2025,12 +2438,14 @@ mixin _$BeneficiaryRegistrationState { HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult? Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult? Function(AddressModel addressModel, HouseholdModel householdModel, @@ -2056,12 +2471,14 @@ mixin _$BeneficiaryRegistrationState { HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult Function(AddressModel addressModel, HouseholdModel householdModel, @@ -2293,12 +2710,14 @@ class _$BeneficiaryRegistrationCreateState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editHousehold, required TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editIndividual, required TResult Function(AddressModel addressModel, @@ -2329,12 +2748,14 @@ class _$BeneficiaryRegistrationCreateState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult? Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult? Function(AddressModel addressModel, HouseholdModel householdModel, @@ -2364,12 +2785,14 @@ class _$BeneficiaryRegistrationCreateState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult Function(AddressModel addressModel, HouseholdModel householdModel, @@ -2471,6 +2894,7 @@ abstract class _$$BeneficiaryRegistrationEditHouseholdStateCopyWith<$Res> { HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading}); } @@ -2491,6 +2915,7 @@ class __$$BeneficiaryRegistrationEditHouseholdStateCopyWithImpl<$Res> Object? householdModel = null, Object? individualModel = null, Object? registrationDate = null, + Object? projectBeneficiaryModel = freezed, Object? loading = null, }) { return _then(_$BeneficiaryRegistrationEditHouseholdState( @@ -2510,6 +2935,10 @@ class __$$BeneficiaryRegistrationEditHouseholdStateCopyWithImpl<$Res> ? _value.registrationDate : registrationDate // ignore: cast_nullable_to_non_nullable as DateTime, + projectBeneficiaryModel: freezed == projectBeneficiaryModel + ? _value.projectBeneficiaryModel + : projectBeneficiaryModel // ignore: cast_nullable_to_non_nullable + as ProjectBeneficiaryModel?, loading: null == loading ? _value.loading : loading // ignore: cast_nullable_to_non_nullable @@ -2527,6 +2956,7 @@ class _$BeneficiaryRegistrationEditHouseholdState required this.householdModel, required final List individualModel, required this.registrationDate, + this.projectBeneficiaryModel, this.loading = false}) : _individualModel = individualModel; @@ -2544,12 +2974,14 @@ class _$BeneficiaryRegistrationEditHouseholdState @override final DateTime registrationDate; @override + final ProjectBeneficiaryModel? projectBeneficiaryModel; + @override @JsonKey() final bool loading; @override String toString() { - return 'BeneficiaryRegistrationState.editHousehold(addressModel: $addressModel, householdModel: $householdModel, individualModel: $individualModel, registrationDate: $registrationDate, loading: $loading)'; + return 'BeneficiaryRegistrationState.editHousehold(addressModel: $addressModel, householdModel: $householdModel, individualModel: $individualModel, registrationDate: $registrationDate, projectBeneficiaryModel: $projectBeneficiaryModel, loading: $loading)'; } @override @@ -2565,6 +2997,9 @@ class _$BeneficiaryRegistrationEditHouseholdState .equals(other._individualModel, _individualModel) && (identical(other.registrationDate, registrationDate) || other.registrationDate == registrationDate) && + (identical( + other.projectBeneficiaryModel, projectBeneficiaryModel) || + other.projectBeneficiaryModel == projectBeneficiaryModel) && (identical(other.loading, loading) || other.loading == loading)); } @@ -2575,6 +3010,7 @@ class _$BeneficiaryRegistrationEditHouseholdState householdModel, const DeepCollectionEquality().hash(_individualModel), registrationDate, + projectBeneficiaryModel, loading); @JsonKey(ignore: true) @@ -2602,12 +3038,14 @@ class _$BeneficiaryRegistrationEditHouseholdState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editHousehold, required TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editIndividual, required TResult Function(AddressModel addressModel, @@ -2618,7 +3056,7 @@ class _$BeneficiaryRegistrationEditHouseholdState persisted, }) { return editHousehold(addressModel, householdModel, individualModel, - registrationDate, loading); + registrationDate, projectBeneficiaryModel, loading); } @override @@ -2638,12 +3076,14 @@ class _$BeneficiaryRegistrationEditHouseholdState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult? Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult? Function(AddressModel addressModel, HouseholdModel householdModel, @@ -2653,7 +3093,7 @@ class _$BeneficiaryRegistrationEditHouseholdState persisted, }) { return editHousehold?.call(addressModel, householdModel, individualModel, - registrationDate, loading); + registrationDate, projectBeneficiaryModel, loading); } @override @@ -2673,12 +3113,14 @@ class _$BeneficiaryRegistrationEditHouseholdState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult Function(AddressModel addressModel, HouseholdModel householdModel, @@ -2690,7 +3132,7 @@ class _$BeneficiaryRegistrationEditHouseholdState }) { if (editHousehold != null) { return editHousehold(addressModel, householdModel, individualModel, - registrationDate, loading); + registrationDate, projectBeneficiaryModel, loading); } return orElse(); } @@ -2751,12 +3193,14 @@ abstract class BeneficiaryRegistrationEditHouseholdState required final HouseholdModel householdModel, required final List individualModel, required final DateTime registrationDate, + final ProjectBeneficiaryModel? projectBeneficiaryModel, final bool loading}) = _$BeneficiaryRegistrationEditHouseholdState; AddressModel get addressModel; HouseholdModel get householdModel; List get individualModel; DateTime get registrationDate; + ProjectBeneficiaryModel? get projectBeneficiaryModel; bool get loading; @JsonKey(ignore: true) _$$BeneficiaryRegistrationEditHouseholdStateCopyWith< @@ -2775,6 +3219,7 @@ abstract class _$$BeneficiaryRegistrationEditIndividualStateCopyWith<$Res> { {HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading}); } @@ -2794,6 +3239,7 @@ class __$$BeneficiaryRegistrationEditIndividualStateCopyWithImpl<$Res> Object? householdModel = null, Object? individualModel = null, Object? addressModel = null, + Object? projectBeneficiaryModel = freezed, Object? loading = null, }) { return _then(_$BeneficiaryRegistrationEditIndividualState( @@ -2809,6 +3255,10 @@ class __$$BeneficiaryRegistrationEditIndividualStateCopyWithImpl<$Res> ? _value.addressModel : addressModel // ignore: cast_nullable_to_non_nullable as AddressModel, + projectBeneficiaryModel: freezed == projectBeneficiaryModel + ? _value.projectBeneficiaryModel + : projectBeneficiaryModel // ignore: cast_nullable_to_non_nullable + as ProjectBeneficiaryModel?, loading: null == loading ? _value.loading : loading // ignore: cast_nullable_to_non_nullable @@ -2825,6 +3275,7 @@ class _$BeneficiaryRegistrationEditIndividualState {required this.householdModel, required this.individualModel, required this.addressModel, + this.projectBeneficiaryModel, this.loading = false}); @override @@ -2834,12 +3285,14 @@ class _$BeneficiaryRegistrationEditIndividualState @override final AddressModel addressModel; @override + final ProjectBeneficiaryModel? projectBeneficiaryModel; + @override @JsonKey() final bool loading; @override String toString() { - return 'BeneficiaryRegistrationState.editIndividual(householdModel: $householdModel, individualModel: $individualModel, addressModel: $addressModel, loading: $loading)'; + return 'BeneficiaryRegistrationState.editIndividual(householdModel: $householdModel, individualModel: $individualModel, addressModel: $addressModel, projectBeneficiaryModel: $projectBeneficiaryModel, loading: $loading)'; } @override @@ -2853,12 +3306,15 @@ class _$BeneficiaryRegistrationEditIndividualState other.individualModel == individualModel) && (identical(other.addressModel, addressModel) || other.addressModel == addressModel) && + (identical( + other.projectBeneficiaryModel, projectBeneficiaryModel) || + other.projectBeneficiaryModel == projectBeneficiaryModel) && (identical(other.loading, loading) || other.loading == loading)); } @override - int get hashCode => Object.hash( - runtimeType, householdModel, individualModel, addressModel, loading); + int get hashCode => Object.hash(runtimeType, householdModel, individualModel, + addressModel, projectBeneficiaryModel, loading); @JsonKey(ignore: true) @override @@ -2886,12 +3342,14 @@ class _$BeneficiaryRegistrationEditIndividualState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editHousehold, required TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editIndividual, required TResult Function(AddressModel addressModel, @@ -2901,8 +3359,8 @@ class _$BeneficiaryRegistrationEditIndividualState bool navigateToRoot, HouseholdModel householdModel) persisted, }) { - return editIndividual( - householdModel, individualModel, addressModel, loading); + return editIndividual(householdModel, individualModel, addressModel, + projectBeneficiaryModel, loading); } @override @@ -2922,12 +3380,14 @@ class _$BeneficiaryRegistrationEditIndividualState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult? Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult? Function(AddressModel addressModel, HouseholdModel householdModel, @@ -2936,8 +3396,8 @@ class _$BeneficiaryRegistrationEditIndividualState TResult? Function(bool navigateToRoot, HouseholdModel householdModel)? persisted, }) { - return editIndividual?.call( - householdModel, individualModel, addressModel, loading); + return editIndividual?.call(householdModel, individualModel, addressModel, + projectBeneficiaryModel, loading); } @override @@ -2957,12 +3417,14 @@ class _$BeneficiaryRegistrationEditIndividualState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult Function(AddressModel addressModel, HouseholdModel householdModel, @@ -2973,8 +3435,8 @@ class _$BeneficiaryRegistrationEditIndividualState required TResult orElse(), }) { if (editIndividual != null) { - return editIndividual( - householdModel, individualModel, addressModel, loading); + return editIndividual(householdModel, individualModel, addressModel, + projectBeneficiaryModel, loading); } return orElse(); } @@ -3034,11 +3496,13 @@ abstract class BeneficiaryRegistrationEditIndividualState {required final HouseholdModel householdModel, required final IndividualModel individualModel, required final AddressModel addressModel, + final ProjectBeneficiaryModel? projectBeneficiaryModel, final bool loading}) = _$BeneficiaryRegistrationEditIndividualState; HouseholdModel get householdModel; IndividualModel get individualModel; AddressModel get addressModel; + ProjectBeneficiaryModel? get projectBeneficiaryModel; bool get loading; @JsonKey(ignore: true) _$$BeneficiaryRegistrationEditIndividualStateCopyWith< @@ -3154,12 +3618,14 @@ class _$BeneficiaryRegistrationAddMemberState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editHousehold, required TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editIndividual, required TResult Function(AddressModel addressModel, @@ -3189,12 +3655,14 @@ class _$BeneficiaryRegistrationAddMemberState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult? Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult? Function(AddressModel addressModel, HouseholdModel householdModel, @@ -3223,12 +3691,14 @@ class _$BeneficiaryRegistrationAddMemberState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult Function(AddressModel addressModel, HouseholdModel householdModel, @@ -3405,12 +3875,14 @@ class _$BeneficiaryRegistrationPersistedState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editHousehold, required TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading) editIndividual, required TResult Function(AddressModel addressModel, @@ -3440,12 +3912,14 @@ class _$BeneficiaryRegistrationPersistedState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult? Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult? Function(AddressModel addressModel, HouseholdModel householdModel, @@ -3474,12 +3948,14 @@ class _$BeneficiaryRegistrationPersistedState HouseholdModel householdModel, List individualModel, DateTime registrationDate, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editHousehold, TResult Function( HouseholdModel householdModel, IndividualModel individualModel, AddressModel addressModel, + ProjectBeneficiaryModel? projectBeneficiaryModel, bool loading)? editIndividual, TResult Function(AddressModel addressModel, HouseholdModel householdModel, diff --git a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart index 67d851bdc..63c4cb33d 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart @@ -264,10 +264,6 @@ class ProjectBloc extends Bloc { ).toJson(), ); - await mdmsRepository.writeToProjectTypeDB( - projectTypes, - isar, - ); emit(state.copyWith( projectType: projectTypes.projectTypeWrapper?.projectTypes .where((element) => element.id == projects.first.projectTypeId) @@ -299,11 +295,22 @@ class ProjectBloc extends Bloc { projects.removeDuplicates((element) => element.id); final selectedProject = await localSecureStore.selectedProject; + final getSelectedProjectType = await localSecureStore.selectedProjectType; + final currentRunningCycle = getSelectedProjectType?.cycles + ?.where( + (e) => + (e.startDate!) < DateTime.now().millisecondsSinceEpoch && + (e.endDate!) > DateTime.now().millisecondsSinceEpoch, + // Return null when no matching cycle is found + ) + .firstOrNull; emit( ProjectState( loading: false, projects: projects, selectedProject: selectedProject, + projectType: getSelectedProjectType, + selectedCycle: currentRunningCycle, ), ); } @@ -433,18 +440,14 @@ class ProjectBloc extends Bloc { ).toJson(), ); - await mdmsRepository.writeToProjectTypeDB( - projectType, - isar, - ); - - final selectedProject = projectType.projectTypeWrapper?.projectTypes + final selectedProjectType = projectType.projectTypeWrapper?.projectTypes .where( (element) => element.id == event.model.projectTypeId, ) .toList() .firstOrNull; - final currentRunningCycle = selectedProject?.cycles + + final currentRunningCycle = selectedProjectType?.cycles ?.where( (e) => (e.startDate!) < DateTime.now().millisecondsSinceEpoch && @@ -454,15 +457,11 @@ class ProjectBloc extends Bloc { .firstOrNull; final cycles = List.from( - selectedProject?.cycles ?? [], + selectedProjectType?.cycles ?? [], ); cycles.sort((a, b) => a.id.compareTo(b.id)); - final reqProjectType = selectedProject?.copyWith(cycles: cycles); - emit(state.copyWith( - projectType: reqProjectType, - selectedCycle: currentRunningCycle, - )); + final reqProjectType = selectedProjectType?.copyWith(cycles: cycles); final rowversionList = await isar.rowVersionLists .filter() @@ -488,6 +487,7 @@ class ProjectBloc extends Bloc { ); await boundaryLocalRepository.bulkCreate(boundaries); await localSecureStore.setSelectedProject(event.model); + await localSecureStore.setSelectedProjectType(reqProjectType); await localSecureStore.setBoundaryRefetch(false); final List rowVersionList = []; @@ -521,6 +521,7 @@ class ProjectBloc extends Bloc { } await boundaryLocalRepository.bulkCreate(boundaries); await localSecureStore.setSelectedProject(event.model); + await localSecureStore.setSelectedProjectType(reqProjectType); } } catch (_) { emit(state.copyWith( @@ -530,11 +531,22 @@ class ProjectBloc extends Bloc { return; } + final getSelectedProjectType = await localSecureStore.selectedProjectType; + final currentRunningCycle = getSelectedProjectType?.cycles + ?.where( + (e) => + (e.startDate!) < DateTime.now().millisecondsSinceEpoch && + (e.endDate!) > DateTime.now().millisecondsSinceEpoch, + // Return null when no matching cycle is found + ) + .firstOrNull; emit(state.copyWith( selectedProject: event.model, loading: false, syncError: null, + projectType: getSelectedProjectType, + selectedCycle: currentRunningCycle, )); } } diff --git a/apps/health_campaign_field_worker_app/lib/blocs/scanner/scanner.dart b/apps/health_campaign_field_worker_app/lib/blocs/scanner/scanner.dart new file mode 100644 index 000000000..21eea6758 --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/blocs/scanner/scanner.dart @@ -0,0 +1,66 @@ +// part 'auth.freezed.dart' need to be added to auto generate the files for freezed model +import 'dart:async'; + +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:gs1_barcode_parser/gs1_barcode_parser.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import '../../models/entities/project_beneficiary.dart'; +import '../../utils/typedefs.dart'; + +part 'scanner.freezed.dart'; + +typedef ScannerEmitter = Emitter; + +class ScannerBloc extends Bloc { + final ProjectBeneficiaryDataRepository projectBeneficiaryRepository; + + ScannerBloc( + super.initialState, { + required this.projectBeneficiaryRepository, + }) { + on(_handleScanner); + } + FutureOr _handleScanner( + ScannerScanEvent event, + ScannerEmitter emit, + ) async { + try { + if (event.qrcode.isNotEmpty) { + final projectBeneficiary = await projectBeneficiaryRepository + .search(ProjectBeneficiarySearchModel(tag: event.qrcode.first)); + + if (projectBeneficiary.isEmpty) { + emit(state.copyWith(duplicate: false)); + } else { + emit(state.copyWith(duplicate: true)); + } + } else { + emit(state.copyWith(duplicate: false)); + } + + emit(state.copyWith(barcodes: event.barcode, qrcodes: event.qrcode)); + } catch (error) { + rethrow; + } finally { + emit(state.copyWith(loading: false)); + } + } +} + +@freezed +class ScannerEvent with _$ScannerEvent { + const factory ScannerEvent.handleScanner( + List barcode, + List qrcode, + ) = ScannerScanEvent; +} + +@freezed +class ScannerState with _$ScannerState { + const factory ScannerState({ + @Default([]) List barcodes, + @Default([]) List qrcodes, + @Default(false) bool loading, + @Default(false) bool duplicate, + }) = _ScannerState; +} diff --git a/apps/health_campaign_field_worker_app/lib/blocs/scanner/scanner.freezed.dart b/apps/health_campaign_field_worker_app/lib/blocs/scanner/scanner.freezed.dart new file mode 100644 index 000000000..9d4db43ce --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/blocs/scanner/scanner.freezed.dart @@ -0,0 +1,462 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target + +part of 'scanner.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#custom-getters-and-methods'); + +/// @nodoc +mixin _$ScannerEvent { + List get barcode => throw _privateConstructorUsedError; + List get qrcode => throw _privateConstructorUsedError; + @optionalTypeArgs + TResult when({ + required TResult Function(List barcode, List qrcode) + handleScanner, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function(List barcode, List qrcode)? + handleScanner, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(List barcode, List qrcode)? + handleScanner, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult map({ + required TResult Function(ScannerScanEvent value) handleScanner, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(ScannerScanEvent value)? handleScanner, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeMap({ + TResult Function(ScannerScanEvent value)? handleScanner, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $ScannerEventCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $ScannerEventCopyWith<$Res> { + factory $ScannerEventCopyWith( + ScannerEvent value, $Res Function(ScannerEvent) then) = + _$ScannerEventCopyWithImpl<$Res, ScannerEvent>; + @useResult + $Res call({List barcode, List qrcode}); +} + +/// @nodoc +class _$ScannerEventCopyWithImpl<$Res, $Val extends ScannerEvent> + implements $ScannerEventCopyWith<$Res> { + _$ScannerEventCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? barcode = null, + Object? qrcode = null, + }) { + return _then(_value.copyWith( + barcode: null == barcode + ? _value.barcode + : barcode // ignore: cast_nullable_to_non_nullable + as List, + qrcode: null == qrcode + ? _value.qrcode + : qrcode // ignore: cast_nullable_to_non_nullable + as List, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$ScannerScanEventCopyWith<$Res> + implements $ScannerEventCopyWith<$Res> { + factory _$$ScannerScanEventCopyWith( + _$ScannerScanEvent value, $Res Function(_$ScannerScanEvent) then) = + __$$ScannerScanEventCopyWithImpl<$Res>; + @override + @useResult + $Res call({List barcode, List qrcode}); +} + +/// @nodoc +class __$$ScannerScanEventCopyWithImpl<$Res> + extends _$ScannerEventCopyWithImpl<$Res, _$ScannerScanEvent> + implements _$$ScannerScanEventCopyWith<$Res> { + __$$ScannerScanEventCopyWithImpl( + _$ScannerScanEvent _value, $Res Function(_$ScannerScanEvent) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? barcode = null, + Object? qrcode = null, + }) { + return _then(_$ScannerScanEvent( + null == barcode + ? _value._barcode + : barcode // ignore: cast_nullable_to_non_nullable + as List, + null == qrcode + ? _value._qrcode + : qrcode // ignore: cast_nullable_to_non_nullable + as List, + )); + } +} + +/// @nodoc + +class _$ScannerScanEvent implements ScannerScanEvent { + const _$ScannerScanEvent( + final List barcode, final List qrcode) + : _barcode = barcode, + _qrcode = qrcode; + + final List _barcode; + @override + List get barcode { + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_barcode); + } + + final List _qrcode; + @override + List get qrcode { + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_qrcode); + } + + @override + String toString() { + return 'ScannerEvent.handleScanner(barcode: $barcode, qrcode: $qrcode)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$ScannerScanEvent && + const DeepCollectionEquality().equals(other._barcode, _barcode) && + const DeepCollectionEquality().equals(other._qrcode, _qrcode)); + } + + @override + int get hashCode => Object.hash( + runtimeType, + const DeepCollectionEquality().hash(_barcode), + const DeepCollectionEquality().hash(_qrcode)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$ScannerScanEventCopyWith<_$ScannerScanEvent> get copyWith => + __$$ScannerScanEventCopyWithImpl<_$ScannerScanEvent>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function(List barcode, List qrcode) + handleScanner, + }) { + return handleScanner(barcode, qrcode); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function(List barcode, List qrcode)? + handleScanner, + }) { + return handleScanner?.call(barcode, qrcode); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function(List barcode, List qrcode)? + handleScanner, + required TResult orElse(), + }) { + if (handleScanner != null) { + return handleScanner(barcode, qrcode); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(ScannerScanEvent value) handleScanner, + }) { + return handleScanner(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(ScannerScanEvent value)? handleScanner, + }) { + return handleScanner?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(ScannerScanEvent value)? handleScanner, + required TResult orElse(), + }) { + if (handleScanner != null) { + return handleScanner(this); + } + return orElse(); + } +} + +abstract class ScannerScanEvent implements ScannerEvent { + const factory ScannerScanEvent( + final List barcode, final List qrcode) = + _$ScannerScanEvent; + + @override + List get barcode; + @override + List get qrcode; + @override + @JsonKey(ignore: true) + _$$ScannerScanEventCopyWith<_$ScannerScanEvent> get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +mixin _$ScannerState { + List get barcodes => throw _privateConstructorUsedError; + List get qrcodes => throw _privateConstructorUsedError; + bool get loading => throw _privateConstructorUsedError; + bool get duplicate => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $ScannerStateCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $ScannerStateCopyWith<$Res> { + factory $ScannerStateCopyWith( + ScannerState value, $Res Function(ScannerState) then) = + _$ScannerStateCopyWithImpl<$Res, ScannerState>; + @useResult + $Res call( + {List barcodes, + List qrcodes, + bool loading, + bool duplicate}); +} + +/// @nodoc +class _$ScannerStateCopyWithImpl<$Res, $Val extends ScannerState> + implements $ScannerStateCopyWith<$Res> { + _$ScannerStateCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? barcodes = null, + Object? qrcodes = null, + Object? loading = null, + Object? duplicate = null, + }) { + return _then(_value.copyWith( + barcodes: null == barcodes + ? _value.barcodes + : barcodes // ignore: cast_nullable_to_non_nullable + as List, + qrcodes: null == qrcodes + ? _value.qrcodes + : qrcodes // ignore: cast_nullable_to_non_nullable + as List, + loading: null == loading + ? _value.loading + : loading // ignore: cast_nullable_to_non_nullable + as bool, + duplicate: null == duplicate + ? _value.duplicate + : duplicate // ignore: cast_nullable_to_non_nullable + as bool, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$_ScannerStateCopyWith<$Res> + implements $ScannerStateCopyWith<$Res> { + factory _$$_ScannerStateCopyWith( + _$_ScannerState value, $Res Function(_$_ScannerState) then) = + __$$_ScannerStateCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {List barcodes, + List qrcodes, + bool loading, + bool duplicate}); +} + +/// @nodoc +class __$$_ScannerStateCopyWithImpl<$Res> + extends _$ScannerStateCopyWithImpl<$Res, _$_ScannerState> + implements _$$_ScannerStateCopyWith<$Res> { + __$$_ScannerStateCopyWithImpl( + _$_ScannerState _value, $Res Function(_$_ScannerState) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? barcodes = null, + Object? qrcodes = null, + Object? loading = null, + Object? duplicate = null, + }) { + return _then(_$_ScannerState( + barcodes: null == barcodes + ? _value._barcodes + : barcodes // ignore: cast_nullable_to_non_nullable + as List, + qrcodes: null == qrcodes + ? _value._qrcodes + : qrcodes // ignore: cast_nullable_to_non_nullable + as List, + loading: null == loading + ? _value.loading + : loading // ignore: cast_nullable_to_non_nullable + as bool, + duplicate: null == duplicate + ? _value.duplicate + : duplicate // ignore: cast_nullable_to_non_nullable + as bool, + )); + } +} + +/// @nodoc + +class _$_ScannerState implements _ScannerState { + const _$_ScannerState( + {final List barcodes = const [], + final List qrcodes = const [], + this.loading = false, + this.duplicate = false}) + : _barcodes = barcodes, + _qrcodes = qrcodes; + + final List _barcodes; + @override + @JsonKey() + List get barcodes { + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_barcodes); + } + + final List _qrcodes; + @override + @JsonKey() + List get qrcodes { + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_qrcodes); + } + + @override + @JsonKey() + final bool loading; + @override + @JsonKey() + final bool duplicate; + + @override + String toString() { + return 'ScannerState(barcodes: $barcodes, qrcodes: $qrcodes, loading: $loading, duplicate: $duplicate)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_ScannerState && + const DeepCollectionEquality().equals(other._barcodes, _barcodes) && + const DeepCollectionEquality().equals(other._qrcodes, _qrcodes) && + (identical(other.loading, loading) || other.loading == loading) && + (identical(other.duplicate, duplicate) || + other.duplicate == duplicate)); + } + + @override + int get hashCode => Object.hash( + runtimeType, + const DeepCollectionEquality().hash(_barcodes), + const DeepCollectionEquality().hash(_qrcodes), + loading, + duplicate); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$_ScannerStateCopyWith<_$_ScannerState> get copyWith => + __$$_ScannerStateCopyWithImpl<_$_ScannerState>(this, _$identity); +} + +abstract class _ScannerState implements ScannerState { + const factory _ScannerState( + {final List barcodes, + final List qrcodes, + final bool loading, + final bool duplicate}) = _$_ScannerState; + + @override + List get barcodes; + @override + List get qrcodes; + @override + bool get loading; + @override + bool get duplicate; + @override + @JsonKey(ignore: true) + _$$_ScannerStateCopyWith<_$_ScannerState> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/apps/health_campaign_field_worker_app/lib/blocs/search_households/search_households.dart b/apps/health_campaign_field_worker_app/lib/blocs/search_households/search_households.dart index b1d61e2c5..d82ab271c 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/search_households/search_households.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/search_households/search_households.dart @@ -5,9 +5,7 @@ import 'package:collection/collection.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:stream_transform/stream_transform.dart'; - import '../../data/repositories/local/address.dart'; -import '../../data/repositories/local/side_effect.dart'; import '../../models/data_model.dart'; import '../../utils/typedefs.dart'; @@ -55,73 +53,7 @@ class SearchHouseholdsBloc on(_handleSearchByProximitity); on(_handleClear); on(_handleSearchByHousehold); - on(_handleInitialize); - - if (sideEffectDataRepository is SideEffectLocalRepository) { - (sideEffectDataRepository as SideEffectLocalRepository).listenToChanges( - query: SideEffectSearchModel( - projectId: projectId, - ), - listener: (data) { - add(const SearchHouseholdsInitializedEvent()); - }, - ); - } - } - - void _handleInitialize( - SearchHouseholdsInitializedEvent event, - SearchHouseholdsEmitter emit, - ) async { - final beneficiaries = await projectBeneficiary.search( - ProjectBeneficiarySearchModel( - projectId: projectId, - ), - ); - - final tasks = await taskDataRepository.search( - TaskSearchModel( - projectId: projectId, - ), - ); - - final sideEffects = await sideEffectDataRepository.search( - SideEffectSearchModel(projectId: projectId), - ); - - final referrals = await referralDataRepository.search( - ReferralSearchModel(projectId: projectId), - ); - final interventionDelivered = tasks - .where((element) => element.projectId == projectId) - .whereNotNull() - .map( - (task) { - return task.resources?.where((element) { - return element.auditDetails?.createdBy == userUid; - }).map( - (taskResource) { - return int.tryParse(taskResource.quantity ?? '0'); - }, - ).whereNotNull(); - }, - ) - .whereNotNull() - .expand((element) => [...element]) - .fold(0, (previousValue, element) => previousValue + element); - - final observedSideEffects = sideEffects.length; - - final referralsDone = referrals.length; - - emit(state.copyWith( - registeredHouseholds: beneficiaries.where((element) { - return element.auditDetails?.createdBy == userUid; - }).length, - deliveredInterventions: interventionDelivered, - sideEffectsObserved: observedSideEffects, - referralsDone: referralsDone, - )); + on(_handleSearchByTag); } Future _handleSearchByHousehold( @@ -137,23 +69,18 @@ class SearchHouseholdsBloc ), ); - final individuals = await individual.search( - IndividualSearchModel( - clientReferenceId: householdMembers - .map((e) => e.individualClientReferenceId) - .whereNotNull() - .toList(), - ), + final individuals = await fetchIndividuals( + householdMembers + .map((e) => e.individualClientReferenceId) + .whereNotNull() + .toList(), + null, ); - final projectBeneficiaries = await projectBeneficiary.search( - ProjectBeneficiarySearchModel( - projectId: event.projectId, - beneficiaryClientReferenceId: - beneficiaryType == BeneficiaryType.individual - ? individuals.map((e) => e.clientReferenceId).toList() - : [event.householdModel.clientReferenceId], - ), + final projectBeneficiaries = await fetchProjectBeneficiary( + beneficiaryType == BeneficiaryType.individual + ? individuals.map((e) => e.clientReferenceId).toList() + : [event.householdModel.clientReferenceId], ); final headOfHousehold = individuals.firstWhereOrNull( @@ -200,6 +127,79 @@ class SearchHouseholdsBloc } } + FutureOr _handleSearchByTag( + SearchHouseholdsByTagEvent event, + SearchHouseholdsEmitter emit, + ) async { + List beneficiaries = + await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + tag: event.tag, + projectId: event.projectId, + ), + ); + +/* [TODO: Need to handle the Tag search based on Beneficary Type + current implementation is based on the individual based project + ] */ + + final List individuals = await individual.search( + IndividualSearchModel( + clientReferenceId: + beneficiaries.map((e) => e.beneficiaryClientReferenceId!).toList(), + ), + ); + + // Initialize a list to store household member wrappers. + final containers = []; + if (individuals.isNotEmpty) { + final member = await householdMember.search( + HouseholdMemberSearchModel( + individualClientReferenceId: + individuals.map((e) => e.clientReferenceId).toList().first, + ), + ); + + final members = await householdMember.search( + HouseholdMemberSearchModel( + householdClientReferenceId: member.first.householdClientReferenceId, + isHeadOfHousehold: true, + ), + ); + + final householdList = await household.search(HouseholdSearchModel( + clientReferenceId: [members.first.householdClientReferenceId!], + )); + + // Search for tasks and side effects based on project beneficiaries. + final tasks = await fetchTaskbyProjectBeneficiary(beneficiaries); + + final sideEffects = + await sideEffectDataRepository.search(SideEffectSearchModel( + taskClientReferenceId: tasks.map((e) => e.clientReferenceId).toList(), + )); + + // Group household members by household client reference ID. + + containers.add( + HouseholdMemberWrapper( + household: householdList.first, + headOfHousehold: individuals.first, + members: individuals, + projectBeneficiaries: beneficiaries, + tasks: tasks.isEmpty ? null : tasks, + sideEffects: sideEffects.isEmpty ? null : sideEffects, + ), + ); + } + + emit(state.copyWith( + householdMembers: containers, + loading: false, + tag: event.tag, + )); + } + FutureOr _handleSearchByProximitity( SearchHouseholdsByProximityEvent event, SearchHouseholdsEmitter emit, @@ -248,18 +248,15 @@ class SearchHouseholdsBloc for (final element in r) { // Determine the type of household members based on proximity and beneficiary type. final members = beneficiaryType != BeneficiaryType.individual - ? await householdMember.search( - HouseholdMemberSearchModel( - householdClientReferenceId: - (element as HouseholdModel).clientReferenceId, - isHeadOfHousehold: true, - ), + ? await fetchHouseholdMembers( + (element as HouseholdModel).clientReferenceId, + null, + true, ) - : await householdMember.search( - HouseholdMemberSearchModel( - individualClientReferenceId: - (element as IndividualModel).clientReferenceId, - ), + : await fetchHouseholdMembers( + null, + (element as IndividualModel).clientReferenceId, + true, ); // Retrieve all household members associated with each member. @@ -309,12 +306,7 @@ class SearchHouseholdsBloc final resultHousehold = households.first; // Search for individuals based on proximity, beneficiary type, and search text. - final individuals = await individual.search( - IndividualSearchModel( - clientReferenceId: individualIds, - ), - ); - + final individuals = await fetchIndividuals(individualIds, null); // Find the head of household from the individuals. final head = individuals.firstWhereOrNull( (element) => @@ -329,29 +321,16 @@ class SearchHouseholdsBloc if (head == null) continue; // Search for project beneficiaries based on client reference ID and project. - final projectBeneficiaries = beneficiaryType != BeneficiaryType.individual - ? await projectBeneficiary.search( - ProjectBeneficiarySearchModel( - beneficiaryClientReferenceId: [ - resultHousehold.clientReferenceId, - ], - projectId: event.projectId, - ), - ) - : await projectBeneficiary.search( - ProjectBeneficiarySearchModel( - beneficiaryClientReferenceId: individualIds, - projectId: event.projectId, - ), - ); + final projectBeneficiaries = await fetchProjectBeneficiary( + beneficiaryType != BeneficiaryType.individual + ? [resultHousehold.clientReferenceId] + : individualIds, + ); if (projectBeneficiaries.isEmpty) continue; // Search for tasks and side effects based on project beneficiaries. - final tasks = await taskDataRepository.search(TaskSearchModel( - projectBeneficiaryClientReferenceId: - projectBeneficiaries.map((e) => e.clientReferenceId).toList(), - )); + final tasks = await fetchTaskbyProjectBeneficiary(projectBeneficiaries); final sideEffects = await sideEffectDataRepository.search(SideEffectSearchModel( @@ -456,42 +435,38 @@ class SearchHouseholdsBloc // Iterate through the results and retrieve household members. for (final element in r) { // Determine the type of household members based on proximity and beneficiary type. - final members = event.isProximityEnabled - ? beneficiaryType != BeneficiaryType.individual - ? await householdMember.search( - HouseholdMemberSearchModel( - householdClientReferenceId: - (element as HouseholdModel).clientReferenceId, - isHeadOfHousehold: true, - ), - ) - : await householdMember.search( - HouseholdMemberSearchModel( - individualClientReferenceId: - (element as IndividualModel).clientReferenceId, - ), - ) - : beneficiaryType != BeneficiaryType.individual - ? await householdMember.search( - HouseholdMemberSearchModel( - individualClientReferenceId: - (element as IndividualModel).clientReferenceId, - isHeadOfHousehold: true, - ), - ) - : await householdMember.search( - HouseholdMemberSearchModel( - individualClientReferenceId: - (element as IndividualModel).clientReferenceId, - ), - ); + + final isProximityEnabled = event.isProximityEnabled; + final isNotIndividual = beneficiaryType != BeneficiaryType.individual; + final clientReferenceId = (element as IndividualModel).clientReferenceId; + + String? param1, param2; + bool? param3; + + if (isProximityEnabled) { + if (isNotIndividual) { + param1 = clientReferenceId; + param2 = null; + param3 = true; + } else { + param1 = null; + param2 = clientReferenceId; + param3 = null; + } + } else { + param1 = null; + param2 = clientReferenceId; + param3 = isNotIndividual ? true : null; + } + + final members = await fetchHouseholdMembers(param1, param2, param3); // Retrieve all household members associated with each member. for (final member in members) { - final allHouseholdMembers = await householdMember.search( - HouseholdMemberSearchModel( - householdClientReferenceId: member.householdClientReferenceId, - ), + final allHouseholdMembers = await fetchHouseholdMembers( + member.householdClientReferenceId, + null, + null, ); householdMembers.addAll(allHouseholdMembers); @@ -535,17 +510,8 @@ class SearchHouseholdsBloc // Search for individuals based on proximity, beneficiary type, and search text. final individuals = event.isProximityEnabled && beneficiaryType != BeneficiaryType.individual - ? await individual.search( - IndividualSearchModel( - clientReferenceId: individualIds, - name: NameSearchModel(givenName: event.searchText.trim()), - ), - ) - : await individual.search( - IndividualSearchModel( - clientReferenceId: individualIds, - ), - ); + ? await fetchIndividuals(individualIds, event.searchText.trim()) + : await fetchIndividuals(individualIds, null); // Find the head of household from the individuals. final head = individuals.firstWhereOrNull( @@ -561,29 +527,17 @@ class SearchHouseholdsBloc if (head == null) continue; // Search for project beneficiaries based on client reference ID and project. - final projectBeneficiaries = beneficiaryType != BeneficiaryType.individual - ? await projectBeneficiary.search( - ProjectBeneficiarySearchModel( - beneficiaryClientReferenceId: [ - resultHousehold.clientReferenceId, - ], - projectId: event.projectId, - ), - ) - : await projectBeneficiary.search( - ProjectBeneficiarySearchModel( - beneficiaryClientReferenceId: individualIds, - projectId: event.projectId, - ), - ); - + final projectBeneficiaries = await fetchProjectBeneficiary( + beneficiaryType != BeneficiaryType.individual + ? [ + resultHousehold.clientReferenceId, + ] + : individualIds, + ); if (projectBeneficiaries.isEmpty) continue; // Search for tasks and side effects based on project beneficiaries. - final tasks = await taskDataRepository.search(TaskSearchModel( - projectBeneficiaryClientReferenceId: - projectBeneficiaries.map((e) => e.clientReferenceId).toList(), - )); + final tasks = await fetchTaskbyProjectBeneficiary(projectBeneficiaries); final sideEffects = await sideEffectDataRepository.search(SideEffectSearchModel( @@ -624,6 +578,57 @@ class SearchHouseholdsBloc householdMembers: [], )); } + +// Fetch the HouseHold Members + + Future> fetchHouseholdMembers( + String? householdClientReferenceId, + String? individualClientReferenceId, + bool? isHeadOfHousehold, + ) async { + return await householdMember.search( + HouseholdMemberSearchModel( + householdClientReferenceId: householdClientReferenceId, + individualClientReferenceId: individualClientReferenceId, + isHeadOfHousehold: isHeadOfHousehold, + ), + ); + } + +// Fetch the task + Future> fetchTaskbyProjectBeneficiary( + List projectBeneficiaries, + ) async { + return await taskDataRepository.search(TaskSearchModel( + projectBeneficiaryClientReferenceId: + projectBeneficiaries.map((e) => e.clientReferenceId).toList(), + )); + } + + // Fetch the project Beneficiary + + Future> fetchProjectBeneficiary( + List projectBeneficiariesIds, + ) async { + return await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: projectId, + beneficiaryClientReferenceId: projectBeneficiariesIds, + ), + ); + } + + Future> fetchIndividuals( + List individualIds, + String? name, + ) async { + return await individual.search( + IndividualSearchModel( + clientReferenceId: individualIds, + name: name != null ? NameSearchModel(givenName: name.trim()) : null, + ), + ); + } } @freezed @@ -656,6 +661,11 @@ class SearchHouseholdsEvent with _$SearchHouseholdsEvent { required double maxRadius, }) = SearchHouseholdsByProximityEvent; + const factory SearchHouseholdsEvent.searchByTag({ + required String tag, + required String projectId, + }) = SearchHouseholdsByTagEvent; + const factory SearchHouseholdsEvent.clear() = SearchHouseholdsClearEvent; } @@ -666,16 +676,14 @@ class SearchHouseholdsState with _$SearchHouseholdsState { const factory SearchHouseholdsState({ @Default(false) bool loading, String? searchQuery, + String? tag, @Default([]) List householdMembers, - @Default(0) int registeredHouseholds, - @Default(0) int deliveredInterventions, - @Default(0) int sideEffectsObserved, - @Default(0) int referralsDone, }) = _SearchHouseholdsState; bool get resultsNotFound { if (loading) return false; - if (searchQuery?.isEmpty ?? true) return false; + + if (searchQuery?.isEmpty ?? true && tag == null) return false; return householdMembers.isEmpty; } diff --git a/apps/health_campaign_field_worker_app/lib/blocs/search_households/search_households.freezed.dart b/apps/health_campaign_field_worker_app/lib/blocs/search_households/search_households.freezed.dart index 605f10a9b..d6295fce5 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/search_households/search_households.freezed.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/search_households/search_households.freezed.dart @@ -38,6 +38,7 @@ mixin _$SearchHouseholdsEvent { required TResult Function(double latitude, double longititude, String projectId, double maxRadius) searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, }) => throw _privateConstructorUsedError; @@ -63,6 +64,7 @@ mixin _$SearchHouseholdsEvent { TResult? Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, }) => throw _privateConstructorUsedError; @@ -88,6 +90,7 @@ mixin _$SearchHouseholdsEvent { TResult Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, required TResult orElse(), }) => @@ -102,6 +105,7 @@ mixin _$SearchHouseholdsEvent { searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, }) => throw _privateConstructorUsedError; @@ -114,6 +118,7 @@ mixin _$SearchHouseholdsEvent { searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, }) => throw _privateConstructorUsedError; @@ -125,6 +130,7 @@ mixin _$SearchHouseholdsEvent { TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, required TResult orElse(), }) => @@ -213,6 +219,7 @@ class _$SearchHouseholdsInitializedEvent required TResult Function(double latitude, double longititude, String projectId, double maxRadius) searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, }) { return initialize(); @@ -241,6 +248,7 @@ class _$SearchHouseholdsInitializedEvent TResult? Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, }) { return initialize?.call(); @@ -269,6 +277,7 @@ class _$SearchHouseholdsInitializedEvent TResult Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, required TResult orElse(), }) { @@ -289,6 +298,7 @@ class _$SearchHouseholdsInitializedEvent searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, }) { return initialize(this); @@ -304,6 +314,7 @@ class _$SearchHouseholdsInitializedEvent searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, }) { return initialize?.call(this); @@ -318,6 +329,7 @@ class _$SearchHouseholdsInitializedEvent TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, required TResult orElse(), }) { @@ -483,6 +495,7 @@ class _$SearchHouseholdsByHouseholdsEvent required TResult Function(double latitude, double longititude, String projectId, double maxRadius) searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, }) { return searchByHousehold(projectId, latitude, longitude, maxRadius, @@ -512,6 +525,7 @@ class _$SearchHouseholdsByHouseholdsEvent TResult? Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, }) { return searchByHousehold?.call(projectId, latitude, longitude, maxRadius, @@ -541,6 +555,7 @@ class _$SearchHouseholdsByHouseholdsEvent TResult Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, required TResult orElse(), }) { @@ -562,6 +577,7 @@ class _$SearchHouseholdsByHouseholdsEvent searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, }) { return searchByHousehold(this); @@ -577,6 +593,7 @@ class _$SearchHouseholdsByHouseholdsEvent searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, }) { return searchByHousehold?.call(this); @@ -591,6 +608,7 @@ class _$SearchHouseholdsByHouseholdsEvent TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, required TResult orElse(), }) { @@ -774,6 +792,7 @@ class _$SearchHouseholdsSearchByHouseholdHeadEvent required TResult Function(double latitude, double longititude, String projectId, double maxRadius) searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, }) { return searchByHouseholdHead(searchText, projectId, isProximityEnabled, @@ -803,6 +822,7 @@ class _$SearchHouseholdsSearchByHouseholdHeadEvent TResult? Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, }) { return searchByHouseholdHead?.call(searchText, projectId, @@ -832,6 +852,7 @@ class _$SearchHouseholdsSearchByHouseholdHeadEvent TResult Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, required TResult orElse(), }) { @@ -853,6 +874,7 @@ class _$SearchHouseholdsSearchByHouseholdHeadEvent searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, }) { return searchByHouseholdHead(this); @@ -868,6 +890,7 @@ class _$SearchHouseholdsSearchByHouseholdHeadEvent searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, }) { return searchByHouseholdHead?.call(this); @@ -882,6 +905,7 @@ class _$SearchHouseholdsSearchByHouseholdHeadEvent TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, required TResult orElse(), }) { @@ -1041,6 +1065,7 @@ class _$SearchHouseholdsByProximityEvent required TResult Function(double latitude, double longititude, String projectId, double maxRadius) searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, }) { return searchByProximity(latitude, longititude, projectId, maxRadius); @@ -1069,6 +1094,7 @@ class _$SearchHouseholdsByProximityEvent TResult? Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, }) { return searchByProximity?.call(latitude, longititude, projectId, maxRadius); @@ -1097,6 +1123,7 @@ class _$SearchHouseholdsByProximityEvent TResult Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, required TResult orElse(), }) { @@ -1117,6 +1144,7 @@ class _$SearchHouseholdsByProximityEvent searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, }) { return searchByProximity(this); @@ -1132,6 +1160,7 @@ class _$SearchHouseholdsByProximityEvent searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, }) { return searchByProximity?.call(this); @@ -1146,6 +1175,7 @@ class _$SearchHouseholdsByProximityEvent TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, required TResult orElse(), }) { @@ -1174,6 +1204,237 @@ abstract class SearchHouseholdsByProximityEvent get copyWith => throw _privateConstructorUsedError; } +/// @nodoc +abstract class _$$SearchHouseholdsByTagEventCopyWith<$Res> { + factory _$$SearchHouseholdsByTagEventCopyWith( + _$SearchHouseholdsByTagEvent value, + $Res Function(_$SearchHouseholdsByTagEvent) then) = + __$$SearchHouseholdsByTagEventCopyWithImpl<$Res>; + @useResult + $Res call({String tag, String projectId}); +} + +/// @nodoc +class __$$SearchHouseholdsByTagEventCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$SearchHouseholdsByTagEvent> + implements _$$SearchHouseholdsByTagEventCopyWith<$Res> { + __$$SearchHouseholdsByTagEventCopyWithImpl( + _$SearchHouseholdsByTagEvent _value, + $Res Function(_$SearchHouseholdsByTagEvent) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? tag = null, + Object? projectId = null, + }) { + return _then(_$SearchHouseholdsByTagEvent( + tag: null == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String, + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + )); + } +} + +/// @nodoc + +class _$SearchHouseholdsByTagEvent implements SearchHouseholdsByTagEvent { + const _$SearchHouseholdsByTagEvent( + {required this.tag, required this.projectId}); + + @override + final String tag; + @override + final String projectId; + + @override + String toString() { + return 'SearchHouseholdsEvent.searchByTag(tag: $tag, projectId: $projectId)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SearchHouseholdsByTagEvent && + (identical(other.tag, tag) || other.tag == tag) && + (identical(other.projectId, projectId) || + other.projectId == projectId)); + } + + @override + int get hashCode => Object.hash(runtimeType, tag, projectId); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$SearchHouseholdsByTagEventCopyWith<_$SearchHouseholdsByTagEvent> + get copyWith => __$$SearchHouseholdsByTagEventCopyWithImpl< + _$SearchHouseholdsByTagEvent>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + }) { + return searchByTag(tag, projectId); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + }) { + return searchByTag?.call(tag, projectId); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + required TResult orElse(), + }) { + if (searchByTag != null) { + return searchByTag(tag, projectId); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + }) { + return searchByTag(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + }) { + return searchByTag?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + required TResult orElse(), + }) { + if (searchByTag != null) { + return searchByTag(this); + } + return orElse(); + } +} + +abstract class SearchHouseholdsByTagEvent implements SearchHouseholdsEvent { + const factory SearchHouseholdsByTagEvent( + {required final String tag, + required final String projectId}) = _$SearchHouseholdsByTagEvent; + + String get tag; + String get projectId; + @JsonKey(ignore: true) + _$$SearchHouseholdsByTagEventCopyWith<_$SearchHouseholdsByTagEvent> + get copyWith => throw _privateConstructorUsedError; +} + /// @nodoc abstract class _$$SearchHouseholdsClearEventCopyWith<$Res> { factory _$$SearchHouseholdsClearEventCopyWith( @@ -1236,6 +1497,7 @@ class _$SearchHouseholdsClearEvent implements SearchHouseholdsClearEvent { required TResult Function(double latitude, double longititude, String projectId, double maxRadius) searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, required TResult Function() clear, }) { return clear(); @@ -1264,6 +1526,7 @@ class _$SearchHouseholdsClearEvent implements SearchHouseholdsClearEvent { TResult? Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, TResult? Function()? clear, }) { return clear?.call(); @@ -1292,6 +1555,7 @@ class _$SearchHouseholdsClearEvent implements SearchHouseholdsClearEvent { TResult Function(double latitude, double longititude, String projectId, double maxRadius)? searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, TResult Function()? clear, required TResult orElse(), }) { @@ -1312,6 +1576,7 @@ class _$SearchHouseholdsClearEvent implements SearchHouseholdsClearEvent { searchByHouseholdHead, required TResult Function(SearchHouseholdsByProximityEvent value) searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, required TResult Function(SearchHouseholdsClearEvent value) clear, }) { return clear(this); @@ -1327,6 +1592,7 @@ class _$SearchHouseholdsClearEvent implements SearchHouseholdsClearEvent { searchByHouseholdHead, TResult? Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult? Function(SearchHouseholdsClearEvent value)? clear, }) { return clear?.call(this); @@ -1341,6 +1607,7 @@ class _$SearchHouseholdsClearEvent implements SearchHouseholdsClearEvent { TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? searchByHouseholdHead, TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, TResult Function(SearchHouseholdsClearEvent value)? clear, required TResult orElse(), }) { @@ -1359,12 +1626,9 @@ abstract class SearchHouseholdsClearEvent implements SearchHouseholdsEvent { mixin _$SearchHouseholdsState { bool get loading => throw _privateConstructorUsedError; String? get searchQuery => throw _privateConstructorUsedError; + String? get tag => throw _privateConstructorUsedError; List get householdMembers => throw _privateConstructorUsedError; - int get registeredHouseholds => throw _privateConstructorUsedError; - int get deliveredInterventions => throw _privateConstructorUsedError; - int get sideEffectsObserved => throw _privateConstructorUsedError; - int get referralsDone => throw _privateConstructorUsedError; @JsonKey(ignore: true) $SearchHouseholdsStateCopyWith get copyWith => @@ -1380,11 +1644,8 @@ abstract class $SearchHouseholdsStateCopyWith<$Res> { $Res call( {bool loading, String? searchQuery, - List householdMembers, - int registeredHouseholds, - int deliveredInterventions, - int sideEffectsObserved, - int referralsDone}); + String? tag, + List householdMembers}); } /// @nodoc @@ -1403,11 +1664,8 @@ class _$SearchHouseholdsStateCopyWithImpl<$Res, $Res call({ Object? loading = null, Object? searchQuery = freezed, + Object? tag = freezed, Object? householdMembers = null, - Object? registeredHouseholds = null, - Object? deliveredInterventions = null, - Object? sideEffectsObserved = null, - Object? referralsDone = null, }) { return _then(_value.copyWith( loading: null == loading @@ -1418,26 +1676,14 @@ class _$SearchHouseholdsStateCopyWithImpl<$Res, ? _value.searchQuery : searchQuery // ignore: cast_nullable_to_non_nullable as String?, + tag: freezed == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String?, householdMembers: null == householdMembers ? _value.householdMembers : householdMembers // ignore: cast_nullable_to_non_nullable as List, - registeredHouseholds: null == registeredHouseholds - ? _value.registeredHouseholds - : registeredHouseholds // ignore: cast_nullable_to_non_nullable - as int, - deliveredInterventions: null == deliveredInterventions - ? _value.deliveredInterventions - : deliveredInterventions // ignore: cast_nullable_to_non_nullable - as int, - sideEffectsObserved: null == sideEffectsObserved - ? _value.sideEffectsObserved - : sideEffectsObserved // ignore: cast_nullable_to_non_nullable - as int, - referralsDone: null == referralsDone - ? _value.referralsDone - : referralsDone // ignore: cast_nullable_to_non_nullable - as int, ) as $Val); } } @@ -1453,11 +1699,8 @@ abstract class _$$_SearchHouseholdsStateCopyWith<$Res> $Res call( {bool loading, String? searchQuery, - List householdMembers, - int registeredHouseholds, - int deliveredInterventions, - int sideEffectsObserved, - int referralsDone}); + String? tag, + List householdMembers}); } /// @nodoc @@ -1473,11 +1716,8 @@ class __$$_SearchHouseholdsStateCopyWithImpl<$Res> $Res call({ Object? loading = null, Object? searchQuery = freezed, + Object? tag = freezed, Object? householdMembers = null, - Object? registeredHouseholds = null, - Object? deliveredInterventions = null, - Object? sideEffectsObserved = null, - Object? referralsDone = null, }) { return _then(_$_SearchHouseholdsState( loading: null == loading @@ -1488,26 +1728,14 @@ class __$$_SearchHouseholdsStateCopyWithImpl<$Res> ? _value.searchQuery : searchQuery // ignore: cast_nullable_to_non_nullable as String?, + tag: freezed == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String?, householdMembers: null == householdMembers ? _value._householdMembers : householdMembers // ignore: cast_nullable_to_non_nullable as List, - registeredHouseholds: null == registeredHouseholds - ? _value.registeredHouseholds - : registeredHouseholds // ignore: cast_nullable_to_non_nullable - as int, - deliveredInterventions: null == deliveredInterventions - ? _value.deliveredInterventions - : deliveredInterventions // ignore: cast_nullable_to_non_nullable - as int, - sideEffectsObserved: null == sideEffectsObserved - ? _value.sideEffectsObserved - : sideEffectsObserved // ignore: cast_nullable_to_non_nullable - as int, - referralsDone: null == referralsDone - ? _value.referralsDone - : referralsDone // ignore: cast_nullable_to_non_nullable - as int, )); } } @@ -1518,11 +1746,8 @@ class _$_SearchHouseholdsState extends _SearchHouseholdsState { const _$_SearchHouseholdsState( {this.loading = false, this.searchQuery, - final List householdMembers = const [], - this.registeredHouseholds = 0, - this.deliveredInterventions = 0, - this.sideEffectsObserved = 0, - this.referralsDone = 0}) + this.tag, + final List householdMembers = const []}) : _householdMembers = householdMembers, super._(); @@ -1531,6 +1756,8 @@ class _$_SearchHouseholdsState extends _SearchHouseholdsState { final bool loading; @override final String? searchQuery; + @override + final String? tag; final List _householdMembers; @override @JsonKey() @@ -1539,22 +1766,9 @@ class _$_SearchHouseholdsState extends _SearchHouseholdsState { return EqualUnmodifiableListView(_householdMembers); } - @override - @JsonKey() - final int registeredHouseholds; - @override - @JsonKey() - final int deliveredInterventions; - @override - @JsonKey() - final int sideEffectsObserved; - @override - @JsonKey() - final int referralsDone; - @override String toString() { - return 'SearchHouseholdsState(loading: $loading, searchQuery: $searchQuery, householdMembers: $householdMembers, registeredHouseholds: $registeredHouseholds, deliveredInterventions: $deliveredInterventions, sideEffectsObserved: $sideEffectsObserved, referralsDone: $referralsDone)'; + return 'SearchHouseholdsState(loading: $loading, searchQuery: $searchQuery, tag: $tag, householdMembers: $householdMembers)'; } @override @@ -1565,28 +1779,14 @@ class _$_SearchHouseholdsState extends _SearchHouseholdsState { (identical(other.loading, loading) || other.loading == loading) && (identical(other.searchQuery, searchQuery) || other.searchQuery == searchQuery) && + (identical(other.tag, tag) || other.tag == tag) && const DeepCollectionEquality() - .equals(other._householdMembers, _householdMembers) && - (identical(other.registeredHouseholds, registeredHouseholds) || - other.registeredHouseholds == registeredHouseholds) && - (identical(other.deliveredInterventions, deliveredInterventions) || - other.deliveredInterventions == deliveredInterventions) && - (identical(other.sideEffectsObserved, sideEffectsObserved) || - other.sideEffectsObserved == sideEffectsObserved) && - (identical(other.referralsDone, referralsDone) || - other.referralsDone == referralsDone)); + .equals(other._householdMembers, _householdMembers)); } @override - int get hashCode => Object.hash( - runtimeType, - loading, - searchQuery, - const DeepCollectionEquality().hash(_householdMembers), - registeredHouseholds, - deliveredInterventions, - sideEffectsObserved, - referralsDone); + int get hashCode => Object.hash(runtimeType, loading, searchQuery, tag, + const DeepCollectionEquality().hash(_householdMembers)); @JsonKey(ignore: true) @override @@ -1598,13 +1798,11 @@ class _$_SearchHouseholdsState extends _SearchHouseholdsState { abstract class _SearchHouseholdsState extends SearchHouseholdsState { const factory _SearchHouseholdsState( - {final bool loading, - final String? searchQuery, - final List householdMembers, - final int registeredHouseholds, - final int deliveredInterventions, - final int sideEffectsObserved, - final int referralsDone}) = _$_SearchHouseholdsState; + {final bool loading, + final String? searchQuery, + final String? tag, + final List householdMembers}) = + _$_SearchHouseholdsState; const _SearchHouseholdsState._() : super._(); @override @@ -1612,15 +1810,9 @@ abstract class _SearchHouseholdsState extends SearchHouseholdsState { @override String? get searchQuery; @override - List get householdMembers; - @override - int get registeredHouseholds; + String? get tag; @override - int get deliveredInterventions; - @override - int get sideEffectsObserved; - @override - int get referralsDone; + List get householdMembers; @override @JsonKey(ignore: true) _$$_SearchHouseholdsStateCopyWith<_$_SearchHouseholdsState> get copyWith => diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/secure_store/secure_store.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/secure_store/secure_store.dart index 6209e46a5..d7ed4220f 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/secure_store/secure_store.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/secure_store/secure_store.dart @@ -4,6 +4,7 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import '../../../models/auth/auth_model.dart'; import '../../../models/data_model.dart'; +import '../../../models/project_type/project_type_model.dart'; import '../../../models/role_actions/role_actions_model.dart'; class LocalSecureStore { @@ -17,6 +18,7 @@ class LocalSecureStore { static const actionsListkey = 'actionsListkey'; static const isAppInActiveKey = 'isAppInActiveKey'; static const manualSyncKey = 'manualSyncKey'; + static const selectedProjectTypeKey = 'selectedProjectType'; final storage = const FlutterSecureStorage(); @@ -70,6 +72,19 @@ class LocalSecureStore { } } + Future get selectedProjectType async { + final projectBody = await storage.read(key: selectedProjectTypeKey); + if (projectBody == null) return null; + + try { + final projectType = ProjectType.fromJson(json.decode(projectBody)); + + return projectType; + } catch (_) { + return null; + } + } + Future get isAppInActive async { final hasRun = await storage.read(key: isAppInActiveKey); @@ -126,6 +141,13 @@ class LocalSecureStore { ); } + Future setSelectedProjectType(ProjectType? projectType) async { + await storage.write( + key: selectedProjectTypeKey, + value: json.encode(projectType), + ); + } + // Note TO the app as Trigger Manual Sync or Not Future setManualSyncTrigger(bool isManualSync) async { await storage.write( diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/sql_store/sql_store.g.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/sql_store/sql_store.g.dart index ace4bda0f..33e143259 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/sql_store/sql_store.g.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/sql_store/sql_store.g.dart @@ -11059,6 +11059,7 @@ class ProjectBeneficiaryData extends DataClass final String? id; final String? projectId; final String? beneficiaryId; + final String? tag; final String? beneficiaryClientReferenceId; final String? auditCreatedBy; final bool? nonRecoverableError; @@ -11079,6 +11080,7 @@ class ProjectBeneficiaryData extends DataClass {this.id, this.projectId, this.beneficiaryId, + this.tag, this.beneficiaryClientReferenceId, this.auditCreatedBy, this.nonRecoverableError, @@ -11105,6 +11107,8 @@ class ProjectBeneficiaryData extends DataClass .mapFromDatabaseResponse(data['${effectivePrefix}project_id']), beneficiaryId: const StringType() .mapFromDatabaseResponse(data['${effectivePrefix}beneficiary_id']), + tag: const StringType() + .mapFromDatabaseResponse(data['${effectivePrefix}tag']), beneficiaryClientReferenceId: const StringType().mapFromDatabaseResponse( data['${effectivePrefix}beneficiary_client_reference_id']), auditCreatedBy: const StringType() @@ -11151,6 +11155,9 @@ class ProjectBeneficiaryData extends DataClass if (!nullToAbsent || beneficiaryId != null) { map['beneficiary_id'] = Variable(beneficiaryId); } + if (!nullToAbsent || tag != null) { + map['tag'] = Variable(tag); + } if (!nullToAbsent || beneficiaryClientReferenceId != null) { map['beneficiary_client_reference_id'] = Variable(beneficiaryClientReferenceId); @@ -11208,6 +11215,7 @@ class ProjectBeneficiaryData extends DataClass beneficiaryId: beneficiaryId == null && nullToAbsent ? const Value.absent() : Value(beneficiaryId), + tag: tag == null && nullToAbsent ? const Value.absent() : Value(tag), beneficiaryClientReferenceId: beneficiaryClientReferenceId == null && nullToAbsent ? const Value.absent() @@ -11263,6 +11271,7 @@ class ProjectBeneficiaryData extends DataClass id: serializer.fromJson(json['id']), projectId: serializer.fromJson(json['projectId']), beneficiaryId: serializer.fromJson(json['beneficiaryId']), + tag: serializer.fromJson(json['tag']), beneficiaryClientReferenceId: serializer.fromJson(json['beneficiaryClientReferenceId']), auditCreatedBy: serializer.fromJson(json['auditCreatedBy']), @@ -11290,6 +11299,7 @@ class ProjectBeneficiaryData extends DataClass 'id': serializer.toJson(id), 'projectId': serializer.toJson(projectId), 'beneficiaryId': serializer.toJson(beneficiaryId), + 'tag': serializer.toJson(tag), 'beneficiaryClientReferenceId': serializer.toJson(beneficiaryClientReferenceId), 'auditCreatedBy': serializer.toJson(auditCreatedBy), @@ -11314,6 +11324,7 @@ class ProjectBeneficiaryData extends DataClass {String? id, String? projectId, String? beneficiaryId, + String? tag, String? beneficiaryClientReferenceId, String? auditCreatedBy, bool? nonRecoverableError, @@ -11334,6 +11345,7 @@ class ProjectBeneficiaryData extends DataClass id: id ?? this.id, projectId: projectId ?? this.projectId, beneficiaryId: beneficiaryId ?? this.beneficiaryId, + tag: tag ?? this.tag, beneficiaryClientReferenceId: beneficiaryClientReferenceId ?? this.beneficiaryClientReferenceId, auditCreatedBy: auditCreatedBy ?? this.auditCreatedBy, @@ -11358,6 +11370,7 @@ class ProjectBeneficiaryData extends DataClass ..write('id: $id, ') ..write('projectId: $projectId, ') ..write('beneficiaryId: $beneficiaryId, ') + ..write('tag: $tag, ') ..write( 'beneficiaryClientReferenceId: $beneficiaryClientReferenceId, ') ..write('auditCreatedBy: $auditCreatedBy, ') @@ -11384,6 +11397,7 @@ class ProjectBeneficiaryData extends DataClass id, projectId, beneficiaryId, + tag, beneficiaryClientReferenceId, auditCreatedBy, nonRecoverableError, @@ -11407,6 +11421,7 @@ class ProjectBeneficiaryData extends DataClass other.id == this.id && other.projectId == this.projectId && other.beneficiaryId == this.beneficiaryId && + other.tag == this.tag && other.beneficiaryClientReferenceId == this.beneficiaryClientReferenceId && other.auditCreatedBy == this.auditCreatedBy && @@ -11431,6 +11446,7 @@ class ProjectBeneficiaryCompanion final Value id; final Value projectId; final Value beneficiaryId; + final Value tag; final Value beneficiaryClientReferenceId; final Value auditCreatedBy; final Value nonRecoverableError; @@ -11451,6 +11467,7 @@ class ProjectBeneficiaryCompanion this.id = const Value.absent(), this.projectId = const Value.absent(), this.beneficiaryId = const Value.absent(), + this.tag = const Value.absent(), this.beneficiaryClientReferenceId = const Value.absent(), this.auditCreatedBy = const Value.absent(), this.nonRecoverableError = const Value.absent(), @@ -11472,6 +11489,7 @@ class ProjectBeneficiaryCompanion this.id = const Value.absent(), this.projectId = const Value.absent(), this.beneficiaryId = const Value.absent(), + this.tag = const Value.absent(), this.beneficiaryClientReferenceId = const Value.absent(), this.auditCreatedBy = const Value.absent(), this.nonRecoverableError = const Value.absent(), @@ -11494,6 +11512,7 @@ class ProjectBeneficiaryCompanion Expression? id, Expression? projectId, Expression? beneficiaryId, + Expression? tag, Expression? beneficiaryClientReferenceId, Expression? auditCreatedBy, Expression? nonRecoverableError, @@ -11515,6 +11534,7 @@ class ProjectBeneficiaryCompanion if (id != null) 'id': id, if (projectId != null) 'project_id': projectId, if (beneficiaryId != null) 'beneficiary_id': beneficiaryId, + if (tag != null) 'tag': tag, if (beneficiaryClientReferenceId != null) 'beneficiary_client_reference_id': beneficiaryClientReferenceId, if (auditCreatedBy != null) 'audit_created_by': auditCreatedBy, @@ -11542,6 +11562,7 @@ class ProjectBeneficiaryCompanion {Value? id, Value? projectId, Value? beneficiaryId, + Value? tag, Value? beneficiaryClientReferenceId, Value? auditCreatedBy, Value? nonRecoverableError, @@ -11562,6 +11583,7 @@ class ProjectBeneficiaryCompanion id: id ?? this.id, projectId: projectId ?? this.projectId, beneficiaryId: beneficiaryId ?? this.beneficiaryId, + tag: tag ?? this.tag, beneficiaryClientReferenceId: beneficiaryClientReferenceId ?? this.beneficiaryClientReferenceId, auditCreatedBy: auditCreatedBy ?? this.auditCreatedBy, @@ -11594,6 +11616,9 @@ class ProjectBeneficiaryCompanion if (beneficiaryId.present) { map['beneficiary_id'] = Variable(beneficiaryId.value); } + if (tag.present) { + map['tag'] = Variable(tag.value); + } if (beneficiaryClientReferenceId.present) { map['beneficiary_client_reference_id'] = Variable(beneficiaryClientReferenceId.value); @@ -11652,6 +11677,7 @@ class ProjectBeneficiaryCompanion ..write('id: $id, ') ..write('projectId: $projectId, ') ..write('beneficiaryId: $beneficiaryId, ') + ..write('tag: $tag, ') ..write( 'beneficiaryClientReferenceId: $beneficiaryClientReferenceId, ') ..write('auditCreatedBy: $auditCreatedBy, ') @@ -11696,6 +11722,11 @@ class $ProjectBeneficiaryTable extends ProjectBeneficiary late final GeneratedColumn beneficiaryId = GeneratedColumn( 'beneficiary_id', aliasedName, true, type: const StringType(), requiredDuringInsert: false); + final VerificationMeta _tagMeta = const VerificationMeta('tag'); + @override + late final GeneratedColumn tag = GeneratedColumn( + 'tag', aliasedName, true, + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _beneficiaryClientReferenceIdMeta = const VerificationMeta('beneficiaryClientReferenceId'); @override @@ -11801,6 +11832,7 @@ class $ProjectBeneficiaryTable extends ProjectBeneficiary id, projectId, beneficiaryId, + tag, beneficiaryClientReferenceId, auditCreatedBy, nonRecoverableError, @@ -11841,6 +11873,10 @@ class $ProjectBeneficiaryTable extends ProjectBeneficiary beneficiaryId.isAcceptableOrUnknown( data['beneficiary_id']!, _beneficiaryIdMeta)); } + if (data.containsKey('tag')) { + context.handle( + _tagMeta, tag.isAcceptableOrUnknown(data['tag']!, _tagMeta)); + } if (data.containsKey('beneficiary_client_reference_id')) { context.handle( _beneficiaryClientReferenceIdMeta, @@ -31035,4 +31071,4 @@ abstract class _$LocalSqlDataStore extends GeneratedDatabase { pgrComplainant, user ]; -} +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/sql_store/tables/project_beneficiary.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/sql_store/tables/project_beneficiary.dart index 15e6ef15b..93ece0a1c 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/sql_store/tables/project_beneficiary.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/sql_store/tables/project_beneficiary.dart @@ -7,6 +7,7 @@ class ProjectBeneficiary extends Table { TextColumn get id => text().nullable()(); TextColumn get projectId => text().nullable()(); TextColumn get beneficiaryId => text().nullable()(); + TextColumn get tag => text().nullable()(); TextColumn get beneficiaryClientReferenceId => text().nullable()(); TextColumn get auditCreatedBy => text().nullable()(); BoolColumn get nonRecoverableError => boolean().nullable().withDefault(const Constant(false))(); diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/local/project_beneficiary.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/local/project_beneficiary.dart index a272c6eea..7b2ec65f7 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/local/project_beneficiary.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/local/project_beneficiary.dart @@ -38,6 +38,7 @@ class ProjectBeneficiaryLocalRepository extends LocalRepository< tenantId: e.tenantId, beneficiaryClientReferenceId: e.beneficiaryClientReferenceId, id: e.id, + tag: e.tag, rowVersion: e.rowVersion, isDeleted: e.isDeleted, beneficiaryId: e.beneficiaryId, @@ -58,6 +59,10 @@ class ProjectBeneficiaryLocalRepository extends LocalRepository< ..where( buildAnd( [ + if (query.tag != null) + sql.projectBeneficiary.tag.equals( + query.tag, + ), if (query.clientReferenceId != null) sql.projectBeneficiary.clientReferenceId.isIn( query.clientReferenceId!, @@ -105,6 +110,7 @@ class ProjectBeneficiaryLocalRepository extends LocalRepository< beneficiaryId: projectBeneficiary.beneficiaryId, dateOfRegistration: projectBeneficiary.dateOfRegistration, projectId: projectBeneficiary.projectId, + tag: projectBeneficiary.tag, auditDetails: AuditDetails( createdTime: projectBeneficiary.auditCreatedTime!, createdBy: projectBeneficiary.auditCreatedBy!, diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/oplog/oplog.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/oplog/oplog.dart index 71ffb22be..f59687829 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/oplog/oplog.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/oplog/oplog.dart @@ -142,6 +142,8 @@ abstract class OpLogManager { ) .oplog); }); + + return; } Future markSyncUp({ @@ -198,6 +200,8 @@ abstract class OpLogManager { } else { throw AppException('Invalid arguments'); } + + return; } Future updateServerGeneratedIds({ @@ -231,6 +235,8 @@ abstract class OpLogManager { await isar.opLogs.put(updatedOplog); }); } + + return; } Future>> getEntries( diff --git a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart index 845b6e1ef..48d614b53 100644 --- a/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart +++ b/apps/health_campaign_field_worker_app/lib/data/repositories/remote/mdms.dart @@ -324,68 +324,4 @@ class MdmsRepository { rethrow; } } - - FutureOr writeToProjectTypeDB( - ProjectTypePrimaryWrapper result, - Isar isar, - ) async { - final List newProjectTypeList = []; - final data = result.projectTypeWrapper?.projectTypes; - if (data != null && data.isNotEmpty) { - await isar.writeTxn(() async => await isar.serviceRegistrys.clear()); - } - for (final element in data ?? []) { - final newprojectType = ProjectTypeListCycle(); - - newprojectType.projectTypeId = element.id; - newprojectType.code = element.code; - newprojectType.group = element.group; - newprojectType.name = element.name; - newprojectType.beneficiaryType = element.beneficiaryType; - newprojectType.observationStrategy = element.observationStrategy; - newprojectType.resources = element.resources?.map((e) { - final productVariants = ProductVariants() - ..productVariantId = e.productVariantId - ..quantity = e.quantity.toString(); - - return productVariants; - }).toList(); - newprojectType.cycles = element.cycles?.map((e) { - final newcycle = Cycles() - ..id = e.id - ..startDate = e.startDate - ..endDate = e.endDate - ..mandatoryWaitSinceLastCycleInDays = - e.mandatoryWaitSinceLastCycleInDays - ..deliveries = e.deliveries?.map((ele) { - final newDeliveries = Deliveries(); - newDeliveries.deliveryStrategy = ele.deliveryStrategy; - newDeliveries.mandatoryWaitSinceLastDeliveryInDays = - ele.mandatoryWaitSinceLastDeliveryInDays; - newDeliveries.doseCriteriaModel = ele.doseCriteria?.map((e) { - final doseCriterias = DoseCriteria() - ..condition = e.condition - ..productVariants = e.productVariants?.map((p) { - final productVariants = ProductVariants() - ..quantity = p.quantity.toString() - ..productVariantId = p.productVariantId.toString(); - - return productVariants; - }).toList(); - - return doseCriterias; - }).toList(); - - return newDeliveries; - }).toList(); - - return newcycle; - }).toList(); - newProjectTypeList.add(newprojectType); - } - - await isar.writeTxn(() async { - await isar.projectTypeListCycles.putAll(newProjectTypeList); - }); - } } diff --git a/apps/health_campaign_field_worker_app/lib/models/data_model.mapper.g.dart b/apps/health_campaign_field_worker_app/lib/models/data_model.mapper.g.dart index 45fa8319c..3d6f13f3c 100644 --- a/apps/health_campaign_field_worker_app/lib/models/data_model.mapper.g.dart +++ b/apps/health_campaign_field_worker_app/lib/models/data_model.mapper.g.dart @@ -2111,15 +2111,15 @@ class ProjectBeneficiarySearchModelMapper extends BaseMapper decode; ProjectBeneficiarySearchModel decode(dynamic v) => checked(v, (Map map) => fromMap(map)); - ProjectBeneficiarySearchModel fromMap(Map map) => ProjectBeneficiarySearchModel.ignoreDeleted(id: Mapper.i.$getOpt(map, 'id'), projectId: Mapper.i.$getOpt(map, 'projectId'), beneficiaryId: Mapper.i.$getOpt(map, 'beneficiaryId'), beneficiaryClientReferenceId: Mapper.i.$getOpt(map, 'beneficiaryClientReferenceId'), beneficiaryRegistrationDateLte: Mapper.i.$getOpt(map, 'beneficiaryRegistrationDateLte'), beneficiaryRegistrationDateGte: Mapper.i.$getOpt(map, 'beneficiaryRegistrationDateGte'), clientReferenceId: Mapper.i.$getOpt(map, 'clientReferenceId'), tenantId: Mapper.i.$getOpt(map, 'tenantId'), dateOfRegistration: Mapper.i.$getOpt(map, 'dateOfRegistration'), boundaryCode: Mapper.i.$getOpt(map, 'boundaryCode')); + ProjectBeneficiarySearchModel fromMap(Map map) => ProjectBeneficiarySearchModel.ignoreDeleted(id: Mapper.i.$getOpt(map, 'id'), projectId: Mapper.i.$getOpt(map, 'projectId'), beneficiaryId: Mapper.i.$getOpt(map, 'beneficiaryId'), tag: Mapper.i.$getOpt(map, 'tag'), beneficiaryClientReferenceId: Mapper.i.$getOpt(map, 'beneficiaryClientReferenceId'), beneficiaryRegistrationDateLte: Mapper.i.$getOpt(map, 'beneficiaryRegistrationDateLte'), beneficiaryRegistrationDateGte: Mapper.i.$getOpt(map, 'beneficiaryRegistrationDateGte'), clientReferenceId: Mapper.i.$getOpt(map, 'clientReferenceId'), tenantId: Mapper.i.$getOpt(map, 'tenantId'), dateOfRegistration: Mapper.i.$getOpt(map, 'dateOfRegistration'), boundaryCode: Mapper.i.$getOpt(map, 'boundaryCode')); @override Function get encoder => (ProjectBeneficiarySearchModel v) => encode(v); dynamic encode(ProjectBeneficiarySearchModel v) => toMap(v); - Map toMap(ProjectBeneficiarySearchModel p) => {if (Mapper.i.$enc(p.id, 'id') != null) 'id': Mapper.i.$enc(p.id, 'id'), if (Mapper.i.$enc(p.projectId, 'projectId') != null) 'projectId': Mapper.i.$enc(p.projectId, 'projectId'), if (Mapper.i.$enc(p.beneficiaryId, 'beneficiaryId') != null) 'beneficiaryId': Mapper.i.$enc(p.beneficiaryId, 'beneficiaryId'), if (Mapper.i.$enc(p.beneficiaryClientReferenceId, 'beneficiaryClientReferenceId') != null) 'beneficiaryClientReferenceId': Mapper.i.$enc(p.beneficiaryClientReferenceId, 'beneficiaryClientReferenceId'), if (Mapper.i.$enc(p.beneficiaryRegistrationDateLte, 'beneficiaryRegistrationDateLte') != null) 'beneficiaryRegistrationDateLte': Mapper.i.$enc(p.beneficiaryRegistrationDateLte, 'beneficiaryRegistrationDateLte'), if (Mapper.i.$enc(p.beneficiaryRegistrationDateGte, 'beneficiaryRegistrationDateGte') != null) 'beneficiaryRegistrationDateGte': Mapper.i.$enc(p.beneficiaryRegistrationDateGte, 'beneficiaryRegistrationDateGte'), if (Mapper.i.$enc(p.clientReferenceId, 'clientReferenceId') != null) 'clientReferenceId': Mapper.i.$enc(p.clientReferenceId, 'clientReferenceId'), if (Mapper.i.$enc(p.tenantId, 'tenantId') != null) 'tenantId': Mapper.i.$enc(p.tenantId, 'tenantId'), if (Mapper.i.$enc(p.dateOfRegistration, 'dateOfRegistration') != null) 'dateOfRegistration': Mapper.i.$enc(p.dateOfRegistration, 'dateOfRegistration'), if (Mapper.i.$enc(p.boundaryCode, 'boundaryCode') != null) 'boundaryCode': Mapper.i.$enc(p.boundaryCode, 'boundaryCode')}; + Map toMap(ProjectBeneficiarySearchModel p) => {if (Mapper.i.$enc(p.id, 'id') != null) 'id': Mapper.i.$enc(p.id, 'id'), if (Mapper.i.$enc(p.projectId, 'projectId') != null) 'projectId': Mapper.i.$enc(p.projectId, 'projectId'), if (Mapper.i.$enc(p.beneficiaryId, 'beneficiaryId') != null) 'beneficiaryId': Mapper.i.$enc(p.beneficiaryId, 'beneficiaryId'), if (Mapper.i.$enc(p.tag, 'tag') != null) 'tag': Mapper.i.$enc(p.tag, 'tag'), if (Mapper.i.$enc(p.beneficiaryClientReferenceId, 'beneficiaryClientReferenceId') != null) 'beneficiaryClientReferenceId': Mapper.i.$enc(p.beneficiaryClientReferenceId, 'beneficiaryClientReferenceId'), if (Mapper.i.$enc(p.beneficiaryRegistrationDateLte, 'beneficiaryRegistrationDateLte') != null) 'beneficiaryRegistrationDateLte': Mapper.i.$enc(p.beneficiaryRegistrationDateLte, 'beneficiaryRegistrationDateLte'), if (Mapper.i.$enc(p.beneficiaryRegistrationDateGte, 'beneficiaryRegistrationDateGte') != null) 'beneficiaryRegistrationDateGte': Mapper.i.$enc(p.beneficiaryRegistrationDateGte, 'beneficiaryRegistrationDateGte'), if (Mapper.i.$enc(p.clientReferenceId, 'clientReferenceId') != null) 'clientReferenceId': Mapper.i.$enc(p.clientReferenceId, 'clientReferenceId'), if (Mapper.i.$enc(p.tenantId, 'tenantId') != null) 'tenantId': Mapper.i.$enc(p.tenantId, 'tenantId'), if (Mapper.i.$enc(p.dateOfRegistration, 'dateOfRegistration') != null) 'dateOfRegistration': Mapper.i.$enc(p.dateOfRegistration, 'dateOfRegistration'), if (Mapper.i.$enc(p.boundaryCode, 'boundaryCode') != null) 'boundaryCode': Mapper.i.$enc(p.boundaryCode, 'boundaryCode')}; - @override String stringify(ProjectBeneficiarySearchModel self) => 'ProjectBeneficiarySearchModel(boundaryCode: ${Mapper.asString(self.boundaryCode)}, isDeleted: ${Mapper.asString(self.isDeleted)}, auditDetails: ${Mapper.asString(self.auditDetails)}, additionalFields: ${Mapper.asString(self.additionalFields)}, id: ${Mapper.asString(self.id)}, projectId: ${Mapper.asString(self.projectId)}, beneficiaryId: ${Mapper.asString(self.beneficiaryId)}, beneficiaryClientReferenceId: ${Mapper.asString(self.beneficiaryClientReferenceId)}, beneficiaryRegistrationDateLte: ${Mapper.asString(self.beneficiaryRegistrationDateLte)}, beneficiaryRegistrationDateGte: ${Mapper.asString(self.beneficiaryRegistrationDateGte)}, clientReferenceId: ${Mapper.asString(self.clientReferenceId)}, tenantId: ${Mapper.asString(self.tenantId)}, dateOfRegistrationTime: ${Mapper.asString(self.dateOfRegistrationTime)})'; - @override int hash(ProjectBeneficiarySearchModel self) => Mapper.hash(self.boundaryCode) ^ Mapper.hash(self.isDeleted) ^ Mapper.hash(self.auditDetails) ^ Mapper.hash(self.additionalFields) ^ Mapper.hash(self.id) ^ Mapper.hash(self.projectId) ^ Mapper.hash(self.beneficiaryId) ^ Mapper.hash(self.beneficiaryClientReferenceId) ^ Mapper.hash(self.beneficiaryRegistrationDateLte) ^ Mapper.hash(self.beneficiaryRegistrationDateGte) ^ Mapper.hash(self.clientReferenceId) ^ Mapper.hash(self.tenantId) ^ Mapper.hash(self.dateOfRegistrationTime); - @override bool equals(ProjectBeneficiarySearchModel self, ProjectBeneficiarySearchModel other) => Mapper.isEqual(self.boundaryCode, other.boundaryCode) && Mapper.isEqual(self.isDeleted, other.isDeleted) && Mapper.isEqual(self.auditDetails, other.auditDetails) && Mapper.isEqual(self.additionalFields, other.additionalFields) && Mapper.isEqual(self.id, other.id) && Mapper.isEqual(self.projectId, other.projectId) && Mapper.isEqual(self.beneficiaryId, other.beneficiaryId) && Mapper.isEqual(self.beneficiaryClientReferenceId, other.beneficiaryClientReferenceId) && Mapper.isEqual(self.beneficiaryRegistrationDateLte, other.beneficiaryRegistrationDateLte) && Mapper.isEqual(self.beneficiaryRegistrationDateGte, other.beneficiaryRegistrationDateGte) && Mapper.isEqual(self.clientReferenceId, other.clientReferenceId) && Mapper.isEqual(self.tenantId, other.tenantId) && Mapper.isEqual(self.dateOfRegistrationTime, other.dateOfRegistrationTime); + @override String stringify(ProjectBeneficiarySearchModel self) => 'ProjectBeneficiarySearchModel(boundaryCode: ${Mapper.asString(self.boundaryCode)}, isDeleted: ${Mapper.asString(self.isDeleted)}, auditDetails: ${Mapper.asString(self.auditDetails)}, additionalFields: ${Mapper.asString(self.additionalFields)}, id: ${Mapper.asString(self.id)}, projectId: ${Mapper.asString(self.projectId)}, beneficiaryId: ${Mapper.asString(self.beneficiaryId)}, tag: ${Mapper.asString(self.tag)}, beneficiaryClientReferenceId: ${Mapper.asString(self.beneficiaryClientReferenceId)}, beneficiaryRegistrationDateLte: ${Mapper.asString(self.beneficiaryRegistrationDateLte)}, beneficiaryRegistrationDateGte: ${Mapper.asString(self.beneficiaryRegistrationDateGte)}, clientReferenceId: ${Mapper.asString(self.clientReferenceId)}, tenantId: ${Mapper.asString(self.tenantId)}, dateOfRegistrationTime: ${Mapper.asString(self.dateOfRegistrationTime)})'; + @override int hash(ProjectBeneficiarySearchModel self) => Mapper.hash(self.boundaryCode) ^ Mapper.hash(self.isDeleted) ^ Mapper.hash(self.auditDetails) ^ Mapper.hash(self.additionalFields) ^ Mapper.hash(self.id) ^ Mapper.hash(self.projectId) ^ Mapper.hash(self.beneficiaryId) ^ Mapper.hash(self.tag) ^ Mapper.hash(self.beneficiaryClientReferenceId) ^ Mapper.hash(self.beneficiaryRegistrationDateLte) ^ Mapper.hash(self.beneficiaryRegistrationDateGte) ^ Mapper.hash(self.clientReferenceId) ^ Mapper.hash(self.tenantId) ^ Mapper.hash(self.dateOfRegistrationTime); + @override bool equals(ProjectBeneficiarySearchModel self, ProjectBeneficiarySearchModel other) => Mapper.isEqual(self.boundaryCode, other.boundaryCode) && Mapper.isEqual(self.isDeleted, other.isDeleted) && Mapper.isEqual(self.auditDetails, other.auditDetails) && Mapper.isEqual(self.additionalFields, other.additionalFields) && Mapper.isEqual(self.id, other.id) && Mapper.isEqual(self.projectId, other.projectId) && Mapper.isEqual(self.beneficiaryId, other.beneficiaryId) && Mapper.isEqual(self.tag, other.tag) && Mapper.isEqual(self.beneficiaryClientReferenceId, other.beneficiaryClientReferenceId) && Mapper.isEqual(self.beneficiaryRegistrationDateLte, other.beneficiaryRegistrationDateLte) && Mapper.isEqual(self.beneficiaryRegistrationDateGte, other.beneficiaryRegistrationDateGte) && Mapper.isEqual(self.clientReferenceId, other.clientReferenceId) && Mapper.isEqual(self.tenantId, other.tenantId) && Mapper.isEqual(self.dateOfRegistrationTime, other.dateOfRegistrationTime); @override Function get typeFactory => (f) => f(); } @@ -2132,14 +2132,14 @@ extension ProjectBeneficiarySearchModelMapperExtension on ProjectBeneficiarySea abstract class ProjectBeneficiarySearchModelCopyWith<$R> { factory ProjectBeneficiarySearchModelCopyWith(ProjectBeneficiarySearchModel value, Then then) = _ProjectBeneficiarySearchModelCopyWithImpl<$R>; - $R call({String? id, String? projectId, String? beneficiaryId, List? beneficiaryClientReferenceId, DateTime? beneficiaryRegistrationDateLte, DateTime? beneficiaryRegistrationDateGte, List? clientReferenceId, String? tenantId, int? dateOfRegistration, String? boundaryCode}); + $R call({String? id, String? projectId, String? beneficiaryId, String? tag, List? beneficiaryClientReferenceId, DateTime? beneficiaryRegistrationDateLte, DateTime? beneficiaryRegistrationDateGte, List? clientReferenceId, String? tenantId, int? dateOfRegistration, String? boundaryCode}); $R apply(ProjectBeneficiarySearchModel Function(ProjectBeneficiarySearchModel) transform); } class _ProjectBeneficiarySearchModelCopyWithImpl<$R> extends BaseCopyWith implements ProjectBeneficiarySearchModelCopyWith<$R> { _ProjectBeneficiarySearchModelCopyWithImpl(ProjectBeneficiarySearchModel value, Then then) : super(value, then); - @override $R call({Object? id = $none, Object? projectId = $none, Object? beneficiaryId = $none, Object? beneficiaryClientReferenceId = $none, Object? beneficiaryRegistrationDateLte = $none, Object? beneficiaryRegistrationDateGte = $none, Object? clientReferenceId = $none, Object? tenantId = $none, Object? dateOfRegistration = $none, Object? boundaryCode = $none}) => $then(ProjectBeneficiarySearchModel.ignoreDeleted(id: or(id, $value.id), projectId: or(projectId, $value.projectId), beneficiaryId: or(beneficiaryId, $value.beneficiaryId), beneficiaryClientReferenceId: or(beneficiaryClientReferenceId, $value.beneficiaryClientReferenceId), beneficiaryRegistrationDateLte: or(beneficiaryRegistrationDateLte, $value.beneficiaryRegistrationDateLte), beneficiaryRegistrationDateGte: or(beneficiaryRegistrationDateGte, $value.beneficiaryRegistrationDateGte), clientReferenceId: or(clientReferenceId, $value.clientReferenceId), tenantId: or(tenantId, $value.tenantId), dateOfRegistration: or(dateOfRegistration, $value.dateOfRegistration), boundaryCode: or(boundaryCode, $value.boundaryCode))); + @override $R call({Object? id = $none, Object? projectId = $none, Object? beneficiaryId = $none, Object? tag = $none, Object? beneficiaryClientReferenceId = $none, Object? beneficiaryRegistrationDateLte = $none, Object? beneficiaryRegistrationDateGte = $none, Object? clientReferenceId = $none, Object? tenantId = $none, Object? dateOfRegistration = $none, Object? boundaryCode = $none}) => $then(ProjectBeneficiarySearchModel.ignoreDeleted(id: or(id, $value.id), projectId: or(projectId, $value.projectId), beneficiaryId: or(beneficiaryId, $value.beneficiaryId), tag: or(tag, $value.tag), beneficiaryClientReferenceId: or(beneficiaryClientReferenceId, $value.beneficiaryClientReferenceId), beneficiaryRegistrationDateLte: or(beneficiaryRegistrationDateLte, $value.beneficiaryRegistrationDateLte), beneficiaryRegistrationDateGte: or(beneficiaryRegistrationDateGte, $value.beneficiaryRegistrationDateGte), clientReferenceId: or(clientReferenceId, $value.clientReferenceId), tenantId: or(tenantId, $value.tenantId), dateOfRegistration: or(dateOfRegistration, $value.dateOfRegistration), boundaryCode: or(boundaryCode, $value.boundaryCode))); } class ProjectBeneficiaryModelMapper extends BaseMapper { @@ -2147,15 +2147,15 @@ class ProjectBeneficiaryModelMapper extends BaseMapper @override Function get decoder => decode; ProjectBeneficiaryModel decode(dynamic v) => checked(v, (Map map) => fromMap(map)); - ProjectBeneficiaryModel fromMap(Map map) => ProjectBeneficiaryModel(additionalFields: Mapper.i.$getOpt(map, 'additionalFields'), id: Mapper.i.$getOpt(map, 'id'), projectId: Mapper.i.$getOpt(map, 'projectId'), beneficiaryId: Mapper.i.$getOpt(map, 'beneficiaryId'), beneficiaryClientReferenceId: Mapper.i.$getOpt(map, 'beneficiaryClientReferenceId'), nonRecoverableError: Mapper.i.$getOpt(map, 'nonRecoverableError') ?? false, clientReferenceId: Mapper.i.$get(map, 'clientReferenceId'), tenantId: Mapper.i.$getOpt(map, 'tenantId'), rowVersion: Mapper.i.$getOpt(map, 'rowVersion'), dateOfRegistration: Mapper.i.$get(map, 'dateOfRegistration'), auditDetails: Mapper.i.$getOpt(map, 'auditDetails'), clientAuditDetails: Mapper.i.$getOpt(map, 'clientAuditDetails'), isDeleted: Mapper.i.$getOpt(map, 'isDeleted') ?? false); + ProjectBeneficiaryModel fromMap(Map map) => ProjectBeneficiaryModel(additionalFields: Mapper.i.$getOpt(map, 'additionalFields'), id: Mapper.i.$getOpt(map, 'id'), projectId: Mapper.i.$getOpt(map, 'projectId'), beneficiaryId: Mapper.i.$getOpt(map, 'beneficiaryId'), tag: Mapper.i.$getOpt(map, 'tag'), beneficiaryClientReferenceId: Mapper.i.$getOpt(map, 'beneficiaryClientReferenceId'), nonRecoverableError: Mapper.i.$getOpt(map, 'nonRecoverableError') ?? false, clientReferenceId: Mapper.i.$get(map, 'clientReferenceId'), tenantId: Mapper.i.$getOpt(map, 'tenantId'), rowVersion: Mapper.i.$getOpt(map, 'rowVersion'), dateOfRegistration: Mapper.i.$get(map, 'dateOfRegistration'), auditDetails: Mapper.i.$getOpt(map, 'auditDetails'), clientAuditDetails: Mapper.i.$getOpt(map, 'clientAuditDetails'), isDeleted: Mapper.i.$getOpt(map, 'isDeleted') ?? false); @override Function get encoder => (ProjectBeneficiaryModel v) => encode(v); dynamic encode(ProjectBeneficiaryModel v) => toMap(v); - Map toMap(ProjectBeneficiaryModel p) => {if (Mapper.i.$enc(p.additionalFields, 'additionalFields') != null) 'additionalFields': Mapper.i.$enc(p.additionalFields, 'additionalFields'), if (Mapper.i.$enc(p.id, 'id') != null) 'id': Mapper.i.$enc(p.id, 'id'), if (Mapper.i.$enc(p.projectId, 'projectId') != null) 'projectId': Mapper.i.$enc(p.projectId, 'projectId'), if (Mapper.i.$enc(p.beneficiaryId, 'beneficiaryId') != null) 'beneficiaryId': Mapper.i.$enc(p.beneficiaryId, 'beneficiaryId'), if (Mapper.i.$enc(p.beneficiaryClientReferenceId, 'beneficiaryClientReferenceId') != null) 'beneficiaryClientReferenceId': Mapper.i.$enc(p.beneficiaryClientReferenceId, 'beneficiaryClientReferenceId'), if (Mapper.i.$enc(p.nonRecoverableError, 'nonRecoverableError') != null) 'nonRecoverableError': Mapper.i.$enc(p.nonRecoverableError, 'nonRecoverableError'), 'clientReferenceId': Mapper.i.$enc(p.clientReferenceId, 'clientReferenceId'), if (Mapper.i.$enc(p.tenantId, 'tenantId') != null) 'tenantId': Mapper.i.$enc(p.tenantId, 'tenantId'), if (Mapper.i.$enc(p.rowVersion, 'rowVersion') != null) 'rowVersion': Mapper.i.$enc(p.rowVersion, 'rowVersion'), 'dateOfRegistration': Mapper.i.$enc(p.dateOfRegistration, 'dateOfRegistration'), if (Mapper.i.$enc(p.auditDetails, 'auditDetails') != null) 'auditDetails': Mapper.i.$enc(p.auditDetails, 'auditDetails'), if (Mapper.i.$enc(p.clientAuditDetails, 'clientAuditDetails') != null) 'clientAuditDetails': Mapper.i.$enc(p.clientAuditDetails, 'clientAuditDetails'), if (Mapper.i.$enc(p.isDeleted, 'isDeleted') != null) 'isDeleted': Mapper.i.$enc(p.isDeleted, 'isDeleted')}; + Map toMap(ProjectBeneficiaryModel p) => {if (Mapper.i.$enc(p.additionalFields, 'additionalFields') != null) 'additionalFields': Mapper.i.$enc(p.additionalFields, 'additionalFields'), if (Mapper.i.$enc(p.id, 'id') != null) 'id': Mapper.i.$enc(p.id, 'id'), if (Mapper.i.$enc(p.projectId, 'projectId') != null) 'projectId': Mapper.i.$enc(p.projectId, 'projectId'), if (Mapper.i.$enc(p.beneficiaryId, 'beneficiaryId') != null) 'beneficiaryId': Mapper.i.$enc(p.beneficiaryId, 'beneficiaryId'), if (Mapper.i.$enc(p.tag, 'tag') != null) 'tag': Mapper.i.$enc(p.tag, 'tag'), if (Mapper.i.$enc(p.beneficiaryClientReferenceId, 'beneficiaryClientReferenceId') != null) 'beneficiaryClientReferenceId': Mapper.i.$enc(p.beneficiaryClientReferenceId, 'beneficiaryClientReferenceId'), if (Mapper.i.$enc(p.nonRecoverableError, 'nonRecoverableError') != null) 'nonRecoverableError': Mapper.i.$enc(p.nonRecoverableError, 'nonRecoverableError'), 'clientReferenceId': Mapper.i.$enc(p.clientReferenceId, 'clientReferenceId'), if (Mapper.i.$enc(p.tenantId, 'tenantId') != null) 'tenantId': Mapper.i.$enc(p.tenantId, 'tenantId'), if (Mapper.i.$enc(p.rowVersion, 'rowVersion') != null) 'rowVersion': Mapper.i.$enc(p.rowVersion, 'rowVersion'), 'dateOfRegistration': Mapper.i.$enc(p.dateOfRegistration, 'dateOfRegistration'), if (Mapper.i.$enc(p.auditDetails, 'auditDetails') != null) 'auditDetails': Mapper.i.$enc(p.auditDetails, 'auditDetails'), if (Mapper.i.$enc(p.clientAuditDetails, 'clientAuditDetails') != null) 'clientAuditDetails': Mapper.i.$enc(p.clientAuditDetails, 'clientAuditDetails'), if (Mapper.i.$enc(p.isDeleted, 'isDeleted') != null) 'isDeleted': Mapper.i.$enc(p.isDeleted, 'isDeleted')}; - @override String stringify(ProjectBeneficiaryModel self) => 'ProjectBeneficiaryModel(boundaryCode: ${Mapper.asString(self.boundaryCode)}, isDeleted: ${Mapper.asString(self.isDeleted)}, auditDetails: ${Mapper.asString(self.auditDetails)}, clientAuditDetails: ${Mapper.asString(self.clientAuditDetails)}, id: ${Mapper.asString(self.id)}, projectId: ${Mapper.asString(self.projectId)}, beneficiaryId: ${Mapper.asString(self.beneficiaryId)}, beneficiaryClientReferenceId: ${Mapper.asString(self.beneficiaryClientReferenceId)}, nonRecoverableError: ${Mapper.asString(self.nonRecoverableError)}, clientReferenceId: ${Mapper.asString(self.clientReferenceId)}, tenantId: ${Mapper.asString(self.tenantId)}, rowVersion: ${Mapper.asString(self.rowVersion)}, dateOfRegistrationTime: ${Mapper.asString(self.dateOfRegistrationTime)}, additionalFields: ${Mapper.asString(self.additionalFields)})'; - @override int hash(ProjectBeneficiaryModel self) => Mapper.hash(self.boundaryCode) ^ Mapper.hash(self.isDeleted) ^ Mapper.hash(self.auditDetails) ^ Mapper.hash(self.clientAuditDetails) ^ Mapper.hash(self.id) ^ Mapper.hash(self.projectId) ^ Mapper.hash(self.beneficiaryId) ^ Mapper.hash(self.beneficiaryClientReferenceId) ^ Mapper.hash(self.nonRecoverableError) ^ Mapper.hash(self.clientReferenceId) ^ Mapper.hash(self.tenantId) ^ Mapper.hash(self.rowVersion) ^ Mapper.hash(self.dateOfRegistrationTime) ^ Mapper.hash(self.additionalFields); - @override bool equals(ProjectBeneficiaryModel self, ProjectBeneficiaryModel other) => Mapper.isEqual(self.boundaryCode, other.boundaryCode) && Mapper.isEqual(self.isDeleted, other.isDeleted) && Mapper.isEqual(self.auditDetails, other.auditDetails) && Mapper.isEqual(self.clientAuditDetails, other.clientAuditDetails) && Mapper.isEqual(self.id, other.id) && Mapper.isEqual(self.projectId, other.projectId) && Mapper.isEqual(self.beneficiaryId, other.beneficiaryId) && Mapper.isEqual(self.beneficiaryClientReferenceId, other.beneficiaryClientReferenceId) && Mapper.isEqual(self.nonRecoverableError, other.nonRecoverableError) && Mapper.isEqual(self.clientReferenceId, other.clientReferenceId) && Mapper.isEqual(self.tenantId, other.tenantId) && Mapper.isEqual(self.rowVersion, other.rowVersion) && Mapper.isEqual(self.dateOfRegistrationTime, other.dateOfRegistrationTime) && Mapper.isEqual(self.additionalFields, other.additionalFields); + @override String stringify(ProjectBeneficiaryModel self) => 'ProjectBeneficiaryModel(boundaryCode: ${Mapper.asString(self.boundaryCode)}, isDeleted: ${Mapper.asString(self.isDeleted)}, auditDetails: ${Mapper.asString(self.auditDetails)}, clientAuditDetails: ${Mapper.asString(self.clientAuditDetails)}, id: ${Mapper.asString(self.id)}, projectId: ${Mapper.asString(self.projectId)}, beneficiaryId: ${Mapper.asString(self.beneficiaryId)}, tag: ${Mapper.asString(self.tag)}, beneficiaryClientReferenceId: ${Mapper.asString(self.beneficiaryClientReferenceId)}, nonRecoverableError: ${Mapper.asString(self.nonRecoverableError)}, clientReferenceId: ${Mapper.asString(self.clientReferenceId)}, tenantId: ${Mapper.asString(self.tenantId)}, rowVersion: ${Mapper.asString(self.rowVersion)}, dateOfRegistrationTime: ${Mapper.asString(self.dateOfRegistrationTime)}, additionalFields: ${Mapper.asString(self.additionalFields)})'; + @override int hash(ProjectBeneficiaryModel self) => Mapper.hash(self.boundaryCode) ^ Mapper.hash(self.isDeleted) ^ Mapper.hash(self.auditDetails) ^ Mapper.hash(self.clientAuditDetails) ^ Mapper.hash(self.id) ^ Mapper.hash(self.projectId) ^ Mapper.hash(self.beneficiaryId) ^ Mapper.hash(self.tag) ^ Mapper.hash(self.beneficiaryClientReferenceId) ^ Mapper.hash(self.nonRecoverableError) ^ Mapper.hash(self.clientReferenceId) ^ Mapper.hash(self.tenantId) ^ Mapper.hash(self.rowVersion) ^ Mapper.hash(self.dateOfRegistrationTime) ^ Mapper.hash(self.additionalFields); + @override bool equals(ProjectBeneficiaryModel self, ProjectBeneficiaryModel other) => Mapper.isEqual(self.boundaryCode, other.boundaryCode) && Mapper.isEqual(self.isDeleted, other.isDeleted) && Mapper.isEqual(self.auditDetails, other.auditDetails) && Mapper.isEqual(self.clientAuditDetails, other.clientAuditDetails) && Mapper.isEqual(self.id, other.id) && Mapper.isEqual(self.projectId, other.projectId) && Mapper.isEqual(self.beneficiaryId, other.beneficiaryId) && Mapper.isEqual(self.tag, other.tag) && Mapper.isEqual(self.beneficiaryClientReferenceId, other.beneficiaryClientReferenceId) && Mapper.isEqual(self.nonRecoverableError, other.nonRecoverableError) && Mapper.isEqual(self.clientReferenceId, other.clientReferenceId) && Mapper.isEqual(self.tenantId, other.tenantId) && Mapper.isEqual(self.rowVersion, other.rowVersion) && Mapper.isEqual(self.dateOfRegistrationTime, other.dateOfRegistrationTime) && Mapper.isEqual(self.additionalFields, other.additionalFields); @override Function get typeFactory => (f) => f(); } @@ -2171,7 +2171,7 @@ abstract class ProjectBeneficiaryModelCopyWith<$R> { ProjectBeneficiaryAdditionalFieldsCopyWith<$R>? get additionalFields; AuditDetailsCopyWith<$R>? get auditDetails; ClientAuditDetailsCopyWith<$R>? get clientAuditDetails; - $R call({ProjectBeneficiaryAdditionalFields? additionalFields, String? id, String? projectId, String? beneficiaryId, String? beneficiaryClientReferenceId, bool? nonRecoverableError, String? clientReferenceId, String? tenantId, int? rowVersion, int? dateOfRegistration, AuditDetails? auditDetails, ClientAuditDetails? clientAuditDetails, bool? isDeleted}); + $R call({ProjectBeneficiaryAdditionalFields? additionalFields, String? id, String? projectId, String? beneficiaryId, String? tag, String? beneficiaryClientReferenceId, bool? nonRecoverableError, String? clientReferenceId, String? tenantId, int? rowVersion, int? dateOfRegistration, AuditDetails? auditDetails, ClientAuditDetails? clientAuditDetails, bool? isDeleted}); $R apply(ProjectBeneficiaryModel Function(ProjectBeneficiaryModel) transform); } @@ -2181,7 +2181,7 @@ class _ProjectBeneficiaryModelCopyWithImpl<$R> extends BaseCopyWith? get additionalFields => $value.additionalFields != null ? ProjectBeneficiaryAdditionalFieldsCopyWith($value.additionalFields!, (v) => call(additionalFields: v)) : null; @override AuditDetailsCopyWith<$R>? get auditDetails => $value.auditDetails != null ? AuditDetailsCopyWith($value.auditDetails!, (v) => call(auditDetails: v)) : null; @override ClientAuditDetailsCopyWith<$R>? get clientAuditDetails => $value.clientAuditDetails != null ? ClientAuditDetailsCopyWith($value.clientAuditDetails!, (v) => call(clientAuditDetails: v)) : null; - @override $R call({Object? additionalFields = $none, Object? id = $none, Object? projectId = $none, Object? beneficiaryId = $none, Object? beneficiaryClientReferenceId = $none, Object? nonRecoverableError = $none, String? clientReferenceId, Object? tenantId = $none, Object? rowVersion = $none, int? dateOfRegistration, Object? auditDetails = $none, Object? clientAuditDetails = $none, Object? isDeleted = $none}) => $then(ProjectBeneficiaryModel(additionalFields: or(additionalFields, $value.additionalFields), id: or(id, $value.id), projectId: or(projectId, $value.projectId), beneficiaryId: or(beneficiaryId, $value.beneficiaryId), beneficiaryClientReferenceId: or(beneficiaryClientReferenceId, $value.beneficiaryClientReferenceId), nonRecoverableError: or(nonRecoverableError, $value.nonRecoverableError), clientReferenceId: clientReferenceId ?? $value.clientReferenceId, tenantId: or(tenantId, $value.tenantId), rowVersion: or(rowVersion, $value.rowVersion), dateOfRegistration: dateOfRegistration ?? $value.dateOfRegistration, auditDetails: or(auditDetails, $value.auditDetails), clientAuditDetails: or(clientAuditDetails, $value.clientAuditDetails), isDeleted: or(isDeleted, $value.isDeleted))); + @override $R call({Object? additionalFields = $none, Object? id = $none, Object? projectId = $none, Object? beneficiaryId = $none, Object? tag = $none, Object? beneficiaryClientReferenceId = $none, Object? nonRecoverableError = $none, String? clientReferenceId, Object? tenantId = $none, Object? rowVersion = $none, int? dateOfRegistration, Object? auditDetails = $none, Object? clientAuditDetails = $none, Object? isDeleted = $none}) => $then(ProjectBeneficiaryModel(additionalFields: or(additionalFields, $value.additionalFields), id: or(id, $value.id), projectId: or(projectId, $value.projectId), beneficiaryId: or(beneficiaryId, $value.beneficiaryId), tag: or(tag, $value.tag), beneficiaryClientReferenceId: or(beneficiaryClientReferenceId, $value.beneficiaryClientReferenceId), nonRecoverableError: or(nonRecoverableError, $value.nonRecoverableError), clientReferenceId: clientReferenceId ?? $value.clientReferenceId, tenantId: or(tenantId, $value.tenantId), rowVersion: or(rowVersion, $value.rowVersion), dateOfRegistration: dateOfRegistration ?? $value.dateOfRegistration, auditDetails: or(auditDetails, $value.auditDetails), clientAuditDetails: or(clientAuditDetails, $value.clientAuditDetails), isDeleted: or(isDeleted, $value.isDeleted))); } class ProjectBeneficiaryAdditionalFieldsMapper extends BaseMapper { @@ -5157,4 +5157,4 @@ mixin Mappable implements MappableMixin { } } } -} +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/project_beneficiary.dart b/apps/health_campaign_field_worker_app/lib/models/entities/project_beneficiary.dart index cc598c260..04aeec021 100644 --- a/apps/health_campaign_field_worker_app/lib/models/entities/project_beneficiary.dart +++ b/apps/health_campaign_field_worker_app/lib/models/entities/project_beneficiary.dart @@ -10,6 +10,7 @@ class ProjectBeneficiarySearchModel extends EntitySearchModel { final String? id; final String? projectId; final String? beneficiaryId; + final String? tag; final List? beneficiaryClientReferenceId; final DateTime? beneficiaryRegistrationDateLte; final DateTime? beneficiaryRegistrationDateGte; @@ -21,6 +22,7 @@ class ProjectBeneficiarySearchModel extends EntitySearchModel { this.id, this.projectId, this.beneficiaryId, + this.tag, this.beneficiaryClientReferenceId, this.beneficiaryRegistrationDateLte, this.beneficiaryRegistrationDateGte, @@ -39,6 +41,7 @@ class ProjectBeneficiarySearchModel extends EntitySearchModel { this.id, this.projectId, this.beneficiaryId, + this.tag, this.beneficiaryClientReferenceId, this.beneficiaryRegistrationDateLte, this.beneficiaryRegistrationDateGte, @@ -63,6 +66,7 @@ class ProjectBeneficiaryModel extends EntityModel { final String? id; final String? projectId; final String? beneficiaryId; + final String? tag; final String? beneficiaryClientReferenceId; final bool? nonRecoverableError; final String clientReferenceId; @@ -76,6 +80,7 @@ class ProjectBeneficiaryModel extends EntityModel { this.id, this.projectId, this.beneficiaryId, + this.tag, this.beneficiaryClientReferenceId, this.nonRecoverableError = false, required this.clientReferenceId, @@ -105,6 +110,7 @@ class ProjectBeneficiaryModel extends EntityModel { id: Value(id), projectId: Value(projectId), beneficiaryId: Value(beneficiaryId), + tag: Value(tag), beneficiaryClientReferenceId: Value(beneficiaryClientReferenceId), nonRecoverableError: Value(nonRecoverableError), clientReferenceId: Value(clientReferenceId), diff --git a/apps/health_campaign_field_worker_app/lib/models/entities/scanner_type.dart b/apps/health_campaign_field_worker_app/lib/models/entities/scanner_type.dart new file mode 100644 index 000000000..85e1038d0 --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/models/entities/scanner_type.dart @@ -0,0 +1,10 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; + +@MappableEnum(caseStyle: CaseStyle.upperCase) +enum ScannerType { + @MappableValue("GS1_SCANNER") gS1Scanner, + @MappableValue("VOUCHER_LINK_SCANNER") voucherLinkScanner, + @MappableValue("VOUCHER_SEARCH_SCANNER") voucherSearchScanner, + ; +} \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/models/model_configs/enum_scannertype.json b/apps/health_campaign_field_worker_app/lib/models/model_configs/enum_scannertype.json new file mode 100644 index 000000000..1b41ed593 --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/models/model_configs/enum_scannertype.json @@ -0,0 +1,18 @@ +{ + "name": "ScannerType", + "enumValues": [ + { + "name": "GS1Scanner", + "value": "GS1_SCANNER" + }, + { + "name": "VoucherLinkScanner", + "value": "VOUCHER_LINK_SCANNER" + }, + { + "name": "VoucherSearchScanner", + "value": "VOUCHER_SEARCH_SCANNER" + } + ], + "isEnum": true + } \ No newline at end of file diff --git a/apps/health_campaign_field_worker_app/lib/models/model_configs/project_beneficiary.json b/apps/health_campaign_field_worker_app/lib/models/model_configs/project_beneficiary.json index b500d0d8f..9ff66f53a 100644 --- a/apps/health_campaign_field_worker_app/lib/models/model_configs/project_beneficiary.json +++ b/apps/health_campaign_field_worker_app/lib/models/model_configs/project_beneficiary.json @@ -18,6 +18,15 @@ "type": "String", "includeForQuery": true }, + { + "name":"tag", + "type": "String", + "includeForQuery":true, + "includeForEntity": true, + "nullable": true, + "includeForTable": true + }, + { "name": "beneficiaryClientReferenceId", "type": "String", diff --git a/apps/health_campaign_field_worker_app/lib/pages/beneficiary/deliver_intervention.dart b/apps/health_campaign_field_worker_app/lib/pages/beneficiary/deliver_intervention.dart index 383e7caff..28943c675 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/beneficiary/deliver_intervention.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/beneficiary/deliver_intervention.dart @@ -118,19 +118,6 @@ class _DeliverInterventionPageState 0 : 0; - final String? getDeliveryStrategy = (projectState - .projectType?.cycles ?? - []) - .isNotEmpty - ? (projectState - .projectType - ?.cycles?[deliveryInterventionstate.cycle == 0 - ? deliveryInterventionstate.cycle - : deliveryInterventionstate.cycle - 1] - .deliveries?[deliveryInterventionstate.dose - 1] - .deliveryStrategy) - : DeliverStrategyType.direct.toValue(); - final steps = generateSteps(numberOfDoses); return BlocBuilder DigitActionDialog.show( - context, - widget: ActionCard( - items: [ - ActionCardModel( - icon: Icons.edit, - label: localizations.translate( - i18.householdOverView - .householdOverViewEditLabel, - ), - action: () async { - final projectId = - context.projectId; - - final bloc = context.read< - HouseholdOverviewBloc>(); - Navigator.of( - context, - rootNavigator: true, - ).pop(); - - HouseholdMemberWrapper - wrapper = state - .householdMemberWrapper; - - final timestamp = wrapper - .projectBeneficiaries - .first - .dateOfRegistration; - // [TODO ] - final date = DateTime - .fromMillisecondsSinceEpoch( - timestamp, - ); - - final address = - wrapper.household.address; - - if (address == null) return; - - await context.router.root - .push( - BeneficiaryRegistrationWrapperRoute( - initialState: - BeneficiaryRegistrationEditHouseholdState( - addressModel: address, - individualModel: - wrapper.members, - householdModel: - wrapper.household, - registrationDate: date, - ), - children: [ - HouseholdLocationRoute(), - ], - ), - ); - - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: - beneficiaryType, + BlocBuilder( + builder: (context, projectState) { + return DigitIconButton( + onPressed: () => + DigitActionDialog.show( + context, + widget: ActionCard( + items: [ + ActionCardModel( + icon: Icons.edit, + label: + localizations.translate( + i18.householdOverView + .householdOverViewEditLabel, ), - ); - }, - ), - ActionCardModel( - icon: Icons.delete, - label: localizations.translate(i18 - .householdOverView - .householdOverViewDeleteLabel), - action: () => DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations + action: () async { + final projectId = + context.projectId; + + final bloc = context.read< + HouseholdOverviewBloc>(); + Navigator.of( + context, + rootNavigator: true, + ).pop(); + + HouseholdMemberWrapper + wrapper = state + .householdMemberWrapper; + + final timestamp = wrapper + .projectBeneficiaries + .first + .dateOfRegistration; + // [TODO ] + final date = DateTime + .fromMillisecondsSinceEpoch( + timestamp, + ); + + final address = wrapper + .household.address; + + if (address == null) + return; + + final projectBeneficiary = state + .householdMemberWrapper + .projectBeneficiaries + .firstWhereOrNull( + (element) => + element + .beneficiaryClientReferenceId == + wrapper.household + .clientReferenceId, + ); + + await context.router.root + .push( + BeneficiaryRegistrationWrapperRoute( + initialState: + BeneficiaryRegistrationEditHouseholdState( + addressModel: + address, + individualModel: + wrapper.members, + householdModel: + wrapper + .household, + registrationDate: + date, + projectBeneficiaryModel: + projectBeneficiary, + ), + children: [ + HouseholdLocationRoute(), + ], + ), + ); + + bloc.add( + HouseholdOverviewReloadEvent( + projectId: projectId, + projectBeneficiaryType: + beneficiaryType, + ), + ); + }, + ), + ActionCardModel( + icon: Icons.delete, + label: localizations .translate(i18 .householdOverView - .householdOverViewActionCardTitle), - primaryAction: - DigitDialogActions( - label: localizations - .translate(i18 - .householdOverView - .householdOverViewPrimaryActionLabel), - action: (ctx) { - Navigator.of( - ctx, - rootNavigator: true, - ) - ..pop() - ..pop(); - context.router.push( - ReasonForDeletionRoute( - isHousholdDelete: - true, - ), - ); - }, - ), - secondaryAction: - DigitDialogActions( - label: localizations - .translate(i18 - .householdOverView - .householdOverViewSecondaryActionLabel), - action: (context) { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - }, + .householdOverViewDeleteLabel), + action: () => + DigitDialog.show( + context, + options: + DigitDialogOptions( + titleText: localizations + .translate(i18 + .householdOverView + .householdOverViewActionCardTitle), + primaryAction: + DigitDialogActions( + label: localizations + .translate(i18 + .householdOverView + .householdOverViewPrimaryActionLabel), + action: (ctx) { + Navigator.of( + ctx, + rootNavigator: + true, + ) + ..pop() + ..pop(); + context.router.push( + ReasonForDeletionRoute( + isHousholdDelete: + true, + ), + ); + }, + ), + secondaryAction: + DigitDialogActions( + label: localizations + .translate(i18 + .householdOverView + .householdOverViewSecondaryActionLabel), + action: (context) { + Navigator.of( + context, + rootNavigator: + true, + ).pop(); + }, + ), + ), ), ), - ), + ], ), - ], - ), - ), - iconText: localizations.translate( - i18.householdOverView - .householdOverViewEditIconText, - ), - icon: Icons.edit, + ), + iconText: localizations.translate( + i18.householdOverView + .householdOverViewEditIconText, + ), + icon: Icons.edit, + ); + }, ), ], ), @@ -389,6 +418,14 @@ class _HouseholdOverviewPageState tasks: taskdata, sideEffects: sideEffectData, editMemberAction: () async { + final scannerbloc = + context.read(); + + scannerbloc.add( + const ScannerEvent + .handleScanner([], []), + ); + final bloc = ctx.read< HouseholdOverviewBloc>(); @@ -416,6 +453,15 @@ class _HouseholdOverviewPageState .household, addressModel: address.first, + projectBeneficiaryModel: state + .householdMemberWrapper + .projectBeneficiaries + .firstWhereOrNull( + (element) => + element + .beneficiaryClientReferenceId == + e.clientReferenceId, + ), ), children: [ IndividualDetailsRoute( @@ -600,6 +646,12 @@ class _HouseholdOverviewPageState final projectId = context.projectId; + context.read().add( + const ScannerEvent.handleScanner( + [], + [], + ), + ); await context.router.push( BeneficiaryRegistrationWrapperRoute( initialState: diff --git a/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/household_details.dart b/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/household_details.dart index b35cb1a47..c986085bc 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/household_details.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/household_details.dart @@ -115,6 +115,7 @@ class _HouseHoldDetailsPageState extends LocalizedState { householdModel, individuals, registrationDate, + projectBeneficiaryModel, loading, ) { var household = householdModel.copyWith( diff --git a/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/household_location.dart b/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/household_location.dart index 0db1c7cd1..9cdb44dac 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/household_location.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/household_location.dart @@ -161,6 +161,7 @@ class _HouseholdLocationPageState householdModel, individuals, registrationDate, + projectBeneficiaryModel, loading, ) { var addressModel = address.copyWith( @@ -187,6 +188,7 @@ class _HouseholdLocationPageState locationAccuracy: form.control(_accuracyKey).value, ); + // TODO [Linking of Voucher for Household based project need to be handled] bloc.add( BeneficiaryRegistrationSaveAddressEvent( diff --git a/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/individual_details.dart b/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/individual_details.dart index ac20f65d6..160049f5a 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/individual_details.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/beneficiary_registration/individual_details.dart @@ -2,6 +2,7 @@ import 'package:collection/collection.dart'; import 'package:digit_components/digit_components.dart'; import 'package:digit_components/utils/date_utils.dart'; import 'package:digit_components/widgets/atoms/digit_checkbox.dart'; +import 'package:digit_components/widgets/atoms/digit_toaster.dart'; import 'package:digit_components/widgets/digit_dob_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -10,6 +11,7 @@ import 'package:reactive_forms/reactive_forms.dart'; import '../../blocs/app_initialization/app_initialization.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; +import '../../blocs/scanner/scanner.dart'; import '../../blocs/search_households/search_households.dart'; import '../../data/local_store/no_sql/schema/app_configuration.dart'; import '../../models/data_model.dart'; @@ -41,6 +43,7 @@ class _IndividualDetailsPageState static const _dobKey = 'dob'; static const _genderKey = 'gender'; static const _mobileNumberKey = 'mobileNumber'; + bool isDuplicateTag = false; @override Widget build(BuildContext context) { @@ -119,86 +122,132 @@ class _IndividualDetailsPageState isHeadOfHousehold: widget.isHeadOfHousehold, ), ); + final scannerBloc = context.read(); - final submit = await DigitDialog.show( - context, - options: DigitDialogOptions( - titleText: localizations.translate( - i18.deliverIntervention.dialogTitle, - ), - contentText: localizations.translate( - i18.deliverIntervention.dialogContent, + if (scannerBloc.state.duplicate) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate( + i18.deliverIntervention + .resourceAlreadyScanned, + ), + true, + theme, ), - primaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonSubmit, + ); + } else { + final submit = await DigitDialog.show( + context, + options: DigitDialogOptions( + titleText: localizations.translate( + i18.deliverIntervention.dialogTitle, + ), + contentText: localizations.translate( + i18.deliverIntervention.dialogContent, + ), + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.common.coreCommonSubmit, + ), + action: (context) { + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, ), - action: (context) { - Navigator.of( + secondaryAction: DigitDialogActions( + label: localizations.translate( + i18.common.coreCommonCancel, + ), + action: (context) => Navigator.of( context, rootNavigator: true, - ).pop(true); - }, - ), - secondaryAction: DigitDialogActions( - label: localizations.translate( - i18.common.coreCommonCancel, + ).pop(false), ), - action: (context) => Navigator.of( - context, - rootNavigator: true, - ).pop(false), - ), - ), - ); - - if (submit ?? false) { - bloc.add( - BeneficiaryRegistrationCreateEvent( - projectId: projectId, - userUuid: userId, - boundary: boundary, ), ); + + if (submit ?? false) { + if (context.mounted) { + final scannerBloc = context.read(); + + bloc.add( + BeneficiaryRegistrationCreateEvent( + projectId: projectId, + userUuid: userId, + boundary: boundary, + tag: scannerBloc.state.qrcodes.isNotEmpty + ? scannerBloc.state.qrcodes.first + : null, + ), + ); + } + } } }, editIndividual: ( householdModel, individualModel, addressModel, + projectBeneficiaryModel, loading, ) { + final scannerBloc = context.read(); final individual = _getIndividualModel( context, form: form, oldIndividual: individualModel, ); + final tag = scannerBloc.state.qrcodes.isNotEmpty + ? scannerBloc.state.qrcodes.first + : null; - bloc.add( - BeneficiaryRegistrationUpdateIndividualDetailsEvent( - addressModel: addressModel, - model: individual.copyWith( - clientAuditDetails: (individual - .clientAuditDetails - ?.createdBy != - null && - individual.clientAuditDetails - ?.createdTime != - null) - ? ClientAuditDetails( - createdBy: individual - .clientAuditDetails!.createdBy, - createdTime: individual - .clientAuditDetails!.createdTime, - lastModifiedBy: - context.loggedInUserUuid, - lastModifiedTime: - context.millisecondsSinceEpoch(), - ) + if (tag != null && + tag != projectBeneficiaryModel?.tag && + scannerBloc.state.duplicate) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate( + i18.deliverIntervention + .resourceAlreadyScanned, + ), + true, + theme, + ), + ); + } else { + bloc.add( + BeneficiaryRegistrationUpdateIndividualDetailsEvent( + addressModel: addressModel, + model: individual.copyWith( + clientAuditDetails: (individual + .clientAuditDetails + ?.createdBy != + null && + individual.clientAuditDetails + ?.createdTime != + null) + ? ClientAuditDetails( + createdBy: individual + .clientAuditDetails!.createdBy, + createdTime: individual + .clientAuditDetails!.createdTime, + lastModifiedBy: + context.loggedInUserUuid, + lastModifiedTime: + context.millisecondsSinceEpoch(), + ) + : null, + ), + tag: scannerBloc.state.qrcodes.isNotEmpty + ? scannerBloc.state.qrcodes.first : null, ), - ), - ); + ); + } }, addMember: ( addressModel, @@ -210,16 +259,37 @@ class _IndividualDetailsPageState form: form, ); - bloc.add( - BeneficiaryRegistrationAddMemberEvent( - beneficiaryType: context.beneficiaryType, - householdModel: householdModel, - individualModel: individual, - addressModel: addressModel, - userUuid: userId, - projectId: context.projectId, - ), - ); + if (context.mounted) { + final scannerBloc = context.read(); + + if (scannerBloc.state.duplicate) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate( + i18.deliverIntervention + .resourceAlreadyScanned, + ), + true, + theme, + ), + ); + } else { + bloc.add( + BeneficiaryRegistrationAddMemberEvent( + beneficiaryType: context.beneficiaryType, + householdModel: householdModel, + individualModel: individual, + addressModel: addressModel, + userUuid: userId, + projectId: context.projectId, + tag: scannerBloc.state.qrcodes.isNotEmpty + ? scannerBloc.state.qrcodes.first + : null, + ), + ); + } + } }, ); }, @@ -424,6 +494,61 @@ class _IndividualDetailsPageState ], ), const SizedBox(height: 16), + BlocBuilder( + builder: (context, state) => state.qrcodes.isNotEmpty + ? Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: + MediaQuery.of(context).size.width / 3, + child: Text( + localizations.translate( + i18.deliverIntervention.voucherCode, + ), + style: theme.textTheme.headlineSmall, + ), + ), + Flexible( + child: Text( + overflow: TextOverflow.ellipsis, + localizations + .translate(state.qrcodes.first), + ), + ), + IconButton( + color: theme.colorScheme.secondary, + icon: const Icon(Icons.edit), + onPressed: () { + // TODO : [Need to handle the Scanner event]; + // context.read().add(ScannerScanEvent()) + context.router.push(QRScannerRoute( + quantity: 1, + isGS1code: false, + sinlgleValue: true, + isEditEnabled: true, + )); + }, + ), + ], + + // ignore: no-empty-block + ) + : DigitOutlineIconButton( + onPressed: () { + context.router.push(QRScannerRoute( + quantity: 1, + isGS1code: false, + sinlgleValue: true, + )); + }, + icon: Icons.qr_code, + label: localizations.translate( + i18.individualDetails.linkVoucherToIndividual, + ), + ), + ), ], ), ), @@ -530,6 +655,12 @@ class _IndividualDetailsPageState FormGroup buildForm(BeneficiaryRegistrationState state) { final individual = state.mapOrNull( editIndividual: (value) { + if (value.projectBeneficiaryModel?.tag != null) { + context + .read() + .add(ScannerScanEvent([], [value.projectBeneficiaryModel!.tag!])); + } + return value.individualModel; }, ); diff --git a/apps/health_campaign_field_worker_app/lib/pages/qr_scanner.dart b/apps/health_campaign_field_worker_app/lib/pages/qr_scanner.dart new file mode 100644 index 000000000..15e273cac --- /dev/null +++ b/apps/health_campaign_field_worker_app/lib/pages/qr_scanner.dart @@ -0,0 +1,652 @@ +import 'package:digit_components/digit_components.dart'; +import 'package:digit_components/widgets/atoms/digit_toaster.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:qr_code_scanner/qr_code_scanner.dart'; +import '../../router/app_router.dart'; +import '../../utils/utils.dart'; +import 'package:audioplayers/audioplayers.dart'; + +import 'package:gs1_barcode_parser/gs1_barcode_parser.dart'; +import '../../widgets/localized.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../blocs/beneficiary_registration/beneficiary_registration.dart'; +import '../blocs/scanner/scanner.dart'; +import '../blocs/search_households/search_households.dart'; +import '../models/entities/scanner_type.dart'; + +class QRScannerPage extends LocalizedStatefulWidget { + final bool sinlgleValue; + final int quantity; + final bool isGS1code; + final bool isEditEnabled; + + const QRScannerPage({ + super.key, + super.appLocalizations, + required this.quantity, + required this.isGS1code, + this.sinlgleValue = false, + this.isEditEnabled = false, + }); + + @override + State createState() => _QRScannerPageState(); +} + +class _QRScannerPageState extends LocalizedState { + AudioPlayer player = AudioPlayer(); + QRViewController? controller; + List result = []; + List codes = []; + bool manualcode = false; + bool flashstatus = false; + final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); + final _resourceController = TextEditingController(); + + @override + void initState() { + if (!widget.isEditEnabled) { + context.read().add(const ScannerEvent.handleScanner([], [])); + } + + super.initState(); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return Scaffold( + body: BlocBuilder( + builder: (context, state) { + return !manualcode + ? Stack( + children: [ + GestureDetector( + onTap: () { + controller?.pauseCamera(); + controller?.resumeCamera(); + }, + child: Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + color: Colors.green[300], + child: _buildQrView(context), + ), + ), + Positioned( + top: kPadding * 2, + left: kPadding, + child: SizedBox( + // [TODO: Localization need to be added] + child: GestureDetector( + onTap: () async { + controller?.toggleFlash(); + var status = await controller?.getFlashStatus(); + if (status != null) { + setState(() { + flashstatus = status; + }); + } + }, + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Icon( + Icons.flashlight_on, + color: theme.colorScheme.secondary, + ), + Text( + localizations.translate( + flashstatus + ? i18.deliverIntervention.flashOff + : i18.deliverIntervention.flashOn, + ), + style: TextStyle( + color: theme.colorScheme.secondary, + ), + ), + ], + ), + ), + ), + ), + // [TODO : Need move to constants] + Positioned( + top: kPadding * 8, + left: MediaQuery.of(context).size.width / 3, + width: 250, + height: 250, + child: SizedBox( + width: 150, + height: 150, + // [TODO: Localization need to be added] + child: Text( + localizations.translate( + i18.deliverIntervention.scannerLabel, + ), + style: const TextStyle( + color: Colors.white, + fontSize: 20, + ), + ), + ), + ), + Positioned( + top: MediaQuery.of(context).size.height / 2.4, + left: MediaQuery.of(context).size.width / 4.5, + width: 250, + height: 250, + child: SizedBox( + width: 150, + height: 150, + // [TODO: Localization need to be added] + child: Text( + localizations.translate( + i18.deliverIntervention.manualScan, + ), + style: const TextStyle( + color: Colors.white, + fontSize: 20, + ), + ), + ), + ), + Positioned( + top: MediaQuery.of(context).size.height / 2.2, + left: MediaQuery.of(context).size.width / 6, + width: 250, + height: 50, + child: SizedBox( + width: 150, + height: 50, + // [TODO: Localization need to be added] + + child: TextButton( + onPressed: () { + setState(() { + manualcode = true; + }); + }, + child: Text( + localizations.translate( + i18.deliverIntervention.manualEnterCode, + ), + style: TextStyle( + color: theme.colorScheme.secondary, + fontSize: 20, + decoration: TextDecoration.underline, + ), + ), + ), + ), + ), + + Positioned( + bottom: 0, + width: MediaQuery.of(context).size.width, + height: kPadding * 12, + child: DigitCard( + child: DigitElevatedButton( + child: Text(localizations + .translate(i18.common.coreCommonSubmit)), + onPressed: () async { + if (widget.isGS1code && + result.length < widget.quantity) { + buildDialog(); + } else { + final bloc = context.read(); + + final scannerState = + context.read().state; + + if (scannerState.qrcodes.isNotEmpty) { + bloc.add(SearchHouseholdsEvent.searchByTag( + tag: scannerState.qrcodes.first, + projectId: context.projectId, + )); + } + context.router.pop(); + } + }, + ), + ), + ), + + Positioned( + bottom: (kPadding * 8), + height: widget.isGS1code + ? state.barcodes.length < 10 + ? (state.barcodes.length * 60) + 80 + : MediaQuery.of(context).size.height / 2 + : state.qrcodes.length < 10 + ? (state.qrcodes.length * 60) + 80 + : MediaQuery.of(context).size.height / 2, + width: MediaQuery.of(context).size.width, + child: Container( + margin: const EdgeInsets.all(kPadding), + width: 100, + height: 120, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: DigitTheme.instance.colorScheme.outline, + width: 1, + ), + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(12.0), + topRight: Radius.circular(12.0), + ), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + Container( + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(12.0), + topRight: Radius.circular(12.0), + ), + ), + padding: const EdgeInsets.only( + bottom: kPadding * 2, + top: kPadding * 2, + left: kPadding * 2, + ), + width: MediaQuery.of(context).size.width, + child: widget.isGS1code + ? Text( + '${state.barcodes.length.toString()} ${localizations.translate(i18.deliverIntervention.resourcesScanned)}', + style: theme.textTheme.headlineMedium, + ) + : Text( + '${state.qrcodes.length.toString()} ${localizations.translate(i18.deliverIntervention.resourcesScanned)}', + style: theme.textTheme.headlineMedium, + ), + ), + Expanded( + child: ListView.builder( + itemCount: widget.isGS1code + ? state.barcodes.length + : state.qrcodes.length, + itemBuilder: (BuildContext context, int index) { + return ListTile( + shape: const Border(), + title: Container( + height: kPadding * 6, + decoration: BoxDecoration( + color: DigitTheme + .instance.colorScheme.background, + border: Border.all( + color: DigitTheme + .instance.colorScheme.outline, + width: 1, + ), + borderRadius: const BorderRadius.all( + Radius.circular(4.0), + ), + ), + padding: const EdgeInsets.all(kPadding), + child: Row( + crossAxisAlignment: + CrossAxisAlignment.end, + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: Text( + overflow: TextOverflow.ellipsis, + widget.isGS1code + ? state + .barcodes[index] + .elements + .entries + .last + .value + .data + .toString() + : state.qrcodes[index] + .toString(), + ), + ), + Container( + padding: const EdgeInsets.only( + bottom: kPadding, + ), + child: IconButton( + icon: const Icon( + Icons.delete, + color: Colors.red, + ), + onPressed: () { + final bloc = + context.read(); + if (widget.isGS1code) { + result = List.from( + state.barcodes, + ); + result.removeAt(index); + setState(() { + result = result; + }); + + bloc.add( + ScannerEvent.handleScanner( + result, + state.qrcodes, + ), + ); + } else { + codes = List.from( + state.qrcodes, + ); + codes.removeAt(index); + setState(() { + codes = codes; + }); + + bloc.add( + ScannerEvent.handleScanner( + state.barcodes, + codes, + ), + ); + } + }, + ), + ), + ], + ), + ), + ); + }, + ), + ), + ], + ), + ), + ), + ], + ) + : DigitCard( + child: ScrollableContent( + header: GestureDetector( + onTap: () { + setState(() { + manualcode = false; + }); + }, + child: const Align( + alignment: Alignment.topRight, + child: Icon(Icons.close), + ), + ), + footer: DigitElevatedButton( + child: Text(localizations.translate( + i18.common.coreCommonSubmit, + )), + onPressed: () async { + final bloc = context.read(); + codes.add(_resourceController.value.text); + bloc.add( + ScannerEvent.handleScanner( + state.barcodes, + codes, + ), + ); + if (widget.isGS1code && + result.length < widget.quantity) { + buildDialog(); + } else { + final bloc = context.read(); + final scannerState = + context.read().state; + + if (scannerState.qrcodes.isNotEmpty || manualcode) { + bloc.add(SearchHouseholdsEvent.searchByTag( + tag: manualcode + ? _resourceController.value.text + : scannerState.qrcodes.first, + projectId: context.projectId, + )); + } + context.router.pop(); + } + }, + ), + children: [ + Container( + padding: const EdgeInsets.all(kPadding), + child: Align( + alignment: Alignment.topLeft, + child: Text( + localizations.translate( + i18.deliverIntervention.manualEnterCode, + ), + style: theme.textTheme.headlineLarge, + ), + ), + ), + Text(localizations.translate( + i18.deliverIntervention.manualCodeDescription, + )), + DigitTextField( + label: localizations.translate( + i18.deliverIntervention.resourceCode, + ), + controller: _resourceController, + ), + ], + ), + ); + }, + ), + ); + } + + void buildDialog() async { + await DigitDialog.show( + context, + options: DigitDialogOptions( + titleText: localizations.translate( + i18.deliverIntervention.scannerDialogTitle, + ), + contentText: localizations.translate( + i18.deliverIntervention.scannerDialogContent, + ), + primaryAction: DigitDialogActions( + label: localizations.translate( + i18.deliverIntervention.scannerDialogPrimaryAction, + ), + action: (ctx) { + Navigator.of( + context, + rootNavigator: true, + ).pop(false); + }, + ), + secondaryAction: DigitDialogActions( + label: localizations.translate( + i18.deliverIntervention.scannerDialogSecondaryAction, + ), + action: (ctx) { + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + + context.router.pop(); + }, + ), + ), + ); + } + + Widget _buildQrView(BuildContext context) { + // For this example we check how width or tall the device is and change the scanArea and overlay accordingly. + + // To ensure the Scanner view is properly sizes after rotation + // we need to listen for Flutter SizeChanged notification and update controller + + return Stack( + children: [ + // [TODO: Localization need to be added] + const Positioned(top: 500, child: Text('coundnot scan the QR code')), + QRView( + key: qrKey, + onQRViewCreated: _onQRViewCreated, + overlay: QrScannerOverlayShape( + cutOutBottomOffset: 150, + cutOutWidth: 250, + cutOutHeight: 250, + ), + onPermissionSet: (ctrl, p) => _onPermissionSet(context, ctrl, p), + ), + ], + ); + } + + void _onQRViewCreated(QRViewController controller) async { + controller.flipCamera(); + + controller.flipCamera(); + setState(() { + this.controller = controller; + }); + + controller.scannedDataStream.listen((scanData) async { + try { + controller.pauseCamera(); + final bloc = context.read(); + + if (!widget.isGS1code) { + if (bloc.state.qrcodes.contains(scanData.code)) { + Future.delayed(const Duration(seconds: 10)); + await handleError( + controller, + i18.deliverIntervention.resourceAlreadyScanned, + ); + Future.delayed(const Duration(seconds: 3)); + + return; + } else { + await storeCode(scanData.code!, controller); + Future.delayed(const Duration(seconds: 3)); + } + } else { + final parser = GS1BarcodeParser.defaultParser(); + final parsedResult = parser.parse(scanData.code!); + if (parsedResult.elements.keys.join('') != '01111021') { + await handleError( + controller, + i18.deliverIntervention.scanValidResource, + ); + } else { + final alreadyScanned = bloc.state.barcodes.any((element) => + element.elements.entries.last.value.data == + parsedResult.elements.entries.last.value.data); + + if (alreadyScanned) { + await handleError( + controller, + i18.deliverIntervention.resourceAlreadyScanned, + ); + } else if (widget.quantity > result.length) { + await storeValue(parsedResult, controller); + } else { + await handleError( + controller, + i18.deliverIntervention.scannedResourceCountMisMatch, + ); + } + } + } + } catch (e) { + await handleError(controller, i18.deliverIntervention.unableToScan); + } + }); + } + + Future handleError(QRViewController controller, String message) async { + controller.pauseCamera(); + player.play(AssetSource("audio/buzzer.wav")); + + if (player.state == PlayerState.completed || result.isEmpty) { + DigitToast.show( + context, + options: DigitToastOptions( + localizations.translate(message), + true, + Theme.of(context), + ), + ); + } + Future.delayed(const Duration(seconds: 1), () => controller.resumeCamera()); + } + + Future storeCode(String code, QRViewController controller) async { + player.play(AssetSource("audio/add.wav")); + final bloc = context.read(); + codes = List.from(bloc.state.qrcodes); + if (widget.sinlgleValue) { + codes = []; + } + + codes.add(code); + + setState(() { + codes = codes; + }); + + bloc.add(ScannerEvent.handleScanner( + bloc.state.barcodes, + codes, + )); + + Future.delayed(const Duration(seconds: 1), () => controller.resumeCamera()); + + return; + } + + Future storeValue(GS1Barcode scanData, QRViewController controller) async { + controller.pauseCamera(); + final parsedresult = scanData; + final bloc = context.read(); + + player.play(AssetSource("audio/add.wav")); + Future.delayed(const Duration(seconds: 3)); + + result = List.from(bloc.state.barcodes); + result.removeDuplicates( + (element) => element.elements.entries.last.value.data, + ); + + result.add(parsedresult); + bloc.add(ScannerEvent.handleScanner(result, bloc.state.qrcodes)); + setState(() { + result = result; + }); + Future.delayed(const Duration(seconds: 1), () => controller.resumeCamera()); + + return; + } + + void _onPermissionSet(BuildContext context, QRViewController ctrl, bool p) { + if (!p) { + ScaffoldMessenger.of(context).showSnackBar( + // [TODO: Localization need to be added] + const SnackBar(content: Text('no Permission')), + ); + } + } + + @override + void dispose() { + controller?.dispose(); + super.dispose(); + } +} diff --git a/apps/health_campaign_field_worker_app/lib/pages/search_beneficiary.dart b/apps/health_campaign_field_worker_app/lib/pages/search_beneficiary.dart index c8e054514..2fe339c2b 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/search_beneficiary.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/search_beneficiary.dart @@ -6,6 +6,7 @@ import 'package:location/location.dart'; import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/beneficiary_registration/beneficiary_registration.dart'; +import '../blocs/scanner/scanner.dart'; import '../blocs/search_households/search_households.dart'; import '../models/data_model.dart'; import '../router/app_router.dart'; @@ -30,6 +31,13 @@ class _SearchBeneficiaryPageState final TextEditingController searchController = TextEditingController(); bool isProximityEnabled = false; + @override + void initState() { + // TODO: implement initState + + super.initState(); + } + @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -220,9 +228,15 @@ class _SearchBeneficiaryPageState distance: distance, householdMember: i, onOpenPressed: () async { + final scannerbloc = + context.read(); + + scannerbloc.add( + const ScannerEvent.handleScanner([], []), + ); + final bloc = context.read(); - final projectId = context.projectId; await context.router.push( BeneficiaryWrapperRoute( @@ -250,39 +264,66 @@ class _SearchBeneficiaryPageState }, ), bottomNavigationBar: SizedBox( - height: 85, + height: 150, child: DigitCard( margin: const EdgeInsets.only(left: 0, right: 0, top: 10), - child: BlocBuilder( - builder: (context, state) { - final router = context.router; + child: Column( + children: [ + BlocBuilder( + builder: (context, state) { + final router = context.router; - final searchQuery = state.searchQuery; - VoidCallback? onPressed; + final searchQuery = state.searchQuery; + VoidCallback? onPressed; - onPressed = state.loading || - searchQuery == null || - searchQuery.isEmpty - ? null - : () { - FocusManager.instance.primaryFocus?.unfocus(); + onPressed = state.loading || + searchQuery == null || + searchQuery.isEmpty + ? null + : () { + FocusManager.instance.primaryFocus?.unfocus(); - router.push(BeneficiaryRegistrationWrapperRoute( - initialState: BeneficiaryRegistrationCreateState( - searchQuery: state.searchQuery, - ), - )); - }; + context.read().add( + const ScannerEvent.handleScanner( + [], + [], + ), + ); + router.push(BeneficiaryRegistrationWrapperRoute( + initialState: + BeneficiaryRegistrationCreateState( + searchQuery: state.searchQuery, + ), + )); + }; - return DigitElevatedButton( - onPressed: onPressed, - child: Center( - child: Text(localizations.translate( - i18.searchBeneficiary.beneficiaryAddActionLabel, - )), + return DigitElevatedButton( + onPressed: onPressed, + child: Center( + child: Text(localizations.translate( + i18.searchBeneficiary.beneficiaryAddActionLabel, + )), + ), + ); + }, + ), + const SizedBox( + height: kPadding, + ), + DigitOutlineIconButton( + onPressed: () { + context.router.push(QRScannerRoute( + quantity: 1, + isGS1code: false, + sinlgleValue: true, + )); + }, + icon: Icons.qr_code, + label: localizations.translate( + i18.deliverIntervention.scannerLabel, ), - ); - }, + ), + ], ), ), ), diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index 7d6bff123..c4fb56a79 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -53,6 +53,7 @@ import '../pages/language_selection.dart'; import '../pages/login.dart'; import '../pages/profile.dart'; import '../pages/project_selection.dart'; +import '../pages/qr_scanner.dart'; import '../pages/reason_for_deletion.dart'; import '../pages/search_beneficiary.dart'; import '../pages/unauthenticated.dart'; @@ -84,6 +85,7 @@ part 'app_router.gr.dart'; AutoRoute(page: ProfilePage, path: 'profile'), AutoRoute(page: SearchBeneficiaryPage, path: 'search-beneficiary'), + AutoRoute(page: QRScannerPage, path: 'scanner'), /// Beneficiary Registration AutoRoute( diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart index 6c47ec6da..8c4baea80 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart @@ -81,6 +81,20 @@ class _$AppRouter extends RootStackRouter { ), ); }, + QRScannerRoute.name: (routeData) { + final args = routeData.argsAs(); + return MaterialPageX( + routeData: routeData, + child: QRScannerPage( + key: args.key, + appLocalizations: args.appLocalizations, + quantity: args.quantity, + isGS1code: args.isGS1code, + sinlgleValue: args.sinlgleValue, + isEditEnabled: args.isEditEnabled, + ), + ); + }, BeneficiaryRegistrationWrapperRoute.name: (routeData) { final args = routeData.argsAs(); return MaterialPageX( @@ -595,6 +609,11 @@ class _$AppRouter extends RootStackRouter { path: 'search-beneficiary', parent: AuthenticatedRouteWrapper.name, ), + RouteConfig( + QRScannerRoute.name, + path: 'scanner', + parent: AuthenticatedRouteWrapper.name, + ), RouteConfig( BeneficiaryRegistrationWrapperRoute.name, path: 'beneficiary-registration', @@ -1051,6 +1070,60 @@ class SearchBeneficiaryRouteArgs { } } +/// generated route for +/// [QRScannerPage] +class QRScannerRoute extends PageRouteInfo { + QRScannerRoute({ + Key? key, + AppLocalizations? appLocalizations, + required int quantity, + required bool isGS1code, + bool sinlgleValue = false, + bool isEditEnabled = false, + }) : super( + QRScannerRoute.name, + path: 'scanner', + args: QRScannerRouteArgs( + key: key, + appLocalizations: appLocalizations, + quantity: quantity, + isGS1code: isGS1code, + sinlgleValue: sinlgleValue, + isEditEnabled: isEditEnabled, + ), + ); + + static const String name = 'QRScannerRoute'; +} + +class QRScannerRouteArgs { + const QRScannerRouteArgs({ + this.key, + this.appLocalizations, + required this.quantity, + required this.isGS1code, + this.sinlgleValue = false, + this.isEditEnabled = false, + }); + + final Key? key; + + final AppLocalizations? appLocalizations; + + final int quantity; + + final bool isGS1code; + + final bool sinlgleValue; + + final bool isEditEnabled; + + @override + String toString() { + return 'QRScannerRouteArgs{key: $key, appLocalizations: $appLocalizations, quantity: $quantity, isGS1code: $isGS1code, sinlgleValue: $sinlgleValue, isEditEnabled: $isEditEnabled}'; + } +} + /// generated route for /// [BeneficiaryRegistrationWrapperPage] class BeneficiaryRegistrationWrapperRoute diff --git a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart index f94cddf07..bb36d237c 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart @@ -267,6 +267,33 @@ class BeneficiaryDetails { String get beneficiaryCycle => 'BENEFICIARY_DETAILS_CYCLE'; String get currentCycleLabel => 'BENEFICIARY_DETAILS_CURRENT_CYCLE_LABEL'; String get fromCurrentLocation => 'FROM_CURRENT_LOCATION'; + String get unableToScan => 'UNABLE_TO_SCAN'; + + String get scanValidResource => 'SCAN_VALID_RESOURCE'; + + String get scannedResourceCountMisMatch => 'SCANNED_RESOURCE_COUNT_MISMATCH'; + + String get resourceAlreadyScanned => 'RESOURCE_ALREADY_SCANNED'; + + String get scannerLabel => 'SCANNER_LABEL'; + + String get noOfResourceScanned => 'NO_OF_RESOURCE_SCANNED'; + + String get resourcesScanned => 'RESOURCES_SCANNED'; + + String get saveScannedResource => 'SAVE_SCANNED_RESOURCE'; + + String get flashOn => 'FLASH_ON'; + + String get flashOff => 'FLASH_OFF'; + + String get scannerDialogTitle => 'SCANNER_DIALOG_TITLE'; + + String get scannerDialogContent => 'SCANNER_DIALOG_CONTENT'; + + String get scannerDialogPrimaryAction => 'SCANNER_DIALOG_PRIMARY_ACTION'; + + String get scannerDialogSecondaryAction => 'SCANNER_DIALOG_SECONDARY_ACTION'; String get beneficiaryHeader => 'BENEFICIARY_HEADER'; String get deliveryHeader => 'DELIVERY_TABLE_HEADER'; } @@ -313,6 +340,8 @@ class IndividualDetails { String get monthsErrorText => 'ERR_MONTHS'; String get yearsAndMonthsErrorText => 'ERR_YEARS_AND_MONTHS'; + + String get linkVoucherToIndividual => 'LINK_VOUCHER_TO_INDIVIDUAL'; } class HouseholdLocation { @@ -513,6 +542,44 @@ class DeliverIntervention { String get resourceCannotBeZero => 'RESOURCE_QUANTITY_CANNOT_BE_ZERO'; String get resourceDeliveredValidation => 'RESOURCE_DELIVERED_VALIDATION'; + + String get unableToScan => 'UNABLE_TO_SCAN'; + + String get scanValidResource => 'SCAN_VALID_RESOURCE'; + + String get scannedResourceCountMisMatch => 'SCANNED_RESOURCE_COUNT_MISMATCH'; + + String get resourceAlreadyScanned => 'RESOURCE_ALREADY_SCANNED'; + + String get scannerLabel => 'SCANNER_LABEL'; + + String get noOfResourceScanned => 'NO_OF_RESOURCE_SCANNED'; + + String get resourcesScanned => 'RESOURCES_SCANNED'; + + String get saveScannedResource => 'SAVE_SCANNED_RESOURCE'; + + String get flashOn => 'FLASH_ON'; + + String get flashOff => 'FLASH_OFF'; + + String get scannerDialogTitle => 'SCANNER_DIALOG_TITLE'; + + String get scannerDialogContent => 'SCANNER_DIALOG_CONTENT'; + + String get scannerDialogPrimaryAction => 'SCANNER_DIALOG_PRIMARY_ACTION'; + + String get scannerDialogSecondaryAction => 'SCANNER_DIALOG_SECONDARY_ACTION'; + + String get manualScan => 'MANUAL_SCAN'; + + String get manualEnterCode => 'ENTER_MANUAL_CODE'; + + String get manualCodeDescription => 'MANUAL_CODE_DESCRIPTION'; + + String get resourceCode => 'RESOURCE_CODE'; + + String get voucherCode => 'VOUCHER_CODE'; } class ProjectSelection { diff --git a/apps/health_campaign_field_worker_app/lib/widgets/beneficiary/view_beneficiary_card.dart b/apps/health_campaign_field_worker_app/lib/widgets/beneficiary/view_beneficiary_card.dart index 9f75f2f2a..54fe411a2 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -145,7 +145,9 @@ class _ViewBeneficiaryCardState extends LocalizedState { ); final isBeneficiaryRefused = checkIfBeneficiaryRefused(taskdata); final isBeneficiaryReferred = checkIfBeneficiaryReferred( - referralData, currentCycle ?? const Cycle()); + referralData, + currentCycle ?? const Cycle(), + ); // TODO need to pass the current cycle diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 653b80eca..94dcde33c 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -65,6 +65,62 @@ packages: url: "https://pub.dev" source: hosted version: "2.11.0" + audioplayers: + dependency: "direct main" + description: + name: audioplayers + sha256: d9f6ca8e9b3e5af5e73d4c814404566f72698ee7ba35487bdf2baa6749e7503f + url: "https://pub.dev" + source: hosted + version: "5.2.0" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: fb01b9481f431fe04ac60f1f97ce8158383f2dc754558820592f795d81ca9d53 + url: "https://pub.dev" + source: hosted + version: "4.0.2" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" + url: "https://pub.dev" + source: hosted + version: "3.1.0" auto_route: dependency: "direct main" description: @@ -818,6 +874,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + gs1_barcode_parser: + dependency: "direct main" + description: + name: gs1_barcode_parser + sha256: "9aaff47bdab7177deaf9248cc861ef41cf611d3f828498cb40b64bedcbf53391" + url: "https://pub.dev" + source: hosted + version: "1.0.5" horizontal_data_table: dependency: transitive description: @@ -1234,6 +1298,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.1" + qr_code_scanner: + dependency: "direct main" + description: + name: qr_code_scanner + sha256: f23b68d893505a424f0bd2e324ebea71ed88465d572d26bb8d2e78a4749591fd + url: "https://pub.dev" + source: hosted + version: "1.0.1" reactive_flutter_typeahead: dependency: transitive description: @@ -1479,6 +1551,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + url: "https://pub.dev" + source: hosted + version: "3.1.0" term_glyph: dependency: transitive description: diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 8c7acfe60..fb8c6ed21 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -59,6 +59,9 @@ dependencies: digit_firebase_services: ^0.0.1 package_info_plus: ^4.1.0 expandable: ^5.0.1 + qr_code_scanner: ^1.0.1 + audioplayers: ^5.2.0 + gs1_barcode_parser: ^1.0.5 dev_dependencies: flutter_test: @@ -88,6 +91,9 @@ flutter_icons: flutter: assets: - ./ + - ./assets/audio/add.wav + - ./assets/audio/buzzer.wav + fonts: - family: Roboto fonts: diff --git a/packages/digit_components/lib/blocs/location/location.freezed.dart b/packages/digit_components/lib/blocs/location/location.freezed.dart index 895d57b4d..f96b951f5 100644 --- a/packages/digit_components/lib/blocs/location/location.freezed.dart +++ b/packages/digit_components/lib/blocs/location/location.freezed.dart @@ -94,20 +94,20 @@ class _$LocationEventCopyWithImpl<$Res, $Val extends LocationEvent> } /// @nodoc -abstract class _$$LoadLocationEventCopyWith<$Res> { - factory _$$LoadLocationEventCopyWith( - _$LoadLocationEvent value, $Res Function(_$LoadLocationEvent) then) = - __$$LoadLocationEventCopyWithImpl<$Res>; +abstract class _$$LoadLocationEventImplCopyWith<$Res> { + factory _$$LoadLocationEventImplCopyWith(_$LoadLocationEventImpl value, + $Res Function(_$LoadLocationEventImpl) then) = + __$$LoadLocationEventImplCopyWithImpl<$Res>; @useResult $Res call({int retry}); } /// @nodoc -class __$$LoadLocationEventCopyWithImpl<$Res> - extends _$LocationEventCopyWithImpl<$Res, _$LoadLocationEvent> - implements _$$LoadLocationEventCopyWith<$Res> { - __$$LoadLocationEventCopyWithImpl( - _$LoadLocationEvent _value, $Res Function(_$LoadLocationEvent) _then) +class __$$LoadLocationEventImplCopyWithImpl<$Res> + extends _$LocationEventCopyWithImpl<$Res, _$LoadLocationEventImpl> + implements _$$LoadLocationEventImplCopyWith<$Res> { + __$$LoadLocationEventImplCopyWithImpl(_$LoadLocationEventImpl _value, + $Res Function(_$LoadLocationEventImpl) _then) : super(_value, _then); @pragma('vm:prefer-inline') @@ -115,7 +115,7 @@ class __$$LoadLocationEventCopyWithImpl<$Res> $Res call({ Object? retry = null, }) { - return _then(_$LoadLocationEvent( + return _then(_$LoadLocationEventImpl( retry: null == retry ? _value.retry : retry // ignore: cast_nullable_to_non_nullable @@ -126,8 +126,8 @@ class __$$LoadLocationEventCopyWithImpl<$Res> /// @nodoc -class _$LoadLocationEvent implements LoadLocationEvent { - const _$LoadLocationEvent({this.retry = 5}); +class _$LoadLocationEventImpl implements LoadLocationEvent { + const _$LoadLocationEventImpl({this.retry = 5}); @override @JsonKey() @@ -142,7 +142,7 @@ class _$LoadLocationEvent implements LoadLocationEvent { bool operator ==(dynamic other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$LoadLocationEvent && + other is _$LoadLocationEventImpl && (identical(other.retry, retry) || other.retry == retry)); } @@ -152,8 +152,9 @@ class _$LoadLocationEvent implements LoadLocationEvent { @JsonKey(ignore: true) @override @pragma('vm:prefer-inline') - _$$LoadLocationEventCopyWith<_$LoadLocationEvent> get copyWith => - __$$LoadLocationEventCopyWithImpl<_$LoadLocationEvent>(this, _$identity); + _$$LoadLocationEventImplCopyWith<_$LoadLocationEventImpl> get copyWith => + __$$LoadLocationEventImplCopyWithImpl<_$LoadLocationEventImpl>( + this, _$identity); @override @optionalTypeArgs @@ -238,29 +239,29 @@ class _$LoadLocationEvent implements LoadLocationEvent { } abstract class LoadLocationEvent implements LocationEvent { - const factory LoadLocationEvent({final int retry}) = _$LoadLocationEvent; + const factory LoadLocationEvent({final int retry}) = _$LoadLocationEventImpl; int get retry; @JsonKey(ignore: true) - _$$LoadLocationEventCopyWith<_$LoadLocationEvent> get copyWith => + _$$LoadLocationEventImplCopyWith<_$LoadLocationEventImpl> get copyWith => throw _privateConstructorUsedError; } /// @nodoc -abstract class _$$ListenLocationEventCopyWith<$Res> { - factory _$$ListenLocationEventCopyWith(_$ListenLocationEvent value, - $Res Function(_$ListenLocationEvent) then) = - __$$ListenLocationEventCopyWithImpl<$Res>; +abstract class _$$ListenLocationEventImplCopyWith<$Res> { + factory _$$ListenLocationEventImplCopyWith(_$ListenLocationEventImpl value, + $Res Function(_$ListenLocationEventImpl) then) = + __$$ListenLocationEventImplCopyWithImpl<$Res>; @useResult $Res call({int retry}); } /// @nodoc -class __$$ListenLocationEventCopyWithImpl<$Res> - extends _$LocationEventCopyWithImpl<$Res, _$ListenLocationEvent> - implements _$$ListenLocationEventCopyWith<$Res> { - __$$ListenLocationEventCopyWithImpl( - _$ListenLocationEvent _value, $Res Function(_$ListenLocationEvent) _then) +class __$$ListenLocationEventImplCopyWithImpl<$Res> + extends _$LocationEventCopyWithImpl<$Res, _$ListenLocationEventImpl> + implements _$$ListenLocationEventImplCopyWith<$Res> { + __$$ListenLocationEventImplCopyWithImpl(_$ListenLocationEventImpl _value, + $Res Function(_$ListenLocationEventImpl) _then) : super(_value, _then); @pragma('vm:prefer-inline') @@ -268,7 +269,7 @@ class __$$ListenLocationEventCopyWithImpl<$Res> $Res call({ Object? retry = null, }) { - return _then(_$ListenLocationEvent( + return _then(_$ListenLocationEventImpl( retry: null == retry ? _value.retry : retry // ignore: cast_nullable_to_non_nullable @@ -279,8 +280,8 @@ class __$$ListenLocationEventCopyWithImpl<$Res> /// @nodoc -class _$ListenLocationEvent implements ListenLocationEvent { - const _$ListenLocationEvent({this.retry = 5}); +class _$ListenLocationEventImpl implements ListenLocationEvent { + const _$ListenLocationEventImpl({this.retry = 5}); @override @JsonKey() @@ -295,7 +296,7 @@ class _$ListenLocationEvent implements ListenLocationEvent { bool operator ==(dynamic other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$ListenLocationEvent && + other is _$ListenLocationEventImpl && (identical(other.retry, retry) || other.retry == retry)); } @@ -305,8 +306,8 @@ class _$ListenLocationEvent implements ListenLocationEvent { @JsonKey(ignore: true) @override @pragma('vm:prefer-inline') - _$$ListenLocationEventCopyWith<_$ListenLocationEvent> get copyWith => - __$$ListenLocationEventCopyWithImpl<_$ListenLocationEvent>( + _$$ListenLocationEventImplCopyWith<_$ListenLocationEventImpl> get copyWith => + __$$ListenLocationEventImplCopyWithImpl<_$ListenLocationEventImpl>( this, _$identity); @override @@ -392,31 +393,32 @@ class _$ListenLocationEvent implements ListenLocationEvent { } abstract class ListenLocationEvent implements LocationEvent { - const factory ListenLocationEvent({final int retry}) = _$ListenLocationEvent; + const factory ListenLocationEvent({final int retry}) = + _$ListenLocationEventImpl; int get retry; @JsonKey(ignore: true) - _$$ListenLocationEventCopyWith<_$ListenLocationEvent> get copyWith => + _$$ListenLocationEventImplCopyWith<_$ListenLocationEventImpl> get copyWith => throw _privateConstructorUsedError; } /// @nodoc -abstract class _$$RequestLocationServiceEventCopyWith<$Res> { - factory _$$RequestLocationServiceEventCopyWith( - _$RequestLocationServiceEvent value, - $Res Function(_$RequestLocationServiceEvent) then) = - __$$RequestLocationServiceEventCopyWithImpl<$Res>; +abstract class _$$RequestLocationServiceEventImplCopyWith<$Res> { + factory _$$RequestLocationServiceEventImplCopyWith( + _$RequestLocationServiceEventImpl value, + $Res Function(_$RequestLocationServiceEventImpl) then) = + __$$RequestLocationServiceEventImplCopyWithImpl<$Res>; @useResult $Res call({int retry}); } /// @nodoc -class __$$RequestLocationServiceEventCopyWithImpl<$Res> - extends _$LocationEventCopyWithImpl<$Res, _$RequestLocationServiceEvent> - implements _$$RequestLocationServiceEventCopyWith<$Res> { - __$$RequestLocationServiceEventCopyWithImpl( - _$RequestLocationServiceEvent _value, - $Res Function(_$RequestLocationServiceEvent) _then) +class __$$RequestLocationServiceEventImplCopyWithImpl<$Res> + extends _$LocationEventCopyWithImpl<$Res, _$RequestLocationServiceEventImpl> + implements _$$RequestLocationServiceEventImplCopyWith<$Res> { + __$$RequestLocationServiceEventImplCopyWithImpl( + _$RequestLocationServiceEventImpl _value, + $Res Function(_$RequestLocationServiceEventImpl) _then) : super(_value, _then); @pragma('vm:prefer-inline') @@ -424,7 +426,7 @@ class __$$RequestLocationServiceEventCopyWithImpl<$Res> $Res call({ Object? retry = null, }) { - return _then(_$RequestLocationServiceEvent( + return _then(_$RequestLocationServiceEventImpl( retry: null == retry ? _value.retry : retry // ignore: cast_nullable_to_non_nullable @@ -435,8 +437,8 @@ class __$$RequestLocationServiceEventCopyWithImpl<$Res> /// @nodoc -class _$RequestLocationServiceEvent implements RequestLocationServiceEvent { - const _$RequestLocationServiceEvent({this.retry = 5}); +class _$RequestLocationServiceEventImpl implements RequestLocationServiceEvent { + const _$RequestLocationServiceEventImpl({this.retry = 5}); @override @JsonKey() @@ -451,7 +453,7 @@ class _$RequestLocationServiceEvent implements RequestLocationServiceEvent { bool operator ==(dynamic other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$RequestLocationServiceEvent && + other is _$RequestLocationServiceEventImpl && (identical(other.retry, retry) || other.retry == retry)); } @@ -461,9 +463,9 @@ class _$RequestLocationServiceEvent implements RequestLocationServiceEvent { @JsonKey(ignore: true) @override @pragma('vm:prefer-inline') - _$$RequestLocationServiceEventCopyWith<_$RequestLocationServiceEvent> - get copyWith => __$$RequestLocationServiceEventCopyWithImpl< - _$RequestLocationServiceEvent>(this, _$identity); + _$$RequestLocationServiceEventImplCopyWith<_$RequestLocationServiceEventImpl> + get copyWith => __$$RequestLocationServiceEventImplCopyWithImpl< + _$RequestLocationServiceEventImpl>(this, _$identity); @override @optionalTypeArgs @@ -549,31 +551,32 @@ class _$RequestLocationServiceEvent implements RequestLocationServiceEvent { abstract class RequestLocationServiceEvent implements LocationEvent { const factory RequestLocationServiceEvent({final int retry}) = - _$RequestLocationServiceEvent; + _$RequestLocationServiceEventImpl; int get retry; @JsonKey(ignore: true) - _$$RequestLocationServiceEventCopyWith<_$RequestLocationServiceEvent> + _$$RequestLocationServiceEventImplCopyWith<_$RequestLocationServiceEventImpl> get copyWith => throw _privateConstructorUsedError; } /// @nodoc -abstract class _$$RequestLocationPermissionEventCopyWith<$Res> { - factory _$$RequestLocationPermissionEventCopyWith( - _$RequestLocationPermissionEvent value, - $Res Function(_$RequestLocationPermissionEvent) then) = - __$$RequestLocationPermissionEventCopyWithImpl<$Res>; +abstract class _$$RequestLocationPermissionEventImplCopyWith<$Res> { + factory _$$RequestLocationPermissionEventImplCopyWith( + _$RequestLocationPermissionEventImpl value, + $Res Function(_$RequestLocationPermissionEventImpl) then) = + __$$RequestLocationPermissionEventImplCopyWithImpl<$Res>; @useResult $Res call({int retry}); } /// @nodoc -class __$$RequestLocationPermissionEventCopyWithImpl<$Res> - extends _$LocationEventCopyWithImpl<$Res, _$RequestLocationPermissionEvent> - implements _$$RequestLocationPermissionEventCopyWith<$Res> { - __$$RequestLocationPermissionEventCopyWithImpl( - _$RequestLocationPermissionEvent _value, - $Res Function(_$RequestLocationPermissionEvent) _then) +class __$$RequestLocationPermissionEventImplCopyWithImpl<$Res> + extends _$LocationEventCopyWithImpl<$Res, + _$RequestLocationPermissionEventImpl> + implements _$$RequestLocationPermissionEventImplCopyWith<$Res> { + __$$RequestLocationPermissionEventImplCopyWithImpl( + _$RequestLocationPermissionEventImpl _value, + $Res Function(_$RequestLocationPermissionEventImpl) _then) : super(_value, _then); @pragma('vm:prefer-inline') @@ -581,7 +584,7 @@ class __$$RequestLocationPermissionEventCopyWithImpl<$Res> $Res call({ Object? retry = null, }) { - return _then(_$RequestLocationPermissionEvent( + return _then(_$RequestLocationPermissionEventImpl( retry: null == retry ? _value.retry : retry // ignore: cast_nullable_to_non_nullable @@ -592,9 +595,9 @@ class __$$RequestLocationPermissionEventCopyWithImpl<$Res> /// @nodoc -class _$RequestLocationPermissionEvent +class _$RequestLocationPermissionEventImpl implements RequestLocationPermissionEvent { - const _$RequestLocationPermissionEvent({this.retry = 1}); + const _$RequestLocationPermissionEventImpl({this.retry = 1}); @override @JsonKey() @@ -609,7 +612,7 @@ class _$RequestLocationPermissionEvent bool operator ==(dynamic other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$RequestLocationPermissionEvent && + other is _$RequestLocationPermissionEventImpl && (identical(other.retry, retry) || other.retry == retry)); } @@ -619,9 +622,10 @@ class _$RequestLocationPermissionEvent @JsonKey(ignore: true) @override @pragma('vm:prefer-inline') - _$$RequestLocationPermissionEventCopyWith<_$RequestLocationPermissionEvent> - get copyWith => __$$RequestLocationPermissionEventCopyWithImpl< - _$RequestLocationPermissionEvent>(this, _$identity); + _$$RequestLocationPermissionEventImplCopyWith< + _$RequestLocationPermissionEventImpl> + get copyWith => __$$RequestLocationPermissionEventImplCopyWithImpl< + _$RequestLocationPermissionEventImpl>(this, _$identity); @override @optionalTypeArgs @@ -707,29 +711,32 @@ class _$RequestLocationPermissionEvent abstract class RequestLocationPermissionEvent implements LocationEvent { const factory RequestLocationPermissionEvent({final int retry}) = - _$RequestLocationPermissionEvent; + _$RequestLocationPermissionEventImpl; int get retry; @JsonKey(ignore: true) - _$$RequestLocationPermissionEventCopyWith<_$RequestLocationPermissionEvent> + _$$RequestLocationPermissionEventImplCopyWith< + _$RequestLocationPermissionEventImpl> get copyWith => throw _privateConstructorUsedError; } /// @nodoc -abstract class _$$LocationSetLatLngEventCopyWith<$Res> { - factory _$$LocationSetLatLngEventCopyWith(_$LocationSetLatLngEvent value, - $Res Function(_$LocationSetLatLngEvent) then) = - __$$LocationSetLatLngEventCopyWithImpl<$Res>; +abstract class _$$LocationSetLatLngEventImplCopyWith<$Res> { + factory _$$LocationSetLatLngEventImplCopyWith( + _$LocationSetLatLngEventImpl value, + $Res Function(_$LocationSetLatLngEventImpl) then) = + __$$LocationSetLatLngEventImplCopyWithImpl<$Res>; @useResult $Res call({LocationData locationData}); } /// @nodoc -class __$$LocationSetLatLngEventCopyWithImpl<$Res> - extends _$LocationEventCopyWithImpl<$Res, _$LocationSetLatLngEvent> - implements _$$LocationSetLatLngEventCopyWith<$Res> { - __$$LocationSetLatLngEventCopyWithImpl(_$LocationSetLatLngEvent _value, - $Res Function(_$LocationSetLatLngEvent) _then) +class __$$LocationSetLatLngEventImplCopyWithImpl<$Res> + extends _$LocationEventCopyWithImpl<$Res, _$LocationSetLatLngEventImpl> + implements _$$LocationSetLatLngEventImplCopyWith<$Res> { + __$$LocationSetLatLngEventImplCopyWithImpl( + _$LocationSetLatLngEventImpl _value, + $Res Function(_$LocationSetLatLngEventImpl) _then) : super(_value, _then); @pragma('vm:prefer-inline') @@ -737,7 +744,7 @@ class __$$LocationSetLatLngEventCopyWithImpl<$Res> $Res call({ Object? locationData = null, }) { - return _then(_$LocationSetLatLngEvent( + return _then(_$LocationSetLatLngEventImpl( locationData: null == locationData ? _value.locationData : locationData // ignore: cast_nullable_to_non_nullable @@ -748,8 +755,8 @@ class __$$LocationSetLatLngEventCopyWithImpl<$Res> /// @nodoc -class _$LocationSetLatLngEvent implements LocationSetLatLngEvent { - const _$LocationSetLatLngEvent({required this.locationData}); +class _$LocationSetLatLngEventImpl implements LocationSetLatLngEvent { + const _$LocationSetLatLngEventImpl({required this.locationData}); @override final LocationData locationData; @@ -763,7 +770,7 @@ class _$LocationSetLatLngEvent implements LocationSetLatLngEvent { bool operator ==(dynamic other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$LocationSetLatLngEvent && + other is _$LocationSetLatLngEventImpl && (identical(other.locationData, locationData) || other.locationData == locationData)); } @@ -774,9 +781,9 @@ class _$LocationSetLatLngEvent implements LocationSetLatLngEvent { @JsonKey(ignore: true) @override @pragma('vm:prefer-inline') - _$$LocationSetLatLngEventCopyWith<_$LocationSetLatLngEvent> get copyWith => - __$$LocationSetLatLngEventCopyWithImpl<_$LocationSetLatLngEvent>( - this, _$identity); + _$$LocationSetLatLngEventImplCopyWith<_$LocationSetLatLngEventImpl> + get copyWith => __$$LocationSetLatLngEventImplCopyWithImpl< + _$LocationSetLatLngEventImpl>(this, _$identity); @override @optionalTypeArgs @@ -862,12 +869,13 @@ class _$LocationSetLatLngEvent implements LocationSetLatLngEvent { abstract class LocationSetLatLngEvent implements LocationEvent { const factory LocationSetLatLngEvent( - {required final LocationData locationData}) = _$LocationSetLatLngEvent; + {required final LocationData locationData}) = + _$LocationSetLatLngEventImpl; LocationData get locationData; @JsonKey(ignore: true) - _$$LocationSetLatLngEventCopyWith<_$LocationSetLatLngEvent> get copyWith => - throw _privateConstructorUsedError; + _$$LocationSetLatLngEventImplCopyWith<_$LocationSetLatLngEventImpl> + get copyWith => throw _privateConstructorUsedError; } /// @nodoc @@ -949,11 +957,11 @@ class _$LocationStateCopyWithImpl<$Res, $Val extends LocationState> } /// @nodoc -abstract class _$$_LocationStateCopyWith<$Res> +abstract class _$$LocationStateImplCopyWith<$Res> implements $LocationStateCopyWith<$Res> { - factory _$$_LocationStateCopyWith( - _$_LocationState value, $Res Function(_$_LocationState) then) = - __$$_LocationStateCopyWithImpl<$Res>; + factory _$$LocationStateImplCopyWith( + _$LocationStateImpl value, $Res Function(_$LocationStateImpl) then) = + __$$LocationStateImplCopyWithImpl<$Res>; @override @useResult $Res call( @@ -966,11 +974,11 @@ abstract class _$$_LocationStateCopyWith<$Res> } /// @nodoc -class __$$_LocationStateCopyWithImpl<$Res> - extends _$LocationStateCopyWithImpl<$Res, _$_LocationState> - implements _$$_LocationStateCopyWith<$Res> { - __$$_LocationStateCopyWithImpl( - _$_LocationState _value, $Res Function(_$_LocationState) _then) +class __$$LocationStateImplCopyWithImpl<$Res> + extends _$LocationStateCopyWithImpl<$Res, _$LocationStateImpl> + implements _$$LocationStateImplCopyWith<$Res> { + __$$LocationStateImplCopyWithImpl( + _$LocationStateImpl _value, $Res Function(_$LocationStateImpl) _then) : super(_value, _then); @pragma('vm:prefer-inline') @@ -983,7 +991,7 @@ class __$$_LocationStateCopyWithImpl<$Res> Object? serviceEnabled = null, Object? loading = null, }) { - return _then(_$_LocationState( + return _then(_$LocationStateImpl( latitude: freezed == latitude ? _value.latitude : latitude // ignore: cast_nullable_to_non_nullable @@ -1012,8 +1020,8 @@ class __$$_LocationStateCopyWithImpl<$Res> /// @nodoc -class _$_LocationState extends _LocationState { - const _$_LocationState( +class _$LocationStateImpl extends _LocationState { + const _$LocationStateImpl( {this.latitude, this.longitude, this.accuracy, @@ -1047,7 +1055,7 @@ class _$_LocationState extends _LocationState { bool operator ==(dynamic other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$_LocationState && + other is _$LocationStateImpl && (identical(other.latitude, latitude) || other.latitude == latitude) && (identical(other.longitude, longitude) || @@ -1074,8 +1082,8 @@ class _$_LocationState extends _LocationState { @JsonKey(ignore: true) @override @pragma('vm:prefer-inline') - _$$_LocationStateCopyWith<_$_LocationState> get copyWith => - __$$_LocationStateCopyWithImpl<_$_LocationState>(this, _$identity); + _$$LocationStateImplCopyWith<_$LocationStateImpl> get copyWith => + __$$LocationStateImplCopyWithImpl<_$LocationStateImpl>(this, _$identity); } abstract class _LocationState extends LocationState { @@ -1085,7 +1093,7 @@ abstract class _LocationState extends LocationState { final double? accuracy, final dynamic hasPermissions, final bool serviceEnabled, - final bool loading}) = _$_LocationState; + final bool loading}) = _$LocationStateImpl; const _LocationState._() : super._(); @override @@ -1102,6 +1110,6 @@ abstract class _LocationState extends LocationState { bool get loading; @override @JsonKey(ignore: true) - _$$_LocationStateCopyWith<_$_LocationState> get copyWith => + _$$LocationStateImplCopyWith<_$LocationStateImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/packages/digit_components/lib/models/digit_row_card/digit_row_card_model.freezed.dart b/packages/digit_components/lib/models/digit_row_card/digit_row_card_model.freezed.dart index c31f3df0b..ea1933aff 100644 --- a/packages/digit_components/lib/models/digit_row_card/digit_row_card_model.freezed.dart +++ b/packages/digit_components/lib/models/digit_row_card/digit_row_card_model.freezed.dart @@ -74,22 +74,22 @@ class _$DigitRowCardModelCopyWithImpl<$Res, $Val extends DigitRowCardModel> } /// @nodoc -abstract class _$$_DigitRowCardModelCopyWith<$Res> +abstract class _$$DigitRowCardModelImplCopyWith<$Res> implements $DigitRowCardModelCopyWith<$Res> { - factory _$$_DigitRowCardModelCopyWith(_$_DigitRowCardModel value, - $Res Function(_$_DigitRowCardModel) then) = - __$$_DigitRowCardModelCopyWithImpl<$Res>; + factory _$$DigitRowCardModelImplCopyWith(_$DigitRowCardModelImpl value, + $Res Function(_$DigitRowCardModelImpl) then) = + __$$DigitRowCardModelImplCopyWithImpl<$Res>; @override @useResult $Res call({String label, String value, bool isSelected}); } /// @nodoc -class __$$_DigitRowCardModelCopyWithImpl<$Res> - extends _$DigitRowCardModelCopyWithImpl<$Res, _$_DigitRowCardModel> - implements _$$_DigitRowCardModelCopyWith<$Res> { - __$$_DigitRowCardModelCopyWithImpl( - _$_DigitRowCardModel _value, $Res Function(_$_DigitRowCardModel) _then) +class __$$DigitRowCardModelImplCopyWithImpl<$Res> + extends _$DigitRowCardModelCopyWithImpl<$Res, _$DigitRowCardModelImpl> + implements _$$DigitRowCardModelImplCopyWith<$Res> { + __$$DigitRowCardModelImplCopyWithImpl(_$DigitRowCardModelImpl _value, + $Res Function(_$DigitRowCardModelImpl) _then) : super(_value, _then); @pragma('vm:prefer-inline') @@ -99,7 +99,7 @@ class __$$_DigitRowCardModelCopyWithImpl<$Res> Object? value = null, Object? isSelected = null, }) { - return _then(_$_DigitRowCardModel( + return _then(_$DigitRowCardModelImpl( label: null == label ? _value.label : label // ignore: cast_nullable_to_non_nullable @@ -119,12 +119,12 @@ class __$$_DigitRowCardModelCopyWithImpl<$Res> /// @nodoc @JsonSerializable(explicitToJson: true) -class _$_DigitRowCardModel implements _DigitRowCardModel { - const _$_DigitRowCardModel( +class _$DigitRowCardModelImpl implements _DigitRowCardModel { + const _$DigitRowCardModelImpl( {required this.label, required this.value, this.isSelected = false}); - factory _$_DigitRowCardModel.fromJson(Map json) => - _$$_DigitRowCardModelFromJson(json); + factory _$DigitRowCardModelImpl.fromJson(Map json) => + _$$DigitRowCardModelImplFromJson(json); @override final String label; @@ -143,7 +143,7 @@ class _$_DigitRowCardModel implements _DigitRowCardModel { bool operator ==(dynamic other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$_DigitRowCardModel && + other is _$DigitRowCardModelImpl && (identical(other.label, label) || other.label == label) && (identical(other.value, value) || other.value == value) && (identical(other.isSelected, isSelected) || @@ -157,13 +157,13 @@ class _$_DigitRowCardModel implements _DigitRowCardModel { @JsonKey(ignore: true) @override @pragma('vm:prefer-inline') - _$$_DigitRowCardModelCopyWith<_$_DigitRowCardModel> get copyWith => - __$$_DigitRowCardModelCopyWithImpl<_$_DigitRowCardModel>( + _$$DigitRowCardModelImplCopyWith<_$DigitRowCardModelImpl> get copyWith => + __$$DigitRowCardModelImplCopyWithImpl<_$DigitRowCardModelImpl>( this, _$identity); @override Map toJson() { - return _$$_DigitRowCardModelToJson( + return _$$DigitRowCardModelImplToJson( this, ); } @@ -173,10 +173,10 @@ abstract class _DigitRowCardModel implements DigitRowCardModel { const factory _DigitRowCardModel( {required final String label, required final String value, - final bool isSelected}) = _$_DigitRowCardModel; + final bool isSelected}) = _$DigitRowCardModelImpl; factory _DigitRowCardModel.fromJson(Map json) = - _$_DigitRowCardModel.fromJson; + _$DigitRowCardModelImpl.fromJson; @override String get label; @@ -186,6 +186,6 @@ abstract class _DigitRowCardModel implements DigitRowCardModel { bool get isSelected; @override @JsonKey(ignore: true) - _$$_DigitRowCardModelCopyWith<_$_DigitRowCardModel> get copyWith => + _$$DigitRowCardModelImplCopyWith<_$DigitRowCardModelImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/packages/digit_components/lib/models/digit_row_card/digit_row_card_model.g.dart b/packages/digit_components/lib/models/digit_row_card/digit_row_card_model.g.dart index a23a338a4..7a74a3e2b 100644 --- a/packages/digit_components/lib/models/digit_row_card/digit_row_card_model.g.dart +++ b/packages/digit_components/lib/models/digit_row_card/digit_row_card_model.g.dart @@ -6,15 +6,16 @@ part of 'digit_row_card_model.dart'; // JsonSerializableGenerator // ************************************************************************** -_$_DigitRowCardModel _$$_DigitRowCardModelFromJson(Map json) => - _$_DigitRowCardModel( +_$DigitRowCardModelImpl _$$DigitRowCardModelImplFromJson( + Map json) => + _$DigitRowCardModelImpl( label: json['label'] as String, value: json['value'] as String, isSelected: json['isSelected'] as bool? ?? false, ); -Map _$$_DigitRowCardModelToJson( - _$_DigitRowCardModel instance) => +Map _$$DigitRowCardModelImplToJson( + _$DigitRowCardModelImpl instance) => { 'label': instance.label, 'value': instance.value, diff --git a/packages/digit_components/lib/theme/digit_theme.dart b/packages/digit_components/lib/theme/digit_theme.dart index 1ab6c19a6..8026a823e 100644 --- a/packages/digit_components/lib/theme/digit_theme.dart +++ b/packages/digit_components/lib/theme/digit_theme.dart @@ -99,7 +99,7 @@ class DigitTheme { OutlinedButtonThemeData get outlinedButtonTheme => OutlinedButtonThemeData( style: OutlinedButton.styleFrom( foregroundColor: colorScheme.secondary, - // side: BorderSide(color: colorScheme.secondary), + side: BorderSide(color: colorScheme.secondary), padding: buttonPadding, ), ); diff --git a/packages/digit_components/lib/widgets/atoms/digit_outline_icon_button.dart b/packages/digit_components/lib/widgets/atoms/digit_outline_icon_button.dart index 0a3e8ccab..cc4a10ebb 100644 --- a/packages/digit_components/lib/widgets/atoms/digit_outline_icon_button.dart +++ b/packages/digit_components/lib/widgets/atoms/digit_outline_icon_button.dart @@ -24,20 +24,23 @@ class DigitOutlineIconButton extends StatelessWidget { return OutlinedButton( onPressed: onPressed, style: buttonStyle, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Flexible( - child: Icon( - icon, - color: iconColor, - )), - const SizedBox(width: kPadding), - Text( - label, - style: textStyle, - ), - ], + child: Padding( + padding: const EdgeInsets.all(kPadding / 2), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Flexible( + child: Icon( + icon, + color: iconColor, + )), + const SizedBox(width: kPadding), + Text( + label, + style: textStyle, + ), + ], + ), ), ); }