Fix Prism QuickCheck ContractModel failing test case

Summary
The “Quickcheck ContractModel” test case of Spec.Prism fails.
There might be other failing test scenarios, but here’s how to reproduce the problem.
Steps to reproduce the behavior
Use the following test case:
tests :: TestTree
tests =
  testGroup "sealed bid auction"
    [
      testProperty "QuickCheck property" $ withMaxSuccess 1 $ forAllDL fixedTestCase prop_Prism
    ]
 where
    fixedTestCase = do
        action $ Issue w4
        action $ Call w4
        action $ Call w4
        action $ Call w4
        action $ Call w4
        action $ Call w4
        action $ Call w4
        action $ Call w4
        action $ Call w4
        action $ Call w4
        action $ Call w4
        action $ Call w4

Actual Result
  PRISM
    withdraw:                 OK (1.83s)
    QuickCheck property:      Expected funds of W[4] to change by
  SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-110000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",110000000)])])}
but they changed by
  SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-100000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",100000000)])])}
a discrepancy of
  SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",10000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",-10000000)])])}
Expected funds of W[3] to change by
  SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",110000000)])])}
but they changed by
  SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",100000000)])])}
a discrepancy of
  SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-10000000)])])}
Test failed.
Emulator log:
[INFO] Slot 0: TxnValidate b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7
[INFO] Slot 1: 00000000-0000-4000-8000-000000000000 {Wallet W[2]}:
                 Contract instance started
[INFO] Slot 1: 00000000-0000-4000-8000-000000000000 {Wallet W[2]}:
                 Contract log: String "mirror started"
[INFO] Slot 1: 00000000-0000-4000-8000-000000000001 {Wallet W[1]}:
                 Contract instance started
[INFO] Slot 1: 00000000-0000-4000-8000-000000000000 {Wallet W[2]}:
                 Contract log: String "waiting for 'issue' call"
[INFO] Slot 1: 00000000-0000-4000-8000-000000000002 {Wallet W[4]}:
                 Contract instance started
[INFO] Slot 2: 00000000-0000-4000-8000-000000000000 {Wallet W[2]}:
                 Receive endpoint call on 'issue' for Object (fromList [("contents",Array [Object (fromList [("getEndpointDescription",String "issue")]),Object (fromList [("unEndpointValue",Object (fromList [("coOwner",Object (fromList [("getWalletId",String "5f5a4f5f465580a5500b9a9cede7f4e014a37ea8"),("pretty
WalletName",String "4")])),("coTokenName",Object (fromList [("unTokenName",String "KYC")]))]))])]),("tag",String "ExposeEndpointResp")])
[INFO] Slot 2: 00000000-0000-4000-8000-000000000000 {Wallet W[2]}:
                 Contract log: String "Endpoint 'issue' called"
[INFO] Slot 2: W[2]: Balancing an unbalanced transaction:
                       Tx:
                         Tx 0142e140f1b1abbfa27a9ae6d4a2777c05d3c2de548d88653dfa34b04874102d:
                           {inputs:
                           reference inputs:
                           collateral inputs:
                           outputs:
                             - Value (Map [(,Map [("",857690)])]) addressed to
                               PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                               with no datum
                               and with no reference script
                           mint: Value (Map [(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])])
                           fee: Value (Map [])
                           mps:
                             ( e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b
                             , <> )
                           signatures:
                           validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound PosInf True}
                           attached scripts:
                             e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b}
                       Requires signatures:
                         80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7
                       Utxo index:
[INFO] Slot 2: W[2]: Finished balancing:
                       Tx 037b4c903a3844f5f565d9510ed541dea00c45d29cd4bcfe7e275f9e7174affe:
                         {inputs:
                            - b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!20

                         reference inputs:
                         collateral inputs:
                           - b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!20

                         outputs:
                           - Value (Map [(,Map [("",857690)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script
                           - Value (Map [(,Map [("",9999999998831999)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script
                         mint: Value (Map [(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])])
                         fee: Value (Map [(,Map [("",310311)])])
                         validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound PosInf True}
                         data:
                         redeemers:}
[INFO] Slot 2: W[2]: Signing tx: 037b4c903a3844f5f565d9510ed541dea00c45d29cd4bcfe7e275f9e7174affe
[INFO] Slot 2: W[2]: Submitting tx: 037b4c903a3844f5f565d9510ed541dea00c45d29cd4bcfe7e275f9e7174affe
[INFO] Slot 2: W[2]: TxSubmit: 037b4c903a3844f5f565d9510ed541dea00c45d29cd4bcfe7e275f9e7174affe
[INFO] Slot 2: TxnValidate 037b4c903a3844f5f565d9510ed541dea00c45d29cd4bcfe7e275f9e7174affe
[WARNING] Slot 3: 00000000-0000-4000-8000-000000000000 {Wallet W[2]}:
                    Contract log: String "Plutus.Contract.StateMachine.runInitialise: Found a transaction output value with less than the minimum amount of Ada. Adjusting ..."
[INFO] Slot 3: W[2]: Balancing an unbalanced transaction:
                       Tx:
                         Tx 9d2a9a872117157b37d0b231035fc69a348ec9226496b18d3f43e454b523332b:
                           {inputs:
                           reference inputs:
                           collateral inputs:
                           outputs:
                             - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                               ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                               with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                               and with no reference script
                           mint: Value (Map [])
                           fee: Value (Map [])
                           mps:
                           signatures:
                           validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound PosInf True}
                           data:
                             ( 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                             , <> )}
                       Requires signatures:
                       Utxo index:
                         ( 037b4c903a3844f5f565d9510ed541dea00c45d29cd4bcfe7e275f9e7174affe!0
                         , - Value (Map [(,Map [("",857690)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script )
                         ( 037b4c903a3844f5f565d9510ed541dea00c45d29cd4bcfe7e275f9e7174affe!1
                         , - Value (Map [(,Map [("",9999999998831999)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script )
                         ( b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!21
                         , - Value (Map [(,Map [("",10000000000000000)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script )
                         ( b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!22
                         , - Value (Map [(,Map [("",10000000000000000)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script )
                         ( b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!23
                         , - Value (Map [(,Map [("",10000000000000000)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script )
                         ( b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!24
                         , - Value (Map [(,Map [("",10000000000000000)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script )
                         ( b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!25
                         , - Value (Map [(,Map [("",10000000000000000)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script )
                         ( b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!26
                         , - Value (Map [(,Map [("",10000000000000000)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script )
                         ( b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!27
                         , - Value (Map [(,Map [("",10000000000000000)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script )
                         ( b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!28
                         , - Value (Map [(,Map [("",10000000000000000)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script )
                         ( b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!29
                         , - Value (Map [(,Map [("",10000000000000000)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script )
[INFO] Slot 3: W[2]: Finished balancing:
                       Tx ed27f01a0efc0300312f05b9c292595d12f6064503247310fcdc69ceab4ba489:
                         {inputs:
                            - 037b4c903a3844f5f565d9510ed541dea00c45d29cd4bcfe7e275f9e7174affe!0

                            - 037b4c903a3844f5f565d9510ed541dea00c45d29cd4bcfe7e275f9e7174affe!1

                         reference inputs:
                         collateral inputs:
                           - 037b4c903a3844f5f565d9510ed541dea00c45d29cd4bcfe7e275f9e7174affe!0

                         outputs:
                           - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                             ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                             with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                             and with no reference script
                           - Value (Map [(,Map [("",9999999998325824)])]) addressed to
                             PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential)
                             with no datum
                             and with no reference script
                         mint: Value (Map [])
                         fee: Value (Map [(,Map [("",182925)])])
                         validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound PosInf True}
                         data:
                           ( 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                           , <> )
                         redeemers:}
[INFO] Slot 3: W[2]: Signing tx: ed27f01a0efc0300312f05b9c292595d12f6064503247310fcdc69ceab4ba489
[INFO] Slot 3: W[2]: Submitting tx: ed27f01a0efc0300312f05b9c292595d12f6064503247310fcdc69ceab4ba489
[INFO] Slot 3: W[2]: TxSubmit: ed27f01a0efc0300312f05b9c292595d12f6064503247310fcdc69ceab4ba489
[INFO] Slot 3: TxnValidate ed27f01a0efc0300312f05b9c292595d12f6064503247310fcdc69ceab4ba489
[INFO] Slot 4: 00000000-0000-4000-8000-000000000000 {Wallet W[2]}:
                 Contract log: String "waiting for 'issue' call"
[INFO] Slot 11: 00000000-0000-4000-8000-000000000002 {Wallet W[4]}:
                  Receive endpoint call on 'sto' for Object (fromList [("contents",Array [Object (fromList [("getEndpointDescription",String "sto")]),Object (fromList [("unEndpointValue",Object (fromList [("wCredential",Object (fromList [("credAuthority",Object (fromList [("unCredentialAuthority",Object (fromL
ist [("unPaymentPubKeyHash",Object (fromList [("getPubKeyHash",String "80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7")]))]))])),("credName",Object (fromList [("unTokenName",String "KYC")]))])),("wSTOAmount",Number 1.0e7),("wSTOIssuer",Object (fromList [("unPaymentPubKeyHash",Object (fromList [("getP
ubKeyHash",String "2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c")]))])),("wSTOTokenName",Object (fromList [("unTokenName",String "STO token")]))]))])]),("tag",String "ExposeEndpointResp")])
[INFO] Slot 11: W[4]: Balancing an unbalanced transaction:
                        Tx:
                          Tx 0d3cfe860493c26fd187a6b263cf96caef3d3a44eaa1912f0e5f3e7d0ab293d9:
                            {inputs:
                               - ed27f01a0efc0300312f05b9c292595d12f6064503247310fcdc69ceab4ba489!0
                                 <>
                            reference inputs:
                            collateral inputs:
                            outputs:
                              - Value (Map [(,Map [("",10000000)])]) addressed to
                                PubKeyCredential: 2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c (no staking credential)
                                with no datum
                                and with no reference script
                              - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                                ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                                with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                                and with no reference script
                            mint: Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])])
                            fee: Value (Map [])
                            mps:
                              ( a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37
                              , <> )
                            signatures:
                            validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound PosInf True}
                            data:
                              ( 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                              , <> )
                            attached scripts:
                              a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37
                              d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb}
                        Requires signatures:
                          557d23c0a533b4d295ac2dc14b783a7efc293bc23ede88a6fefd203d
                        Utxo index:
                          ( ed27f01a0efc0300312f05b9c292595d12f6064503247310fcdc69ceab4ba489!0
                          , - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                              ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                              with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                              and with no reference script )
[INFO] Slot 11: W[4]: Finished balancing:
                        Tx a0398a4be473888ec9eb4b192960d49f058b7033542bd68435022381e7d406bd:
                          {inputs:
                             - b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!10

                             - ed27f01a0efc0300312f05b9c292595d12f6064503247310fcdc69ceab4ba489!0

                          reference inputs:
                          collateral inputs:
                            - b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!10

                          outputs:
                            - Value (Map [(,Map [("",10000000)])]) addressed to
                              PubKeyCredential: 2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c (no staking credential)
                              with no datum
                              and with no reference script
                            - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                              ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                              with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                              and with no reference script
                            - Value (Map [(,Map [("",9999999989099803)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])]) addressed to
                              PubKeyCredential: 557d23c0a533b4d295ac2dc14b783a7efc293bc23ede88a6fefd203d (no staking credential)
                              with no datum
                              and with no reference script
                          mint: Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])])
                          fee: Value (Map [(,Map [("",900197)])])
                          validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound PosInf True}
                          data:
                            ( 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                            , <> )
                          redeemers:}
[INFO] Slot 11: W[4]: Signing tx: a0398a4be473888ec9eb4b192960d49f058b7033542bd68435022381e7d406bd
[INFO] Slot 11: W[4]: Submitting tx: a0398a4be473888ec9eb4b192960d49f058b7033542bd68435022381e7d406bd
[INFO] Slot 11: W[4]: TxSubmit: a0398a4be473888ec9eb4b192960d49f058b7033542bd68435022381e7d406bd
[INFO] Slot 11: TxnValidate a0398a4be473888ec9eb4b192960d49f058b7033542bd68435022381e7d406bd
[INFO] Slot 20: 00000000-0000-4000-8000-000000000002 {Wallet W[4]}:
                  Receive endpoint call on 'sto' for Object (fromList [("contents",Array [Object (fromList [("getEndpointDescription",String "sto")]),Object (fromList [("unEndpointValue",Object (fromList [("wCredential",Object (fromList [("credAuthority",Object (fromList [("unCredentialAuthority",Object (fromL
ist [("unPaymentPubKeyHash",Object (fromList [("getPubKeyHash",String "80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7")]))]))])),("credName",Object (fromList [("unTokenName",String "KYC")]))])),("wSTOAmount",Number 1.0e7),("wSTOIssuer",Object (fromList [("unPaymentPubKeyHash",Object (fromList [("getP
ubKeyHash",String "2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c")]))])),("wSTOTokenName",Object (fromList [("unTokenName",String "STO token")]))]))])]),("tag",String "ExposeEndpointResp")])

(MORE SIMILAR LOGS HERE)

[INFO] Slot 83: 00000000-0000-4000-8000-000000000002 {Wallet W[4]}:
                  Receive endpoint call on 'sto' for Object (fromList [("contents",Array [Object (fromList [("getEndpointDescription",String "sto")]),Object (fromList [("unEndpointValue",Object (fromList [("wCredential",Object (fromList [("credAuthority",Object (fromList [("unCredentialAuthority",Object (fromL
ist [("unPaymentPubKeyHash",Object (fromList [("getPubKeyHash",String "80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7")]))]))])),("credName",Object (fromList [("unTokenName",String "KYC")]))])),("wSTOAmount",Number 1.0e7),("wSTOIssuer",Object (fromList [("unPaymentPubKeyHash",Object (fromList [("getP
ubKeyHash",String "2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c")]))])),("wSTOTokenName",Object (fromList [("unTokenName",String "STO token")]))]))])]),("tag",String "ExposeEndpointResp")])
[INFO] Slot 83: W[4]: Balancing an unbalanced transaction:
                        Tx:
                          Tx 37b662b84d1cb3cfc72d22e2b5fb14b0719a29ff43756547e759c4333d189775:
                            {inputs:
                               - b83d0ee24c2805780f349f71dc4a5745a5d8c356a8fb07c91c45802080694e86!1
                                 <>
                            reference inputs:
                            collateral inputs:
                            outputs:
                              - Value (Map [(,Map [("",10000000)])]) addressed to
                                PubKeyCredential: 2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c (no staking credential)
                                with no datum
                                and with no reference script
                              - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                                ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                                with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                                and with no reference script
                            mint: Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])])
                            fee: Value (Map [])
                            mps:
                              ( a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37
                              , <> )
                            signatures:
                            validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound PosInf True}
                            data:
                              ( 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                              , <> )
                            attached scripts:
                              a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37
                              d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb}
                        Requires signatures:
                          557d23c0a533b4d295ac2dc14b783a7efc293bc23ede88a6fefd203d
                        Utxo index:
                          ( b83d0ee24c2805780f349f71dc4a5745a5d8c356a8fb07c91c45802080694e86!1
                          , - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                              ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                              with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                              and with no reference script )
[INFO] Slot 83: W[4]: Finished balancing:
                        Tx 09c94f8d5b0e00b08f95a96418e95eb8016396461cdd4fc6402c41a8d04938a0:
                          {inputs:
                             - b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!18

                             - b83d0ee24c2805780f349f71dc4a5745a5d8c356a8fb07c91c45802080694e86!1

                          reference inputs:
                          collateral inputs:
                            - b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!18

                          outputs:
                            - Value (Map [(,Map [("",10000000)])]) addressed to
                              PubKeyCredential: 2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c (no staking credential)
                              with no datum
                              and with no reference script
                            - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                              ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                              with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                              and with no reference script
                            - Value (Map [(,Map [("",9999999989099803)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])]) addressed to
                              PubKeyCredential: 557d23c0a533b4d295ac2dc14b783a7efc293bc23ede88a6fefd203d (no staking credential)
                              with no datum
                              and with no reference script
                          mint: Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])])
                          fee: Value (Map [(,Map [("",900197)])])
                          validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound PosInf True}
                          data:
                            ( 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                            , <> )
                          redeemers:}
[INFO] Slot 83: W[4]: Signing tx: 09c94f8d5b0e00b08f95a96418e95eb8016396461cdd4fc6402c41a8d04938a0
[INFO] Slot 83: W[4]: Submitting tx: 09c94f8d5b0e00b08f95a96418e95eb8016396461cdd4fc6402c41a8d04938a0
[INFO] Slot 83: W[4]: TxSubmit: 09c94f8d5b0e00b08f95a96418e95eb8016396461cdd4fc6402c41a8d04938a0
[INFO] Slot 83: TxnValidate 09c94f8d5b0e00b08f95a96418e95eb8016396461cdd4fc6402c41a8d04938a0
[INFO] Slot 92: 00000000-0000-4000-8000-000000000002 {Wallet W[4]}:
                  Receive endpoint call on 'sto' for Object (fromList [("contents",Array [Object (fromList [("getEndpointDescription",String "sto")]),Object (fromList [("unEndpointValue",Object (fromList [("wCredential",Object (fromList [("credAuthority",Object (fromList [("unCredentialAuthority",Object (fromL
ist [("unPaymentPubKeyHash",Object (fromList [("getPubKeyHash",String "80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7")]))]))])),("credName",Object (fromList [("unTokenName",String "KYC")]))])),("wSTOAmount",Number 1.0e7),("wSTOIssuer",Object (fromList [("unPaymentPubKeyHash",Object (fromList [("getP
ubKeyHash",String "2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c")]))])),("wSTOTokenName",Object (fromList [("unTokenName",String "STO token")]))]))])]),("tag",String "ExposeEndpointResp")])
[INFO] Slot 92: W[4]: Balancing an unbalanced transaction:
                        Tx:
                          Tx 746f0501ac1f455c42da27b1f6997b8f00e43a140c5fdda57909602e503bd3b7:
                            {inputs:
                               - 09c94f8d5b0e00b08f95a96418e95eb8016396461cdd4fc6402c41a8d04938a0!1
                                 <>
                            reference inputs:
                            collateral inputs:
                            outputs:
                              - Value (Map [(,Map [("",10000000)])]) addressed to
                                PubKeyCredential: 2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c (no staking credential)
                                with no datum
                                and with no reference script
                              - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                                ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                                with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                                and with no reference script
                            mint: Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])])
                            fee: Value (Map [])
                            mps:
                              ( a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37
                              , <> )
                            signatures:
                            validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound PosInf True}
                            data:
                              ( 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                              , <> )
                            attached scripts:
                              a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37
                              d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb}
                        Requires signatures:
                          557d23c0a533b4d295ac2dc14b783a7efc293bc23ede88a6fefd203d
                        Utxo index:
                          ( 09c94f8d5b0e00b08f95a96418e95eb8016396461cdd4fc6402c41a8d04938a0!1
                          , - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                              ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                              with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                              and with no reference script )
[INFO] Slot 92: W[4]: Finished balancing:
                        Tx 8a6f7886dcc55715b51ffcd1fba2f5b17107ce5a574e154d1b175ad2a9e16d09:
                          {inputs:
                             - 09c94f8d5b0e00b08f95a96418e95eb8016396461cdd4fc6402c41a8d04938a0!1

                             - b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!19

                          reference inputs:
                          collateral inputs:
                            - b45418acc3c57e0ce8e9f5426ad598dc726b929ded29efffcc40a1b0589ebca7!19

                          outputs:
                            - Value (Map [(,Map [("",10000000)])]) addressed to
                              PubKeyCredential: 2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c (no staking credential)
                              with no datum
                              and with no reference script
                            - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                              ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                              with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                              and with no reference script
                            - Value (Map [(,Map [("",9999999989103865)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])]) addressed to
                              PubKeyCredential: 557d23c0a533b4d295ac2dc14b783a7efc293bc23ede88a6fefd203d (no staking credential)
                              with no datum
                              and with no reference script
                          mint: Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])])
                          fee: Value (Map [(,Map [("",896135)])])
                          validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound PosInf True}
                          data:
                            ( 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                            , <> )
                          redeemers:}
[INFO] Slot 92: W[4]: Signing tx: 8a6f7886dcc55715b51ffcd1fba2f5b17107ce5a574e154d1b175ad2a9e16d09
[INFO] Slot 92: W[4]: Submitting tx: 8a6f7886dcc55715b51ffcd1fba2f5b17107ce5a574e154d1b175ad2a9e16d09
[INFO] Slot 92: W[4]: TxSubmit: 8a6f7886dcc55715b51ffcd1fba2f5b17107ce5a574e154d1b175ad2a9e16d09
[INFO] Slot 92: TxnValidate 8a6f7886dcc55715b51ffcd1fba2f5b17107ce5a574e154d1b175ad2a9e16d09
[INFO] Slot 101: 00000000-0000-4000-8000-000000000002 {Wallet W[4]}:
                   Receive endpoint call on 'sto' for Object (fromList [("contents",Array [Object (fromList [("getEndpointDescription",String "sto")]),Object (fromList [("unEndpointValue",Object (fromList [("wCredential",Object (fromList [("credAuthority",Object (fromList [("unCredentialAuthority",Object (from
List [("unPaymentPubKeyHash",Object (fromList [("getPubKeyHash",String "80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7")]))]))])),("credName",Object (fromList [("unTokenName",String "KYC")]))])),("wSTOAmount",Number 1.0e7),("wSTOIssuer",Object (fromList [("unPaymentPubKeyHash",Object (fromList [("get
PubKeyHash",String "2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c")]))])),("wSTOTokenName",Object (fromList [("unTokenName",String "STO token")]))]))])]),("tag",String "ExposeEndpointResp")])
[INFO] Slot 101: W[4]: Balancing an unbalanced transaction:
                         Tx:
                           Tx 4654818f0e5c83a87cebc3c0d37f7356be96664bb41d556df9351356050e796f:
                             {inputs:
                                - 8a6f7886dcc55715b51ffcd1fba2f5b17107ce5a574e154d1b175ad2a9e16d09!1
                                  <>
                             reference inputs:
                             collateral inputs:
                             outputs:
                               - Value (Map [(,Map [("",10000000)])]) addressed to
                                 PubKeyCredential: 2e0ad60c3207248cecd47dbde3d752e0aad141d6b8f81ac2c6eca27c (no staking credential)
                                 with no datum
                                 and with no reference script
                               - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                                 ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                                 with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                                 and with no reference script
                             mint: Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])])
                             fee: Value (Map [])
                             mps:
                               ( a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37
                               , <> )
                             signatures:
                             validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound PosInf True}
                             data:
                               ( 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                               , <> )
                             attached scripts:
                               a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37
                               d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb}
                         Requires signatures:
                           557d23c0a533b4d295ac2dc14b783a7efc293bc23ede88a6fefd203d
                         Utxo index:
                           ( 8a6f7886dcc55715b51ffcd1fba2f5b17107ce5a574e154d1b175ad2a9e16d09!1
                           , - Value (Map [(,Map [("",1180940)]),(e6a7105e5f382472b3a3ee07efd441aba67817d94c612c0ba240252b,Map [("KYC",1)])]) addressed to
                               ScriptCredential: d8f02fab69648d77a5a349cd7049e0342dc0f82e1405822e307f77cb (no staking credential)
                               with datum hash 923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec
                               and with no reference script )
[INFO] Slot 110: 00000000-0000-4000-8000-000000000003 {supercalifragilisticexpialidocious}:
                   Contract instance started
[INFO] Slot 110: 00000000-0000-4000-8000-000000000003 {supercalifragilisticexpialidocious}:
                   Receive endpoint call on 'register-token-env' for Object (fromList [("contents",Array [Object (fromList [("getEndpointDescription",String "register-token-env")]),Object (fromList [("unEndpointValue",Object (fromList [("0",Object (fromList [])),("1",Object (fromList [])),("10",Object (fromLis
t [])),("11",Object (fromList [])),("2",Object (fromList [])),("3",Object (fromList [])),("4",Object (fromList [])),("5",Object (fromList [])),("6",Object (fromList [])),("7",Object (fromList [])),("8",Object (fromList [])),("9",Object (fromList []))]))])]),("tag",String "ExposeEndpointResp")])
[INFO] Slot 110: 00000000-0000-4000-8000-000000000003 {supercalifragilisticexpialidocious}:
                   Contract instance stopped (no errors)
FAIL (776.10s)
      *** Failed! Assertion failed (after 1 test):
      DLScript
        [Do $ Issue (Wallet 4),
         Do $ Call (Wallet 4),
         Do $ Call (Wallet 4),
         Do $ Call (Wallet 4),
         Do $ Call (Wallet 4),
         Do $ Call (Wallet 4),
         Do $ Call (Wallet 4),
         Do $ Call (Wallet 4),
         Do $ Call (Wallet 4),
         Do $ Call (Wallet 4),
         Do $ Call (Wallet 4),
         Do $ Call (Wallet 4)]

      ModelState {_currentSlot = Slot {getSlot = 11}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map [
])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map
 [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 5,SymValue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (
Map [])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractState = PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 0}}
      ModelState {_currentSlot = Slot {getSlot = 20}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map [
])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-10000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = fromLis
t [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",10000000)])])}),(Wallet 5,SymVa
lue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",10000000)])])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractState
= PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 1}}
      ModelState {_currentSlot = Slot {getSlot = 29}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map [
])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-20000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",20000000)])])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = fromLis
t [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",20000000)])])}),(Wallet 5,SymVa
lue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",20000000)])])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractState
= PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 2}}
      ModelState {_currentSlot = Slot {getSlot = 38}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map [
])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-30000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",30000000)])])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = fromLis
t [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",30000000)])])}),(Wallet 5,SymVa
lue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",30000000)])])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractState
= PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 3}}
      ModelState {_currentSlot = Slot {getSlot = 47}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map [
])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-40000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",40000000)])])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = fromLis
t [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",40000000)])])}),(Wallet 5,SymVa
lue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",40000000)])])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractState
= PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 4}}
      ModelState {_currentSlot = Slot {getSlot = 56}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map [
])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-50000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",50000000)])])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = fromLis
t [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",50000000)])])}),(Wallet 5,SymVa
lue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",50000000)])])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractState
= PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 5}}
      ModelState {_currentSlot = Slot {getSlot = 65}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map [
])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-60000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",60000000)])])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = fromLis
t [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",60000000)])])}),(Wallet 5,SymVa
lue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",60000000)])])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractState
= PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 6}}
      ModelState {_currentSlot = Slot {getSlot = 74}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map [
])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-70000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",70000000)])])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = fromLis
t [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",70000000)])])}),(Wallet 5,SymVa
lue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",70000000)])])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractState
= PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 7}}
      ModelState {_currentSlot = Slot {getSlot = 83}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map [
])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-80000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",80000000)])])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = fromLis
t [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",80000000)])])}),(Wallet 5,SymVa
lue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",80000000)])])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractState
= PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 8}}
      ModelState {_currentSlot = Slot {getSlot = 92}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map [
])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-90000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",90000000)])])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = fromLis
t [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",90000000)])])}),(Wallet 5,SymVa
lue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",90000000)])])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractState
= PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 9}}
      ModelState {_currentSlot = Slot {getSlot = 101}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map
[])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-100000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",100000000)])])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = from
List [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",100000000)])])}),(Wallet 5,S
ymValue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",100000000)])])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractS
tate = PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 10}}
      ModelState {_currentSlot = Slot {getSlot = 110}, _balanceChanges = fromList [(Wallet 7,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 8,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 6,SymValue {symValMap = fromList [], actualValPart = Value (Map
[])}),(Wallet 4,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",-110000000)]),(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",110000000)])])}),(Wallet 2,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 1,SymValue {symValMap = from
List [], actualValPart = Value (Map [])}),(Wallet 10,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 9,SymValue {symValMap = fromList [], actualValPart = Value (Map [])}),(Wallet 3,SymValue {symValMap = fromList [], actualValPart = Value (Map [(,Map [("",110000000)])])}),(Wallet 5,S
ymValue {symValMap = fromList [], actualValPart = Value (Map [])})], _minted = SymValue {symValMap = fromList [], actualValPart = Value (Map [(a2cd943b598ae8eccd341e787d4405a7865a380444cc0bb96c321f37,Map [("STO token",110000000)])])}, _symTokens = fromList [], _assertions = [], _assertionsOk = True, _contractS
tate = PrismModel {_walletState = fromList [(Wallet 4,(Issued,STOReady))], _numberOfCalls = 11}}
      Use --quickcheck-replay=104393 to reproduce.
      Use -p '/QuickCheck property/' to rerun this test only.

Expected Result
Successful test case
Describe the approach you would take to fix this
No response
System info
plutus-apps: 49a3c5abf0a872ad67db7372c1f5b05bc6985acf

It's probably an off by one error: the contract makes 11 Call actions, while we only have enough ada for 10. It should be checked by the precondition, I'm fixing it.

Fixed in https://github.com/input-output-hk/plutus-apps/pull/777


Scenario-01 fails for IS 5.5.0

Description:
In "[Test - H.P] Go to Travelocity test case" the text response assertion fails due to updated consent page in IS 5.5.0. We need to modify the test case accordingly.

Suggested Labels:
Severity/Blocker, Priority/High
Affected Product Version:
IS 5.5.0

Fixed with https://github.com/wso2-incubator/identity-test-integration/pull/245

Fix is given. Hence, closing. Please reopen if this is reproduced again


PHPCast: No song playing getPlaying API request returns a 500 error.

When there is no song playing the getPlaying API endpoint constantly reports a 500 error. This needs to be handled where the response will explain that there is no song playing.

This issue has now been fixed and now has been rolled out.


[Desktop]ReorderableListView has abnormal shadow

Reordering animation looks awkward and a dragging cell shadow is huge when running web app on Chrome.

The code is as simple as this:
List<String> _list = ["Apple", "Ball", "Cat", "Dog", "Elephant"];
    return Scaffold(
      appBar: AppBar(),
      body: ReorderableListView(
        children: _list
            .map((item) => ListTile(
                  key: Key("${item}"),
                  title: Text("${item}"),
                  trailing: Icon(Icons.menu),
                ))
            .toList(),
        onReorder: (int start, int current) {
          // dragging from top to bottom
          if (start < current) {
            int end = current - 1;
            String startItem = _list[start];
            int i = 0;
            int local = start;
            do {
              _list[local] = _list[++local];
              i++;
            } while (i < end - start);
            _list[end] = startItem;
          }
          // dragging from bottom to top
          else if (start > current) {
            String startItem = _list[start];
            for (int i = start; i > current; i--) {
              _list[i] = _list[i - 1];
            }
            _list[current] = startItem;
          }
          // setState(() {});
        },
      ),
    );

flutter doctor output:
[✓] Flutter (Channel dev, v1.14.6, on Mac OS X 10.15.2 19C57, locale en-RU)
    • Flutter version 1.14.6 at /Users/andrey/flutter
    • Framework revision fabeb2a16f (4 days ago), 2020-01-28 07:56:51 -0800
    • Engine revision c4229bfbba
    • Dart version 2.8.0 (build 2.8.0-dev.5.0 fc3af737c7)

[!] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /Users/andrey/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • ANDROID_HOME = /Users/andrey/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
    ! Some Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses

[✓] Xcode - develop for iOS and macOS (Xcode 11.3.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.3.1, Build version 11C504
    • CocoaPods version 1.8.4

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[!] Android Studio (version 3.5)
    • Android Studio at /Applications/Android Studio.app/Contents
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[✓] VS Code (version 1.41.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.8.0

[✓] Connected device (2 available)
    • Chrome     • chrome     • web-javascript • Google Chrome 79.0.3945.130
    • Web Server • web-server • web-javascript • Flutter Tools

The need to pull down too far before reordering (as opposed to animation when pulling up) - true for android as well

I'm removing the web label because this is a general desktop design issue (you want higher density on the desktop)
/cc @HansMuller

Huge shadow problem is true for web only.

@agordeev, I am not able to reproduce the abnormal shadow on the Web, The shadow seems to be consistent on Desktop and mobile platforms.  Please see the below output.
https://user-images.githubusercontent.com/31410839/166667520-296f6aa8-4fc5-4af1-91fd-f5b450858055.mov

flutter doctor -v (mac)
[✓] Flutter (Channel stable, 2.10.5, on macOS 12.3 21E230 darwin-arm, locale en-IN)
    • Flutter version 2.10.5 at /Users/mahesh/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 5464c5bac7 (12 hours ago), 2022-04-18 09:55:37 -0700
    • Engine revision 57d3bac3dd
    • Dart version 2.16.2
    • DevTools version 2.9.2

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-32, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.10.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.65.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.39.20220405

[✓] Connected device (4 available)
    • Redmi K20 Pro (mobile) • <IP_ADDRESS>:55555                    • android-arm64  • Android 11 (API 30)
    • iPhone 12 Pro (mobile) • 535317A4-921C-488F-B234-C2CC6D4AE5A1 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 12.3 21E230 darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome 100.0.4896.88

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

[✓] Flutter (Channel master, 2.13.0-0.0.pre.808, on macOS 12.3 21E230 darwin-arm, locale en-IN)
    • Flutter version 2.13.0-0.0.pre.808 at /Users/mahesh/Documents/flutter_master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 2eed8cbf93 (4 days ago), 2022-04-28 22:29:06 -0400
    • Engine revision dfdfe0b3b0
    • Dart version 2.18.0 (build 2.18.0-66.0.dev)
    • DevTools version 2.12.2

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-32, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    ! CocoaPods 1.10.2 out of date (1.11.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.66.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.40.0

[✓] Connected device (3 available)
    • Redmi K20 Pro (mobile) • <IP_ADDRESS>:5555 • android-arm64  • Android 11 (API 30)
    • macOS (desktop)        • macos            • darwin-arm64   • macOS 12.3 21E230 darwin-arm
    • Chrome (web)           • chrome           • web-javascript • Google Chrome 100.0.4896.127

[✓] HTTP Host Availability
    • All required HTTP hosts are available

! Doctor found issues in 1 category.

The issue was reported 2 years ago :) Closing this as outdated.

If anyone reencounters this issue, feel free to file a new issue and we would love to take a look.


Could you explain the principle behind streaming?

It looks like streaming supporting global index in getitem(), so how could it accelerate data loading for large-scale sharded data? I mean, if the data index is global, the training loader must access each shards randomly. What's the implementation difference compared with webdataset?
Of course, it's an awesome project and I am learning to use it.

Random access is available if you need it (e.g. for data inspection), but won't be performant.
What is performant are the node-aware, shard-aware shuffling algorithms. It's an IterableDataset, so you rely on __iter__.
See method _get_work here: https://github.com/mosaicml/streaming/blob/e2d0431c35e4a2fa9435edbe0f432f6c933f75ad/streaming/base/dataset.py#L753

So you mean, to achieve excellent performance, I need to rewrite __iter__() instead of __getitem__()?
However, I found all examples are based on __getitem__() (https://docs.mosaicml.com/projects/streaming/en/stable/getting_started/user_guide.html#, https://docs.mosaicml.com/projects/streaming/en/stable/examples/facesynthetics.html)
What should I do to use the node-aware, shard-aware shuffling algorithms? Do you know if there are any examples?

We provide both __getitem__ and __iter__ for you. __iter__ is very complicated and is the reason for StreamingDataset to exist. __getitem__ provides numpy array-style indexing, and calls get_item per individual sample. If you used custom data types in your streaming dataset, you would subclass StreamingDataset overriding get_item to do your custom data type deserialization.
You get __iter__'s fancy shuffling by default by doing nothing, but can configure it manually via arguments to StreamingDataset like shuffle_algo.

Thanks a lot for your kind response. Do you mean I just need to override __getitem__ and StreamingDataset do all the rest to achieve __iter__?
Sounds cool!

Yes, if you rolled your own data types.
If our collection of built-in data types was enough for your dataset, you don't have to do anything at all.
For example, here is the do-nothing ImageNet streaming dataset:

Writing: https://github.com/mosaicml/streaming/blob/main/streaming/vision/convert/imagenet.py
Reading: https://github.com/mosaicml/streaming/blob/main/streaming/vision/imagenet.py

This is actually what I need! Since iterable dataset tools like webdataset are hard to learn from scratch. You make everything much simple!
I will build MDS files for my own dataset.

Good luck, and be sure to be very mindful about shuffling (including globally pre-shuffling before writing the shards) as convergence can be very sensitive to it.
Also there are other features that aren't really advertised like weighting and mixing datasets together on the fly (streams).

BTW, for multiprocess dataset conversation, it may be easier to directly use torch.utils.data.Dataloader and set batch_size=1 with larger num_workers.

You can also convert to MDS using multiple nodes, by processing slices of the original dataset and concatenating the resulting streaming datasets afterward. A streaming dataset index file is just a listing of its shard files with essential metadata. They can be subsetted, rearranged, concatenated, etc. however you want.
root/
    index.json <- joint index file you create from all the parts
    part.00000/
        index.json
        shard.00000.mds
        ...
    part.00001/
        index.json
        ...
    ...

Hi @deeptimhe , closing this issue for now. Please feel free to re-open if the issue is not addressed. Thanks!


Restore d3.{mouse,touch,touches}; add d3.pointers.

Needs documentation (and tests, ideally).

I explicitly did not bring back the implicit pulling out of event.changedTouches[0] in d3.mouse, since that still feels too surprising.

Re: changedTouches it's nice to be able to query the position on touchend / dbltap. This is useful for example for a dbltap to launch a zoom at the right place in d3-zoom, as we do in https://github.com/d3/d3-zoom/blob/523ccff340187a3e3c044eaa4d4a7391ea97272b/src/zoom.js#L350

Re: changedTouches it's nice to be able to query the position on touchend / dbltap.

Not sure what you’re saying. Are you suggesting we want to call d3.mouse here and have it pull out event.changedTouches[0]?

Yes, I'd prefer to know where an event happened with d3.mouse(event). With the current proposal, on mouseup and pointerup events, d3.mouse return [x, y], but on touchend it returns [NaN, NaN].

It’s doesn’t make sense to call d3.mouse on a touch event, though; that’s not a mouse event. If the spec authors had thought it appropriate to give a TouchEvent a “primary” pointer, they would have put event.clientX and event.clientY properties on the TouchEvent. They didn’t, so it feels inappropriate for us to magically pull out the first changed touch, and it’s almost certainly an indication of a broken touch implementation if the caller were to do so (since it ignores the other touches).

I understand this choice on principles.
My point is that in practice this makes the "one-finger touch" case more difficult than necessary when you don't need fancy multitouch (for example https://observablehq.com/@d3/delaunay-find reacts on click and mousemove, but could get the "touchmove" for free if this worked). Also, it doesn't help with multitouch.
However, a good solution might be to use pointer events instead (https://observablehq.com/d/d86d69071bef1f76):
  .on("pointermove", event => draw(delaunay.find(...d3.pointer(event))))
  .on("touchstart", event => event.preventDefault())

could get the "touchmove" for free if this worked

Well, you already get touchmove for free because of emulated mouse events, albeit the emulated mousemove doesn’t occur until after the touch gesture ends.
And if you want to handle touchmove events directly, it’s never strictly free because you still have to explicitly listen for them (i.e. replacing .on("mousemove", …) with .on("mousemove touchmove", …). And so you could just be explicit about what you want to happen:
  .on("mousemove", (event, context) => draw(context, delaunay.find(...d3.pointer(event))))
  .on("touchmove", (event, context) => draw(context, delaunay.find(...d3.pointer(event.touches[0]))))

I think the “ideal” behavior for this particular example would be to plot multiple paths simultaneously if there are multiple touches. Something like:
  .on("mousemove", (event, context) => find(context, [d3.pointer(event)]))
  .on("touchmove", (event, context) => find(context, d3.pointers(event.touches)))

Obviously that’s trickier to do for the animation case, since you’d need to track concurrent animations, ideally for each touch independently. But my point is that you have a relatively easy way to just use a single touch, if that’s what you want. And I don’t think it’s a good idea for D3 to apply that logic for you automatically because it’s usually wrong.

That's a great start for a documentation!
Here's a different point of view, on d3.pointers, which might be less wrong than my previous argument on d3.mouse.
Let's say I've coded a "multitouch-first" draw function that expects (and reacts intelligently to) any number of pointers (mouse or touches). I really don't want to duplicate code, so I'm tempted to write:
selection.on("mousemove touchmove", event => draw(d3.pointers(event.touches || [event])))
or in a drag behavior:
drag.on("drag start", event =>   draw(d3.pointers(event.SourceEvent.touches || [event])))
Wouldn't it help if we could just call d3.pointers(event) everywhere?

Okay, I’m thinking about an alternative where d3.pointer does the sourceEvent traversal, and so does d3.pointers, but d3.pointers can also optionally take a TouchList directly, and if given a non-touch event, returns a single-element array. I think that would be reasonably straightforward and convenient. There’s the remaining question of whether we want a d3.touch method that pulls out the touch with a particular identifier, but I don’t expect that’s needed often so maybe it’s fine to remove. Also in some sense I think it’s better to not provide a non-backwards-compatible d3.mouse method because it’ll be more obvious that the code needs to be changed to upgrade.

Excellent! Yeah I don't think we need d3.touch(…identifier). At this level of detail one would work with the actual events (or with pointer events https://observablehq.com/@fil/pointer-events#trackPointer).
It will be much simpler to have to learn only d3.pointer (for single touch) and pointers (if multitouch is possible).

Closing in favor of #255.


Is this project running in Gitlab Ci with success?

Hello, im trying to configure Gitlab CI and i'm taking some ideas from this project.

It was running on Gilab CI, but we moved to AppVeyor because we OpenSourced it. Therefore Gitlab CI is not supported or maintained.

@veryhumble can you tell me what was the specs of the image that you used to run the gitlab ci runner?


[Bug]: Modify the column as the primary key and match two offline lines.

ODC version
ODC 4.2.4
OB version
OBMySQL
What happened?
Modify the column as the primary key and match two offline lines.

What did you expect to happen?
Matches only one
How can we reproduce it (as minimally and precisely as possible)?
ALTER TABLE test
MODIFY COLUMN a INT PRIMARY KEY;
Anything else we need to know?
No response
Cloud
No response

if table test's ddl is as follow:

the behavior is expected cause that the alter statement hit two offline rule:

modify column's data type, from varchar to int.
modify column a as primary key.

pass


Doc should highlight performance features

From my perspective, I'm mainly interested in a performant alternative to the standard multiprocessing. While the benchmark is attractive, the readme does not say what tricks in the package make it faster, and make what kind of things faster. The progress bar, insights, init and such are nice to haves but not related to performance.

Good point. I do refer to the blog post, but I'll add some more explanatory text about why it's faster and in what circumstances to the readme in the next update


Line Chart - Data series without label for each point

From the Line Chart documentation,
"The line chart requires an array of labels for each of the data points. This is show on the X axis."
I would like to be able to add a large set of data points to a line chart, but not have a label for each data point.  For instance, showing the months of the year on the x axis but having several data points between January and February.  I know the project is young, but would you agree this is a good direction to go?  I feel the x axis labels and data set should be decoupled.

+1 for this feature request

+1 this is a must be feature

+1

perhaps we should open a new issue as this one is closed

+1

I'll reopen

The pull request #521 sorts this issue out, can any of the collaborators take a look at it?

@Ehesp I'm going to merge once it can be automatically merged.  Looks Great!

I'v updated showXLabels with latest pull from Chart.js' latest master branch. Its in a separate branch "showXLabels" in my fork at: https://github.com/hay-wire/Chart.js/tree/showXLabels
A corresponding pull request has been raise at https://github.com/nnnick/Chart.js/pull/897.

Any progress on any of these PRs being merged into chart.js?

Almost 2 years since this issue was opened, and the showXLabels hack is still the best option we have? This avoids professional usage of this library, which is a pitty, since it looks pretty nice

:+1: to @trufa, thanks for the tip and it made my charts look less messy when doing large sets.

:8ball: any update on when will this be merged or available for use?

Looking for this solution as well. Thanks

My hack was similar to what mentioned by @trufa , which is replace label with "". But when dealing with large dataset , the label text will rotate even when we use "" to skip most of the labels.
To fix that, I checked the source code and found, we just need to slightly modify code in Chart.js
First locate to: function "calculateXLabelRotation"
and then  replace
//Allow 3 pixels x2 padding either side for label readability
var xGridWidth = Math.floor(this.calculateX(1) - this.calculateX(0)) - 6;

with
//Allow 3 pixels x2 padding either side for label readability
var _leftIndex = -1;
var _rightIndex = -1;
for (var i = 0; i < this.xLabels.length; i++) {
    if (_leftIndex < 0 && this.xLabels[i]) {
        _leftIndex = i;
        continue;
    }
    if (_leftIndex >= 0 && this.xLabels[i]) {
        _rightIndex = i;
        break;
    }
}
var xGridWidth = Math.floor(this.calculateX(_rightIndex) - this.calculateX(_leftIndex)) - 6;

Note: this hack only works when you show at least 2 labels and show labels periodically,
for example:  ["0", "", "", "","", "5", "", "", "", "","10"],  you show every 5th label.
Hope this can help someone who has the same issue.

 Chart.js is great but this is a huge limitation for displaying time series type data.

@qiaorancho comment is working for me, though unprofessional

+1

+1

I would love to see this merged...

+1

To provide an update on this, we are working towards solving this issue in the v2.0-dev branch. So far in that branch we've worked on tooltips, but our next big focus is to split the internal representation of x & y axes. Ultimately, we're planning to add support for an arbitrary linear x axis. We also plan to make it easier to support axis extensions so that adding something like a logarithmic axis does not require a new chart type.
At the moment there is no timeline for when v2.0 may be released and the code is not currently stable, but you can follow the progress in https://github.com/nnnick/Chart.js/tree/v2.0-dev

it's really helpful option :+1:

Huzzah! The first alpha of Chart.js 2.0 has landed and should fix this issue. Check out the release and try it out! We've got a lot of momentum right now, so please help us test so we can launch 2.0 Gold by the end of the month.
https://github.com/nnnick/Chart.js/releases/tag/v2.0-alpha

Could someone show a snippet of how to utilize the fix? I've tried to use hay-wire's pull and v2.0-alpha.
But I cannot seem to find how to activate it.
Regards,

@ehajri sync down the v2.0-dev branch then run the following commands:
npm install
gulp build
You can then use the Chart.js and Chart.min.js files.

@etimberg, how do I specify the number of displayed X labels?

@ehajri  We don't have a hard count on the number of labels. If you use a line chart in v2.0 it should behave exactly as a line chart in v1.0. We created the scatter chart that has a different x axis which dynamically adjusts the number of labels (not user settable at the moment). At the moment the x axis of the scatter chart only supports numerical data. We're going to write a date/time scale before 2.0 releases but it has not been done yet,
What kind of labels do you have? In the v2.0 config you can specify a user callback for each axis as
config: {
    scales: {
        xAxes: [{
            labels: {
                userCallback: function(tickValue, index, tickArray) { return "label string"},
           }
        }],
    }
}

You could return an empty string for no label. Does this help? Can you create a jsfiddle of your use case and I can try and give some better advice.

Guys It was sa irritating I did it using two solutions and adding my hack ;)

get @hay-wire solution Chart.js
modify @qiaorancho solution like this:

Replace
//Allow 3 pixels x2 padding either side for label readability
var xGridWidth = Math.floor(this.calculateX(1) - this.calculateX(0)) - 6;
With:
if(this.showXLabels === true || this.showXLabels === false)
var xGridWidth = Math.floor(this.calculateX(1) - this.calculateX(0)) - 6;
else{
var gap = Math.floor(this.xLabels.length/this.showXLabels);
var _leftIndex = -1;
var _rightIndex = -1;
for (var i = 0; i < this.xLabels.length; i=i+gap) {//dynamic gap between labels based on labels/showxlabels
if (_leftIndex < 0 && this.xLabels[i]) {
_leftIndex = i;
continue;
}
if (_leftIndex >= 0 && this.xLabels[i]) {
_rightIndex = i;
break;
}
}
var xGridWidth = Math.floor(this.calculateX(_rightIndex) - this.calculateX(_leftIndex)) - 6;
}
Now pass the option:
showXLabels,
to get requested nr of labels! Or you can leave it false and it works original way

The following snippet will hide labels automatically. By modify xLabels with empty string before invoke draw() and restore them after then. Even more, re-rotating x labels can be applied as there's more space after hiding.
var axisFixedDrawFn = function() {
	var self = this
	var widthPerXLabel = (self.width - self.xScalePaddingLeft - self.xScalePaddingRight) / self.xLabels.length
	var xLabelPerFontSize = self.fontSize / widthPerXLabel
	var xLabelStep = Math.ceil(xLabelPerFontSize)
	var xLabelRotationOld = null
	var xLabelsOld = null
	if (xLabelStep > 1) {
		var widthPerSkipedXLabel = (self.width - self.xScalePaddingLeft - self.xScalePaddingRight) / (self.xLabels.length / xLabelStep)
		xLabelRotationOld = self.xLabelRotation
		xLabelsOld = clone(self.xLabels)
		self.xLabelRotation = Math.asin(self.fontSize / widthPerSkipedXLabel) / Math.PI * 180
		for (var i = 0; i < self.xLabels.length; ++i) {
			if (i % xLabelStep != 0) {
				self.xLabels[i] = ''
			}
		}
	}
	Chart.Scale.prototype.draw.apply(self, arguments);
	if (xLabelRotationOld != null) {
		self.xLabelRotation = xLabelRotationOld
	}
	if (xLabelsOld != null) {
		self.xLabels = xLabelsOld
	}
};

Chart.types.Bar.extend({
	name : "AxisFixedBar",
	initialize : function(data) {
		Chart.types.Bar.prototype.initialize.apply(this, arguments);
		this.scale.draw = axisFixedDrawFn;
	}
});

Chart.types.Line.extend({
	name : "AxisFixedLine",
	initialize : function(data) {
		Chart.types.Line.prototype.initialize.apply(this, arguments);
		this.scale.draw = axisFixedDrawFn;
	}
});

Please notice that clone is an external dependency.
http://stackoverflow.com/a/32569127/837697

Any ideas when v2 will be out with this feature?

v2.0-dev already has multiple ways of achieving this.  Primarily, there is a built in auto-skip feature that will reduce labels as they overlap in most circumstances.  You can also override the labels via a userCallback function that is used in the core scale class, or even override the entire scale.ticks array with whatever you want in a hook function.  We're working on documentation for these new features right now.

how??

For those who are trying to get rid of the x-axis labels altogether, while retaining y-axis labels, I was able to achieve this with the following:

In chart data: labels: [""]
In chart options, add object.label = "ToolTipTitle"; before the line specifying the values that should be returned

Any word on where the documentation for this can be found?

Can you make the x axis time / date data with a scatter chart? I don't see anything in the docs about it.

+1, docs pls

If it's of any help, I get the desired effect of reducing the numbers of objects in the X label by adding the following line:
Chart.defaults.scale.ticks.autoSkipPadding = X;
Where X is the padding you want between the values (and it will create an empty space accordingly), try adjusting the X value so it suits your needs.

+1 It's a shame this feature request has been around for so long and nothing has been done.

@gentisaliu this is supported in v2 out of the box. See https://github.com/chartjs/Chart.js/blob/master/samples/scatter.html

Thanks, I missed that. I tested it and it works, however is there a way to control the number of displayed labels in the X axis, for instance I want to display at most 4 labels.

Awesome job and thank you all. Is this also supported on bar charts for a series of dates? I can't seem to make this work.

@etimberg But in that example the y-axis and x-axis still have the same amount of labels right? How to assign a desire amounts of labels for either x/y axis?

This question is now a couple of years old. Is there in the current version a better solution to achieve this? I can not seem to make this work. Or is there some documentation where I can find this?

What is the exact question? This is quite a thread with many questions/answers. As for the original question, you have a lot of control over labels in v2.x.x. Check out the callbacks in the scales documentation, afterTickToLabelConversion would probably best work or add a callback directly into the ticks configuration.

Use highcharts. i ended up doing the same.

I have the same problem. I am creating a chart by dynamically assigning value to both labels and dataset. But at certain point, label are not showing. label data is generating but not showing.

The use case I'm having (and I don't really see solved with any of the mentioned changes), is the following:
I have a dataset of 255 data samples. On my X axis though I only want to show 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90%, 100% as the labels. And, obviously, these labels don't really match an exact sample in my data array. They're somewhere in between. E.g. 0% = 0, 10% = 25.5, etc.
The simplest solution would be if chart.js would not match the labels with the samples in case of a line chart, but simply would draw the lines and then draw the labels independently below the chart.

+1
An suggestion can be that you place each unequal label a bit lower?
Like so:
L | L | L |  L
L   L   L

A good solution would be if each data-point could be an object or array and contain an optional label
Example:
datasets: [{
    data: [1,2,3,4,5,[6,'Special Label'],7,8,9,10,[11,'Yet another labeled point']
}]

Or somesuch.

@george-viaud you need close expression with ]


How do I upgrade to docking?

I tried to manually build the cimgui into ImGui.NET and nothing has worked. Can anybody please point me in the right direction. I just want to use the docking lib but this is so confusing to me. Im a complete noob with this sort of stuff so any help will be greatly appreciated.
Thanks

You do the same thing as in cpp version of ImGui.
Check out the docking branch and, if you're using Veldrid, add this to Veldrid.ImGui.ImGuiRenderer constructor:
ImGui.GetIO().ConfigFlags |= ImGuiConfigFlags.DockingEnable; // new

ImGui.NewFrame(); // old
_frameBegun = true;

If you are not using Veldrid then add it in equivalent place.

The latest version of the package is now using the docking branch by default: https://www.nuget.org/packages/ImGui.NET/1.78.0
Note that the docking feature is not enabled by default. Use this to enable it:
ImGui.GetIO().ConfigFlags |= ImGuiConfigFlags.DockingEnable;

How do we get the dock builder API though? Everything I find on the ImGui forums related to docking use the dockbuilder and I can't figure a lot of stuff out.

@mellinoe can you anwser @Thraka 's question? I am also wondering.


Remove entrypoint.sh and use PHP script as Docker's entrypoint

From https://github.com/johanvanhelden/gha-clover-test-coverage-check/pull/7#issuecomment-690669684

Fixed https://github.com/johanvanhelden/gha-clover-test-coverage-check/pull/7#issuecomment-691088706

Thank you very much!


Add Fri3d specific details

Added Fri3d boot logo
Updated Readme with Fri3d references
Added .DS_Store to .gitignore

I don't have permission, could you merge this @renzenicolai ? Or are some specific changes still needed?


SSH No Longer Functional After Install

After installing PiVPN, I can no longer access my Pi through SSH. Frustrated, I uninstalled it locally, and I still cannot access my Pi over SSH. FWIW, I did cancel the install half-way through the first time, as the Diffie-Hellman key generation was taking longer than expected. Could this be because of a firewall rule that was not removed? I can ping the machine, but SSH just times out.

It appears the device no longer has access to the internet; It cannot ping, nor can it download a new pkg list with apt-get update. I'll look into this more, but this might not be an issue with PiVPN. FWIW, netfilter-persistent had some configure error when I tried to reinstall openssh-server. Not sure if that has anything to do with the issue at hand.

Fixed, the settings appended to /etc/dhcpcd.conf were wrong, and were not removed on uninstall. This might want to be done.


AWS CodeStar source connection support

Added the ability to use AWS CodeStar connections, namely Bitbucket and Github. This has only been lightly tested with Bitbucket, so it would be definitely nice to try a redeploy of the OE site to make sure backwards compatibility isn't broken.
Needs more testing, but the initial idea seems workable.

@acarlton we also need to update the docs explaining the CodeStar connection manual setup process.

@acarlton we also need to update the docs explaining the CodeStar connection manual setup process.

I just added a section to the README.

@dylanvaughn In addition to testing a deploy of the OE site to make sure it still works with CodeCommit, it would be nice to run a test using GitHub as a source. I haven't tried that yet.


Update always-encrypted-database-engine.md

Hello,
I am recommending adding the following statement highlighted in bold:
This provides a separation between those who own the data and can view it, and those who manage the data but should have no access: on-premises database administrators, cloud database operators, or other high-privileged unauthorized users. As a result, Always Encrypted allows customers to securely store their sensitive data in the cloud, reducing the risk of data theft by malicious insiders. In addition, its worth noting that Always Encrypted provides extended data protection by not exposing any histogram data which is a data exposure area for system admins, cloud operators, and highly privileged accounts in traditional database deployments.
This something Microsoft is not highlighting as a security protection area being implemented when always encrypted feature is used. To clarify more, when a sensitive table is being audited against SELECT statements for example...an admin can partially by pass this by viewing histogram data instead of directly running SELECT statement. with always encrypted you are preventing totally the admin from viewing sensitive data.
I hope my point is clear.
Thanks and have a good day
Emad

Hi,
It's your call at the end, thanks for your response.


5_1_4 Canvas Oauth token issues

Describe the bug
I recently upgraded from Version_4_3_5 to Version_5_1_4 had ran into issues generating Canvas API tokens.
To Reproduce
Steps to reproduce the behavior:

Configure ontask with one entry in CANVAS_INFO_DICT (might be relevant for a second issue I ran into)
Attempt to send a new Canvas message

Expected behavior
A message is send
Additional context
I'll include a PR for review with a fix shortly (see #152)

The error has been detected and fixed in the next release. Thanks for the fix and the PR.

Release 5.2 fixed this issue


Support Letsencrypt wildcard certificates

Now that Letsencrypt finally supports wildcard certificates it would be nice to get wildcard support directly to the Kontena loadbalancer.
It's currently not even possible to use wildcard certificate manually imported certificates as the loadbalancer stack fails with the error:  [error] Psych::SyntaxError : (loadbalancer.yml): did not find expected alphabetic or numeric character while scanning an alias at line 16 column 18 Where that line is the subject line of the certificates using the *.domain.tld format.

It's currently not even possible to use wildcard certificate manually imported certificates as the loadbalancer stack fails with the error: [error] Psych::SyntaxError : (loadbalancer.yml): did not find expected alphabetic or numeric character while scanning an alias at line 16 column 18 Where that line is the subject line of the certificates using the *.domain.tld format.

That's a syntax error in the YAML, try quoting it:
certificates:
  subject: "*.example.com"

AFAIK wildcard certs should work, that's a separate bug if they do not.

Now that Letsencrypt finally supports wildcard certificates it would be nice to get wildcard support directly to the Kontena loadbalancer.

Not trivial to implement fully automated support for wildcard certs, because LE only issues wildcard certs for dns-01 challenges. We could support kontena certificate authorize --type dns-01 *.example.com if we upgraded to the ACMEv2 API, but that will require manual updating of the DNS TXT records for renewals. Automating dns-01 challenges would require integration with external DNS providers, which is a major task.
OTOH, wildcard certs wouldn't even be strictly necessary if the Kontena LE integration were further improved to make it much easier to deploy new services with new non-wildcard LE certificates: #1791 #2958

Here's a manual workaround:

Download certbot
Run certbot -d *.mywildcarddomain.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory certonly
Add the DNS TXT entry
Run kontena certificate import --key /etc/letsencrypt/live/mywildcarddomain.com/privkey.pem /etc/letsencrypt/live/mywildcarddomain.com/cert.pem
kontena stack upgrade <ingress stack> kontena/ingress-lb

The last step will work properly after https://github.com/kontena/kontena-stacks/pull/28 has been merged. Meanwhile you can copy the stack file from the pull request and use it to upgrade the load balancer.


Error in _internal/opengraph.html template

When I include the internal open graph template
{{- template "_internal/opengraph.html" . -}}
I got the following error:
 error calling partial: template: partials/opengraph.html:26:16: executing "partials/opengraph.html" at <.Params.videos>: can't evaluate field Params in type []interface {}
I checked out the source of the template and found:
https://github.com/gohugoio/hugo/blob/488631fe0abc3667355345c7eb98ba7a2204deb5/tpl/tplimpl/template_embedded.go#L208
{{ with .Params.videos }}
{{ range .Params.videos }}
  <meta property="og:video" content="{{ . | absURL }}" />
{{ end }}
{{ end }}

Shouldn't it be {{ range . }} instead of {{ range .Params.videos }}?
hugo version: v0.31.1

Shouldn't it be {{ range . }} instead of {{ range .Params.videos }}?

Yes. How that slipped into the source is a mystery.


factory-keys.rst: improve key explanations

Remove ambiguity in the documentation explaining the different keys. Adding explanation that the naming indicated where the public part is used. Also extending the documentation to indicate which part is being validated by the key.
Readiness

[x] Merge (pending reviews)
[ ] Merge after date or event
[ ] Draft

Overview
Why merge this PR? What does it solve?
Checklist
Optional. Add a 'x' to steps taken.
You can fill this out after opening the PR. "Did I..."

[X] Run spelling and grammar check, preferably with linter.
[X] Avoid changing any header associated with a link/reference.
[X] Step through instructions (or ask someone to do so).
[X] Review for wordiness
[X] Match tone and style of page/section.
[ ] Run make linkcheck.
[X] View HTML in a browser to check rendering.
[X] Use semantic newlines.
[ X follow best practices for commits.

[X] Descriptive title written in the imperative.
[X] Include brief overview of QA steps taken.
[X] Mention any related issues numbers.
[X] End message with sign off/DCO line (-s, --signoff).
[X] Sign commit with your gpg key (-S, --gpg-sign).
[X] Squash commits if needed.

[ ] Request PR review by a technical writer and at least one peer.

Comments
Any thing else that a maintainer/reviewer should know.
This could include potential issues, rational for approach, etc.

Docs for f39fa9c2290b0b2c2e1f893e3c23320f21d1392b are browsable at: https://ci.foundries.io/projects/fio-docs/builds/2056/docs/artifacts/html/index.html

Docs for f68700e942c439cc1c981ef8504c9fd57153cdf6 are browsable at: https://ci.foundries.io/projects/fio-docs/builds/2060/docs/artifacts/html/index.html


Fix doc of the type having generic superclass

For example, Channel::Buffered's doc:

I fixed it to:

#3616 is related problem, I know. Because two problems are occurred by same lines:
    when GenericInstanceType
      type.type_vars

It is just a bug because GenericInstanceType#type_vars returns no Array(String) but Hash(String, ASTNode)
I think we should not use Type#full_name for instance type because we already have nearly same processes such like GenericInstanceType#to_s_with_options and Type#type_to_html for GenericInstanceType. Type#full_name should only use for the title of doc page.

@MakeNowJust Looks good! Just make sure that the file is properly formatted :-)

@asterite Sorry, I missed crystal tool format.

@MakeNowJust Thank you! 💙